From 5e59d0c8bbeafec203770f81755d04c526f98376 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 18 Jun 2011 15:15:31 +0000 Subject: [PATCH] make better use of cmake builtin funcitons for finding python library/header --- build_files/cmake/FindPythonLibsUnix.cmake | 94 +++++++++++++--------- 1 file changed, 54 insertions(+), 40 deletions(-) diff --git a/build_files/cmake/FindPythonLibsUnix.cmake b/build_files/cmake/FindPythonLibsUnix.cmake index 90bd79a924a..4f75fffb5ce 100644 --- a/build_files/cmake/FindPythonLibsUnix.cmake +++ b/build_files/cmake/FindPythonLibsUnix.cmake @@ -5,21 +5,30 @@ # PYTHON_LIBRARY # PYTHON_LIBPATH # PYTHON_LINKFLAGS +# PYTHON_ROOT_DIR, The base directory to search for Python. +# This can also be an environment variable. #============================================================================= +# If PYTHON_ROOT_DIR was defined in the environment, use it. +IF(NOT PYTHON_ROOT_DIR AND NOT $ENV{PYTHON_ROOT_DIR} STREQUAL "") + SET(PYTHON_ROOT_DIR $ENV{PYTHON_ROOT_DIR}) +ENDIF() + + set(PYTHON_VERSION 3.2 CACHE STRING "") mark_as_advanced(PYTHON_VERSION) set(PYTHON_LINKFLAGS "-Xlinker -export-dynamic") mark_as_advanced(PYTHON_LINKFLAGS) -set(_Python_ABI_FLAGS +set(_python_ABI_FLAGS "m;mu;u; ") string(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION}) -set(_Python_PATHS +set(_python_SEARCH_DIRS + ${PYTHON_ROOT_DIR} "$ENV{HOME}/py${_PYTHON_VERSION_NO_DOTS}" "/opt/py${_PYTHON_VERSION_NO_DOTS}" "/usr" @@ -31,54 +40,59 @@ if(NOT DEFINED PYTHON_INCLUDE_DIRS OR NOT DEFINED PYTHON_LIBPATH) message(STATUS "Looking for include Python.h") - set(_Found_PYTHON_H OFF) - foreach(_CURRENT_PATH ${_Python_PATHS}) - foreach(_CURRENT_ABI_FLAGS ${_Python_ABI_FLAGS}) - if(CMAKE_BUILD_TYPE STREQUAL Debug) - set(_CURRENT_ABI_FLAGS "d${_CURRENT_ABI_FLAGS}") - endif() - string(REPLACE " " "" _CURRENT_ABI_FLAGS ${_CURRENT_ABI_FLAGS}) - - set(_Python_HEADER "${_CURRENT_PATH}/include/python${PYTHON_VERSION}${_CURRENT_ABI_FLAGS}/Python.h") - - if(EXISTS ${_Python_HEADER}) - message(STATUS "Checking for header: ${_Python_HEADER} - found") - set(_Found_PYTHON_H ON) - set(PYTHON ${_CURRENT_PATH}) - set(PYTHON_ABI_FLAGS ${_CURRENT_ABI_FLAGS}) - break() - else() - message(STATUS "Checking for header: ${_Python_HEADER}") - endif() - endforeach() - - if(_Found_PYTHON_H) - break() + foreach(_CURRENT_ABI_FLAGS ${_python_ABI_FLAGS}) + if(CMAKE_BUILD_TYPE STREQUAL Debug) + set(_CURRENT_ABI_FLAGS "d${_CURRENT_ABI_FLAGS}") endif() + string(REPLACE " " "" _CURRENT_ABI_FLAGS ${_CURRENT_ABI_FLAGS}) + + find_path(PYTHON_INCLUDE_DIR + NAMES Python.h + HINTS ${_python_SEARCH_DIRS} + PATH_SUFFIXES include/python${PYTHON_VERSION}${_CURRENT_ABI_FLAGS} + ) + + find_library(PYTHON_LIBRARY + NAMES "python${PYTHON_VERSION}${_CURRENT_ABI_FLAGS}" + HINTS ${_python_SEARCH_DIRS} + PATH_SUFFIXES lib64 lib + ) + + if((EXISTS ${PYTHON_LIBRARY}) AND (EXISTS ${PYTHON_INCLUDE_DIR})) + message(STATUS "Checking for header: ${PYTHON_INCLUDE_DIR} - found") + break() + else() + message(STATUS "Checking for header: ${PYTHON_INCLUDE_DIR}") + endif() + + # ensure we dont find values from 2 different ABI versions + unset(PYTHON_INCLUDE_DIR CACHE) + unset(PYTHON_LIBRARY CACHE) endforeach() - if(NOT _Found_PYTHON_H) - message(FATAL_ERROR "Python.h not found") + if((EXISTS ${PYTHON_LIBRARY}) AND (EXISTS ${PYTHON_INCLUDE_DIR})) + # Assign cache items + set(PYTHON_INCLUDE_DIRS ${PYTHON_INCLUDE_DIR} CACHE STRING "") + set(PYTHON_LIBRARY ${PYTHON_LIBRARY} CACHE STRING "") + # not used + # set(PYTHON_BINARY ${PYTHON_EXECUTABLE} CACHE STRING "") + + mark_as_advanced( + PYTHON_INCLUDE_DIRS + PYTHON_INCLUDE_DIR + PYTHON_LIBRARY + ) + else() + message(FATAL_ERROR "Python not found") endif() - unset(_Found_PYTHON_H) - unset(_Python_HEADER) unset(_CURRENT_ABI_FLAGS) unset(_CURRENT_PATH) - - - set(PYTHON_INCLUDE_DIRS "${PYTHON}/include/python${PYTHON_VERSION}${PYTHON_ABI_FLAGS}" CACHE STRING "") - mark_as_advanced(PYTHON_INCLUDE_DIRS) - set(PYTHON_LIBRARY "python${PYTHON_VERSION}${PYTHON_ABI_FLAGS}" CACHE STRING "") - mark_as_advanced(PYTHON_LIBRARY) - set(PYTHON_LIBPATH ${PYTHON}/lib CACHE STRING "") - mark_as_advanced(PYTHON_LIBPATH) - # set(PYTHON_BINARY ${PYTHON_EXECUTABLE} CACHE STRING "") endif() -unset(_Python_ABI_FLAGS) -unset(_Python_PATHS) +unset(_python_ABI_FLAGS) +unset(_python_SEARCH_DIRS) #============================================================================= # now the python versions are found