diff --git a/mobile/android/base/AdjustConstants.java.in b/mobile/android/base/AdjustConstants.java.in index 6388cbbf91b4..a0ff8b5f8995 100644 --- a/mobile/android/base/AdjustConstants.java.in +++ b/mobile/android/base/AdjustConstants.java.in @@ -1,5 +1,4 @@ //#filter substitution -//#include @OBJDIR@/adjust_sdk_app_token /* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*- * 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 diff --git a/mobile/android/base/AppConstants.java.in b/mobile/android/base/AppConstants.java.in index a1cbbdd9e51d..f232986a867b 100644 --- a/mobile/android/base/AppConstants.java.in +++ b/mobile/android/base/AppConstants.java.in @@ -93,8 +93,7 @@ public class AppConstants { public static final String MOZ_APP_VENDOR = "@MOZ_APP_VENDOR@"; public static final String MOZ_APP_VERSION = "@MOZ_APP_VERSION@"; public static final String MOZ_APP_DISPLAYNAME = "@MOZ_APP_DISPLAYNAME@"; - // MOZ_APP_UA_NAME is already quoted when it gets substituted, like MOZILLA_VERSION. - public static final String MOZ_APP_UA_NAME = @MOZ_APP_UA_NAME@; + public static final String MOZ_APP_UA_NAME = "@MOZ_APP_UA_NAME@"; // MOZILLA_VERSION is already quoted when it gets substituted in. If we // add additional quotes we end up with ""x.y"", which is a syntax error. @@ -126,7 +125,7 @@ public class AppConstants { public static final String MOZ_UPDATE_CHANNEL = "@MOZ_UPDATE_CHANNEL@"; public static final String OMNIJAR_NAME = "@OMNIJAR_NAME@"; public static final String OS_TARGET = "@OS_TARGET@"; - public static final String TARGET_XPCOM_ABI = @TARGET_XPCOM_ABI@; + public static final String TARGET_XPCOM_ABI = "@TARGET_XPCOM_ABI@"; public static final String USER_AGENT_BOT_LIKE = "Redirector/" + AppConstants.MOZ_APP_VERSION + " (Android; rv:" + AppConstants.MOZ_APP_VERSION + ")"; diff --git a/mobile/android/base/Makefile.in b/mobile/android/base/Makefile.in index e3bc1952a62f..db4d838a9455 100644 --- a/mobile/android/base/Makefile.in +++ b/mobile/android/base/Makefile.in @@ -325,24 +325,6 @@ FennecJNIWrappers.cpp: $(ANNOTATION_PROCESSOR_JAR_FILES) $(FENNEC_JARS) org.mozilla.gecko.annotationProcessors.AnnotationProcessor \ Fennec $(FENNEC_JARS) -# Certain source files need to be preprocessed. This special rule -# generates these files into generated/org/mozilla/gecko for -# consumption by the build system and IDEs. - -# The list in moz.build looks like -# 'preprocessed/org/mozilla/gecko/AppConstants.java'. The list in -# constants_PP_JAVAFILES looks like -# 'generated/preprocessed/org/mozilla/gecko/AppConstants.java'. We -# need to write AppConstants.java.in to -# generated/preprocessed/org/mozilla/gecko. -preprocessed := $(addsuffix .in,$(subst generated/preprocessed/org/mozilla/gecko/,,$(filter generated/preprocessed/org/mozilla/gecko/%,$(constants_PP_JAVAFILES)))) - -preprocessed_PATH := generated/preprocessed/org/mozilla/gecko -preprocessed_KEEP_PATH := 1 -preprocessed_FLAGS := --marker='//\\\#' - -PP_TARGETS += preprocessed - include $(topsrcdir)/config/rules.mk not_android_res_files := \ diff --git a/mobile/android/base/adjust_sdk_app_token.in b/mobile/android/base/adjust_sdk_app_token.in deleted file mode 100644 index 07ac44d3f47e..000000000000 --- a/mobile/android/base/adjust_sdk_app_token.in +++ /dev/null @@ -1,3 +0,0 @@ -//#ifdef MOZ_INSTALL_TRACKING -//#define MOZ_INSTALL_TRACKING_ADJUST_SDK_APP_TOKEN @MOZ_ADJUST_SDK_KEY@ -//#endif diff --git a/mobile/android/base/generate_build_config.py b/mobile/android/base/generate_build_config.py new file mode 100644 index 000000000000..708b61fc245b --- /dev/null +++ b/mobile/android/base/generate_build_config.py @@ -0,0 +1,116 @@ +#!/bin/python + +# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- +# 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/. + +''' +Generate BuildConfig Java source files. + +BuildConfig files are the Gradle way of configuring Java values at build time. + +This is the moz.build equivalent of Gradle's `buildConfigField` (see +http://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.ProductFlavor.html#com.android.build.gradle.internal.dsl.ProductFlavor:buildConfigField(java.lang.String,%20java.lang.String,%20java.lang.String). +This mechanism will be replaced with the Gradle native version as we +transition to Gradle. +''' + +from __future__ import ( + print_function, + unicode_literals, +) + +from collections import defaultdict +import os +import sys + +import buildconfig +from mozbuild.preprocessor import Preprocessor + + +def main(output_file, input_filename): + # input_filename is an absolute path, so there's no need to join with __DIR__. + pp = Preprocessor(defines=buildconfig.defines, marker='//#') + + CONFIG = defaultdict(lambda: None) + CONFIG.update(buildconfig.substs) + DEFINES = {} + + for var in ('MOZ_ANDROID_ACTIVITY_STREAM' + 'MOZ_ANDROID_ANR_REPORTER', + 'MOZ_ANDROID_BEAM', + 'MOZ_ANDROID_CUSTOM_TABS', + 'MOZ_ANDROID_DOWNLOADS_INTEGRATION', + 'MOZ_ANDROID_DOWNLOAD_CONTENT_SERVICE', + 'MOZ_ANDROID_EXCLUDE_FONTS', + 'MOZ_ANDROID_GCM', + 'MOZ_ANDROID_MLS_STUMBLER', + 'MOZ_ANDROID_SEARCH_ACTIVITY', + 'MOZ_DEBUG', + 'MOZ_INSTALL_TRACKING', + 'MOZ_LOCALE_SWITCHER', + 'MOZ_NATIVE_DEVICES', + 'MOZ_SWITCHBOARD'): + if CONFIG[var]: + DEFINES[var] = 1 + + for var in ('MOZ_ANDROID_GCM_SENDERID', + 'MOZ_PKG_SPECIAL', + 'MOZ_UPDATER'): + if CONFIG[var]: + DEFINES[var] = CONFIG[var] + + for var in ('ANDROID_CPU_ARCH', + 'ANDROID_PACKAGE_NAME', + 'GRE_MILESTONE', + 'MOZ_ANDROID_APPLICATION_CLASS', + 'MOZ_ANDROID_BROWSER_INTENT_CLASS', + 'MOZ_ANDROID_SEARCH_INTENT_CLASS', + 'MOZ_APP_BASENAME', + 'MOZ_APP_DISPLAYNAME', + 'MOZ_APP_ID', + 'MOZ_APP_NAME', + 'MOZ_APP_UA_NAME', + 'MOZ_APP_VENDOR', + 'MOZ_APP_VERSION', + 'MOZ_CHILD_PROCESS_NAME', + 'MOZ_CRASHREPORTER', + 'MOZ_MOZILLA_API_KEY', + 'MOZ_UPDATE_CHANNEL', + 'OMNIJAR_NAME', + 'OS_TARGET', + 'TARGET_XPCOM_ABI'): + DEFINES[var] = CONFIG[var] + + # Mangle our package name to avoid Bug 750548. + DEFINES['MANGLED_ANDROID_PACKAGE_NAME'] = CONFIG['ANDROID_PACKAGE_NAME'].replace('fennec', 'f3nn3c') + DEFINES['MOZ_APP_ABI'] = CONFIG['TARGET_XPCOM_ABI'] + if not CONFIG['COMPILE_ENVIRONMENT']: + # These should really come from the included binaries, but that's not easy. + DEFINES['MOZ_APP_ABI'] = 'arm-eabi-gcc3' + DEFINES['TARGET_XPCOM_ABI'] = 'arm-eabi-gcc3' + + if '-march=armv7' in CONFIG['OS_CFLAGS']: + DEFINES['MOZ_MIN_CPU_VERSION'] = 7 + else: + DEFINES['MOZ_MIN_CPU_VERSION'] = 5 + + # It's okay to use MOZ_ADJUST_SDK_KEY here because this doesn't + # leak the value to build logs. + if CONFIG['MOZ_INSTALL_TRACKING']: + DEFINES['MOZ_INSTALL_TRACKING_ADJUST_SDK_APP_TOKEN'] = CONFIG['MOZ_ADJUST_SDK_KEY'] + + # TODO: mark buildid.h as a dependency? How about the buildconfig itself? + DEFINES['MOZ_BUILDID'] = open(os.path.join(buildconfig.topobjdir, 'buildid.h')).readline().split()[2] + + pp.context.update(DEFINES) + + with open(input_filename, 'rU') as input: + pp.processFile(input=input, output=output_file) + + return 0 + + +if __name__ == '__main__': + sys.exit(main(sys.stdout, *sys.argv[1:])) diff --git a/mobile/android/base/moz.build b/mobile/android/base/moz.build index a7efb761beef..162686f98544 100644 --- a/mobile/android/base/moz.build +++ b/mobile/android/base/moz.build @@ -6,7 +6,16 @@ DIRS += ['locales'] -CONFIGURE_SUBST_FILES += ['adjust_sdk_app_token'] +GENERATED_FILES += [ + 'generated/preprocessed/org/mozilla/gecko/AdjustConstants.java', + 'generated/preprocessed/org/mozilla/gecko/AppConstants.java', +] +x = GENERATED_FILES['generated/preprocessed/org/mozilla/gecko/AdjustConstants.java'] +x.script = 'generate_build_config.py' +x.inputs += ['AdjustConstants.java.in'] +y = GENERATED_FILES['generated/preprocessed/org/mozilla/gecko/AppConstants.java'] +y.script = 'generate_build_config.py' +y.inputs += ['AppConstants.java.in'] include('android-services.mozbuild')