#!/usr/bin/env python # Create a symlink build tree like the old X11 project "lndir" program. # # Reason for this is simple: synthesizing the Alpha RTL code takes a # looong time, so we don't want to do it unnecessarily, but we also # don't want to include all of the intermediate files from the # synthesis in the source tarball. So we symlink a shadow build tree # off to the side, do the synthesis there. # # We could construct this symlink tree by hand, but that's fragile, so # we'd probably write a script to do it anyway, so we might as well # just use the script to build the shadow tree and have done with it. import os source_root = "source" build_root = "build" if not os.path.isdir(build_root): os.mkdir(build_root) for source_head, dirs, files in os.walk(source_root): build_head = build_root + source_head[len(source_root):] for dn in dirs: d = os.path.join(build_head, dn) if not os.path.isdir(d): os.mkdir(d) for fn in files: if fn == ".git": continue d = os.path.join(build_head, fn) s = os.path.join(source_head, fn) s = os.path.abspath(s) s = os.path.relpath(s, build_head) if not os.path.islink(d): os.symlink(s, d) for extra in set(os.listdir(build_head)) - set(dirs) - set(files): d = os.path.join(build_head, extra) if os.path.islink(d): os.unlink(d) elif os.path.isdir(d) and not os.listdir(d): os.rmdir(d)