From f0250a03661d18bc130cc00286d5396306a62f53 Mon Sep 17 00:00:00 2001 From: Alan Conway Date: Mon, 25 Aug 2014 20:10:52 +0000 Subject: 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@1620424 13f79535-47bb-0310-9956-ffa450edef68 --- qpid/cpp/bindings/CMakeLists.txt | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'qpid/cpp') diff --git a/qpid/cpp/bindings/CMakeLists.txt b/qpid/cpp/bindings/CMakeLists.txt index d64d59b9d6..f5d0023a28 100644 --- a/qpid/cpp/bindings/CMakeLists.txt +++ b/qpid/cpp/bindings/CMakeLists.txt @@ -17,14 +17,32 @@ # 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.) +# +function(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() + # Run a regular search in case we're not on unix or the .so search didn't find + # anything. This will be a no-op if we did already find the library. + find_package(PythonLibs) +endfunction(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)) -- cgit v1.2.1