Upstream commit to find wrappers in lib64 directory. commit 3f9c2ecf18d8fa37fad5a7062f80952692eaa8e7 Author: Alexander Monakov 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 + +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)