| 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) |