File: python.cmake

package info (click to toggle)
plplot 5.9.9-5
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 84,772 kB
  • sloc: ansic: 86,290; xml: 26,754; ada: 17,685; cpp: 15,530; php: 11,938; tcl: 11,125; ml: 6,825; perl: 6,736; f90: 6,709; python: 6,237; java: 6,215; sh: 2,042; makefile: 192; lisp: 75; fortran: 64; sed: 52
file content (182 lines) | stat: -rw-r--r-- 7,008 bytes parent folder | download
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
# 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)
option(FORCE_NUMERIC "Force use of deprecated Numeric" OFF)
if(FORCE_NUMERIC)
  set(HAVE_NUMPY OFF CACHE BOOL "Use numpy rather than deprecated Numeric" FORCE)
endif(FORCE_NUMERIC)

if(ENABLE_python)
  # NUMERIC_INCLUDE_PATH = path to arrayobject.h for either Numeric or numpy.
  #message(STATUS "DEBUG: NUMERIC_INCLUDE_PATH = ${NUMERIC_INCLUDE_PATH}") 
  if(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)
      # We use the full path name (including numpy on the end), but
      # Double-check that all is well with that choice.
      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)

  endif(NOT NUMERIC_INCLUDE_PATH)

  if(NOT 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(NOT NUMERIC_INCLUDE_PATH)
endif(ENABLE_python)

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 AND NOT HAVE_NUMPY)
  message(STATUS 
"WARNING: The Numeric extension for Python is deprecated.  Support for
Numeric will be dropped in a future PLplot release. Please switch to numpy
by installing that Python extension and/or specifying HAVE_NUMPY ON and
FORCE_NUMERIC OFF.")
  if(NOT FORCE_NUMERIC)
    message(STATUS 
"WARNING: Disabling Python. If you really wish to enable the deprecated
Numeric support set FORCE_NUMERIC ON.")
    set(ENABLE_python OFF CACHE BOOL "Enable Python bindings" FORCE)
    # Allow further modifications.
    set(NUMERIC_INCLUDE_PATH "NUMERIC_INCLUDE_PATH-NOTFOUND"
      CACHE FILEPATH "Path to Numeric or numpy header" FORCE)
  endif(NOT FORCE_NUMERIC)
endif(ENABLE_python AND NOT 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
    )
  # Get the Python version.
  execute_process(
    COMMAND
    ${PYTHON_EXECUTABLE} -c "import sys; print('%s.%s.%s' % sys.version_info[0:3])"
    OUTPUT_VARIABLE PYTHON_VERSION
    OUTPUT_STRIP_TRAILING_WHITESPACE
    )
  message(STATUS "PYTHON_VERSION = ${PYTHON_VERSION}")

  # Enable plsmem if the Python and Swig versions support it
  transform_version(NUMERICAL_SWIG_MINIMUM_VERSION_FOR_PLSMEM "1.3.38")
  transform_version(NUMERICAL_PYTHON_MINIMUM_VERSION_FOR_PLSMEM "2.6.0")
  transform_version(NUMERICAL_SWIG_VERSION "${SWIG_VERSION}")
  transform_version(NUMERICAL_PYTHON_VERSION "${PYTHON_VERSION}")

  SET(PYTHON_HAVE_PYBUFFER OFF)
  IF(NUMERICAL_SWIG_MINIMUM_VERSION_FOR_PLSMEM LESS NUMERICAL_SWIG_VERSION)
    IF(NUMERICAL_PYTHON_MINIMUM_VERSION_FOR_PLSMEM LESS NUMERICAL_PYTHON_VERSION)
      message(STATUS "Building Python binding with plsmem() support")
      SET(PYTHON_HAVE_PYBUFFER ON)
    ENDIF(NUMERICAL_PYTHON_MINIMUM_VERSION_FOR_PLSMEM LESS NUMERICAL_PYTHON_VERSION)
  ENDIF(NUMERICAL_SWIG_MINIMUM_VERSION_FOR_PLSMEM LESS NUMERICAL_SWIG_VERSION)

endif(ENABLE_python)