blob: 6ad78c7cde08a48159b2db16f2f1b512a5068867 [file] [log] [blame]
Upstream commit to find wrappers in lib64 directory.
commit 3f9c2ecf18d8fa37fad5a7062f80952692eaa8e7
Author: Alexander Monakov <amonakov@ispras.ru>
Date: Wed Oct 16 20:51:47 2013 +0400
cli: use $LIB to handle multilib automagically on glibc
--- apitrace/cli/CMakeLists.txt
+++ apitrace/cli/CMakeLists.txt
@@ -31,6 +31,7 @@ target_link_libraries (apitrace
${ZLIB_LIBRARIES}
${SNAPPY_LIBRARIES}
${GETOPT_LIBRARIES}
+ dl
)
if (NOT CMAKE_CROSSCOMPILING)
--- apitrace/cli/cli_resources.cpp
+++ apitrace/cli/cli_resources.cpp
@@ -32,6 +32,20 @@
#include "cli_resources.hpp"
+#ifdef __GLIBC__
+
+#include <dlfcn.h>
+
+static bool
+tryLib(const os::String &path)
+{
+ void *handle = dlopen(path.str(), RTLD_LAZY);
+ bool exists = (handle != NULL);
+ if (exists)
+ dlclose(handle);
+ return exists;
+}
+#endif
os::String
findProgram(const char*programFilename)
@@ -76,6 +90,17 @@ findWrapper(const char *wrapperFilename)
return wrapperPath;
}
+#ifdef __GLIBC__
+ // We want to take advantage of $LIB dynamic string token expansion in
+ // glibc dynamic linker to handle multilib layout for us
+ wrapperPath = processDir;
+ wrapperPath.join("../$LIB/apitrace/wrappers");
+ wrapperPath.join(wrapperFilename);
+ if (tryLib(wrapperPath)) {
+ return wrapperPath;
+ }
+#endif
+
// Try relative install directory
wrapperPath = processDir;
#if defined(_WIN32)