2015-10-22 01:07:55 +03:00
// You might think topsrcdir is '.', but that's not true when the Gradle build
// is launched from within IntelliJ.
def topsrcdir = rootProject . projectDir . absolutePath
def commandLine = [ "${topsrcdir}/mach" , "environment" , "--format" , "json" , "--verbose" ]
2019-03-29 12:11:09 +03:00
if ( System . properties [ 'os.name' ] . toLowerCase ( ) . contains ( 'windows' ) ) {
// gradle is called before parsing config.status, we cannot use PYTHON
// value.
if ( System . env . MOZILLABUILD ) {
def mozillabuild = System . env . MOZILLABUILD
if ( mozillabuild ) {
commandLine . addAll ( 0 , [ "${mozillabuild}/python/python.exe" ] )
}
}
}
2015-10-22 01:07:55 +03:00
def proc = commandLine . execute ( null , new File ( topsrcdir ) )
def standardOutput = new ByteArrayOutputStream ( )
2019-09-30 22:42:11 +03:00
def standardError = new ByteArrayOutputStream ( )
proc . consumeProcessOutput ( standardOutput , standardError )
2015-10-22 01:07:55 +03:00
proc . waitFor ( )
// Only show the output if something went wrong.
if ( proc . exitValue ( ) ! = 0 ) {
2019-09-30 22:42:11 +03:00
throw new GradleException ( "Process '${commandLine}' finished with non-zero exit value ${proc.exitValue()}:\n\nstdout:\n${standardOutput.toString()}\n\nstderr:\n${standardError.toString()}" )
2015-10-22 01:07:55 +03:00
}
import groovy.json.JsonSlurper
2018-02-23 03:11:14 +03:00
2015-10-22 01:07:55 +03:00
def slurper = new JsonSlurper ( )
def json = slurper . parseText ( standardOutput . toString ( ) )
2015-10-20 20:32:26 +03:00
if ( json . substs . MOZ_BUILD_APP ! = 'mobile/android' ) {
2015-12-10 18:51:42 +03:00
throw new GradleException ( "Building with Gradle is only supported for Fennec, i.e., MOZ_BUILD_APP == 'mobile/android'." )
2015-10-20 20:32:26 +03:00
}
2015-12-10 18:51:42 +03:00
// Set the Android SDK location. This is the *least specific* mechanism, which
// is unfortunate: we'd prefer to use the *most specific* mechanism. That is,
// local.properties (first 'sdk.dir', then 'android.dir') and then the
// environment variable ANDROID_HOME will override this. That's unfortunate,
// but it's hard to automatically arrange better.
System . setProperty ( 'android.home' , json . substs . ANDROID_SDK_ROOT )
2018-02-23 03:11:14 +03:00
include ':annotations'
2016-10-06 06:23:38 +03:00
include ':geckoview'
include ':geckoview_example'
2015-10-22 01:07:55 +03:00
include ':omnijar'
2018-02-23 03:11:14 +03:00
project ( ':annotations' ) . projectDir = new File ( "${json.topsrcdir}/mobile/android/annotations" )
2016-10-06 06:23:38 +03:00
project ( ':geckoview' ) . projectDir = new File ( "${json.topsrcdir}/mobile/android/geckoview" )
project ( ':geckoview_example' ) . projectDir = new File ( "${json.topsrcdir}/mobile/android/geckoview_example" )
2015-10-29 21:11:36 +03:00
project ( ':omnijar' ) . projectDir = new File ( "${json.topsrcdir}/mobile/android/app/omnijar" )
2015-10-22 01:07:55 +03:00
// The Gradle instance is shared between settings.gradle and all the
// other build.gradle files (see
// http://forums.gradle.org/gradle/topics/define_extension_properties_from_settings_xml).
// We use this ext property to pass the per-object-directory mozconfig
// between scripts. This lets us execute set-up code before we gradle
// tries to configure the project even once, and as a side benefit
// saves invoking |mach environment| multiple times.
gradle . ext . mozconfig = json
2019-05-09 23:38:48 +03:00
// Produced by `mach build`. Bug 1543982: the mozconfig determined by `mach
// environment` above can be different because `mach build` itself sets certain
// critical environment variables including MOZ_OBJDIR, CC, and CXX. We use
// this record to patch up the environment when we recursively invoke `mach
// build ...` commands from within Gradle. This avoids invalidating configure
// based on the changed environment variables.
def orig = slurper . parse ( new File ( json . topobjdir , '.mozconfig.json' ) )
gradle . ext . mozconfig . orig_mozconfig = orig . mozconfig