| #!/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()) |