# 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/. import argparse import os import buildconfig from mozpack.packager.formats import ( FlatFormatter, JarFormatter, OmniJarFormatter, ) from mozpack.packager import SimplePackager from mozpack.copier import ( FileCopier, Jarrer, ) from mozpack.errors import errors from mozpack.files import FileFinder from mozpack.mozjar import JAR_DEFLATED from mozpack.packager.unpack import UnpackFinder from mozpack.unify import UnifiedBuildFinder def main(): parser = argparse.ArgumentParser( description="Merge two builds of a Gecko-based application into a Universal build" ) parser.add_argument("app1", help="Directory containing the application") parser.add_argument("app2", help="Directory containing the application to merge") parser.add_argument( "--non-resource", nargs="+", metavar="PATTERN", default=[], help="Extra files not to be considered as resources", ) options = parser.parse_args() buildconfig.substs["OS_ARCH"] = "Darwin" buildconfig.substs["LIPO"] = os.environ.get("LIPO") app1_finder = UnpackFinder(FileFinder(options.app1, find_executables=True)) app2_finder = UnpackFinder(FileFinder(options.app2, find_executables=True)) app_finder = UnifiedBuildFinder(app1_finder, app2_finder) copier = FileCopier() compress = min(app1_finder.compressed, JAR_DEFLATED) if app1_finder.kind == "flat": formatter = FlatFormatter(copier) elif app1_finder.kind == "jar": formatter = JarFormatter(copier, compress=compress) elif app1_finder.kind == "omni": formatter = OmniJarFormatter( copier, app1_finder.omnijar, compress=compress, non_resources=options.non_resource, ) with errors.accumulate(): packager = SimplePackager(formatter) for p, f in app_finder: packager.add(p, f) packager.close() # Transplant jar preloading information. for path, log in app1_finder.jarlogs.items(): assert isinstance(copier[path], Jarrer) copier[path].preload(log) copier.copy(options.app1, skip_if_older=False) if __name__ == "__main__": main()