import org.jetbrains.kotlin.gradle.dsl.JvmTarget

description = 'Kotlin Standard Library JDK 8 extension'

apply plugin: 'kotlin'

RepoArtifacts.publish(project)
RepoArtifacts.sourcesJar(project)
RepoArtifacts.javadocJar(project)

dependencies {
    api project(':kotlin-stdlib')
    api project(':kotlin-stdlib-jdk7')
}

sourceSets {
    main {
        kotlin {
        }
    }
    test {
        kotlin {
        }
    }
    java9 {
        java {
            srcDir 'java9'
        }
    }
    moduleTest {
        java {
            srcDir 'moduleTest'
        }
    }
}

dependencies {
    moduleTestApi project(':kotlin-stdlib')
    moduleTestApi project(':kotlin-stdlib-jdk7')
    moduleTestCompileOnly project
    moduleTestApi RepoDependencies.kotlinTest(project, "junit")
    moduleTestApi "org.ow2.asm:asm:9.0"
}

jar {
    LibrariesCommon.manifestAttributes(project, manifest, 'Main', true)
    from sourceSets.java9.output
}

sourcesJar {
    from sourceSets.java9.allSource
}

artifacts {
    archives sourcesJar
    sources sourcesJar
}

compileKotlin {
    kotlinOptions.moduleName = project.name
}

compileTestKotlin {
}

LibrariesCommon.configureJava9Compilation(project, 'kotlin.stdlib.jdk8')

tasks.named("compileModuleTestJava", JavaCompile) {
    sourceCompatibility = JavaVersion.VERSION_1_9
    targetCompatibility = JavaVersion.VERSION_1_9
}

compileModuleTestKotlin {
    kotlinJavaToolchain.toolchain.use(JvmToolchain.getToolchainLauncherFor(project, JdkMajorVersion.JDK_11_0))
    compilerOptions.jvmTarget = JvmTarget.JVM_9
    compilerOptions.freeCompilerArgs = [ "-Xjdk-release=9" ]
}

check.dependsOn(tasks.register("moduleInfoTest", Test) {test ->
    test.dependsOn(moduleTestClasses)
    test.group = "verification"
    test.testClassesDirs = sourceSets.moduleTest.output.classesDirs
    test.classpath = files(sourceSets.moduleTest.runtimeClasspath, tasks.jar)
    test.javaLauncher.set(JvmToolchain.getToolchainLauncherFor(project, JdkMajorVersion.JDK_9_0))
    doFirst {
        test.systemProperty("stdlibJars", test.classpath.filter { it.name.contains('kotlin-stdlib') }.join(File.pathSeparator))
    }
})
