|  | # 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), 0744) | 
|  | 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()) |