[Xorp-cvs] SF.net SVN: xorp:[11655] trunk/xorp

bms_fbsd at users.sourceforge.net bms_fbsd at users.sourceforge.net
Thu Dec 3 12:36:30 PST 2009


Revision: 11655
          http://xorp.svn.sourceforge.net/xorp/?rev=11655&view=rev
Author:   bms_fbsd
Date:     2009-12-03 20:36:29 +0000 (Thu, 03 Dec 2009)

Log Message:
-----------
FHS mega-commit.
Most of these changes affect run-time linkage only.

* Trim CPPPATH/LIBPATH defaults to BSD defaults only.
* Trim libproto's link line.

* Print libraries detected during the configure stage.
* Push use of 3rd party libraries down to each individual XORP component.
* Comment the fact that SCons's autoconf-like configuration support makes
  this more of a hassle than it should be.

* Add support for optimize=minimal (-O1, and disable other optimizations).

* Determine the RPATH for each class of XORP component at the
  top-level SConstruct.
* Set the RPATH, using env.Replace(), in each SConscript, so we have
  fine-grained control.
* The use of os.path.relpath() here now requires Python 2.6.

* Add an additional symlink for the benefit of those components which
  will be installed under $prefix/sbin.

* Do not install call_xrl/xorp_finder, they are not required in deployment.

Most, but not all, XORP binaries will now have resolved dynamic
links before 'scons install', due to the use of the rtld $ORIGIN feature.
All are confirmed to have no unresolved DT_NEEDED entries after
'scons install', using ldd(1); however a router has not yet been run.

Modified Paths:
--------------
    trunk/xorp/SConstruct
    trunk/xorp/bgp/SConscript
    trunk/xorp/bgp/tools/SConscript
    trunk/xorp/cli/SConscript
    trunk/xorp/cli/libtecla/SConscript
    trunk/xorp/cli/tools/SConscript
    trunk/xorp/contrib/mld6igmp_lite/SConscript
    trunk/xorp/contrib/olsr/SConscript
    trunk/xorp/fea/SConscript
    trunk/xorp/fea/tools/SConscript
    trunk/xorp/fib2mrib/SConscript
    trunk/xorp/libcomm/SConscript
    trunk/xorp/libfeaclient/SConscript
    trunk/xorp/libproto/SConscript
    trunk/xorp/libxipc/SConscript
    trunk/xorp/libxipc/tests/SConscript
    trunk/xorp/libxorp/SConscript
    trunk/xorp/mld6igmp/SConscript
    trunk/xorp/mrt/SConscript
    trunk/xorp/ospf/SConscript
    trunk/xorp/ospf/tools/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/rib/tools/SConscript
    trunk/xorp/rip/SConscript
    trunk/xorp/rip/tools/SConscript
    trunk/xorp/rtrmgr/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-03 17:09:29 UTC (rev 11654)
+++ trunk/xorp/SConstruct	2009-12-03 20:36:29 UTC (rev 11655)
@@ -17,13 +17,9 @@
 
 # $ID$
 
-# TODO tone down linker line spamming, -lpcre etc; stage use of LIBS please.
 # TODO cross compiles.
-# TODO Add separate toolchain test for C99 varargs macros.
-# TODO Add separate toolchain test for GNU varargs macros.
 # TODO Fix default include/lib paths, pass in from environment.
 # TODO Merge scons-unfamiliar syntactic sugar from YHC's sconsfiles.
-# TODO conditionalize new directory layout here
 
 gnutoolwarning = """
 WARNING: The GNU %s was not detected on your system.
@@ -32,8 +28,8 @@
 """
 
 # The XRL tgt-gen and clnt-gen scripts use Python 2.3+'s optparse
-# class.
-EnsurePythonVersion(2, 3)
+# class. However, os.path.relpath() requires Python 2.6.
+EnsurePythonVersion(2, 6)
 
 # SCons 0.98.4 is the earliest release that we have tested.  Earlier
 # ones may work.  If so, please submit a Trac issue so the check can
@@ -72,7 +68,8 @@
                  allowed_values=('no', 'yes', 'full', 'override'),
                  map={}, ignorecase=2),
     EnumVariable('optimize', 'Build with optimization', 'yes',
-                 allowed_values=('no', 'yes', 'full', 'size', 'override'),
+                 allowed_values=('no', 'minimal', 'yes', 'full',
+                                 'size', 'override'),
                  map={}, ignorecase=2),
     EnumVariable('profile', 'Build with profiling', 'no',
                  allowed_values=('no', 'gprof', 'pprof', 'override'),
@@ -122,13 +119,15 @@
 
 log_args(builddir + '/.scons_build_args')
 
+# XXX TODO: Make initial CPPPATH/LIBPATH derive from
+# autodetected host system *or* command line.
 env = Environment(
 		  TOOLS = ['default', 'autotest', 'clntgen', 'tgtgen',
 		           'TOOL_SUBST'],
 		  ENV = os.environ,
 		  BUILDDIR = builddir,
-		  CPPPATH=['/usr/sfw/include', '/opt/local/include', '/usr/local/include', '$BUILDDIR'],
-		  LIBPATH=['/usr/sfw/lib', '/opt/local/lib', '/usr/local/lib'],
+		  CPPPATH=['/usr/local/include', '$BUILDDIR'],
+		  LIBPATH=['/usr/local/lib'],
 		  variables = vars)
 
 prefix = env['prefix']
@@ -284,8 +283,9 @@
 # The image layout is intended to be FHS 2.3 compliant, for the benefit
 # of 3rd party packagers and distributors.
 #
+env['xorp_rootdir']     = env['exec_prefix']	# used to determine RPATH
 env['xorp_confdir']     = env['sysconfdir']		# path to xorp.conf
-env['xorp_libdir']      = env['libdir']  + '/xorp/lib'	# Shared libraries
+env['xorp_libdir']      = env['libdir']  + '/xorp/lib'
 env['xorp_moduledir']   = env['libdir']  + '/xorp/sbin'	# Protocol modules
 env['xorp_sbindir']     = env['sbindir']		# End-user binaries
 env['xorp_templatedir'] = env['datadir'] + '/templates'
@@ -300,8 +300,14 @@
 
 ########## start configure magic
 
-if not env.GetOption('clean') and not env.GetOption('help'):
+if env.has_key('LIBS'):
+    pre_LIBS = env['LIBS']
+else:
+    pre_LIBS = []
 
+if not env.GetOption('clean') and \
+   not env.GetOption('help'):
+
     env['MISSING_DEPS'] = []
     env['SKIPPED_DEPS'] = []
 
@@ -381,8 +387,27 @@
     if env['SKIPPED_DEPS']:
         print 'Optional dependencies not found:\n   - %s' % '\n   - '.join(env['SKIPPED_DEPS'])
 
-    conf.Finish()
+    newenv = conf.Finish()
+    #
+    # Configure will put all libraries in global link line, during checks.
+    # This is not what we want, as it means all binaries get these LIBS.
+    # We should be able to check, for libraries, at SCons level,
+    # by looking in conf.havedict, but that isn't exported.
+    #
+    # It seems we'd be best off defining a class of our own, containing
+    # things we want to see, and passing that in and out of the
+    # config tests when we split up allconfig.py.
+    # For now, let's assume that libraries are present, and link against
+    # them on a piecemeal basis.
+    #
+    post_LIBS = env['LIBS']
+    env['LIBS'] = pre_LIBS
 
+    print 'Detected libraries:',
+    for x in post_LIBS:
+        print x,
+    print
+
 ########## end configure magic
 
 if SCons.Tool.FindTool(['gcc'], env) is None or \
@@ -401,7 +426,19 @@
                                  Split(env['CFLAGS'])))
     env.Replace( CXXFLAGS = filter(lambda s: not s.startswith('-O'),
                                    Split(env['CXXFLAGS'])))
-    bigodict = { 'no': '-O0', 'yes': '-O1', 'full': '-O2', 'size': '-Os' }
+    bigodict = { 'no': '-O0',
+                 # 'minimal' denotes only those optimizations
+                 # necessary to force gcc to perform the tree_sink
+                 # pass, to elide most STL template instantiations.
+                 'minimal': "-O1 -fno-defer-pop -fno-delayed-branch \
+-fno-guess-branch-probability -fno-cprop-registers -fno-if-conversion \
+-fno-if-conversion2 -fno-tree-ccp -fno-tree-dce -fno-tree-dominator-opts \
+-fno-tree-dse -fno-tree-ter -fno-tree-lrs -fno-tree-sra \
+-fno-tree-copyrename -fno-tree-fre -fno-tree-ch -fno-unit-at-a-time \
+-fno-merge-constants",
+                 'yes': '-O1',
+                 'full': '-O2',
+                 'size': '-Os' }
     bigoflag = bigodict[env['optimize']]
     if not env['optimize'] == 'no':
         env.AppendUnique(CFLAGS = [ bigoflag ])
@@ -529,42 +566,56 @@
 #
 # 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.
+# as a whole. This also allows us to run binaries before we ship them.
 #
 if env.has_key('SHAREDLIBS'):
     if env['rtld_origin']:
+	#
 	# Build a subdirectory for holding symlinks to libraries upfront, so
 	# that binaries about to be built can be run from inside the BUILDDIR.
-	# Build a further alias for the benefit of entities installed
-	# in $xorp_sbindir.
-	Execute(Mkdir(builddir + '/lib'))
-	Execute(Mkdir(builddir + '/lib/xorp'))
-	Execute(env.Symlink(builddir + '/lib', builddir + '/lib/xorp/lib'))
+	#
+	# XXX Assumes that $libdir is below $exec_prefix. If the
+	# user changes this, results are undefined.
+	#
+	# $BUILDIR/lib will contain .so symlinks
+	#
+	xorp_alias_libdir = os.path.join(builddir, 'lib')
+	Execute(Mkdir(xorp_alias_libdir))
+	env['xorp_alias_libdir'] = xorp_alias_libdir
+	#
+	# Build a further alias for the benefit of entities which
+	# will be later installed in $xorp_sbindir.
+	#
+	# $BUILDIR/lib/xorp/lib will point to $BUILDIR/lib
+	#
+	xorp_alias_subdir = os.path.join(xorp_alias_libdir, 'xorp')
+	Execute(Mkdir(xorp_alias_subdir))
+	#
+	xorp_module_alias_libdir = os.path.join(xorp_alias_subdir, 'lib')
+	Execute(env.Symlink(xorp_alias_libdir, xorp_module_alias_libdir))
+	env['xorp_module_alias_libdir'] = xorp_module_alias_libdir
 
 	# 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))
-	])
+	# Set relative RPATH for each kind of installed XORP component.
+	env['xorp_sbin_rpath'] = os.path.join('\\$$ORIGIN',
+	   os.path.relpath(env.Dir('$xorp_libdir').abspath,
+			   env.Dir('$xorp_sbindir').abspath))
+	env['xorp_tool_rpath'] = os.path.join('\\$$ORIGIN',
+	   os.path.relpath(env.Dir('$xorp_libdir').abspath,
+			   env.Dir('$xorp_tooldir').abspath))
+	env['xorp_module_rpath'] = os.path.join('\\$$ORIGIN',
+	   os.path.relpath(env.Dir('$xorp_libdir').abspath,
+			   env.Dir('$xorp_moduledir').abspath))
     else:
 	# Hardcode the RPATH to our final destination.
-	# Developers will need to set LD_LIBRARY_PATH until they install.
-	env.AppendUnique(RPATH = [
-	    #'$xorp_libdir',
-	    '$libdir',
-	])
+	# Developers will need to set LD_LIBRARY_PATH until they install
+	# binaries from the BUILDDIR.
+	env['xorp_sbin_rpath'] = env['xorp_libdir']
+	env['xorp_tool_rpath'] = env['xorp_libdir']
+	env['xorp_module_rpath'] = env['xorp_libdir']
 
 # Export global symbols as dynamic in executables for runtime backtraces
 # w/o GDB or corefiles in production deployments.
@@ -573,6 +624,7 @@
     '-rdynamic',
     ])
 
-env.SConscript(['SConscript'], variant_dir='$BUILDDIR', exports='env', duplicate=0)
+env.SConscript(['SConscript'], variant_dir='$BUILDDIR',
+               exports='env', duplicate=0)
 
 env.Help(vars.GenerateHelpText(env))

Modified: trunk/xorp/bgp/SConscript
===================================================================
--- trunk/xorp/bgp/SConscript	2009-12-03 17:09:29 UTC (rev 11654)
+++ trunk/xorp/bgp/SConscript	2009-12-03 20:36:29 UTC (rev 11655)
@@ -67,15 +67,14 @@
     'xorp_comm',
 ])
 
+env.Replace(RPATH = [
+    env.Literal(env['xorp_module_rpath'])
+])
+
 ### libxorp_bgp
 
 libxorp_bgp_env = env.Clone()
 
-#if is_shared:
-#    libxorp_bgp_env.AppendUnique(LINKFLAGS = [
-#        '-Wl,-z,defs',
-#    ])
-
 libxorp_bgp_srcs = [
 	'aspath.cc',
 	'attribute_manager.cc',

Modified: trunk/xorp/bgp/tools/SConscript
===================================================================
--- trunk/xorp/bgp/tools/SConscript	2009-12-03 17:09:29 UTC (rev 11654)
+++ trunk/xorp/bgp/tools/SConscript	2009-12-03 20:36:29 UTC (rev 11655)
@@ -45,6 +45,10 @@
     'xorp_comm',
     ])
 
+env.Replace(RPATH = [
+    env.Literal(env['xorp_tool_rpath'])
+])
+
 ### print_peers
 
 ppeers_srcs = [

Modified: trunk/xorp/cli/SConscript
===================================================================
--- trunk/xorp/cli/SConscript	2009-12-03 17:09:29 UTC (rev 11654)
+++ trunk/xorp/cli/SConscript	2009-12-03 20:36:29 UTC (rev 11655)
@@ -46,6 +46,7 @@
     '$BUILDDIR/cli/libtecla',
     ])
 
+# Internal libraries.
 env.AppendUnique(LIBS = [
     'xif_cli_processor',
     'xst_cli',
@@ -56,6 +57,15 @@
     'xorp_core',
     ])
 
+# External libraries.
+env.AppendUnique(LIBS = [
+    'pcreposix'
+])
+
+env.Replace(RPATH = [
+    env.Literal(env['xorp_tool_rpath'])
+])
+
 libxorp_cli_srcs = [
     'cli_client.cc',
     'cli_command.cc',

Modified: trunk/xorp/cli/libtecla/SConscript
===================================================================
--- trunk/xorp/cli/libtecla/SConscript	2009-12-03 17:09:29 UTC (rev 11654)
+++ trunk/xorp/cli/libtecla/SConscript	2009-12-03 20:36:29 UTC (rev 11655)
@@ -66,6 +66,10 @@
     'version.c'
     ]
 
+# External libraries
+env.AppendUnique(LIBS = [
+    'curses'
+])
 
 if is_shared:
     libxorp_tecla = env.SharedLibrary('libxorp_tecla', libtecla_srcs)

Modified: trunk/xorp/cli/tools/SConscript
===================================================================
--- trunk/xorp/cli/tools/SConscript	2009-12-03 17:09:29 UTC (rev 11654)
+++ trunk/xorp/cli/tools/SConscript	2009-12-03 20:36:29 UTC (rev 11655)
@@ -45,6 +45,10 @@
     'xorp_comm',
     ])
 
+env.Replace(RPATH = [
+    env.Literal(env['xorp_tool_rpath'])
+])
+
 cligensrcs = [
 	'cli_generic.cc'
     ]

Modified: trunk/xorp/contrib/mld6igmp_lite/SConscript
===================================================================
--- trunk/xorp/contrib/mld6igmp_lite/SConscript	2009-12-03 17:09:29 UTC (rev 11654)
+++ trunk/xorp/contrib/mld6igmp_lite/SConscript	2009-12-03 20:36:29 UTC (rev 11655)
@@ -62,6 +62,10 @@
     'xorp_comm'
 ])
 
+env.Replace(RPATH = [
+    env.Literal(env['xorp_module_rpath'])
+])
+
 libmld6igmplitesrcs = [
 	'mld6igmp_config.cc',
 	'mld6igmp_group_record.cc',

Modified: trunk/xorp/contrib/olsr/SConscript
===================================================================
--- trunk/xorp/contrib/olsr/SConscript	2009-12-03 17:09:29 UTC (rev 11654)
+++ trunk/xorp/contrib/olsr/SConscript	2009-12-03 20:36:29 UTC (rev 11655)
@@ -69,6 +69,10 @@
     'xorp_comm',
 ])
 
+env.Replace(RPATH = [
+    env.Literal(env['xorp_module_rpath'])
+])
+
 ### libolsr
 
 libolsrsrcs = [

Modified: trunk/xorp/fea/SConscript
===================================================================
--- trunk/xorp/fea/SConscript	2009-12-03 17:09:29 UTC (rev 11654)
+++ trunk/xorp/fea/SConscript	2009-12-03 20:36:29 UTC (rev 11655)
@@ -108,8 +108,15 @@
     'xorp_core'
     ]
 
+# Internal libraries.
+# Note special use of conditional above.
 env.PrependUnique(LIBS = libxorp_fea_linkorder)
 
+# External libraries.
+env.AppendUnique(LIBS = [
+    'pcap'
+])
+
 # Report unresolved symbol references when building the FEA.
 if is_shared:
     env.AppendUnique(LINKFLAGS = [ '-Wl,-z,defs', ])
@@ -147,6 +154,10 @@
      'xrl_mfea_node.cc'
     ]
 
+env.Replace(RPATH = [
+    env.Literal(env['xorp_module_rpath'])
+])
+
 if is_shared:
     libxorp_fea_srcs += libxfdp_srcs
     libxorp_fea = env.SharedLibrary(target = 'libxorp_fea',
@@ -154,7 +165,8 @@
     if env['rtld_origin']:
         for obj in libxorp_fea:
             env.AddPostAction(libxorp_fea,
-                env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
+                env.Symlink(obj.abspath,
+                            os.path.join(env['xorp_alias_libdir'], str(obj))))
     env.Alias('install',
               env.InstallLibrary(env['xorp_libdir'], libxorp_fea))
 else:
@@ -167,14 +179,6 @@
 
 #######################
 
-# new path
-#feapath = '$bindir'
-
-# old path
-feapath = '$exec_prefix/fea'
-
-#######################
-
 env = env.Clone()
 
 if is_shared:

Modified: trunk/xorp/fea/tools/SConscript
===================================================================
--- trunk/xorp/fea/tools/SConscript	2009-12-03 17:09:29 UTC (rev 11654)
+++ trunk/xorp/fea/tools/SConscript	2009-12-03 20:36:29 UTC (rev 11655)
@@ -49,6 +49,10 @@
     'xorp_comm',
     ])
 
+env.Replace(RPATH = [
+    env.Literal(env['xorp_tool_rpath'])
+])
+
 showifsrcs = [
 	'show_interfaces.cc'
     ]

Modified: trunk/xorp/fib2mrib/SConscript
===================================================================
--- trunk/xorp/fib2mrib/SConscript	2009-12-03 17:09:29 UTC (rev 11654)
+++ trunk/xorp/fib2mrib/SConscript	2009-12-03 20:36:29 UTC (rev 11655)
@@ -61,6 +61,10 @@
     'xorp_comm'
 ])
 
+env.Replace(RPATH = [
+    env.Literal(env['xorp_module_rpath'])
+])
+
 libxorp_fib2mrib_srcs = [
 	     'fib2mrib_node.cc',
 	     'fib2mrib_varrw.cc',
@@ -75,7 +79,8 @@
     if env['rtld_origin']:
         for obj in libxorp_fib2mrib:
             env.AddPostAction(libxorp_fib2mrib,
-                env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
+                env.Symlink(obj.abspath,
+                            os.path.join(env['xorp_alias_libdir'], str(obj))))
 else:
     libxorp_fib2mrib = env.StaticLibrary(
 	target = 'libxorp_fib2mrib',

Modified: trunk/xorp/libcomm/SConscript
===================================================================
--- trunk/xorp/libcomm/SConscript	2009-12-03 17:09:29 UTC (rev 11654)
+++ trunk/xorp/libcomm/SConscript	2009-12-03 20:36:29 UTC (rev 11655)
@@ -42,7 +42,8 @@
     if env['rtld_origin']:
         for obj in libxorp_comm:
             env.AddPostAction(libxorp_comm,
-                env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
+                env.Symlink(obj.abspath,
+                            os.path.join(env['xorp_alias_libdir'], str(obj))))
 else:
     libxorp_comm = env.StaticLibrary(target = 'libxorp_comm', source = sources)
 

Modified: trunk/xorp/libfeaclient/SConscript
===================================================================
--- trunk/xorp/libfeaclient/SConscript	2009-12-03 17:09:29 UTC (rev 11654)
+++ trunk/xorp/libfeaclient/SConscript	2009-12-03 20:36:29 UTC (rev 11655)
@@ -47,7 +47,8 @@
     if env['rtld_origin']:
         for obj in libxorp_fea_client:
             env.AddPostAction(libxorp_fea_client,
-                env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
+                env.Symlink(obj.abspath,
+                            os.path.join(env['xorp_alias_libdir'], 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-03 17:09:29 UTC (rev 11654)
+++ trunk/xorp/libproto/SConscript	2009-12-03 20:36:29 UTC (rev 11655)
@@ -28,9 +28,11 @@
 
 env.AppendUnique(CPPPATH = [ "#" ])
 env.PrependUnique(LIBPATH = [ '$BUILDDIR/libxorp'] )
-# XXX 'crypto' is a base system prerequisite; use LINKFLAGS?
-env.AppendUnique(LIBS = ['xorp_core', 'crypto'])
 
+env.AppendUnique(LIBS = [
+    'xorp_core'
+])
+
 sources = [
 	'checksum.c',
 	'packet.cc',
@@ -46,7 +48,8 @@
     if env['rtld_origin']:
         for obj in libxorp_proto:
             env.AddPostAction(libxorp_proto,
-                env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
+                env.Symlink(obj.abspath,
+                            os.path.join(env['xorp_alias_libdir'], str(obj))))
 else:
     libxorp_proto = env.StaticLibrary(target = 'libxorp_proto',
 				      source = sources)

Modified: trunk/xorp/libxipc/SConscript
===================================================================
--- trunk/xorp/libxipc/SConscript	2009-12-03 17:09:29 UTC (rev 11654)
+++ trunk/xorp/libxipc/SConscript	2009-12-03 20:36:29 UTC (rev 11655)
@@ -41,11 +41,17 @@
     '$BUILDDIR/libxorp'
     ])
 
+# Internal libraries
 libxipc_env.AppendUnique(LIBS = [
     'xorp_comm',
     'xorp_core'
     ])
 
+# External libraries
+libxipc_env.AppendUnique(LIBS = [
+    'crypto'
+    ])
+
 libxipc_sources = [
     'finder_client.cc',
     'finder_client_observer.cc',
@@ -110,7 +116,8 @@
     if env['rtld_origin']:
         for obj in libxipc:
             env.AddPostAction(libxipc,
-                env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
+                env.Symlink(obj.abspath,
+                            os.path.join(env['xorp_alias_libdir'], str(obj))))
     env.Alias('install',
               env.InstallLibrary(env['xorp_libdir'], libxipc))
 else:
@@ -173,7 +180,8 @@
     if env['rtld_origin']:
         for obj in libfinder:
             env.AddPostAction(libfinder,
-                env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
+                env.Symlink(obj.abspath,
+                            os.path.join(env['xorp_alias_libdir'], str(obj))))
     env.Alias('install',
               env.InstallLibrary(env['xorp_libdir'], libfinder))
 else:
@@ -203,6 +211,10 @@
     'xorp_core'
     ])
 
+env.Replace(RPATH = [
+    env.Literal(env['xorp_sbin_rpath'])
+])
+
 xorp_finder = env.Program(target = 'xorp_finder',
                      source = [ 'finder_main.cc' ])
 

Modified: trunk/xorp/libxipc/tests/SConscript
===================================================================
--- trunk/xorp/libxipc/tests/SConscript	2009-12-03 17:09:29 UTC (rev 11654)
+++ trunk/xorp/libxipc/tests/SConscript	2009-12-03 20:36:29 UTC (rev 11655)
@@ -87,7 +87,7 @@
     return [ x.replace('$BUILDDIR', Dir(tenv['BUILDDIR']).abspath) \
              for x in tenv['LIBPATH'] ]
 
-env['RPATH'] += local_rpath(env)
+env.AppendUnique(RPATH = local_rpath(env) )
 
 env.PrependUnique(LIBS = [
 	'xif_test_xrls',

Modified: trunk/xorp/libxorp/SConscript
===================================================================
--- trunk/xorp/libxorp/SConscript	2009-12-03 17:09:29 UTC (rev 11654)
+++ trunk/xorp/libxorp/SConscript	2009-12-03 20:36:29 UTC (rev 11655)
@@ -28,6 +28,10 @@
 
 env.AppendUnique(CPPPATH = [ '#' ])
 
+# External libraries.
+# On BSD, and others, we need -lrt for clock_gettime().
+env.AppendUnique(LIBS = [ 'rt' ])
+
 libxorp_core_srcs = [
 	# C files
 	'daemon.c',
@@ -91,7 +95,8 @@
     if env['rtld_origin']:
         for obj in libxorp_core:
             env.AddPostAction(libxorp_core,
-                env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
+                env.Symlink(obj.abspath,
+                            os.path.join(env['xorp_alias_libdir'], str(obj))))
 else:
     libxorp_core = env.StaticLibrary(target = 'libxorp_core',
 				     source = libxorp_core_srcs)

Modified: trunk/xorp/mld6igmp/SConscript
===================================================================
--- trunk/xorp/mld6igmp/SConscript	2009-12-03 17:09:29 UTC (rev 11654)
+++ trunk/xorp/mld6igmp/SConscript	2009-12-03 20:36:29 UTC (rev 11655)
@@ -72,6 +72,10 @@
 	     'xrl_mld6igmp_node.cc'
              ]
 
+env.Replace(RPATH = [
+    env.Literal(env['xorp_module_rpath'])
+])
+
 if is_shared:
     libxorp_mld6igmp = env.SharedLibrary(target = 'libxorp_mld6igmp',
 					 source = libxorp_mld6igmp_srcs,
@@ -79,7 +83,8 @@
     if env['rtld_origin']:
         for obj in libxorp_mld6igmp:
             env.AddPostAction(libxorp_mld6igmp,
-                env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
+                env.Symlink(obj.abspath,
+                            os.path.join(env['xorp_alias_libdir'], str(obj))))
 else:
     libxorp_mld6igmp = env.StaticLibrary(target = 'libxorp_mld6igmp',
 					 source = libxorp_mld6igmp_srcs,

Modified: trunk/xorp/mrt/SConscript
===================================================================
--- trunk/xorp/mrt/SConscript	2009-12-03 17:09:29 UTC (rev 11654)
+++ trunk/xorp/mrt/SConscript	2009-12-03 20:36:29 UTC (rev 11655)
@@ -39,7 +39,8 @@
     if env['rtld_origin']:
         for obj in libxorp_mrt:
             env.AddPostAction(libxorp_mrt,
-                env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
+                env.Symlink(obj.abspath,
+                            os.path.join(env['xorp_alias_libdir'], str(obj))))
 else:
     libxorp_mrt = env.StaticLibrary(target = 'libxorp_mrt', source = sources)
 

Modified: trunk/xorp/ospf/SConscript
===================================================================
--- trunk/xorp/ospf/SConscript	2009-12-03 17:09:29 UTC (rev 11654)
+++ trunk/xorp/ospf/SConscript	2009-12-03 20:36:29 UTC (rev 11655)
@@ -70,6 +70,10 @@
     'xorp_comm',
 ])
 
+env.Replace(RPATH = [
+    env.Literal(env['xorp_module_rpath'])
+])
+
 libxorp_ospf_srcs = [
 	     'auth.cc',
 	     'area_router.cc',
@@ -94,7 +98,8 @@
     if env['rtld_origin']:
         for obj in libxorp_ospf:
             env.AddPostAction(libxorp_ospf,
-                env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
+                env.Symlink(obj.abspath,
+                            os.path.join(env['xorp_alias_libdir'], str(obj))))
 else:
     libxorp_ospf = env.StaticLibrary(target = 'libxorp_ospf',
 				     source = libxorp_ospf_srcs,

Modified: trunk/xorp/ospf/tools/SConscript
===================================================================
--- trunk/xorp/ospf/tools/SConscript	2009-12-03 17:09:29 UTC (rev 11654)
+++ trunk/xorp/ospf/tools/SConscript	2009-12-03 20:36:29 UTC (rev 11655)
@@ -48,6 +48,10 @@
     'xorp_comm',
     ])
 
+env.Replace(RPATH = [
+    env.Literal(env['xorp_tool_rpath'])
+])
+
 cleardbsrcs = [
 	'clear_database.cc'
     ]

Modified: trunk/xorp/pim/SConscript
===================================================================
--- trunk/xorp/pim/SConscript	2009-12-03 17:09:29 UTC (rev 11654)
+++ trunk/xorp/pim/SConscript	2009-12-03 20:36:29 UTC (rev 11655)
@@ -64,6 +64,10 @@
     'xorp_comm'
 ])
 
+env.Replace(RPATH = [
+    env.Literal(env['xorp_module_rpath'])
+])
+
 libxorp_pim_srcs = [
 	     'pim_bsr.cc',
 	     'pim_config.cc',
@@ -105,7 +109,8 @@
     if env['rtld_origin']:
         for obj in libxorp_pim:
             env.AddPostAction(libxorp_pim,
-                env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
+                env.Symlink(obj.abspath,
+                            os.path.join(env['xorp_alias_libdir'], str(obj))))
     env.Alias('install',
               env.InstallLibrary(env['xorp_libdir'], libxorp_pim))
 else:

Modified: trunk/xorp/policy/SConscript
===================================================================
--- trunk/xorp/policy/SConscript	2009-12-03 17:09:29 UTC (rev 11654)
+++ trunk/xorp/policy/SConscript	2009-12-03 20:36:29 UTC (rev 11655)
@@ -61,6 +61,10 @@
     'xorp_comm'
 ])
 
+env.Replace(RPATH = [
+    env.Literal(env['xorp_module_rpath'])
+])
+
 libxorp_policy_srcs = [
      'code.cc',
      'code_generator.cc',
@@ -100,7 +104,8 @@
     if env['rtld_origin']:
         for obj in libxorp_policy:
             env.AddPostAction(libxorp_policy,
-                env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
+                env.Symlink(obj.abspath,
+                            os.path.join(env['xorp_alias_libdir'], str(obj))))
     env.Alias('install', env.InstallLibrary(env['xorp_libdir'], libxorp_policy))
 else:
     libxorp_policy = env.StaticLibrary(target = 'libxorp_policy',

Modified: trunk/xorp/policy/backend/SConscript
===================================================================
--- trunk/xorp/policy/backend/SConscript	2009-12-03 17:09:29 UTC (rev 11654)
+++ trunk/xorp/policy/backend/SConscript	2009-12-03 20:36:29 UTC (rev 11655)
@@ -47,7 +47,8 @@
     if env['rtld_origin']:
         for obj in libpbe:
             env.AddPostAction(libpbe,
-                env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
+                env.Symlink(obj.abspath,
+                            os.path.join(env['xorp_alias_libdir'], str(obj))))
     env.Alias('install',
         env.InstallLibrary(env['xorp_libdir'], libpbe))
 else:

Modified: trunk/xorp/policy/common/SConscript
===================================================================
--- trunk/xorp/policy/common/SConscript	2009-12-03 17:09:29 UTC (rev 11654)
+++ trunk/xorp/policy/common/SConscript	2009-12-03 20:36:29 UTC (rev 11655)
@@ -38,6 +38,11 @@
     'varrw.cc'
     ]
 
+# External libraries
+env.AppendUnique(LIBS = [
+    'pcreposix'
+])
+
 is_shared = env.has_key('SHAREDLIBS')
 
 # deal with bgp aspath shared code
@@ -48,7 +53,8 @@
     if env['rtld_origin']:
         for obj in libpcm:
             env.AddPostAction(libpcm,
-                env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
+                env.Symlink(obj.abspath,
+                            os.path.join(env['xorp_alias_libdir'], str(obj))))
     env.Alias('install', env.InstallLibrary(env['xorp_libdir'], libpcm))
 else:
     obj_aspath = env.StaticObject(target = 'aspath',

Modified: trunk/xorp/rib/SConscript
===================================================================
--- trunk/xorp/rib/SConscript	2009-12-03 17:09:29 UTC (rev 11654)
+++ trunk/xorp/rib/SConscript	2009-12-03 20:36:29 UTC (rev 11655)
@@ -75,6 +75,10 @@
     'xorp_comm'
 ])
 
+env.Replace(RPATH = [
+    env.Literal(env['xorp_module_rpath'])
+])
+
 libxorp_rib_srcs = [
 	     'profile_vars.cc',
 	     'protocol.cc',
@@ -105,7 +109,8 @@
     if env['rtld_origin']:
         for obj in libxorp_rib:
             env.AddPostAction(libxorp_rib,
-                env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
+                env.Symlink(obj.abspath,
+                            os.path.join(env['xorp_alias_libdir'], str(obj))))
 else:
     libxorp_rib = env.StaticLibrary(target = 'libxorp_rib',
 				    source = libxorp_rib_srcs,

Modified: trunk/xorp/rib/tools/SConscript
===================================================================
--- trunk/xorp/rib/tools/SConscript	2009-12-03 17:09:29 UTC (rev 11654)
+++ trunk/xorp/rib/tools/SConscript	2009-12-03 20:36:29 UTC (rev 11655)
@@ -48,6 +48,10 @@
     'xorp_comm',
     ])
 
+env.Replace(RPATH = [
+    env.Literal(env['xorp_tool_rpath'])
+])
+
 shdistsrcs = [
 	'show_distances.cc'
     ]

Modified: trunk/xorp/rip/SConscript
===================================================================
--- trunk/xorp/rip/SConscript	2009-12-03 17:09:29 UTC (rev 11654)
+++ trunk/xorp/rip/SConscript	2009-12-03 20:36:29 UTC (rev 11655)
@@ -28,7 +28,7 @@
 SConscript(dirs = subdirs, exports='env')
 
 e = env.Clone()
-is_shared = env.has_key('SHAREDLIBS')
+is_shared = e.has_key('SHAREDLIBS')
 
 #
 # NB: The same sources are used for RIP and RIPng.  We use separate
@@ -123,24 +123,30 @@
     'xorp_core',
 ])
 
+e.Replace(RPATH = [
+    e.Literal(e['xorp_module_rpath'])
+])
+
 if is_shared:
     libxorp_rip = e.SharedLibrary(target = 'libxorp_rip',
 				  source = libxorp_rip_srcs,
 				  LIBS = '')
-    if env['rtld_origin']:
+    if e['rtld_origin']:
         for obj in libxorp_rip:
-            env.AddPostAction(libxorp_rip,
-                env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
+            e.AddPostAction(libxorp_rip,
+                e.Symlink(obj.abspath,
+                          os.path.join(env['xorp_alias_libdir'], str(obj))))
     libxorp_rip_xrl = e.SharedLibrary(target = 'libxorp_rip_xrl',
 				      source = libxorp_rip_xrl_srcs,
 				      LIBS = '')
-    if env['rtld_origin']:
+    if e['rtld_origin']:
         for obj in libxorp_rip_xrl:
-            env.AddPostAction(libxorp_rip_xrl,
-                env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
+            e.AddPostAction(libxorp_rip_xrl,
+                e.Symlink(obj.abspath,
+                            os.path.join(env['xorp_alias_libdir'], str(obj))))
     e.Alias('install',
-                [ e.InstallLibrary(env['xorp_libdir'], libxorp_rip),
-                  e.InstallLibrary(env['xorp_libdir'], libxorp_rip_xrl) ])
+                [ e.InstallLibrary(e['xorp_libdir'], libxorp_rip),
+                  e.InstallLibrary(e['xorp_libdir'], libxorp_rip_xrl) ])
 else:
     libxorp_rip = e.StaticLibrary(target = 'libxorp_rip',
 				  source = libxorp_rip_srcs,
@@ -150,7 +156,7 @@
 				      LIBS = '')
 
 rip = e.Program(target = 'xorp_rip', source = ripsrcs)
-e.Alias('install', e.InstallProgram(env['xorp_moduledir'], rip))
+e.Alias('install', e.InstallProgram(e['xorp_moduledir'], rip))
 
 #
 # RIPng
@@ -201,24 +207,30 @@
     'xorp_core',
 ])
 
+e.Replace(RPATH = [
+    e.Literal(e['xorp_module_rpath'])
+])
+
 if is_shared:
     libxorp_ripng = e.SharedLibrary(target = 'libxorp_ripng',
 				    source = libxorp_rip_srcs,
 				    LIBS = '')
-    if env['rtld_origin']:
+    if e['rtld_origin']:
         for obj in libxorp_ripng:
-            env.AddPostAction(libxorp_ripng,
-                env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
+            e.AddPostAction(libxorp_ripng,
+                e.Symlink(obj.abspath,
+                          os.path.join(env['xorp_alias_libdir'], str(obj))))
     libxorp_ripngxrl = e.SharedLibrary(target = 'libxorp_ripng_xrl',
 				       source = libxorp_rip_xrl_srcs,
 				       LIBS = '')
-    if env['rtld_origin']:
+    if e['rtld_origin']:
         for obj in libxorp_ripngxrl:
-            env.AddPostAction(libxorp_ripngxrl,
-                env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
+            e.AddPostAction(libxorp_ripngxrl,
+                e.Symlink(obj.abspath,
+                          os.path.join(env['xorp_alias_libdir'], str(obj))))
     e.Alias('install',
-                [ e.InstallLibrary(env['xorp_libdir'], libxorp_ripng),
-                  e.InstallLibrary(env['xorp_libdir'], libxorp_ripngxrl) ])
+                [ e.InstallLibrary(e['xorp_libdir'], libxorp_ripng),
+                  e.InstallLibrary(e['xorp_libdir'], libxorp_ripngxrl) ])
 else:
     libxorp_ripng = e.StaticLibrary(target = 'libxorp_ripng',
 				    source = libxorp_rip_srcs,
@@ -228,6 +240,6 @@
 				       LIBS = '')
 
 ripng = e.Program(target = 'xorp_ripng', source = ripngsrcs)
-e.Alias('install', e.InstallProgram(env['xorp_moduledir'], ripng))
+e.Alias('install', e.InstallProgram(e['xorp_moduledir'], ripng))
 
 Default(rip, ripng)

Modified: trunk/xorp/rip/tools/SConscript
===================================================================
--- trunk/xorp/rip/tools/SConscript	2009-12-03 17:09:29 UTC (rev 11654)
+++ trunk/xorp/rip/tools/SConscript	2009-12-03 20:36:29 UTC (rev 11655)
@@ -46,6 +46,10 @@
     'xorp_comm',
     ])
 
+env.Replace(RPATH = [
+    env.Literal(env['xorp_tool_rpath'])
+])
+
 shpeersrcs = [
 	'show_peer_stats.cc',
 	'common.cc'

Modified: trunk/xorp/rtrmgr/SConscript
===================================================================
--- trunk/xorp/rtrmgr/SConscript	2009-12-03 17:09:29 UTC (rev 11654)
+++ trunk/xorp/rtrmgr/SConscript	2009-12-03 20:36:29 UTC (rev 11655)
@@ -122,6 +122,13 @@
 libxorp_rtrmgr = libxorp_rtrmgr_env.StaticLibrary(target = 'libxorp_rtrmgr',
 					source = libxorp_rtrmgr_srcs)
 
+#
+# Common RPATH.
+#
+env.Replace(RPATH = [
+    env.Literal(env['xorp_sbin_rpath'])
+])
+
 ### rtrmgr
 
 rtrmgr_env = env.Clone()

Modified: trunk/xorp/static_routes/SConscript
===================================================================
--- trunk/xorp/static_routes/SConscript	2009-12-03 17:09:29 UTC (rev 11654)
+++ trunk/xorp/static_routes/SConscript	2009-12-03 20:36:29 UTC (rev 11655)
@@ -60,6 +60,10 @@
     'xorp_comm',
     ])
 
+env.Replace(RPATH = [
+    env.Literal(env['xorp_module_rpath'])
+])
+
 libxorp_static_routes_srcs = [
     'static_routes_node.cc',
     'static_routes_varrw.cc',
@@ -78,7 +82,8 @@
     if env['rtld_origin']:
         for obj in libxorp_static_routes:
             env.AddPostAction(libxorp_static_routes,
-                env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
+                env.Symlink(obj.abspath,
+                            os.path.join(env['xorp_alias_libdir'], str(obj))))
 else:
     libxorp_static_routes = env.StaticLibrary(
 	target = 'libxorp_static_routes',

Modified: trunk/xorp/vrrp/SConscript
===================================================================
--- trunk/xorp/vrrp/SConscript	2009-12-03 17:09:29 UTC (rev 11654)
+++ trunk/xorp/vrrp/SConscript	2009-12-03 20:36:29 UTC (rev 11655)
@@ -68,6 +68,10 @@
 	       'vrrp_vif.cc'
 	       ]
 
+env.Replace(RPATH = [
+    env.Literal(env['xorp_module_rpath'])
+])
+
 if is_shared:
     libxorp_vrrp = env.SharedLibrary(target = 'libxorp_vrrp',
 				     source = libxorp_vrrp_srcs,
@@ -75,7 +79,8 @@
     if env['rtld_origin']:
         for obj in libxorp_vrrp:
             env.AddPostAction(libxorp_vrrp,
-                env.Symlink(obj.abspath, env['BUILDDIR'] + '/lib/' + str(obj)))
+                env.Symlink(obj.abspath,
+                            os.path.join(env['xorp_alias_libdir'], 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-03 17:09:29 UTC (rev 11654)
+++ trunk/xorp/xrl/interfaces/SConscript	2009-12-03 20:36:29 UTC (rev 11655)
@@ -110,7 +110,7 @@
             for obj in lib:
                 env.AddPostAction(lib,
                     env.Symlink(obj.abspath,
-                                env['BUILDDIR'] + '/lib/' + str(obj)))
+                                os.path.join(env['xorp_alias_libdir'], str(obj))))
     else:
         lib = env.StaticLibrary(tgt, src)
 

Modified: trunk/xorp/xrl/targets/SConscript
===================================================================
--- trunk/xorp/xrl/targets/SConscript	2009-12-03 17:09:29 UTC (rev 11654)
+++ trunk/xorp/xrl/targets/SConscript	2009-12-03 20:36:29 UTC (rev 11655)
@@ -96,7 +96,7 @@
             for obj in lib:
                 env.AddPostAction(lib,
                     env.Symlink(obj.abspath,
-                                env['BUILDDIR'] + '/lib/' + str(obj)))
+                                os.path.join(env['xorp_alias_libdir'], 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