diff options
| author | Alan Conway <aconway@apache.org> | 2014-08-27 13:23:21 +0000 |
|---|---|---|
| committer | Alan Conway <aconway@apache.org> | 2014-08-27 13:23:21 +0000 |
| commit | f948fc7aef622950f7a610458d2d7935ce362cef (patch) | |
| tree | a3b3ac385acad21f9ade4558809d545b88735c64 /qpid/cpp/bindings | |
| parent | 27d0b2eef38c2f14dd190f8be266e798b4b95b82 (diff) | |
| download | qpid-python-f948fc7aef622950f7a610458d2d7935ce362cef.tar.gz | |
NO-JIRA: Work-around bug in older cmake, finds static python library instead of shared.
FindPythonLibs on older versions of cmake (observed on cmake-2.6.4-5.el5.4)
sometimes finds the static archive library (.a) before the shared object
library (.so) This is almost never what you want. Newer
versions (e.g. cmake-2.8.12.2-2.fc20.x86_64) explicitly look for the .so first
and look for the .a library second.
This workaround fixes the problem as follows:
- It is a no-op except on Unix platforms that use the .so prefix.
- On those platforms it does a search for .so only first.
- Finally we do a default search for other platforms (or if .so was not found)
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1620888 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/bindings')
| -rw-r--r-- | qpid/cpp/bindings/CMakeLists.txt | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/qpid/cpp/bindings/CMakeLists.txt b/qpid/cpp/bindings/CMakeLists.txt index d64d59b9d6..5ba731af05 100644 --- a/qpid/cpp/bindings/CMakeLists.txt +++ b/qpid/cpp/bindings/CMakeLists.txt @@ -17,14 +17,37 @@ # under the License. # +# Work-around for bug in older versions of cmake where find_package(PythonLib) +# finds the static .a library before the the dynamic .so one on Unix. +# Force search for .so first (this is exactly what newer versions of cmake do.) +# +# NOTE: Must be a macro, not a function. find_package in a function sets +# the package found variables in the function scope, not the parent scope. +# +macro(find_python_libs) + # Only do this on unix-like systems that use the .so library suffix. + if(UNIX AND CMAKE_FIND_LIBRARY_SUFFIXES MATCHES "\\.so") + set(SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) # Save the suffixes. + # Look just for shared libraries. + set(CMAKE_FIND_LIBRARY_SUFFIXES ".so") + find_package(PythonLibs) + # Restore the suffixes + set(CMAKE_FIND_LIBRARY_SUFFIXES ${SUFFIXES}) + endif() + # If we are not on a Unix/.so platform or we didn't find the library with the .so search + # then do a plain search + if (NOT PYTHONLIBS_FOUND) + find_package(PythonLibs) + endif() +endmacro(find_python_libs) -find_package(SWIG) +find_package(SWIG) if (SWIG_FOUND) include(UseSWIG) find_package(Ruby) - find_package(PythonLibs) + find_python_libs() find_package(PerlLibs) if ((${CMAKE_MAJOR_VERSION} EQUAL 2) AND (${CMAKE_MINOR_VERSION} LESS 8)) |
