secp256k1-kmp/build.gradle.kts

201 lines
7.1 KiB
Plaintext
Raw Normal View History

import org.apache.http.impl.client.HttpClients
import org.apache.http.client.methods.HttpPost
import org.apache.http.entity.ContentType
import org.apache.http.entity.StringEntity
import org.apache.http.impl.auth.BasicScheme
import org.apache.http.auth.UsernamePasswordCredentials
2020-06-26 13:48:50 +02:00
plugins {
2020-08-18 09:51:20 +02:00
kotlin("multiplatform") version "1.4.0"
2020-07-02 11:39:42 +02:00
`maven-publish`
2020-06-26 13:48:50 +02:00
}
buildscript {
repositories {
google()
maven("https://dl.bintray.com/kotlin/kotlin-eap")
jcenter()
}
dependencies {
classpath("com.android.tools.build:gradle:4.0.0")
}
}
allprojects {
group = "fr.acinq.secp256k1"
2020-08-18 09:51:20 +02:00
version = "0.3.0-1.4"
repositories {
jcenter()
google()
maven(url = "https://dl.bintray.com/kotlin/kotlin-eap")
}
2020-06-26 13:48:50 +02:00
}
val currentOs = org.gradle.internal.os.OperatingSystem.current()
kotlin {
explicitApi()
2020-06-26 17:10:48 +02:00
val commonMain by sourceSets.getting {
dependencies {
implementation(kotlin("stdlib-common"))
}
}
2020-06-26 13:48:50 +02:00
jvm {
compilations.all {
kotlinOptions.jvmTarget = "1.8"
}
compilations["main"].dependencies {
implementation(kotlin("stdlib-jdk8"))
2020-06-26 13:48:50 +02:00
}
2020-06-26 17:10:48 +02:00
}
fun org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget.secp256k1CInterop(target: String) {
2020-06-26 17:10:48 +02:00
compilations["main"].cinterops {
val libsecp256k1 by creating {
includeDirs.headerFilterOnly(project.file("native/secp256k1/include/"))
tasks[interopProcessingTaskName].dependsOn(":native:buildSecp256k1${target.capitalize()}")
2020-06-26 13:48:50 +02:00
}
}
}
2020-06-26 17:10:48 +02:00
val nativeMain by sourceSets.creating { dependsOn(commonMain) }
linuxX64("linux") {
secp256k1CInterop("host")
2020-06-26 17:10:48 +02:00
// https://youtrack.jetbrains.com/issue/KT-39396
compilations["main"].kotlinOptions.freeCompilerArgs += listOf("-include-binary", "$rootDir/native/build/linux/libsecp256k1.a")
compilations["main"].defaultSourceSet.dependsOn(nativeMain)
}
ios {
secp256k1CInterop("ios")
2020-06-26 17:10:48 +02:00
// https://youtrack.jetbrains.com/issue/KT-39396
compilations["main"].kotlinOptions.freeCompilerArgs += listOf("-include-binary", "$rootDir/native/build/ios/libsecp256k1.a")
compilations["main"].defaultSourceSet.dependsOn(nativeMain)
}
sourceSets.all {
languageSettings.useExperimentalAnnotation("kotlin.RequiresOptIn")
}
2020-06-26 13:48:50 +02:00
}
2020-06-29 13:02:45 +02:00
// Disable cross compilation
allprojects {
plugins.withId("org.jetbrains.kotlin.multiplatform") {
afterEvaluate {
val currentOs = org.gradle.internal.os.OperatingSystem.current()
val targets = when {
currentOs.isLinux -> listOf()
currentOs.isMacOsX -> listOf("linux")
currentOs.isWindows -> listOf("linux")
else -> listOf("linux")
}.mapNotNull { kotlin.targets.findByName(it) as? org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget }
configure(targets) {
compilations.all {
cinterops.all { tasks[interopProcessingTaskName].enabled = false }
compileKotlinTask.enabled = false
tasks[processResourcesTaskName].enabled = false
}
binaries.all { linkTask.enabled = false }
mavenPublication {
val publicationToDisable = this
tasks.withType<AbstractPublishToMaven>().all { onlyIf { publication != publicationToDisable } }
tasks.withType<GenerateModuleMetadata>().all { onlyIf { publication.get() != publicationToDisable } }
}
}
2020-06-29 13:02:45 +02:00
}
}
}
val snapshotNumber: String? by project
val gitRef: String? by project
val eapBranch = gitRef?.split("/")?.last() ?: "dev"
val bintrayVersion = if (snapshotNumber != null) "${project.version}-$eapBranch-$snapshotNumber" else project.version.toString()
val bintrayRepo = if (snapshotNumber != null) "snapshots" else "libs"
val bintrayUsername: String? = (properties["bintrayUsername"] as String?) ?: System.getenv("BINTRAY_USER")
val bintrayApiKey: String? = (properties["bintrayApiKey"] as String?) ?: System.getenv("BINTRAY_APIKEY")
val hasBintray = bintrayUsername != null && bintrayApiKey != null
if (!hasBintray) logger.warn("Skipping bintray configuration as bintrayUsername or bintrayApiKey is not defined")
2020-07-02 11:39:42 +02:00
allprojects {
plugins.withId("maven-publish") {
publishing {
if (hasBintray) {
2020-07-02 11:39:42 +02:00
repositories {
maven {
name = "bintray"
setUrl("https://api.bintray.com/maven/acinq/$bintrayRepo/${rootProject.name}/;publish=0")
2020-07-02 11:39:42 +02:00
credentials {
username = bintrayUsername
password = bintrayApiKey
}
}
}
}
publications.withType<MavenPublication>().configureEach {
version = bintrayVersion
2020-07-02 11:39:42 +02:00
pom {
description.set("Bitcoin's secp256k1 library ported to Kotlin/Multiplatform for JVM, Android, iOS & Linux")
url.set("https://github.com/ACINQ/secp256k1-kmp")
licenses {
name.set("Apache License v2.0")
url.set("https://www.apache.org/licenses/LICENSE-2.0")
}
issueManagement {
system.set("Github")
url.set("https://github.com/ACINQ/secp256k1-kmp/issues")
}
scm {
connection.set("https://github.com/ACINQ/secp256k1-kmp.git")
}
}
}
}
}
}
if (hasBintray) {
val postBintrayPublish by tasks.creating {
doLast {
HttpClients.createDefault().use { client ->
val post = HttpPost("https://api.bintray.com/content/acinq/$bintrayRepo/${rootProject.name}/$bintrayVersion/publish").apply {
entity = StringEntity("{}", ContentType.APPLICATION_JSON)
addHeader(BasicScheme().authenticate(UsernamePasswordCredentials(bintrayUsername, bintrayApiKey), this, null))
}
client.execute(post)
}
}
}
val postBintrayDiscard by tasks.creating {
doLast {
HttpClients.createDefault().use { client ->
val post = HttpPost("https://api.bintray.com/content/acinq/$bintrayRepo/${rootProject.name}/$bintrayVersion/publish").apply {
entity = StringEntity("{ \"discard\": true }", ContentType.APPLICATION_JSON)
addHeader(BasicScheme().authenticate(UsernamePasswordCredentials(bintrayUsername, bintrayApiKey), this, null))
}
client.execute(post)
}
}
}
}
afterEvaluate {
tasks.withType<AbstractTestTask>() {
testLogging {
events("passed", "skipped", "failed", "standard_out", "standard_error")
showExceptions = true
showStackTraces = true
}
}
}