2018-08-20 20:41:04 +03:00
|
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
|
2018-11-15 23:53:13 +03:00
|
|
|
def libLicense = properties.libLicense
|
|
|
|
def libLicenseUrl = properties.libLicenseUrl
|
|
|
|
def libRepositoryName = properties.libRepositoryName
|
|
|
|
def libUrl = properties.libUrl
|
|
|
|
def libVcsUrl = properties.libVcsUrl
|
|
|
|
|
2018-11-14 02:47:20 +03:00
|
|
|
ext.configurePublish = { groupIdArg, artifactIdArg, descriptionArg,
|
|
|
|
jnaForTestConfiguration = null,
|
|
|
|
variantWithoutLib = null ->
|
2018-11-15 22:08:16 +03:00
|
|
|
// `jnaForTestConfiguration` is a hacky way to say yes, I'm using JNA and
|
|
|
|
// want to pack the JNA dispatch libraries and my Rust libraries into a
|
|
|
|
// single JAR for use in unit tests that run on a development host (and not
|
|
|
|
// an Android target device). We extract the JNA libraries and our local
|
|
|
|
// Rust libraries and stick them into a JAR that consumers augment their
|
|
|
|
// test configuration with.
|
2018-11-14 02:47:20 +03:00
|
|
|
//
|
|
|
|
// `variantWithoutLib` says to publish an AAR that doesn't have native Rust
|
|
|
|
// libraries packed into it. Such an AAR will be aggregated into another
|
2018-12-14 21:08:01 +03:00
|
|
|
// Maven publication that has a single megazord Rust library that provides
|
2018-11-14 02:47:20 +03:00
|
|
|
// the native code functionality.
|
2018-11-15 22:08:16 +03:00
|
|
|
if (jnaForTestConfiguration != null) {
|
|
|
|
task extractJnaResources(type: Sync) {
|
|
|
|
dependsOn jnaForTestConfiguration
|
|
|
|
|
2018-12-19 03:46:42 +03:00
|
|
|
from {
|
|
|
|
// Defer the resolution of the configuration. This helps to
|
|
|
|
// avoid a nasty issue with the Android-Gradle plugin 3.2.1,
|
|
|
|
// like `Cannot change attributes of configuration
|
|
|
|
// ':PROJECT:kapt' after it has been resolved`.
|
|
|
|
zipTree(jnaForTestConfiguration.singleFile)
|
|
|
|
}
|
2018-11-15 22:08:16 +03:00
|
|
|
|
|
|
|
into "${buildDir}/jnaResources/"
|
|
|
|
|
|
|
|
eachFile { FileCopyDetails fcp ->
|
|
|
|
// The intention is to just keep the various `*jnidispatch.*` files.
|
|
|
|
if (fcp.relativePath.pathString.startsWith("META-INFO") || fcp.relativePath.pathString.endsWith(".class")) {
|
|
|
|
fcp.exclude()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
includeEmptyDirs false
|
|
|
|
}
|
|
|
|
|
|
|
|
def forUnitTestsJarTask = task forUnitTestsJar(type: Jar) {
|
|
|
|
from extractJnaResources
|
2018-11-27 23:43:01 +03:00
|
|
|
from "$buildDir/rustJniLibs/desktop"
|
2018-11-15 22:08:16 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
project.afterEvaluate {
|
|
|
|
forUnitTestsJarTask.dependsOn(tasks["cargoBuild"])
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-11-15 08:13:33 +03:00
|
|
|
task sourcesJar(type: Jar) {
|
|
|
|
from android.sourceSets.main.java.srcDirs
|
|
|
|
classifier = 'sources'
|
|
|
|
}
|
2018-08-20 20:41:04 +03:00
|
|
|
|
2018-11-15 08:13:33 +03:00
|
|
|
task javadoc(type: Javadoc) {
|
|
|
|
source = android.sourceSets.main.java.srcDirs
|
|
|
|
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
|
|
|
|
}
|
2018-08-20 20:41:04 +03:00
|
|
|
|
2018-11-15 08:13:33 +03:00
|
|
|
task javadocJar(type: Jar, dependsOn: javadoc) {
|
|
|
|
classifier = 'javadoc'
|
|
|
|
from javadoc.destinationDir
|
|
|
|
}
|
2018-08-20 20:41:04 +03:00
|
|
|
|
2018-11-15 08:13:33 +03:00
|
|
|
publishing {
|
|
|
|
publications {
|
|
|
|
aar(MavenPublication) {
|
|
|
|
project.afterEvaluate {
|
|
|
|
from components.findByName("androidRelease")
|
|
|
|
}
|
|
|
|
artifact sourcesJar
|
|
|
|
// Can't publish Javadoc yet: fxaclient isn't well behaved.
|
|
|
|
// artifact javadocJar
|
|
|
|
|
|
|
|
// If this goes haywire with
|
|
|
|
// 'Cannot configure the 'publishing' extension after it has been accessed.',
|
|
|
|
// see https://github.com/researchgate/gradle-release/issues/125 and
|
|
|
|
// https://stackoverflow.com/q/28020520.
|
|
|
|
pom {
|
|
|
|
groupId = groupIdArg
|
|
|
|
artifactId = artifactIdArg
|
|
|
|
description = descriptionArg
|
|
|
|
version = rootProject.ext.library['version']
|
2018-08-20 20:41:04 +03:00
|
|
|
|
|
|
|
licenses {
|
|
|
|
license {
|
2018-11-15 23:53:13 +03:00
|
|
|
name = libLicense
|
|
|
|
url = libLicenseUrl
|
2018-08-20 20:41:04 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
developers {
|
|
|
|
developer {
|
2018-11-15 08:13:33 +03:00
|
|
|
name = 'Mozilla Application Services'
|
|
|
|
email = 'application-services@mozilla.com'
|
2018-08-20 20:41:04 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
scm {
|
2018-11-15 23:53:13 +03:00
|
|
|
connection = libVcsUrl
|
|
|
|
developerConnection = libVcsUrl
|
|
|
|
url = libUrl
|
2018-08-20 20:41:04 +03:00
|
|
|
}
|
|
|
|
}
|
2018-11-14 02:47:20 +03:00
|
|
|
|
|
|
|
if (variantWithoutLib != null) {
|
|
|
|
// If we are publishing a `-withoutLib` publication, we
|
|
|
|
// never want to choose the real one when a parent project
|
|
|
|
// has us as a child `project()` dependency.
|
|
|
|
alias = true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (variantWithoutLib != null) {
|
|
|
|
aarWithoutLib(MavenPublication) {
|
|
|
|
project.afterEvaluate {
|
|
|
|
from components.findByName(variantWithoutLib)
|
|
|
|
}
|
|
|
|
artifact sourcesJar
|
|
|
|
// Can't publish Javadoc yet: fxaclient isn't well behaved.
|
|
|
|
// artifact javadocJar
|
|
|
|
|
|
|
|
pom {
|
2018-12-14 22:19:29 +03:00
|
|
|
groupId = groupIdArg
|
2018-11-14 02:47:20 +03:00
|
|
|
artifactId = "${artifactIdArg}-withoutLib"
|
|
|
|
description = descriptionArg
|
|
|
|
version = rootProject.ext.library['version']
|
|
|
|
|
|
|
|
licenses {
|
|
|
|
license {
|
|
|
|
name = properties.libLicense
|
|
|
|
url = properties.libLicenseUrl
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
developers {
|
|
|
|
developer {
|
|
|
|
name = 'Mozilla Application Services'
|
|
|
|
email = 'application-services@mozilla.com'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
scm {
|
|
|
|
connection = properties.libVcsUrl
|
|
|
|
developerConnection = properties.libVcsUrl
|
|
|
|
url = properties.libUrl
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2018-08-20 20:41:04 +03:00
|
|
|
}
|
2018-11-15 22:08:16 +03:00
|
|
|
|
|
|
|
if (jnaForTestConfiguration != null) {
|
|
|
|
forUnitTestsJar(MavenPublication) {
|
|
|
|
artifact tasks['forUnitTestsJar']
|
|
|
|
|
|
|
|
pom {
|
2018-12-14 22:19:29 +03:00
|
|
|
groupId = groupIdArg
|
2018-11-15 22:08:16 +03:00
|
|
|
artifactId = "${artifactIdArg}-forUnitTests"
|
|
|
|
description = descriptionArg
|
|
|
|
version = rootProject.ext.library['version']
|
|
|
|
|
|
|
|
licenses {
|
|
|
|
license {
|
2018-11-15 23:53:13 +03:00
|
|
|
name = libLicense
|
|
|
|
url = libLicenseUrl
|
2018-11-15 22:08:16 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
developers {
|
|
|
|
developer {
|
|
|
|
name = 'Mozilla Application Services'
|
|
|
|
email = 'application-services@mozilla.com'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
scm {
|
2018-11-15 23:53:13 +03:00
|
|
|
connection = libVcsUrl
|
|
|
|
developerConnection = libVcsUrl
|
|
|
|
url = libUrl
|
2018-11-15 22:08:16 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// This is never the publication we want to use when publishing a
|
|
|
|
// parent project with us as a child `project()` dependency.
|
|
|
|
alias = true
|
|
|
|
}
|
|
|
|
}
|
2018-08-20 20:41:04 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
apply plugin: 'com.jfrog.bintray'
|
|
|
|
|
2018-11-15 08:13:33 +03:00
|
|
|
// It feels like this shouldn't be necessary, but without it an
|
|
|
|
// "unspecified" creeps into bintray URLs -- just like
|
|
|
|
// https://github.com/bintray/gradle-bintray-plugin/issues/244, but not
|
|
|
|
// fixed by gradle-bintray-plugin:1.8.4.
|
2018-08-20 20:41:04 +03:00
|
|
|
version = rootProject.ext.library['version']
|
|
|
|
|
|
|
|
Properties localProperties = null;
|
|
|
|
if (project.rootProject.file('local.properties').canRead()) {
|
|
|
|
localProperties = new Properties()
|
|
|
|
localProperties.load(project.rootProject.file('local.properties').newDataInputStream())
|
|
|
|
}
|
|
|
|
|
2018-11-14 02:47:20 +03:00
|
|
|
def thePublications = ['aar']
|
|
|
|
if (variantWithoutLib != null) {
|
|
|
|
thePublications << 'aarWithoutLib'
|
|
|
|
}
|
|
|
|
if (jnaForTestConfiguration != null) {
|
|
|
|
thePublications << 'forUnitTestsJar'
|
|
|
|
}
|
|
|
|
|
2018-08-20 20:41:04 +03:00
|
|
|
bintray {
|
|
|
|
user = localProperties != null ? localProperties.getProperty("bintray.user") : ""
|
|
|
|
key = localProperties != null ? localProperties.getProperty("bintray.apikey") : ""
|
|
|
|
|
2018-11-14 02:47:20 +03:00
|
|
|
publications = thePublications
|
2018-11-15 22:08:16 +03:00
|
|
|
|
2018-08-20 20:41:04 +03:00
|
|
|
pkg {
|
2018-11-15 23:53:13 +03:00
|
|
|
repo = libRepositoryName
|
2018-08-20 20:41:04 +03:00
|
|
|
name = artifactIdArg
|
|
|
|
desc = descriptionArg
|
2018-11-15 23:53:13 +03:00
|
|
|
websiteUrl = libUrl
|
|
|
|
vcsUrl = libVcsUrl
|
2018-08-20 20:41:04 +03:00
|
|
|
if (project.ext.has('vcsTag')) {
|
|
|
|
vcsTag = project.ext.vcsTag
|
|
|
|
}
|
2018-11-15 23:53:13 +03:00
|
|
|
licenses = [libLicense]
|
2018-08-20 20:41:04 +03:00
|
|
|
publish = true
|
|
|
|
publicDownloadNumbers = true
|
|
|
|
}
|
|
|
|
}
|
2018-11-27 23:47:15 +03:00
|
|
|
|
|
|
|
task zipMavenArtifacts(type: Zip) {
|
|
|
|
from "${project.buildDir}/maven"
|
|
|
|
|
|
|
|
include '**/*.aar'
|
|
|
|
include '**/*.jar'
|
|
|
|
include '**/*.pom'
|
|
|
|
include '**/*.md5'
|
|
|
|
include '**/*.sha1'
|
|
|
|
|
|
|
|
// Metadata is generated by maven.mozilla.org directly
|
|
|
|
exclude '**/*maven-metadata.xml*'
|
|
|
|
|
|
|
|
archiveName "target.maven.zip"
|
|
|
|
includeEmptyDirs = false
|
|
|
|
destinationDir(file("${project.buildDir}"))
|
|
|
|
}
|
2018-08-20 20:41:04 +03:00
|
|
|
}
|