build.gradle.kts 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  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. api1(`kotlinx-serialization-core`)
  67. api1(`kotlinx-serialization-json`)
  68. implementation1(`kotlinx-serialization-protobuf`)
  69. api1(`kotlinx-atomicfu`)
  70. api1(`kotlinx-coroutines-core`)
  71. api1(`kotlinx-io`)
  72. implementation1(`kotlinx-coroutines-io`)
  73. }
  74. }
  75. commonTest {
  76. dependencies {
  77. implementation(kotlin("script-runtime"))
  78. }
  79. }
  80. if (isAndroidSDKAvailable) {
  81. androidMain {
  82. dependencies {
  83. }
  84. }
  85. androidTest {
  86. dependencies {
  87. implementation(kotlin("test", Versions.kotlinCompiler))
  88. implementation(kotlin("test-junit", Versions.kotlinCompiler))
  89. implementation(kotlin("test-annotations-common"))
  90. implementation(kotlin("test-common"))
  91. }
  92. }
  93. }
  94. jvmMain {
  95. dependencies {
  96. implementation("org.bouncycastle:bcprov-jdk15on:1.64")
  97. api1(`kotlinx-io-jvm`)
  98. // api(kotlinx("coroutines-debug", Versions.coroutines))
  99. }
  100. }
  101. jvmTest {
  102. dependencies {
  103. implementation("org.pcap4j:pcap4j-distribution:1.8.2")
  104. }
  105. }
  106. }
  107. }
  108. val NamedDomainObjectContainer<KotlinSourceSet>.androidMain: NamedDomainObjectProvider<KotlinSourceSet>
  109. get() = named<KotlinSourceSet>("androidMain")
  110. val NamedDomainObjectContainer<KotlinSourceSet>.androidTest: NamedDomainObjectProvider<KotlinSourceSet>
  111. get() = named<KotlinSourceSet>("androidTest")
  112. val NamedDomainObjectContainer<KotlinSourceSet>.jvmMain: NamedDomainObjectProvider<KotlinSourceSet>
  113. get() = named<KotlinSourceSet>("jvmMain")
  114. val NamedDomainObjectContainer<KotlinSourceSet>.jvmTest: NamedDomainObjectProvider<KotlinSourceSet>
  115. get() = named<KotlinSourceSet>("jvmTest")
  116. fun org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler.implementation1(dependencyNotation: String) =
  117. implementation(dependencyNotation) {
  118. exclude("org.jetbrains.kotlin", "kotlin-stdlib")
  119. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core")
  120. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core-common")
  121. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core-jvm")
  122. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core-metadata")
  123. }
  124. fun org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler.api1(dependencyNotation: String) =
  125. api(dependencyNotation) {
  126. exclude("org.jetbrains.kotlin", "kotlin-stdlib")
  127. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core")
  128. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core-common")
  129. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core-jvm")
  130. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core-metadata")
  131. }
  132. apply(from = rootProject.file("gradle/publish.gradle"))
  133. tasks.withType<com.jfrog.bintray.gradle.tasks.BintrayUploadTask> {
  134. doFirst {
  135. publishing.publications
  136. .filterIsInstance<MavenPublication>()
  137. .forEach { publication ->
  138. val moduleFile = buildDir.resolve("publications/${publication.name}/module.json")
  139. if (moduleFile.exists()) {
  140. publication.artifact(object :
  141. org.gradle.api.publish.maven.internal.artifact.FileBasedMavenArtifact(moduleFile) {
  142. override fun getDefaultExtension() = "module"
  143. })
  144. }
  145. }
  146. }
  147. }