Files
kotlin-fork/libraries/tools/kotlin-gradle-plugin-idea-proto/build.gradle.kts
T
Ilya Gorbunov d2aae67e03 Replace kotlin-test project dependencies in the project
Use dependency helper function that chooses whether to take them
from the bootstrap repository or from a configuration of kotlin-test

KT-61969
2023-12-13 15:40:25 +00:00

162 lines
4.9 KiB
Kotlin

@file:Suppress("HasPlatformType")
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import org.jetbrains.kotlin.konan.target.HostManager
import org.jetbrains.kotlin.konan.target.KonanTarget.*
plugins {
kotlin("jvm")
id("org.jetbrains.kotlinx.binary-compatibility-validator")
}
kotlin {
sourceSets.all {
languageSettings.optIn("org.jetbrains.kotlin.gradle.InternalKotlinGradlePluginApi")
}
}
val embedded by configurations.getting {
isTransitive = false
configurations.getByName("compileOnly").extendsFrom(this)
configurations.getByName("testImplementation").extendsFrom(this)
}
dependencies {
api(project(":kotlin-gradle-plugin-idea"))
embedded("com.google.protobuf:protobuf-java:3.21.9")
embedded("com.google.protobuf:protobuf-kotlin:3.21.9")
testImplementation(kotlinTest("junit"))
testImplementation(kotlin("reflect"))
testImplementation(testFixtures(project(":kotlin-gradle-plugin-idea")))
}
configureKotlinCompileTasksGradleCompatibility()
sourceSets.main.configure {
java.srcDir("src/generated/java")
java.srcDir("src/generated/kotlin")
}
publish()
javadocJar()
sourcesJar()
runtimeJar(tasks.register<ShadowJar>("embeddable")) {
from(mainSourceSet.output)
exclude("**/*.proto")
relocate("com.google.protobuf", "org.jetbrains.kotlin.gradle.idea.proto.com.google.protobuf")
}
/* Setup configuration for binary compatibility tests */
run {
val binaryValidationApiJar = tasks.register<Jar>("binaryValidationApiJar") {
this.archiveBaseName.set(project.name + "-api")
from(mainSourceSet.output)
}
apiValidation {
ignoredPackages += "org.jetbrains.kotlin.gradle.idea.proto.generated"
nonPublicMarkers += "org.jetbrains.kotlin.gradle.InternalKotlinGradlePluginApi"
}
tasks {
apiBuild {
inputJar.value(binaryValidationApiJar.flatMap { it.archiveFile })
}
}
}
/* Setup protoc */
run {
val protoc = configurations.create("protoc") {
isCanBeResolved = true
isCanBeConsumed = false
}
dependencies {
protoc("com.google.protobuf:protoc:3.21.9") {
artifact {
type = "exe"
classifier = when (HostManager.host) {
MACOS_ARM64 -> "osx-aarch_64"
MACOS_X64 -> "osx-x86_64"
MINGW_X64 -> "windows-x86_64"
LINUX_X64 -> "linux-x86_64"
else -> null
}
}
}
implicitDependencies("com.google.protobuf:protoc:3.21.9:linux-x86_64@exe")
implicitDependencies("com.google.protobuf:protoc:3.21.9:osx-aarch_64@exe")
implicitDependencies("com.google.protobuf:protoc:3.21.9:osx-x86_64@exe")
implicitDependencies("com.google.protobuf:protoc:3.21.9:windows-x86_64@exe")
}
val protocExecutable = layout.buildDirectory.file("protoc/bin")
val setupProtoc = tasks.register("setupProtoc") {
doFirst {
val protocFile = protocExecutable.get().asFile
protoc.files.single().copyTo(protocFile, overwrite = true)
protocFile.setExecutable(true)
}
}
tasks.register<Exec>("protoc") {
dependsOn(setupProtoc)
val protoSources = file("src/main/proto")
val javaOutput = file("src/generated/java/")
val kotlinOutput = file("src/generated/kotlin/")
inputs.dir(protoSources)
outputs.dir(javaOutput)
outputs.dir(kotlinOutput)
doFirst {
javaOutput.deleteRecursively()
kotlinOutput.deleteRecursively()
javaOutput.mkdirs()
kotlinOutput.mkdirs()
}
workingDir(project.projectDir)
argumentProviders.add {
listOf(
protocExecutable.get().asFile.absolutePath,
"-I=$protoSources",
"--java_out=${javaOutput.absolutePath}",
"--kotlin_out=${kotlinOutput.absolutePath}"
) + protoSources.listFiles().orEmpty()
.filter { it.extension == "proto" }
.map { it.path }
}
}
}
/* Setup backwards compatibility tests */
run {
val compatibilityTestClasspath by configurations.creating {
isCanBeResolved = true
isCanBeConsumed = false
attributes.attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage.JAVA_RUNTIME))
attributes.attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category.LIBRARY))
}
dependencies {
compatibilityTestClasspath(project(":kotlin-gradle-plugin-idea-for-compatibility-tests"))
}
tasks.test {
val capturedCompatibilityTestClasspath: FileCollection = compatibilityTestClasspath
dependsOn(capturedCompatibilityTestClasspath)
inputs.files(capturedCompatibilityTestClasspath)
doFirst {
systemProperty("compatibilityTestClasspath", capturedCompatibilityTestClasspath.files.joinToString(";") { it.absolutePath })
}
}
}