summaryrefslogtreecommitdiffstats
path: root/mobile/android/gradle.configure
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 14:29:10 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 14:29:10 +0000
commit2aa4a82499d4becd2284cdb482213d541b8804dd (patch)
treeb80bf8bf13c3766139fbacc530efd0dd9d54394c /mobile/android/gradle.configure
parentInitial commit. (diff)
downloadfirefox-2aa4a82499d4becd2284cdb482213d541b8804dd.tar.xz
firefox-2aa4a82499d4becd2284cdb482213d541b8804dd.zip
Adding upstream version 86.0.1.upstream/86.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'mobile/android/gradle.configure')
-rw-r--r--mobile/android/gradle.configure456
1 files changed, 456 insertions, 0 deletions
diff --git a/mobile/android/gradle.configure b/mobile/android/gradle.configure
new file mode 100644
index 0000000000..2fc194fa8f
--- /dev/null
+++ b/mobile/android/gradle.configure
@@ -0,0 +1,456 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# 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/.
+
+# If --with-gradle is specified, build mobile/android with Gradle. If no
+# Gradle binary is specified use the in tree Gradle wrapper. The wrapper
+# downloads and installs Gradle, which is good for local developers but not
+# good in automation.
+option(
+ "--without-gradle",
+ nargs="?",
+ help="Disable building mobile/android with Gradle "
+ "(argument: location of binary or wrapper (gradle/gradlew))",
+)
+
+
+@depends("--with-gradle")
+def with_gradle(value):
+ if not value:
+ die(
+ "Building --without-gradle is no longer supported: "
+ "see https://bugzilla.mozilla.org/show_bug.cgi?id=1414415."
+ )
+
+ if value:
+ return True
+
+
+@depends(host, "--with-gradle", check_build_environment)
+@imports(_from="os.path", _import="isfile")
+def gradle(host, value, build_env):
+ if len(value):
+ gradle = value[0]
+ else:
+ gradle = os.path.join(build_env.topsrcdir, "gradlew")
+ if host.os == "WINNT":
+ gradle = gradle + ".bat"
+
+ # TODO: verify that $GRADLE is executable.
+ if not isfile(gradle):
+ die("GRADLE must be executable: %s", gradle)
+
+ return gradle
+
+
+set_config("GRADLE", gradle)
+
+
+@dependable
+@imports(_from="itertools", _import="chain")
+def gradle_android_build_config():
+ def capitalize(s):
+ # str.capitalize lower cases trailing letters.
+ if s:
+ return s[0].upper() + s[1:]
+ else:
+ return s
+
+ def variant(productFlavors, buildType):
+ return namespace(
+ productFlavors=productFlavors,
+ buildType=buildType,
+ # Like 'WithoutGeckoBinariesDebug'
+ name="".join(capitalize(t) for t in chain(productFlavors, (buildType,))),
+ )
+
+ return namespace(
+ geckoview=namespace(
+ variant=variant(("withGeckoBinaries",), "debug"),
+ ),
+ geckoview_example=namespace(
+ variant=variant(("withGeckoBinaries",), "debug"),
+ ),
+ )
+
+
+@depends(gradle_android_build_config)
+def gradle_android_intermediates_folder(build_config):
+ """Path to intermediates classes folder."""
+
+ def uncapitalize(s):
+ if s:
+ return s[0].lower() + s[1:]
+ else:
+ return s
+
+ def capitalize(s):
+ # str.capitalize lower cases trailing letters.
+ if s:
+ return s[0].upper() + s[1:]
+ else:
+ return s
+
+ productFlavor = uncapitalize(
+ "".join(capitalize(f) for f in build_config.geckoview.variant.productFlavors)
+ )
+ buildType = uncapitalize(build_config.geckoview.variant.buildType)
+
+ return "gradle/build/mobile/android/geckoview/intermediates/javac/{}{}/compile{}{}JavaWithJavac/classes".format(
+ productFlavor,
+ capitalize(buildType),
+ capitalize(productFlavor),
+ capitalize(buildType),
+ )
+
+
+set_config(
+ "GRADLE_ANDROID_GECKOVIEW_APILINT_FOLDER", gradle_android_intermediates_folder
+)
+
+
+@depends(gradle_android_build_config)
+def gradle_android_variant_name(build_config):
+ """Like "withoutGeckoBinariesDebug"."""
+
+ def uncapitalize(s):
+ if s:
+ return s[0].lower() + s[1:]
+ else:
+ return s
+
+ return namespace(
+ geckoview=uncapitalize(build_config.geckoview.variant.name),
+ )
+
+
+set_config(
+ "GRADLE_ANDROID_GECKOVIEW_VARIANT_NAME", gradle_android_variant_name.geckoview
+)
+
+
+@depends(gradle_android_build_config)
+def gradle_android_app_tasks(build_config):
+ """Gradle tasks run by |mach android assemble-app|."""
+ return [
+ "geckoview:generateJNIWrappersForGenerated{geckoview.variant.name}".format(
+ geckoview=build_config.geckoview
+ ),
+ ]
+
+
+set_config("GRADLE_ANDROID_APP_TASKS", gradle_android_app_tasks)
+
+
+@dependable
+def gradle_android_generate_sdk_bindings_tasks():
+ """Gradle tasks run by |mach android generate-sdk-bindings|."""
+ return [
+ "geckoview:generateSDKBindings",
+ ]
+
+
+set_config(
+ "GRADLE_ANDROID_GENERATE_SDK_BINDINGS_TASKS",
+ gradle_android_generate_sdk_bindings_tasks,
+)
+
+
+@depends(gradle_android_build_config)
+def gradle_android_generate_generated_jni_wrappers_tasks(build_config):
+ """Gradle tasks run by |mach android generate-generated-jni-wrappers|."""
+ return [
+ "geckoview:generateJNIWrappersForGenerated{geckoview.variant.name}".format(
+ geckoview=build_config.geckoview
+ ),
+ ]
+
+
+set_config(
+ "GRADLE_ANDROID_GENERATE_GENERATED_JNI_WRAPPERS_TASKS",
+ gradle_android_generate_generated_jni_wrappers_tasks,
+)
+
+
+@depends(gradle_android_build_config)
+def gradle_android_test_tasks(build_config):
+ """Gradle tasks run by |mach android test|."""
+ return [
+ "geckoview:test{geckoview.variant.name}UnitTest".format(
+ geckoview=build_config.geckoview
+ ),
+ ]
+
+
+set_config("GRADLE_ANDROID_TEST_TASKS", gradle_android_test_tasks)
+
+
+@depends(gradle_android_build_config)
+def gradle_android_lint_tasks(build_config):
+ """Gradle tasks run by |mach android lint|."""
+ return [
+ "geckoview:lint{geckoview.variant.name}".format(
+ geckoview=build_config.geckoview
+ ),
+ ]
+
+
+set_config("GRADLE_ANDROID_LINT_TASKS", gradle_android_lint_tasks)
+
+
+@depends(gradle_android_build_config)
+def gradle_android_api_lint_tasks(build_config):
+ """Gradle tasks run by |mach android api-lint|."""
+ return [
+ "geckoview:apiLint{geckoview.variant.name}".format(
+ geckoview=build_config.geckoview
+ ),
+ ]
+
+
+set_config("GRADLE_ANDROID_API_LINT_TASKS", gradle_android_api_lint_tasks)
+
+
+@depends(gradle_android_build_config)
+def gradle_android_checkstyle_tasks(build_config):
+ """Gradle tasks run by |mach android checkstyle|."""
+ return [
+ "geckoview:checkstyle{geckoview.variant.name}".format(
+ geckoview=build_config.geckoview
+ ),
+ ]
+
+
+set_config("GRADLE_ANDROID_CHECKSTYLE_TASKS", gradle_android_checkstyle_tasks)
+
+
+@depends(gradle_android_build_config)
+def gradle_android_checkstyle_output_files(build_config):
+ def uncapitalize(s):
+ if s:
+ return s[0].lower() + s[1:]
+ else:
+ return s
+
+ variant = uncapitalize(build_config.geckoview.variant.name)
+
+ """Output folder for checkstyle"""
+ return [
+ "gradle/build/mobile/android/geckoview/reports/checkstyle/{}.xml".format(
+ variant
+ ),
+ ]
+
+
+set_config(
+ "GRADLE_ANDROID_CHECKSTYLE_OUTPUT_FILES", gradle_android_checkstyle_output_files
+)
+
+
+@depends(gradle_android_build_config)
+def gradle_android_archive_geckoview_tasks(build_config):
+ """Gradle tasks run by |mach android archive-geckoview|."""
+ return [
+ "geckoview:assemble{geckoview.variant.name}".format(
+ geckoview=build_config.geckoview
+ ),
+ "geckoview:assemble{geckoview.variant.name}AndroidTest".format(
+ geckoview=build_config.geckoview
+ ),
+ "geckoview_example:assemble{geckoview_example.variant.name}".format(
+ geckoview_example=build_config.geckoview_example
+ ),
+ "messaging_example:assemble{geckoview_example.variant.name}".format(
+ geckoview_example=build_config.geckoview_example
+ ),
+ "port_messaging_example:assemble{geckoview_example.variant.name}".format(
+ geckoview_example=build_config.geckoview_example
+ ),
+ "geckoview:publish{geckoview.variant.name}PublicationToMavenRepository".format(
+ geckoview=build_config.geckoview
+ ),
+ ]
+
+
+set_config(
+ "GRADLE_ANDROID_ARCHIVE_GECKOVIEW_TASKS", gradle_android_archive_geckoview_tasks
+)
+
+
+@depends(gradle_android_build_config)
+def gradle_android_geckoview_docs_tasks(build_config):
+ """Gradle tasks run by |mach android geckoview-docs|."""
+ return [
+ "geckoview:javadoc{geckoview.variant.name}".format(
+ geckoview=build_config.geckoview
+ ),
+ ]
+
+
+set_config("GRADLE_ANDROID_GECKOVIEW_DOCS_TASKS", gradle_android_geckoview_docs_tasks)
+
+
+@depends(gradle_android_build_config)
+def gradle_android_geckoview_docs_archive_tasks(build_config):
+ """Gradle tasks run by |mach android geckoview-docs --archive| or |... --upload."""
+ return [
+ "geckoview:javadocCopyJar{geckoview.variant.name}".format(
+ geckoview=build_config.geckoview
+ ),
+ ]
+
+
+set_config(
+ "GRADLE_ANDROID_GECKOVIEW_DOCS_ARCHIVE_TASKS",
+ gradle_android_geckoview_docs_archive_tasks,
+)
+
+
+@depends(gradle_android_build_config)
+def gradle_android_geckoview_docs_output_files(build_config):
+ """Output files for GeckoView javadoc."""
+
+ def uncapitalize(s):
+ if s:
+ return s[0].lower() + s[1:]
+ else:
+ return s
+
+ variant = uncapitalize(build_config.geckoview.variant.name)
+
+ return [
+ "gradle/build/mobile/android/geckoview/reports/javadoc-results-{}.json".format(
+ variant
+ ),
+ ]
+
+
+set_config(
+ "GRADLE_ANDROID_GECKOVIEW_DOCS_OUTPUT_FILES",
+ gradle_android_geckoview_docs_output_files,
+)
+
+
+@depends(gradle_android_build_config)
+def gradle_android_archive_coverage_artifacts_tasks(build_config):
+ """Gradle tasks run by |mach android archive-coverage-artifacts|."""
+ return [
+ "geckoview:archiveClassfiles{geckoview.variant.name}".format(
+ geckoview=build_config.geckoview
+ ),
+ "geckoview:copyCoverageDependencies",
+ ]
+
+
+set_config(
+ "GRADLE_ANDROID_ARCHIVE_COVERAGE_ARTIFACTS_TASKS",
+ gradle_android_archive_coverage_artifacts_tasks,
+)
+
+
+@depends(gradle_android_build_config)
+def gradle_android_build_geckoview_example_tasks(build_config):
+ """Gradle tasks run by |mach android build-geckoview_example|."""
+ return [
+ "geckoview_example:assemble{geckoview_example.variant.name}".format(
+ geckoview_example=build_config.geckoview_example
+ ),
+ "geckoview:assemble{geckoview.variant.name}AndroidTest".format(
+ geckoview=build_config.geckoview
+ ),
+ ]
+
+
+set_config(
+ "GRADLE_ANDROID_BUILD_GECKOVIEW_EXAMPLE_TASKS",
+ gradle_android_build_geckoview_example_tasks,
+)
+
+
+@depends(gradle_android_build_config)
+def gradle_android_install_geckoview_example_tasks(build_config):
+ """Gradle tasks run by |mach android install-geckoview_example|."""
+ return [
+ "geckoview_example:install{geckoview_example.variant.name}".format(
+ geckoview_example=build_config.geckoview_example
+ ),
+ "geckoview:install{geckoview.variant.name}AndroidTest".format(
+ geckoview=build_config.geckoview
+ ),
+ ]
+
+
+set_config(
+ "GRADLE_ANDROID_INSTALL_GECKOVIEW_EXAMPLE_TASKS",
+ gradle_android_install_geckoview_example_tasks,
+)
+
+
+@dependable
+def gradle_android_dependencies():
+ """Gradle tasks that download all dependencies."""
+ # These tasks download most dependencies from each configuration, the
+ # notable exception is dependencies added at runtime by gradle plugins
+ return [
+ "downloadDependencies",
+ ]
+
+
+@depends(
+ gradle_android_api_lint_tasks,
+ gradle_android_checkstyle_tasks,
+ gradle_android_dependencies,
+)
+@imports(_from="itertools", _import="chain")
+def gradle_android_dependencies_tasks(*tasks):
+ """Gradle tasks run by |mach android dependencies|."""
+ # The union, plus a bit more, of all of the Gradle tasks
+ # invoked by the android-* automation jobs.
+ def withoutGeckoBinaries(task):
+ return task.replace("withGeckoBinaries", "withoutGeckoBinaries")
+
+ return list(withoutGeckoBinaries(t) for t in chain(*tasks))
+
+
+set_config("GRADLE_ANDROID_DEPENDENCIES_TASKS", gradle_android_dependencies_tasks)
+
+
+# Automation uses this to change log levels, not use the daemon, and use
+# offline mode.
+option(env="GRADLE_FLAGS", default="", help="Flags to pass to Gradle.")
+
+
+@depends("GRADLE_FLAGS")
+def gradle_flags(value):
+ return value[0] if value else ""
+
+
+set_config("GRADLE_FLAGS", gradle_flags)
+
+# Automation will set this to (file:///path/to/local, ...) via the mozconfig.
+# Local developer default is (jcenter, maven.google.com).
+option(
+ env="GRADLE_MAVEN_REPOSITORIES",
+ nargs="+",
+ default=(
+ "https://maven.google.com/",
+ "https://jcenter.bintray.com/",
+ "https://plugins.gradle.org/m2/",
+ ),
+ help="Comma-separated URLs of Maven repositories containing Gradle dependencies.",
+)
+
+
+@depends("GRADLE_MAVEN_REPOSITORIES")
+@imports(_from="os.path", _import="isdir")
+def gradle_maven_repositories(values):
+ if not values:
+ die("GRADLE_MAVEN_REPOSITORIES must not be empty")
+ if not all(values):
+ die("GRADLE_MAVEN_REPOSITORIES entries must not be empty")
+ return values
+
+
+set_config("GRADLE_MAVEN_REPOSITORIES", gradle_maven_repositories)