From d5eea14d8b1cd978ef937b5906270896a404df79 Mon Sep 17 00:00:00 2001 From: Sergey Popov Date: Sat, 28 Jun 2008 14:01:08 +0000 Subject: [PATCH] Made scons hardlink binaries to working copy root instead of copying them. --- SConstruct | 3 ++- scons/install.py | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/SConstruct b/SConstruct index ee7600bad8a..a2fcf0255a6 100644 --- a/SConstruct +++ b/SConstruct @@ -312,7 +312,8 @@ Import(binaries + ["sources"]) binary_nodes = map(eval, binaries) if build == "release" : build_suffix = "" + env["PROGSUFFIX"] else : build_suffix = "-" + build + env["PROGSUFFIX"] -map(lambda bin, node: Alias(bin, node, node and Copy("./" + bin + build_suffix, node[0].path)), binaries, binary_nodes) +from install import HardLink +map(lambda bin, node: Alias(bin, node, node and HardLink("./" + bin + build_suffix, node[0].path)), binaries, binary_nodes) binaries.remove("test") env.Alias("all", map(Alias, binaries)) env.Default(map(Alias, env["default_targets"])) diff --git a/scons/install.py b/scons/install.py index 1c46ce9deba..e578e62e0d7 100644 --- a/scons/install.py +++ b/scons/install.py @@ -49,6 +49,27 @@ def InstallWithSuffix(env, target, source): return source return env.InstallAs(os.path.join(target, source[0].name + env["program_suffix"]), source) +from SCons.Action import ActionFactory +from shutil import copy2 +def hard_link(dest, src, symlink = False): + try: + if symlink: + os.symlink(src, dest) + else: + os.link(src, dest) + except OSError, e: + if e.errno == 18: + hard_link(dest, src, True) + else: + os.remove(dest) + os.link(src, dest) + except AttributeError: + copy2(src, dest) + +HardLink = ActionFactory(hard_link, + lambda dest, src: 'Hardlinking %s to %s' % (src, dest), + convert=str) + def generate(env): #env.AddMethod(InstallWithSuffix) from SCons.Script.SConscript import SConsEnvironment