1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
# cmake/modules/python.cmake
#
# Copyright (C) 2006 Alan W. Irwin
#
# This file is part of PLplot.
#
# PLplot is free software; you can redistribute it and/or modify
# it under the terms of the GNU Library General Public License as published
# by the Free Software Foundation; version 2 of the License.
#
# PLplot is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Library General Public License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with the file PLplot; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
# Module for determining Python bindings configuration options
# Options to enable Python bindings
if(DEFAULT_NO_BINDINGS)
option(ENABLE_python "Enable Python bindings" OFF)
else(DEFAULT_NO_BINDINGS)
option(ENABLE_python "Enable Python bindings" ON)
endif(DEFAULT_NO_BINDINGS)
if(ENABLE_python AND NOT BUILD_SHARED_LIBS)
message(STATUS "WARNING: "
"Python requires shared libraries. Disabling python bindings")
set(ENABLE_python OFF CACHE BOOL "Enable Python bindings" FORCE)
endif(ENABLE_python AND NOT BUILD_SHARED_LIBS)
if(ENABLE_python AND NOT SWIG_FOUND)
message(STATUS "WARNING: "
"swig not found. Disabling python bindings")
set(ENABLE_python OFF CACHE BOOL "Enable Python bindings" FORCE)
endif(ENABLE_python AND NOT SWIG_FOUND)
if(ENABLE_python)
# Check for Python interpreter (which also defines PYTHON_EXECUTABLE)
find_package(PythonInterp)
if(NOT PYTHONINTERP_FOUND)
message(STATUS "WARNING: "
"python interpreter not found. Disabling python bindings")
set(ENABLE_python OFF CACHE BOOL "Enable Python bindings" FORCE)
endif(NOT PYTHONINTERP_FOUND)
endif(ENABLE_python)
if(ENABLE_python)
# Check for Python libraries which defines
# PYTHON_LIBRARIES = path to the python library
# PYTHON_INCLUDE_PATH = path to where Python.h is found
find_package(PythonLibs)
if(NOT PYTHON_LIBRARIES OR NOT PYTHON_INCLUDE_PATH)
message(STATUS "WARNING: "
"python library and/or header not found. Disabling python bindings")
set(ENABLE_python OFF CACHE BOOL "Enable Python bindings" FORCE)
endif(NOT PYTHON_LIBRARIES OR NOT PYTHON_INCLUDE_PATH)
endif(ENABLE_python)
option(HAVE_NUMPY "Use numpy rather than deprecated Numeric" ON)
if(ENABLE_python AND NOT NUMERIC_INCLUDE_PATH)
if(HAVE_NUMPY)
# First check for new version of numpy (replaces Numeric)
execute_process(
COMMAND
${PYTHON_EXECUTABLE} -c "import numpy; print numpy.get_include()"
OUTPUT_VARIABLE NUMPY_INCLUDE_PATH
RESULT_VARIABLE NUMPY_ERR
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(NUMPY_ERR)
set(HAVE_NUMPY OFF CACHE BOOL "Use numpy rather than deprecated Numeric" FORCE)
endif(NUMPY_ERR)
endif(HAVE_NUMPY)
if(HAVE_NUMPY)
find_path(
NUMERIC_INCLUDE_PATH
arrayobject.h
${NUMPY_INCLUDE_PATH}/numpy
)
if(NUMERIC_INCLUDE_PATH)
set(PYTHON_NUMERIC_NAME numpy CACHE INTERNAL "")
endif(NUMERIC_INCLUDE_PATH)
else(HAVE_NUMPY)
# Check for Python Numeric header in same include path or Numeric
# subdirectory of that path to avoid version mismatch.
find_path(
NUMERIC_INCLUDE_PATH
arrayobject.h
${PYTHON_INCLUDE_PATH} ${PYTHON_INCLUDE_PATH}/Numeric
)
if(NUMERIC_INCLUDE_PATH)
set(PYTHON_NUMERIC_NAME Numeric CACHE INTERNAL "")
endif (NUMERIC_INCLUDE_PATH)
endif(HAVE_NUMPY)
if(NUMERIC_INCLUDE_PATH)
set(
PYTHON_INCLUDE_PATH
${PYTHON_INCLUDE_PATH} ${NUMERIC_INCLUDE_PATH}
CACHE INTERNAL "")
else(NUMERIC_INCLUDE_PATH)
if(HAVE_NUMPY)
message(STATUS "WARNING: "
"NumPy header not found. Disabling python bindings")
else(HAVE_NUMPY)
message(STATUS "WARNING: "
"Numeric header not found. Disabling python bindings")
endif(HAVE_NUMPY)
set(ENABLE_python OFF CACHE BOOL "Enable Python bindings" FORCE)
endif(NUMERIC_INCLUDE_PATH)
endif(ENABLE_python AND NOT NUMERIC_INCLUDE_PATH)
if(ENABLE_python AND HAVE_NUMPY)
# This numpy installation bug found by Geoff.
option(EXCLUDE_PYTHON_LIBRARIES "Linux temporary workaround for numpy installation bug for non-system Python install prefix" OFF)
if(EXCLUDE_PYTHON_LIBRARIES)
set(PYTHON_LIBRARIES)
endif(EXCLUDE_PYTHON_LIBRARIES)
endif(ENABLE_python AND HAVE_NUMPY)
if(ENABLE_python)
# N.B. This is a nice way to obtain all sorts of python information
# using distutils.
execute_process(
COMMAND
${PYTHON_EXECUTABLE} -c "from distutils import sysconfig; print sysconfig.get_python_lib(1,0,prefix='${CMAKE_INSTALL_EXEC_PREFIX}')"
OUTPUT_VARIABLE PYTHON_INSTDIR
OUTPUT_STRIP_TRAILING_WHITESPACE
)
endif(ENABLE_python)
|