Blob Blame History Raw
diff -ur root-5.28.00h.orig/core/unix/src/TUnixSystem.cxx root-5.28.00h/core/unix/src/TUnixSystem.cxx
--- root-5.28.00h.orig/core/unix/src/TUnixSystem.cxx	2011-11-24 17:12:39.000000000 +0100
+++ root-5.28.00h/core/unix/src/TUnixSystem.cxx	2012-06-29 07:13:37.055012978 +0200
@@ -425,6 +425,9 @@
 
    TString lib = _dyld_get_image_name(i++);
 
+   TRegexp sovers = "libCore\\.[0-9]+\\.*[0-9]*\\.so";
+   TRegexp dyvers = "libCore\\.[0-9]+\\.*[0-9]*\\.dylib";
+
 #ifndef ROOTPREFIX
 #if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR
    // first loaded is the app so set ROOTSYS to app bundle
@@ -440,7 +443,8 @@
       }
    }
 #else
-   if (lib.EndsWith("libCore.dylib") || lib.EndsWith("libCore.so")) {
+   if (lib.EndsWith("libCore.dylib") || lib.EndsWith("libCore.so") ||
+       lib.Index(sovers) != kNPOS    || lib.Index(dyvers) != kNPOS) {
       char respath[kMAXPATHLEN];
       if (!realpath(lib, respath)) {
          if (!gSystem->Getenv("ROOTSYS"))
@@ -462,9 +466,23 @@
 
    // add all libs loaded before libSystem.B.dylib
    if (!gotFirstSo && (lib.EndsWith(".dylib") || lib.EndsWith(".so"))) {
-      if (linkedDylibs.Length())
-         linkedDylibs += " ";
-      linkedDylibs += lib;
+      sovers = "\\.[0-9]+\\.*[0-9]*\\.so";
+      Ssiz_t idx = lib.Index(sovers);
+      if (idx != kNPOS) {
+         lib.Remove(idx);
+         lib += ".so";
+      }
+      dyvers = "\\.[0-9]+\\.*[0-9]*\\.dylib";
+      idx = lib.Index(dyvers);
+      if (idx != kNPOS) {
+         lib.Remove(idx);
+         lib += ".dylib";
+      }
+      if (!gSystem->AccessPathName(lib, kReadPermission)) {
+         if (linkedDylibs.Length())
+            linkedDylibs += " ";
+         linkedDylibs += lib;
+      }
    }
 }
 #endif
@@ -2799,9 +2817,11 @@
       delete [] exe;
       exe = longerexe;
    }
+   TRegexp sovers = "\\.so\\.[0-9]+";
 #else
    const char *cLDD="ldd";
    const char *cSOEXT=".so";
+   TRegexp sovers = "\\.so\\.[0-9]+";
 #endif
    FILE *p = OpenPipe(TString::Format("%s %s", cLDD, exe), "r");
    TString ldd;
@@ -2819,10 +2839,15 @@
       }
       if (solibName) {
          TString solib = solibName->String();
-         if (solib.EndsWith(cSOEXT)) {
-            if (!linkedLibs.IsNull())
-               linkedLibs += " ";
-            linkedLibs += solib;
+         Ssiz_t idx = solib.Index(sovers);
+         if (solib.EndsWith(cSOEXT) || idx != kNPOS) {
+            if (idx != kNPOS)
+               solib.Remove(idx+3);
+            if (!AccessPathName(solib, kReadPermission)) {
+               if (!linkedLibs.IsNull())
+                  linkedLibs += " ";
+               linkedLibs += solib;
+            }
          }
       }
       delete tok;