build.gradle.kts 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  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. }
  26. kotlin {
  27. if (isAndroidSDKAvailable) {
  28. apply(from = rootProject.file("gradle/android.gradle"))
  29. android("android") {
  30. publishAllLibraryVariants()
  31. }
  32. } else {
  33. println(
  34. """Android SDK 可能未安装.
  35. $name 的 Android 目标编译将不会进行.
  36. 这不会影响 Android 以外的平台的编译.
  37. """.trimIndent()
  38. )
  39. println(
  40. """Android SDK might not be installed.
  41. Android target of $name will not be compiled.
  42. It does no influence on the compilation of other platforms.
  43. """.trimIndent()
  44. )
  45. }
  46. jvm("common") {
  47. attributes.attribute(ATTRIBUTE_MIRAI_TARGET_PLATFORM, "common")
  48. }
  49. jvm("jvm") {
  50. attributes.attribute(ATTRIBUTE_MIRAI_TARGET_PLATFORM, "jvm")
  51. }
  52. /*
  53. jvm("android") {
  54. attributes.attribute(ATTRIBUTE_MIRAI_TARGET_PLATFORM, "android")
  55. }*/
  56. sourceSets.apply {
  57. all {
  58. dependencies {
  59. api(project(":mirai-core-api"))
  60. }
  61. }
  62. commonMain {
  63. dependencies {
  64. api1(`kotlinx-serialization-core`)
  65. api1(`kotlinx-serialization-json`)
  66. implementation1(`kotlinx-serialization-protobuf`)
  67. api1(`kotlinx-atomicfu`)
  68. api1(`kotlinx-coroutines-core`)
  69. api1(`kotlinx-io`)
  70. implementation1(`kotlinx-coroutines-io`)
  71. }
  72. }
  73. commonTest {
  74. dependencies {
  75. implementation(kotlin("script-runtime"))
  76. }
  77. }
  78. if (isAndroidSDKAvailable) {
  79. androidMain {
  80. dependencies {
  81. }
  82. }
  83. androidTest {
  84. dependencies {
  85. implementation(kotlin("test", Versions.kotlinCompiler))
  86. implementation(kotlin("test-junit", Versions.kotlinCompiler))
  87. implementation(kotlin("test-annotations-common"))
  88. implementation(kotlin("test-common"))
  89. }
  90. }
  91. }
  92. jvmMain {
  93. dependencies {
  94. implementation("org.bouncycastle:bcprov-jdk15on:1.64")
  95. api1(`kotlinx-io-jvm`)
  96. // api(kotlinx("coroutines-debug", Versions.coroutines))
  97. }
  98. }
  99. jvmTest {
  100. dependencies {
  101. implementation("org.pcap4j:pcap4j-distribution:1.8.2")
  102. }
  103. }
  104. }
  105. }
  106. val NamedDomainObjectContainer<KotlinSourceSet>.androidMain: NamedDomainObjectProvider<KotlinSourceSet>
  107. get() = named<KotlinSourceSet>("androidMain")
  108. val NamedDomainObjectContainer<KotlinSourceSet>.androidTest: NamedDomainObjectProvider<KotlinSourceSet>
  109. get() = named<KotlinSourceSet>("androidTest")
  110. val NamedDomainObjectContainer<KotlinSourceSet>.jvmMain: NamedDomainObjectProvider<KotlinSourceSet>
  111. get() = named<KotlinSourceSet>("jvmMain")
  112. val NamedDomainObjectContainer<KotlinSourceSet>.jvmTest: NamedDomainObjectProvider<KotlinSourceSet>
  113. get() = named<KotlinSourceSet>("jvmTest")
  114. fun org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler.implementation1(dependencyNotation: String) =
  115. implementation(dependencyNotation) {
  116. exclude("org.jetbrains.kotlin", "kotlin-stdlib")
  117. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core")
  118. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core-common")
  119. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core-jvm")
  120. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core-metadata")
  121. }
  122. fun org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler.api1(dependencyNotation: String) =
  123. api(dependencyNotation) {
  124. exclude("org.jetbrains.kotlin", "kotlin-stdlib")
  125. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core")
  126. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core-common")
  127. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core-jvm")
  128. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core-metadata")
  129. }
  130. apply(from = rootProject.file("gradle/publish.gradle"))
  131. tasks.withType<com.jfrog.bintray.gradle.tasks.BintrayUploadTask> {
  132. doFirst {
  133. publishing.publications
  134. .filterIsInstance<MavenPublication>()
  135. .forEach { publication ->
  136. val moduleFile = buildDir.resolve("publications/${publication.name}/module.json")
  137. if (moduleFile.exists()) {
  138. publication.artifact(object :
  139. org.gradle.api.publish.maven.internal.artifact.FileBasedMavenArtifact(moduleFile) {
  140. override fun getDefaultExtension() = "module"
  141. })
  142. }
  143. }
  144. }
  145. }