forked from OSchip/llvm-project
[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 llvm-svn: 353671
This commit is contained in:
parent
0cc50c6b87
commit
1405ac457b
|
@ -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)
|
||||
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())
|
||||
|
||||
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, 'rcsD', args.output] + files,
|
||||
cwd=temp_directory_root, verbose=args.verbose)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
Loading…
Reference in New Issue