|
@@ -263,6 +263,14 @@ function (_PYTHON_GET_PATH_SUFFIXES _PYTHON_PGPS_PATH_SUFFIXES)
|
|
|
if (_PGPS_EXECUTABLE)
|
|
if (_PGPS_EXECUTABLE)
|
|
|
list (APPEND path_suffixes ${_${_PYTHON_PREFIX}_IRON_PYTHON_PATH_SUFFIXES})
|
|
list (APPEND path_suffixes ${_${_PYTHON_PREFIX}_IRON_PYTHON_PATH_SUFFIXES})
|
|
|
endif()
|
|
endif()
|
|
|
|
|
+ elseif (implementation STREQUAL "PyPy")
|
|
|
|
|
+ if (_PGPS_EXECUTABLE)
|
|
|
|
|
+ list (APPEND path_suffixes ${_${_PYTHON_PREFIX}_PYPY_EXECUTABLE_PATH_SUFFIXES})
|
|
|
|
|
+ elseif (_PGPS_LIBRARY)
|
|
|
|
|
+ list (APPEND path_suffixes ${_${_PYTHON_PREFIX}_PYPY_LIBRARY_PATH_SUFFIXES})
|
|
|
|
|
+ elseif (_PGPS_INCLUDE)
|
|
|
|
|
+ list (APPEND path_suffixes ${_${_PYTHON_PREFIX}_PYPY_INCLUDE_PATH_SUFFIXES})
|
|
|
|
|
+ endif()
|
|
|
endif()
|
|
endif()
|
|
|
endforeach()
|
|
endforeach()
|
|
|
list (REMOVE_DUPLICATES path_suffixes)
|
|
list (REMOVE_DUPLICATES path_suffixes)
|
|
@@ -333,6 +341,23 @@ function (_PYTHON_GET_NAMES _PYTHON_PGN_NAMES)
|
|
|
if (_PGN_EXECUTABLE)
|
|
if (_PGN_EXECUTABLE)
|
|
|
list (APPEND names ${_${_PYTHON_PREFIX}_IRON_PYTHON_NAMES})
|
|
list (APPEND names ${_${_PYTHON_PREFIX}_IRON_PYTHON_NAMES})
|
|
|
endif()
|
|
endif()
|
|
|
|
|
+ elseif (implementation STREQUAL "PyPy")
|
|
|
|
|
+ if (_PGN_EXECUTABLE)
|
|
|
|
|
+ list (APPEND names ${_${_PYTHON_PREFIX}_PYPY_NAMES})
|
|
|
|
|
+ elseif (_PGN_LIBRARY)
|
|
|
|
|
+ if (_PGN_WIN32)
|
|
|
|
|
+ foreach (version IN LISTS _PGN_VERSION)
|
|
|
|
|
+ string (REPLACE "." "" version_no_dots ${version})
|
|
|
|
|
+
|
|
|
|
|
+ set (name "python${version_no_dots}")
|
|
|
|
|
+ if (_PGN_DEBUG)
|
|
|
|
|
+ string (APPEND name "_d")
|
|
|
|
|
+ endif()
|
|
|
|
|
+ list (APPEND names "${name}")
|
|
|
|
|
+ endforeach()
|
|
|
|
|
+ endif()
|
|
|
|
|
+ list (APPEND names ${_${_PYTHON_PREFIX}_PYPY_LIB_NAMES})
|
|
|
|
|
+ endif()
|
|
|
endif()
|
|
endif()
|
|
|
endforeach()
|
|
endforeach()
|
|
|
|
|
|
|
@@ -484,8 +509,18 @@ function (_PYTHON_GET_VERSION)
|
|
|
set (${_PGV_PREFIX}VERSION_MINOR "${CMAKE_MATCH_2}" PARENT_SCOPE)
|
|
set (${_PGV_PREFIX}VERSION_MINOR "${CMAKE_MATCH_2}" PARENT_SCOPE)
|
|
|
set (${_PGV_PREFIX}VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}" PARENT_SCOPE)
|
|
set (${_PGV_PREFIX}VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}" PARENT_SCOPE)
|
|
|
set (${_PGV_PREFIX}ABI "${CMAKE_MATCH_3}" PARENT_SCOPE)
|
|
set (${_PGV_PREFIX}ABI "${CMAKE_MATCH_3}" PARENT_SCOPE)
|
|
|
|
|
+ elseif (_${_PYTHON_PREFIX}_LIBRARY_RELEASE MATCHES "pypy(3)?")
|
|
|
|
|
+ set (version "${CMAKE_MATCH_1}")
|
|
|
|
|
+ if (version EQUAL "3")
|
|
|
|
|
+ set (${_PGV_PREFIX}VERSION_MAJOR "3" PARENT_SCOPE)
|
|
|
|
|
+ set (${_PGV_PREFIX}VERSION "3" PARENT_SCOPE)
|
|
|
|
|
+ else()
|
|
|
|
|
+ set (${_PGV_PREFIX}VERSION_MAJOR "2" PARENT_SCOPE)
|
|
|
|
|
+ set (${_PGV_PREFIX}VERSION "2" PARENT_SCOPE)
|
|
|
endif()
|
|
endif()
|
|
|
|
|
+ set (${_PGV_PREFIX}ABI "" PARENT_SCOPE)
|
|
|
endif()
|
|
endif()
|
|
|
|
|
+ endif()
|
|
|
else()
|
|
else()
|
|
|
if (_${_PYTHON_PREFIX}_INCLUDE_DIR)
|
|
if (_${_PYTHON_PREFIX}_INCLUDE_DIR)
|
|
|
# retrieve version from header file
|
|
# retrieve version from header file
|
|
@@ -977,12 +1012,34 @@ else()
|
|
|
endif()
|
|
endif()
|
|
|
set (_${_PYTHON_PREFIX}_IRON_PYTHON_PATH_SUFFIXES net45 net40)
|
|
set (_${_PYTHON_PREFIX}_IRON_PYTHON_PATH_SUFFIXES net45 net40)
|
|
|
|
|
|
|
|
|
|
+# PyPy support
|
|
|
|
|
+if (_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR EQUAL "3")
|
|
|
|
|
+ set (_${_PYTHON_PREFIX}_PYPY_NAMES pypy3)
|
|
|
|
|
+ set (_${_PYTHON_PREFIX}_PYPY_LIB_NAMES pypy3-c)
|
|
|
|
|
+ if (WIN32)
|
|
|
|
|
+ # special name for runtime part
|
|
|
|
|
+ list (APPEND _${_PYTHON_PREFIX}_PYPY_LIB_NAMES libpypy3-c)
|
|
|
|
|
+ endif()
|
|
|
|
|
+ set (_${_PYTHON_PREFIX}_PYPY_INCLUDE_PATH_SUFFIXES lib/pypy3)
|
|
|
|
|
+else()
|
|
|
|
|
+ set (_${_PYTHON_PREFIX}_PYPY_NAMES pypy)
|
|
|
|
|
+ set (_${_PYTHON_PREFIX}_PYPY_LIB_NAMES pypy-c)
|
|
|
|
|
+ if (WIN32)
|
|
|
|
|
+ # special name for runtime part
|
|
|
|
|
+ list (APPEND _${_PYTHON_PREFIX}_PYPY_LIB_NAMES libpypy-c)
|
|
|
|
|
+ endif()
|
|
|
|
|
+ set (_${_PYTHON_PREFIX}_PYPY_INCLUDE_PATH_SUFFIXES lib/pypy)
|
|
|
|
|
+endif()
|
|
|
|
|
+set (_${_PYTHON_PREFIX}_PYPY_EXECUTABLE_PATH_SUFFIXES bin)
|
|
|
|
|
+set (_${_PYTHON_PREFIX}_PYPY_LIBRARY_PATH_SUFFIXES lib libs bin)
|
|
|
|
|
+list (APPEND _${_PYTHON_PREFIX}_PYPY_INCLUDE_PATH_SUFFIXES include)
|
|
|
|
|
+
|
|
|
# Python Implementations handling
|
|
# Python Implementations handling
|
|
|
unset (_${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS)
|
|
unset (_${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS)
|
|
|
if (DEFINED ${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS)
|
|
if (DEFINED ${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS)
|
|
|
foreach (_${_PYTHON_PREFIX}_IMPLEMENTATION IN LISTS ${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS)
|
|
foreach (_${_PYTHON_PREFIX}_IMPLEMENTATION IN LISTS ${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS)
|
|
|
- if (NOT _${_PYTHON_PREFIX}_IMPLEMENTATION MATCHES "^(CPython|IronPython)$")
|
|
|
|
|
- message (AUTHOR_WARNING "Find${_PYTHON_PREFIX}: ${_${_PYTHON_PREFIX}_IMPLEMENTATION}: invalid value for '${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS'. 'CPython' or 'IronPython' expected. Value will be ignored.")
|
|
|
|
|
|
|
+ if (NOT _${_PYTHON_PREFIX}_IMPLEMENTATION MATCHES "^(CPython|IronPython|PyPy)$")
|
|
|
|
|
+ message (AUTHOR_WARNING "Find${_PYTHON_PREFIX}: ${_${_PYTHON_PREFIX}_IMPLEMENTATION}: invalid value for '${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS'. 'CPython', 'IronPython' or 'PyPy' expected. Value will be ignored.")
|
|
|
else()
|
|
else()
|
|
|
list (APPEND _${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS ${_${_PYTHON_PREFIX}_IMPLEMENTATION})
|
|
list (APPEND _${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS ${_${_PYTHON_PREFIX}_IMPLEMENTATION})
|
|
|
endif()
|
|
endif()
|
|
@@ -996,6 +1053,8 @@ unset (_${_PYTHON_PREFIX}_INCLUDE_NAMES)
|
|
|
foreach (_${_PYTHON_PREFIX}_IMPLEMENTATION IN LISTS _${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS)
|
|
foreach (_${_PYTHON_PREFIX}_IMPLEMENTATION IN LISTS _${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS)
|
|
|
if (_${_PYTHON_PREFIX}_IMPLEMENTATION STREQUAL "CPython")
|
|
if (_${_PYTHON_PREFIX}_IMPLEMENTATION STREQUAL "CPython")
|
|
|
list (APPEND _${_PYTHON_PREFIX}_INCLUDE_NAMES "Python.h")
|
|
list (APPEND _${_PYTHON_PREFIX}_INCLUDE_NAMES "Python.h")
|
|
|
|
|
+ elseif (_${_PYTHON_PREFIX}_IMPLEMENTATION STREQUAL "PyPy")
|
|
|
|
|
+ list (APPEND _${_PYTHON_PREFIX}_INCLUDE_NAMES "PyPy.h")
|
|
|
endif()
|
|
endif()
|
|
|
endforeach()
|
|
endforeach()
|
|
|
|
|
|
|
@@ -1150,7 +1209,7 @@ unset (_${_PYTHON_PREFIX}_NumPy_REASON_FAILURE)
|
|
|
# first step, search for the interpreter
|
|
# first step, search for the interpreter
|
|
|
if ("Interpreter" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
|
|
if ("Interpreter" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
|
|
|
list (APPEND _${_PYTHON_PREFIX}_CACHED_VARS _${_PYTHON_PREFIX}_EXECUTABLE
|
|
list (APPEND _${_PYTHON_PREFIX}_CACHED_VARS _${_PYTHON_PREFIX}_EXECUTABLE
|
|
|
- _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES)
|
|
|
|
|
|
|
+ _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES)
|
|
|
if (${_PYTHON_PREFIX}_FIND_REQUIRED_Interpreter)
|
|
if (${_PYTHON_PREFIX}_FIND_REQUIRED_Interpreter)
|
|
|
list (APPEND _${_PYTHON_PREFIX}_REQUIRED_VARS ${_PYTHON_PREFIX}_EXECUTABLE)
|
|
list (APPEND _${_PYTHON_PREFIX}_REQUIRED_VARS ${_PYTHON_PREFIX}_EXECUTABLE)
|
|
|
endif()
|
|
endif()
|
|
@@ -1526,6 +1585,9 @@ if ("Interpreter" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
|
|
|
set (${_PYTHON_PREFIX}_INTERPRETER_ID "Anaconda")
|
|
set (${_PYTHON_PREFIX}_INTERPRETER_ID "Anaconda")
|
|
|
elseif (${_PYTHON_PREFIX}_INTERPRETER_ID MATCHES "Enthought")
|
|
elseif (${_PYTHON_PREFIX}_INTERPRETER_ID MATCHES "Enthought")
|
|
|
set (${_PYTHON_PREFIX}_INTERPRETER_ID "Canopy")
|
|
set (${_PYTHON_PREFIX}_INTERPRETER_ID "Canopy")
|
|
|
|
|
+ elseif (${_PYTHON_PREFIX}_INTERPRETER_ID MATCHES "PyPy ([0-9.]+)")
|
|
|
|
|
+ set (${_PYTHON_PREFIX}_INTERPRETER_ID "PyPy")
|
|
|
|
|
+ set (${_PYTHON_PREFIX}_PyPy_VERSION "${CMAKE_MATCH_1}")
|
|
|
else()
|
|
else()
|
|
|
string (REGEX REPLACE "^([^ ]+).*" "\\1" ${_PYTHON_PREFIX}_INTERPRETER_ID "${${_PYTHON_PREFIX}_INTERPRETER_ID}")
|
|
string (REGEX REPLACE "^([^ ]+).*" "\\1" ${_PYTHON_PREFIX}_INTERPRETER_ID "${${_PYTHON_PREFIX}_INTERPRETER_ID}")
|
|
|
if (${_PYTHON_PREFIX}_INTERPRETER_ID STREQUAL "Python")
|
|
if (${_PYTHON_PREFIX}_INTERPRETER_ID STREQUAL "Python")
|
|
@@ -1811,11 +1873,19 @@ if (("Development.Module" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
|
|
|
AND ((${_PYTHON_PREFIX}_Interpreter_FOUND
|
|
AND ((${_PYTHON_PREFIX}_Interpreter_FOUND
|
|
|
AND NOT ${_PYTHON_PREFIX}_INTERPRETER_ID STREQUAL "IronPython")
|
|
AND NOT ${_PYTHON_PREFIX}_INTERPRETER_ID STREQUAL "IronPython")
|
|
|
OR NOT ${_PYTHON_PREFIX}_Interpreter_FOUND))
|
|
OR NOT ${_PYTHON_PREFIX}_Interpreter_FOUND))
|
|
|
|
|
+ if (${_PYTHON_PREFIX}_Interpreter_FOUND)
|
|
|
|
|
+ # reduce possible implementations to the interpreter one
|
|
|
|
|
+ if (${_PYTHON_PREFIX}_INTERPRETER_ID STREQUAL "PyPy")
|
|
|
|
|
+ set (_${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS "PyPy")
|
|
|
|
|
+ else()
|
|
|
|
|
+ set (_${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS "CPython")
|
|
|
|
|
+ endif()
|
|
|
|
|
+ endif()
|
|
|
if ("LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS)
|
|
if ("LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS)
|
|
|
- list (APPEND _${_PYTHON_PREFIX}_CACHED_VARS _${_PYTHON_PREFIX}_LIBRARY_RELEASE
|
|
|
|
|
- _${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE
|
|
|
|
|
- _${_PYTHON_PREFIX}_LIBRARY_DEBUG
|
|
|
|
|
- _${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG)
|
|
|
|
|
|
|
+ list (APPEND _${_PYTHON_PREFIX}_CACHED_VARS _${_PYTHON_PREFIX}_LIBRARY_RELEASE
|
|
|
|
|
+ _${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE
|
|
|
|
|
+ _${_PYTHON_PREFIX}_LIBRARY_DEBUG
|
|
|
|
|
+ _${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG)
|
|
|
endif()
|
|
endif()
|
|
|
if ("INCLUDE_DIR" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS)
|
|
if ("INCLUDE_DIR" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS)
|
|
|
list (APPEND _${_PYTHON_PREFIX}_CACHED_VARS _${_PYTHON_PREFIX}_INCLUDE_DIR)
|
|
list (APPEND _${_PYTHON_PREFIX}_CACHED_VARS _${_PYTHON_PREFIX}_INCLUDE_DIR)
|
|
@@ -2265,7 +2335,8 @@ if (("Development.Module" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
|
|
|
_python_find_runtime_library (_${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE
|
|
_python_find_runtime_library (_${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE
|
|
|
NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES}
|
|
NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES}
|
|
|
NAMES_PER_DIR
|
|
NAMES_PER_DIR
|
|
|
- HINTS "${_${_PYTHON_PREFIX}_PATH}" "${_${_PYTHON_PREFIX}_PATH2}" ${_${_PYTHON_PREFIX}_HINTS}
|
|
|
|
|
|
|
+ HINTS "${_${_PYTHON_PREFIX}_PATH}"
|
|
|
|
|
+ "${_${_PYTHON_PREFIX}_PATH2}" ${_${_PYTHON_PREFIX}_HINTS}
|
|
|
PATH_SUFFIXES bin)
|
|
PATH_SUFFIXES bin)
|
|
|
endif()
|
|
endif()
|
|
|
if (_${_PYTHON_PREFIX}_LIBRARY_DEBUG)
|
|
if (_${_PYTHON_PREFIX}_LIBRARY_DEBUG)
|
|
@@ -2275,7 +2346,8 @@ if (("Development.Module" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
|
|
|
_python_find_runtime_library (_${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG
|
|
_python_find_runtime_library (_${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG
|
|
|
NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES_DEBUG}
|
|
NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES_DEBUG}
|
|
|
NAMES_PER_DIR
|
|
NAMES_PER_DIR
|
|
|
- HINTS "${_${_PYTHON_PREFIX}_PATH}" "${_${_PYTHON_PREFIX}_PATH2}" ${_${_PYTHON_PREFIX}_HINTS}
|
|
|
|
|
|
|
+ HINTS "${_${_PYTHON_PREFIX}_PATH}"
|
|
|
|
|
+ "${_${_PYTHON_PREFIX}_PATH2}" ${_${_PYTHON_PREFIX}_HINTS}
|
|
|
PATH_SUFFIXES bin)
|
|
PATH_SUFFIXES bin)
|
|
|
endif()
|
|
endif()
|
|
|
endif()
|
|
endif()
|
|
@@ -2482,6 +2554,16 @@ if (("Development.Module" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
|
|
|
set (${_PYTHON_PREFIX}_Development_FOUND TRUE)
|
|
set (${_PYTHON_PREFIX}_Development_FOUND TRUE)
|
|
|
endif()
|
|
endif()
|
|
|
|
|
|
|
|
|
|
+ if ((${_PYTHON_PREFIX}_Development.Module_FOUND
|
|
|
|
|
+ OR ${_PYTHON_PREFIX}_Development.Embed_FOUND)
|
|
|
|
|
+ AND EXISTS "${_${_PYTHON_PREFIX}_INCLUDE_DIR}/PyPy.h")
|
|
|
|
|
+ # retrieve PyPy version
|
|
|
|
|
+ file (STRINGS "${_${_PYTHON_PREFIX}_INCLUDE_DIR}/patchlevel.h" ${_PYTHON_PREFIX}_PyPy_VERSION
|
|
|
|
|
+ REGEX "^#define[ \t]+PYPY_VERSION[ \t]+\"[^\"]+\"")
|
|
|
|
|
+ string (REGEX REPLACE "^#define[ \t]+PYPY_VERSION[ \t]+\"([^\"]+)\".*" "\\1"
|
|
|
|
|
+ ${_PYTHON_PREFIX}_PyPy_VERSION "${${_PYTHON_PREFIX}_PyPy_VERSION}")
|
|
|
|
|
+ endif()
|
|
|
|
|
+
|
|
|
if (_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR VERSION_GREATER_EQUAL "3"
|
|
if (_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR VERSION_GREATER_EQUAL "3"
|
|
|
AND NOT DEFINED ${_PYTHON_PREFIX}_SOABI)
|
|
AND NOT DEFINED ${_PYTHON_PREFIX}_SOABI)
|
|
|
_python_get_config_var (${_PYTHON_PREFIX}_SOABI SOABI)
|
|
_python_get_config_var (${_PYTHON_PREFIX}_SOABI SOABI)
|