TCling.cxx (root_v6.26.08.source) | : | TCling.cxx (root_v6.26.10.source) | ||
---|---|---|---|---|
skipping to change at line 3351 | skipping to change at line 3351 | |||
std::vector<std::string> newLibs; | std::vector<std::string> newLibs; | |||
dl_iterate_phdr(callback_for_dl_iterate_phdr, &newLibs); | dl_iterate_phdr(callback_for_dl_iterate_phdr, &newLibs); | |||
for (auto &&lib: newLibs) | for (auto &&lib: newLibs) | |||
RegisterLoadedSharedLibrary(lib.c_str()); | RegisterLoadedSharedLibrary(lib.c_str()); | |||
#else | #else | |||
Error("TCling::UpdateListOfLoadedSharedLibraries", | Error("TCling::UpdateListOfLoadedSharedLibraries", | |||
"Platform not supported!"); | "Platform not supported!"); | |||
#endif | #endif | |||
} | } | |||
namespace { | ||||
template <int N> | ||||
static bool StartsWithStrLit(const char *haystack, const char (&needle)[N]) { | ||||
return !strncmp(haystack, needle, N - 1); | ||||
} | ||||
} | ||||
//////////////////////////////////////////////////////////////////////////////// | //////////////////////////////////////////////////////////////////////////////// | |||
/// Register a new shared library name with the interpreter; add it to | /// Register a new shared library name with the interpreter; add it to | |||
/// fSharedLibs. | /// fSharedLibs. | |||
void TCling::RegisterLoadedSharedLibrary(const char* filename) | void TCling::RegisterLoadedSharedLibrary(const char* filename) | |||
{ | { | |||
// Ignore NULL filenames, aka "the process". | // Ignore NULL filenames, aka "the process". | |||
if (!filename) return; | if (!filename) return; | |||
// Tell the interpreter that this library is available; all libraries can be | // Tell the interpreter that this library is available; all libraries can be | |||
// used to resolve symbols. | // used to resolve symbols. | |||
cling::DynamicLibraryManager* DLM = fInterpreter->getDynamicLibraryManager(); | cling::DynamicLibraryManager* DLM = fInterpreter->getDynamicLibraryManager(); | |||
if (!DLM->isLibraryLoaded(filename)) { | if (!DLM->isLibraryLoaded(filename)) { | |||
DLM->loadLibrary(filename, true /*permanent*/, true /*resolved*/); | DLM->loadLibrary(filename, true /*permanent*/, true /*resolved*/); | |||
} | } | |||
#if defined(R__MACOSX) | #if defined(R__MACOSX) | |||
// Check that this is not a system library | // Check that this is not a system library that does not exist on disk. | |||
auto lenFilename = strlen(filename); | auto lenFilename = strlen(filename); | |||
if (!strncmp(filename, "/usr/lib/system/", 16) | auto isInMacOSSystemDir = [](const char *fn) { | |||
|| !strncmp(filename, "/usr/lib/libc++", 15) | return StartsWithStrLit(fn, "/usr/lib/") || StartsWithStrLit(fn, "/System/ | |||
|| !strncmp(filename, "/System/Library/Frameworks/", 27) | Library/"); | |||
|| !strncmp(filename, "/System/Library/PrivateFrameworks/", 34) | }; | |||
|| !strncmp(filename, "/System/Library/CoreServices/", 29) | if (!strcmp(filename, "cl_kernels") // yepp, no directory | |||
|| !strcmp(filename, "cl_kernels") // yepp, no directory | ||||
|| strstr(filename, "/usr/lib/libSystem") | // These we should not link with (e.g. because they forward to .tbd): | |||
|| strstr(filename, "/usr/lib/libstdc++") | || StartsWithStrLit(filename, "/usr/lib/system/") | |||
|| strstr(filename, "/usr/lib/libicucore") | || StartsWithStrLit(filename, "/usr/lib/libc++") | |||
|| strstr(filename, "/usr/lib/libbsm") | || StartsWithStrLit(filename, "/System/Library/Frameworks/") | |||
|| strstr(filename, "/usr/lib/libobjc") | || StartsWithStrLit(filename, "/System/Library/PrivateFrameworks/") | |||
|| strstr(filename, "/usr/lib/libresolv") | || StartsWithStrLit(filename, "/System/Library/CoreServices/") | |||
|| strstr(filename, "/usr/lib/libauto") | || StartsWithStrLit(filename, "/usr/lib/libSystem") | |||
|| strstr(filename, "/usr/lib/libcups") | || StartsWithStrLit(filename, "/usr/lib/libstdc++") | |||
|| strstr(filename, "/usr/lib/libDiagnosticMessagesClient") | || StartsWithStrLit(filename, "/usr/lib/libicucore") | |||
|| strstr(filename, "/usr/lib/liblangid") | || StartsWithStrLit(filename, "/usr/lib/libbsm") | |||
|| strstr(filename, "/usr/lib/libCRFSuite") | || StartsWithStrLit(filename, "/usr/lib/libobjc") | |||
|| strstr(filename, "/usr/lib/libpam") | || StartsWithStrLit(filename, "/usr/lib/libresolv") | |||
|| strstr(filename, "/usr/lib/libOpenScriptingUtil") | || StartsWithStrLit(filename, "/usr/lib/libauto") | |||
|| strstr(filename, "/usr/lib/libextension") | || StartsWithStrLit(filename, "/usr/lib/libcups") | |||
|| strstr(filename, "/usr/lib/libAudioToolboxUtility") | || StartsWithStrLit(filename, "/usr/lib/libDiagnosticMessagesClient") | |||
|| strstr(filename, "/usr/lib/liboah") | || StartsWithStrLit(filename, "/usr/lib/liblangid") | |||
|| strstr(filename, "/usr/lib/libRosetta") | || StartsWithStrLit(filename, "/usr/lib/libCRFSuite") | |||
|| strstr(filename, "/usr/lib/libCoreEntitlements") | || StartsWithStrLit(filename, "/usr/lib/libpam") | |||
|| strstr(filename, "/usr/lib/libssl.") | || StartsWithStrLit(filename, "/usr/lib/libOpenScriptingUtil") | |||
|| strstr(filename, "/usr/lib/libcrypto.") | || StartsWithStrLit(filename, "/usr/lib/libextension") | |||
// These are candidates for suppression, too: | || StartsWithStrLit(filename, "/usr/lib/libAudioToolboxUtility") | |||
// -lfakelink -lapple_nghttp2 -lnetwork -lsqlite3 -lenergytrace -lCoreE | || StartsWithStrLit(filename, "/usr/lib/liboah") | |||
ntitlements | || StartsWithStrLit(filename, "/usr/lib/libRosetta") | |||
// -lMobileGestalt -lcoretls -lcoretls_cfhelpers -lxar.1 -lcompression | || StartsWithStrLit(filename, "/usr/lib/libCoreEntitlements") | |||
-larchive.2 | || StartsWithStrLit(filename, "/usr/lib/libssl.") | |||
// -lxml2.2 -lpcap.A -ldns_services -llzma.5 -lbz2.1.0 -liconv.2 -lchar | || StartsWithStrLit(filename, "/usr/lib/libcrypto.") | |||
set.1 | ||||
// -lCheckFix -lmecabra -lmecab -lgermantok -lThaiTokenizer -lChineseTo | // The system lib is likely in macOS's blob. | |||
kenizer | || (isInMacOSSystemDir(filename) && gSystem->AccessPathName(filename)) | |||
// -lcmph -lutil -lapp_launch_measurement -lxslt.1 -lspindump -late -le | ||||
xpat.1 | // "Link against the umbrella framework 'System.framework' instead" | |||
// -lAudioStatistics -lSMC -lperfcheck -lmis -lIOReport -lheimdal-asn1 | || StartsWithStrLit(filename, "/usr/lib/system/libsystem_kernel") | |||
|| StartsWithStrLit(filename, "/usr/lib/system/libsystem_platform") | ||||
|| StartsWithStrLit(filename, "/usr/lib/system/libsystem_pthread") | ||||
// "cannot link directly with dylib/framework, your binary is not an allo wed client of | // "cannot link directly with dylib/framework, your binary is not an allo wed client of | |||
// /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/D eveloper/ | // /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/D eveloper/ | |||
// SDKs/MacOSX.sdk/usr/lib/libAudioToolboxUtility.tbd for architecture x8 6_64 | // SDKs/MacOSX.sdk/usr/lib/libAudioToolboxUtility.tbd for architecture x8 6_64 | |||
|| (lenFilename > 4 && !strcmp(filename + lenFilename - 4, ".tbd"))) | || (lenFilename > 4 && !strcmp(filename + lenFilename - 4, ".tbd"))) | |||
return; | return; | |||
TString sFileName(filename); | TString sFileName(filename); | |||
R__UpdateLibFileForLinking(sFileName); | R__UpdateLibFileForLinking(sFileName); | |||
filename = sFileName.Data(); | filename = sFileName.Data(); | |||
#elif defined(__CYGWIN__) | #elif defined(__CYGWIN__) | |||
End of changes. 3 change blocks. | ||||
39 lines changed or deleted | 48 lines changed or added |