Source code

Revision control

Copy as Markdown

Other Tools

/* 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/. */
// This settings file configures an Android project for substituting a
// local Application Services and/or Glean.
//
// For convenience, this file reads the `autoPublish.*` properties from
// `$topsrcdir/local.properties`, so that you only need to set them once
// for all Android projects.
//
// You can also set or override these properties on a per-project basis,
// by setting them in `$topsrcdir/mobile/android/{project}/local.properties`,
// if you want to only substitute App Services or Glean for a specific project,
// or to substitute different versions for different projects.
//
// This settings file configures the build to automatically publish the
// contents of your Application Services and Glean checkouts to the
// Maven local repository. Any dependencies are then substituted to use
// the locally published versions.
def rootLocalProperties = new File(gradle.mozconfig.topsrcdir, "local.properties").with { localPropertiesFile ->
def localProperties = new Properties()
if (localPropertiesFile.canRead()) {
localPropertiesFile.withInputStream { localProperties.load(it) }
}
localProperties
}
[
"autoPublish.application-services.dir",
"autoPublish.glean.dir",
].each { key ->
def relativeOrAbsolutePath = rootLocalProperties."$key"
if (relativeOrAbsolutePath != null) {
def autoPublishDir = new File(gradle.mozconfig.topsrcdir).toPath().resolve(relativeOrAbsolutePath)
gradle.ext."localProperties.$key" = autoPublishDir.toString()
}
}
gradle.settingsEvaluated {
if (gradle.hasProperty("localProperties.autoPublish.application-services.dir")) {
def appServicesLocalPath = gradle."localProperties.autoPublish.application-services.dir"
logger.lifecycle("settings.gradle> Enabling automatic publication of application-services from: $appServicesLocalPath")
// Windows can't execute .py files directly, so we assume a "manually installed" python,
// which comes with a "py" launcher and respects the shebang line to specify the version.
def publishAppServicesCmd = [];
if (System.properties["os.name"].toLowerCase().contains("windows")) {
publishAppServicesCmd << "py";
}
publishAppServicesCmd << "./automation/publish_to_maven_local_if_modified.py";
runCmd(publishAppServicesCmd, appServicesLocalPath, "Published application-services for local development.", false)
} else {
logger.lifecycle("settings.gradle> Disabled auto-publication of application-services. Enable it by settings 'autoPublish.application-services.dir' in local.properties")
}
if (gradle.hasProperty("localProperties.autoPublish.glean.dir")) {
def gleanLocalPath = gradle."localProperties.autoPublish.glean.dir"
logger.lifecycle("settings.gradle> Enabling automatic publication of Glean from: $gleanLocalPath")
// As above, hacks to execute .py files on Windows.
def publishGleanCmd = [];
if (System.properties["os.name"].toLowerCase().contains("windows")) {
publishGleanCmd << "py";
}
publishGleanCmd << "./build-scripts/publish_to_maven_local_if_modified.py";
runCmd(publishGleanCmd, gleanLocalPath, "Published Glean for local development.", false)
} else {
logger.lifecycle("settings.gradle> Disabled auto-publication of Glean. Enable it by settings 'autoPublish.glean.dir' in local.properties")
}
}
gradle.projectsLoaded { ->
gradle.rootProject.allprojects {
// Allow local appservices substitution in each project.
if (gradle.hasProperty("localProperties.autoPublish.application-services.dir")) {
def appServicesSrcDir = gradle."localProperties.autoPublish.application-services.dir"
apply from: rootProject.file("${appServicesSrcDir}/build-scripts/substitute-local-appservices.gradle")
}
// Allow local Glean substitution in each project.
if (gradle.hasProperty('localProperties.autoPublish.glean.dir')) {
def gleanSrcDir = gradle."localProperties.autoPublish.glean.dir"
apply from: rootProject.file("${gleanSrcDir}/build-scripts/substitute-local-glean.gradle")
}
}
}
def runCmd(cmd, workingDir, successMessage, captureStdout = true) {
def proc = cmd.execute(null, new File(workingDir))
def standardOutput = captureStdout ? new ByteArrayOutputStream() : System.out
proc.consumeProcessOutput(standardOutput, System.err)
proc.waitFor()
if (proc.exitValue() != 0) {
throw new GradleException("Process '${cmd}' finished with non-zero exit value ${proc.exitValue()}");
} else {
logger.lifecycle("settings.gradle> ${successMessage}")
}
return captureStdout ? standardOutput : null
}