build.gradle.kts 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. /*
  2. * Copyright 2019-2020 Mamoe Technologies and contributors.
  3. *
  4. * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
  5. * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
  6. *
  7. * https://github.com/mamoe/mirai/blob/master/LICENSE
  8. */
  9. @file:Suppress("UNUSED_VARIABLE")
  10. plugins {
  11. kotlin("multiplatform")
  12. id("kotlinx-atomicfu")
  13. kotlin("plugin.serialization")
  14. id("signing")
  15. id("net.mamoe.kotlin-jvm-blocking-bridge")
  16. `maven-publish`
  17. id("com.jfrog.bintray")
  18. }
  19. description = "Mirai API module"
  20. val isAndroidSDKAvailable: Boolean by project
  21. afterEvaluate {
  22. tasks.getByName("compileKotlinCommon").enabled = false
  23. tasks.getByName("compileTestKotlinCommon").enabled = false
  24. tasks.getByName("compileCommonMainKotlinMetadata").enabled = false
  25. tasks.getByName("compileKotlinMetadata").enabled = false
  26. }
  27. kotlin {
  28. explicitApi()
  29. if (isAndroidSDKAvailable) {
  30. apply(from = rootProject.file("gradle/android.gradle"))
  31. android("android") {
  32. publishAllLibraryVariants()
  33. }
  34. } else {
  35. println(
  36. """Android SDK 可能未安装.
  37. $name 的 Android 目标编译将不会进行.
  38. 这不会影响 Android 以外的平台的编译.
  39. """.trimIndent()
  40. )
  41. println(
  42. """Android SDK might not be installed.
  43. Android target of $name will not be compiled.
  44. It does no influence on the compilation of other platforms.
  45. """.trimIndent()
  46. )
  47. }
  48. jvm("common") {
  49. attributes.attribute(Attribute.of("mirai.target.platform", String::class.java), "common")
  50. }
  51. jvm("jvm") {
  52. attributes.attribute(Attribute.of("mirai.target.platform", String::class.java), "jvm")
  53. }
  54. // jvm("android") {
  55. // attributes.attribute(Attribute.of("mirai.target.platform", String::class.java), "android")
  56. // }
  57. sourceSets {
  58. val commonMain by getting {
  59. dependencies {
  60. api(kotlin("serialization"))
  61. api(kotlin("reflect"))
  62. api1(`kotlinx-serialization-core`)
  63. api1(`kotlinx-serialization-json`)
  64. implementation1(`kotlinx-serialization-protobuf`)
  65. api1(`kotlinx-io`)
  66. api1(`kotlinx-coroutines-io`)
  67. api(`kotlinx-coroutines-core`)
  68. implementation1(`kotlinx-atomicfu`)
  69. api1(`ktor-client-cio`)
  70. api1(`ktor-client-core`)
  71. api1(`ktor-network`)
  72. }
  73. }
  74. if (isAndroidSDKAvailable) {
  75. androidMain {
  76. dependencies {
  77. api(kotlin("reflect"))
  78. api1(`kotlinx-io-jvm`)
  79. api1(`kotlinx-coroutines-io-jvm`)
  80. api1(`ktor-client-android`)
  81. }
  82. }
  83. }
  84. val jvmMain by getting {
  85. dependencies {
  86. api(kotlin("reflect"))
  87. compileOnly(`log4j-api`)
  88. compileOnly(slf4j)
  89. api1(`kotlinx-io-jvm`)
  90. api1(`kotlinx-coroutines-io-jvm`)
  91. }
  92. }
  93. val jvmTest by getting {
  94. dependencies {
  95. api("org.pcap4j:pcap4j-distribution:1.8.2")
  96. runtimeOnly(files("build/classes/kotlin/jvm/test")) // classpath is not properly set by IDE
  97. }
  98. }
  99. }
  100. }
  101. val NamedDomainObjectContainer<org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet>.androidMain: NamedDomainObjectProvider<org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet>
  102. get() = named<org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet>("androidMain")
  103. val NamedDomainObjectContainer<org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet>.androidTest: NamedDomainObjectProvider<org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet>
  104. get() = named<org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet>("androidTest")
  105. val NamedDomainObjectContainer<org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet>.jvmMain: NamedDomainObjectProvider<org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet>
  106. get() = named<org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet>("jvmMain")
  107. val NamedDomainObjectContainer<org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet>.jvmTest: NamedDomainObjectProvider<org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet>
  108. get() = named<org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet>("jvmTest")
  109. fun org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler.implementation1(dependencyNotation: String) =
  110. implementation(dependencyNotation) {
  111. exclude("org.jetbrains.kotlin", "kotlin-stdlib")
  112. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core")
  113. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core-common")
  114. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core-jvm")
  115. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core-metadata")
  116. }
  117. fun org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler.api1(dependencyNotation: String) =
  118. api(dependencyNotation) {
  119. exclude("org.jetbrains.kotlin", "kotlin-stdlib")
  120. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core")
  121. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core-common")
  122. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core-jvm")
  123. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core-metadata")
  124. }
  125. apply(from = rootProject.file("gradle/publish.gradle"))
  126. tasks.withType<com.jfrog.bintray.gradle.tasks.BintrayUploadTask> {
  127. doFirst {
  128. publishing.publications
  129. .filterIsInstance<MavenPublication>()
  130. .forEach { publication ->
  131. val moduleFile = buildDir.resolve("publications/${publication.name}/module.json")
  132. if (moduleFile.exists()) {
  133. publication.artifact(object :
  134. org.gradle.api.publish.maven.internal.artifact.FileBasedMavenArtifact(moduleFile) {
  135. override fun getDefaultExtension() = "module"
  136. })
  137. }
  138. }
  139. }
  140. }