[Xorp-hackers] [PATCH] xorp: Introduce Copy function for SCons and copy tool binaries

igorm at etf.rs igorm at etf.rs
Mon Feb 20 07:22:41 PST 2012


From: Igor Maravic <igorm at etf.rs>

Copy tool binaries to $BUILDDIR/lib/xorp/bin instead of making symlinks.
We have to that so we could run binaries from $BUILDDIR. If we wouldn't do that,
they would search for shared libraries on wrong places (eg. %tool_bin_native_dir/../lib)

Signed-off-by: Igor Maravic <igorm at etf.rs>
---
 xorp/SConstruct                    |   10 ++++++++++
 xorp/bgp/tools/SConscript          |    4 ++--
 xorp/cli/tools/SConscript          |    4 ++--
 xorp/contrib/olsr/tools/SConscript |    4 ++--
 xorp/fea/tools/SConscript          |    2 +-
 xorp/ospf/tools/SConscript         |    6 +++---
 xorp/rib/tools/SConscript          |    4 ++--
 xorp/rip/tools/SConscript          |    4 ++--
 8 files changed, 24 insertions(+), 14 deletions(-)

diff --git a/xorp/SConstruct b/xorp/SConstruct
index 25f0f69..234f3c0 100644
--- a/xorp/SConstruct
+++ b/xorp/SConstruct
@@ -40,6 +40,7 @@ Help("""
 
 import sys
 import os
+import shutil
 import string
 import subprocess
 import fnmatch
@@ -293,6 +294,15 @@ env['CONFIGUREDIR'] = str(builddir) + os.sep + '.sconf_temp'
 SConsEnvironment.Chmod = SCons.Action.ActionFactory(os.chmod,
     lambda dest, mode: 'Chmod("%s", 0%o)' % (dest, mode))
 
+def Copy(src, dest):
+    try:
+        os.unlink(dest)
+    except OSError:
+        pass
+    shutil.copy2(src, dest)
+SConsEnvironment.Copy = SCons.Action.ActionFactory(Copy,
+    lambda src, link_name: 'Copy("%s", to "%s")' % (src, link_name))
+
 def Symlink(src, link_name):
     try:
         os.unlink(link_name)
diff --git a/xorp/bgp/tools/SConscript b/xorp/bgp/tools/SConscript
index 62875a8..eb13bd1 100644
--- a/xorp/bgp/tools/SConscript
+++ b/xorp/bgp/tools/SConscript
@@ -127,7 +127,7 @@ xppeers = env.Program(target = 'bgp_print_peers', source = xppeers_srcs)
 if env['rtld_origin']:
     for obj in xppeers:
         env.AddPostAction(xppeers,
-            env.Symlink(obj.abspath,
+            env.Copy(obj.abspath,
                         os.path.join(env['xorp_alias_tooldir'], str(obj))))
 env.Alias('install',
     env.InstallProgram(env['xorp_tooldir'], xppeers))
@@ -143,7 +143,7 @@ xproutes = env.Program(target = 'bgp_print_routes', source = xproutes_srcs)
 if env['rtld_origin']:
     for obj in xproutes:
         env.AddPostAction(xproutes,
-            env.Symlink(obj.abspath,
+            env.Copy(obj.abspath,
                         os.path.join(env['xorp_alias_tooldir'], str(obj))))
 env.Alias('install', env.InstallProgram(env['xorp_tooldir'], xproutes))
 
diff --git a/xorp/cli/tools/SConscript b/xorp/cli/tools/SConscript
index d1fdfc0..7780711 100644
--- a/xorp/cli/tools/SConscript
+++ b/xorp/cli/tools/SConscript
@@ -84,11 +84,11 @@ sendcli = env.Program(target = 'cli_send_processor_xrl', source = sendclisrcs)
 if env['rtld_origin']:
     for obj in cligen:
         env.AddPostAction(cligen,
-            env.Symlink(obj.abspath,
+            env.Copy(obj.abspath,
                         os.path.join(env['xorp_alias_tooldir'], str(obj))))
     for obj in sendcli:
         env.AddPostAction(sendcli,
-            env.Symlink(obj.abspath,
+            env.Copy(obj.abspath,
                         os.path.join(env['xorp_alias_tooldir'], str(obj))))
 env.Alias('install', env.InstallProgram(env['xorp_tooldir'], cligen))
 env.Alias('install', env.InstallProgram(env['xorp_tooldir'], sendcli))
diff --git a/xorp/contrib/olsr/tools/SConscript b/xorp/contrib/olsr/tools/SConscript
index 6a61597..c0342d1 100644
--- a/xorp/contrib/olsr/tools/SConscript
+++ b/xorp/contrib/olsr/tools/SConscript
@@ -86,11 +86,11 @@ printdb = env.Program(target = 'olsr_print_databases', source = printdbsrcs)
 if env['rtld_origin']:
     for obj in cleardb:
         env.AddPostAction(cleardb,
-            env.Symlink(obj.abspath,
+            env.Copy(obj.abspath,
                         os.path.join(env['xorp_alias_tooldir'], str(obj))))
     for obj in printdb:
         env.AddPostAction(printdb,
-            env.Symlink(obj.abspath,
+            env.Copy(obj.abspath,
                         os.path.join(env['xorp_alias_tooldir'], str(obj))))
 env.Alias('install', env.InstallProgram(env['xorp_tooldir'], cleardb))
 env.Alias('install', env.InstallProgram(env['xorp_tooldir'], printdb))
diff --git a/xorp/fea/tools/SConscript b/xorp/fea/tools/SConscript
index a0c2cdf..96094c1 100644
--- a/xorp/fea/tools/SConscript
+++ b/xorp/fea/tools/SConscript
@@ -85,7 +85,7 @@ showif = env.Program(target = 'fea_show_interfaces', source = showifsrcs)
 if env['rtld_origin']:
     for obj in showif:
         env.AddPostAction(showif,
-            env.Symlink(obj.abspath,
+            env.Copy(obj.abspath,
                         os.path.join(env['xorp_alias_tooldir'], str(obj))))
 env.Alias('install', env.InstallProgram(env['xorp_tooldir'], showif))
 
diff --git a/xorp/ospf/tools/SConscript b/xorp/ospf/tools/SConscript
index f7a86f4..cad0ecc 100644
--- a/xorp/ospf/tools/SConscript
+++ b/xorp/ospf/tools/SConscript
@@ -98,15 +98,15 @@ printneighbors = env.Program(target = 'ospf_print_neighbours',
 if env['rtld_origin']:
     for obj in cleardb:
         env.AddPostAction(cleardb,
-            env.Symlink(obj.abspath,
+            env.Copy(obj.abspath,
                         os.path.join(env['xorp_alias_tooldir'], str(obj))))
     for obj in printlsas:
         env.AddPostAction(printlsas,
-            env.Symlink(obj.abspath,
+            env.Copy(obj.abspath,
                         os.path.join(env['xorp_alias_tooldir'], str(obj))))
     for obj in printneighbors:
         env.AddPostAction(printneighbors,
-            env.Symlink(obj.abspath,
+            env.Copy(obj.abspath,
                         os.path.join(env['xorp_alias_tooldir'], str(obj))))
 env.Alias('install', env.InstallProgram(env['xorp_tooldir'], cleardb))
 env.Alias('install', env.InstallProgram(env['xorp_tooldir'], printlsas))
diff --git a/xorp/rib/tools/SConscript b/xorp/rib/tools/SConscript
index 1697798..6e676a3 100644
--- a/xorp/rib/tools/SConscript
+++ b/xorp/rib/tools/SConscript
@@ -89,11 +89,11 @@ shrtes = env.Program(target = 'rib_show_routes', source = shrtessrcs)
 if env['rtld_origin']:
     for obj in shdist:
         env.AddPostAction(shdist,
-            env.Symlink(obj.abspath,
+            env.Copy(obj.abspath,
                         os.path.join(env['xorp_alias_tooldir'], str(obj))))
     for obj in shrtes:
         env.AddPostAction(shrtes,
-            env.Symlink(obj.abspath,
+            env.Copy(obj.abspath,
                         os.path.join(env['xorp_alias_tooldir'], str(obj))))
 env.Alias('install', env.InstallProgram(env['xorp_tooldir'], shdist))
 env.Alias('install', env.InstallProgram(env['xorp_tooldir'], shrtes))
diff --git a/xorp/rip/tools/SConscript b/xorp/rip/tools/SConscript
index 96d6075..b4676d1 100644
--- a/xorp/rip/tools/SConscript
+++ b/xorp/rip/tools/SConscript
@@ -76,11 +76,11 @@ shstats = env.Program(target = 'rip_show_stats', source = shstatssrcs)
 if env['rtld_origin']:
     for obj in shpeer:
         env.AddPostAction(shpeer,
-            env.Symlink(obj.abspath,
+            env.Copy(obj.abspath,
                         os.path.join(env['xorp_alias_tooldir'], str(obj))))
     for obj in shstats:
         env.AddPostAction(shstats,
-            env.Symlink(obj.abspath,
+            env.Copy(obj.abspath,
                         os.path.join(env['xorp_alias_tooldir'], str(obj))))
 env.Alias('install', env.InstallProgram(env['xorp_tooldir'], shpeer))
 env.Alias('install', env.InstallProgram(env['xorp_tooldir'], shstats))
-- 
1.7.5.4



More information about the Xorp-hackers mailing list