blob: 0bdd1d9410328ad95ccec32bc1db4368a149215e [file] [log] [blame] [edit]
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
ext.configureJavaOnlyJvm6Project = { Project project ->
project.tasks.withType(JavaCompile) {
sourceCompatibility = 1.6
targetCompatibility = 1.6
options.fork = true
options.forkOptions.javaHome = file(JDK_16)
}
}
List<String> tasksWithWarnings = (List<String>) rootProject.ext.get("tasksWithWarnings")
ext.configureJvm6Project = { Project project ->
project.configure(project) {
configurations {
sources
}
project.ext.jvmTarget = "1.6"
project.ext.javaHome = JDK_16
task sourcesJar(type: Jar, dependsOn: classes) {
classifier = 'sources'
from sourceSets.main.kotlin
}
configureJavaOnlyJvm6Project(project)
tasks.withType(project.compileKotlin.class) {
kotlinOptions.jdkHome = JDK_16
kotlinOptions.jvmTarget = "1.6"
}
test {
executable = "$JDK_16/bin/java"
}
}
if (!BuildPropertiesExtKt.getDisableWerror(project.kotlinBuildProperties)) {
project.tasks.withType(org.jetbrains.kotlin.gradle.dsl.KotlinCompile.class) { task ->
if (!tasksWithWarnings.contains(task.path)) {
task.kotlinOptions {
allWarningsAsErrors = true
freeCompilerArgs += "-Xsuppress-deprecated-jvm-target-warning"
}
}
}
}
}
ext.compileJava9Sources = { Project project, String moduleName, Collection<FileCollection> moduleOutputs = [project.sourceSets.main.output] ->
// module-info.java should be in java9 source set by convention
SourceDirectorySet java9SourceSet = project.sourceSets.java9.java
project.configurations.java9CompileClasspath.extendsFrom(project.configurations.compileClasspath)
project.tasks.getByName("compileJava9Java").configure { JavaCompile it ->
dependsOn(moduleOutputs)
it.sourceCompatibility = 1.9
it.targetCompatibility = 1.9
it.destinationDir = file("${java9SourceSet.outputDir}/META-INF/versions/9")
it.options.fork = true
it.options.forkOptions.javaHome = file(JDK_9)
it.options.sourcepath = files(java9SourceSet.srcDirs)
def compileClasspath = project.configurations.java9CompileClasspath
def objects = project.objects
doFirst {
def moduleFiles = objects.fileCollection().from(*moduleOutputs)
def modulePath = compileClasspath.filter { !(it in moduleFiles.files) }
options.compilerArgs = [
'--module-path', modulePath.asPath,
'--patch-module', "$moduleName=${moduleFiles.asPath}",
'-Xlint:-requires-transitive-automatic' // suppress automatic module transitive dependencies in kotlin.test
]
classpath = objects.fileCollection().from()
}
}
}
ext.manifestAttributes = { Manifest manifest, Project project, String component = null, boolean multiRelease = false ->
project.configure(manifest) {
attributes \
'Implementation-Vendor': 'JetBrains',
'Implementation-Title': project.archivesBaseName,
'Implementation-Version': project.buildNumber
if (component != null) {
attributes \
'Kotlin-Runtime-Component': component,
'Kotlin-Version': project.kotlinLanguageVersion
}
if (multiRelease) {
attributes \
'Multi-Release': 'true'
}
}
}
task preparePublication {
def properties = project.properties
assert project.version != 'unspecified'
Map<String, String> repositoryProviders = ['sonatype-nexus-staging' : 'sonatype', 'sonatype-nexus-snapshots' : 'sonatype']
project.ext.isRelease = !project.version.toString().contains('-SNAPSHOT')
String repo = properties["deployRepo"] ?: properties['deploy-repo']
String repoProvider = repositoryProviders.get(repo, repo)
project.ext.isSonatypePublish = repoProvider == 'sonatype'
project.ext.isSonatypeRelease = isSonatypePublish && isRelease
String deployRepoUrl = properties["deployRepoUrl"] ?: properties["deploy-url"]
String deployFolder = properties["deployRepoFolder"] != null ? "file://${rootProject.buildDir}/${properties["deployRepoFolder"]}" : null
String sonatypeSnapshotsUrl = (isSonatypePublish && !isRelease) ? "https://oss.sonatype.org/content/repositories/snapshots/" : null
String deployUrlFromParameters = deployRepoUrl ?: deployFolder ?: sonatypeSnapshotsUrl
project.ext.isDeployStagingRepoGenerationRequired = project.ext.isSonatypeRelease && deployUrlFromParameters == null
ext.repoUrl = deployUrlFromParameters ?: "file://${rootProject.buildDir}/repo"
logger.info("Deployment repository preliminary url: $repoUrl ($repoProvider)")
ext.username = properties["deployRepoUsername"] ?: properties["kotlin.${repoProvider}.user"]
ext.password = properties["deployRepoPassword"] ?: properties["kotlin.${repoProvider}.password"]
doLast {
println("Deployment repository url: $repoUrl")
}
}
ext.configurePublishing = { Project project, configure = { } ->
ArtifactsKt.publish(project, false) { publication ->
configure.delegate = publication
configure()
}
}
ext.configurePluginMarkers = { Project project, withEmptyJars = true ->
PluginMarkersKt.publishPluginMarkers(project, withEmptyJars)
}
ext.configureJvmIrBackend = { Project project ->
project.tasks.withType(KotlinCompile.class) { task ->
task.kotlinOptions {
if (!project.kotlinBuildProperties.useIRForLibraries) {
useIR = false
freeCompilerArgs += "-Xuse-old-backend"
}
}
}
}
allprojects { project ->
project.ext.configureSourcesJar = { lambda = {} ->
ArtifactsKt.sourcesJar(project) { task ->
lambda.delegate = task
lambda()
}
}
project.ext.configureJavadocJar = { lambda = {} ->
ArtifactsKt.javadocJar(project) { task ->
lambda.delegate = task
lambda()
}
}
project.ext.configureModularJar = { lambda = {} ->
ArtifactsKt.modularJar(project) { task ->
lambda.delegate = task
lambda()
}
}
dependencies.ext.kotlinStdlib = { suffix ->
DependenciesKt.kotlinStdlib(project, suffix, null)
}
}