|
|
@@ -24,6 +24,8 @@ else()
|
|
|
message (FATAL_ERROR "FindPython: INTERNAL ERROR")
|
|
|
endif()
|
|
|
|
|
|
+get_property(_${_PYTHON_PREFIX}_CMAKE_ROLE GLOBAL PROPERTY CMAKE_ROLE)
|
|
|
+
|
|
|
|
|
|
#
|
|
|
# helper commands
|
|
|
@@ -1133,118 +1135,120 @@ find_package_handle_standard_args (${_PYTHON_PREFIX}
|
|
|
HANDLE_COMPONENTS)
|
|
|
|
|
|
# Create imported targets and helper functions
|
|
|
-if ("Interpreter" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
|
|
|
- AND ${_PYTHON_PREFIX}_Interpreter_FOUND
|
|
|
- AND NOT TARGET ${_PYTHON_PREFIX}::Interpreter)
|
|
|
- add_executable (${_PYTHON_PREFIX}::Interpreter IMPORTED)
|
|
|
- set_property (TARGET ${_PYTHON_PREFIX}::Interpreter
|
|
|
- PROPERTY IMPORTED_LOCATION "${${_PYTHON_PREFIX}_EXECUTABLE}")
|
|
|
-endif()
|
|
|
-
|
|
|
-if ("Compiler" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
|
|
|
- AND ${_PYTHON_PREFIX}_Compiler_FOUND
|
|
|
- AND NOT TARGET ${_PYTHON_PREFIX}::Compiler)
|
|
|
- add_executable (${_PYTHON_PREFIX}::Compiler IMPORTED)
|
|
|
- set_property (TARGET ${_PYTHON_PREFIX}::Compiler
|
|
|
- PROPERTY IMPORTED_LOCATION "${${_PYTHON_PREFIX}_COMPILER}")
|
|
|
-endif()
|
|
|
-
|
|
|
-if ("Development" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
|
|
|
- AND ${_PYTHON_PREFIX}_Development_FOUND AND NOT TARGET ${_PYTHON_PREFIX}::Python)
|
|
|
+if(_${_PYTHON_PREFIX}_CMAKE_ROLE STREQUAL "PROJECT")
|
|
|
+ if ("Interpreter" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
|
|
|
+ AND ${_PYTHON_PREFIX}_Interpreter_FOUND
|
|
|
+ AND NOT TARGET ${_PYTHON_PREFIX}::Interpreter)
|
|
|
+ add_executable (${_PYTHON_PREFIX}::Interpreter IMPORTED)
|
|
|
+ set_property (TARGET ${_PYTHON_PREFIX}::Interpreter
|
|
|
+ PROPERTY IMPORTED_LOCATION "${${_PYTHON_PREFIX}_EXECUTABLE}")
|
|
|
+ endif()
|
|
|
|
|
|
- if (${_PYTHON_PREFIX}_LIBRARY_RELEASE MATCHES "${CMAKE_SHARED_LIBRARY_SUFFIX}$"
|
|
|
- OR ${_PYTHON_PREFIX}_LIBRARY_DEBUG MATCHES "${CMAKE_SHARED_LIBRARY_SUFFIX}$"
|
|
|
- OR ${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE OR ${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG)
|
|
|
- set (_${_PYTHON_PREFIX}_LIBRARY_TYPE SHARED)
|
|
|
- else()
|
|
|
- set (_${_PYTHON_PREFIX}_LIBRARY_TYPE STATIC)
|
|
|
+ if ("Compiler" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
|
|
|
+ AND ${_PYTHON_PREFIX}_Compiler_FOUND
|
|
|
+ AND NOT TARGET ${_PYTHON_PREFIX}::Compiler)
|
|
|
+ add_executable (${_PYTHON_PREFIX}::Compiler IMPORTED)
|
|
|
+ set_property (TARGET ${_PYTHON_PREFIX}::Compiler
|
|
|
+ PROPERTY IMPORTED_LOCATION "${${_PYTHON_PREFIX}_COMPILER}")
|
|
|
endif()
|
|
|
|
|
|
- add_library (${_PYTHON_PREFIX}::Python ${_${_PYTHON_PREFIX}_LIBRARY_TYPE} IMPORTED)
|
|
|
-
|
|
|
- set_property (TARGET ${_PYTHON_PREFIX}::Python
|
|
|
- PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${${_PYTHON_PREFIX}_INCLUDE_DIR}")
|
|
|
-
|
|
|
- if ((${_PYTHON_PREFIX}_LIBRARY_RELEASE AND ${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE)
|
|
|
- OR (${_PYTHON_PREFIX}_LIBRARY_DEBUG AND ${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG))
|
|
|
- # System manage shared libraries in two parts: import and runtime
|
|
|
- if (${_PYTHON_PREFIX}_LIBRARY_RELEASE AND ${_PYTHON_PREFIX}_LIBRARY_DEBUG)
|
|
|
- set_property (TARGET ${_PYTHON_PREFIX}::Python PROPERTY IMPORTED_CONFIGURATIONS RELEASE DEBUG)
|
|
|
- set_target_properties (${_PYTHON_PREFIX}::Python
|
|
|
- PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
|
|
|
- IMPORTED_IMPLIB_RELEASE "${${_PYTHON_PREFIX}_LIBRARY_RELEASE}"
|
|
|
- IMPORTED_LOCATION_RELEASE "${${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE}")
|
|
|
- set_target_properties (${_PYTHON_PREFIX}::Python
|
|
|
- PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
|
|
|
- IMPORTED_IMPLIB_DEBUG "${${_PYTHON_PREFIX}_LIBRARY_DEBUG}"
|
|
|
- IMPORTED_LOCATION_DEBUG "${${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG}")
|
|
|
+ if ("Development" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
|
|
|
+ AND ${_PYTHON_PREFIX}_Development_FOUND AND NOT TARGET ${_PYTHON_PREFIX}::Python)
|
|
|
+
|
|
|
+ if (${_PYTHON_PREFIX}_LIBRARY_RELEASE MATCHES "${CMAKE_SHARED_LIBRARY_SUFFIX}$"
|
|
|
+ OR ${_PYTHON_PREFIX}_LIBRARY_DEBUG MATCHES "${CMAKE_SHARED_LIBRARY_SUFFIX}$"
|
|
|
+ OR ${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE OR ${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG)
|
|
|
+ set (_${_PYTHON_PREFIX}_LIBRARY_TYPE SHARED)
|
|
|
else()
|
|
|
- set_target_properties (${_PYTHON_PREFIX}::Python
|
|
|
- PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "C"
|
|
|
- IMPORTED_IMPLIB "${${_PYTHON_PREFIX}_LIBRARY}"
|
|
|
- IMPORTED_LOCATION "${${_PYTHON_PREFIX}_RUNTIME_LIBRARY}")
|
|
|
+ set (_${_PYTHON_PREFIX}_LIBRARY_TYPE STATIC)
|
|
|
endif()
|
|
|
- else()
|
|
|
- if (${_PYTHON_PREFIX}_LIBRARY_RELEASE AND ${_PYTHON_PREFIX}_LIBRARY_DEBUG)
|
|
|
- set_property (TARGET ${_PYTHON_PREFIX}::Python PROPERTY IMPORTED_CONFIGURATIONS RELEASE DEBUG)
|
|
|
- set_target_properties (${_PYTHON_PREFIX}::Python
|
|
|
- PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
|
|
|
- IMPORTED_LOCATION_RELEASE "${${_PYTHON_PREFIX}_LIBRARY_RELEASE}")
|
|
|
- set_target_properties (${_PYTHON_PREFIX}::Python
|
|
|
- PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
|
|
|
- IMPORTED_LOCATION_DEBUG "${${_PYTHON_PREFIX}_LIBRARY_DEBUG}")
|
|
|
+
|
|
|
+ add_library (${_PYTHON_PREFIX}::Python ${_${_PYTHON_PREFIX}_LIBRARY_TYPE} IMPORTED)
|
|
|
+
|
|
|
+ set_property (TARGET ${_PYTHON_PREFIX}::Python
|
|
|
+ PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${${_PYTHON_PREFIX}_INCLUDE_DIR}")
|
|
|
+
|
|
|
+ if ((${_PYTHON_PREFIX}_LIBRARY_RELEASE AND ${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE)
|
|
|
+ OR (${_PYTHON_PREFIX}_LIBRARY_DEBUG AND ${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG))
|
|
|
+ # System manage shared libraries in two parts: import and runtime
|
|
|
+ if (${_PYTHON_PREFIX}_LIBRARY_RELEASE AND ${_PYTHON_PREFIX}_LIBRARY_DEBUG)
|
|
|
+ set_property (TARGET ${_PYTHON_PREFIX}::Python PROPERTY IMPORTED_CONFIGURATIONS RELEASE DEBUG)
|
|
|
+ set_target_properties (${_PYTHON_PREFIX}::Python
|
|
|
+ PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
|
|
|
+ IMPORTED_IMPLIB_RELEASE "${${_PYTHON_PREFIX}_LIBRARY_RELEASE}"
|
|
|
+ IMPORTED_LOCATION_RELEASE "${${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE}")
|
|
|
+ set_target_properties (${_PYTHON_PREFIX}::Python
|
|
|
+ PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
|
|
|
+ IMPORTED_IMPLIB_DEBUG "${${_PYTHON_PREFIX}_LIBRARY_DEBUG}"
|
|
|
+ IMPORTED_LOCATION_DEBUG "${${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG}")
|
|
|
+ else()
|
|
|
+ set_target_properties (${_PYTHON_PREFIX}::Python
|
|
|
+ PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "C"
|
|
|
+ IMPORTED_IMPLIB "${${_PYTHON_PREFIX}_LIBRARY}"
|
|
|
+ IMPORTED_LOCATION "${${_PYTHON_PREFIX}_RUNTIME_LIBRARY}")
|
|
|
+ endif()
|
|
|
else()
|
|
|
- set_target_properties (${_PYTHON_PREFIX}::Python
|
|
|
- PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "C"
|
|
|
- IMPORTED_LOCATION "${${_PYTHON_PREFIX}_LIBRARY}")
|
|
|
+ if (${_PYTHON_PREFIX}_LIBRARY_RELEASE AND ${_PYTHON_PREFIX}_LIBRARY_DEBUG)
|
|
|
+ set_property (TARGET ${_PYTHON_PREFIX}::Python PROPERTY IMPORTED_CONFIGURATIONS RELEASE DEBUG)
|
|
|
+ set_target_properties (${_PYTHON_PREFIX}::Python
|
|
|
+ PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
|
|
|
+ IMPORTED_LOCATION_RELEASE "${${_PYTHON_PREFIX}_LIBRARY_RELEASE}")
|
|
|
+ set_target_properties (${_PYTHON_PREFIX}::Python
|
|
|
+ PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
|
|
|
+ IMPORTED_LOCATION_DEBUG "${${_PYTHON_PREFIX}_LIBRARY_DEBUG}")
|
|
|
+ else()
|
|
|
+ set_target_properties (${_PYTHON_PREFIX}::Python
|
|
|
+ PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "C"
|
|
|
+ IMPORTED_LOCATION "${${_PYTHON_PREFIX}_LIBRARY}")
|
|
|
+ endif()
|
|
|
endif()
|
|
|
- endif()
|
|
|
|
|
|
- if (_${_PYTHON_PREFIX}_CONFIG AND _${_PYTHON_PREFIX}_LIBRARY_TYPE STREQUAL "STATIC")
|
|
|
- # extend link information with dependent libraries
|
|
|
- execute_process (COMMAND "${_${_PYTHON_PREFIX}_CONFIG}" --ldflags
|
|
|
- RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
|
|
|
- OUTPUT_VARIABLE _${_PYTHON_PREFIX}_FLAGS
|
|
|
- ERROR_QUIET
|
|
|
- OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
|
- if (NOT _${_PYTHON_PREFIX}_RESULT)
|
|
|
- string (REGEX MATCHALL "-[Ll][^ ]+" _${_PYTHON_PREFIX}_LINK_LIBRARIES "${_${_PYTHON_PREFIX}_FLAGS}")
|
|
|
- # remove elements relative to python library itself
|
|
|
- list (FILTER _${_PYTHON_PREFIX}_LINK_LIBRARIES EXCLUDE REGEX "-lpython")
|
|
|
- foreach (_${_PYTHON_PREFIX}_DIR IN LISTS ${_PYTHON_PREFIX}_LIBRARY_DIRS)
|
|
|
- list (FILTER _${_PYTHON_PREFIX}_LINK_LIBRARIES EXCLUDE REGEX "-L${${_PYTHON_PREFIX}_DIR}")
|
|
|
- endforeach()
|
|
|
- set_property (TARGET ${_PYTHON_PREFIX}::Python
|
|
|
- PROPERTY INTERFACE_LINK_LIBRARIES ${_${_PYTHON_PREFIX}_LINK_LIBRARIES})
|
|
|
+ if (_${_PYTHON_PREFIX}_CONFIG AND _${_PYTHON_PREFIX}_LIBRARY_TYPE STREQUAL "STATIC")
|
|
|
+ # extend link information with dependent libraries
|
|
|
+ execute_process (COMMAND "${_${_PYTHON_PREFIX}_CONFIG}" --ldflags
|
|
|
+ RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
|
|
|
+ OUTPUT_VARIABLE _${_PYTHON_PREFIX}_FLAGS
|
|
|
+ ERROR_QUIET
|
|
|
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
|
+ if (NOT _${_PYTHON_PREFIX}_RESULT)
|
|
|
+ string (REGEX MATCHALL "-[Ll][^ ]+" _${_PYTHON_PREFIX}_LINK_LIBRARIES "${_${_PYTHON_PREFIX}_FLAGS}")
|
|
|
+ # remove elements relative to python library itself
|
|
|
+ list (FILTER _${_PYTHON_PREFIX}_LINK_LIBRARIES EXCLUDE REGEX "-lpython")
|
|
|
+ foreach (_${_PYTHON_PREFIX}_DIR IN LISTS ${_PYTHON_PREFIX}_LIBRARY_DIRS)
|
|
|
+ list (FILTER _${_PYTHON_PREFIX}_LINK_LIBRARIES EXCLUDE REGEX "-L${${_PYTHON_PREFIX}_DIR}")
|
|
|
+ endforeach()
|
|
|
+ set_property (TARGET ${_PYTHON_PREFIX}::Python
|
|
|
+ PROPERTY INTERFACE_LINK_LIBRARIES ${_${_PYTHON_PREFIX}_LINK_LIBRARIES})
|
|
|
+ endif()
|
|
|
endif()
|
|
|
- endif()
|
|
|
|
|
|
- #
|
|
|
- # PYTHON_ADD_LIBRARY (<name> [STATIC|SHARED|MODULE] src1 src2 ... srcN)
|
|
|
- # It is used to build modules for python.
|
|
|
- #
|
|
|
- function (__${_PYTHON_PREFIX}_ADD_LIBRARY prefix name)
|
|
|
- cmake_parse_arguments (PARSE_ARGV 2 PYTHON_ADD_LIBRARY
|
|
|
- "STATIC;SHARED;MODULE" "" "")
|
|
|
-
|
|
|
- unset (type)
|
|
|
- if (NOT (PYTHON_ADD_LIBRARY_STATIC
|
|
|
- OR PYTHON_ADD_LIBRARY_SHARED
|
|
|
- OR PYTHON_ADD_LIBRARY_MODULE))
|
|
|
- set (type MODULE)
|
|
|
- endif()
|
|
|
- add_library (${name} ${type} ${ARGN})
|
|
|
- target_link_libraries (${name} PRIVATE ${prefix}::Python)
|
|
|
-
|
|
|
- # customize library name to follow module name rules
|
|
|
- get_property (type TARGET ${name} PROPERTY TYPE)
|
|
|
- if (type STREQUAL "MODULE_LIBRARY")
|
|
|
- set_property (TARGET ${name} PROPERTY PREFIX "")
|
|
|
- if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
|
|
- set_property (TARGET ${name} PROPERTY SUFFIX ".pyd")
|
|
|
+ #
|
|
|
+ # PYTHON_ADD_LIBRARY (<name> [STATIC|SHARED|MODULE] src1 src2 ... srcN)
|
|
|
+ # It is used to build modules for python.
|
|
|
+ #
|
|
|
+ function (__${_PYTHON_PREFIX}_ADD_LIBRARY prefix name)
|
|
|
+ cmake_parse_arguments (PARSE_ARGV 2 PYTHON_ADD_LIBRARY
|
|
|
+ "STATIC;SHARED;MODULE" "" "")
|
|
|
+
|
|
|
+ unset (type)
|
|
|
+ if (NOT (PYTHON_ADD_LIBRARY_STATIC
|
|
|
+ OR PYTHON_ADD_LIBRARY_SHARED
|
|
|
+ OR PYTHON_ADD_LIBRARY_MODULE))
|
|
|
+ set (type MODULE)
|
|
|
endif()
|
|
|
- endif()
|
|
|
- endfunction()
|
|
|
+ add_library (${name} ${type} ${ARGN})
|
|
|
+ target_link_libraries (${name} PRIVATE ${prefix}::Python)
|
|
|
+
|
|
|
+ # customize library name to follow module name rules
|
|
|
+ get_property (type TARGET ${name} PROPERTY TYPE)
|
|
|
+ if (type STREQUAL "MODULE_LIBRARY")
|
|
|
+ set_property (TARGET ${name} PROPERTY PREFIX "")
|
|
|
+ if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
|
|
+ set_property (TARGET ${name} PROPERTY SUFFIX ".pyd")
|
|
|
+ endif()
|
|
|
+ endif()
|
|
|
+ endfunction()
|
|
|
+ endif()
|
|
|
endif()
|
|
|
|
|
|
# final clean-up
|