FindPython: Ensure Apple Xcode python 3 is usable

The python 3 distributed as part of Xcode requires the specification
of a 'rpath' pointing at frameowrks root for a correct execution.

Fixes: #21293
This commit is contained in:
Marc Chevrier
2020-10-12 15:45:55 +02:00
parent 3fb2112880
commit 5772ca0a53
5 changed files with 41 additions and 0 deletions

View File

@@ -2990,6 +2990,29 @@ if (("Development.Module" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
${_PYTHON_PREFIX}_PyPy_VERSION "${${_PYTHON_PREFIX}_PyPy_VERSION}")
endif()
unset(${_PYTHON_PREFIX}_LINK_OPTIONS)
if (${_PYTHON_PREFIX}_Development.Embed_FOUND AND APPLE
AND ${_PYTHON_PREFIX}_LIBRARY_RELEASE MATCHES "${CMAKE_SHARED_LIBRARY_SUFFIX}$")
# rpath must be specified if python is part of a framework
unset(_${_PYTHON_PREFIX}_is_prefix)
foreach (_${_PYTHON_PREFIX}_implementation IN LISTS _${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS)
foreach (_${_PYTHON_PREFIX}_framework IN LISTS _${_PYTHON_PREFIX}_${_${_PYTHON_PREFIX}_implementation}_FRAMEWORKS)
cmake_path (IS_PREFIX _${_PYTHON_PREFIX}_framework "${${_PYTHON_PREFIX}_LIBRARY_RELEASE}" _${_PYTHON_PREFIX}_is_prefix)
if (_${_PYTHON_PREFIX}_is_prefix)
cmake_path (GET _${_PYTHON_PREFIX}_framework PARENT_PATH _${_PYTHON_PREFIX}_framework)
set (${_PYTHON_PREFIX}_LINK_OPTIONS "LINKER:-rpath,${_${_PYTHON_PREFIX}_framework}")
break()
endif()
endforeach()
if (_${_PYTHON_PREFIX}_is_prefix)
break()
endif()
endforeach()
unset(_${_PYTHON_PREFIX}_implementation)
unset(_${_PYTHON_PREFIX}_framework)
unset(_${_PYTHON_PREFIX}_is_prefix)
endif()
if (NOT DEFINED ${_PYTHON_PREFIX}_SOABI)
_python_get_config_var (${_PYTHON_PREFIX}_SOABI SOABI)
endif()
@@ -3202,6 +3225,11 @@ if(_${_PYTHON_PREFIX}_CMAKE_ROLE STREQUAL "PROJECT")
PROPERTY INTERFACE_LINK_LIBRARIES ${_${_PYTHON_PREFIX}_LINK_LIBRARIES})
endif()
endif()
if (${_PYTHON_PREFIX}_LINK_OPTIONS
AND _${_PYTHON_PREFIX}_LIBRARY_TYPE STREQUAL "SHARED")
set_property (TARGET ${__name} PROPERTY INTERFACE_LINK_OPTIONS "${${_PYTHON_PREFIX}_LINK_OPTIONS}")
endif()
endmacro()
if (${_PYTHON_PREFIX}_Development.Embed_FOUND)