author James Graham <>
Tue, 23 May 2017 13:48:29 +0100
changeset 582988 f6ed7e68c53797f5cfe8f933175863644bfb41f3
parent 421717 5d8f137ee52eb37c06d4ffd8b272f5543b6de834
child 575028 d1b9b3e268bbf302baaad6d5bf2fcd8b6994513f
child 576651 59291672a000021887f6a01f512b69e96d2652df
child 576690 b9da9bacbf1a78faaf4863df32d699e2824c5481
child 596954 e44f8664860f841b0cfd151f23f123344a348d49
permissions -rw-r--r--
Bug 1367041 - Add |mach wpt| support for Chrome, Edge and Servo, r=AutomatedTester Using the wptrun infrastructure from upstream, it is now posible to make it easy to run web-platform-tests in other browsers. The syntax used is mach wpt --product [chrome|servo|edge] [tests] This will try to use the selected product; possibly prompting to install dependencies like the WebDriver implementation. For servo if the install isn't on the PATH then --binary can be used to point to the actual location. Because manifest metadata is kept in the same directory as expectation data and we don't want to reuse Firefox expectation data for other browsers, a new products subdirectory is introduced and added to the ignore files. This will contain a subdirectory for each product into which a copy of the test manifest is placed. It may also be used to store any expectation data for the other products, in the same way as testing/web-platform/meta. MozReview-Commit-ID: 8fdCnha5t2F

// 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"]
def proc = commandLine.execute(null, new File(topsrcdir))
def standardOutput = new ByteArrayOutputStream()
proc.consumeProcessOutput(standardOutput, standardOutput)

// Only show the output if something went wrong.
if (proc.exitValue() != 0) {
    throw new GradleException("Process '${commandLine}' finished with non-zero exit value ${proc.exitValue()}:\n\n${standardOutput.toString()}")

import groovy.json.JsonSlurper
def slurper = new JsonSlurper()
def json = slurper.parseText(standardOutput.toString())

if (json.substs.MOZ_BUILD_APP != 'mobile/android') {
    throw new GradleException("Building with Gradle is only supported for Fennec, i.e., MOZ_BUILD_APP == 'mobile/android'.")

// 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,
// (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)

include ':app'
include ':geckoview'
include ':geckoview_example'
include ':omnijar'
include ':thirdparty'

project(':app').projectDir = new File("${json.topsrcdir}/mobile/android/app")
project(':geckoview').projectDir = new File("${json.topsrcdir}/mobile/android/geckoview")
project(':geckoview_example').projectDir = new File("${json.topsrcdir}/mobile/android/geckoview_example")
project(':omnijar').projectDir = new File("${json.topsrcdir}/mobile/android/app/omnijar")
project(':thirdparty').projectDir = new File("${json.topsrcdir}/mobile/android/thirdparty")

    include ':bouncer'
    project(':bouncer').projectDir = new File("${json.topsrcdir}/mobile/android/bouncer")

// The Gradle instance is shared between settings.gradle and all the
// other build.gradle files (see
// 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