xref: /aosp_15_r20/external/cronet/build/config/mac/package_framework.py (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1# Copyright 2016 The Chromium Authors
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5import argparse
6import errno
7import os
8import shutil
9import sys
10
11def Main():
12  parser = argparse.ArgumentParser(description='Create Mac Framework symlinks')
13  parser.add_argument('--framework', action='store', type=str, required=True)
14  parser.add_argument('--version', action='store', type=str)
15  parser.add_argument('--contents', action='store', type=str, nargs='+')
16  parser.add_argument('--stamp', action='store', type=str, required=True)
17  args = parser.parse_args()
18
19  VERSIONS = 'Versions'
20  CURRENT = 'Current'
21
22  # Ensure the Foo.framework/Versions/A/ directory exists and create the
23  # Foo.framework/Versions/Current symlink to it.
24  if args.version:
25    try:
26      os.makedirs(os.path.join(args.framework, VERSIONS, args.version), 0o755)
27    except OSError as e:
28      if e.errno != errno.EEXIST:
29        raise e
30    _Relink(os.path.join(args.version),
31            os.path.join(args.framework, VERSIONS, CURRENT))
32
33  # Establish the top-level symlinks in the framework bundle. The dest of
34  # the symlinks may not exist yet.
35  if args.contents:
36    for item in args.contents:
37      _Relink(os.path.join(VERSIONS, CURRENT, item),
38              os.path.join(args.framework, item))
39
40  # Write out a stamp file.
41  if args.stamp:
42    with open(args.stamp, 'w') as f:
43      f.write(str(args))
44
45  return 0
46
47
48def _Relink(dest, link):
49  """Creates a symlink to |dest| named |link|. If |link| already exists,
50  it is overwritten."""
51  try:
52    os.remove(link)
53  except OSError as e:
54    if e.errno != errno.ENOENT:
55      shutil.rmtree(link)
56  os.symlink(dest, link)
57
58
59if __name__ == '__main__':
60  sys.exit(Main())
61