| #!/usr/bin/env python |
| # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| # for details. All rights reserved. Use of this source code is governed by a |
| # BSD-style license that can be found in the LICENSE file. |
| |
| |
| '''Tool for creating symlinks from SOURCES to TARGET. |
| |
| For each SOURCE in SOURCES create a link from SOURCE to TARGET. If a |
| SOURCE ends with .../lib, the lib suffix is ignored when determining |
| the name of the target link. |
| |
| Usage: |
| python tools/make_links.py TARGET SOURCES... |
| ''' |
| |
| import os |
| import subprocess |
| import sys |
| import utils |
| |
| |
| def make_link(source, target): |
| if os.path.islink(target): |
| print 'Removing %s' % target |
| sys.stdout.flush() |
| os.unlink(target) |
| |
| if os.path.isdir(target): |
| print 'Removing %s' % target |
| sys.stdout.flush() |
| os.rmdir(target) |
| |
| print 'Creating link from %s to %s' % (source, target) |
| sys.stdout.flush() |
| |
| if utils.GuessOS() == 'win32': |
| return subprocess.call(['mklink', '/j', target, source], shell=True) |
| else: |
| return subprocess.call(['ln', '-s', source, target]) |
| |
| |
| def main(argv): |
| target = os.path.relpath(argv[1]) |
| if not os.path.exists(target): |
| os.makedirs(target) |
| for source in argv[2:]: |
| # Assume the source directory is named ".../NAME/lib". |
| (name, lib) = os.path.split(source) |
| if lib != 'lib': |
| name = source |
| # Remove any addtional path components preceding NAME. |
| (path, name) = os.path.split(name) |
| if utils.GuessOS() == 'win32': |
| source = os.path.relpath(source) |
| else: |
| source = os.path.relpath(source, start=target) |
| exit_code = make_link(source, os.path.join(target, name)) |
| if exit_code != 0: |
| return exit_code |
| return 0 |
| |
| |
| if __name__ == '__main__': |
| sys.exit(main(sys.argv)) |