about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rwxr-xr-xscripts/build-many-glibcs.py14
2 files changed, 22 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index c57a8927b3..9c5fdc8e5e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2016-11-25  Joseph Myers  <joseph@codesourcery.com>
+
+	* scripts/build-many-glibcs.py (Context.__init__): Save text of
+	script being executed.
+	(Context.get_script_text): New function.
+	(Context.exec_self): Likewise.
+	(Context.checkout): Re-exec script if changed by checkout process.
+
 2016-11-24  Joseph Myers  <joseph@codesourcery.com>
 
 	* math/bits/mathcalls.h [__GLIBC_USE (IEC_60559_BFP_EXT)]
diff --git a/scripts/build-many-glibcs.py b/scripts/build-many-glibcs.py
index 72f22a8471..3099415c17 100755
--- a/scripts/build-many-glibcs.py
+++ b/scripts/build-many-glibcs.py
@@ -61,6 +61,7 @@ class Context(object):
         self.makefile = os.path.join(self.builddir, 'Makefile')
         self.wrapper = os.path.join(self.builddir, 'wrapper')
         self.save_logs = os.path.join(self.builddir, 'save-logs')
+        self.script_text = self.get_script_text()
         if action != 'checkout':
             self.build_triplet = self.get_build_triplet()
             self.glibc_version = self.get_glibc_version()
@@ -70,6 +71,15 @@ class Context(object):
         self.add_all_configs()
         self.load_versions_json()
 
+    def get_script_text(self):
+        """Return the text of this script."""
+        with open(sys.argv[0], 'r') as f:
+            return f.read()
+
+    def exec_self(self):
+        """Re-execute this script with the same arguments."""
+        os.execv(sys.executable, [sys.executable] + sys.argv)
+
     def get_build_triplet(self):
         """Determine the build triplet with config.guess."""
         config_guess = os.path.join(self.component_srcdir('gcc'),
@@ -644,6 +654,10 @@ class Context(object):
                 self.checkout_tar(k, v, update)
                 revision = v
             self.set_component_version(k, v, explicit_versions[k], revision)
+        if self.get_script_text() != self.script_text:
+            # Rerun the checkout process in case the updated script
+            # uses different default versions or new components.
+            self.exec_self()
 
     def checkout_vcs(self, component, version, update):
         """Check out the given version of the given component from version