blob: 36c73d9fecfcdd56128d1b9161a76a664f9a5a12 [file] [log] [blame] [edit]
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsages
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsCompilerAttribute
import plugins.configureDefaultPublishing
import plugins.configureKotlinPomAttributes
plugins {
`maven-publish`
kotlin("js")
}
val jsStdlibSources = "${projectDir}/../stdlib/js/src"
val kotlinStdlibJs by configurations.creating {
isCanBeResolved = true
isCanBeConsumed = false
attributes {
attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category.LIBRARY))
attribute(Usage.USAGE_ATTRIBUTE, objects.named(KotlinUsages.KOTLIN_API))
attribute(KotlinPlatformType.attribute, KotlinPlatformType.js)
attribute(KotlinJsCompilerAttribute.jsCompilerAttribute, KotlinJsCompilerAttribute.ir)
// the workaround below for KT-65266 expects a packed artifact
val klibPackagingAttribute = Attribute.of("org.jetbrains.kotlin.klib.packaging", String::class.java)
attribute(klibPackagingAttribute, "packed")
}
}
dependencies {
kotlinStdlibJs(kotlinStdlib())
}
// Workaround for #KT-65266
val prepareFriendStdlibJs = tasks.register<Zip>("prepareFriendStdlibJs") {
dependsOn(kotlinStdlibJs)
from { zipTree(kotlinStdlibJs.singleFile).matching { exclude("META-INF/MANIFEST.MF") } }
destinationDirectory = layout.buildDirectory.map { it.dir("libs") }
archiveFileName = "friend-kotlin-stdlib-js.klib"
}
@Suppress("UNUSED_VARIABLE")
kotlin {
explicitApi()
js()
sourceSets {
val main by getting {
if (!kotlinBuildProperties.isInIdeaSync) {
kotlin.srcDir("$jsStdlibSources/org.w3c")
kotlin.srcDir("$jsStdlibSources/kotlinx")
kotlin.srcDir("$jsStdlibSources/kotlin/browser")
kotlin.srcDir("$jsStdlibSources/kotlin/dom")
}
dependencies {
api(project(":kotlin-stdlib"))
}
}
}
}
tasks.withType<org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile>().configureEach {
compilerOptions.freeCompilerArgs
.addAll(
"-Xallow-kotlin-package",
"-opt-in=kotlin.ExperimentalMultiplatform",
"-opt-in=kotlin.contracts.ExperimentalContracts",
)
val renderDiagnosticNames by extra(project.kotlinBuildProperties.renderDiagnosticNames)
if (renderDiagnosticNames) {
compilerOptions.freeCompilerArgs.add("-Xrender-internal-diagnostic-names")
}
dependsOn(prepareFriendStdlibJs)
libraries.setFrom(prepareFriendStdlibJs)
friendPaths.setFrom(libraries)
compilerOptions.allWarningsAsErrors.set(true)
}
val emptyJavadocJar by tasks.creating(Jar::class) {
archiveClassifier.set("javadoc")
}
publishing {
publications {
val mavenPublication = register<MavenPublication>("maven") {
from(components["kotlin"])
configureKotlinPomAttributes(project, "Kotlin DOM API compatibility library", packaging = "klib")
}
withType<MavenPublication> {
artifact(emptyJavadocJar)
}
configureSbom(
target = "Maven",
gradleConfigurations = setOf(),
publication = mavenPublication,
)
}
}
configureDefaultPublishing()