Bug 1347579 - run configure before doing repack. r=aki draft
authorJustin Wood <Callek@gmail.com>
Tue, 28 Mar 2017 16:26:56 -0400
changeset 552780 f067fa3b33157a1afc0906412fb7b4f7e5fe24f3
parent 552779 054219511419b8bf44b1f57a8d834a12c13710e3
child 621909 3aa4bcdd0f0a9fb5a897cb248efd99fa143ee90d
push id51458
push userCallek@gmail.com
push dateWed, 29 Mar 2017 01:24:52 +0000
reviewersaki
bugs1347579
milestone55.0a1
Bug 1347579 - run configure before doing repack. r=aki MozReview-Commit-ID: 4uBwqwtN3i0
browser/config/mozconfigs/macosx64/repack
testing/mozharness/configs/repackage/osx_signed.py
testing/mozharness/scripts/repackage.py
new file mode 100644
--- /dev/null
+++ b/browser/config/mozconfigs/macosx64/repack
@@ -0,0 +1,7 @@
+# This mozconfig is responsible merely for getting the cross tools setup
+# for repacking a .tar into a .dmg as returned from signing.
+
+export MKFSHFS=$topsrcdir/hfsplus-tools/newfs_hfs
+export DMG_TOOL=$topsrcdir/dmg/dmg
+export HFS_TOOL=$topsrcdir/dmg/hfsplus
+ac_add_options --disable-compile-environment
--- a/testing/mozharness/configs/repackage/osx_signed.py
+++ b/testing/mozharness/configs/repackage/osx_signed.py
@@ -1,19 +1,15 @@
 import os
 
 config = {
     "input_filename": "target.tar.gz",
     "output_filename": "target.dmg",
     "input_home": "/home/worker/workspace/inputs",
+    "src_mozconfig": "browser/config/mozconfigs/macosx64/repack",
 
     # ToolTool
     "tooltool_manifest_src": 'browser/config/tooltool-manifests/macosx64/cross-releng.manifest',
     "tooltool_url": 'http://relengapi/tooltool/',
     "tooltool_bootstrap": "setup.sh",
     'tooltool_script': ["/builds/tooltool.py"],
     'tooltool_cache': os.environ.get('TOOLTOOL_CACHE'),
-
-    # Tools to pack a DMG
-    "hfs_tool": "dmg/hfsplus",
-    "dmg_tool": "dmg/dmg",
-    "mkfshfs_tool": "hfsplus-tools/newfs_hfs",
 }
--- a/testing/mozharness/scripts/repackage.py
+++ b/testing/mozharness/scripts/repackage.py
@@ -1,13 +1,14 @@
 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
 from mozharness.mozilla.mock import ERROR_MSGS
 
 
 class Repackage(BaseScript):
 
     config_options = [[
         ['--signed-input', ],
@@ -50,16 +51,18 @@ class Repackage(BaseScript):
         status = self.download_file(url=url,
                                     file_name=config['input_filename'],
                                     parent_dir=config['input_home'])
         if not status:
             self.fatal("Unable to fetch signed input from %s" % config['signed_input'])
 
     def setup(self):
         self._run_tooltool()
+        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()
         for directory in abs_dirs:
             value = abs_dirs[directory]
             abs_dirs[directory] = value
@@ -73,28 +76,22 @@ class Repackage(BaseScript):
         return self.abs_dirs
 
     def repackage(self):
         config = self.config
         dirs = self.query_abs_dirs()
         python = self.query_exe('python2.7')
         infile = os.path.join(config['input_home'], config['input_filename'])
         outfile = os.path.join(dirs['abs_upload_dir'], config['output_filename'])
-        env = {
-            'HFS_TOOL': os.path.join(dirs['abs_mozilla_dir'], config['hfs_tool']),
-            'DMG_TOOL': os.path.join(dirs['abs_mozilla_dir'], config['dmg_tool']),
-            'MKFSHFS': os.path.join(dirs['abs_mozilla_dir'], config['mkfshfs_tool'])
-        }
         command = [python, 'mach', '--log-no-times', 'repackage',
                    '--input', infile,
                    '--output', outfile]
         return self.run_command(
             command=command,
             cwd=dirs['abs_mozilla_dir'],
-            partial_env=env,
             halt_on_failure=True,
         )
 
     def _run_tooltool(self):
         config = self.config
         dirs = self.query_abs_dirs()
         if not config.get('tooltool_manifest_src'):
             return self.warning(ERROR_MSGS['tooltool_manifest_undetermined'])
@@ -111,12 +108,43 @@ class Repackage(BaseScript):
         ]
         cmd.extend(config['tooltool_script'])
         cache = config.get('tooltool_cache')
         if cache:
             cmd.extend(['-c', cache])
         self.info(str(cmd))
         self.run_command(cmd, cwd=dirs['abs_mozilla_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_mozilla_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_mozilla_dir'], '.mozconfig'))
+
+    def _run_configure(self):
+        dirs = self.query_abs_dirs()
+        python = self.query_exe('python2.7')
+        command = [python, 'mach', '--log-no-times', 'configure']
+        return self.run_command(
+            command=command,
+            cwd=dirs['abs_mozilla_dir'],
+            output_timeout=60*3,
+            halt_on_failure=True,
+        )
+
 
 if __name__ == '__main__':
     repack = Repackage()
     repack.run_and_exit()