forked from mirrors/gecko-dev
		
	 49a9eeaf91
			
		
	
	
		49a9eeaf91
		
	
	
	
	
		
			
			This form hasn't been used since bug 1573435. Differential Revision: https://phabricator.services.mozilla.com/D102375
		
			
				
	
	
		
			176 lines
		
	
	
	
		
			5.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			176 lines
		
	
	
	
		
			5.7 KiB
		
	
	
	
		
			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/.
 | |
| 
 | |
| from __future__ import absolute_import
 | |
| import os
 | |
| import sys
 | |
| 
 | |
| sys.path.insert(1, os.path.dirname(sys.path[0]))  # noqa - don't warn about imports
 | |
| 
 | |
| from mozharness.base.log import FATAL
 | |
| from mozharness.base.script import BaseScript
 | |
| 
 | |
| 
 | |
| class Repackage(BaseScript):
 | |
|     def __init__(self, require_config_file=False):
 | |
|         script_kwargs = {
 | |
|             "all_actions": [
 | |
|                 "setup",
 | |
|                 "repackage",
 | |
|             ],
 | |
|         }
 | |
|         BaseScript.__init__(
 | |
|             self, require_config_file=require_config_file, **script_kwargs
 | |
|         )
 | |
| 
 | |
|     def setup(self):
 | |
|         dirs = self.query_abs_dirs()
 | |
| 
 | |
|         self._run_tooltool()
 | |
| 
 | |
|         mar_path = os.path.join(dirs["abs_input_dir"], "mar")
 | |
|         if self._is_windows():
 | |
|             mar_path += ".exe"
 | |
|         if mar_path and os.path.exists(mar_path):
 | |
|             self.chmod(mar_path, 0o755)
 | |
|         if self.config.get("run_configure", True):
 | |
|             self._get_mozconfig()
 | |
|             self._run_configure()
 | |
| 
 | |
|     def query_abs_dirs(self):
 | |
|         if self.abs_dirs:
 | |
|             return self.abs_dirs
 | |
|         abs_dirs = super(Repackage, self).query_abs_dirs()
 | |
|         config = self.config
 | |
| 
 | |
|         dirs = {}
 | |
|         dirs["abs_input_dir"] = os.path.join(abs_dirs["base_work_dir"], "fetches")
 | |
|         output_dir_suffix = []
 | |
|         if config.get("locale"):
 | |
|             output_dir_suffix.append(config["locale"])
 | |
|         if config.get("repack_id"):
 | |
|             output_dir_suffix.append(config["repack_id"])
 | |
|         dirs["abs_output_dir"] = os.path.join(
 | |
|             abs_dirs["abs_work_dir"], "outputs", *output_dir_suffix
 | |
|         )
 | |
|         for key in dirs.keys():
 | |
|             if key not in abs_dirs:
 | |
|                 abs_dirs[key] = dirs[key]
 | |
|         self.abs_dirs = abs_dirs
 | |
|         return self.abs_dirs
 | |
| 
 | |
|     def repackage(self):
 | |
|         config = self.config
 | |
|         dirs = self.query_abs_dirs()
 | |
| 
 | |
|         subst = {
 | |
|             "package-name": config["package-name"],
 | |
|             # sfx-stub is only defined for Windows targets
 | |
|             "sfx-stub": config.get("sfx-stub"),
 | |
|             "installer-tag": config["installer-tag"],
 | |
|             "stub-installer-tag": config["stub-installer-tag"],
 | |
|             "wsx-stub": config["wsx-stub"],
 | |
|         }
 | |
|         subst.update(dirs)
 | |
|         if config.get("fetch-dir"):
 | |
|             subst.update({"fetch-dir": os.path.abspath(config["fetch-dir"])})
 | |
| 
 | |
|         # Make sure the upload dir is around.
 | |
|         self.mkdir_p(dirs["abs_output_dir"])
 | |
| 
 | |
|         for repack_config in config["repackage_config"]:
 | |
|             command = [sys.executable, "mach", "--log-no-times", "repackage"]
 | |
|             command.extend([arg.format(**subst) for arg in repack_config["args"]])
 | |
|             for arg, filename in repack_config["inputs"].items():
 | |
|                 command.extend(
 | |
|                     [
 | |
|                         "--{}".format(arg),
 | |
|                         os.path.join(dirs["abs_input_dir"], filename),
 | |
|                     ]
 | |
|                 )
 | |
|             command.extend(
 | |
|                 [
 | |
|                     "--output",
 | |
|                     os.path.join(dirs["abs_output_dir"], repack_config["output"]),
 | |
|                 ]
 | |
|             )
 | |
|             self.run_command(
 | |
|                 command=command,
 | |
|                 cwd=dirs["abs_src_dir"],
 | |
|                 halt_on_failure=True,
 | |
|                 env=self.query_env(),
 | |
|             )
 | |
| 
 | |
|     def _run_tooltool(self):
 | |
|         config = self.config
 | |
|         dirs = self.query_abs_dirs()
 | |
|         manifest_src = os.environ.get("TOOLTOOL_MANIFEST")
 | |
|         if not manifest_src:
 | |
|             manifest_src = config.get("tooltool_manifest_src")
 | |
|         if not manifest_src:
 | |
|             return
 | |
| 
 | |
|         cmd = [
 | |
|             sys.executable,
 | |
|             "-u",
 | |
|             os.path.join(dirs["abs_src_dir"], "mach"),
 | |
|             "artifact",
 | |
|             "toolchain",
 | |
|             "-v",
 | |
|             "--retry",
 | |
|             "4",
 | |
|             "--artifact-manifest",
 | |
|             os.path.join(dirs["abs_src_dir"], "toolchains.json"),
 | |
|         ]
 | |
|         if manifest_src:
 | |
|             cmd.extend(
 | |
|                 [
 | |
|                     "--tooltool-manifest",
 | |
|                     os.path.join(dirs["abs_src_dir"], manifest_src),
 | |
|                 ]
 | |
|             )
 | |
|         cache = config.get("tooltool_cache")
 | |
|         if cache:
 | |
|             cmd.extend(["--cache-dir", cache])
 | |
|         self.info(str(cmd))
 | |
|         self.run_command(cmd, cwd=dirs["abs_src_dir"], halt_on_failure=True)
 | |
| 
 | |
|     def _get_mozconfig(self):
 | |
|         """assign mozconfig."""
 | |
|         c = self.config
 | |
|         dirs = self.query_abs_dirs()
 | |
|         abs_mozconfig_path = ""
 | |
| 
 | |
|         # first determine the mozconfig path
 | |
|         if c.get("src_mozconfig"):
 | |
|             self.info("Using in-tree mozconfig")
 | |
|             abs_mozconfig_path = os.path.join(dirs["abs_src_dir"], c["src_mozconfig"])
 | |
|         else:
 | |
|             self.fatal(
 | |
|                 "'src_mozconfig' must be in the config "
 | |
|                 "in order to determine the mozconfig."
 | |
|             )
 | |
| 
 | |
|         # print its contents
 | |
|         self.read_from_file(abs_mozconfig_path, error_level=FATAL)
 | |
| 
 | |
|         # finally, copy the mozconfig to a path that 'mach build' expects it to be
 | |
|         self.copyfile(
 | |
|             abs_mozconfig_path, os.path.join(dirs["abs_src_dir"], ".mozconfig")
 | |
|         )
 | |
| 
 | |
|     def _run_configure(self):
 | |
|         dirs = self.query_abs_dirs()
 | |
|         command = [sys.executable, "mach", "--log-no-times", "configure"]
 | |
|         return self.run_command(
 | |
|             command=command,
 | |
|             cwd=dirs["abs_src_dir"],
 | |
|             output_timeout=60 * 3,
 | |
|             halt_on_failure=True,
 | |
|         )
 | |
| 
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     repack = Repackage()
 | |
|     repack.run_and_exit()
 |