| Index: build.py | 
| =================================================================== | 
| --- a/build.py | 
| +++ b/build.py | 
| @@ -7,84 +7,87 @@ import re | 
| import shutil | 
| import string | 
| import subprocess | 
| import sys | 
| import tempfile | 
| BASE_DIR = os.path.dirname(os.path.abspath(__file__)) | 
| ENSURE_DEPENDENCIES_PATH = os.path.join(BASE_DIR, "ensure_dependencies.py") | 
| +GENERATED_MOZCONFIG_PATH = os.path.join(BASE_DIR, "generated", "mozconfig") | 
| +MOZCONFIG_COMMON_PATH = os.path.join(BASE_DIR, "mozconfig-common") | 
| +MOZCONFIG_ARM_PATH = os.path.join(BASE_DIR, "mozconfig-arm") | 
| +MOZCONFIG_X86_PATH = os.path.join(BASE_DIR, "mozconfig-x86") | 
| +MOZCONFIG_STORE_PATH = os.path.join(BASE_DIR, "mozconfig-store") | 
| +MOZCONFIG_RELEASE_PATH = os.path.join(BASE_DIR, "mozconfig-release") | 
| +MOZCONFIG_CUSTOM_PATH = os.path.join(BASE_DIR, "mozconfig-custom") | 
| MULTI_L10N_PATH = os.path.join(BASE_DIR, "mozharness", "scripts", | 
| "multil10n.py") | 
| ABB_PATH = os.path.join(BASE_DIR, "adblockbrowser") | 
| -DIST_PATH = os.path.join(ABB_PATH, "obj-arm-linux-androideabi", "dist") | 
| +ARCH_ARM = "arm" | 
| +ARCH_X86 = "x86" | 
| +ARCH_X86_I386 = "i386" | 
| +DIST_STORE = "store" | 
| +BUILD_RELEASE = "release" | 
| +OBJDIR_ARM = "obj-arm-linux-androideabi" | 
| +OBJDIR_X86 = "obj-i386-linux-android" | 
| def print_usage(): | 
| print >>sys.stderr, string.Template("""\ | 
| Usage: $name build | 
| $name sign APK_PATH | 
| $name build-and-sign\ | 
| """).substitute({"name": os.path.basename(sys.argv[0])}) | 
| -def check_mozconfig(path, distribution_mode, build_mode): | 
| - if not os.path.exists(path): | 
| - raise Exception("'%s' doesn't exist, please create it." % path) | 
| - | 
| - with open(path) as file: | 
| - contents = file.read() | 
| - | 
| - if "export MOZILLA_OFFICIAL=1" not in contents: | 
| - raise Exception( | 
| - "'%s' doesn't seem to export MOZILLA_OFFICIAL=1, please do." % path) | 
| - | 
| - updater_disabled = "--disable-updater" in contents | 
| - if updater_disabled and distribution_mode == "standalone": | 
| - raise Exception("'%s' seems to set --disable-updater, please don't." % path) | 
| - elif not updater_disabled and distribution_mode == "store": | 
| - raise Exception( | 
| - "'%s' doesn't seem to set --disable-updater, please do." % path) | 
| - | 
| - release_build = "export ABB_RELEASE_BUILD=1" in contents | 
| - if release_build and build_mode != "release": | 
| - raise Exception("'%s' shouldn't export ABB_RELEASE_BUILD=1." % path) | 
| - elif not release_build and build_mode == "release": | 
| - raise Exception("'%s' should export ABB_RELEASE_BUILD=1." % path) | 
| +def generate_mozconfig(architecture, distribution_mode, build_mode): | 
| + mozconfig_path = GENERATED_MOZCONFIG_PATH | 
| + with open(mozconfig_path, "w+") as mozconfig: | 
| + mozconfig.write(". \"%s\"\n" % MOZCONFIG_COMMON_PATH) | 
| + if architecture == ARCH_X86: | 
| + mozconfig.write(". \"%s\"\n" % MOZCONFIG_X86_PATH) | 
| + else: | 
| + mozconfig.write(". \"%s\"\n" % MOZCONFIG_ARM_PATH) | 
| + if distribution_mode == DIST_STORE: | 
| + mozconfig.write(". \"%s\"\n" % MOZCONFIG_STORE_PATH) | 
| + if build_mode == BUILD_RELEASE: | 
| + mozconfig.write(". \"%s\"\n" % MOZCONFIG_RELEASE_PATH) | 
| + mozconfig.write(". \"%s\"\n" % MOZCONFIG_CUSTOM_PATH) | 
| + return mozconfig_path | 
| -def find_mozconfig(distribution_mode, build_mode): | 
| - mozconfig_path = os.path.join(BASE_DIR, "mozconfig-" + distribution_mode + | 
| - "-" + build_mode) | 
| - check_mozconfig(mozconfig_path, distribution_mode, build_mode) | 
| - return mozconfig_path | 
| - | 
| - | 
| -def build(distribution_mode, build_mode, sdk_path, ndk_path): | 
| +def build(architecture, distribution_mode, build_mode, sdk_path, ndk_path): | 
| build_environment = os.environ.copy() | 
| - build_environment["MOZCONFIG"] = find_mozconfig(distribution_mode, build_mode) | 
| + build_environment["MOZCONFIG"] = generate_mozconfig( | 
| 
 
anton
2016/12/01 07:03:58
it might be more reliable not just remove `find_mo
 
diegocarloslima
2016/12/01 10:35:59
I understand your point of view, but my reasons to
 
 | 
| + architecture, distribution_mode, build_mode) | 
| build_environment["ANDROID_SDK_PATH"] = sdk_path | 
| build_environment["ANDROID_NDK_PATH"] = ndk_path | 
| + obj_dir = OBJDIR_X86 if architecture == ARCH_X86 else OBJDIR_ARM | 
| + build_environment["OBJDIR"] = obj_dir | 
| subprocess.check_call([os.path.join(ABB_PATH, "mach"), "clobber"], | 
| env=build_environment) | 
| subprocess.check_call([MULTI_L10N_PATH, "--cfg", "adblockbrowser-cfg.py"], | 
| env=build_environment) | 
| + dist_path = os.path.join(ABB_PATH, obj_dir, "dist") | 
| + arch_suffix = ARCH_X86_I386 if architecture == ARCH_X86 else ARCH_ARM | 
| [manifest_path] = glob.glob(os.path.join( | 
| - DIST_PATH, "fennec-*.multi.android-arm.json")) | 
| + dist_path, "fennec-*.multi.android-%s.json" % arch_suffix)) | 
| with open(manifest_path) as manifest_file: | 
| manifest = json.load(manifest_file) | 
| - apk_path = os.path.join(DIST_PATH, "gecko-unsigned-unaligned.apk") | 
| + apk_path = os.path.join(dist_path, "gecko-unsigned-unaligned.apk") | 
| if build_mode == "release": | 
| - target_apk_name = "adblockbrowser-%s-arm.apk" % manifest["moz_app_version"] | 
| + target_apk_name = "adblockbrowser-%s-%s.apk" % ( | 
| + manifest["moz_app_version"], architecture) | 
| else: | 
| - target_apk_name = "adblockbrowser-%s.%s-arm.apk" % ( | 
| - manifest["moz_app_version"], manifest["buildid"]) | 
| - target_apk_path = os.path.join(DIST_PATH, target_apk_name) | 
| + target_apk_name = "adblockbrowser-%s.%s-%s.apk" % ( | 
| + manifest["moz_app_version"], manifest["buildid"], architecture) | 
| + target_apk_path = os.path.join(dist_path, target_apk_name) | 
| shutil.copyfile(apk_path, target_apk_path) | 
| target_manifest_path = re.sub(r".apk$", ".json", target_apk_path) | 
| shutil.copyfile(manifest_path, target_manifest_path) | 
| return target_apk_path | 
| @@ -116,25 +119,30 @@ if __name__ == "__main__": | 
| if len(sys.argv) < 3: | 
| print_usage() | 
| sys.exit(3) | 
| apk_path = sys.argv[2] | 
| subprocess.check_call([ENSURE_DEPENDENCIES_PATH]) | 
| import config | 
| + architecture = config.ARCHITECTURE | 
| + if architecture not in (ARCH_ARM, ARCH_X86): | 
| + print >>sys.stderr, "Invalid architecture, check config.py" | 
| + sys.exit(4) | 
| 
 
anton
2016/12/01 07:03:58
From integration point of view (f.e. CI server - l
 
diegocarloslima
2016/12/01 10:35:59
Acknowledged.
 
 | 
| + | 
| distribution_mode = config.DISTRIBUTION_MODE | 
| if distribution_mode not in ("standalone", "store"): | 
| print >>sys.stderr, "Invalid distribution mode, check config.py" | 
| - sys.exit(4) | 
| + sys.exit(5) | 
| build_mode = config.BUILD_MODE | 
| if build_mode not in ("devbuild", "release"): | 
| print >>sys.stderr, "Invalid build mode, check config.py" | 
| - sys.exit(5) | 
| + sys.exit(6) | 
| if do_build: | 
| - apk_path = build(distribution_mode, build_mode, config.ANDROID_SDK_PATH, | 
| - config.ANDROID_NDK_PATH) | 
| + apk_path = build(architecture, distribution_mode, build_mode, | 
| + config.ANDROID_SDK_PATH, config.ANDROID_NDK_PATH) | 
| if do_sign: | 
| sign(apk_path, config.ANDROID_KEYSTORE_PATH, config.ANDROID_KEY_NAME) | 
| else: | 
| print apk_path |