plugins {
    id 'java-library'
    id 'scala'
    id 'me.champeau.jmh' version '0.7.2'
}

archivesBaseName = 'i2p'

sourceSets {
    main {
        java {
            srcDir 'java/src'
            srcDir 'java/build/messages-src'
            exclude 'gnu/getopt'
            exclude 'gnu/gettext'
        }
        resources {
            srcDir 'java/src'
            include 'gnu/getopt/*.properties'
        }
    }
    test {
        java {
            srcDir 'java/test/junit'
            exclude 'net/i2p/AllCoreTests.java'
            exclude 'net/i2p/data/DataTestSuite.java'
            exclude 'net/i2p/data/i2cp/I2CPTestSuite.java'
            exclude {
                it.name.endsWith('IT.java')
            }
        }
        resources {
            srcDir 'java/test/resources'
        }
    }
    jmh {
        java {
            srcDir 'java/bench'
        }
    }
}

dependencies {
    api 'gnu.getopt:java-getopt:1.0.13'
    api 'org.gnu.gettext:libintl:0.18.3'

    if (project.hasProperty("with.jbigi")) {
        runtimeOnly project(path: ':installer', configuration: 'jbigi')
    }

    // don't use 2.12.4, stack overflow: https://github.com/sbt/zinc/issues/1010
    testImplementation "org.scala-lang:scala-library:2.12.5"
    testImplementation 'org.scalatest:scalatest_2.12:3.0.4'
}

if (System.getenv("TARGET_JAVA_HOME") == null && JavaVersion.current() != JavaVersion.VERSION_1_7) {
    sourceSets {
        test {
            scala {
                srcDir 'java/test/scalatest'
            }
        }
    }
    task scalaTest(dependsOn: ['testClasses'], type: JavaExec) {
        main = 'org.scalatest.tools.Runner'
        args = ['-R', 'build/classes/scala/test', '-o']
        classpath = sourceSets.test.runtimeClasspath
    }

    test.dependsOn scalaTest
}

// Create the java files from the po files. The jar task will compile them.
// This requires gettext 0.19 or higher.
// We don't support the "slow way"
task bundle {
    doLast {
        if (!(new File("$buildDir/classes/java/main/net/i2p/util/messages_de.class")).exists())
            println "core/java/bundle-messages.sh".execute().text
    }
}
jar.dependsOn bundle

jar {
    manifest {
        attributes 'Specification-Title': 'I2P Core API'
        attributes 'Implementation-Title': 'I2P Java Core API'
        attributes 'Main-Class': 'net.i2p.util.CommandLine'
    }
    from ('resources', {
        into "net/i2p/util/resources"
    })
}

configurations {
    tests
}
task testJar(type: Jar) {
    archiveBaseName = 'i2p-test'
    dependsOn classes
    from sourceSets.test.output
}
artifacts {
    tests testJar
}
