X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scripts%2Fbuild%2Fmass-link.py;fp=scripts%2Fbuild%2Fmass-link.py;h=17412e5559f6aa7b34a0a17c5e1561703aaa3bff;hb=543171165412bc915d8ea1f308d070c74924b2f1;hp=0000000000000000000000000000000000000000;hpb=dc22ed0f12ec6c81e04512ab40ed2dbd076712a4;p=lilypond.git diff --git a/scripts/build/mass-link.py b/scripts/build/mass-link.py new file mode 100644 index 0000000000..17412e5559 --- /dev/null +++ b/scripts/build/mass-link.py @@ -0,0 +1,67 @@ +#!@PYTHON@ +# mass-link.py + +# USAGE: mass-link.py [--prepend-suffix SUFFIX] symbolic | hard SOURCEDIR DESTDIR FILES +# +# create hard or symbolic links to SOURCEDIR/FILES in DESTDIR +# +# If --prepend-suffix is specified, link to foo.bar will be called fooSUFFIX.bar. +# Shell wildcards expansion is performed on FILES. + +import sys +import os +import glob +import getopt + +print "mass-link.py" + +optlist, args = getopt.getopt (sys.argv[1:], '', ['prepend-suffix=']) +link_type, source_dir, dest_dir = args[0:3] +files = args[3:] + +source_dir = os.path.normpath (source_dir) +dest_dir = os.path.normpath (dest_dir) + +prepended_suffix = '' +for x in optlist: + if x[0] == '--prepend-suffix': + prepended_suffix = x[1] + +if prepended_suffix: + def insert_suffix (p): + l = p.split ('.') + if len (l) >= 2: + l[-2] += prepended_suffix + return '.'.join (l) + return p + prepended_suffix +else: + insert_suffix = lambda p: p + +if link_type == 'symbolic': + link = os.symlink +elif link_type == 'hard': + link = os.link +else: + sys.stderr.write(sys.argv[0] + ': ' + link_type + ": wrong argument, expected 'symbolic' or 'hard'\n") + sys.exit (1) + +sourcefiles = [] +for pattern in files: + sourcefiles += (glob.glob (os.path.join (source_dir, pattern))) + +def relative_path (f): + if source_dir == '.': + return f + return f[len (source_dir) + 1:] + +destfiles = [os.path.join (dest_dir, insert_suffix (relative_path (f))) for f in sourcefiles] + +destdirs = set ([os.path.dirname (dest) for dest in destfiles]) +[os.makedirs (d) for d in destdirs if not os.path.exists (d)] + +def force_link (src,dest): + if os.path.exists (dest): + os.system ('rm -f ' + dest) + link (src, dest) + +map (force_link, sourcefiles, destfiles)