build.gradle.kts 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  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. import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
  11. plugins {
  12. kotlin("multiplatform")
  13. // id("kotlinx-atomicfu")
  14. kotlin("plugin.serialization")
  15. id("net.mamoe.kotlin-jvm-blocking-bridge")
  16. `maven-publish`
  17. id("com.jfrog.bintray")
  18. java
  19. }
  20. description = "Mirai Protocol implementation for QQ Android"
  21. val isAndroidSDKAvailable: Boolean by project
  22. afterEvaluate {
  23. tasks.getByName("compileKotlinCommon").enabled = false
  24. tasks.getByName("compileTestKotlinCommon").enabled = false
  25. tasks.getByName("compileCommonMainKotlinMetadata").enabled = false
  26. tasks.getByName("compileKotlinMetadata").enabled = false
  27. }
  28. kotlin {
  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_MIRAI_TARGET_PLATFORM, "common")
  50. }
  51. jvm("jvm") {
  52. attributes.attribute(ATTRIBUTE_MIRAI_TARGET_PLATFORM, "jvm")
  53. }
  54. /*
  55. jvm("android") {
  56. attributes.attribute(ATTRIBUTE_MIRAI_TARGET_PLATFORM, "android")
  57. }*/
  58. sourceSets.apply {
  59. all {
  60. dependencies {
  61. api(project(":mirai-core-api"))
  62. }
  63. }
  64. commonMain {
  65. dependencies {
  66. implementation(project(":mirai-core-utils"))
  67. api1(`kotlinx-serialization-core`)
  68. api1(`kotlinx-serialization-json`)
  69. implementation1(`kotlinx-serialization-protobuf`)
  70. api1(`kotlinx-atomicfu`)
  71. api1(`kotlinx-coroutines-core`)
  72. api1(`kotlinx-io`)
  73. implementation1(`kotlinx-coroutines-io`)
  74. }
  75. }
  76. commonTest {
  77. dependencies {
  78. implementation(kotlin("script-runtime"))
  79. }
  80. }
  81. if (isAndroidSDKAvailable) {
  82. androidMain {
  83. dependencies {
  84. }
  85. }
  86. androidTest {
  87. dependencies {
  88. implementation(kotlin("test", Versions.kotlinCompiler))
  89. implementation(kotlin("test-junit", Versions.kotlinCompiler))
  90. implementation(kotlin("test-annotations-common"))
  91. implementation(kotlin("test-common"))
  92. }
  93. }
  94. }
  95. jvmMain {
  96. dependencies {
  97. implementation("org.bouncycastle:bcprov-jdk15on:1.64")
  98. api1(`kotlinx-io-jvm`)
  99. // api(kotlinx("coroutines-debug", Versions.coroutines))
  100. }
  101. }
  102. jvmTest {
  103. dependencies {
  104. implementation("org.pcap4j:pcap4j-distribution:1.8.2")
  105. }
  106. }
  107. }
  108. }
  109. val NamedDomainObjectContainer<KotlinSourceSet>.androidMain: NamedDomainObjectProvider<KotlinSourceSet>
  110. get() = named<KotlinSourceSet>("androidMain")
  111. val NamedDomainObjectContainer<KotlinSourceSet>.androidTest: NamedDomainObjectProvider<KotlinSourceSet>
  112. get() = named<KotlinSourceSet>("androidTest")
  113. val NamedDomainObjectContainer<KotlinSourceSet>.jvmMain: NamedDomainObjectProvider<KotlinSourceSet>
  114. get() = named<KotlinSourceSet>("jvmMain")
  115. val NamedDomainObjectContainer<KotlinSourceSet>.jvmTest: NamedDomainObjectProvider<KotlinSourceSet>
  116. get() = named<KotlinSourceSet>("jvmTest")
  117. fun org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler.implementation1(dependencyNotation: String) =
  118. implementation(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. fun org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler.api1(dependencyNotation: String) =
  126. api(dependencyNotation) {
  127. exclude("org.jetbrains.kotlin", "kotlin-stdlib")
  128. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core")
  129. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core-common")
  130. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core-jvm")
  131. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core-metadata")
  132. }
  133. apply(from = rootProject.file("gradle/publish.gradle"))
  134. tasks.withType<com.jfrog.bintray.gradle.tasks.BintrayUploadTask> {
  135. doFirst {
  136. publishing.publications
  137. .filterIsInstance<MavenPublication>()
  138. .forEach { publication ->
  139. val moduleFile = buildDir.resolve("publications/${publication.name}/module.json")
  140. if (moduleFile.exists()) {
  141. publication.artifact(object :
  142. org.gradle.api.publish.maven.internal.artifact.FileBasedMavenArtifact(moduleFile) {
  143. override fun getDefaultExtension() = "module"
  144. })
  145. }
  146. }
  147. }
  148. }