mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-08 14:20:07 +00:00
Make build-many-glibcs.py re-exec itself if changed by checkout.
Updating build-many-glibcs.py may result in changes to the default versions of components, or to the set of components (if e.g. Hurd support is added and that requires a new component). It's desirable for the checkout process to leave a source tree that is ready to use. If the checkout updated the script itself, that means it needs to be rerun to cause any new versions or components referenced by the new script version to be properly checked out. This patch makes the script check if it was modified by the checkout process, and re-exec itself (with the same arguments) if so. * 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.
This commit is contained in:
parent
457663a7cd
commit
a1c9859baf
@ -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)]
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user