build.gradle.kts 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. @file:Suppress("UNUSED_VARIABLE")
  2. plugins {
  3. kotlin("multiplatform")
  4. id("kotlinx-atomicfu")
  5. kotlin("plugin.serialization")
  6. id("net.mamoe.kotlin-jvm-blocking-bridge")
  7. `maven-publish`
  8. id("com.jfrog.bintray") version Versions.Publishing.bintray
  9. }
  10. description = "Mirai Protocol implementation for QQ Android"
  11. val isAndroidSDKAvailable: Boolean by project
  12. kotlin {
  13. if (isAndroidSDKAvailable) {
  14. apply(from = rootProject.file("gradle/android.gradle"))
  15. android("android") {
  16. publishAllLibraryVariants()
  17. }
  18. } else {
  19. println(
  20. """Android SDK 可能未安装.
  21. $name 的 Android 目标编译将不会进行.
  22. 这不会影响 Android 以外的平台的编译.
  23. """.trimIndent()
  24. )
  25. println(
  26. """Android SDK might not be installed.
  27. Android target of $name will not be compiled.
  28. It does no influence on the compilation of other platforms.
  29. """.trimIndent()
  30. )
  31. }
  32. jvm("jvm") {
  33. }
  34. sourceSets.apply {
  35. all {
  36. languageSettings.enableLanguageFeature("InlineClasses")
  37. languageSettings.useExperimentalAnnotation("kotlin.Experimental")
  38. languageSettings.useExperimentalAnnotation("net.mamoe.mirai.utils.MiraiInternalAPI")
  39. languageSettings.useExperimentalAnnotation("net.mamoe.mirai.utils.MiraiExperimentalAPI")
  40. languageSettings.useExperimentalAnnotation("net.mamoe.mirai.LowLevelAPI")
  41. languageSettings.useExperimentalAnnotation("kotlin.ExperimentalUnsignedTypes")
  42. languageSettings.useExperimentalAnnotation("kotlin.experimental.ExperimentalTypeInference")
  43. languageSettings.useExperimentalAnnotation("kotlin.time.ExperimentalTime")
  44. languageSettings.useExperimentalAnnotation("kotlin.contracts.ExperimentalContracts")
  45. languageSettings.useExperimentalAnnotation("kotlinx.serialization.ExperimentalSerializationApi")
  46. languageSettings.useExperimentalAnnotation("net.mamoe.mirai.utils.UnstableExternalImage")
  47. languageSettings.progressiveMode = true
  48. dependencies {
  49. api(project(":mirai-core"))
  50. }
  51. }
  52. val commonMain by getting {
  53. dependencies {
  54. api1(kotlinx("serialization-core", Versions.Kotlin.serialization))
  55. api(kotlinx("coroutines-core", Versions.Kotlin.coroutines))
  56. implementation1(kotlinx("serialization-protobuf", Versions.Kotlin.serialization))
  57. api1("org.jetbrains.kotlinx:atomicfu:${Versions.Kotlin.atomicFU}")
  58. api1(kotlinx("io", Versions.Kotlin.io))
  59. implementation1(kotlinx("coroutines-io", Versions.Kotlin.coroutinesIo))
  60. }
  61. }
  62. val commonTest by getting {
  63. dependencies {
  64. implementation(kotlin("test-annotations-common"))
  65. implementation(kotlin("test-common"))
  66. implementation(kotlin("script-runtime"))
  67. }
  68. }
  69. if (isAndroidSDKAvailable) {
  70. val androidMain by getting {
  71. dependencies {
  72. }
  73. }
  74. val androidTest by getting {
  75. dependencies {
  76. implementation(kotlin("test", Versions.Kotlin.compiler))
  77. implementation(kotlin("test-junit", Versions.Kotlin.compiler))
  78. implementation(kotlin("test-annotations-common"))
  79. implementation(kotlin("test-common"))
  80. }
  81. }
  82. }
  83. val jvmMain by getting {
  84. dependencies {
  85. implementation("org.bouncycastle:bcprov-jdk15on:1.64")
  86. api1(kotlinx("io-jvm", Versions.Kotlin.io))
  87. // api(kotlinx("coroutines-debug", Versions.Kotlin.coroutines))
  88. }
  89. }
  90. val jvmTest by getting {
  91. dependencies {
  92. dependsOn(commonTest)
  93. implementation(kotlin("test", Versions.Kotlin.compiler))
  94. implementation(kotlin("test-junit", Versions.Kotlin.compiler))
  95. implementation("org.pcap4j:pcap4j-distribution:1.8.2")
  96. }
  97. }
  98. }
  99. }
  100. fun org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler.implementation1(dependencyNotation: String) =
  101. implementation(dependencyNotation) {
  102. exclude("org.jetbrains.kotlin", "kotlin-stdlib")
  103. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core")
  104. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core-common")
  105. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core-jvm")
  106. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core-metadata")
  107. }
  108. fun org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler.api1(dependencyNotation: String) =
  109. api(dependencyNotation) {
  110. exclude("org.jetbrains.kotlin", "kotlin-stdlib")
  111. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core")
  112. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core-common")
  113. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core-jvm")
  114. exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core-metadata")
  115. }
  116. apply(from = rootProject.file("gradle/publish.gradle"))
  117. tasks.withType<com.jfrog.bintray.gradle.tasks.BintrayUploadTask> {
  118. doFirst {
  119. publishing.publications
  120. .filterIsInstance<MavenPublication>()
  121. .forEach { publication ->
  122. val moduleFile = buildDir.resolve("publications/${publication.name}/module.json")
  123. if (moduleFile.exists()) {
  124. publication.artifact(object :
  125. org.gradle.api.publish.maven.internal.artifact.FileBasedMavenArtifact(moduleFile) {
  126. override fun getDefaultExtension() = "module"
  127. })
  128. }
  129. }
  130. }
  131. }