build.gradle.kts 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. /*
  2. * Copyright 2019-2021 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.KotlinPlatformType
  11. import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
  12. plugins {
  13. kotlin("multiplatform")
  14. // id("kotlinx-atomicfu")
  15. kotlin("plugin.serialization")
  16. id("net.mamoe.kotlin-jvm-blocking-bridge")
  17. `maven-publish`
  18. id("com.jfrog.bintray")
  19. java
  20. }
  21. description = "Mirai Protocol implementation for QQ Android"
  22. val isAndroidSDKAvailable: Boolean by project
  23. afterEvaluate {
  24. tasks.getByName("compileKotlinCommon").enabled = false
  25. tasks.getByName("compileTestKotlinCommon").enabled = false
  26. tasks.getByName("compileCommonMainKotlinMetadata").enabled = false
  27. tasks.getByName("compileKotlinMetadata").enabled = false
  28. }
  29. kotlin {
  30. if (isAndroidSDKAvailable) {
  31. apply(from = rootProject.file("gradle/android.gradle"))
  32. android("android") {
  33. publishAllLibraryVariants()
  34. }
  35. } else {
  36. println(
  37. """Android SDK 可能未安装.
  38. $name 的 Android 目标编译将不会进行.
  39. 这不会影响 Android 以外的平台的编译.
  40. """.trimIndent()
  41. )
  42. println(
  43. """Android SDK might not be installed.
  44. Android target of $name will not be compiled.
  45. It does no influence on the compilation of other platforms.
  46. """.trimIndent()
  47. )
  48. }
  49. jvm("common") {
  50. attributes.attribute(KotlinPlatformType.attribute, KotlinPlatformType.common)
  51. }
  52. jvm("jvm")
  53. /*
  54. jvm("android") {
  55. attributes.attribute(ATTRIBUTE_MIRAI_TARGET_PLATFORM, "android")
  56. }*/
  57. sourceSets.apply {
  58. all {
  59. dependencies {
  60. api(project(":mirai-core-api"))
  61. }
  62. }
  63. commonMain {
  64. dependencies {
  65. implementation(project(":mirai-core-utils"))
  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. // implementation("net.mamoe:mirai-login-solver-selenium:1.0-dev-14")
  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. }