summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorPetr Hosek <phosek@chromium.org>2019-02-11 08:48:47 +0000
committerPetr Hosek <phosek@chromium.org>2019-02-11 08:48:47 +0000
commitfc1ec361d39c403915c3c3c2c74468451fade20f (patch)
tree3b8aaf820512b94c206f2ef1c17876c6bfb59751 /utils
parentc882476dfaed7b2db84bf4f3845b632838c1fa92 (diff)
downloadlibcxx-fc1ec361d39c403915c3c3c2c74468451fade20f.tar.gz
[libcxx] Preserve order, avoid duplicates when merging static archives
glob can return files in arbitrary order which breaks deterministic builds. Rather, use `ar t` to list the files in each archive and preserve the original order. Using `ar q` results in duplicate entries in the archive, instead use `ar r` to avoid duplicates. Differential Revision: https://reviews.llvm.org/D58024 git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@353671 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils')
-rwxr-xr-xutils/merge_archives.py17
1 files changed, 9 insertions, 8 deletions
diff --git a/utils/merge_archives.py b/utils/merge_archives.py
index a307494d8..e57afab20 100755
--- a/utils/merge_archives.py
+++ b/utils/merge_archives.py
@@ -78,6 +78,7 @@ def execute_command_verbose(cmd, cwd=None, verbose=False):
sys.stderr.write('%s\n' % report)
if exitCode != 0:
exit_with_cleanups(exitCode)
+ return out
def main():
parser = ArgumentParser(
@@ -119,15 +120,15 @@ def main():
global temp_directory_root
temp_directory_root = tempfile.mkdtemp('.libcxx.merge.archives')
+ files = []
for arc in archives:
- execute_command_verbose([ar_exe, 'x', arc], cwd=temp_directory_root,
- verbose=args.verbose)
-
- files = glob.glob(os.path.join(temp_directory_root, '*.o*'))
- if not files:
- print_and_exit('Failed to glob for %s' % temp_directory_root)
- cmd = [ar_exe, 'qcs', args.output] + files
- execute_command_verbose(cmd, cwd=temp_directory_root, verbose=args.verbose)
+ execute_command_verbose([ar_exe, 'x', arc],
+ cwd=temp_directory_root, verbose=args.verbose)
+ out = execute_command_verbose([ar_exe, 't', arc])
+ files.extend(out.splitlines())
+
+ execute_command_verbose([ar_exe, 'rcsD', args.output] + files,
+ cwd=temp_directory_root, verbose=args.verbose)
if __name__ == '__main__':