[Xorp-cvs] SF.net SVN: xorp:[11643] trunk/xorp
bms_fbsd at users.sourceforge.net
bms_fbsd at users.sourceforge.net
Wed Dec 2 03:30:16 PST 2009
Revision: 11643
http://xorp.svn.sourceforge.net/xorp/?rev=11643&view=rev
Author: bms_fbsd
Date: 2009-12-02 11:30:15 +0000 (Wed, 02 Dec 2009)
Log Message:
-----------
Expand the use of $ORIGIN in the runtime ELF linker. Do not enable
it by default yet.
The trick here is to always use a relative RPATH of $ORIGIN/../lib,
and to mimic the installed layout in $BUILDDIR using symlinks.
NOTE WELL: This change is not complete; some binaries are installed
further down in the target tree, so using a globally relative path
will break. This change should, however, allow you to run most
binaries from within BUILDDIR without installing during development.
The conditional spamming in each SConscript can be toned down if we
override the behaviour of the existing SharedLibrary builder in
our SConsEnvironment to use our PostActions.
For now, we make the creation of the symlink explicit where needed.
Modified Paths:
--------------
trunk/xorp/SConstruct
trunk/xorp/fea/SConscript
trunk/xorp/fib2mrib/SConscript
trunk/xorp/libcomm/SConscript
trunk/xorp/libfeaclient/SConscript
trunk/xorp/libproto/SConscript
trunk/xorp/libxipc/SConscript
trunk/xorp/libxipc/xrl_std_router.cc
trunk/xorp/libxipc/xrl_std_router.hh
trunk/xorp/libxorp/SConscript
trunk/xorp/mrt/SConscript
trunk/xorp/ospf/SConscript
trunk/xorp/pim/SConscript
trunk/xorp/policy/SConscript
trunk/xorp/policy/backend/SConscript
trunk/xorp/policy/common/SConscript
trunk/xorp/rib/SConscript
trunk/xorp/rip/SConscript
trunk/xorp/static_routes/SConscript
trunk/xorp/vrrp/SConscript
trunk/xorp/xrl/interfaces/SConscript
trunk/xorp/xrl/targets/SConscript
Modified: trunk/xorp/SConstruct
===================================================================
--- trunk/xorp/SConstruct 2009-12-02 11:11:00 UTC (rev 11642)
+++ trunk/xorp/SConstruct 2009-12-02 11:30:15 UTC (rev 11643)
@@ -203,6 +203,15 @@
SConsEnvironment.Chmod = SCons.Action.ActionFactory(os.chmod,
lambda dest, mode: 'Chmod("%s", 0%o)' % (dest, mode))
+def Symlink(src, link_name):
+ try:
+ os.unlink(link_name)
+ except OSError:
+ pass
+ os.symlink(src, link_name)
+SConsEnvironment.Symlink = SCons.Action.ActionFactory(Symlink,
+ lambda src, link_name: 'Symlink("%s", "%s")' % (src, link_name))
+
def InstallProgram(env, dest, files, perm = 0755):
if env.has_key('DESTDIR'):
# NB: use simple concatenation
@@ -507,26 +516,38 @@
'-DDEBUG_CALLBACKS',
])
+#
+# Fixup shared library paths.
# Shared libraries are installed in $exec_prefix/lib by default.
#
-# Experimental feature: if rtld_origin is True, the linker will
-# be passed a relative RPATH. The ORIGIN flag will be enabled for all
-# dynamically linked binaries, instead of hardcoding an absolute RPATH.
+# If rtld_origin is True, the linker will be passed a relative RPATH.
+# This allows the package itself to be relocated in the filesystem
+# as a whole.
#
-# XXX This may not be correct for all binaries. Some binaries still
-# get installed in locations other than $bindir.
if env.has_key('SHAREDLIBS'):
if env['rtld_origin']:
- # XXX Will this pass it to the linker correctly?
- # In most cases the C++ compiler is used as the link tool.
- #env.PrependUnique( LINKFLAGS = [ '-Wl,-z,origin' ] )
- env.PrependUnique( LINKFLAGS = Split('-z origin') )
- rellibdir = os.path.relpath(env.Dir('$libdir').abspath,
- env.Dir('$bindir').abspath)
+ # Build a subdirectory for holding symlinks to libraries upfront, so
+ # that binaries about to be built can be run from inside the BUILDDIR.
+ Execute(Mkdir(builddir + '/lib'))
+ # Tell rtld to turn on $ORIGIN processing by default.
+ # NOTE: GNU ld specific flag.
+ env.PrependUnique( LINKFLAGS = [ '-Wl,-z,origin' ] )
+ #
+ # Now fixup the RPATH.
+ # FIXME This is not correct for all binaries. Some
+ # get installed in locations other than $bindir.
+ # The RPATH actually needs to get re-evaluated on each
+ # binary target, depending on how far down they get installed.
+ #
+ #rellibdir = os.path.relpath(env.Dir('$libdir').abspath,
+ # env.Dir('$bindir').abspath)
+ rellibdir = '../lib'
env.AppendUnique(RPATH = [
env.Literal(os.path.join('\\$$ORIGIN', rellibdir))
])
else:
+ # Hardcode the RPATH to our final destination.
+ # Developers will need to set LD_LIBRARY_PATH until they install.
env.AppendUnique(RPATH = [
'$libdir',
])
Modified: trunk/xorp/fea/SConscript
===================================================================
--- trunk/xorp/fea/SConscript 2009-12-02 11:11:00 UTC (rev 11642)
+++ trunk/xorp/fea/SConscript 2009-12-02 11:30:15 UTC (rev 11643)
@@ -151,6 +151,10 @@
libxorp_fea_srcs += libxfdp_srcs
libxorp_fea = env.SharedLibrary(target = 'libxorp_fea',
source = libxorp_fea_srcs)
+ if env['rtld_origin']:
+ for obj in libxorp_fea:
+ env.AddPostAction(libxorp_fea,
+ env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
env.Alias('install',
env.InstallLibrary('$libdir', libxorp_fea))
else:
Modified: trunk/xorp/fib2mrib/SConscript
===================================================================
--- trunk/xorp/fib2mrib/SConscript 2009-12-02 11:11:00 UTC (rev 11642)
+++ trunk/xorp/fib2mrib/SConscript 2009-12-02 11:30:15 UTC (rev 11643)
@@ -72,6 +72,10 @@
target = 'libxorp_fib2mrib',
source = libxorp_fib2mrib_srcs,
LIBS = '')
+ if env['rtld_origin']:
+ for obj in libxorp_fib2mrib:
+ env.AddPostAction(libxorp_fib2mrib,
+ env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
else:
libxorp_fib2mrib = env.StaticLibrary(
target = 'libxorp_fib2mrib',
Modified: trunk/xorp/libcomm/SConscript
===================================================================
--- trunk/xorp/libcomm/SConscript 2009-12-02 11:11:00 UTC (rev 11642)
+++ trunk/xorp/libcomm/SConscript 2009-12-02 11:30:15 UTC (rev 11643)
@@ -38,6 +38,11 @@
if is_shared:
libxorp_comm = env.SharedLibrary(target = 'libxorp_comm', source = sources)
+ # build symlink for resolving links whilst in BUILDDIR
+ if env['rtld_origin']:
+ for obj in libxorp_comm:
+ env.AddPostAction(libxorp_comm,
+ env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
else:
libxorp_comm = env.StaticLibrary(target = 'libxorp_comm', source = sources)
Modified: trunk/xorp/libfeaclient/SConscript
===================================================================
--- trunk/xorp/libfeaclient/SConscript 2009-12-02 11:11:00 UTC (rev 11642)
+++ trunk/xorp/libfeaclient/SConscript 2009-12-02 11:30:15 UTC (rev 11643)
@@ -44,6 +44,10 @@
if is_shared:
libxorp_fea_client = env.SharedLibrary(target = 'libxorp_fea_client',
source = libxorp_fea_client_srcs)
+ if env['rtld_origin']:
+ for obj in libxorp_fea_client:
+ env.AddPostAction(libxorp_fea_client,
+ env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
else:
libxorp_fea_client = env.StaticLibrary(target = 'libxorp_fea_client',
source = libxorp_fea_client_srcs)
Modified: trunk/xorp/libproto/SConscript
===================================================================
--- trunk/xorp/libproto/SConscript 2009-12-02 11:11:00 UTC (rev 11642)
+++ trunk/xorp/libproto/SConscript 2009-12-02 11:30:15 UTC (rev 11643)
@@ -43,6 +43,10 @@
if is_shared:
libxorp_proto = env.SharedLibrary(target = 'libxorp_proto',
source = sources)
+ if env['rtld_origin']:
+ for obj in libxorp_proto:
+ env.AddPostAction(libxorp_proto,
+ env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
else:
libxorp_proto = env.StaticLibrary(target = 'libxorp_proto',
source = sources)
Modified: trunk/xorp/libxipc/SConscript
===================================================================
--- trunk/xorp/libxipc/SConscript 2009-12-02 11:11:00 UTC (rev 11642)
+++ trunk/xorp/libxipc/SConscript 2009-12-02 11:30:15 UTC (rev 11643)
@@ -106,6 +106,11 @@
if is_shared:
libxipc = libxipc_env.SharedLibrary(target = 'libxorp_ipc',
source = libxipc_sources)
+ # build symlink for resolving links whilst in BUILDDIR
+ if env['rtld_origin']:
+ for obj in libxipc:
+ env.AddPostAction(libxipc,
+ env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
env.Alias('install',
env.InstallLibrary('$libdir', libxipc))
else:
@@ -164,6 +169,11 @@
if is_shared:
libfinder = libfinder_env.SharedLibrary(target = 'libxorp_finder',
source = libfinder_sources)
+ # build symlink for resolving links whilst in BUILDDIR
+ if env['rtld_origin']:
+ for obj in libfinder:
+ env.AddPostAction(libfinder,
+ env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
env.Alias('install',
env.InstallLibrary('$libdir', libfinder))
else:
Modified: trunk/xorp/libxipc/xrl_std_router.cc
===================================================================
--- trunk/xorp/libxipc/xrl_std_router.cc 2009-12-02 11:11:00 UTC (rev 11642)
+++ trunk/xorp/libxipc/xrl_std_router.cc 2009-12-02 11:30:15 UTC (rev 11643)
@@ -23,42 +23,55 @@
#include "xrl_module.h"
#include "xrl_std_router.hh"
-//#include "xrl_pf_inproc.hh"
+//#include "xrl_pf_inproc.hh" // Inproc is deprecated.
#include "xrl_pf_stcp.hh"
-//#include "xrl_pf_sudp.hh"
+//#include "xrl_pf_sudp.hh" // UDP is deprecated.
#include "xrl_pf_unix.hh"
#include "libxorp/xlog.h"
+
// ----------------------------------------------------------------------------
// Helper methods
+#if !defined(XRL_PF)
+#error "A default transport for XRL must be defined using the preprocessor."
+#endif
+
+static const char default_pf[] = { XRL_PF, '\0' };
+
XrlPFListener*
XrlStdRouter::create_listener()
{
const char* pf = getenv("XORP_PF");
+ if (pf == NULL)
+ pf = default_pf;
- if (pf != NULL) {
- switch (pf[0]) {
-#if 0
+ switch (pf[0]) {
+#if 0 // Inproc is deprecated.
case 'i':
return new XrlPFInProcListener(_e, this);
-
+#endif
+ // For the benefit of bench_ipc.sh.
+ case 't':
+ return new XrlPFSTCPListener(_e, this);
+ break;
+#if 0 // UDP is deprecated.
case 'u':
return new XrlPFSUDPListener(_e, this);
#endif
-
case 'x':
+#if XRL_PF != 'x'
XLOG_ASSERT(_unix == NULL);
+#endif
return new XrlPFUNIXListener(_e, this);
-
default:
XLOG_ERROR("Unknown PF %s\n", pf);
XLOG_ASSERT(false);
break;
- }
}
- return new XrlPFSTCPListener(_e, this);
+ XLOG_UNREACHABLE();
+ return 0;
}
static void
@@ -125,6 +138,14 @@
{
_unix = _l = NULL;
+ // We need to check the environment otherwise
+ // we get the compiled-in default.
+ const char* pf = getenv("XORP_PF");
+ if (pf == NULL)
+ pf = default_pf;
+ if (pf[0] != 'x')
+ unix_socket = false;
+
if (unix_socket)
create_unix_listener();
Modified: trunk/xorp/libxipc/xrl_std_router.hh
===================================================================
--- trunk/xorp/libxipc/xrl_std_router.hh 2009-12-02 11:11:00 UTC (rev 11642)
+++ trunk/xorp/libxipc/xrl_std_router.hh 2009-12-02 11:30:15 UTC (rev 11643)
@@ -27,7 +27,11 @@
#include "xrl_router.hh"
#include "xrl_pf.hh"
+#if !defined(XRL_PF) || (XRL_PF == 'x')
+#define UNIX_SOCKET_DEFAULT true
+#else
#define UNIX_SOCKET_DEFAULT false
+#endif
/**
* @short Standard XRL transmission and reception point.
Modified: trunk/xorp/libxorp/SConscript
===================================================================
--- trunk/xorp/libxorp/SConscript 2009-12-02 11:11:00 UTC (rev 11642)
+++ trunk/xorp/libxorp/SConscript 2009-12-02 11:30:15 UTC (rev 11643)
@@ -81,6 +81,17 @@
if is_shared:
libxorp_core = env.SharedLibrary(target = 'libxorp_core',
source = libxorp_core_srcs)
+ # Symlink the library into builddir's copy of lib, so that
+ # rtld $ORIGIN references will pick it up automatically without
+ # relinking. This syntax looks a little weird, as it makes the
+ # action of building the symlink a 'PostAction' in the SCons
+ # dependency graph.
+ # We basically do this for every SharedLibrary we potentially
+ # need to see for binaries not yet installed from the BUILDDIR.
+ if env['rtld_origin']:
+ for obj in libxorp_core:
+ env.AddPostAction(libxorp_core,
+ env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
else:
libxorp_core = env.StaticLibrary(target = 'libxorp_core',
source = libxorp_core_srcs)
Modified: trunk/xorp/mrt/SConscript
===================================================================
--- trunk/xorp/mrt/SConscript 2009-12-02 11:11:00 UTC (rev 11642)
+++ trunk/xorp/mrt/SConscript 2009-12-02 11:30:15 UTC (rev 11643)
@@ -36,6 +36,10 @@
if is_shared:
libxorp_mrt = env.SharedLibrary(target = 'libxorp_mrt', source = sources)
+ if env['rtld_origin']:
+ for obj in libxorp_mrt:
+ env.AddPostAction(libxorp_mrt,
+ env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
else:
libxorp_mrt = env.StaticLibrary(target = 'libxorp_mrt', source = sources)
Modified: trunk/xorp/ospf/SConscript
===================================================================
--- trunk/xorp/ospf/SConscript 2009-12-02 11:11:00 UTC (rev 11642)
+++ trunk/xorp/ospf/SConscript 2009-12-02 11:30:15 UTC (rev 11643)
@@ -91,6 +91,10 @@
libxorp_ospf = env.SharedLibrary(target = 'libxorp_ospf',
source = libxorp_ospf_srcs,
LIBS = '')
+ if env['rtld_origin']:
+ for obj in libxorp_ospf:
+ env.AddPostAction(libxorp_ospf,
+ env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
else:
libxorp_ospf = env.StaticLibrary(target = 'libxorp_ospf',
source = libxorp_ospf_srcs,
Modified: trunk/xorp/pim/SConscript
===================================================================
--- trunk/xorp/pim/SConscript 2009-12-02 11:11:00 UTC (rev 11642)
+++ trunk/xorp/pim/SConscript 2009-12-02 11:30:15 UTC (rev 11643)
@@ -102,6 +102,10 @@
if is_shared:
libxorp_pim = env.SharedLibrary(target = 'libxorp_pim',
source = libxorp_pim_srcs, LIBS = '')
+ if env['rtld_origin']:
+ for obj in libxorp_pim:
+ env.AddPostAction(libxorp_pim,
+ env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
env.Alias('install',
env.InstallLibrary('$libdir', libxorp_pim))
else:
Modified: trunk/xorp/policy/SConscript
===================================================================
--- trunk/xorp/policy/SConscript 2009-12-02 11:11:00 UTC (rev 11642)
+++ trunk/xorp/policy/SConscript 2009-12-02 11:30:15 UTC (rev 11643)
@@ -97,6 +97,10 @@
libxorp_policy = env.SharedLibrary(target = 'libxorp_policy',
source = libxorp_policy_srcs,
LIBS = '')
+ if env['rtld_origin']:
+ for obj in libxorp_policy:
+ env.AddPostAction(libxorp_policy,
+ env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
env.Alias('install', env.InstallLibrary('$libdir', libxorp_policy))
else:
libxorp_policy = env.StaticLibrary(target = 'libxorp_policy',
Modified: trunk/xorp/policy/backend/SConscript
===================================================================
--- trunk/xorp/policy/backend/SConscript 2009-12-02 11:11:00 UTC (rev 11642)
+++ trunk/xorp/policy/backend/SConscript 2009-12-02 11:30:15 UTC (rev 11643)
@@ -44,6 +44,10 @@
if is_shared:
libpbe = env.SharedLibrary(target = 'libxorp_policy_backend',
source = libpbesrcs)
+ if env['rtld_origin']:
+ for obj in libpbe:
+ env.AddPostAction(libpbe,
+ env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
env.Alias('install',
env.InstallLibrary('$libdir', libpbe))
else:
Modified: trunk/xorp/policy/common/SConscript
===================================================================
--- trunk/xorp/policy/common/SConscript 2009-12-02 11:11:00 UTC (rev 11642)
+++ trunk/xorp/policy/common/SConscript 2009-12-02 11:30:15 UTC (rev 11643)
@@ -45,6 +45,10 @@
libpcmsrcs += [ '../../bgp/aspath.cc' ]
libpcm = env.SharedLibrary(target = 'libxorp_policy_common',
source = libpcmsrcs)
+ if env['rtld_origin']:
+ for obj in libpcm:
+ env.AddPostAction(libpcm,
+ env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
env.Alias('install', env.InstallLibrary('$libdir', libpcm))
else:
obj_aspath = env.StaticObject(target = 'aspath',
Modified: trunk/xorp/rib/SConscript
===================================================================
--- trunk/xorp/rib/SConscript 2009-12-02 11:11:00 UTC (rev 11642)
+++ trunk/xorp/rib/SConscript 2009-12-02 11:30:15 UTC (rev 11643)
@@ -102,6 +102,10 @@
libxorp_rib = env.SharedLibrary(target = 'libxorp_rib',
source = libxorp_rib_srcs,
LIBS = '')
+ if env['rtld_origin']:
+ for obj in libxorp_rib:
+ env.AddPostAction(libxorp_rib,
+ env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
else:
libxorp_rib = env.StaticLibrary(target = 'libxorp_rib',
source = libxorp_rib_srcs,
Modified: trunk/xorp/rip/SConscript
===================================================================
--- trunk/xorp/rip/SConscript 2009-12-02 11:11:00 UTC (rev 11642)
+++ trunk/xorp/rip/SConscript 2009-12-02 11:30:15 UTC (rev 11643)
@@ -131,9 +131,17 @@
libxorp_rip = e.SharedLibrary(target = 'libxorp_rip',
source = libxorp_rip_srcs,
LIBS = '')
+ if env['rtld_origin']:
+ for obj in libxorp_rip:
+ env.AddPostAction(libxorp_rip,
+ env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
libxorp_rip_xrl = e.SharedLibrary(target = 'libxorp_rip_xrl',
source = libxorp_rip_xrl_srcs,
LIBS = '')
+ if env['rtld_origin']:
+ for obj in libxorp_rip_xrl:
+ env.AddPostAction(libxorp_rip_xrl,
+ env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
e.Alias('install',
[ e.InstallLibrary('$libdir', libxorp_rip),
e.InstallLibrary('$libdir', libxorp_rip_xrl) ])
@@ -201,9 +209,17 @@
libxorp_ripng = e.SharedLibrary(target = 'libxorp_ripng',
source = libxorp_rip_srcs,
LIBS = '')
+ if env['rtld_origin']:
+ for obj in libxorp_ripng:
+ env.AddPostAction(libxorp_ripng,
+ env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
libxorp_ripngxrl = e.SharedLibrary(target = 'libxorp_ripng_xrl',
source = libxorp_rip_xrl_srcs,
LIBS = '')
+ if env['rtld_origin']:
+ for obj in libxorp_ripngxrl:
+ env.AddPostAction(libxorp_ripngxrl,
+ env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
e.Alias('install',
[ e.InstallLibrary('$libdir', libxorp_ripng),
e.InstallLibrary('$libdir', libxorp_ripngxrl) ])
Modified: trunk/xorp/static_routes/SConscript
===================================================================
--- trunk/xorp/static_routes/SConscript 2009-12-02 11:11:00 UTC (rev 11642)
+++ trunk/xorp/static_routes/SConscript 2009-12-02 11:30:15 UTC (rev 11643)
@@ -75,6 +75,10 @@
target = 'libxorp_static_routes',
source = libxorp_static_routes_srcs,
LIBS = '')
+ if env['rtld_origin']:
+ for obj in libxorp_static_routes:
+ env.AddPostAction(libxorp_static_routes,
+ env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
else:
libxorp_static_routes = env.StaticLibrary(
target = 'libxorp_static_routes',
Modified: trunk/xorp/vrrp/SConscript
===================================================================
--- trunk/xorp/vrrp/SConscript 2009-12-02 11:11:00 UTC (rev 11642)
+++ trunk/xorp/vrrp/SConscript 2009-12-02 11:30:15 UTC (rev 11643)
@@ -72,6 +72,10 @@
libxorp_vrrp = env.SharedLibrary(target = 'libxorp_vrrp',
source = libxorp_vrrp_srcs,
LIBS = '')
+ if env['rtld_origin']:
+ for obj in libxorp_vrrp:
+ env.AddPostAction(libxorp_vrrp,
+ env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
else:
libxorp_vrrp = env.StaticLibrary(target = 'libxorp_vrrp',
source = libxorp_vrrp_srcs,
Modified: trunk/xorp/xrl/interfaces/SConscript
===================================================================
--- trunk/xorp/xrl/interfaces/SConscript 2009-12-02 11:11:00 UTC (rev 11642)
+++ trunk/xorp/xrl/interfaces/SConscript 2009-12-02 11:30:15 UTC (rev 11643)
@@ -105,6 +105,12 @@
if is_shared:
lib = env.SharedLibrary(tgt, src)
+ # symlink an alias for each library when $ORIGIN is in use.
+ if env['rtld_origin']:
+ for obj in lib:
+ env.AddPostAction(lib,
+ env.Symlink(obj.abspath,
+ env['BUILDDIR'] + '/lib/' + str(obj)))
else:
lib = env.StaticLibrary(tgt, src)
Modified: trunk/xorp/xrl/targets/SConscript
===================================================================
--- trunk/xorp/xrl/targets/SConscript 2009-12-02 11:11:00 UTC (rev 11642)
+++ trunk/xorp/xrl/targets/SConscript 2009-12-02 11:30:15 UTC (rev 11643)
@@ -91,6 +91,12 @@
if is_shared:
lib = env.SharedLibrary(target, source)
+ # symlink an alias for each library when $ORIGIN is in use.
+ if env['rtld_origin']:
+ for obj in lib:
+ env.AddPostAction(lib,
+ env.Symlink(obj.abspath,
+ env['BUILDDIR'] + '/lib/' + str(obj)))
else:
lib = env.StaticLibrary(target, source)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Xorp-cvs
mailing list