| #!/usr/bin/env fuchsia-vendored-python |
| # Copyright 2016 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import argparse |
| import errno |
| import os |
| import shutil |
| import sys |
| |
| |
| def Main(): |
| parser = argparse.ArgumentParser( |
| description="Create Mac Framework symlinks" |
| ) |
| parser.add_argument("--framework", action="store", type=str, required=True) |
| parser.add_argument("--version", action="store", type=str) |
| parser.add_argument("--contents", action="store", type=str, nargs="+") |
| parser.add_argument("--stamp", action="store", type=str, required=True) |
| args = parser.parse_args() |
| |
| VERSIONS = "Versions" |
| CURRENT = "Current" |
| |
| # Ensure the Foo.framework/Versions/A/ directory exists and create the |
| # Foo.framework/Versions/Current symlink to it. |
| if args.version: |
| try: |
| os.makedirs( |
| os.path.join(args.framework, VERSIONS, args.version), 0o744 |
| ) |
| except OSError as e: |
| if e.errno != errno.EEXIST: |
| raise e |
| _Relink( |
| os.path.join(args.version), |
| os.path.join(args.framework, VERSIONS, CURRENT), |
| ) |
| |
| # Establish the top-level symlinks in the framework bundle. The dest of |
| # the symlinks may not exist yet. |
| if args.contents: |
| for item in args.contents: |
| _Relink( |
| os.path.join(VERSIONS, CURRENT, item), |
| os.path.join(args.framework, item), |
| ) |
| |
| # Write out a stamp file. |
| if args.stamp: |
| with open(args.stamp, "w") as f: |
| f.write(str(args)) |
| |
| return 0 |
| |
| |
| def _Relink(dest, link): |
| """Creates a symlink to |dest| named |link|. If |link| already exists, |
| it is overwritten.""" |
| try: |
| os.remove(link) |
| except OSError as e: |
| if e.errno != errno.ENOENT: |
| shutil.rmtree(link) |
| os.symlink(dest, link) |
| |
| |
| if __name__ == "__main__": |
| sys.exit(Main()) |