1 # Distributed under the OSI-approved BSD 3-Clause License. See accompanying 2 # file Copyright.txt or https://cmake.org/licensing for details. 5 # This file is a "template" file used by various FindPython modules. 9 cmake_policy (GET CMP0094 _${_PYTHON_PREFIX}_LOOKUP_POLICY)
14 if (_${_PYTHON_PREFIX}_LOOKUP_POLICY)
15 cmake_policy (SET CMP0094 ${_${_PYTHON_PREFIX}_LOOKUP_POLICY})
19 # Initial configuration 21 if (NOT DEFINED _PYTHON_PREFIX)
22 message (FATAL_ERROR
"FindPython: INTERNAL ERROR")
24 if (NOT DEFINED _${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR)
25 message (FATAL_ERROR
"FindPython: INTERNAL ERROR")
27 if (_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR EQUAL
"3")
28 set(_${_PYTHON_PREFIX}_VERSIONS 3.9 3.8 3.7 3.6 3.5 3.4 3.3 3.2 3.1 3.0)
29 elseif (_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR EQUAL
"2")
30 set(_${_PYTHON_PREFIX}_VERSIONS 2.7 2.6 2.5 2.4 2.3 2.2 2.1 2.0)
32 message (FATAL_ERROR
"FindPython: INTERNAL ERROR")
35 if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.14)
36 get_property(_${_PYTHON_PREFIX}_CMAKE_ROLE GLOBAL PROPERTY CMAKE_ROLE)
38 set(_${_PYTHON_PREFIX}_CMAKE_ROLE
"PROJECT")
45 if (${_PYTHON_PREFIX}_FIND_REQUIRED)
46 message (FATAL_ERROR
"${_PYTHON_MSG}")
48 if (NOT ${_PYTHON_PREFIX}_FIND_QUIETLY)
49 message(STATUS
"${_PYTHON_MSG}")
53 set (${_PYTHON_PREFIX}_FOUND FALSE)
54 string (TOUPPER
"${_PYTHON_PREFIX}" _${_PYTHON_PREFIX}_UPPER_PREFIX)
55 set (${_PYTHON_UPPER_PREFIX}_FOUND FALSE)
61 foreach (var IN LISTS ARGV)
62 if (DEFINED CACHE{${var}})
63 set_property (CACHE ${var} PROPERTY TYPE INTERNAL)
70 if(NOT DEFINED ${_PYTHON_BASENAME}_LIBRARY_RELEASE)
71 set(${_PYTHON_BASENAME}_LIBRARY_RELEASE
"${_PYTHON_BASENAME}_LIBRARY_RELEASE-NOTFOUND")
73 if(NOT DEFINED ${_PYTHON_BASENAME}_LIBRARY_DEBUG)
74 set(${_PYTHON_BASENAME}_LIBRARY_DEBUG
"${_PYTHON_BASENAME}_LIBRARY_DEBUG-NOTFOUND")
77 get_property(_PYTHON_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
78 if (${_PYTHON_BASENAME}_LIBRARY_DEBUG AND ${_PYTHON_BASENAME}_LIBRARY_RELEASE AND
79 NOT ${_PYTHON_BASENAME}_LIBRARY_DEBUG STREQUAL ${_PYTHON_BASENAME}_LIBRARY_RELEASE AND
80 (_PYTHON_isMultiConfig OR CMAKE_BUILD_TYPE))
81 #
if the generator is multi-config or
if CMAKE_BUILD_TYPE is
set for 82 # single-config generators,
set optimized and debug libraries
83 set (${_PYTHON_BASENAME}_LIBRARIES
"")
84 foreach (_PYTHON_libname IN LISTS ${_PYTHON_BASENAME}_LIBRARY_RELEASE)
85 list( APPEND ${_PYTHON_BASENAME}_LIBRARIES optimized
"${_PYTHON_libname}")
87 foreach (_PYTHON_libname IN LISTS ${_PYTHON_BASENAME}_LIBRARY_DEBUG)
88 list( APPEND ${_PYTHON_BASENAME}_LIBRARIES debug
"${_PYTHON_libname}")
90 elseif (${_PYTHON_BASENAME}_LIBRARY_RELEASE)
91 set (${_PYTHON_BASENAME}_LIBRARIES
"${${_PYTHON_BASENAME}_LIBRARY_RELEASE}")
92 elseif (${_PYTHON_BASENAME}_LIBRARY_DEBUG)
93 set (${_PYTHON_BASENAME}_LIBRARIES
"${${_PYTHON_BASENAME}_LIBRARY_DEBUG}")
95 set (${_PYTHON_BASENAME}_LIBRARIES
"${_PYTHON_BASENAME}_LIBRARY-NOTFOUND")
101 set (${_PYTHON_PREFIX}_FRAMEWORKS)
102 if (CMAKE_HOST_APPLE OR APPLE)
103 file(TO_CMAKE_PATH
"$ENV{CMAKE_FRAMEWORK_PATH}" _pff_CMAKE_FRAMEWORK_PATH)
104 set (_pff_frameworks ${CMAKE_FRAMEWORK_PATH}
105 ${_pff_CMAKE_FRAMEWORK_PATH}
107 /usr/local/Frameworks
108 ${CMAKE_SYSTEM_FRAMEWORK_PATH})
109 if (_pff_frameworks) # XXX(cmake-3.14)
110 list (REMOVE_DUPLICATES _pff_frameworks)
112 foreach (_pff_framework IN LISTS _pff_frameworks)
113 if (EXISTS ${_pff_framework}/Python${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR}.framework)
114 list (APPEND ${_PYTHON_PREFIX}_FRAMEWORKS ${_pff_framework}/Python${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR}.framework)
116 if (EXISTS ${_pff_framework}/Python.framework)
117 list (APPEND ${_PYTHON_PREFIX}_FRAMEWORKS ${_pff_framework}/Python.framework)
120 unset (_pff_frameworks)
121 unset (_pff_framework)
126 set (_PYTHON_FRAMEWORK_PATHS)
127 foreach (_PYTHON_FRAMEWORK IN LISTS ${_PYTHON_PREFIX}_FRAMEWORKS)
128 list (APPEND _PYTHON_FRAMEWORK_PATHS
129 "${_PYTHON_FRAMEWORK}/Versions/${_PYTHON_VERSION}")
131 set (${_PYTHON_PGF_FRAMEWORK_PATHS} ${_PYTHON_FRAMEWORK_PATHS} PARENT_SCOPE)
135 string (REPLACE
"." "" _PYTHON_VERSION_NO_DOTS ${_PYTHON_VERSION})
136 set (${_PYTHON_PGR_REGISTRY_PATHS}
137 [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_PYTHON_VERSION}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath]
138 [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_PYTHON_VERSION}-${_${_PYTHON_PREFIX}_ARCH2}\\InstallPath]
139 [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_PYTHON_VERSION}\\InstallPath]
140 [HKEY_CURRENT_USER\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${_PYTHON_VERSION_NO_DOTS}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath]
141 [HKEY_CURRENT_USER\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${_PYTHON_VERSION_NO_DOTS}-${_${_PYTHON_PREFIX}_ARCH2}\\InstallPath]
142 [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_PYTHON_VERSION}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath]
143 [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_PYTHON_VERSION}-${_${_PYTHON_PREFIX}_ARCH2}\\InstallPath]
144 [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_PYTHON_VERSION}\\InstallPath]
145 [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${_PYTHON_VERSION_NO_DOTS}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath]
146 [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${_PYTHON_VERSION_NO_DOTS}-${_${_PYTHON_PREFIX}_ARCH2}\\InstallPath]
153 list (GET _${_PYTHON_PREFIX}_FIND_ABI 0 pydebug)
154 list (GET _${_PYTHON_PREFIX}_FIND_ABI 1 pymalloc)
155 list (GET _${_PYTHON_PREFIX}_FIND_ABI 2 unicode)
157 if (pymalloc STREQUAL
"ANY" AND unicode STREQUAL
"ANY")
158 set (abiflags
"mu" "m" "u" "")
159 elseif (pymalloc STREQUAL
"ANY" AND unicode STREQUAL
"ON")
160 set (abiflags
"mu" "u")
161 elseif (pymalloc STREQUAL
"ANY" AND unicode STREQUAL
"OFF")
162 set (abiflags
"m" "")
163 elseif (pymalloc STREQUAL
"ON" AND unicode STREQUAL
"ANY")
164 set (abiflags
"mu" "m")
165 elseif (pymalloc STREQUAL
"ON" AND unicode STREQUAL
"ON")
167 elseif (pymalloc STREQUAL
"ON" AND unicode STREQUAL
"OFF")
169 elseif (pymalloc STREQUAL
"ON" AND unicode STREQUAL
"ANY")
170 set (abiflags
"u" "")
171 elseif (pymalloc STREQUAL
"OFF" AND unicode STREQUAL
"ON")
175 if (pydebug STREQUAL
"ON")
177 list (TRANSFORM abiflags PREPEND
"d")
181 elseif (pydebug STREQUAL
"ANY")
183 set (flags
"${abiflags}")
184 list (TRANSFORM flags PREPEND
"d")
185 list (APPEND abiflags
"${flags}")
187 set (abiflags
"" "d")
191 set (${_PGABIFLAGS}
"${abiflags}" PARENT_SCOPE)
195 cmake_parse_arguments (PARSE_ARGV 1 _PGPS
"LIBRARY;INCLUDE" "VERSION" "")
197 if (DEFINED _${_PYTHON_PREFIX}_ABIFLAGS)
198 set (abi
"${_${_PYTHON_PREFIX}_ABIFLAGS}")
200 set (abi
"mu" "m" "u" "")
205 if (CMAKE_LIBRARY_ARCHITECTURE)
206 list (APPEND path_suffixes lib/${CMAKE_LIBRARY_ARCHITECTURE})
208 list (APPEND path_suffixes lib libs)
210 if (CMAKE_LIBRARY_ARCHITECTURE)
211 set (suffixes
"${abi}")
213 list (TRANSFORM suffixes PREPEND
"lib/python${_PGPS_VERSION}/config-${_PGPS_VERSION}")
214 list (TRANSFORM suffixes APPEND
"-${CMAKE_LIBRARY_ARCHITECTURE}")
216 set (suffixes
"lib/python${_PGPS_VERSION}/config-${_PGPS_VERSION}-${CMAKE_LIBRARY_ARCHITECTURE}")
218 list (APPEND path_suffixes ${suffixes})
220 set (suffixes
"${abi}")
222 list (TRANSFORM suffixes PREPEND
"lib/python${_PGPS_VERSION}/config-${_PGPS_VERSION}")
224 set (suffixes
"lib/python${_PGPS_VERSION}/config-${_PGPS_VERSION}")
226 list (APPEND path_suffixes ${suffixes})
227 elseif (_PGPS_INCLUDE)
228 set (suffixes
"${abi}")
230 list (TRANSFORM suffixes PREPEND
"include/python${_PGPS_VERSION}")
232 set (suffixes
"include/python${_PGPS_VERSION}")
234 list (APPEND path_suffixes ${suffixes} include)
237 set (${_PYTHON_PGPS_PATH_SUFFIXES} ${path_suffixes} PARENT_SCOPE)
241 cmake_parse_arguments (PARSE_ARGV 1 _PGN
"POSIX;EXECUTABLE;CONFIG;LIBRARY;WIN32;DEBUG" "VERSION" "")
246 string (REPLACE
"." "" _PYTHON_VERSION_NO_DOTS ${_PGN_VERSION})
248 set (
name python${_PYTHON_VERSION_NO_DOTS})
253 list (APPEND names
"${name}")
257 if (DEFINED _${_PYTHON_PREFIX}_ABIFLAGS)
258 set (abi
"${_${_PYTHON_PREFIX}_ABIFLAGS}")
260 if (_PGN_EXECUTABLE OR _PGN_CONFIG)
263 set (abi
"mu" "m" "u" "")
268 if (_PGN_CONFIG AND DEFINED CMAKE_LIBRARY_ARCHITECTURE)
269 set (abinames
"${abi}")
270 list (TRANSFORM abinames PREPEND
"${CMAKE_LIBRARY_ARCHITECTURE}-python${_PGN_VERSION}")
271 list (TRANSFORM abinames APPEND
"-config")
272 list (APPEND names ${abinames})
274 set (abinames
"${abi}")
275 list (TRANSFORM abinames PREPEND
"python${_PGN_VERSION}")
277 list (TRANSFORM abinames APPEND
"-config")
279 list (APPEND names ${abinames})
281 if (_PGN_CONFIG AND DEFINED CMAKE_LIBRARY_ARCHITECTURE)
282 set (abinames
"${CMAKE_LIBRARY_ARCHITECTURE}-python${_PGN_VERSION}")
284 list (APPEND abinames
"python${_PGN_VERSION}")
286 list (TRANSFORM abinames APPEND
"-config")
288 list (APPEND names ${abinames})
292 set (${_PYTHON_PGN_NAMES} ${names} PARENT_SCOPE)
296 unset (${_PYTHON_PGCV_VALUE} PARENT_SCOPE)
298 if (NOT NAME MATCHES
"^(PREFIX|ABIFLAGS|CONFIGDIR|INCLUDES|LIBS|SOABI)$")
302 if (_${_PYTHON_PREFIX}_CONFIG)
303 if (NAME STREQUAL
"SOABI")
304 set (config_flag
"--extension-suffix")
306 set (config_flag
"--${NAME}")
308 string (TOLOWER
"${config_flag}" config_flag)
309 execute_process (COMMAND
"${_${_PYTHON_PREFIX}_CONFIG}" ${config_flag}
310 RESULT_VARIABLE _result
311 OUTPUT_VARIABLE _values
313 OUTPUT_STRIP_TRAILING_WHITESPACE)
317 if (NAME STREQUAL
"INCLUDES")
319 string (REGEX MATCHALL
"(-I|-iwithsysroot)[ ]*[^ ]+" _values
"${_values}")
320 string (REGEX REPLACE
"(-I|-iwithsysroot)[ ]*" "" _values
"${_values}")
321 if (_values) # XXX(cmake-3.14)
322 list (REMOVE_DUPLICATES _values)
324 elseif (NAME STREQUAL
"SOABI")
325 # clean-up: remove prefix character and suffix 326 string (REGEX REPLACE
"^[.-](.+)(${CMAKE_SHARED_LIBRARY_SUFFIX}|\\.(so|pyd))$" "\\1" _values
"${_values}")
331 if (_${_PYTHON_PREFIX}_EXECUTABLE AND NOT CMAKE_CROSSCOMPILING)
332 if (NAME STREQUAL
"PREFIX")
333 execute_process (COMMAND
"${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
"import sys\ntry:\n from distutils import sysconfig\n sys.stdout.write(';'.join([sysconfig.PREFIX,sysconfig.EXEC_PREFIX,sysconfig.BASE_EXEC_PREFIX]))\nexcept Exception:\n import sysconfig\n sys.stdout.write(';'.join([sysconfig.get_config_var('base') or '', sysconfig.get_config_var('installed_base') or '']))" 334 RESULT_VARIABLE _result
335 OUTPUT_VARIABLE _values
337 OUTPUT_STRIP_TRAILING_WHITESPACE)
341 if (_values) # XXX(cmake-3.14)
342 list (REMOVE_DUPLICATES _values)
345 elseif (NAME STREQUAL
"INCLUDES")
349 set (_scheme
"posix_prefix")
351 execute_process (COMMAND
"${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
"import sys\ntry:\n from distutils import sysconfig\n sys.stdout.write(';'.join([sysconfig.get_python_inc(plat_specific=True),sysconfig.get_python_inc(plat_specific=False)]))\nexcept Exception:\n import sysconfig\n sys.stdout.write(';'.join([sysconfig.get_path('platinclude'),sysconfig.get_path('platinclude','${_scheme}'),sysconfig.get_path('include'),sysconfig.get_path('include','${_scheme}')]))" 352 RESULT_VARIABLE _result
353 OUTPUT_VARIABLE _values
355 OUTPUT_STRIP_TRAILING_WHITESPACE)
359 if (_values) # XXX(cmake-3.14)
360 list (REMOVE_DUPLICATES _values)
363 elseif (NAME STREQUAL
"SOABI")
364 execute_process (COMMAND
"${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
"import sys\ntry:\n from distutils import sysconfig\n sys.stdout.write(';'.join([sysconfig.get_config_var('SOABI') or '',sysconfig.get_config_var('EXT_SUFFIX') or '']))\nexcept Exception:\n import sysconfig;sys.stdout.write(';'.join([sysconfig.get_config_var('SOABI') or '',sysconfig.get_config_var('EXT_SUFFIX') or '']))" 365 RESULT_VARIABLE _result
366 OUTPUT_VARIABLE _soabi
368 OUTPUT_STRIP_TRAILING_WHITESPACE)
372 foreach (_item IN LISTS _soabi)
374 set (_values
"${_item}")
379 # clean-up: remove prefix character and suffix 380 string (REGEX REPLACE
"^[.-](.+)(${CMAKE_SHARED_LIBRARY_SUFFIX}|\\.(so|pyd))$" "\\1" _values
"${_values}")
384 set (config_flag
"${NAME}")
385 if (NAME STREQUAL
"CONFIGDIR")
386 set (config_flag
"LIBPL")
388 execute_process (COMMAND
"${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
"import sys\ntry:\n from distutils import sysconfig\n sys.stdout.write(sysconfig.get_config_var('${config_flag}'))\nexcept Exception:\n import sysconfig\n sys.stdout.write(sysconfig.get_config_var('${config_flag}'))" 389 RESULT_VARIABLE _result
390 OUTPUT_VARIABLE _values
392 OUTPUT_STRIP_TRAILING_WHITESPACE)
399 if (config_flag STREQUAL
"ABIFLAGS")
400 set (${_PYTHON_PGCV_VALUE}
"${_values}" PARENT_SCOPE)
404 if (NOT _values OR _values STREQUAL
"None")
408 if (NAME STREQUAL
"LIBS")
410 string (REGEX MATCHALL
"-(l|framework)[ ]*[^ ]+" _values
"${_values}")
411 # remove elements relative to python library itself 412 if (_values) # XXX(cmake-3.14)
413 list (FILTER _values EXCLUDE REGEX
"-lpython")
414 list (REMOVE_DUPLICATES _values)
418 if (WIN32 AND NAME MATCHES
"^(PREFIX|CONFIGDIR|INCLUDES)$")
419 file (TO_CMAKE_PATH
"${_values}" _values)
422 set (${_PYTHON_PGCV_VALUE}
"${_values}" PARENT_SCOPE)
426 cmake_parse_arguments (PARSE_ARGV 0 _PGV
"LIBRARY;INCLUDE" "PREFIX" "")
428 unset (${_PGV_PREFIX}
VERSION PARENT_SCOPE)
429 unset (${_PGV_PREFIX}VERSION_MAJOR PARENT_SCOPE)
430 unset (${_PGV_PREFIX}VERSION_MINOR PARENT_SCOPE)
431 unset (${_PGV_PREFIX}VERSION_PATCH PARENT_SCOPE)
432 unset (${_PGV_PREFIX}ABI PARENT_SCOPE)
435 # retrieve version and abi from library name 436 if (_${_PYTHON_PREFIX}_LIBRARY_RELEASE)
437 # extract
version from library name
438 if (_${_PYTHON_PREFIX}_LIBRARY_RELEASE MATCHES
"python([23])([0-9]+)")
439 set (${_PGV_PREFIX}VERSION_MAJOR
"${CMAKE_MATCH_1}" PARENT_SCOPE)
440 set (${_PGV_PREFIX}VERSION_MINOR
"${CMAKE_MATCH_2}" PARENT_SCOPE)
441 set (${_PGV_PREFIX}
VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}" PARENT_SCOPE)
442 set (${_PGV_PREFIX}ABI
"" PARENT_SCOPE)
443 elseif (_${_PYTHON_PREFIX}_LIBRARY_RELEASE MATCHES
"python([23])\\.([0-9]+)([dmu]*)")
444 set (${_PGV_PREFIX}VERSION_MAJOR
"${CMAKE_MATCH_1}" PARENT_SCOPE)
445 set (${_PGV_PREFIX}VERSION_MINOR
"${CMAKE_MATCH_2}" PARENT_SCOPE)
446 set (${_PGV_PREFIX}
VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}" PARENT_SCOPE)
447 set (${_PGV_PREFIX}ABI
"${CMAKE_MATCH_3}" PARENT_SCOPE)
451 if (_${_PYTHON_PREFIX}_INCLUDE_DIR)
452 # retrieve
version from header file
453 file (STRINGS
"${_${_PYTHON_PREFIX}_INCLUDE_DIR}/patchlevel.h" version 454 REGEX
"^#define[ \t]+PY_VERSION[ \t]+\"[^\"]+\"")
455 string (REGEX REPLACE
"^#define[ \t]+PY_VERSION[ \t]+\"([^\"]+)\".*" "\\1" 457 string (REGEX MATCHALL
"[0-9]+" versions
"${version}")
458 list (GET versions 0 version_major)
459 list (GET versions 1 version_minor)
460 list (GET versions 2 version_patch)
462 set (${_PGV_PREFIX}
VERSION "${version_major}.${version_minor}" PARENT_SCOPE)
463 set (${_PGV_PREFIX}VERSION_MAJOR ${version_major} PARENT_SCOPE)
464 set (${_PGV_PREFIX}VERSION_MINOR ${version_minor} PARENT_SCOPE)
465 set (${_PGV_PREFIX}VERSION_PATCH ${version_patch} PARENT_SCOPE)
468 if (version_major VERSION_GREATER
"2")
469 file (STRINGS
"${_${_PYTHON_PREFIX}_INCLUDE_DIR}/pyconfig.h" config REGEX
"(Py_DEBUG|WITH_PYMALLOC|Py_UNICODE_SIZE|MS_WIN32)")
471 if (config MATCHES
"#[ ]*define[ ]+MS_WIN32")
472 # ABI not used on Windows 475 if (config MATCHES
"#[ ]*define[ ]+Py_DEBUG[ ]+1")
478 if (config MATCHES
"#[ ]*define[ ]+WITH_PYMALLOC[ ]+1")
481 if (config MATCHES
"#[ ]*define[ ]+Py_UNICODE_SIZE[ ]+4")
484 set (${_PGV_PREFIX}ABI
"${abi}" PARENT_SCOPE)
488 set (${_PGV_PREFIX}ABI
"" PARENT_SCOPE)
496 if (NOT _${_PYTHON_PREFIX}_EXECUTABLE)
500 cmake_parse_arguments (PARSE_ARGV 0 _PVI
"EXACT;CHECK_EXISTS" "" "")
501 if (_PVI_UNPARSED_ARGUMENTS)
502 set (expected_version ${_PVI_UNPARSED_ARGUMENTS})
504 unset (expected_version)
507 if (_PVI_CHECK_EXISTS AND NOT EXISTS
"${_${_PYTHON_PREFIX}_EXECUTABLE}")
508 # interpreter does not exist anymore 509 set (_${_PYTHON_PREFIX}_Interpreter_REASON_FAILURE
"Cannot find the interpreter \"${_${_PYTHON_PREFIX}_EXECUTABLE}\"")
510 set_property (CACHE _${_PYTHON_PREFIX}_EXECUTABLE PROPERTY VALUE
"${_PYTHON_PREFIX}_EXECUTABLE-NOTFOUND")
514 # validate ABI compatibility 515 if (DEFINED _${_PYTHON_PREFIX}_FIND_ABI)
516 execute_process (COMMAND
"${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
517 "import sys; sys.stdout.write(sys.abiflags)" 518 RESULT_VARIABLE result
521 OUTPUT_STRIP_TRAILING_WHITESPACE)
523 # assume ABI is not supported 526 if (NOT abi IN_LIST _${_PYTHON_PREFIX}_ABIFLAGS)
528 set (_${_PYTHON_PREFIX}_Interpreter_REASON_FAILURE
"Wrong ABI for the interpreter \"${_${_PYTHON_PREFIX}_EXECUTABLE}\"")
529 set_property (CACHE _${_PYTHON_PREFIX}_EXECUTABLE PROPERTY VALUE
"${_PYTHON_PREFIX}_EXECUTABLE-NOTFOUND")
534 get_filename_component (python_name
"${_${_PYTHON_PREFIX}_EXECUTABLE}" NAME)
536 if (expected_version AND NOT python_name STREQUAL
"python${expected_version}${abi}${CMAKE_EXECUTABLE_SUFFIX}")
537 # executable found must have a specific version 538 execute_process (COMMAND
"${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
539 "import sys; sys.stdout.write('.'.join([str(x) for x in sys.version_info[:2]]))" 540 RESULT_VARIABLE result
543 OUTPUT_STRIP_TRAILING_WHITESPACE)
545 # interpreter is not usable 546 set (_${_PYTHON_PREFIX}_Interpreter_REASON_FAILURE
"Cannot use the interpreter \"${_${_PYTHON_PREFIX}_EXECUTABLE}\"")
547 set_property (CACHE _${_PYTHON_PREFIX}_EXECUTABLE PROPERTY VALUE
"${_PYTHON_PREFIX}_EXECUTABLE-NOTFOUND")
549 if (_PVI_EXACT AND NOT
version VERSION_EQUAL expected_version)
550 # interpreter has wrong version 551 set (_${_PYTHON_PREFIX}_Interpreter_REASON_FAILURE
"Wrong version for the interpreter \"${_${_PYTHON_PREFIX}_EXECUTABLE}\"")
552 set_property (CACHE _${_PYTHON_PREFIX}_EXECUTABLE PROPERTY VALUE
"${_PYTHON_PREFIX}_EXECUTABLE-NOTFOUND")
554 # check that version is OK 555 string(REGEX REPLACE
"^([0-9]+)\\..*$" "\\1" major_version
"${version}")
556 string(REGEX REPLACE
"^([0-9]+)\\.?.*$" "\\1" expected_major_version
"${expected_version}")
557 if (NOT major_version VERSION_EQUAL expected_major_version
558 OR NOT
version VERSION_GREATER_EQUAL expected_version)
559 set (_${_PYTHON_PREFIX}_Interpreter_REASON_FAILURE
"Wrong version for the interpreter \"${_${_PYTHON_PREFIX}_EXECUTABLE}\"")
560 set_property (CACHE _${_PYTHON_PREFIX}_EXECUTABLE PROPERTY VALUE
"${_PYTHON_PREFIX}_EXECUTABLE-NOTFOUND")
564 if (NOT _${_PYTHON_PREFIX}_EXECUTABLE)
568 if (NOT python_name STREQUAL
"python${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR}${CMAKE_EXECUTABLE_SUFFIX}")
569 # executable found do not have version in name 570 # ensure major version is OK 571 execute_process (COMMAND
"${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
572 "import sys; sys.stdout.write(str(sys.version_info[0]))" 573 RESULT_VARIABLE result
576 OUTPUT_STRIP_TRAILING_WHITESPACE)
577 if (result OR NOT
version EQUAL _${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR)
578 # interpreter not usable or has wrong major
version 580 set (_${_PYTHON_PREFIX}_Interpreter_REASON_FAILURE
"Cannot use the interpreter \"${_${_PYTHON_PREFIX}_EXECUTABLE}\"")
582 set (_${_PYTHON_PREFIX}_Interpreter_REASON_FAILURE
"Wrong major version for the interpreter \"${_${_PYTHON_PREFIX}_EXECUTABLE}\"")
584 set_property (CACHE _${_PYTHON_PREFIX}_EXECUTABLE PROPERTY VALUE
"${_PYTHON_PREFIX}_EXECUTABLE-NOTFOUND")
590 if (CMAKE_SIZEOF_VOID_P AND (
"Development.Module" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
591 OR
"Development.Embed" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
592 AND NOT CMAKE_CROSSCOMPILING)
593 # In this case, interpreter must have same architecture as environment 594 execute_process (COMMAND
"${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
595 "import sys, struct; sys.stdout.write(str(struct.calcsize(\"P\")))" 596 RESULT_VARIABLE result
599 OUTPUT_STRIP_TRAILING_WHITESPACE)
600 if (result OR NOT
size EQUAL CMAKE_SIZEOF_VOID_P)
601 # interpreter not usable or has wrong architecture 603 set (_${_PYTHON_PREFIX}_Interpreter_REASON_FAILURE
"Cannot use the interpreter \"${_${_PYTHON_PREFIX}_EXECUTABLE}\"")
605 set (_${_PYTHON_PREFIX}_Interpreter_REASON_FAILURE
"Wrong architecture for the interpreter \"${_${_PYTHON_PREFIX}_EXECUTABLE}\"")
607 set_property (CACHE _${_PYTHON_PREFIX}_EXECUTABLE PROPERTY VALUE
"${_PYTHON_PREFIX}_EXECUTABLE-NOTFOUND")
615 if (NOT _${_PYTHON_PREFIX}_COMPILER)
619 cmake_parse_arguments (_PVC
"EXACT;CHECK_EXISTS" "" "" ${ARGN})
620 if (_PVC_UNPARSED_ARGUMENTS)
621 set (major_version FALSE)
622 set (expected_version ${_PVC_UNPARSED_ARGUMENTS})
624 set (major_version TRUE)
625 set (expected_version ${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR})
626 set (_PVC_EXACT TRUE)
629 if (_PVC_CHECK_EXISTS AND NOT EXISTS
"${_${_PYTHON_PREFIX}_COMPILER}")
630 # Compiler does not exist anymore 631 set (_${_PYTHON_PREFIX}_Compiler_REASON_FAILURE
"Cannot find the compiler \"${_${_PYTHON_PREFIX}_COMPILER}\"")
632 set_property (CACHE _${_PYTHON_PREFIX}_COMPILER PROPERTY VALUE
"${_PYTHON_PREFIX}_COMPILER-NOTFOUND")
636 # retrieve python environment version from compiler 637 set (working_dir
"${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/PythonCompilerVersion.dir")
639 # check only major version 640 file (WRITE
"${working_dir}/version.py" "import sys; sys.stdout.write(str(sys.version_info[0]))")
642 file (WRITE
"${working_dir}/version.py" "import sys; sys.stdout.write('.'.join([str(x) for x in sys.version_info[:2]]))\n")
644 execute_process (COMMAND
"${_${_PYTHON_PREFIX}_COMPILER}" /
target:exe /embed
"${working_dir}/version.py" 645 WORKING_DIRECTORY
"${working_dir}" 648 OUTPUT_STRIP_TRAILING_WHITESPACE)
649 execute_process (COMMAND
"${working_dir}/version" 650 WORKING_DIRECTORY
"${working_dir}" 651 RESULT_VARIABLE result
654 file (REMOVE_RECURSE
"${_${_PYTHON_PREFIX}_VERSION_DIR}")
656 if (result OR (_PVC_EXACT AND NOT
version VERSION_EQUAL expected_version) OR (
version VERSION_LESS expected_version))
657 # Compiler not usable or has wrong version 659 set (_${_PYTHON_PREFIX}_Compiler_REASON_FAILURE
"Cannot use the compiler \"${_${_PYTHON_PREFIX}_COMPILER}\"")
661 set (_${_PYTHON_PREFIX}_Compiler_REASON_FAILURE
"Wrong version for the compiler \"${_${_PYTHON_PREFIX}_COMPILER}\"")
663 set_property (CACHE _${_PYTHON_PREFIX}_COMPILER PROPERTY VALUE
"${_PYTHON_PREFIX}_COMPILER-NOTFOUND")
669 if (NOT _${_PYTHON_PREFIX}_LIBRARY_RELEASE)
670 unset (_${_PYTHON_PREFIX}_LIBRARY_DEBUG)
674 cmake_parse_arguments (PARSE_ARGV 0 _PVL
"EXACT;CHECK_EXISTS" "" "")
675 if (_PVL_UNPARSED_ARGUMENTS)
676 set (expected_version ${_PVL_UNPARSED_ARGUMENTS})
678 unset (expected_version)
681 if (_PVL_CHECK_EXISTS AND NOT EXISTS
"${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}")
682 # library does not exist anymore 683 set (_${_PYTHON_PREFIX}_Development_REASON_FAILURE
"Cannot find the library \"${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}\"")
684 set_property (CACHE _${_PYTHON_PREFIX}_LIBRARY_RELEASE PROPERTY VALUE
"${_PYTHON_PREFIX}_LIBRARY_RELEASE-NOTFOUND")
686 set_property (CACHE _${_PYTHON_PREFIX}_LIBRARY_DEBUG PROPERTY VALUE
"${_PYTHON_PREFIX}_LIBRARY_DEBUG-NOTFOUND")
688 set_property (CACHE _${_PYTHON_PREFIX}_INCLUDE_DIR PROPERTY VALUE
"${_PYTHON_PREFIX}_INCLUDE_DIR-NOTFOUND")
692 # retrieve version and abi from library name 693 _python_get_version (LIBRARY PREFIX lib_)
695 if (DEFINED _${_PYTHON_PREFIX}_FIND_ABI AND NOT lib_ABI IN_LIST _${_PYTHON_PREFIX}_ABIFLAGS)
697 set (_${_PYTHON_PREFIX}_Development_REASON_FAILURE
"Wrong ABI for the library \"${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}\"")
698 set_property (CACHE _${_PYTHON_PREFIX}_LIBRARY_RELEASE PROPERTY VALUE
"${_PYTHON_PREFIX}_LIBRARY_RELEASE-NOTFOUND")
700 if (expected_version)
701 if ((_PVL_EXACT AND NOT lib_VERSION VERSION_EQUAL expected_version) OR (lib_VERSION VERSION_LESS expected_version))
702 # library has wrong version 703 set (_${_PYTHON_PREFIX}_Development_REASON_FAILURE
"Wrong version for the library \"${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}\"")
704 set_property (CACHE _${_PYTHON_PREFIX}_LIBRARY_RELEASE PROPERTY VALUE
"${_PYTHON_PREFIX}_LIBRARY_RELEASE-NOTFOUND")
707 if (NOT lib_VERSION_MAJOR VERSION_EQUAL _${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR)
708 # library has wrong major
version 709 set (_${_PYTHON_PREFIX}_Development_REASON_FAILURE
"Wrong major version for the library \"${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}\"")
710 set_property (CACHE _${_PYTHON_PREFIX}_LIBRARY_RELEASE PROPERTY VALUE
"${_PYTHON_PREFIX}_LIBRARY_RELEASE-NOTFOUND")
715 if (NOT _${_PYTHON_PREFIX}_LIBRARY_RELEASE)
717 set_property (CACHE _${_PYTHON_PREFIX}_LIBRARY_DEBUG PROPERTY VALUE
"${_PYTHON_PREFIX}_LIBRARY_DEBUG-NOTFOUND")
719 unset (_${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE CACHE)
720 unset (_${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG CACHE)
721 set_property (CACHE _${_PYTHON_PREFIX}_INCLUDE_DIR PROPERTY VALUE
"${_PYTHON_PREFIX}_INCLUDE_DIR-NOTFOUND")
727 if (NOT _${_PYTHON_PREFIX}_INCLUDE_DIR)
731 cmake_parse_arguments (PARSE_ARGV 0 _PVID
"EXACT;CHECK_EXISTS" "" "")
732 if (_PVID_UNPARSED_ARGUMENTS)
733 set (expected_version ${_PVID_UNPARSED_ARGUMENTS})
735 unset (expected_version)
738 if (_PVID_CHECK_EXISTS AND NOT EXISTS
"${_${_PYTHON_PREFIX}_INCLUDE_DIR}")
739 # include file does not exist anymore 740 set (_${_PYTHON_PREFIX}_Development_REASON_FAILURE
"Cannot find the directory \"${_${_PYTHON_PREFIX}_INCLUDE_DIR}\"")
741 set_property (CACHE _${_PYTHON_PREFIX}_INCLUDE_DIR PROPERTY VALUE
"${_PYTHON_PREFIX}_INCLUDE_DIR-NOTFOUND")
745 # retrieve version from header file 746 _python_get_version (INCLUDE PREFIX inc_)
748 if (DEFINED _${_PYTHON_PREFIX}_FIND_ABI AND NOT inc_ABI IN_LIST _${_PYTHON_PREFIX}_ABIFLAGS)
750 set (_${_PYTHON_PREFIX}_Development_REASON_FAILURE
"Wrong ABI for the directory \"${_${_PYTHON_PREFIX}_INCLUDE_DIR}\"")
751 set_property (CACHE _${_PYTHON_PREFIX}_INCLUDE_DIR PROPERTY VALUE
"${_PYTHON_PREFIX}_INCLUDE_DIR-NOTFOUND")
753 if (expected_version)
754 if ((_PVID_EXACT AND NOT inc_VERSION VERSION_EQUAL expected_version) OR (inc_VERSION VERSION_LESS expected_version))
755 # include dir has wrong version 756 set (_${_PYTHON_PREFIX}_Development_REASON_FAILURE
"Wrong version for the directory \"${_${_PYTHON_PREFIX}_INCLUDE_DIR}\"")
757 set_property (CACHE _${_PYTHON_PREFIX}_INCLUDE_DIR PROPERTY VALUE
"${_PYTHON_PREFIX}_INCLUDE_DIR-NOTFOUND")
760 if (NOT inc_VERSION_MAJOR VERSION_EQUAL _${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR)
762 set (_${_PYTHON_PREFIX}_Development_REASON_FAILURE
"Wrong major version for the directory \"${_${_PYTHON_PREFIX}_INCLUDE_DIR}\"")
763 set_property (CACHE _${_PYTHON_PREFIX}_INCLUDE_DIR PROPERTY VALUE
"${_PYTHON_PREFIX}_INCLUDE_DIR-NOTFOUND")
771 string (REPLACE "_RUNTIME" "" _PYTHON_LIB "${_PYTHON_LIB}
") 772 # look at runtime part on systems supporting it 773 if (CMAKE_SYSTEM_NAME STREQUAL "Windows
" OR 774 (CMAKE_SYSTEM_NAME MATCHES "MSYS|CYGWIN
" 775 AND ${_PYTHON_LIB} MATCHES "${CMAKE_IMPORT_LIBRARY_SUFFIX}$
")) 776 set (CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_SHARED_LIBRARY_SUFFIX}) 777 # MSYS has a special syntax for runtime libraries 778 if (CMAKE_SYSTEM_NAME MATCHES "MSYS
") 779 list (APPEND CMAKE_FIND_LIBRARY_PREFIXES "msys-
") 781 find_library (${ARGV}) 786 function (_PYTHON_SET_LIBRARY_DIRS _PYTHON_SLD_RESULT) 788 set (_PYTHON_LIBS ${ARGN}) 789 foreach (_PYTHON_LIB IN LISTS _PYTHON_LIBS) 791 get_filename_component (_PYTHON_DIR "${${_PYTHON_LIB}}
" DIRECTORY) 792 list (APPEND _PYTHON_DIRS "${_PYTHON_DIR}
") 796 list (REMOVE_DUPLICATES _PYTHON_DIRS) 798 set (${_PYTHON_SLD_RESULT} ${_PYTHON_DIRS} PARENT_SCOPE) 802 function (_PYTHON_SET_DEVELOPMENT_MODULE_FOUND module) 803 if ("Development.${module}
" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS) 804 string(TOUPPER "${module}
" id) 805 set (module_found TRUE) 807 if ("LIBRARY
" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_${id}_ARTIFACTS 808 AND NOT _${_PYTHON_PREFIX}_LIBRARY_RELEASE) 809 set (module_found FALSE) 811 if ("INCLUDE_DIR
" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_${id}_ARTIFACTS 812 AND NOT _${_PYTHON_PREFIX}_INCLUDE_DIR) 813 set (module_found FALSE) 816 set (${_PYTHON_PREFIX}_Development.${module}_FOUND ${module_found} PARENT_SCOPE) 821 # If major version is specified, it must be the same as internal major version 822 if (DEFINED ${_PYTHON_PREFIX}_FIND_VERSION_MAJOR 823 AND NOT ${_PYTHON_PREFIX}_FIND_VERSION_MAJOR VERSION_EQUAL _${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR) 824 _python_display_failure ("Could NOT find ${_PYTHON_PREFIX}: Wrong major
version specified is \
"${${_PYTHON_PREFIX}_FIND_VERSION_MAJOR}\", but expected major version is \"${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR}\"")
829 if (NOT ${_PYTHON_PREFIX}_FIND_COMPONENTS)
830 set (${_PYTHON_PREFIX}_FIND_COMPONENTS Interpreter)
831 set (${_PYTHON_PREFIX}_FIND_REQUIRED_Interpreter TRUE)
833 if (
"NumPy" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
834 list (APPEND ${_PYTHON_PREFIX}_FIND_COMPONENTS
"Interpreter" "Development.Module")
836 if (
"Development" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
837 list (APPEND ${_PYTHON_PREFIX}_FIND_COMPONENTS
"Development.Module" "Development.Embed")
839 if (${_PYTHON_PREFIX}_FIND_COMPONENTS) # XXX(cmake-3.14)
840 list (REMOVE_DUPLICATES ${_PYTHON_PREFIX}_FIND_COMPONENTS)
842 foreach (_${_PYTHON_PREFIX}_COMPONENT IN ITEMS Interpreter Compiler Development Development.Module Development.Embed NumPy)
843 set (${_PYTHON_PREFIX}_${_${_PYTHON_PREFIX}_COMPONENT}_FOUND FALSE)
845 if (${_PYTHON_PREFIX}_FIND_REQUIRED_Development)
846 set (${_PYTHON_PREFIX}_FIND_REQUIRED_Development.Module TRUE)
847 set (${_PYTHON_PREFIX}_FIND_REQUIRED_Development.Embed TRUE)
850 unset (_${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS)
851 unset (_${_PYTHON_PREFIX}_FIND_DEVELOPMENT_MODULE_ARTIFACTS)
852 unset (_${_PYTHON_PREFIX}_FIND_DEVELOPMENT_EMBED_ARTIFACTS)
853 if (
"Development.Module" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
854 if (CMAKE_SYSTEM_NAME MATCHES
"^(Windows.*|CYGWIN|MSYS)$")
855 list (APPEND _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_MODULE_ARTIFACTS
"LIBRARY")
857 list (APPEND _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_MODULE_ARTIFACTS
"INCLUDE_DIR")
859 if (
"Development.Embed" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
860 list (APPEND _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_EMBED_ARTIFACTS
"LIBRARY" "INCLUDE_DIR")
862 set (_${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS ${_${_PYTHON_PREFIX}_FIND_DEVELOPMENT_MODULE_ARTIFACTS} ${_${_PYTHON_PREFIX}_FIND_DEVELOPMENT_EMBED_ARTIFACTS})
863 if (_${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS) # XXX(cmake-3.14)
864 list (REMOVE_DUPLICATES _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS)
867 unset (_${_PYTHON_PREFIX}_FIND_VERSIONS)
869 # Set versions to search
871 set (_${_PYTHON_PREFIX}_FIND_VERSIONS ${_${_PYTHON_PREFIX}_VERSIONS})
873 if (${_PYTHON_PREFIX}_FIND_VERSION_COUNT GREATER
"1")
874 if (${_PYTHON_PREFIX}_FIND_VERSION_EXACT)
875 set (_${_PYTHON_PREFIX}_FIND_VERSIONS ${${_PYTHON_PREFIX}_FIND_VERSION_MAJOR}.${${_PYTHON_PREFIX}_FIND_VERSION_MINOR})
877 unset (_${_PYTHON_PREFIX}_FIND_VERSIONS)
878 # add all compatible versions
879 foreach (_${_PYTHON_PREFIX}_VERSION IN LISTS _${_PYTHON_PREFIX}_VERSIONS)
880 if (_${_PYTHON_PREFIX}_VERSION VERSION_GREATER_EQUAL ${_PYTHON_PREFIX}_FIND_VERSION)
881 list (APPEND _${_PYTHON_PREFIX}_FIND_VERSIONS ${_${_PYTHON_PREFIX}_VERSION})
888 ## default: search any ABI 889 if (_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR VERSION_LESS
"3")
891 unset (_${_PYTHON_PREFIX}_FIND_ABI)
892 set (_${_PYTHON_PREFIX}_ABIFLAGS
"")
894 unset (_${_PYTHON_PREFIX}_FIND_ABI)
895 unset (_${_PYTHON_PREFIX}_ABIFLAGS)
896 if (DEFINED ${_PYTHON_PREFIX}_FIND_ABI)
898 string (TOUPPER
"${${_PYTHON_PREFIX}_FIND_ABI}" _${_PYTHON_PREFIX}_FIND_ABI)
899 list (TRANSFORM _${_PYTHON_PREFIX}_FIND_ABI REPLACE
"^(TRUE|Y(ES)?|1)$" "ON")
900 list (TRANSFORM _${_PYTHON_PREFIX}_FIND_ABI REPLACE
"^(FALSE|N(O)?|0)$" "OFF")
901 if (NOT _${_PYTHON_PREFIX}_FIND_ABI MATCHES
"^(ON|OFF|ANY);(ON|OFF|ANY);(ON|OFF|ANY)$")
902 message (AUTHOR_WARNING
"Find${_PYTHON_PREFIX}: ${${_PYTHON_PREFIX}_FIND_ABI}: invalid value for '${_PYTHON_PREFIX}_FIND_ABI'. Ignore it")
903 unset (_${_PYTHON_PREFIX}_FIND_ABI)
905 _python_get_abiflags (_${_PYTHON_PREFIX}_ABIFLAGS)
908 unset (${_PYTHON_PREFIX}_SOABI)
910 # Define lookup strategy
911 if (_${_PYTHON_PREFIX}_LOOKUP_POLICY STREQUAL
"NEW")
912 set (_${_PYTHON_PREFIX}_FIND_STRATEGY
"LOCATION")
914 set (_${_PYTHON_PREFIX}_FIND_STRATEGY
"VERSION")
916 if (DEFINED ${_PYTHON_PREFIX}_FIND_STRATEGY)
917 if (NOT ${_PYTHON_PREFIX}_FIND_STRATEGY MATCHES
"^(VERSION|LOCATION)$")
918 message (AUTHOR_WARNING
"Find${_PYTHON_PREFIX}: ${${_PYTHON_PREFIX}_FIND_STRATEGY}: invalid value for '${_PYTHON_PREFIX}_FIND_STRATEGY'. 'VERSION' or 'LOCATION' expected.")
919 set (_${_PYTHON_PREFIX}_FIND_STRATEGY
"VERSION")
921 set (_${_PYTHON_PREFIX}_FIND_STRATEGY
"${${_PYTHON_PREFIX}_FIND_STRATEGY}")
925 # Python and Anaconda distributions: define which architectures can be used 926 if (CMAKE_SIZEOF_VOID_P)
927 # In this case, search only for 64bit or 32bit 928 math (EXPR _${_PYTHON_PREFIX}_ARCH
"${CMAKE_SIZEOF_VOID_P} * 8")
929 set (_${_PYTHON_PREFIX}_ARCH2 ${_${_PYTHON_PREFIX}_ARCH})
931 # architecture unknown, search for both 64bit and 32bit 932 set (_${_PYTHON_PREFIX}_ARCH 64)
933 set (_${_PYTHON_PREFIX}_ARCH2 32)
937 if (CMAKE_SIZEOF_VOID_P)
938 # In this case, search only for 64bit or 32bit 939 math (EXPR _${_PYTHON_PREFIX}_ARCH
"${CMAKE_SIZEOF_VOID_P} * 8")
940 set (_${_PYTHON_PREFIX}_IRON_PYTHON_NAMES ipy${_${_PYTHON_PREFIX}_ARCH} ipy)
942 # architecture unknown, search for natural interpreter 943 set (_${_PYTHON_PREFIX}_IRON_PYTHON_NAMES ipy)
945 set (_${_PYTHON_PREFIX}_IRON_PYTHON_PATH_SUFFIXES net45 net40)
947 # Apple frameworks handling
948 _python_find_frameworks ()
950 set (_${_PYTHON_PREFIX}_FIND_FRAMEWORK
"FIRST")
952 if (DEFINED ${_PYTHON_PREFIX}_FIND_FRAMEWORK)
953 if (NOT ${_PYTHON_PREFIX}_FIND_FRAMEWORK MATCHES
"^(FIRST|LAST|NEVER)$")
954 message (AUTHOR_WARNING
"Find${_PYTHON_PREFIX}: ${${_PYTHON_PREFIX}_FIND_FRAMEWORK}: invalid value for '${_PYTHON_PREFIX}_FIND_FRAMEWORK'. 'FIRST', 'LAST' or 'NEVER' expected. 'FIRST' will be used instead.")
956 set (_${_PYTHON_PREFIX}_FIND_FRAMEWORK ${${_PYTHON_PREFIX}_FIND_FRAMEWORK})
958 elseif (DEFINED CMAKE_FIND_FRAMEWORK)
959 if (CMAKE_FIND_FRAMEWORK STREQUAL
"ONLY")
960 message (AUTHOR_WARNING
"Find${_PYTHON_PREFIX}: CMAKE_FIND_FRAMEWORK: 'ONLY' value is not supported. 'FIRST' will be used instead.")
961 elseif (NOT CMAKE_FIND_FRAMEWORK MATCHES
"^(FIRST|LAST|NEVER)$")
962 message (AUTHOR_WARNING
"Find${_PYTHON_PREFIX}: ${CMAKE_FIND_FRAMEWORK}: invalid value for 'CMAKE_FIND_FRAMEWORK'. 'FIRST', 'LAST' or 'NEVER' expected. 'FIRST' will be used instead.")
964 set (_${_PYTHON_PREFIX}_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK})
968 # Save CMAKE_FIND_APPBUNDLE 969 if (DEFINED CMAKE_FIND_APPBUNDLE)
970 set (_${_PYTHON_PREFIX}_CMAKE_FIND_APPBUNDLE ${CMAKE_FIND_APPBUNDLE})
972 unset (_${_PYTHON_PREFIX}_CMAKE_FIND_APPBUNDLE)
974 # To avoid app bundle lookup 975 set (CMAKE_FIND_APPBUNDLE
"NEVER")
977 # Save CMAKE_FIND_FRAMEWORK
978 if (DEFINED CMAKE_FIND_FRAMEWORK)
979 set (_${_PYTHON_PREFIX}_CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK})
981 unset (_${_PYTHON_PREFIX}_CMAKE_FIND_FRAMEWORK)
983 # To avoid framework lookup 984 set (CMAKE_FIND_FRAMEWORK
"NEVER")
986 # Windows Registry handling
987 if (DEFINED ${_PYTHON_PREFIX}_FIND_REGISTRY)
988 if (NOT ${_PYTHON_PREFIX}_FIND_REGISTRY MATCHES
"^(FIRST|LAST|NEVER)$")
989 message (AUTHOR_WARNING
"Find${_PYTHON_PREFIX}: ${${_PYTHON_PREFIX}_FIND_REGISTRY}: invalid value for '${_PYTHON_PREFIX}_FIND_REGISTRY'. 'FIRST', 'LAST' or 'NEVER' expected. 'FIRST' will be used instead.")
990 set (_${_PYTHON_PREFIX}_FIND_REGISTRY
"FIRST")
992 set (_${_PYTHON_PREFIX}_FIND_REGISTRY ${${_PYTHON_PREFIX}_FIND_REGISTRY})
995 set (_${_PYTHON_PREFIX}_FIND_REGISTRY
"FIRST")
998 # virtual environments recognition 999 if (DEFINED ENV{VIRTUAL_ENV} OR DEFINED ENV{CONDA_PREFIX})
1000 if (DEFINED ${_PYTHON_PREFIX}_FIND_VIRTUALENV)
1001 if (NOT ${_PYTHON_PREFIX}_FIND_VIRTUALENV MATCHES
"^(FIRST|ONLY|STANDARD)$")
1002 message (AUTHOR_WARNING
"Find${_PYTHON_PREFIX}: ${${_PYTHON_PREFIX}_FIND_VIRTUALENV}: invalid value for '${_PYTHON_PREFIX}_FIND_VIRTUALENV'. 'FIRST', 'ONLY' or 'STANDARD' expected. 'FIRST' will be used instead.")
1003 set (_${_PYTHON_PREFIX}_FIND_VIRTUALENV
"FIRST")
1005 set (_${_PYTHON_PREFIX}_FIND_VIRTUALENV ${${_PYTHON_PREFIX}_FIND_VIRTUALENV})
1008 set (_${_PYTHON_PREFIX}_FIND_VIRTUALENV FIRST)
1011 set (_${_PYTHON_PREFIX}_FIND_VIRTUALENV STANDARD)
1015 # Compute search signature 1016 # This signature will be used to check validity of cached variables on new search 1017 set (_${_PYTHON_PREFIX}_SIGNATURE
"${${_PYTHON_PREFIX}_ROOT_DIR}:${_${_PYTHON_PREFIX}_FIND_STRATEGY}:${${_PYTHON_PREFIX}_FIND_VIRTUALENV}")
1019 string (APPEND _${_PYTHON_PREFIX}_SIGNATURE
":${${_PYTHON_PREFIX}_USE_STATIC_LIBS}:")
1021 if (CMAKE_HOST_APPLE)
1022 string (APPEND _${_PYTHON_PREFIX}_SIGNATURE
":${_${_PYTHON_PREFIX}_FIND_FRAMEWORK}")
1024 if (CMAKE_HOST_WIN32)
1025 string (APPEND _${_PYTHON_PREFIX}_SIGNATURE
":${_${_PYTHON_PREFIX}_FIND_REGISTRY}")
1029 if ("Development.${module}
" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS) 1030 string (TOUPPER "${module}
" id) 1031 set (signature "${_${_PYTHON_PREFIX}_SIGNATURE}:
") 1032 if ("LIBRARY
" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_${id}_ARTIFACTS) 1033 list (APPEND signature "${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}:
") 1035 if ("INCLUDE_DIR
" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_${id}_ARTIFACTS) 1036 list (APPEND signature "${_${_PYTHON_PREFIX}_INCLUDE_DIR}:
") 1038 string (MD5 signature "${signature}
") 1039 if (signature STREQUAL _${_PYTHON_PREFIX}_DEVELOPMENT_${id}_SIGNATURE) 1040 if (${_PYTHON_PREFIX}_FIND_VERSION_EXACT) 1043 if ("LIBRARY
" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_${id}_ARTIFACTS) 1044 _python_validate_library (${${_PYTHON_PREFIX}_FIND_VERSION} ${exact} CHECK_EXISTS) 1046 if ("INCLUDE_DIR
" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_${id}_ARTIFACTS) 1047 _python_validate_include_dir (${${_PYTHON_PREFIX}_FIND_VERSION} ${exact} CHECK_EXISTS) 1050 if ("LIBRARY
" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_${id}_ARTIFACTS) 1051 unset (_${_PYTHON_PREFIX}_LIBRARY_RELEASE CACHE) 1052 unset (_${_PYTHON_PREFIX}_LIBRARY_DEBUG CACHE) 1054 if ("INCLUDE_DIR
" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_${id}_ARTIFACTS) 1055 unset (_${_PYTHON_PREFIX}_INCLUDE_DIR CACHE) 1058 if (("LIBRARY
" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_${id}_ARTIFACTS 1059 AND NOT _${_PYTHON_PREFIX}_LIBRARY_RELEASE) 1060 OR ("INCLUDE_DIR
" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_${id}_ARTIFACTS 1061 AND NOT _${_PYTHON_PREFIX}_INCLUDE_DIR)) 1062 unset (_${_PYTHON_PREFIX}_CONFIG CACHE) 1063 unset (_${_PYTHON_PREFIX}_DEVELOPMENT_${id}_SIGNATURE CACHE) 1068 function (_PYTHON_COMPUTE_DEVELOPMENT_SIGNATURE module) 1069 string (TOUPPER "${module}
" id) 1070 if (${_PYTHON_PREFIX}_Development.${module}_FOUND) 1071 set (signature "${_${_PYTHON_PREFIX}_SIGNATURE}:
") 1072 if ("LIBRARY
" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_${id}_ARTIFACTS) 1073 list (APPEND signature "${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}:
") 1075 if ("INCLUDE_DIR
" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_${id}_ARTIFACTS) 1076 list (APPEND signature "${_${_PYTHON_PREFIX}_INCLUDE_DIR}:
") 1078 string (MD5 signature "${signature}
") 1079 set (_${_PYTHON_PREFIX}_DEVELOPMENT_${id}_SIGNATURE "${signature}
" CACHE INTERNAL "") 1081 unset (_${_PYTHON_PREFIX}_DEVELOPMENT_${id}_SIGNATURE CACHE) 1086 unset (_${_PYTHON_PREFIX}_REQUIRED_VARS) 1087 unset (_${_PYTHON_PREFIX}_CACHED_VARS) 1088 unset (_${_PYTHON_PREFIX}_Interpreter_REASON_FAILURE) 1089 unset (_${_PYTHON_PREFIX}_Compiler_REASON_FAILURE) 1090 unset (_${_PYTHON_PREFIX}_Development_REASON_FAILURE) 1091 unset (_${_PYTHON_PREFIX}_NumPy_REASON_FAILURE) 1094 # first step, search for the interpreter 1095 if ("Interpreter
" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS) 1096 list (APPEND _${_PYTHON_PREFIX}_CACHED_VARS _${_PYTHON_PREFIX}_EXECUTABLE) 1097 if (${_PYTHON_PREFIX}_FIND_REQUIRED_Interpreter) 1098 list (APPEND _${_PYTHON_PREFIX}_REQUIRED_VARS ${_PYTHON_PREFIX}_EXECUTABLE) 1101 if (DEFINED ${_PYTHON_PREFIX}_EXECUTABLE 1102 AND IS_ABSOLUTE "${${_PYTHON_PREFIX}_EXECUTABLE}
") 1103 if (NOT ${_PYTHON_PREFIX}_EXECUTABLE STREQUAL _${_PYTHON_PREFIX}_EXECUTABLE) 1104 # invalidate cache properties 1105 unset (_${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES CACHE) 1107 set (_${_PYTHON_PREFIX}_EXECUTABLE "${${_PYTHON_PREFIX}_EXECUTABLE}
" CACHE INTERNAL "") 1108 elseif (DEFINED _${_PYTHON_PREFIX}_EXECUTABLE) 1109 # compute interpreter signature and check validity of definition 1110 string (MD5 __${_PYTHON_PREFIX}_INTERPRETER_SIGNATURE "${_${_PYTHON_PREFIX}_SIGNATURE}:${_${_PYTHON_PREFIX}_EXECUTABLE}
") 1111 if (__${_PYTHON_PREFIX}_INTERPRETER_SIGNATURE STREQUAL _${_PYTHON_PREFIX}_INTERPRETER_SIGNATURE) 1112 # check version validity 1113 if (${_PYTHON_PREFIX}_FIND_VERSION_EXACT) 1114 _python_validate_interpreter (${${_PYTHON_PREFIX}_FIND_VERSION} EXACT CHECK_EXISTS) 1116 _python_validate_interpreter (${${_PYTHON_PREFIX}_FIND_VERSION} CHECK_EXISTS) 1119 unset (_${_PYTHON_PREFIX}_EXECUTABLE CACHE) 1121 if (NOT _${_PYTHON_PREFIX}_EXECUTABLE) 1122 unset (_${_PYTHON_PREFIX}_INTERPRETER_SIGNATURE CACHE) 1123 unset (_${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES CACHE) 1127 if (NOT _${_PYTHON_PREFIX}_EXECUTABLE) 1128 set (_${_PYTHON_PREFIX}_HINTS "${${_PYTHON_PREFIX}_ROOT_DIR}
" ENV ${_PYTHON_PREFIX}_ROOT_DIR) 1130 if (_${_PYTHON_PREFIX}_FIND_STRATEGY STREQUAL "LOCATION
") 1131 unset (_${_PYTHON_PREFIX}_NAMES) 1132 unset (_${_PYTHON_PREFIX}_FRAMEWORK_PATHS) 1133 unset (_${_PYTHON_PREFIX}_REGISTRY_PATHS) 1135 foreach (_${_PYTHON_PREFIX}_VERSION IN LISTS _${_PYTHON_PREFIX}_FIND_VERSIONS) 1136 # build all executable names 1137 _python_get_names (_${_PYTHON_PREFIX}_VERSION_NAMES VERSION ${_${_PYTHON_PREFIX}_VERSION} POSIX EXECUTABLE) 1138 list (APPEND _${_PYTHON_PREFIX}_NAMES ${_${_PYTHON_PREFIX}_VERSION_NAMES}) 1141 _python_get_frameworks (_${_PYTHON_PREFIX}_VERSION_PATHS ${_${_PYTHON_PREFIX}_VERSION}) 1142 list (APPEND _${_PYTHON_PREFIX}_FRAMEWORK_PATHS ${_${_PYTHON_PREFIX}_VERSION_PATHS}) 1145 _python_get_registries (_${_PYTHON_PREFIX}_VERSION_PATHS ${_${_PYTHON_PREFIX}_VERSION}) 1146 list (APPEND _${_PYTHON_PREFIX}_REGISTRY_PATHS ${_${_PYTHON_PREFIX}_VERSION_PATHS} 1147 [HKEY_LOCAL_MACHINE\\SOFTWARE\\IronPython\\${_${_PYTHON_PREFIX}_VERSION}\\InstallPath]) 1149 list (APPEND _${_PYTHON_PREFIX}_NAMES python${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR} python) 1152 # Virtual environments handling 1153 if (_${_PYTHON_PREFIX}_FIND_VIRTUALENV MATCHES "^(FIRST|ONLY)$
") 1154 find_program (_${_PYTHON_PREFIX}_EXECUTABLE 1155 NAMES ${_${_PYTHON_PREFIX}_NAMES} 1157 HINTS ${_${_PYTHON_PREFIX}_HINTS} 1158 PATHS ENV VIRTUAL_ENV ENV CONDA_PREFIX 1159 PATH_SUFFIXES bin Scripts 1161 NO_CMAKE_ENVIRONMENT_PATH 1162 NO_SYSTEM_ENVIRONMENT_PATH 1163 NO_CMAKE_SYSTEM_PATH) 1165 _python_validate_interpreter (${${_PYTHON_PREFIX}_FIND_VERSION}) 1166 if (_${_PYTHON_PREFIX}_EXECUTABLE) 1169 if (_${_PYTHON_PREFIX}_FIND_VIRTUALENV STREQUAL "ONLY
") 1174 # Apple frameworks handling 1175 if (CMAKE_HOST_APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "FIRST
") 1176 find_program (_${_PYTHON_PREFIX}_EXECUTABLE 1177 NAMES ${_${_PYTHON_PREFIX}_NAMES} 1179 HINTS ${_${_PYTHON_PREFIX}_HINTS} 1180 PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS} 1183 NO_CMAKE_ENVIRONMENT_PATH 1184 NO_SYSTEM_ENVIRONMENT_PATH 1185 NO_CMAKE_SYSTEM_PATH) 1186 _python_validate_interpreter (${${_PYTHON_PREFIX}_FIND_VERSION}) 1187 if (_${_PYTHON_PREFIX}_EXECUTABLE) 1192 if (CMAKE_HOST_WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "FIRST
") 1193 find_program (_${_PYTHON_PREFIX}_EXECUTABLE 1194 NAMES ${_${_PYTHON_PREFIX}_NAMES} 1195 ${_${_PYTHON_PREFIX}_IRON_PYTHON_NAMES} 1197 HINTS ${_${_PYTHON_PREFIX}_HINTS} 1198 PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS} 1199 PATH_SUFFIXES bin ${_${_PYTHON_PREFIX}_IRON_PYTHON_PATH_SUFFIXES} 1200 NO_SYSTEM_ENVIRONMENT_PATH 1201 NO_CMAKE_SYSTEM_PATH) 1202 _python_validate_interpreter (${${_PYTHON_PREFIX}_FIND_VERSION}) 1203 if (_${_PYTHON_PREFIX}_EXECUTABLE) 1209 find_program (_${_PYTHON_PREFIX}_EXECUTABLE 1210 NAMES ${_${_PYTHON_PREFIX}_NAMES} 1211 ${_${_PYTHON_PREFIX}_IRON_PYTHON_NAMES} 1213 HINTS ${_${_PYTHON_PREFIX}_HINTS} 1214 PATH_SUFFIXES bin ${_${_PYTHON_PREFIX}_IRON_PYTHON_PATH_SUFFIXES} 1215 NO_SYSTEM_ENVIRONMENT_PATH 1216 NO_CMAKE_SYSTEM_PATH) 1217 _python_validate_interpreter (${${_PYTHON_PREFIX}_FIND_VERSION}) 1218 if (_${_PYTHON_PREFIX}_EXECUTABLE) 1221 # try using standard paths 1222 find_program (_${_PYTHON_PREFIX}_EXECUTABLE 1223 NAMES ${_${_PYTHON_PREFIX}_NAMES} 1224 ${_${_PYTHON_PREFIX}_IRON_PYTHON_NAMES} 1226 PATH_SUFFIXES bin ${_${_PYTHON_PREFIX}_IRON_PYTHON_PATH_SUFFIXES}) 1227 _python_validate_interpreter (${${_PYTHON_PREFIX}_FIND_VERSION}) 1228 if (_${_PYTHON_PREFIX}_EXECUTABLE) 1232 # Apple frameworks handling 1233 if (CMAKE_HOST_APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "LAST
") 1234 find_program (_${_PYTHON_PREFIX}_EXECUTABLE 1235 NAMES ${_${_PYTHON_PREFIX}_NAMES} 1237 PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS} 1240 _python_validate_interpreter (${${_PYTHON_PREFIX}_FIND_VERSION}) 1241 if (_${_PYTHON_PREFIX}_EXECUTABLE) 1246 if (CMAKE_HOST_WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "LAST
") 1247 find_program (_${_PYTHON_PREFIX}_EXECUTABLE 1248 NAMES ${_${_PYTHON_PREFIX}_NAMES} 1249 ${_${_PYTHON_PREFIX}_IRON_PYTHON_NAMES} 1251 PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS} 1252 PATH_SUFFIXES bin ${_${_PYTHON_PREFIX}_IRON_PYTHON_PATH_SUFFIXES} 1254 _python_validate_interpreter (${${_PYTHON_PREFIX}_FIND_VERSION}) 1255 if (_${_PYTHON_PREFIX}_EXECUTABLE) 1263 # look-up for various versions and locations 1264 foreach (_${_PYTHON_PREFIX}_VERSION IN LISTS _${_PYTHON_PREFIX}_FIND_VERSIONS) 1265 _python_get_names (_${_PYTHON_PREFIX}_NAMES VERSION ${_${_PYTHON_PREFIX}_VERSION} POSIX EXECUTABLE) 1266 list (APPEND _${_PYTHON_PREFIX}_NAMES python${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR} 1269 _python_get_frameworks (_${_PYTHON_PREFIX}_FRAMEWORK_PATHS ${_${_PYTHON_PREFIX}_VERSION}) 1270 _python_get_registries (_${_PYTHON_PREFIX}_REGISTRY_PATHS ${_${_PYTHON_PREFIX}_VERSION}) 1272 # Virtual environments handling 1273 if (_${_PYTHON_PREFIX}_FIND_VIRTUALENV MATCHES "^(FIRST|ONLY)$
") 1274 find_program (_${_PYTHON_PREFIX}_EXECUTABLE 1275 NAMES ${_${_PYTHON_PREFIX}_NAMES} 1277 HINTS ${_${_PYTHON_PREFIX}_HINTS} 1278 PATHS ENV VIRTUAL_ENV ENV CONDA_PREFIX 1279 PATH_SUFFIXES bin Scripts 1281 NO_CMAKE_ENVIRONMENT_PATH 1282 NO_SYSTEM_ENVIRONMENT_PATH 1283 NO_CMAKE_SYSTEM_PATH) 1284 _python_validate_interpreter (${_${_PYTHON_PREFIX}_VERSION} EXACT) 1285 if (_${_PYTHON_PREFIX}_EXECUTABLE) 1288 if (_${_PYTHON_PREFIX}_FIND_VIRTUALENV STREQUAL "ONLY
") 1293 # Apple frameworks handling 1294 if (CMAKE_HOST_APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "FIRST
") 1295 find_program (_${_PYTHON_PREFIX}_EXECUTABLE 1296 NAMES ${_${_PYTHON_PREFIX}_NAMES} 1298 HINTS ${_${_PYTHON_PREFIX}_HINTS} 1299 PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS} 1302 NO_CMAKE_ENVIRONMENT_PATH 1303 NO_SYSTEM_ENVIRONMENT_PATH 1304 NO_CMAKE_SYSTEM_PATH) 1308 if (CMAKE_HOST_WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "FIRST
") 1309 find_program (_${_PYTHON_PREFIX}_EXECUTABLE 1310 NAMES ${_${_PYTHON_PREFIX}_NAMES} 1311 ${_${_PYTHON_PREFIX}_IRON_PYTHON_NAMES} 1313 HINTS ${_${_PYTHON_PREFIX}_HINTS} 1314 PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS} 1315 [HKEY_LOCAL_MACHINE\\SOFTWARE\\IronPython\\${_${_PYTHON_PREFIX}_VERSION}\\InstallPath] 1316 PATH_SUFFIXES bin ${_${_PYTHON_PREFIX}_IRON_PYTHON_PATH_SUFFIXES} 1317 NO_SYSTEM_ENVIRONMENT_PATH 1318 NO_CMAKE_SYSTEM_PATH) 1321 _python_validate_interpreter (${_${_PYTHON_PREFIX}_VERSION} EXACT) 1322 if (_${_PYTHON_PREFIX}_EXECUTABLE) 1327 find_program (_${_PYTHON_PREFIX}_EXECUTABLE 1328 NAMES ${_${_PYTHON_PREFIX}_NAMES} 1329 ${_${_PYTHON_PREFIX}_IRON_PYTHON_NAMES} 1331 HINTS ${_${_PYTHON_PREFIX}_HINTS} 1332 PATH_SUFFIXES bin ${_${_PYTHON_PREFIX}_IRON_PYTHON_PATH_SUFFIXES} 1333 NO_SYSTEM_ENVIRONMENT_PATH 1334 NO_CMAKE_SYSTEM_PATH) 1335 _python_validate_interpreter (${_${_PYTHON_PREFIX}_VERSION} EXACT) 1336 if (_${_PYTHON_PREFIX}_EXECUTABLE) 1339 # try using standard paths. 1340 # NAMES_PER_DIR is not defined on purpose to have a chance to find 1342 # For example, typical systems have 'python' for version 2.* and 'python3' 1343 # for version 3.*. So looking for names per dir will find, potentially, 1344 # systematically 'python' (i.e. version 2) even if version 3 is searched. 1345 if (CMAKE_HOST_WIN32) 1346 find_program (_${_PYTHON_PREFIX}_EXECUTABLE 1347 NAMES ${_${_PYTHON_PREFIX}_NAMES} 1349 ${_${_PYTHON_PREFIX}_IRON_PYTHON_NAMES}) 1351 find_program (_${_PYTHON_PREFIX}_EXECUTABLE 1352 NAMES ${_${_PYTHON_PREFIX}_NAMES}) 1354 _python_validate_interpreter (${_${_PYTHON_PREFIX}_VERSION} EXACT) 1355 if (_${_PYTHON_PREFIX}_EXECUTABLE) 1359 # Apple frameworks handling 1360 if (CMAKE_HOST_APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "LAST
") 1361 find_program (_${_PYTHON_PREFIX}_EXECUTABLE 1362 NAMES ${_${_PYTHON_PREFIX}_NAMES} 1364 PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS} 1370 if (CMAKE_HOST_WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "LAST
") 1371 find_program (_${_PYTHON_PREFIX}_EXECUTABLE 1372 NAMES ${_${_PYTHON_PREFIX}_NAMES} 1373 ${_${_PYTHON_PREFIX}_IRON_PYTHON_NAMES} 1375 PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS} 1376 [HKEY_LOCAL_MACHINE\\SOFTWARE\\IronPython\\${_${_PYTHON_PREFIX}_VERSION}\\InstallPath] 1377 PATH_SUFFIXES bin ${_${_PYTHON_PREFIX}_IRON_PYTHON_PATH_SUFFIXES} 1381 _python_validate_interpreter (${_${_PYTHON_PREFIX}_VERSION} EXACT) 1382 if (_${_PYTHON_PREFIX}_EXECUTABLE) 1387 if (NOT _${_PYTHON_PREFIX}_EXECUTABLE AND 1388 NOT _${_PYTHON_PREFIX}_FIND_VIRTUALENV STREQUAL "ONLY
") 1389 # No specific version found. Retry with generic names and standard paths. 1390 # NAMES_PER_DIR is not defined on purpose to have a chance to find 1392 # For example, typical systems have 'python' for version 2.* and 'python3' 1393 # for version 3.*. So looking for names per dir will find, potentially, 1394 # systematically 'python' (i.e. version 2) even if version 3 is searched. 1395 find_program (_${_PYTHON_PREFIX}_EXECUTABLE 1396 NAMES python${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR} 1398 ${_${_PYTHON_PREFIX}_IRON_PYTHON_NAMES}) 1399 _python_validate_interpreter () 1404 set (${_PYTHON_PREFIX}_EXECUTABLE "${_${_PYTHON_PREFIX}_EXECUTABLE}
") 1406 # retrieve exact version of executable found 1407 if (_${_PYTHON_PREFIX}_EXECUTABLE) 1408 execute_process (COMMAND "${_${_PYTHON_PREFIX}_EXECUTABLE}
" -c 1409 "import sys; sys.stdout.write(
'.'.join([str(x)
for x in sys.version_info[:3]]))
" 1410 RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT 1411 OUTPUT_VARIABLE ${_PYTHON_PREFIX}_VERSION 1413 OUTPUT_STRIP_TRAILING_WHITESPACE) 1414 if (NOT _${_PYTHON_PREFIX}_RESULT) 1415 set (_${_PYTHON_PREFIX}_EXECUTABLE_USABLE TRUE) 1417 # Interpreter is not usable 1418 set (_${_PYTHON_PREFIX}_EXECUTABLE_USABLE FALSE) 1419 unset (${_PYTHON_PREFIX}_VERSION) 1420 set (_${_PYTHON_PREFIX}_Interpreter_REASON_FAILURE "Cannot run the interpreter \
"${_${_PYTHON_PREFIX}_EXECUTABLE}\"")
1424 if (_${_PYTHON_PREFIX}_EXECUTABLE AND _${_PYTHON_PREFIX}_EXECUTABLE_USABLE)
1425 if (_${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES)
1426 set (${_PYTHON_PREFIX}_Interpreter_FOUND TRUE)
1428 list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 0 ${_PYTHON_PREFIX}_INTERPRETER_ID)
1430 list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 1 ${_PYTHON_PREFIX}_VERSION_MAJOR)
1431 list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 2 ${_PYTHON_PREFIX}_VERSION_MINOR)
1432 list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 3 ${_PYTHON_PREFIX}_VERSION_PATCH)
1434 list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 4 _${_PYTHON_PREFIX}_ARCH)
1435 set (_${_PYTHON_PREFIX}_ARCH2 ${_${_PYTHON_PREFIX}_ARCH})
1437 list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 5 _${_PYTHON_PREFIX}_ABIFLAGS)
1438 list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 6 ${_PYTHON_PREFIX}_SOABI)
1440 list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 7 ${_PYTHON_PREFIX}_STDLIB)
1441 list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 8 ${_PYTHON_PREFIX}_STDARCH)
1442 list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 9 ${_PYTHON_PREFIX}_SITELIB)
1443 list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 10 ${_PYTHON_PREFIX}_SITEARCH)
1445 string (REGEX MATCHALL
"[0-9]+" _${_PYTHON_PREFIX}_VERSIONS
"${${_PYTHON_PREFIX}_VERSION}")
1446 list (GET _${_PYTHON_PREFIX}_VERSIONS 0 ${_PYTHON_PREFIX}_VERSION_MAJOR)
1447 list (GET _${_PYTHON_PREFIX}_VERSIONS 1 ${_PYTHON_PREFIX}_VERSION_MINOR)
1448 list (GET _${_PYTHON_PREFIX}_VERSIONS 2 ${_PYTHON_PREFIX}_VERSION_PATCH)
1450 if (${_PYTHON_PREFIX}_VERSION_MAJOR VERSION_EQUAL _${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR)
1451 set (${_PYTHON_PREFIX}_Interpreter_FOUND TRUE)
1453 # Use interpreter
version and ABI
for future searches to ensure consistency
1454 set (_${_PYTHON_PREFIX}_FIND_VERSIONS ${${_PYTHON_PREFIX}_VERSION_MAJOR}.${${_PYTHON_PREFIX}_VERSION_MINOR})
1455 execute_process (COMMAND
"${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
"import sys; sys.stdout.write(sys.abiflags)" 1456 RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
1457 OUTPUT_VARIABLE _${_PYTHON_PREFIX}_ABIFLAGS
1459 OUTPUT_STRIP_TRAILING_WHITESPACE)
1460 if (_${_PYTHON_PREFIX}_RESULT)
1461 # assunme ABI is not supported
1462 set (_${_PYTHON_PREFIX}_ABIFLAGS
"")
1466 if (${_PYTHON_PREFIX}_Interpreter_FOUND)
1467 # compute and
save interpreter signature
1468 string (MD5 __${_PYTHON_PREFIX}_INTERPRETER_SIGNATURE
"${_${_PYTHON_PREFIX}_SIGNATURE}:${_${_PYTHON_PREFIX}_EXECUTABLE}")
1469 set (_${_PYTHON_PREFIX}_INTERPRETER_SIGNATURE
"${__${_PYTHON_PREFIX}_INTERPRETER_SIGNATURE}" CACHE INTERNAL
"")
1471 if (NOT CMAKE_SIZEOF_VOID_P)
1472 # determine interpreter architecture 1473 execute_process (COMMAND
"${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
"import sys; print(sys.maxsize > 2**32)" 1474 RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
1475 OUTPUT_VARIABLE ${_PYTHON_PREFIX}_IS64BIT
1476 ERROR_VARIABLE ${_PYTHON_PREFIX}_IS64BIT)
1477 if (NOT _${_PYTHON_PREFIX}_RESULT)
1478 if (${_PYTHON_PREFIX}_IS64BIT)
1479 set (_${_PYTHON_PREFIX}_ARCH 64)
1480 set (_${_PYTHON_PREFIX}_ARCH2 64)
1482 set (_${_PYTHON_PREFIX}_ARCH 32)
1483 set (_${_PYTHON_PREFIX}_ARCH2 32)
1488 # retrieve interpreter identity 1489 execute_process (COMMAND
"${_${_PYTHON_PREFIX}_EXECUTABLE}" -V
1490 RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
1491 OUTPUT_VARIABLE ${_PYTHON_PREFIX}_INTERPRETER_ID
1492 ERROR_VARIABLE ${_PYTHON_PREFIX}_INTERPRETER_ID)
1493 if (NOT _${_PYTHON_PREFIX}_RESULT)
1494 if (${_PYTHON_PREFIX}_INTERPRETER_ID MATCHES
"Anaconda")
1495 set (${_PYTHON_PREFIX}_INTERPRETER_ID
"Anaconda")
1496 elseif (${_PYTHON_PREFIX}_INTERPRETER_ID MATCHES
"Enthought")
1497 set (${_PYTHON_PREFIX}_INTERPRETER_ID
"Canopy")
1499 string (REGEX REPLACE
"^([^ ]+).*" "\\1" ${_PYTHON_PREFIX}_INTERPRETER_ID
"${${_PYTHON_PREFIX}_INTERPRETER_ID}")
1500 if (${_PYTHON_PREFIX}_INTERPRETER_ID STREQUAL
"Python")
1501 #
try to
get a more precise ID
1502 execute_process (COMMAND
"${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
"import sys; print(sys.copyright)" 1503 RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
1504 OUTPUT_VARIABLE ${_PYTHON_PREFIX}_COPYRIGHT
1506 if (${_PYTHON_PREFIX}_COPYRIGHT MATCHES
"ActiveState")
1507 set (${_PYTHON_PREFIX}_INTERPRETER_ID
"ActivePython")
1512 set (${_PYTHON_PREFIX}_INTERPRETER_ID Python)
1515 # retrieve various package installation directories 1516 execute_process (COMMAND
"${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
"import sys\ntry:\n from distutils import sysconfig\n sys.stdout.write(';'.join([sysconfig.get_python_lib(plat_specific=False,standard_lib=True),sysconfig.get_python_lib(plat_specific=True,standard_lib=True),sysconfig.get_python_lib(plat_specific=False,standard_lib=False),sysconfig.get_python_lib(plat_specific=True,standard_lib=False)]))\nexcept Exception:\n import sysconfig\n sys.stdout.write(';'.join([sysconfig.get_path('stdlib'),sysconfig.get_path('platstdlib'),sysconfig.get_path('purelib'),sysconfig.get_path('platlib')]))" 1517 RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
1518 OUTPUT_VARIABLE _${_PYTHON_PREFIX}_LIBPATHS
1520 if (NOT _${_PYTHON_PREFIX}_RESULT)
1521 list (GET _${_PYTHON_PREFIX}_LIBPATHS 0 ${_PYTHON_PREFIX}_STDLIB)
1522 list (GET _${_PYTHON_PREFIX}_LIBPATHS 1 ${_PYTHON_PREFIX}_STDARCH)
1523 list (GET _${_PYTHON_PREFIX}_LIBPATHS 2 ${_PYTHON_PREFIX}_SITELIB)
1524 list (GET _${_PYTHON_PREFIX}_LIBPATHS 3 ${_PYTHON_PREFIX}_SITEARCH)
1526 unset (${_PYTHON_PREFIX}_STDLIB)
1527 unset (${_PYTHON_PREFIX}_STDARCH)
1528 unset (${_PYTHON_PREFIX}_SITELIB)
1529 unset (${_PYTHON_PREFIX}_SITEARCH)
1532 if (_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR VERSION_GREATER_EQUAL
"3")
1533 _python_get_config_var (${_PYTHON_PREFIX}_SOABI SOABI)
1536 # store properties in the cache to speed-up future searches 1537 set (_${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES
1538 "${${_PYTHON_PREFIX}_INTERPRETER_ID};${${_PYTHON_PREFIX}_VERSION_MAJOR};${${_PYTHON_PREFIX}_VERSION_MINOR};${${_PYTHON_PREFIX}_VERSION_PATCH};${_${_PYTHON_PREFIX}_ARCH};${_${_PYTHON_PREFIX}_ABIFLAGS};${${_PYTHON_PREFIX}_SOABI};${${_PYTHON_PREFIX}_STDLIB};${${_PYTHON_PREFIX}_STDARCH};${${_PYTHON_PREFIX}_SITELIB};${${_PYTHON_PREFIX}_SITEARCH}" CACHE INTERNAL
"${_PYTHON_PREFIX} Properties")
1540 unset (_${_PYTHON_PREFIX}_INTERPRETER_SIGNATURE CACHE)
1541 unset (${_PYTHON_PREFIX}_INTERPRETER_ID)
1546 if (${_PYTHON_PREFIX}_ARTIFACTS_INTERACTIVE)
1547 set (${_PYTHON_PREFIX}_EXECUTABLE
"${_${_PYTHON_PREFIX}_EXECUTABLE}" CACHE FILEPATH
"${_PYTHON_PREFIX} Interpreter")
1550 _python_mark_as_internal (_${_PYTHON_PREFIX}_EXECUTABLE
1551 _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES
1552 _${_PYTHON_PREFIX}_INTERPRETER_SIGNATURE)
1556 # second step, search for compiler (IronPython) 1557 if (
"Compiler" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
1558 list (APPEND _${_PYTHON_PREFIX}_CACHED_VARS _${_PYTHON_PREFIX}_COMPILER)
1559 if (${_PYTHON_PREFIX}_FIND_REQUIRED_Compiler)
1560 list (APPEND _${_PYTHON_PREFIX}_REQUIRED_VARS ${_PYTHON_PREFIX}_COMPILER)
1563 if (DEFINED ${_PYTHON_PREFIX}_COMPILER
1564 AND IS_ABSOLUTE
"${${_PYTHON_PREFIX}_COMPILER}")
1565 set (_${_PYTHON_PREFIX}_COMPILER
"${${_PYTHON_PREFIX}_COMPILER}" CACHE INTERNAL
"")
1566 elseif (DEFINED _${_PYTHON_PREFIX}_COMPILER)
1567 # compute compiler signature and check validity of definition
1568 string (MD5 __${_PYTHON_PREFIX}_COMPILER_SIGNATURE
"${_${_PYTHON_PREFIX}_SIGNATURE}:${_${_PYTHON_PREFIX}_COMPILER}")
1569 if (__${_PYTHON_PREFIX}_COMPILER_SIGNATURE STREQUAL _${_PYTHON_PREFIX}_COMPILER_SIGNATURE)
1571 if (${_PYTHON_PREFIX}_FIND_VERSION_EXACT)
1572 _python_validate_compiler (${${_PYTHON_PREFIX}_FIND_VERSION} EXACT CHECK_EXISTS)
1574 _python_validate_compiler (${${_PYTHON_PREFIX}_FIND_VERSION} CHECK_EXISTS)
1577 unset (_${_PYTHON_PREFIX}_COMPILER CACHE)
1578 unset (_${_PYTHON_PREFIX}_COMPILER_SIGNATURE CACHE)
1582 if (NOT _${_PYTHON_PREFIX}_COMPILER)
1583 # IronPython specific artifacts
1584 # If IronPython interpreter is found, use its path
1585 unset (_${_PYTHON_PREFIX}_IRON_ROOT)
1586 if (${_PYTHON_PREFIX}_Interpreter_FOUND AND ${_PYTHON_PREFIX}_INTERPRETER_ID STREQUAL
"IronPython")
1587 get_filename_component (_${_PYTHON_PREFIX}_IRON_ROOT
"${${_PYTHON_PREFIX}_EXECUTABLE}" DIRECTORY)
1590 if (_${_PYTHON_PREFIX}_FIND_STRATEGY STREQUAL
"LOCATION")
1591 set (_${_PYTHON_PREFIX}_REGISTRY_PATHS)
1593 foreach (_${_PYTHON_PREFIX}_VERSION IN LISTS _${_PYTHON_PREFIX}_FIND_VERSIONS)
1595 list (APPEND _${_PYTHON_PREFIX}_REGISTRY_PATHS
1596 [HKEY_LOCAL_MACHINE\\SOFTWARE\\IronPython\\${_${_PYTHON_PREFIX}_VERSION}\\InstallPath])
1600 if (_${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL
"FIRST")
1601 find_program (_${_PYTHON_PREFIX}_COMPILER
1603 HINTS ${_${_PYTHON_PREFIX}_IRON_ROOT} ${_${_PYTHON_PREFIX}_HINTS}
1604 PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS}
1605 PATH_SUFFIXES ${_${_PYTHON_PREFIX}_IRON_PYTHON_PATH_SUFFIXES}
1606 NO_SYSTEM_ENVIRONMENT_PATH
1607 NO_CMAKE_SYSTEM_PATH)
1608 _python_validate_compiler (${${_PYTHON_PREFIX}_FIND_VERSION})
1609 if (_${_PYTHON_PREFIX}_COMPILER)
1614 find_program (_${_PYTHON_PREFIX}_COMPILER
1616 HINTS ${_${_PYTHON_PREFIX}_IRON_ROOT} ${_${_PYTHON_PREFIX}_HINTS}
1617 PATH_SUFFIXES ${_${_PYTHON_PREFIX}_IRON_PYTHON_PATH_SUFFIXES}
1618 NO_SYSTEM_ENVIRONMENT_PATH
1619 NO_CMAKE_SYSTEM_PATH)
1620 _python_validate_compiler (${${_PYTHON_PREFIX}_FIND_VERSION})
1621 if (_${_PYTHON_PREFIX}_COMPILER)
1625 if (_${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL
"LAST")
1626 find_program (_${_PYTHON_PREFIX}_COMPILER
1628 PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS}
1629 PATH_SUFFIXES ${_${_PYTHON_PREFIX}_IRON_PYTHON_PATH_SUFFIXES}
1636 # try using root dir and registry 1637 foreach (_${_PYTHON_PREFIX}_VERSION IN LISTS _${_PYTHON_PREFIX}_FIND_VERSIONS)
1638 if (_${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL
"FIRST")
1639 find_program (_${_PYTHON_PREFIX}_COMPILER
1641 HINTS ${_${_PYTHON_PREFIX}_IRON_ROOT} ${_${_PYTHON_PREFIX}_HINTS}
1642 PATHS [HKEY_LOCAL_MACHINE\\SOFTWARE\\IronPython\\${_${_PYTHON_PREFIX}_VERSION}\\InstallPath]
1643 PATH_SUFFIXES ${_${_PYTHON_PREFIX}_IRON_PYTHON_PATH_SUFFIXES}
1644 NO_SYSTEM_ENVIRONMENT_PATH
1645 NO_CMAKE_SYSTEM_PATH)
1646 _python_validate_compiler (${_${_PYTHON_PREFIX}_VERSION} EXACT)
1647 if (_${_PYTHON_PREFIX}_COMPILER)
1652 find_program (_${_PYTHON_PREFIX}_COMPILER
1654 HINTS ${_${_PYTHON_PREFIX}_IRON_ROOT} ${_${_PYTHON_PREFIX}_HINTS}
1655 PATH_SUFFIXES ${_${_PYTHON_PREFIX}_IRON_PYTHON_PATH_SUFFIXES}
1656 NO_SYSTEM_ENVIRONMENT_PATH
1657 NO_CMAKE_SYSTEM_PATH)
1658 _python_validate_compiler (${_${_PYTHON_PREFIX}_VERSION} EXACT)
1659 if (_${_PYTHON_PREFIX}_COMPILER)
1663 if (_${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL
"LAST")
1664 find_program (_${_PYTHON_PREFIX}_COMPILER
1666 PATHS [HKEY_LOCAL_MACHINE\\SOFTWARE\\IronPython\\${_${_PYTHON_PREFIX}_VERSION}\\InstallPath]
1667 PATH_SUFFIXES ${_${_PYTHON_PREFIX}_IRON_PYTHON_PATH_SUFFIXES}
1669 _python_validate_compiler (${_${_PYTHON_PREFIX}_VERSION} EXACT)
1670 if (_${_PYTHON_PREFIX}_COMPILER)
1676 # no specific version found, re-try in standard paths 1677 find_program (_${_PYTHON_PREFIX}_COMPILER
1679 HINTS ${_${_PYTHON_PREFIX}_IRON_ROOT} ${_${_PYTHON_PREFIX}_HINTS}
1680 PATH_SUFFIXES ${_${_PYTHON_PREFIX}_IRON_PYTHON_PATH_SUFFIXES})
1684 set (${_PYTHON_PREFIX}_COMPILER
"${_${_PYTHON_PREFIX}_COMPILER}")
1686 if (_${_PYTHON_PREFIX}_COMPILER)
1687 # retrieve python environment
version from compiler
1688 set (_${_PYTHON_PREFIX}_VERSION_DIR
"${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/PythonCompilerVersion.dir")
1689 file (WRITE
"${_${_PYTHON_PREFIX}_VERSION_DIR}/version.py" "import sys; sys.stdout.write('.'.join([str(x) for x in sys.version_info[:3]]))\n")
1690 execute_process (COMMAND
"${_${_PYTHON_PREFIX}_COMPILER}" /
target:exe /embed
"${_${_PYTHON_PREFIX}_VERSION_DIR}/version.py" 1691 WORKING_DIRECTORY
"${_${_PYTHON_PREFIX}_VERSION_DIR}" 1694 execute_process (COMMAND
"${_${_PYTHON_PREFIX}_VERSION_DIR}/version" 1695 WORKING_DIRECTORY
"${_${_PYTHON_PREFIX}_VERSION_DIR}" 1696 RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
1697 OUTPUT_VARIABLE _${_PYTHON_PREFIX}_VERSION
1699 if (NOT _${_PYTHON_PREFIX}_RESULT)
1700 set (_${_PYTHON_PREFIX}_COMPILER_USABLE TRUE)
1701 string (REGEX MATCHALL
"[0-9]+" _${_PYTHON_PREFIX}_VERSIONS
"${_${_PYTHON_PREFIX}_VERSION}")
1702 list (GET _${_PYTHON_PREFIX}_VERSIONS 0 _${_PYTHON_PREFIX}_VERSION_MAJOR)
1703 list (GET _${_PYTHON_PREFIX}_VERSIONS 1 _${_PYTHON_PREFIX}_VERSION_MINOR)
1704 list (GET _${_PYTHON_PREFIX}_VERSIONS 2 _${_PYTHON_PREFIX}_VERSION_PATCH)
1706 if (NOT ${_PYTHON_PREFIX}_Interpreter_FOUND)
1707 #
set public version information
1708 set (${_PYTHON_PREFIX}_VERSION ${_${_PYTHON_PREFIX}_VERSION})
1709 set (${_PYTHON_PREFIX}_VERSION_MAJOR ${_${_PYTHON_PREFIX}_VERSION_MAJOR})
1710 set (${_PYTHON_PREFIX}_VERSION_MINOR ${_${_PYTHON_PREFIX}_VERSION_MINOR})
1711 set (${_PYTHON_PREFIX}_VERSION_PATCH ${_${_PYTHON_PREFIX}_VERSION_PATCH})
1714 # compiler not usable 1715 set (_${_PYTHON_PREFIX}_COMPILER_USABLE FALSE)
1716 set (_${_PYTHON_PREFIX}_Compiler_REASON_FAILURE
"Cannot run the compiler \"${_${_PYTHON_PREFIX}_COMPILER}\"")
1718 file (REMOVE_RECURSE
"${_${_PYTHON_PREFIX}_VERSION_DIR}")
1721 if (_${_PYTHON_PREFIX}_COMPILER AND _${_PYTHON_PREFIX}_COMPILER_USABLE)
1722 if (${_PYTHON_PREFIX}_Interpreter_FOUND)
1723 # Compiler must be compatible with interpreter
1724 if (
"${_${_PYTHON_PREFIX}_VERSION_MAJOR}.${_${_PYTHON_PREFIX}_VERSION_MINOR}" VERSION_EQUAL
"${${_PYTHON_PREFIX}_VERSION_MAJOR}.${${_PYTHON_PREFIX}_VERSION_MINOR}")
1725 set (${_PYTHON_PREFIX}_Compiler_FOUND TRUE)
1727 elseif (${_PYTHON_PREFIX}_VERSION_MAJOR VERSION_EQUAL _${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR)
1728 set (${_PYTHON_PREFIX}_Compiler_FOUND TRUE)
1729 # Use compiler
version for future searches to ensure consistency
1730 set (_${_PYTHON_PREFIX}_FIND_VERSIONS ${${_PYTHON_PREFIX}_VERSION_MAJOR}.${${_PYTHON_PREFIX}_VERSION_MINOR})
1734 if (${_PYTHON_PREFIX}_Compiler_FOUND)
1735 # compute and
save compiler signature
1736 string (MD5 __${_PYTHON_PREFIX}_COMPILER_SIGNATURE
"${_${_PYTHON_PREFIX}_SIGNATURE}:${_${_PYTHON_PREFIX}_COMPILER}")
1737 set (_${_PYTHON_PREFIX}_COMPILER_SIGNATURE
"${__${_PYTHON_PREFIX}_COMPILER_SIGNATURE}" CACHE INTERNAL
"")
1739 set (${_PYTHON_PREFIX}_COMPILER_ID IronPython)
1741 unset (_${_PYTHON_PREFIX}_COMPILER_SIGNATURE CACHE)
1742 unset (${_PYTHON_PREFIX}_COMPILER_ID)
1745 if (${_PYTHON_PREFIX}_ARTIFACTS_INTERACTIVE)
1746 set (${_PYTHON_PREFIX}_COMPILER
"${_${_PYTHON_PREFIX}_COMPILER}" CACHE FILEPATH
"${_PYTHON_PREFIX} Compiler")
1749 _python_mark_as_internal (_${_PYTHON_PREFIX}_COMPILER
1750 _${_PYTHON_PREFIX}_COMPILER_SIGNATURE)
1754 # third step, search for the development artifacts 1755 ## Development environment is not compatible with IronPython interpreter 1756 if ((
"Development.Module" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
1757 OR
"Development.Embed" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
1758 AND NOT ${_PYTHON_PREFIX}_INTERPRETER_ID STREQUAL
"IronPython")
1759 if (
"LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS)
1760 list (APPEND _${_PYTHON_PREFIX}_CACHED_VARS _${_PYTHON_PREFIX}_LIBRARY_RELEASE
1761 _${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE
1762 _${_PYTHON_PREFIX}_LIBRARY_DEBUG
1763 _${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG)
1765 if (
"INCLUDE_DIR" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS)
1766 list (APPEND _${_PYTHON_PREFIX}_CACHED_VARS _${_PYTHON_PREFIX}_INCLUDE_DIR)
1768 if (${_PYTHON_PREFIX}_FIND_REQUIRED_Development.Module)
1769 if (
"LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_MODULE_ARTIFACTS)
1770 list (APPEND _${_PYTHON_PREFIX}_REQUIRED_VARS ${_PYTHON_PREFIX}_LIBRARIES)
1772 if (
"INCLUDE_DIR" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_MODULE_ARTIFACTS)
1773 list (APPEND _${_PYTHON_PREFIX}_REQUIRED_VARS ${_PYTHON_PREFIX}_INCLUDE_DIRS)
1776 if (${_PYTHON_PREFIX}_FIND_REQUIRED_Development.Embed)
1777 if (
"LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_EMBED_ARTIFACTS)
1778 list (APPEND _${_PYTHON_PREFIX}_REQUIRED_VARS ${_PYTHON_PREFIX}_LIBRARIES)
1780 if (
"INCLUDE_DIR" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_EMBED_ARTIFACTS)
1781 list (APPEND _${_PYTHON_PREFIX}_REQUIRED_VARS ${_PYTHON_PREFIX}_INCLUDE_DIRS)
1784 if (_${_PYTHON_PREFIX}_REQUIRED_VARS) # XXX(cmake-3.14)
1785 list (REMOVE_DUPLICATES _${_PYTHON_PREFIX}_REQUIRED_VARS)
1788 _python_check_development_signature (Module)
1789 _python_check_development_signature (Embed)
1791 if (DEFINED ${_PYTHON_PREFIX}_LIBRARY
1792 AND IS_ABSOLUTE
"${${_PYTHON_PREFIX}_LIBRARY}")
1793 set (_${_PYTHON_PREFIX}_LIBRARY_RELEASE
"${${_PYTHON_PREFIX}_LIBRARY}" CACHE INTERNAL
"")
1794 unset (_${_PYTHON_PREFIX}_LIBRARY_DEBUG CACHE)
1795 unset (_${_PYTHON_PREFIX}_INCLUDE_DIR CACHE)
1797 if (DEFINED ${_PYTHON_PREFIX}_INCLUDE_DIR
1798 AND IS_ABSOLUTE
"${${_PYTHON_PREFIX}_INCLUDE_DIR}")
1799 set (_${_PYTHON_PREFIX}_INCLUDE_DIR
"${${_PYTHON_PREFIX}_INCLUDE_DIR}" CACHE INTERNAL
"")
1802 # Support preference of static libs by adjusting CMAKE_FIND_LIBRARY_SUFFIXES 1803 unset (_${_PYTHON_PREFIX}_CMAKE_FIND_LIBRARY_SUFFIXES)
1804 if (DEFINED ${_PYTHON_PREFIX}_USE_STATIC_LIBS AND NOT WIN32)
1805 set(_${_PYTHON_PREFIX}_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
1806 if(${_PYTHON_PREFIX}_USE_STATIC_LIBS)
1807 set (CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX})
1809 if (CMAKE_FIND_LIBRARY_SUFFIXES) # XXX(cmake-3.14)
1810 list (REMOVE_ITEM CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX})
1815 if (NOT _${_PYTHON_PREFIX}_LIBRARY_RELEASE OR NOT _${_PYTHON_PREFIX}_INCLUDE_DIR)
1816 #
if python interpreter is found, use it to look-up
for artifacts
1817 # to ensure consistency between interpreter and development environments.
1818 # If not,
try to locate a compatible config tool
1819 if (NOT ${_PYTHON_PREFIX}_Interpreter_FOUND OR CMAKE_CROSSCOMPILING)
1820 set (_${_PYTHON_PREFIX}_HINTS
"${${_PYTHON_PREFIX}_ROOT_DIR}" ENV ${_PYTHON_PREFIX}_ROOT_DIR)
1821 unset (_${_PYTHON_PREFIX}_VIRTUALENV_PATHS)
1822 if (_${_PYTHON_PREFIX}_FIND_VIRTUALENV MATCHES
"^(FIRST|ONLY)$")
1823 set (_${_PYTHON_PREFIX}_VIRTUALENV_PATHS ENV VIRTUAL_ENV ENV CONDA_PREFIX)
1825 unset (_${_PYTHON_PREFIX}_FRAMEWORK_PATHS)
1827 if (_${_PYTHON_PREFIX}_FIND_STRATEGY STREQUAL
"LOCATION")
1828 set (_${_PYTHON_PREFIX}_CONFIG_NAMES)
1830 foreach (_${_PYTHON_PREFIX}_VERSION IN LISTS _${_PYTHON_PREFIX}_FIND_VERSIONS)
1831 _python_get_names (_${_PYTHON_PREFIX}_VERSION_NAMES
VERSION ${_${_PYTHON_PREFIX}_VERSION} POSIX CONFIG)
1832 list (APPEND _${_PYTHON_PREFIX}_CONFIG_NAMES ${_${_PYTHON_PREFIX}_VERSION_NAMES})
1835 _python_get_frameworks (_${_PYTHON_PREFIX}_VERSION_PATHS ${_${_PYTHON_PREFIX}_VERSION})
1836 list (APPEND _${_PYTHON_PREFIX}_FRAMEWORK_PATHS ${_${_PYTHON_PREFIX}_VERSION_PATHS})
1839 # Apple frameworks handling 1840 if (CMAKE_HOST_APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL
"FIRST")
1841 find_program (_${_PYTHON_PREFIX}_CONFIG
1842 NAMES ${_${_PYTHON_PREFIX}_CONFIG_NAMES}
1844 HINTS ${_${_PYTHON_PREFIX}_HINTS}
1845 PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
1846 ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
1849 NO_CMAKE_ENVIRONMENT_PATH
1850 NO_SYSTEM_ENVIRONMENT_PATH
1851 NO_CMAKE_SYSTEM_PATH)
1854 find_program (_${_PYTHON_PREFIX}_CONFIG
1855 NAMES ${_${_PYTHON_PREFIX}_CONFIG_NAMES}
1857 HINTS ${_${_PYTHON_PREFIX}_HINTS}
1858 PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
1861 # Apple frameworks handling
1862 if (CMAKE_HOST_APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL
"LAST")
1863 find_program (_${_PYTHON_PREFIX}_CONFIG
1864 NAMES ${_${_PYTHON_PREFIX}_CONFIG_NAMES}
1866 PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
1871 if (_${_PYTHON_PREFIX}_CONFIG)
1872 execute_process (COMMAND
"${_${_PYTHON_PREFIX}_CONFIG}" --help
1873 RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
1874 OUTPUT_VARIABLE __${_PYTHON_PREFIX}_HELP
1876 OUTPUT_STRIP_TRAILING_WHITESPACE)
1877 if (_${_PYTHON_PREFIX}_RESULT)
1878 # assume config tool is not usable
1879 unset (_${_PYTHON_PREFIX}_CONFIG CACHE)
1883 if (_${_PYTHON_PREFIX}_CONFIG)
1884 execute_process (COMMAND
"${_${_PYTHON_PREFIX}_CONFIG}" --abiflags
1885 RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
1886 OUTPUT_VARIABLE __${_PYTHON_PREFIX}_ABIFLAGS
1888 OUTPUT_STRIP_TRAILING_WHITESPACE)
1889 if (_${_PYTHON_PREFIX}_RESULT)
1890 # assume ABI is not supported
1891 set (__${_PYTHON_PREFIX}_ABIFLAGS
"")
1893 if (DEFINED _${_PYTHON_PREFIX}_FIND_ABI AND NOT __${_PYTHON_PREFIX}_ABIFLAGS IN_LIST _${_PYTHON_PREFIX}_ABIFLAGS)
1895 unset (_${_PYTHON_PREFIX}_CONFIG CACHE)
1899 if (_${_PYTHON_PREFIX}_CONFIG AND DEFINED CMAKE_LIBRARY_ARCHITECTURE)
1900 # check that config tool match library architecture
1901 execute_process (COMMAND
"${_${_PYTHON_PREFIX}_CONFIG}" --configdir
1902 RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
1903 OUTPUT_VARIABLE _${_PYTHON_PREFIX}_CONFIGDIR
1905 OUTPUT_STRIP_TRAILING_WHITESPACE)
1906 if (_${_PYTHON_PREFIX}_RESULT)
1907 unset (_${_PYTHON_PREFIX}_CONFIG CACHE)
1909 string(FIND
"${_${_PYTHON_PREFIX}_CONFIGDIR}" "${CMAKE_LIBRARY_ARCHITECTURE}" _${_PYTHON_PREFIX}_RESULT)
1910 if (_${_PYTHON_PREFIX}_RESULT EQUAL -1)
1911 unset (_${_PYTHON_PREFIX}_CONFIG CACHE)
1916 foreach (_${_PYTHON_PREFIX}_VERSION IN LISTS _${_PYTHON_PREFIX}_FIND_VERSIONS)
1917 #
try to use pythonX.Y-config tool
1918 _python_get_names (_${_PYTHON_PREFIX}_CONFIG_NAMES
VERSION ${_${_PYTHON_PREFIX}_VERSION} POSIX CONFIG)
1921 _python_get_frameworks (_${_PYTHON_PREFIX}_FRAMEWORK_PATHS ${_${_PYTHON_PREFIX}_VERSION})
1923 # Apple frameworks handling
1924 if (CMAKE_HOST_APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL
"FIRST")
1925 find_program (_${_PYTHON_PREFIX}_CONFIG
1926 NAMES ${_${_PYTHON_PREFIX}_CONFIG_NAMES}
1928 HINTS ${_${_PYTHON_PREFIX}_HINTS}
1929 PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
1930 ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
1933 NO_CMAKE_ENVIRONMENT_PATH
1934 NO_SYSTEM_ENVIRONMENT_PATH
1935 NO_CMAKE_SYSTEM_PATH)
1938 find_program (_${_PYTHON_PREFIX}_CONFIG
1939 NAMES ${_${_PYTHON_PREFIX}_CONFIG_NAMES}
1941 HINTS ${_${_PYTHON_PREFIX}_HINTS}
1942 PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
1945 # Apple frameworks handling
1946 if (CMAKE_HOST_APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL
"LAST")
1947 find_program (_${_PYTHON_PREFIX}_CONFIG
1948 NAMES ${_${_PYTHON_PREFIX}_CONFIG_NAMES}
1950 PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
1955 unset (_${_PYTHON_PREFIX}_CONFIG_NAMES)
1957 if (_${_PYTHON_PREFIX}_CONFIG)
1958 execute_process (COMMAND
"${_${_PYTHON_PREFIX}_CONFIG}" --help
1959 RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
1960 OUTPUT_VARIABLE __${_PYTHON_PREFIX}_HELP
1962 OUTPUT_STRIP_TRAILING_WHITESPACE)
1963 if (_${_PYTHON_PREFIX}_RESULT)
1964 # assume config tool is not usable
1965 unset (_${_PYTHON_PREFIX}_CONFIG CACHE)
1969 if (NOT _${_PYTHON_PREFIX}_CONFIG)
1973 execute_process (COMMAND
"${_${_PYTHON_PREFIX}_CONFIG}" --abiflags
1974 RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
1975 OUTPUT_VARIABLE __${_PYTHON_PREFIX}_ABIFLAGS
1977 OUTPUT_STRIP_TRAILING_WHITESPACE)
1978 if (_${_PYTHON_PREFIX}_RESULT)
1979 # assume ABI is not supported
1980 set (__${_PYTHON_PREFIX}_ABIFLAGS
"")
1982 if (DEFINED _${_PYTHON_PREFIX}_FIND_ABI AND NOT __${_PYTHON_PREFIX}_ABIFLAGS IN_LIST _${_PYTHON_PREFIX}_ABIFLAGS)
1984 unset (_${_PYTHON_PREFIX}_CONFIG CACHE)
1988 if (_${_PYTHON_PREFIX}_CONFIG AND DEFINED CMAKE_LIBRARY_ARCHITECTURE)
1989 # check that config tool match library architecture
1990 execute_process (COMMAND
"${_${_PYTHON_PREFIX}_CONFIG}" --configdir
1991 RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
1992 OUTPUT_VARIABLE _${_PYTHON_PREFIX}_CONFIGDIR
1994 OUTPUT_STRIP_TRAILING_WHITESPACE)
1995 if (_${_PYTHON_PREFIX}_RESULT)
1996 unset (_${_PYTHON_PREFIX}_CONFIG CACHE)
1999 string (FIND
"${_${_PYTHON_PREFIX}_CONFIGDIR}" "${CMAKE_LIBRARY_ARCHITECTURE}" _${_PYTHON_PREFIX}_RESULT)
2000 if (_${_PYTHON_PREFIX}_RESULT EQUAL -1)
2001 unset (_${_PYTHON_PREFIX}_CONFIG CACHE)
2006 if (_${_PYTHON_PREFIX}_CONFIG)
2014 if (
"LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS)
2015 if (NOT _${_PYTHON_PREFIX}_LIBRARY_RELEASE)
2016 if ((${_PYTHON_PREFIX}_Interpreter_FOUND AND NOT CMAKE_CROSSCOMPILING) OR _${_PYTHON_PREFIX}_CONFIG)
2017 # retrieve root install directory
2018 _python_get_config_var (_${_PYTHON_PREFIX}_PREFIX PREFIX)
2020 # enforce current ABI
2021 _python_get_config_var (_${_PYTHON_PREFIX}_ABIFLAGS ABIFLAGS)
2023 set (_${_PYTHON_PREFIX}_HINTS
"${_${_PYTHON_PREFIX}_PREFIX}")
2026 ## compute some paths and artifact names
2027 if (_${_PYTHON_PREFIX}_CONFIG)
2028 string (REGEX REPLACE
"^.+python([0-9.]+)[a-z]*-config" "\\1" _${_PYTHON_PREFIX}_VERSION
"${_${_PYTHON_PREFIX}_CONFIG}")
2030 set (_${_PYTHON_PREFIX}_VERSION
"${${_PYTHON_PREFIX}_VERSION_MAJOR}.${${_PYTHON_PREFIX}_VERSION_MINOR}")
2032 _python_get_path_suffixes (_${_PYTHON_PREFIX}_PATH_SUFFIXES
VERSION ${_${_PYTHON_PREFIX}_VERSION} LIBRARY)
2033 _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES
VERSION ${_${_PYTHON_PREFIX}_VERSION} WIN32 POSIX LIBRARY)
2035 _python_get_config_var (_${_PYTHON_PREFIX}_CONFIGDIR CONFIGDIR)
2036 list (APPEND _${_PYTHON_PREFIX}_HINTS
"${_${_PYTHON_PREFIX}_CONFIGDIR}")
2038 list (APPEND _${_PYTHON_PREFIX}_HINTS
"${${_PYTHON_PREFIX}_ROOT_DIR}" ENV ${_PYTHON_PREFIX}_ROOT_DIR)
2040 find_library (_${_PYTHON_PREFIX}_LIBRARY_RELEASE
2041 NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES}
2043 HINTS ${_${_PYTHON_PREFIX}_HINTS}
2044 PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
2045 NO_SYSTEM_ENVIRONMENT_PATH
2046 NO_CMAKE_SYSTEM_PATH)
2049 # Rely on HINTS and standard paths if interpreter or config tool failed to locate artifacts 2050 if (NOT _${_PYTHON_PREFIX}_LIBRARY_RELEASE)
2051 set (_${_PYTHON_PREFIX}_HINTS
"${${_PYTHON_PREFIX}_ROOT_DIR}" ENV ${_PYTHON_PREFIX}_ROOT_DIR)
2053 unset (_${_PYTHON_PREFIX}_VIRTUALENV_PATHS)
2054 if (_${_PYTHON_PREFIX}_FIND_VIRTUALENV MATCHES
"^(FIRST|ONLY)$")
2055 set (_${_PYTHON_PREFIX}_VIRTUALENV_PATHS ENV VIRTUAL_ENV ENV CONDA_PREFIX)
2058 if (_${_PYTHON_PREFIX}_FIND_STRATEGY STREQUAL
"LOCATION")
2059 unset (_${_PYTHON_PREFIX}_LIB_NAMES)
2060 unset (_${_PYTHON_PREFIX}_LIB_NAMES_DEBUG)
2061 unset (_${_PYTHON_PREFIX}_FRAMEWORK_PATHS)
2062 unset (_${_PYTHON_PREFIX}_REGISTRY_PATHS)
2063 unset (_${_PYTHON_PREFIX}_PATH_SUFFIXES)
2065 foreach (_${_PYTHON_PREFIX}_LIB_VERSION IN LISTS _${_PYTHON_PREFIX}_FIND_VERSIONS)
2067 _python_get_names (_${_PYTHON_PREFIX}_VERSION_NAMES
VERSION ${_${_PYTHON_PREFIX}_LIB_VERSION} WIN32 POSIX LIBRARY)
2068 list (APPEND _${_PYTHON_PREFIX}_LIB_NAMES ${_${_PYTHON_PREFIX}_VERSION_NAMES})
2069 _python_get_names (_${_PYTHON_PREFIX}_VERSION_NAMES
VERSION ${_${_PYTHON_PREFIX}_LIB_VERSION} WIN32 DEBUG)
2070 list (APPEND _${_PYTHON_PREFIX}_LIB_NAMES_DEBUG ${_${_PYTHON_PREFIX}_VERSION_NAMES})
2073 _python_get_frameworks (_${_PYTHON_PREFIX}_VERSION_PATHS ${_${_PYTHON_PREFIX}_LIB_VERSION})
2074 list (APPEND _${_PYTHON_PREFIX}_FRAMEWORK_PATHS ${_${_PYTHON_PREFIX}_VERSION_PATHS})
2077 _python_get_registries (_${_PYTHON_PREFIX}_VERSION_PATHS ${_${_PYTHON_PREFIX}_LIB_VERSION})
2078 list (APPEND _${_PYTHON_PREFIX}_REGISTRY_PATHS ${_${_PYTHON_PREFIX}_VERSION_PATHS})
2081 _python_get_path_suffixes (_${_PYTHON_PREFIX}_VERSION_PATHS
VERSION ${_${_PYTHON_PREFIX}_LIB_VERSION} LIBRARY)
2082 list (APPEND _${_PYTHON_PREFIX}_PATH_SUFFIXES ${_${_PYTHON_PREFIX}_VERSION_PATHS})
2085 if (APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL
"FIRST")
2086 find_library (_${_PYTHON_PREFIX}_LIBRARY_RELEASE
2087 NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES}
2089 HINTS ${_${_PYTHON_PREFIX}_HINTS}
2090 PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
2091 ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
2092 PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
2094 NO_CMAKE_ENVIRONMENT_PATH
2095 NO_SYSTEM_ENVIRONMENT_PATH
2096 NO_CMAKE_SYSTEM_PATH)
2099 if (WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL
"FIRST")
2100 find_library (_${_PYTHON_PREFIX}_LIBRARY_RELEASE
2101 NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES}
2103 HINTS ${_${_PYTHON_PREFIX}_HINTS}
2104 PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
2105 ${_${_PYTHON_PREFIX}_REGISTRY_PATHS}
2106 PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
2107 NO_SYSTEM_ENVIRONMENT_PATH
2108 NO_CMAKE_SYSTEM_PATH)
2111 # search in HINTS locations 2112 find_library (_${_PYTHON_PREFIX}_LIBRARY_RELEASE
2113 NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES}
2115 HINTS ${_${_PYTHON_PREFIX}_HINTS}
2116 PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
2117 PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
2118 NO_SYSTEM_ENVIRONMENT_PATH
2119 NO_CMAKE_SYSTEM_PATH)
2121 if (APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL
"LAST")
2122 set (__${_PYTHON_PREFIX}_FRAMEWORK_PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS})
2124 unset (__${_PYTHON_PREFIX}_FRAMEWORK_PATHS)
2127 if (WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL
"LAST")
2128 set (__${_PYTHON_PREFIX}_REGISTRY_PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS})
2130 unset (__${_PYTHON_PREFIX}_REGISTRY_PATHS)
2133 # search in all default paths 2134 find_library (_${_PYTHON_PREFIX}_LIBRARY_RELEASE
2135 NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES}
2137 PATHS ${__${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
2138 ${__${_PYTHON_PREFIX}_REGISTRY_PATHS}
2139 PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES})
2141 foreach (_${_PYTHON_PREFIX}_LIB_VERSION IN LISTS _${_PYTHON_PREFIX}_FIND_VERSIONS)
2142 _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES
VERSION ${_${_PYTHON_PREFIX}_LIB_VERSION} WIN32 POSIX LIBRARY)
2143 _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES_DEBUG
VERSION ${_${_PYTHON_PREFIX}_LIB_VERSION} WIN32 DEBUG)
2145 _python_get_frameworks (_${_PYTHON_PREFIX}_FRAMEWORK_PATHS ${_${_PYTHON_PREFIX}_LIB_VERSION})
2146 _python_get_registries (_${_PYTHON_PREFIX}_REGISTRY_PATHS ${_${_PYTHON_PREFIX}_LIB_VERSION})
2148 _python_get_path_suffixes (_${_PYTHON_PREFIX}_PATH_SUFFIXES
VERSION ${_${_PYTHON_PREFIX}_LIB_VERSION} LIBRARY)
2150 if (APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL
"FIRST")
2151 find_library (_${_PYTHON_PREFIX}_LIBRARY_RELEASE
2152 NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES}
2154 HINTS ${_${_PYTHON_PREFIX}_HINTS}
2155 PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
2156 ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
2157 PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
2159 NO_CMAKE_ENVIRONMENT_PATH
2160 NO_SYSTEM_ENVIRONMENT_PATH
2161 NO_CMAKE_SYSTEM_PATH)
2164 if (WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL
"FIRST")
2165 find_library (_${_PYTHON_PREFIX}_LIBRARY_RELEASE
2166 NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES}
2168 HINTS ${_${_PYTHON_PREFIX}_HINTS}
2169 PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
2170 ${_${_PYTHON_PREFIX}_REGISTRY_PATHS}
2171 PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
2172 NO_SYSTEM_ENVIRONMENT_PATH
2173 NO_CMAKE_SYSTEM_PATH)
2176 # search in HINTS locations 2177 find_library (_${_PYTHON_PREFIX}_LIBRARY_RELEASE
2178 NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES}
2180 HINTS ${_${_PYTHON_PREFIX}_HINTS}
2181 PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
2182 PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
2183 NO_SYSTEM_ENVIRONMENT_PATH
2184 NO_CMAKE_SYSTEM_PATH)
2186 if (APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL
"LAST")
2187 set (__${_PYTHON_PREFIX}_FRAMEWORK_PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS})
2189 unset (__${_PYTHON_PREFIX}_FRAMEWORK_PATHS)
2192 if (WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL
"LAST")
2193 set (__${_PYTHON_PREFIX}_REGISTRY_PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS})
2195 unset (__${_PYTHON_PREFIX}_REGISTRY_PATHS)
2198 # search in all default paths 2199 find_library (_${_PYTHON_PREFIX}_LIBRARY_RELEASE
2200 NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES}
2202 PATHS ${__${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
2203 ${__${_PYTHON_PREFIX}_REGISTRY_PATHS}
2204 PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES})
2206 if (_${_PYTHON_PREFIX}_LIBRARY_RELEASE)
2214 # finalize library version information 2215 _python_get_version (LIBRARY PREFIX _${_PYTHON_PREFIX}_)
2217 set (${_PYTHON_PREFIX}_LIBRARY_RELEASE
"${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}")
2219 if (_${_PYTHON_PREFIX}_LIBRARY_RELEASE AND NOT EXISTS
"${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}")
2220 set (_${_PYTHON_PREFIX}_Development_REASON_FAILURE
"Cannot find the library \"${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}\"")
2221 set_property (CACHE _${_PYTHON_PREFIX}_LIBRARY_RELEASE PROPERTY VALUE
"${_PYTHON_PREFIX}_LIBRARY_RELEASE-NOTFOUND")
2224 set (_${_PYTHON_PREFIX}_HINTS
"${${_PYTHON_PREFIX}_ROOT_DIR}" ENV ${_PYTHON_PREFIX}_ROOT_DIR)
2226 if (WIN32 AND _${_PYTHON_PREFIX}_LIBRARY_RELEASE)
2227 # search
for debug library
2228 # use release library
location as a hint
2229 _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES_DEBUG
VERSION ${_${_PYTHON_PREFIX}_VERSION} WIN32 DEBUG)
2230 get_filename_component (_${_PYTHON_PREFIX}_PATH
"${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}" DIRECTORY)
2231 find_library (_${_PYTHON_PREFIX}_LIBRARY_DEBUG
2232 NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES_DEBUG}
2234 HINTS
"${_${_PYTHON_PREFIX}_PATH}" ${_${_PYTHON_PREFIX}_HINTS}
2238 # retrieve runtime libraries 2239 if (_${_PYTHON_PREFIX}_LIBRARY_RELEASE)
2240 _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES
VERSION ${_${_PYTHON_PREFIX}_VERSION} WIN32 POSIX LIBRARY)
2241 get_filename_component (_${_PYTHON_PREFIX}_PATH
"${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}" DIRECTORY)
2242 get_filename_component (_${_PYTHON_PREFIX}_PATH2
"${_${_PYTHON_PREFIX}_PATH}" DIRECTORY)
2243 _python_find_runtime_library (_${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE
2244 NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES}
2246 HINTS
"${_${_PYTHON_PREFIX}_PATH}" "${_${_PYTHON_PREFIX}_PATH2}" ${_${_PYTHON_PREFIX}_HINTS}
2249 if (_${_PYTHON_PREFIX}_LIBRARY_DEBUG)
2250 _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES_DEBUG
VERSION ${_${_PYTHON_PREFIX}_VERSION} WIN32 DEBUG)
2251 get_filename_component (_${_PYTHON_PREFIX}_PATH
"${_${_PYTHON_PREFIX}_LIBRARY_DEBUG}" DIRECTORY)
2252 get_filename_component (_${_PYTHON_PREFIX}_PATH2
"${_${_PYTHON_PREFIX}_PATH}" DIRECTORY)
2253 _python_find_runtime_library (_${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG
2254 NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES_DEBUG}
2256 HINTS
"${_${_PYTHON_PREFIX}_PATH}" "${_${_PYTHON_PREFIX}_PATH2}" ${_${_PYTHON_PREFIX}_HINTS}
2261 if (
"INCLUDE_DIR" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS)
2262 while (NOT _${_PYTHON_PREFIX}_INCLUDE_DIR)
2263 if (
"LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS
2264 AND NOT _${_PYTHON_PREFIX}_LIBRARY_RELEASE)
2265 # Don
't search for include dir if no library was founded 2269 if ((${_PYTHON_PREFIX}_Interpreter_FOUND AND NOT CMAKE_CROSSCOMPILING) OR _${_PYTHON_PREFIX}_CONFIG) 2270 _python_get_config_var (_${_PYTHON_PREFIX}_INCLUDE_DIRS INCLUDES) 2272 find_path (_${_PYTHON_PREFIX}_INCLUDE_DIR 2274 HINTS ${_${_PYTHON_PREFIX}_INCLUDE_DIRS} 2275 NO_SYSTEM_ENVIRONMENT_PATH 2276 NO_CMAKE_SYSTEM_PATH) 2279 # Rely on HINTS and standard paths if interpreter or config tool failed to locate artifacts 2280 if (NOT _${_PYTHON_PREFIX}_INCLUDE_DIR) 2281 unset (_${_PYTHON_PREFIX}_VIRTUALENV_PATHS) 2282 if (_${_PYTHON_PREFIX}_FIND_VIRTUALENV MATCHES "^(FIRST|ONLY)$") 2283 set (_${_PYTHON_PREFIX}_VIRTUALENV_PATHS ENV VIRTUAL_ENV ENV CONDA_PREFIX) 2285 unset (_${_PYTHON_PREFIX}_INCLUDE_HINTS) 2287 if (_${_PYTHON_PREFIX}_LIBRARY_RELEASE) 2288 # Use the library's install prefix as a hint
2289 if (_${_PYTHON_PREFIX}_LIBRARY_RELEASE MATCHES
"^(.+/Frameworks/Python.framework/Versions/[0-9.]+)")
2290 list (APPEND _${_PYTHON_PREFIX}_INCLUDE_HINTS
"${CMAKE_MATCH_1}")
2291 elseif (_${_PYTHON_PREFIX}_LIBRARY_RELEASE MATCHES
"^(.+)/lib(64|32)?/python[0-9.]+/config")
2292 list (APPEND _${_PYTHON_PREFIX}_INCLUDE_HINTS
"${CMAKE_MATCH_1}")
2293 elseif (DEFINED CMAKE_LIBRARY_ARCHITECTURE AND ${_${_PYTHON_PREFIX}_LIBRARY_RELEASE} MATCHES
"^(.+)/lib/${CMAKE_LIBRARY_ARCHITECTURE}")
2294 list (APPEND _${_PYTHON_PREFIX}_INCLUDE_HINTS
"${CMAKE_MATCH_1}")
2296 # assume library is in a directory under root 2297 get_filename_component (_${_PYTHON_PREFIX}_PREFIX
"${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}" DIRECTORY)
2298 get_filename_component (_${_PYTHON_PREFIX}_PREFIX
"${_${_PYTHON_PREFIX}_PREFIX}" DIRECTORY)
2299 list (APPEND _${_PYTHON_PREFIX}_INCLUDE_HINTS
"${_${_PYTHON_PREFIX}_PREFIX}")
2303 _python_get_frameworks (_${_PYTHON_PREFIX}_FRAMEWORK_PATHS ${_${_PYTHON_PREFIX}_VERSION})
2304 _python_get_registries (_${_PYTHON_PREFIX}_REGISTRY_PATHS ${_${_PYTHON_PREFIX}_VERSION})
2305 _python_get_path_suffixes (_${_PYTHON_PREFIX}_PATH_SUFFIXES
VERSION ${_${_PYTHON_PREFIX}_VERSION} INCLUDE)
2307 if (APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL
"FIRST")
2308 find_path (_${_PYTHON_PREFIX}_INCLUDE_DIR
2310 HINTS ${_${_PYTHON_PREFIX}_INCLUDE_HINTS} ${_${_PYTHON_PREFIX}_HINTS}
2311 PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
2312 ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
2313 PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
2315 NO_CMAKE_ENVIRONMENT_PATH
2316 NO_SYSTEM_ENVIRONMENT_PATH
2317 NO_CMAKE_SYSTEM_PATH)
2320 if (WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL
"FIRST")
2321 find_path (_${_PYTHON_PREFIX}_INCLUDE_DIR
2323 HINTS ${_${_PYTHON_PREFIX}_INCLUDE_HINTS} ${_${_PYTHON_PREFIX}_HINTS}
2324 PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
2325 ${_${_PYTHON_PREFIX}_REGISTRY_PATHS}
2326 PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
2327 NO_SYSTEM_ENVIRONMENT_PATH
2328 NO_CMAKE_SYSTEM_PATH)
2331 if (APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL
"LAST")
2332 set (__${_PYTHON_PREFIX}_FRAMEWORK_PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS})
2334 unset (__${_PYTHON_PREFIX}_FRAMEWORK_PATHS)
2337 if (WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL
"LAST")
2338 set (__${_PYTHON_PREFIX}_REGISTRY_PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS})
2340 unset (__${_PYTHON_PREFIX}_REGISTRY_PATHS)
2343 find_path (_${_PYTHON_PREFIX}_INCLUDE_DIR
2345 HINTS ${_${_PYTHON_PREFIX}_INCLUDE_HINTS} ${_${_PYTHON_PREFIX}_HINTS}
2346 PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
2347 ${__${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
2348 ${__${_PYTHON_PREFIX}_REGISTRY_PATHS}
2349 PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
2350 NO_SYSTEM_ENVIRONMENT_PATH
2351 NO_CMAKE_SYSTEM_PATH)
2354 # search header file in standard locations 2355 find_path (_${_PYTHON_PREFIX}_INCLUDE_DIR
2361 set (${_PYTHON_PREFIX}_INCLUDE_DIRS
"${_${_PYTHON_PREFIX}_INCLUDE_DIR}")
2363 if (_${_PYTHON_PREFIX}_INCLUDE_DIR AND NOT EXISTS
"${_${_PYTHON_PREFIX}_INCLUDE_DIR}")
2364 set (_${_PYTHON_PREFIX}_Development_REASON_FAILURE
"Cannot find the directory \"${_${_PYTHON_PREFIX}_INCLUDE_DIR}\"")
2365 set_property (CACHE _${_PYTHON_PREFIX}_INCLUDE_DIR PROPERTY VALUE
"${_PYTHON_PREFIX}_INCLUDE_DIR-NOTFOUND")
2368 if (_${_PYTHON_PREFIX}_INCLUDE_DIR)
2369 # retrieve
version from header file
2370 _python_get_version (INCLUDE PREFIX _${_PYTHON_PREFIX}_INC_)
2372 if (_${_PYTHON_PREFIX}_LIBRARY_RELEASE)
2374 if (_${_PYTHON_PREFIX}_INC_VERSION VERSION_EQUAL _${_PYTHON_PREFIX}_VERSION)
2375 set (_${_PYTHON_PREFIX}_VERSION_PATCH ${_${_PYTHON_PREFIX}_INC_VERSION_PATCH})
2378 set (_${_PYTHON_PREFIX}_VERSION ${_${_PYTHON_PREFIX}_INC_VERSION})
2379 set (_${_PYTHON_PREFIX}_VERSION_MAJOR ${_${_PYTHON_PREFIX}_INC_VERSION_MAJOR})
2380 set (_${_PYTHON_PREFIX}_VERSION_MINOR ${_${_PYTHON_PREFIX}_INC_VERSION_MINOR})
2381 set (_${_PYTHON_PREFIX}_VERSION_PATCH ${_${_PYTHON_PREFIX}_INC_VERSION_PATCH})
2386 if (NOT ${_PYTHON_PREFIX}_Interpreter_FOUND AND NOT ${_PYTHON_PREFIX}_Compiler_FOUND)
2387 #
set public version information
2388 set (${_PYTHON_PREFIX}_VERSION ${_${_PYTHON_PREFIX}_VERSION})
2389 set (${_PYTHON_PREFIX}_VERSION_MAJOR ${_${_PYTHON_PREFIX}_VERSION_MAJOR})
2390 set (${_PYTHON_PREFIX}_VERSION_MINOR ${_${_PYTHON_PREFIX}_VERSION_MINOR})
2391 set (${_PYTHON_PREFIX}_VERSION_PATCH ${_${_PYTHON_PREFIX}_VERSION_PATCH})
2394 # define public variables 2395 if (
"LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS)
2396 set (${_PYTHON_PREFIX}_LIBRARY_DEBUG
"${_${_PYTHON_PREFIX}_LIBRARY_DEBUG}")
2397 _python_select_library_configurations (${_PYTHON_PREFIX})
2399 set (${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE
"${_${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE}")
2400 set (${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG
"${_${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG}")
2402 if (_${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE)
2403 set (${_PYTHON_PREFIX}_RUNTIME_LIBRARY
"${_${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE}")
2404 elseif (_${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG)
2405 set (${_PYTHON_PREFIX}_RUNTIME_LIBRARY
"${_${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG}")
2407 set (${_PYTHON_PREFIX}_RUNTIME_LIBRARY
"${_PYTHON_PREFIX}_RUNTIME_LIBRARY-NOTFOUND")
2410 _python_set_library_dirs (${_PYTHON_PREFIX}_LIBRARY_DIRS
2411 _${_PYTHON_PREFIX}_LIBRARY_RELEASE _${_PYTHON_PREFIX}_LIBRARY_DEBUG)
2413 if (_${_PYTHON_PREFIX}_LIBRARY_RELEASE MATCHES
"${CMAKE_SHARED_LIBRARY_SUFFIX}$")
2414 set (${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DIRS ${${_PYTHON_PREFIX}_LIBRARY_DIRS})
2417 _python_set_library_dirs (${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DIRS
2418 _${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE _${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG)
2422 if (_${_PYTHON_PREFIX}_LIBRARY_RELEASE OR _${_PYTHON_PREFIX}_INCLUDE_DIR)
2423 if (${_PYTHON_PREFIX}_Interpreter_FOUND OR ${_PYTHON_PREFIX}_Compiler_FOUND)
2424 # development environment must be compatible with interpreter/compiler
2425 if (
"${_${_PYTHON_PREFIX}_VERSION_MAJOR}.${_${_PYTHON_PREFIX}_VERSION_MINOR}" VERSION_EQUAL
"${${_PYTHON_PREFIX}_VERSION_MAJOR}.${${_PYTHON_PREFIX}_VERSION_MINOR}" 2426 AND
"${_${_PYTHON_PREFIX}_INC_VERSION_MAJOR}.${_${_PYTHON_PREFIX}_INC_VERSION_MINOR}" VERSION_EQUAL
"${_${_PYTHON_PREFIX}_VERSION_MAJOR}.${_${_PYTHON_PREFIX}_VERSION_MINOR}")
2427 _python_set_development_module_found (Module)
2428 _python_set_development_module_found (Embed)
2430 elseif (${_PYTHON_PREFIX}_VERSION_MAJOR VERSION_EQUAL _${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR
2431 AND
"${_${_PYTHON_PREFIX}_INC_VERSION_MAJOR}.${_${_PYTHON_PREFIX}_INC_VERSION_MINOR}" VERSION_EQUAL
"${_${_PYTHON_PREFIX}_VERSION_MAJOR}.${_${_PYTHON_PREFIX}_VERSION_MINOR}")
2432 _python_set_development_module_found (Module)
2433 _python_set_development_module_found (Embed)
2435 if (DEFINED _${_PYTHON_PREFIX}_FIND_ABI AND
2436 (NOT _${_PYTHON_PREFIX}_ABI IN_LIST _${_PYTHON_PREFIX}_ABIFLAGS
2437 OR NOT _${_PYTHON_PREFIX}_INC_ABI IN_LIST _${_PYTHON_PREFIX}_ABIFLAGS))
2438 set (${_PYTHON_PREFIX}_Development.Module_FOUND FALSE)
2439 set (${_PYTHON_PREFIX}_Development.Embed_FOUND FALSE)
2443 if (
"Development" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
2444 AND ${_PYTHON_PREFIX}_Development.Module_FOUND
2445 AND ${_PYTHON_PREFIX}_Development.Embed_FOUND)
2446 set (${_PYTHON_PREFIX}_Development_FOUND TRUE)
2449 if (_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR VERSION_GREATER_EQUAL
"3" 2450 AND NOT DEFINED ${_PYTHON_PREFIX}_SOABI)
2451 _python_get_config_var (${_PYTHON_PREFIX}_SOABI SOABI)
2454 _python_compute_development_signature (Module)
2455 _python_compute_development_signature (Embed)
2457 # Restore the original find library ordering 2458 if (DEFINED _${_PYTHON_PREFIX}_CMAKE_FIND_LIBRARY_SUFFIXES)
2459 set (CMAKE_FIND_LIBRARY_SUFFIXES ${_${_PYTHON_PREFIX}_CMAKE_FIND_LIBRARY_SUFFIXES})
2462 if (${_PYTHON_PREFIX}_ARTIFACTS_INTERACTIVE)
2463 if (
"LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS)
2464 set (${_PYTHON_PREFIX}_LIBRARY
"${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}" CACHE FILEPATH
"${_PYTHON_PREFIX} Library")
2466 if (
"INCLUDE_DIR" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS)
2467 set (${_PYTHON_PREFIX}_INCLUDE_DIR
"${_${_PYTHON_PREFIX}_INCLUDE_DIR}" CACHE FILEPATH
"${_PYTHON_PREFIX} Include Directory")
2471 _python_mark_as_internal (_${_PYTHON_PREFIX}_LIBRARY_RELEASE
2472 _${_PYTHON_PREFIX}_LIBRARY_DEBUG
2473 _${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE
2474 _${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG
2475 _${_PYTHON_PREFIX}_INCLUDE_DIR
2476 _${_PYTHON_PREFIX}_CONFIG
2477 _${_PYTHON_PREFIX}_DEVELOPMENT_MODULE_SIGNATURE
2478 _${_PYTHON_PREFIX}_DEVELOPMENT_EMBED_SIGNATURE)
2481 if (
"NumPy" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS AND ${_PYTHON_PREFIX}_Interpreter_FOUND)
2482 list (APPEND _${_PYTHON_PREFIX}_CACHED_VARS _${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR)
2483 if (${_PYTHON_PREFIX}_FIND_REQUIRED_NumPy)
2484 list (APPEND _${_PYTHON_PREFIX}_REQUIRED_VARS ${_PYTHON_PREFIX}_NumPy_INCLUDE_DIRS)
2487 if (DEFINED ${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR
2488 AND IS_ABSOLUTE
"${${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR}")
2489 set (_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR
"${${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR}" CACHE INTERNAL
"")
2490 elseif (DEFINED _${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR)
2491 # compute numpy signature. Depends
on interpreter and development signatures
2492 string (MD5 __${_PYTHON_PREFIX}_NUMPY_SIGNATURE
"${_${_PYTHON_PREFIX}_INTERPRETER_SIGNATURE}:${_${_PYTHON_PREFIX}_DEVELOPMENT_MODULE_SIGNATURE}:${_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR}")
2493 if (NOT __${_PYTHON_PREFIX}_NUMPY_SIGNATURE STREQUAL _${_PYTHON_PREFIX}_NUMPY_SIGNATURE
2494 OR NOT EXISTS
"${_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR}")
2495 unset (_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR CACHE)
2496 unset (_${_PYTHON_PREFIX}_NUMPY_SIGNATURE CACHE)
2500 if (NOT _${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR)
2502 COMMAND
"${${_PYTHON_PREFIX}_EXECUTABLE}" -c
2503 "from __future__ import print_function\ntry: import numpy; print(numpy.get_include(), end='')\nexcept:pass\n" 2504 RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
2505 OUTPUT_VARIABLE _${_PYTHON_PREFIX}_NumPy_PATH
2507 OUTPUT_STRIP_TRAILING_WHITESPACE)
2509 if (NOT _${_PYTHON_PREFIX}_RESULT)
2510 find_path (_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR
2511 NAMES
"numpy/arrayobject.h" "numpy/numpyconfig.h" 2512 HINTS
"${_${_PYTHON_PREFIX}_NumPy_PATH}" 2517 set (${_PYTHON_PREFIX}_NumPy_INCLUDE_DIRS
"${_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR}")
2519 if(_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR AND NOT EXISTS
"${_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR}")
2520 set (_${_PYTHON_PREFIX}_NumPy_REASON_FAILURE
"Cannot find the directory \"${_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR}\"")
2521 set_property (CACHE _${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR PROPERTY VALUE
"${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR-NOTFOUND")
2524 if (_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR)
2526 COMMAND
"${${_PYTHON_PREFIX}_EXECUTABLE}" -c
2527 "from __future__ import print_function\ntry: import numpy; print(numpy.__version__, end='')\nexcept:pass\n" 2528 RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
2529 OUTPUT_VARIABLE _${_PYTHON_PREFIX}_NumPy_VERSION)
2530 if (NOT _${_PYTHON_PREFIX}_RESULT)
2531 set (${_PYTHON_PREFIX}_NumPy_VERSION
"${_${_PYTHON_PREFIX}_NumPy_VERSION}")
2533 unset (${_PYTHON_PREFIX}_NumPy_VERSION)
2536 # final step: set NumPy founded only if Development.Module component is founded as well 2537 set(${_PYTHON_PREFIX}_NumPy_FOUND ${${_PYTHON_PREFIX}_Development.Module_FOUND})
2539 set (${_PYTHON_PREFIX}_NumPy_FOUND FALSE)
2542 if (${_PYTHON_PREFIX}_NumPy_FOUND)
2543 # compute and
save numpy signature
2544 string (MD5 __${_PYTHON_PREFIX}_NUMPY_SIGNATURE
"${_${_PYTHON_PREFIX}_INTERPRETER_SIGNATURE}:${_${_PYTHON_PREFIX}_DEVELOPMENT_MODULE_SIGNATURE}:${${_PYTHON_PREFIX}_NumPyINCLUDE_DIR}")
2545 set (_${_PYTHON_PREFIX}_NUMPY_SIGNATURE
"${__${_PYTHON_PREFIX}_NUMPY_SIGNATURE}" CACHE INTERNAL
"")
2547 unset (_${_PYTHON_PREFIX}_NUMPY_SIGNATURE CACHE)
2550 if (${_PYTHON_PREFIX}_ARTIFACTS_INTERACTIVE)
2551 set (${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR
"${_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR}" CACHE FILEPATH
"${_PYTHON_PREFIX} NumPy Include Directory")
2554 _python_mark_as_internal (_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR
2555 _${_PYTHON_PREFIX}_NUMPY_SIGNATURE)
2559 if (${_PYTHON_PREFIX}_VERSION_MAJOR AND
2560 NOT ${_PYTHON_PREFIX}_VERSION_MAJOR VERSION_EQUAL _${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR)
2561 _python_display_failure (
"Could NOT find ${_PYTHON_PREFIX}: Found unsuitable major version \"${${_PYTHON_PREFIX}_VERSION_MAJOR}\", but required major version is exact version \"${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR}\"")
2564 unset (_${_PYTHON_PREFIX}_REASON_FAILURE)
2565 foreach (_${_PYTHON_PREFIX}_COMPONENT IN ITEMS Interpreter Compiler Development NumPy)
2566 if (_${_PYTHON_PREFIX}_${_${_PYTHON_PREFIX}_COMPONENT}_REASON_FAILURE)
2567 string (APPEND _${_PYTHON_PREFIX}_REASON_FAILURE
"\n ${_${_PYTHON_PREFIX}_COMPONENT}: ${_${_PYTHON_PREFIX}_${_${_PYTHON_PREFIX}_COMPONENT}_REASON_FAILURE}")
2571 set(_python_reason_failure_args)
2572 if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.16)
2573 set(_python_reason_failure_args
2574 REASON_FAILURE_MESSAGE
"${_${_PYTHON_PREFIX}_REASON_FAILURE}")
2577 include (FindPackageHandleStandardArgs)
2578 find_package_handle_standard_args (${_PYTHON_PREFIX}
2579 REQUIRED_VARS ${_${_PYTHON_PREFIX}_REQUIRED_VARS}
2580 VERSION_VAR ${_PYTHON_PREFIX}_VERSION
2582 ${_python_reason_failure_args})
2583 unset(_python_reason_failure_args)
2585 # Create imported targets and helper functions 2586 if(_${_PYTHON_PREFIX}_CMAKE_ROLE STREQUAL
"PROJECT")
2587 if (
"Interpreter" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
2588 AND ${_PYTHON_PREFIX}_Interpreter_FOUND
2589 AND NOT TARGET ${_PYTHON_PREFIX}::Interpreter)
2590 add_executable (${_PYTHON_PREFIX}::Interpreter IMPORTED)
2591 set_property (TARGET ${_PYTHON_PREFIX}::Interpreter
2592 PROPERTY IMPORTED_LOCATION
"${${_PYTHON_PREFIX}_EXECUTABLE}")
2595 if (
"Compiler" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
2596 AND ${_PYTHON_PREFIX}_Compiler_FOUND
2597 AND NOT TARGET ${_PYTHON_PREFIX}::Compiler)
2598 add_executable (${_PYTHON_PREFIX}::Compiler IMPORTED)
2599 set_property (TARGET ${_PYTHON_PREFIX}::Compiler
2600 PROPERTY IMPORTED_LOCATION
"${${_PYTHON_PREFIX}_COMPILER}")
2603 if ((
"Development.Module" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
2604 AND ${_PYTHON_PREFIX}_Development.Module_FOUND)
2605 OR (
"Development.Embed" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
2606 AND ${_PYTHON_PREFIX}_Development.Embed_FOUND))
2608 macro (__PYTHON_IMPORT_LIBRARY __name)
2609 if (${_PYTHON_PREFIX}_LIBRARY_RELEASE MATCHES
"${CMAKE_SHARED_LIBRARY_SUFFIX}$" 2610 OR ${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE)
2611 set (_${_PYTHON_PREFIX}_LIBRARY_TYPE SHARED)
2613 set (_${_PYTHON_PREFIX}_LIBRARY_TYPE STATIC)
2616 if (NOT TARGET ${__name})
2617 add_library (${__name} ${_${_PYTHON_PREFIX}_LIBRARY_TYPE} IMPORTED)
2620 set_property (TARGET ${__name}
2621 PROPERTY INTERFACE_INCLUDE_DIRECTORIES
"${${_PYTHON_PREFIX}_INCLUDE_DIRS}")
2623 if (${_PYTHON_PREFIX}_LIBRARY_RELEASE AND ${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE)
2624 # System manage shared libraries in two parts:
import and runtime
2625 if (${_PYTHON_PREFIX}_LIBRARY_RELEASE AND ${_PYTHON_PREFIX}_LIBRARY_DEBUG)
2626 set_property (TARGET ${__name} PROPERTY IMPORTED_CONFIGURATIONS RELEASE DEBUG)
2627 set_target_properties (${__name}
2628 PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE
"C" 2629 IMPORTED_IMPLIB_RELEASE
"${${_PYTHON_PREFIX}_LIBRARY_RELEASE}" 2630 IMPORTED_LOCATION_RELEASE
"${${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE}")
2631 set_target_properties (${__name}
2632 PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG
"C" 2633 IMPORTED_IMPLIB_DEBUG
"${${_PYTHON_PREFIX}_LIBRARY_DEBUG}" 2634 IMPORTED_LOCATION_DEBUG
"${${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG}")
2636 set_target_properties (${__name}
2637 PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES
"C" 2638 IMPORTED_IMPLIB
"${${_PYTHON_PREFIX}_LIBRARIES}" 2639 IMPORTED_LOCATION
"${${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE}")
2642 if (${_PYTHON_PREFIX}_LIBRARY_RELEASE AND ${_PYTHON_PREFIX}_LIBRARY_DEBUG)
2643 set_property (TARGET ${__name} PROPERTY IMPORTED_CONFIGURATIONS RELEASE DEBUG)
2644 set_target_properties (${__name}
2645 PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE
"C" 2646 IMPORTED_LOCATION_RELEASE
"${${_PYTHON_PREFIX}_LIBRARY_RELEASE}")
2647 set_target_properties (${__name}
2648 PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG
"C" 2649 IMPORTED_LOCATION_DEBUG
"${${_PYTHON_PREFIX}_LIBRARY_DEBUG}")
2651 set_target_properties (${__name}
2652 PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES
"C" 2653 IMPORTED_LOCATION
"${${_PYTHON_PREFIX}_LIBRARY_RELEASE}")
2657 if (_${_PYTHON_PREFIX}_LIBRARY_TYPE STREQUAL
"STATIC")
2658 # extend link information with dependent libraries
2659 _python_get_config_var (_${_PYTHON_PREFIX}_LINK_LIBRARIES LIBS)
2660 if (_${_PYTHON_PREFIX}_LINK_LIBRARIES)
2661 set_property (TARGET ${__name}
2662 PROPERTY INTERFACE_LINK_LIBRARIES ${_${_PYTHON_PREFIX}_LINK_LIBRARIES})
2667 if (${_PYTHON_PREFIX}_Development.Embed_FOUND)
2668 __python_import_library (${_PYTHON_PREFIX}::Python)
2671 if (${_PYTHON_PREFIX}_Development.Module_FOUND)
2672 if (
"LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_MODULE_ARTIFACTS)
2673 # On Windows/CYGWIN/MSYS, Python::Module is the same as Python::Python
2674 # but ALIAS cannot be used because the imported library is not GLOBAL.
2675 __python_import_library (${_PYTHON_PREFIX}::Module)
2677 if (NOT TARGET ${_PYTHON_PREFIX}::Module)
2678 add_library (${_PYTHON_PREFIX}::Module INTERFACE IMPORTED)
2680 set_property (TARGET ${_PYTHON_PREFIX}::Module
2681 PROPERTY INTERFACE_INCLUDE_DIRECTORIES
"${${_PYTHON_PREFIX}_INCLUDE_DIRS}")
2683 # When available, enforce shared library generation with undefined symbols
2685 set_property (TARGET ${_PYTHON_PREFIX}::Module
2686 PROPERTY INTERFACE_LINK_OPTIONS
"LINKER:-undefined,dynamic_lookup")
2688 if (CMAKE_SYSTEM_NAME STREQUAL
"SunOS")
2689 set_property (TARGET ${_PYTHON_PREFIX}::Module
2690 PROPERTY INTERFACE_LINK_OPTIONS
"LINKER:-z,nodefs")
2692 if (CMAKE_SYSTEM_NAME STREQUAL
"AIX")
2693 set_property (TARGET ${_PYTHON_PREFIX}::Module
2694 PROPERTY INTERFACE_LINK_OPTIONS
"LINKER:-b,erok")
2700 # PYTHON_ADD_LIBRARY (<name> [STATIC|SHARED|MODULE] src1 src2 ... srcN) 2701 # It is used to build modules for python. 2703 function (__${_PYTHON_PREFIX}_ADD_LIBRARY prefix
name)
2704 cmake_parse_arguments (PARSE_ARGV 2 PYTHON_ADD_LIBRARY
2705 "STATIC;SHARED;MODULE;WITH_SOABI" "" "")
2707 if (prefix STREQUAL
"Python2" AND PYTHON_ADD_LIBRARY_WITH_SOABI)
2708 message (AUTHOR_WARNING
"FindPython2: Option `WITH_SOABI` is not supported for Python2 and will be ignored.")
2709 unset (PYTHON_ADD_LIBRARY_WITH_SOABI)
2712 if (PYTHON_ADD_LIBRARY_STATIC)
2714 elseif (PYTHON_ADD_LIBRARY_SHARED)
2720 if (
type STREQUAL
"MODULE" AND NOT TARGET ${prefix}::Module)
2721 message (SEND_ERROR
"${prefix}_ADD_LIBRARY: dependent target '${prefix}::Module' is not defined.\n Did you miss to request COMPONENT 'Development.Module'?")
2724 if (NOT
type STREQUAL
"MODULE" AND NOT TARGET ${prefix}::Python)
2725 message (SEND_ERROR
"${prefix}_ADD_LIBRARY: dependent target '${prefix}::Python' is not defined.\n Did you miss to request COMPONENT 'Development.Embed'?")
2729 add_library (${
name} ${
type} ${PYTHON_ADD_LIBRARY_UNPARSED_ARGUMENTS})
2731 get_property (
type TARGET ${
name} PROPERTY TYPE)
2733 if (
type STREQUAL
"MODULE_LIBRARY")
2734 target_link_libraries (${
name} PRIVATE ${prefix}::Module)
2735 # customize library
name to follow module
name rules
2736 set_property (TARGET ${
name} PROPERTY PREFIX
"")
2737 if(CMAKE_SYSTEM_NAME STREQUAL
"Windows")
2738 set_property (TARGET ${
name} PROPERTY SUFFIX
".pyd")
2741 if (PYTHON_ADD_LIBRARY_WITH_SOABI AND ${prefix}_SOABI)
2742 get_property (suffix TARGET ${
name} PROPERTY SUFFIX)
2744 set (suffix
"${CMAKE_SHARED_MODULE_SUFFIX}")
2746 set_property (TARGET ${
name} PROPERTY SUFFIX
".${${prefix}_SOABI}${suffix}")
2749 if (PYTHON_ADD_LIBRARY_WITH_SOABI)
2750 message (AUTHOR_WARNING
"Find${prefix}: Option `WITH_SOABI` is only supported for `MODULE` library type.")
2752 target_link_libraries (${
name} PRIVATE ${prefix}::Python)
2757 if (
"NumPy" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS AND ${_PYTHON_PREFIX}_NumPy_FOUND
2758 AND NOT TARGET ${_PYTHON_PREFIX}::NumPy AND TARGET ${_PYTHON_PREFIX}::Module)
2759 add_library (${_PYTHON_PREFIX}::NumPy INTERFACE IMPORTED)
2760 set_property (TARGET ${_PYTHON_PREFIX}::NumPy
2761 PROPERTY INTERFACE_INCLUDE_DIRECTORIES
"${${_PYTHON_PREFIX}_NumPy_INCLUDE_DIRS}")
2762 target_link_libraries (${_PYTHON_PREFIX}::NumPy INTERFACE ${_PYTHON_PREFIX}::Module)
2768 # Restore CMAKE_FIND_APPBUNDLE 2769 if (DEFINED _${_PYTHON_PREFIX}_CMAKE_FIND_APPBUNDLE)
2770 set (CMAKE_FIND_APPBUNDLE ${_${_PYTHON_PREFIX}_CMAKE_FIND_APPBUNDLE})
2771 unset (_${_PYTHON_PREFIX}_CMAKE_FIND_APPBUNDLE)
2773 unset (CMAKE_FIND_APPBUNDLE)
2775 # Restore CMAKE_FIND_FRAMEWORK 2776 if (DEFINED _${_PYTHON_PREFIX}_CMAKE_FIND_FRAMEWORK)
2777 set (CMAKE_FIND_FRAMEWORK ${_${_PYTHON_PREFIX}_CMAKE_FIND_FRAMEWORK})
2778 unset (_${_PYTHON_PREFIX}_CMAKE_FIND_FRAMEWORK)
2780 unset (CMAKE_FIND_FRAMEWORK)
boost::graph_traits< vtkGraph *>::vertex_descriptor target(boost::graph_traits< vtkGraph *>::edge_descriptor e, vtkGraph *)
function _PYTHON_GET_NAMES(_PYTHON_PGN_NAMES)
macro _PYTHON_DISPLAY_FAILURE(_PYTHON_MSG)
function _PYTHON_VALIDATE_LIBRARY()
macro _PYTHON_SELECT_LIBRARY_CONFIGURATIONS(_PYTHON_BASENAME)
function _PYTHON_GET_FRAMEWORKS(_PYTHON_PGF_FRAMEWORK_PATHS, _PYTHON_VERSION)
function _PYTHON_VALIDATE_COMPILER(expected_version)
function _PYTHON_MARK_AS_INTERNAL()
function _PYTHON_GET_PATH_SUFFIXES(_PYTHON_PGPS_PATH_SUFFIXES)
void save(Archiver &ar, const vtkUnicodeString &str, const unsigned int vtkNotUsed(version))
function _PYTHON_GET_ABIFLAGS(_PGABIFLAGS)
function _PYTHON_VALIDATE_INTERPRETER()
function _PYTHON_FIND_RUNTIME_LIBRARY(_PYTHON_LIB)
macro _PYTHON_FIND_FRAMEWORKS()
function _PYTHON_GET_REGISTRIES(_PYTHON_PGR_REGISTRY_PATHS, _PYTHON_VERSION)
function _PYTHON_GET_VERSION()
function _PYTHON_VALIDATE_INCLUDE_DIR()
function _PYTHON_CHECK_DEVELOPMENT_SIGNATURE(module)
function _PYTHON_GET_CONFIG_VAR(_PYTHON_PGCV_VALUE, NAME)