Browse Source

ENH: Runtime library search paths can be added to the link lines for
on shared builds.

Amitha Perera 24 years ago
parent
commit
0f98c51d77
4 changed files with 221 additions and 45 deletions
  1. 51 1
      Source/cmUnixMakefileGenerator.cxx
  2. 4 0
      Templates/CMakeSystemConfig.cmake.in
  3. 99 37
      Templates/configure
  4. 67 7
      Templates/configure.in

+ 51 - 1
Source/cmUnixMakefileGenerator.cxx

@@ -254,8 +254,30 @@ void cmUnixMakefileGenerator::OutputLinkLibraries(std::ostream& fout,
   // Try to emit each search path once
   std::set<std::string> emitted;
 
+  // Embed runtime search paths if possible and if required.
+  bool outputRuntime = cmCacheManager::GetInstance()->IsOn("BUILD_SHARED_LIBS");
+  std::string runtimeFlag;
+  std::string runtimeSep;
+  std::vector<std::string> runtimeDirs;
+
+  if(m_Makefile->GetDefinition("CMAKE_SHLIB_RUNTIME_FLAG"))
+    {
+    runtimeFlag = m_Makefile->GetDefinition("CMAKE_SHLIB_RUNTIME_FLAG");
+    }
+  if(m_Makefile->GetDefinition("CMAKE_SHLIB_RUNTIME_SEP"))
+    {
+    runtimeSep = m_Makefile->GetDefinition("CMAKE_SHLIB_RUNTIME_SEP");
+    }
+
+  // concatenate all paths or no?
+  bool runtimeConcatenate = ( runtimeSep!="" );
+  if(runtimeFlag == "")
+    {
+    outputRuntime = false;
+    }
+
   // collect all the flags needed for linking libraries
-  std::string linkLibs;        
+  std::string linkLibs;
   std::vector<std::string>& libdirs = m_Makefile->GetLinkDirectories();
   for(std::vector<std::string>::iterator libDir = libdirs.begin();
       libDir != libdirs.end(); ++libDir)
@@ -270,6 +292,10 @@ void cmUnixMakefileGenerator::OutputLinkLibraries(std::ostream& fout,
            && libDir->find("${") == std::string::npos)
           {
           linkLibs += "-L";
+          if(outputRuntime)
+            {
+            runtimeDirs.push_back( libpath );
+            }
           }
         linkLibs += libpath;
         linkLibs += " ";
@@ -306,6 +332,10 @@ void cmUnixMakefileGenerator::OutputLinkLibraries(std::ostream& fout,
           linkLibs += "-L";
           linkLibs += libpath;
           linkLibs += " ";
+          if(outputRuntime)
+            {
+            runtimeDirs.push_back( libpath );
+            }
           }
         }
       cmRegularExpression libname("lib(.*)\\.(.*)");
@@ -337,6 +367,26 @@ void cmUnixMakefileGenerator::OutputLinkLibraries(std::ostream& fout,
     linkLibs += librariesLinked;
     }
   fout << linkLibs;
+
+  if(outputRuntime && runtimeDirs.size()>0)
+    {
+    fout << runtimeFlag;
+    std::vector<std::string>::iterator itr = runtimeDirs.begin();
+    fout << *itr;
+    ++itr;
+    for( ; itr != runtimeDirs.end(); ++itr )
+      {
+      if(runtimeConcatenate)
+        {
+        fout << runtimeSep << *itr;
+        }
+      else
+        {
+        fout << " " << runtimeFlag << *itr;
+        }
+      }
+    fout << " ";
+    }
 }
 
 

+ 4 - 0
Templates/CMakeSystemConfig.cmake.in

@@ -38,6 +38,10 @@ SET (CMAKE_SHLIB_LINK_FLAGS   "@CMAKE_SHLIB_LINK_FLAGS@" CACHE STRING
         "Flags used to link a shared library.")
 SET (CMAKE_SHLIB_LD_LIBS      "@CMAKE_SHLIB_LD_LIBS@" CACHE STRING 
         "Libraries used by LD for shared libraries")
+SET (CMAKE_SHLIB_RUNTIME_FLAG "@CMAKE_SHLIB_RUNTIME_FLAG@" CACHE STRING
+        "Flag used to specify run-time search paths")
+SET (CMAKE_SHLIB_RUNTIME_SEP "@CMAKE_SHLIB_RUNTIME_SEP@" CACHE STRING
+        "If null, each runtime path is a separate option. Otherwise, they are all joined, separated by this.")
 # support for X11
 SET (CMAKE_X_LIBS             "@X_PRE_LIBS@ @X_LIBS@ -lX11 -lXext @X_EXTRA_LIBS@" CACHE STRING "Libraries and options used in X11 programs")
 SET (CMAKE_X_CFLAGS           "@X_CFLAGS@" CACHE STRING "X11 extra flags")

+ 99 - 37
Templates/configure

@@ -2167,6 +2167,16 @@ CMAKE_shared_ok="yes"
 #                       Flags to pass to the compiler when linking object
 #			files into an executable application binary such
 #			as tclsh.
+#       CMAKE_SHLIB_RUNTIME_FLAG -
+#                       Flag used to specify the runtime directories (e.g. "-R" or
+#                       "-Wl,-rpath,"). If null, no attempt is make to specify the
+#                       runtime paths.
+#       CMAKE_SHLIB_RUNTIME_SEP -
+#                       If null, then each path is a separate argument. If not null,
+#                       then all the directories are joined together, separated by
+#                       $(CMAKE_SHLIB_RUNTIME_SEP) and appended to
+#                       $(CMAKE_SHLIB_RUNTIME_FLAG). When not null, this is
+#                       typically a colon ":".
 #--------------------------------------------------------------------
 
 
@@ -2174,7 +2184,7 @@ CMAKE_shared_ok="yes"
 # Linux can use either -ldl or -ldld for dynamic loading.
 
 echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "configure:2178: checking for dlopen in -ldl" >&5
+echo "configure:2188: checking for dlopen in -ldl" >&5
 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2182,7 +2192,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2186 "configure"
+#line 2196 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -2193,7 +2203,7 @@ int main() {
 dlopen()
 ; return 0; }
 EOF
-if { (eval echo configure:2197: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2207: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2228,7 +2238,7 @@ case $system in
 	CMAKE_SHLIB_SUFFIX="..o"
 	CMAKE_DL_LIBS=""
         echo $ac_n "checking for printf in -lld""... $ac_c" 1>&6
-echo "configure:2232: checking for printf in -lld" >&5
+echo "configure:2242: checking for printf in -lld" >&5
 ac_lib_var=`echo ld'_'printf | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2236,7 +2246,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lld  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2240 "configure"
+#line 2250 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -2247,7 +2257,7 @@ int main() {
 printf()
 ; return 0; }
 EOF
-if { (eval echo configure:2251: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2261: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2268,6 +2278,8 @@ else
 fi
 
 	CMAKE_SHLIB_LINK_FLAGS=""
+        CMAKE_SHLIB_RUNTIME_FLAG=""
+        CMAKE_SHLIB_RUNTIME_SEP=""
 	;;
     HP-UX-*.08.*|HP-UX-*.09.*|HP-UX-*.10.*)
 	CMAKE_SHLIB_CFLAGS="+z"
@@ -2275,10 +2287,14 @@ fi
 	CMAKE_SHLIB_SUFFIX=".sl"
 	CMAKE_DL_LIBS="-ldld"
 	CMAKE_SHLIB_BUILD_FLAGS='+Z -Wl,-E -Wl,-b'
-	CMAKE_SHLIB_LINK_FLAGS='-Wl,+s -Wl,+b,${LIB_RUNTIME_DIR}'
+	CMAKE_SHLIB_LINK_FLAGS='-Wl,+s'
+        CMAKE_SHLIB_RUNTIME_FLAG='-Wl,+b,'
+        CMAKE_SHLIB_RUNTIME_SEP=':'
         if test "$CC" = "gcc" -o `$CC -v 2>&1 | grep -c gcc` != "0" ; then
   	  CMAKE_SHLIB_BUILD_FLAGS='-shared -Wl,-E -Wl,-b'
-	  CMAKE_SHLIB_LINK_FLAGS='-Wl,+s -Wl,+b,${LIB_RUNTIME_DIR}'
+	  CMAKE_SHLIB_LINK_FLAGS='-Wl,+s'
+          CMAKE_SHLIB_RUNTIME_FLAG='-Wl,+b,'
+          CMAKE_SHLIB_RUNTIME_SEP=':'
         fi
 	;;
     IRIX-5.*)
@@ -2287,6 +2303,8 @@ fi
 	CMAKE_SHLIB_SUFFIX=".so"
 	CMAKE_DL_LIBS=""
 	CMAKE_SHLIB_BUILD_FLAGS="-shared -rdata_shared"
+        CMAKE_SHLIB_RUNTIME_FLAG="-Wl,-rpath,"
+        CMAKE_SHLIB_RUNTIME_SEP=":"
 	;;
     IRIX-6* | IRIX64-6* | IRIX-64-6*)
 	CMAKE_SHLIB_CFLAGS=""
@@ -2294,6 +2312,8 @@ fi
 	CMAKE_SHLIB_SUFFIX=".so"
 	CMAKE_DL_LIBS=""
 	CMAKE_SHLIB_BUILD_FLAGS="-shared -rdata_shared"
+        CMAKE_SHLIB_RUNTIME_FLAG="-Wl,-rpath"
+        CMAKE_SHLIB_RUNTIME_SEP=":"
 	;;
     Linux*)
 	CMAKE_SHLIB_CFLAGS="-fPIC"
@@ -2303,20 +2323,22 @@ fi
 	if test "$have_dl" = yes; then
 	    CMAKE_DL_LIBS="-ldl"
 	    CMAKE_SHLIB_LINK_FLAGS="-rdynamic"
+            CMAKE_SHLIB_RUNTIME_FLAG="-Wl,-rpath,"
+            CMAKE_SHLIB_RUNTIME_SEP=":"
 	else
 	    ac_safe=`echo "dld.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for dld.h""... $ac_c" 1>&6
-echo "configure:2310: checking for dld.h" >&5
+echo "configure:2332: checking for dld.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2315 "configure"
+#line 2337 "configure"
 #include "confdefs.h"
 #include <dld.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2320: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2342: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -2335,6 +2357,8 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   
 		CMAKE_DL_LIBS="-ldld"
 		CMAKE_SHLIB_LINK_FLAGS=""
+                CMAKE_SHLIB_RUNTIME_FLAG="-Wl,-rpath,"
+                CMAKE_SHLIB_RUNTIME_SEP=""
 else
   echo "$ac_t""no" 1>&6
 fi
@@ -2346,6 +2370,8 @@ fi
         CMAKE_DL_LIBS="-lgdi32" 
         CMAKE_SHLIB_SUFFIX=".dll"
         CMAKE_SHLIB_LINK_FLAGS="-shared"
+        CMAKE_SHLIB_RUNTIME_FLAG=""
+        CMAKE_SHLIB_RUNTIME_SEP=""
         ;;
     MP-RAS-02*)
 	CMAKE_SHLIB_CFLAGS="-K PIC"
@@ -2353,6 +2379,8 @@ fi
 	CMAKE_SHLIB_SUFFIX=".so"
 	CMAKE_DL_LIBS="-ldl"
 	CMAKE_SHLIB_LINK_FLAGS=""
+        CMAKE_SHLIB_RUNTIME_FLAG=""
+        CMAKE_SHLIB_RUNTIME_SEP=""
 	;;
     MP-RAS-*)
 	CMAKE_SHLIB_CFLAGS="-K PIC"
@@ -2360,6 +2388,8 @@ fi
 	CMAKE_SHLIB_SUFFIX=".so"
 	CMAKE_DL_LIBS="-ldl"
 	CMAKE_SHLIB_LINK_FLAGS="-Wl,-Bexport"
+        CMAKE_SHLIB_RUNTIME_FLAG=""
+        CMAKE_SHLIB_RUNTIME_SEP=""
 	;;
     NetBSD-*|FreeBSD-*)
 	# Not available on all versions:  check for include file.
@@ -2369,12 +2399,16 @@ fi
 	    CMAKE_SHLIB_SUFFIX=".so"
 	    CMAKE_DL_LIBS=""
 	    CMAKE_SHLIB_LINK_FLAGS="-shared"
+            CMAKE_SHLIB_RUNTIME_FLAG="-Wl,-rpath,"
+            CMAKE_SHLIB_RUNTIME_SEP=":"
 	else
 	    CMAKE_SHLIB_CFLAGS=""
 	    CMAKE_SHLIB_LD_LIBS=""
 	    CMAKE_SHLIB_SUFFIX="..o"
 	    CMAKE_DL_LIBS=""
 	    CMAKE_SHLIB_LINK_FLAGS=""
+            CMAKE_SHLIB_RUNTIME_FLAG=""
+            CMAKE_SHLIB_RUNTIME_SEP=""
 	fi
 	;;
     NEXTSTEP-*)
@@ -2383,6 +2417,8 @@ fi
 	CMAKE_SHLIB_SUFFIX=".so"
 	CMAKE_DL_LIBS=""
 	CMAKE_SHLIB_LINK_FLAGS=""
+        CMAKE_SHLIB_RUNTIME_FLAG=""
+        CMAKE_SHLIB_RUNTIME_SEP=""
 	;;
     OSF1-1.012)
 	# OSF/1 1.[012] from OSF, and derivatives, including Paragon OSF/1
@@ -2392,6 +2428,8 @@ fi
 	CMAKE_SHLIB_SUFFIX=".so"
 	CMAKE_DL_LIBS=""
 	CMAKE_SHLIB_LINK_FLAGS=""
+        CMAKE_SHLIB_RUNTIME_FLAG=""
+        CMAKE_SHLIB_RUNTIME_SEP=""
 	;;
     OSF1-1.*)
 	# OSF/1 1.3 from OSF using ELF, and derivatives, including AD2
@@ -2400,6 +2438,8 @@ fi
 	CMAKE_SHLIB_SUFFIX=".so"
 	CMAKE_DL_LIBS=""
 	CMAKE_SHLIB_LINK_FLAGS=""
+        CMAKE_SHLIB_RUNTIME_FLAG=""
+        CMAKE_SHLIB_RUNTIME_SEP=""
 	;;
     OSF1-V*)
         # Digital OSF/1
@@ -2408,7 +2448,9 @@ fi
 	CMAKE_SHLIB_SUFFIX=".so"
 	CMAKE_DL_LIBS=""
 	CMAKE_SHLIB_BUILD_FLAGS='-shared -Wl,-expect_unresolved,"*"'
-	CMAKE_SHLIB_LINK_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
+	CMAKE_SHLIB_LINK_FLAGS=''
+        CMAKE_SHLIB_RUNTIME_FLAG="-Wl,-rpath,"
+        CMAKE_SHLIB_RUNTIME_SEP=":"
 	;;
     RISCos-*)
 	CMAKE_SHLIB_CFLAGS="-G 0"
@@ -2416,6 +2458,8 @@ fi
 	CMAKE_SHLIB_SUFFIX="..o"
 	CMAKE_DL_LIBS=""
 	CMAKE_SHLIB_LINK_FLAGS="-Wl,-D,08000000"
+        CMAKE_SHLIB_RUNTIME_FLAG=""
+        CMAKE_SHLIB_RUNTIME_SEP=""
 	;;
     SCO_SV-3.2*)
         # Note, dlopen is available only on SCO 3.2.5 and greater.  However,
@@ -2426,6 +2470,8 @@ fi
 	CMAKE_SHLIB_SUFFIX=".so"
 	CMAKE_DL_LIBS=""
 	CMAKE_SHLIB_LINK_FLAGS="-belf -Wl,-Bexport"
+        CMAKE_SHLIB_RUNTIME_FLAG=""
+        CMAKE_SHLIB_RUNTIME_SEP=""
 	;;
      SINIX*5.4*)
 	CMAKE_SHLIB_CFLAGS="-K PIC"
@@ -2433,6 +2479,8 @@ fi
 	CMAKE_SHLIB_SUFFIX=".so"
 	CMAKE_DL_LIBS="-ldl"
 	CMAKE_SHLIB_LINK_FLAGS=""
+        CMAKE_SHLIB_RUNTIME_FLAG=""
+        CMAKE_SHLIB_RUNTIME_SEP=""
 	;;
     SunOS-4*)
 	CMAKE_SHLIB_CFLAGS="-PIC"
@@ -2440,7 +2488,9 @@ fi
 	CMAKE_SHLIB_SUFFIX=".so"
 	CMAKE_DL_LIBS="-ldl"
 	CMAKE_SHLIB_BUILD_FLAGS='-shared -Wl,-r -nostdlib'
-	CMAKE_SHLIB_LINK_FLAGS='-Wl,-L${LIB_RUNTIME_DIR}'
+	CMAKE_SHLIB_LINK_FLAGS=''
+        CMAKE_SHLIB_RUNTIME_FLAG="-Wl,-R,"
+        CMAKE_SHLIB_RUNTIME_SEP=":"
 	;;
     SunOS-5*)
 	CMAKE_SHLIB_CFLAGS="-KPIC"
@@ -2448,10 +2498,14 @@ fi
 	CMAKE_SHLIB_SUFFIX=".so"
 	CMAKE_DL_LIBS="-ldl"
 	CMAKE_SHLIB_BUILD_FLAGS='-G'
-	CMAKE_SHLIB_LINK_FLAGS='-R ${LIB_RUNTIME_DIR}'
+	CMAKE_SHLIB_LINK_FLAGS=''
+        CMAKE_SHLIB_RUNTIME_FLAG="-R "
+        CMAKE_SHLIB_RUNTIME_SEP=":"
         if test "$CC" = "gcc" -o `$CC -v 2>&1 | grep -c gcc` != "0" ; then
 	  CMAKE_SHLIB_BUILD_FLAGS='-Wl,-G'
-	  CMAKE_SHLIB_LINK_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
+	  CMAKE_SHLIB_LINK_FLAGS=''
+          CMAKE_SHLIB_RUNTIME_FLAG="-Wl,-R,"
+          CMAKE_SHLIB_RUNTIME_SEP=":"
         fi
 	;;
     ULTRIX-4.*)
@@ -2460,6 +2514,8 @@ fi
 	CMAKE_SHLIB_LD_LIBS=""
 	CMAKE_DL_LIBS=""
 	CMAKE_SHLIB_LINK_FLAGS="-Wl,-D,08000000"
+        CMAKE_SHLIB_RUNTIME_FLAG=""
+        CMAKE_SHLIB_RUNTIME_SEP=""
 	;;
     UNIX_SV*)
 	CMAKE_SHLIB_CFLAGS="-K PIC"
@@ -2467,6 +2523,8 @@ fi
 	CMAKE_SHLIB_SUFFIX=".so"
 	CMAKE_DL_LIBS="-ldl"
 	CMAKE_SHLIB_LINK_FLAGS="-Wl,-Bexport"
+        CMAKE_SHLIB_RUNTIME_FLAG=""
+        CMAKE_SHLIB_RUNTIME_SEP=""
 	;;
 esac
 export CMAKE_SHLIB_SUFFIX
@@ -2497,6 +2555,8 @@ CMAKE_LD_SEARCH_FLAGS="${LD_SEARCH_FLAGS}"
 
 
 
+
+
 ##########################
 ##			##
 ## Check thread support ##
@@ -2531,17 +2591,17 @@ for ac_hdr in sys/prctl.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2535: checking for $ac_hdr" >&5
+echo "configure:2595: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2540 "configure"
+#line 2600 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2545: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2605: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -2586,17 +2646,17 @@ for ac_hdr in pthread.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2590: checking for $ac_hdr" >&5
+echo "configure:2650: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2595 "configure"
+#line 2655 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2600: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2660: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -2625,7 +2685,7 @@ done
 if test "$use_pthreads" = "yes"; then
   if test "$use_sproc" = "no"; then
     echo $ac_n "checking for pthread_create in -lpthreads""... $ac_c" 1>&6
-echo "configure:2629: checking for pthread_create in -lpthreads" >&5
+echo "configure:2689: checking for pthread_create in -lpthreads" >&5
 ac_lib_var=`echo pthreads'_'pthread_create | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2633,7 +2693,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpthreads  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2637 "configure"
+#line 2697 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -2644,7 +2704,7 @@ int main() {
 pthread_create()
 ; return 0; }
 EOF
-if { (eval echo configure:2648: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2708: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2665,7 +2725,7 @@ else
 fi
 
     echo $ac_n "checking for pthread_create in -lpthread""... $ac_c" 1>&6
-echo "configure:2669: checking for pthread_create in -lpthread" >&5
+echo "configure:2729: checking for pthread_create in -lpthread" >&5
 ac_lib_var=`echo pthread'_'pthread_create | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2673,7 +2733,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpthread  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2677 "configure"
+#line 2737 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -2684,7 +2744,7 @@ int main() {
 pthread_create()
 ; return 0; }
 EOF
-if { (eval echo configure:2688: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2748: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2707,7 +2767,7 @@ fi
 # Work around Solaris 5.6 and 5.7 bug:
     if test "`uname -s -r`" = "SunOS 5.6"; then
       echo $ac_n "checking for thr_create in -lthread""... $ac_c" 1>&6
-echo "configure:2711: checking for thr_create in -lthread" >&5
+echo "configure:2771: checking for thr_create in -lthread" >&5
 ac_lib_var=`echo thread'_'thr_create | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2715,7 +2775,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lthread  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2719 "configure"
+#line 2779 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -2726,7 +2786,7 @@ int main() {
 thr_create()
 ; return 0; }
 EOF
-if { (eval echo configure:2730: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2790: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2749,7 +2809,7 @@ fi
     fi
     if test "`uname -s -r`" = "SunOS 5.7"; then
       echo $ac_n "checking for thr_create in -lthread""... $ac_c" 1>&6
-echo "configure:2753: checking for thr_create in -lthread" >&5
+echo "configure:2813: checking for thr_create in -lthread" >&5
 ac_lib_var=`echo thread'_'thr_create | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2757,7 +2817,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lthread  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2761 "configure"
+#line 2821 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -2768,7 +2828,7 @@ int main() {
 thr_create()
 ; return 0; }
 EOF
-if { (eval echo configure:2772: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2832: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2870,7 +2930,7 @@ fi
 # ansi stream files (without the .h)
 if test $ac_cv_prog_gxx = no; then
   echo $ac_n "checking ansi standard C++ stream headers ""... $ac_c" 1>&6
-echo "configure:2874: checking ansi standard C++ stream headers " >&5 
+echo "configure:2934: checking ansi standard C++ stream headers " >&5 
   echo "******"
   rm -rf conftest.*
   cat > conftest.cc <<!
@@ -2891,7 +2951,7 @@ fi
 if test $ac_cv_prog_gxx = no; then
   echo "******"
   echo $ac_n "checking ansi standard namespace support ""... $ac_c" 1>&6
-echo "configure:2895: checking ansi standard namespace support " >&5 
+echo "configure:2955: checking ansi standard namespace support " >&5 
   rm -rf conftest.*
   cat > conftest.cc <<!
 #include <list>
@@ -2919,7 +2979,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2923: checking for $ac_word" >&5
+echo "configure:2983: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_RUNMAKE'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2959,7 +3019,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2963: checking for $ac_word" >&5
+echo "configure:3023: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_CMAKE_AR'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3168,6 +3228,8 @@ s%@CMAKE_LIB_EXT@%$CMAKE_LIB_EXT%g
 s%@CMAKE_DL_LIBS@%$CMAKE_DL_LIBS%g
 s%@CMAKE_SHLIB_LD_LIBS@%$CMAKE_SHLIB_LD_LIBS%g
 s%@CMAKE_SHLIB_SUFFIX@%$CMAKE_SHLIB_SUFFIX%g
+s%@CMAKE_SHLIB_RUNTIME_FLAG@%$CMAKE_SHLIB_RUNTIME_FLAG%g
+s%@CMAKE_SHLIB_RUNTIME_SEP@%$CMAKE_SHLIB_RUNTIME_SEP%g
 s%@CMAKE_USE_SPROC@%$CMAKE_USE_SPROC%g
 s%@CMAKE_USE_PTHREADS@%$CMAKE_USE_PTHREADS%g
 s%@CMAKE_HP_PTHREADS@%$CMAKE_HP_PTHREADS%g

+ 67 - 7
Templates/configure.in

@@ -92,6 +92,16 @@ CMAKE_shared_ok="yes"
 #                       Flags to pass to the compiler when linking object
 #			files into an executable application binary such
 #			as tclsh.
+#       CMAKE_SHLIB_RUNTIME_FLAG -
+#                       Flag used to specify the runtime directories (e.g. "-R" or
+#                       "-Wl,-rpath,"). If null, no attempt is make to specify the
+#                       runtime paths.
+#       CMAKE_SHLIB_RUNTIME_SEP -
+#                       If null, then each path is a separate argument. If not null,
+#                       then all the directories are joined together, separated by
+#                       $(CMAKE_SHLIB_RUNTIME_SEP) and appended to
+#                       $(CMAKE_SHLIB_RUNTIME_FLAG). When not null, this is
+#                       typically a colon ":".
 #--------------------------------------------------------------------
 
 
@@ -114,6 +124,8 @@ case $system in
 	CMAKE_DL_LIBS=""
         AC_CHECK_LIB(ld,printf, CMAKE_DL_LIBS="-lld")
 	CMAKE_SHLIB_LINK_FLAGS=""
+        CMAKE_SHLIB_RUNTIME_FLAG=""
+        CMAKE_SHLIB_RUNTIME_SEP=""
 	;;
     HP-UX-*.08.*|HP-UX-*.09.*|HP-UX-*.10.*)
 	CMAKE_SHLIB_CFLAGS="+z"
@@ -121,10 +133,14 @@ case $system in
 	CMAKE_SHLIB_SUFFIX=".sl"
 	CMAKE_DL_LIBS="-ldld"
 	CMAKE_SHLIB_BUILD_FLAGS='+Z -Wl,-E -Wl,-b'
-	CMAKE_SHLIB_LINK_FLAGS='-Wl,+s -Wl,+b,${LIB_RUNTIME_DIR}'
+	CMAKE_SHLIB_LINK_FLAGS='-Wl,+s'
+        CMAKE_SHLIB_RUNTIME_FLAG='-Wl,+b,'
+        CMAKE_SHLIB_RUNTIME_SEP=':'
         if test "$CC" = "gcc" -o `$CC -v 2>&1 | grep -c gcc` != "0" ; then
   	  CMAKE_SHLIB_BUILD_FLAGS='-shared -Wl,-E -Wl,-b'
-	  CMAKE_SHLIB_LINK_FLAGS='-Wl,+s -Wl,+b,${LIB_RUNTIME_DIR}'
+	  CMAKE_SHLIB_LINK_FLAGS='-Wl,+s'
+          CMAKE_SHLIB_RUNTIME_FLAG='-Wl,+b,'
+          CMAKE_SHLIB_RUNTIME_SEP=':'
         fi
 	;;
     IRIX-5.*)
@@ -133,6 +149,8 @@ case $system in
 	CMAKE_SHLIB_SUFFIX=".so"
 	CMAKE_DL_LIBS=""
 	CMAKE_SHLIB_BUILD_FLAGS="-shared -rdata_shared"
+        CMAKE_SHLIB_RUNTIME_FLAG="-Wl,-rpath,"
+        CMAKE_SHLIB_RUNTIME_SEP=":"
 	;;
     IRIX-6* | IRIX64-6* | IRIX-64-6*)
 	CMAKE_SHLIB_CFLAGS=""
@@ -140,6 +158,8 @@ case $system in
 	CMAKE_SHLIB_SUFFIX=".so"
 	CMAKE_DL_LIBS=""
 	CMAKE_SHLIB_BUILD_FLAGS="-shared -rdata_shared"
+        CMAKE_SHLIB_RUNTIME_FLAG="-Wl,-rpath"
+        CMAKE_SHLIB_RUNTIME_SEP=":"
 	;;
     Linux*)
 	CMAKE_SHLIB_CFLAGS="-fPIC"
@@ -149,10 +169,14 @@ case $system in
 	if test "$have_dl" = yes; then
 	    CMAKE_DL_LIBS="-ldl"
 	    CMAKE_SHLIB_LINK_FLAGS="-rdynamic"
+            CMAKE_SHLIB_RUNTIME_FLAG="-Wl,-rpath,"
+            CMAKE_SHLIB_RUNTIME_SEP=":"
 	else
 	    AC_CHECK_HEADER(dld.h, [
 		CMAKE_DL_LIBS="-ldld"
-		CMAKE_SHLIB_LINK_FLAGS=""])
+		CMAKE_SHLIB_LINK_FLAGS=""
+                CMAKE_SHLIB_RUNTIME_FLAG="-Wl,-rpath,"
+                CMAKE_SHLIB_RUNTIME_SEP=""])
 	fi
 	;;
     CYGWIN_NT*)
@@ -160,6 +184,8 @@ case $system in
         CMAKE_DL_LIBS="-lgdi32" 
         CMAKE_SHLIB_SUFFIX=".dll"
         CMAKE_SHLIB_LINK_FLAGS="-shared"
+        CMAKE_SHLIB_RUNTIME_FLAG=""
+        CMAKE_SHLIB_RUNTIME_SEP=""
         ;;
     MP-RAS-02*)
 	CMAKE_SHLIB_CFLAGS="-K PIC"
@@ -167,6 +193,8 @@ case $system in
 	CMAKE_SHLIB_SUFFIX=".so"
 	CMAKE_DL_LIBS="-ldl"
 	CMAKE_SHLIB_LINK_FLAGS=""
+        CMAKE_SHLIB_RUNTIME_FLAG=""
+        CMAKE_SHLIB_RUNTIME_SEP=""
 	;;
     MP-RAS-*)
 	CMAKE_SHLIB_CFLAGS="-K PIC"
@@ -174,6 +202,8 @@ case $system in
 	CMAKE_SHLIB_SUFFIX=".so"
 	CMAKE_DL_LIBS="-ldl"
 	CMAKE_SHLIB_LINK_FLAGS="-Wl,-Bexport"
+        CMAKE_SHLIB_RUNTIME_FLAG=""
+        CMAKE_SHLIB_RUNTIME_SEP=""
 	;;
     NetBSD-*|FreeBSD-*)
 	# Not available on all versions:  check for include file.
@@ -183,12 +213,16 @@ case $system in
 	    CMAKE_SHLIB_SUFFIX=".so"
 	    CMAKE_DL_LIBS=""
 	    CMAKE_SHLIB_LINK_FLAGS="-shared"
+            CMAKE_SHLIB_RUNTIME_FLAG="-Wl,-rpath,"
+            CMAKE_SHLIB_RUNTIME_SEP=":"
 	else
 	    CMAKE_SHLIB_CFLAGS=""
 	    CMAKE_SHLIB_LD_LIBS=""
 	    CMAKE_SHLIB_SUFFIX="..o"
 	    CMAKE_DL_LIBS=""
 	    CMAKE_SHLIB_LINK_FLAGS=""
+            CMAKE_SHLIB_RUNTIME_FLAG=""
+            CMAKE_SHLIB_RUNTIME_SEP=""
 	fi
 	;;
     NEXTSTEP-*)
@@ -197,6 +231,8 @@ case $system in
 	CMAKE_SHLIB_SUFFIX=".so"
 	CMAKE_DL_LIBS=""
 	CMAKE_SHLIB_LINK_FLAGS=""
+        CMAKE_SHLIB_RUNTIME_FLAG=""
+        CMAKE_SHLIB_RUNTIME_SEP=""
 	;;
     OSF1-1.[012])
 	# OSF/1 1.[012] from OSF, and derivatives, including Paragon OSF/1
@@ -206,6 +242,8 @@ case $system in
 	CMAKE_SHLIB_SUFFIX=".so"
 	CMAKE_DL_LIBS=""
 	CMAKE_SHLIB_LINK_FLAGS=""
+        CMAKE_SHLIB_RUNTIME_FLAG=""
+        CMAKE_SHLIB_RUNTIME_SEP=""
 	;;
     OSF1-1.*)
 	# OSF/1 1.3 from OSF using ELF, and derivatives, including AD2
@@ -214,6 +252,8 @@ case $system in
 	CMAKE_SHLIB_SUFFIX=".so"
 	CMAKE_DL_LIBS=""
 	CMAKE_SHLIB_LINK_FLAGS=""
+        CMAKE_SHLIB_RUNTIME_FLAG=""
+        CMAKE_SHLIB_RUNTIME_SEP=""
 	;;
     OSF1-V*)
         # Digital OSF/1
@@ -222,7 +262,9 @@ case $system in
 	CMAKE_SHLIB_SUFFIX=".so"
 	CMAKE_DL_LIBS=""
 	CMAKE_SHLIB_BUILD_FLAGS='-shared -Wl,-expect_unresolved,"*"'
-	CMAKE_SHLIB_LINK_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
+	CMAKE_SHLIB_LINK_FLAGS=''
+        CMAKE_SHLIB_RUNTIME_FLAG="-Wl,-rpath,"
+        CMAKE_SHLIB_RUNTIME_SEP=":"
 	;;
     RISCos-*)
 	CMAKE_SHLIB_CFLAGS="-G 0"
@@ -230,6 +272,8 @@ case $system in
 	CMAKE_SHLIB_SUFFIX="..o"
 	CMAKE_DL_LIBS=""
 	CMAKE_SHLIB_LINK_FLAGS="-Wl,-D,08000000"
+        CMAKE_SHLIB_RUNTIME_FLAG=""
+        CMAKE_SHLIB_RUNTIME_SEP=""
 	;;
     SCO_SV-3.2*)
         # Note, dlopen is available only on SCO 3.2.5 and greater.  However,
@@ -240,6 +284,8 @@ case $system in
 	CMAKE_SHLIB_SUFFIX=".so"
 	CMAKE_DL_LIBS=""
 	CMAKE_SHLIB_LINK_FLAGS="-belf -Wl,-Bexport"
+        CMAKE_SHLIB_RUNTIME_FLAG=""
+        CMAKE_SHLIB_RUNTIME_SEP=""
 	;;
      SINIX*5.4*)
 	CMAKE_SHLIB_CFLAGS="-K PIC"
@@ -247,6 +293,8 @@ case $system in
 	CMAKE_SHLIB_SUFFIX=".so"
 	CMAKE_DL_LIBS="-ldl"
 	CMAKE_SHLIB_LINK_FLAGS=""
+        CMAKE_SHLIB_RUNTIME_FLAG=""
+        CMAKE_SHLIB_RUNTIME_SEP=""
 	;;
     SunOS-4*)
 	CMAKE_SHLIB_CFLAGS="-PIC"
@@ -254,7 +302,9 @@ case $system in
 	CMAKE_SHLIB_SUFFIX=".so"
 	CMAKE_DL_LIBS="-ldl"
 	CMAKE_SHLIB_BUILD_FLAGS='-shared -Wl,-r -nostdlib'
-	CMAKE_SHLIB_LINK_FLAGS='-Wl,-L${LIB_RUNTIME_DIR}'
+	CMAKE_SHLIB_LINK_FLAGS=''
+        CMAKE_SHLIB_RUNTIME_FLAG="-Wl,-R,"
+        CMAKE_SHLIB_RUNTIME_SEP=":"
 	;;
     SunOS-5*)
 	CMAKE_SHLIB_CFLAGS="-KPIC"
@@ -262,10 +312,14 @@ case $system in
 	CMAKE_SHLIB_SUFFIX=".so"
 	CMAKE_DL_LIBS="-ldl"
 	CMAKE_SHLIB_BUILD_FLAGS='-G'
-	CMAKE_SHLIB_LINK_FLAGS='-R ${LIB_RUNTIME_DIR}'
+	CMAKE_SHLIB_LINK_FLAGS=''
+        CMAKE_SHLIB_RUNTIME_FLAG="-R "
+        CMAKE_SHLIB_RUNTIME_SEP=":"
         if test "$CC" = "gcc" -o `$CC -v 2>&1 | grep -c gcc` != "0" ; then
 	  CMAKE_SHLIB_BUILD_FLAGS='-Wl,-G'
-	  CMAKE_SHLIB_LINK_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
+	  CMAKE_SHLIB_LINK_FLAGS=''
+          CMAKE_SHLIB_RUNTIME_FLAG="-Wl,-R,"
+          CMAKE_SHLIB_RUNTIME_SEP=":"
         fi
 	;;
     ULTRIX-4.*)
@@ -274,6 +328,8 @@ case $system in
 	CMAKE_SHLIB_LD_LIBS=""
 	CMAKE_DL_LIBS=""
 	CMAKE_SHLIB_LINK_FLAGS="-Wl,-D,08000000"
+        CMAKE_SHLIB_RUNTIME_FLAG=""
+        CMAKE_SHLIB_RUNTIME_SEP=""
 	;;
     UNIX_SV*)
 	CMAKE_SHLIB_CFLAGS="-K PIC"
@@ -281,6 +337,8 @@ case $system in
 	CMAKE_SHLIB_SUFFIX=".so"
 	CMAKE_DL_LIBS="-ldl"
 	CMAKE_SHLIB_LINK_FLAGS="-Wl,-Bexport"
+        CMAKE_SHLIB_RUNTIME_FLAG=""
+        CMAKE_SHLIB_RUNTIME_SEP=""
 	;;
 esac
 export CMAKE_SHLIB_SUFFIX
@@ -309,6 +367,8 @@ AC_SUBST(CMAKE_LIB_EXT)
 AC_SUBST(CMAKE_DL_LIBS)
 AC_SUBST(CMAKE_SHLIB_LD_LIBS)
 AC_SUBST(CMAKE_SHLIB_SUFFIX)
+AC_SUBST(CMAKE_SHLIB_RUNTIME_FLAG)
+AC_SUBST(CMAKE_SHLIB_RUNTIME_SEP)
 
 
 ##########################