1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 11:02:59 +02:00
llvm-mirror/utils/gn/build/symlink_or_copy.py
Nico Weber 4635e976e8 [gn build] Add infrastructure to create symlinks and use it to create lld's symlinks
This is slightly involved, see the comments in the code.

The GN build now builds a functional lld!

Differential Revision: https://reviews.llvm.org/D55606

llvm-svn: 349096
2018-12-14 00:16:33 +00:00

44 lines
1.2 KiB
Python

#!/usr/bin/env python
"""Symlinks, or on Windows copies, an existing file to a second location.
Overwrites the target location if it exists.
Updates the mtime on a stamp file when done."""
import argparse
import errno
import os
import sys
def main():
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('--stamp', required=True,
help='name of a file whose mtime is updated on run')
parser.add_argument('source')
parser.add_argument('output')
args = parser.parse_args()
# FIXME: This should not check the host platform but the target platform
# (which needs to be passed in as an arg), for cross builds.
if sys.platform != 'win32':
try:
os.symlink(args.source, args.output)
except OSError as e:
if e.errno == errno.EEXIST:
os.remove(args.output)
os.symlink(args.source, args.output)
else:
raise
else:
import shutil
output = args.output + ".exe"
source = args.source + ".exe"
shutil.copyfile(os.path.join(os.path.dirname(output), source), output)
open(args.stamp, 'w') # Update mtime on stamp file.
if __name__ == '__main__':
sys.exit(main())