root/root-aclic-versioned-libs.patch
Mattias Ellert 43094d8676 Backport fixes for using aclic with versioned libraries
- New sub-package: root-io-gfal
2012-06-29 06:54:06 +02:00

86 lines
2.8 KiB
Diff

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;