1 # - Find Python libraries
2 # Find the native Python includes and library
4 # Note:, This is not _yet_ intended to be a general python module for other
5 # projects to use since its hard coded to python 3.2 as blender only supports
6 # a single python version.
7 # This is for blender/unix python only.
12 # PYTHON_INCLUDE_CONFIG_DIRS
14 # PYTHON_LIBPATH, Used for installation
16 # PYTHON_ROOT_DIR, The base directory to search for Python.
17 # This can also be an environment variable.
19 # also defined, but not for general use are
20 # PYTHON_LIBRARY, where to find the python library.
22 #=============================================================================
23 # Copyright 2011 Blender Foundation.
25 # Distributed under the OSI-approved BSD License (the "License");
26 # see accompanying file Copyright.txt for details.
28 # This software is distributed WITHOUT ANY WARRANTY; without even the
29 # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
30 # See the License for more information.
31 #=============================================================================
33 # If PYTHON_ROOT_DIR was defined in the environment, use it.
34 IF(NOT PYTHON_ROOT_DIR AND NOT $ENV{PYTHON_ROOT_DIR} STREQUAL "")
35 SET(PYTHON_ROOT_DIR $ENV{PYTHON_ROOT_DIR})
38 SET(PYTHON_VERSION 3.3 CACHE STRING "Python Version (major and minor only)")
39 MARK_AS_ADVANCED(PYTHON_VERSION)
42 # See: http://docs.python.org/extending/embedding.html#linking-requirements
43 # for why this is needed
44 SET(PYTHON_LINKFLAGS "-Xlinker -export-dynamic" CACHE STRING "Linker flags for python")
45 MARK_AS_ADVANCED(PYTHON_LINKFLAGS)
48 # if the user passes these defines as args, we dont want to overwrite
50 SET(_IS_INC_CONF_DEF OFF)
52 SET(_IS_LIB_PATH_DEF OFF)
53 IF(DEFINED PYTHON_INCLUDE_DIR)
56 IF(DEFINED PYTHON_INCLUDE_CONFIG_DIR)
57 SET(_IS_INC_CONF_DEF ON)
59 IF(DEFINED PYTHON_LIBRARY)
62 IF(DEFINED PYTHON_LIBPATH)
63 SET(_IS_LIB_PATH_DEF ON)
67 # only search for the dirs if we havn't already
68 IF((NOT _IS_INC_DEF) OR (NOT _IS_INC_CONF_DEF) OR (NOT _IS_LIB_DEF) OR (NOT _IS_LIB_PATH_DEF))
75 STRING(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION})
77 SET(_python_SEARCH_DIRS
79 "$ENV{HOME}/py${_PYTHON_VERSION_NO_DOTS}"
80 "/opt/py${_PYTHON_VERSION_NO_DOTS}"
81 "/opt/lib/python-${PYTHON_VERSION}"
84 FOREACH(_CURRENT_ABI_FLAGS ${_python_ABI_FLAGS})
85 #IF(CMAKE_BUILD_TYPE STREQUAL Debug)
86 # SET(_CURRENT_ABI_FLAGS "d${_CURRENT_ABI_FLAGS}")
88 STRING(REPLACE " " "" _CURRENT_ABI_FLAGS ${_CURRENT_ABI_FLAGS})
90 IF(NOT DEFINED PYTHON_INCLUDE_DIR)
91 FIND_PATH(PYTHON_INCLUDE_DIR
95 ${_python_SEARCH_DIRS}
97 include/python${PYTHON_VERSION}${_CURRENT_ABI_FLAGS}
98 include/${CMAKE_LIBRARY_ARCHITECTURE}/python${PYTHON_VERSION}${_CURRENT_ABI_FLAGS}
102 IF(NOT DEFINED PYTHON_INCLUDE_CONFIG_DIR)
103 FIND_PATH(PYTHON_INCLUDE_CONFIG_DIR
107 ${_python_SEARCH_DIRS}
109 include/python${PYTHON_VERSION}${_CURRENT_ABI_FLAGS}
110 include/${CMAKE_LIBRARY_ARCHITECTURE}/python${PYTHON_VERSION}${_CURRENT_ABI_FLAGS}
112 IF((NOT PYTHON_INCLUDE_CONFIG_DIR) AND PYTHON_INCLUDE_DIR)
114 UNSET(PYTHON_INCLUDE_CONFIG_DIR CACHE)
115 SET(PYTHON_INCLUDE_CONFIG_DIR ${PYTHON_INCLUDE_DIR} CACHE PATH "")
119 IF(NOT DEFINED PYTHON_LIBRARY)
120 FIND_LIBRARY(PYTHON_LIBRARY
122 "python${PYTHON_VERSION}${_CURRENT_ABI_FLAGS}"
124 ${_python_SEARCH_DIRS}
130 IF(NOT DEFINED PYTHON_LIBPATH)
131 FIND_PATH(PYTHON_LIBPATH
133 "python${PYTHON_VERSION}/abc.py" # This is a bit hackish! :/
135 ${_python_SEARCH_DIRS}
139 IF((NOT PYTHON_LIBPATH) AND PYTHON_LIBRARY)
141 UNSET(PYTHON_LIBPATH CACHE)
142 GET_FILENAME_COMPONENT(PYTHON_LIBPATH ${PYTHON_LIBRARY} PATH)
146 IF(PYTHON_LIBRARY AND PYTHON_LIBPATH AND PYTHON_INCLUDE_DIR AND PYTHON_INCLUDE_CONFIG_DIR)
149 # ensure we dont find values from 2 different ABI versions
151 UNSET(PYTHON_INCLUDE_DIR CACHE)
153 IF(NOT _IS_INC_CONF_DEF)
154 UNSET(PYTHON_INCLUDE_CONFIG_DIR CACHE)
157 UNSET(PYTHON_LIBRARY CACHE)
159 IF(NOT _IS_LIB_PATH_DEF)
160 UNSET(PYTHON_LIBPATH CACHE)
165 UNSET(_CURRENT_ABI_FLAGS)
168 UNSET(_python_ABI_FLAGS)
169 UNSET(_python_SEARCH_DIRS)
173 UNSET(_IS_INC_CONF_DEF)
175 UNSET(_IS_LIB_PATH_DEF)
177 # handle the QUIETLY and REQUIRED arguments and SET PYTHONLIBSUNIX_FOUND to TRUE IF
178 # all listed variables are TRUE
179 INCLUDE(FindPackageHandleStandardArgs)
180 FIND_PACKAGE_HANDLE_STANDARD_ARGS(PythonLibsUnix DEFAULT_MSG
181 PYTHON_LIBRARY PYTHON_LIBPATH PYTHON_INCLUDE_DIR PYTHON_INCLUDE_CONFIG_DIR)
183 IF(PYTHONLIBSUNIX_FOUND)
185 SET(PYTHON_INCLUDE_DIRS ${PYTHON_INCLUDE_DIR} ${PYTHON_INCLUDE_CONFIG_DIR})
186 SET(PYTHON_LIBRARIES ${PYTHON_LIBRARY})
188 # we need this for installation
189 # XXX No more valid with debian-like py3.3 packages...
190 # GET_FILENAME_COMPONENT(PYTHON_LIBPATH ${PYTHON_LIBRARY} PATH)
193 # SET(PYTHON_BINARY ${PYTHON_EXECUTABLE} CACHE STRING "")
198 PYTHON_INCLUDE_CONFIG_DIR