Hi Everyone, Consistent with the docs here:
https://cmake.org/cmake/help/v3.7/module/FindPythonLibs.html We want to seed which python libs we want to look for by calling find_package(PythonInterp), which sets the PYTHON_LIBRARY path, before calling find_package(PythonLibs) Starting with CMake 3.4, this started failing for us on a few linux platforms. Here is the problem: get_filename_component inside of FindPythonLibs.cmake fails b/c PYTHON_LIBRARY contains two entires: The python lib (libpython2.7.so) and a symlink to it (libpython2.7.so.1.0) get_filename_component expects a single entry. This error propagates and halts the configure. Things works for us with CMake 3.3, started seeing this issue with 3.4. Below is a patch that avoids the issue, but not sure if it’s the ideal solution. If PYTHON_LIBRARY is really supposed to be a single path, there could be other CMake logic undermined by the fact PythonInterp produces a list in some cases. ==== diff -c cmake-3.7.2/Modules/FindPythonLibs.cmake cmake-3.7.2-patch/Modules/FindPythonLibs.cmake *** cmake-3.7.2/Modules/FindPythonLibs.cmake 2017-01-13 06:05:41.000000000 -0800 --- cmake-3.7.2-patch/Modules/FindPythonLibs.cmake 2017-01-31 14:28:21.000000000 -0800 *************** *** 168,174 **** # Use the library's install prefix as a hint set(_Python_INCLUDE_PATH_HINT) ! get_filename_component(_Python_PREFIX ${PYTHON_LIBRARY} PATH) get_filename_component(_Python_PREFIX ${_Python_PREFIX} PATH) if(_Python_PREFIX) set(_Python_INCLUDE_PATH_HINT ${_Python_PREFIX}/include) --- 168,181 ---- # Use the library's install prefix as a hint set(_Python_INCLUDE_PATH_HINT) ! # get_filename_component(_Python_PREFIX ${PYTHON_LIBRARY} PATH) ! # the above fails when find_package(PythonInterp) returns a list with ! # both the python lib and a symlink to it. ! # ! # prevent this case by only using the first item in ${PYTHON_LIBRARY} ! # as input to get_filename_component ! list(GET ${PYTHON_LIBRARY} 0 FIRST_FOUND_PYTHON_LIBRARY) ! get_filename_component(_Python_PREFIX ${FIRST_FOUND_PYTHON_LIBRARY} PATH) get_filename_component(_Python_PREFIX ${_Python_PREFIX} PATH) if(_Python_PREFIX) set(_Python_INCLUDE_PATH_HINT ${_Python_PREFIX}/include) ==== -Cyrus -- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: http://public.kitware.com/mailman/listinfo/cmake
