old_contents: #!/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.
  
  Before creating any links, the old entries of the TARGET directory will be
  removed.
  
  Usage:
    python tools/make_links.py OPTIONS TARGET SOURCES...
  '''
  
  import optparse
  import os
  import shutil
  import subprocess
  import sys
  import utils
  
  
  def get_options():
    result = optparse.OptionParser()
    result.add_option("--timestamp_file", "",
        help='Create a timestamp file when done creating the links.',
        default='')
    return result.parse_args()
  
  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 create_timestamp_file(options):
    if options.timestamp_file != '':
      dir_name = os.path.dirname(options.timestamp_file)
      if not os.path.exists(dir_name):
        os.mkdir(dir_name)
      open(options.timestamp_file, 'w').close()
  
  
  def main(argv):
    (options, args) = get_options()
    target = os.path.relpath(args[0])
    if os.path.exists(target):
      # If the packages directory already exists, delete the current links inside
      # it. This is necessary, otherwise we can end up having links in there
      # pointing to directories which no longer exist (on incremental builds).
      for link in os.listdir(target):
        os.remove(os.path.join(target, link))
    else:
      os.makedirs(target)
    for source in args[1:]:
      # 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
    create_timestamp_file(options)
    return 0
  
  
  if __name__ == '__main__':
    sys.exit(main(sys.argv))
  
new_contents: #!/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.
  
  Before creating any links, the old entries of the TARGET directory will be
  removed.
  
  Usage:
    python tools/make_links.py OPTIONS TARGET SOURCES...
  '''
  
  import optparse
  import os
  import shutil
  import subprocess
  import sys
  import utils
  
  
  def get_options():
    result = optparse.OptionParser()
    result.add_option("--timestamp_file", "",
        help='Create a timestamp file when done creating the links.',
        default='')
    return result.parse_args()
  
  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 create_timestamp_file(options):
    if options.timestamp_file != '':
      dir_name = os.path.dirname(options.timestamp_file)
      if not os.path.exists(dir_name):
        os.mkdir(dir_name)
      open(options.timestamp_file, 'w').close()
  
  
  def main(argv):
    (options, args) = get_options()
    target = os.path.relpath(args[0])
    if os.path.exists(target):
      # If the packages directory already exists, delete the current links inside
      # it. This is necessary, otherwise we can end up having links in there
      # pointing to directories which no longer exist (on incremental builds).
      for link in os.listdir(target):
        if utils.GuessOS() == 'win32':
          # It seems like python on windows is treating pseudo symlinks to
          # directories as directories.
          os.rmdir(os.path.join(target, link))
        else:
          os.remove(os.path.join(target, link))
    else:
      os.makedirs(target)
    for source in args[1:]:
      # 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
    create_timestamp_file(options)
    return 0
  
  
  if __name__ == '__main__':
    sys.exit(main(sys.argv))
  
subject: Use os.rmdir() for symlinks on windows.