build.gradle
author Andrew Osmond <aosmond@mozilla.com>
Tue, 14 Aug 2018 11:35:40 -0400
changeset 486540 69a4c2a0aac6e8bfc041a82b634611e1432af36b
parent 486000 479342879a30961cd7d0cec6b31fb0b5d4e4d8eb
child 488108 f5732e0812ff1cac72c698dd6c0a52a7a8bd445a
permissions -rw-r--r--
Bug 1446309 - Part 1. Return draw result from imgIContainer::GetImageContainerAtSize. r=tnikkel In addition to the image container, the draw result can also be useful for callers to know whether or not the surface(s) in the container are fully decoded or not. This is used in subsequent parts to avoid flickering in some cases.

def tryInt = { string ->
    if (string == null) {
        return string
    }
    if (string.isInteger()) {
        return string as Integer
    }
    return string
}

allprojects {
    // Expose the per-object-directory configuration to all projects.
    ext {
        mozconfig = gradle.mozconfig
        topsrcdir = gradle.mozconfig.topsrcdir
        topobjdir = gradle.mozconfig.topobjdir

        compileSdkVersion = tryInt(mozconfig.substs.ANDROID_COMPILE_SDK_VERSION)
        targetSdkVersion = tryInt(mozconfig.substs.ANDROID_TARGET_SDK)
        minSdkVersion = tryInt(mozconfig.substs.MOZ_ANDROID_MIN_SDK_VERSION)
        manifestPlaceholders = [
            ANDROID_PACKAGE_NAME: mozconfig.substs.ANDROID_PACKAGE_NAME,
            ANDROID_TARGET_SDK: mozconfig.substs.ANDROID_TARGET_SDK,
            MOZ_ANDROID_MIN_SDK_VERSION: mozconfig.substs.MOZ_ANDROID_MIN_SDK_VERSION,
            MOZ_ANDROID_SHARED_ID: "${mozconfig.substs.ANDROID_PACKAGE_NAME}.sharedID",
        ]
    }

    repositories {
        gradle.mozconfig.substs.GRADLE_MAVEN_REPOSITORIES.each { repository ->
            maven {
                url repository
            }
        }
    }
}

buildDir "${topobjdir}/gradle/build"

buildscript {
    repositories {
        gradle.mozconfig.substs.GRADLE_MAVEN_REPOSITORIES.each { repository ->
            maven {
                url repository
            }
        }
        // For in tree plugins.
        maven {
            url "file://${gradle.mozconfig.topsrcdir}/mobile/android/gradle/m2repo"
        }
    }

    ext.kotlin_version = '1.2.41'
    ext.support_library_version = '26.1.0'
    ext.jacoco_version = '0.8.1'

    if (gradle.mozconfig.substs.MOZ_ANDROID_GOOGLE_PLAY_SERVICES) {
        ext.google_play_services_version = '15.0.1'
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.0'
        classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.8.2'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

if ('multi' == System.env.AB_CD) {
    // Multi-l10n builds set `AB_CD=multi`, which isn't a valid locale.  This
    // causes the
    //
    // |mach build| > |mach gradle| > |make gradle-targets| > AndroidManifest.xml > strings.xml > multi/brand.dtd
    //
    // dependency chain to fail, since multi isn't a real locale.  To avoid
    // this, if Gradle is invoked with AB_CD=multi, we don't invoke Make at all.
    task generateCodeAndResources()
} else if (System.env.IS_LANGUAGE_REPACK == '1') {
    // Single-locale l10n repacks set `IS_LANGUAGE_REPACK=1` and handle resource
    // and code generation themselves.
    task generateCodeAndResources()
} else {
    task generateCodeAndResources(type:Exec) {
        workingDir "${topobjdir}"

        commandLine mozconfig.substs.GMAKE
        args '-C'
        args "${topobjdir}/mobile/android/base"
        args 'gradle-targets'

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

afterEvaluate {
    subprojects { project ->
        if (project.name != 'thirdparty') {
            tasks.withType(JavaCompile) {
                // Add compiler args for all code except third-party code.
                options.compilerArgs += [
                    // Turn on all warnings, except...
                    "-Xlint:all",
                    // Deprecation, because we do use deprecated API for compatibility.
                    "-Xlint:-deprecation",
                    // Serial, because we don't use Java serialization.
                    "-Xlint:-serial",
                    // Turn all remaining warnings into errors,
                    // unless marked by @SuppressWarnings.
                    "-Werror"]
            }
            if (project.name == 'app') {
                tasks.withType(JavaCompile) {
                    // Turn off classfile warnings because upon updating to play services 15.0.0
                    // a warning is being thrown from play-services-base which fails the build
                    // (com/google/android/gms/common/api/GoogleApiClient.class):
                    // warning: Cannot find annotation method 'value()' in type 'GuardedBy':
                    // class file for javax.annotation.concurrent.GuardedBy not found
                    options.compilerArgs += ["-Xlint:-classfile"]
                }
            }
        }

        if (!hasProperty('android')) {
            return
        }
        android.applicationVariants.all {
            preBuild.dependsOn rootProject.generateCodeAndResources
        }
        android.libraryVariants.all {
            preBuild.dependsOn rootProject.generateCodeAndResources
        }
    }
}

apply plugin: 'idea'

idea {
    project {
        languageLevel = '1.7'
    }

    module {
        // Object directories take a huge amount of time for IntelliJ to index.
        // Exclude them.  Convention is that object directories start with obj.
        // IntelliJ is clever and will not exclude the parts of the object
        // directory that are referenced, if there are any.  In practice,
        // indexing the entirety of the tree is taking too long, so exclude all
        // but mobile/.
        def topsrcdirURI = file(topsrcdir).toURI()
        excludeDirs += files(file(topsrcdir)
            .listFiles({it.isDirectory()} as FileFilter)
            .collect({topsrcdirURI.relativize(it.toURI()).toString()}) // Relative paths.
            .findAll({!it.equals('mobile/')}))

        // If topobjdir is below topsrcdir, hide only some portions of that tree.
        def topobjdirURI = file(topobjdir).toURI()
        if (!topsrcdirURI.relativize(topobjdirURI).isAbsolute()) {
            excludeDirs -= file(topobjdir)
            excludeDirs += files(file(topobjdir).listFiles())
            excludeDirs -= file("${topobjdir}/gradle")
        }

        if (!mozconfig.substs.MOZ_INSTALL_TRACKING) {
            excludeDirs += file("${topsrcdir}/mobile/android/thirdparty/com/adjust")
        }
    }
}

task wrapper(type: Wrapper) {
}