diff -ur root-5.32.03.orig/core/unix/src/TUnixSystem.cxx root-5.32.03/core/unix/src/TUnixSystem.cxx --- root-5.32.03.orig/core/unix/src/TUnixSystem.cxx 2012-05-09 12:59:38.000000000 +0200 +++ root-5.32.03/core/unix/src/TUnixSystem.cxx 2012-06-28 19:25:22.486639614 +0200 @@ -453,6 +453,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 @@ -467,7 +470,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")) @@ -489,9 +493,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 @@ -2849,12 +2867,15 @@ delete [] exe; exe = longerexe; } + TRegexp sovers = "\\.so\\.[0-9]+"; #else const char *cLDD="ldd"; #if defined(R__AIX) const char *cSOEXT=".a"; + TRegexp sovers = "\\.a\\.[0-9]+"; #else const char *cSOEXT=".so"; + TRegexp sovers = "\\.so\\.[0-9]+"; #endif #endif FILE *p = OpenPipe(TString::Format("%s %s", cLDD, exe), "r"); @@ -2874,10 +2895,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;