summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'dev-util/apitrace/files/apitrace-4.0-multilib.patch')
-rw-r--r--dev-util/apitrace/files/apitrace-4.0-multilib.patch59
1 files changed, 59 insertions, 0 deletions
diff --git a/dev-util/apitrace/files/apitrace-4.0-multilib.patch b/dev-util/apitrace/files/apitrace-4.0-multilib.patch
new file mode 100644
index 000000000000..6ad78c7cde08
--- /dev/null
+++ b/dev-util/apitrace/files/apitrace-4.0-multilib.patch
@@ -0,0 +1,59 @@
+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)