From c84546e828443ddbe94b87d2f34a1dd8662d436c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=A4rkl?= Date: Fri, 22 Mar 2019 21:54:51 +0100 Subject: [PATCH] Extend FindPySide2.cmake and FindShiboken2.cmake for current versions (#1358) --- src/CMakeLists.txt | 1 - src/cmake/FindPySide2.cmake | 41 ++++++++++++++++++--- src/cmake/FindShiboken2.cmake | 69 +++++++++++++++++++++++++++++------ 3 files changed, 93 insertions(+), 18 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 081d9885..3e213f98 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -89,7 +89,6 @@ if(CUTTER_ENABLE_PYTHON) find_package(Shiboken2 "${Qt5_VERSION}" REQUIRED) find_package(PySide2 "${Qt5_VERSION}" REQUIRED) - set(PYSIDE_LIBRARY PySide2::pyside2) get_target_property(PYSIDE_INCLUDE_DIR PySide2::pyside2 INTERFACE_INCLUDE_DIRECTORIES) list(GET PYSIDE_INCLUDE_DIR 0 PYSIDE_INCLUDE_DIR) include_directories(${PYSIDE_INCLUDE_DIR} diff --git a/src/cmake/FindPySide2.cmake b/src/cmake/FindPySide2.cmake index c9f71072..1b6faf40 100644 --- a/src/cmake/FindPySide2.cmake +++ b/src/cmake/FindPySide2.cmake @@ -2,6 +2,7 @@ set(_module PySide2) find_package(${_module} ${${_module}_FIND_VERSION} CONFIG QUIET) +set(_lib_target ${_module}::pyside2) if(NOT ${_module}_FOUND) include(PythonInfo) @@ -23,13 +24,41 @@ if(NOT ${_module}_FOUND) PATH_SUFFIXES "${PYTHON_SITE_PACKAGES}/PySide2/typesystems") endif() -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(${_module} - FOUND_VAR ${_module}_FOUND - REQUIRED_VARS PYSIDE_LIBRARY PYSIDE_INCLUDE_DIR PYSIDE_TYPESYSTEMS - VERSION_VAR ${_module}_VERSION) +if(TARGET ${_lib_target}) + get_target_property(_is_imported ${_lib_target} IMPORTED) + if(_is_imported) + get_target_property(_imported_location ${_lib_target} IMPORTED_LOCATION) + if(NOT _imported_location) + message(STATUS "Target ${_lib_target} does not specify its IMPORTED_LOCATION! Trying to find it ourselves...") + set(_find_args) + if(${_module}_CONFIG) + get_filename_component(_pyside2_lib_dir "${${_module}_CONFIG}/../../../" ABSOLUTE) + set(_find_args PATHS "${_pyside2_lib_dir}") + endif() + find_library(PYSIDE_LIBRARY + NAMES + "pyside2${PYTHON_CONFIG_SUFFIX}" + "pyside2${PYTHON_CONFIG_SUFFIX}.${${_module}_FIND_VERSION_MAJOR}.${${_module}_FIND_VERSION_MINOR}" + ${_find_args}) + if(NOT PYSIDE_LIBRARY) + set(_message_type WARNING) + if(${_module}_FIND_REQUIRED) + set(_message_type FATAL_ERROR) + endif() + message(${_message_type} "Failed to manually find library for ${_module}") + return() + endif() + message(STATUS "IMPORTED_LOCATION for ${_lib_target} found: ${PYSIDE_LIBRARY}") + set_target_properties(${_lib_target} PROPERTIES IMPORTED_LOCATION "${PYSIDE_LIBRARY}") + endif() + endif() +else() + include(FindPackageHandleStandardArgs) + find_package_handle_standard_args(${_module} + FOUND_VAR ${_module}_FOUND + REQUIRED_VARS PYSIDE_LIBRARY PYSIDE_INCLUDE_DIR PYSIDE_TYPESYSTEMS + VERSION_VAR ${_module}_VERSION) -if(NOT TARGET ${_module}::pyside2) add_library(${_module}::pyside2 INTERFACE IMPORTED) set_target_properties(${_module}::pyside2 PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${PYSIDE_INCLUDE_DIR}" diff --git a/src/cmake/FindShiboken2.cmake b/src/cmake/FindShiboken2.cmake index 41356b17..0d39965c 100644 --- a/src/cmake/FindShiboken2.cmake +++ b/src/cmake/FindShiboken2.cmake @@ -1,7 +1,9 @@ set(_module Shiboken2) -find_package(${_module} ${${_module}_FIND_VERSION} CONFIG QUIET) +find_package(${_module} ${${_module}_FIND_VERSION} CONFIG) +set(_executable_target ${_module}::shiboken2) +set(_lib_target ${_module}::libshiboken) if(NOT ${_module}_FOUND) include(PythonInfo) @@ -23,20 +25,65 @@ if(NOT ${_module}_FOUND) PATH_SUFFIXES "${PYTHON_SITE_PACKAGES}/shiboken2_generator") endif() -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(${_module} - FOUND_VAR ${_module}_FOUND - REQUIRED_VARS SHIBOKEN_LIBRARY SHIBOKEN_INCLUDE_DIR SHIBOKEN_BINARY - VERSION_VAR ${_module}_VERSION) +if(TARGET ${_executable_target}) + get_target_property(_is_imported ${_executable_target} IMPORTED) + if(_is_imported) + get_target_property(_imported_location ${_executable_target} IMPORTED_LOCATION) + if(NOT _imported_location) + message(STATUS "Target ${_executable_target} does not specify its IMPORTED_LOCATION! Trying to find it ourselves...") + find_file(SHIBOKEN_BINARY + shiboken2 + PATHS "${SHIBOKEN_SHARED_LIBRARY_DIR}/../bin" + NO_DEFAULT_PATH) + if(NOT SHIBOKEN_BINARY) + set(_message_type WARNING) + if(${_module}_FIND_REQUIRED) + set(_message_type FATAL_ERROR) + endif() + message(${_message_type} "Failed to manually find executable for ${_module}") + return() + endif() + message(STATUS "IMPORTED_LOCATION for ${_executable_target} found: ${SHIBOKEN_BINARY}") + set_target_properties(${_executable_target} PROPERTIES IMPORTED_LOCATION "${SHIBOKEN_BINARY}") + endif() + endif() -if(NOT TARGET ${_module}::shiboken2) - add_library(${_module}::libshiboken INTERFACE IMPORTED) - set_target_properties(${_module}::libshiboken PROPERTIES + get_target_property(_is_imported ${_lib_target} IMPORTED) + if(_is_imported) + get_target_property(_imported_location ${_lib_target} IMPORTED_LOCATION) + if(NOT _imported_location) + message(STATUS "Target ${_lib_target} does not specify its IMPORTED_LOCATION! Trying to find it ourselves...") + find_library(SHIBOKEN_LIBRARY + NAMES + "shiboken2${SHIBOKEN_PYTHON_EXTENSION_SUFFIX}" + "shiboken2${SHIBOKEN_PYTHON_EXTENSION_SUFFIX}.${${_module}_FIND_VERSION_MAJOR}.${${_module}_FIND_VERSION_MINOR}" + PATHS "${SHIBOKEN_SHARED_LIBRARY_DIR}") + if(NOT SHIBOKEN_LIBRARY) + set(_message_type WARNING) + if(${_module}_FIND_REQUIRED) + set(_message_type FATAL_ERROR) + endif() + message(${_message_type} "Failed to manually find library for ${_module}") + return() + endif() + message(STATUS "IMPORTED_LOCATION for ${_lib_target} found: ${SHIBOKEN_LIBRARY}") + set_target_properties(${_lib_target} PROPERTIES IMPORTED_LOCATION "${SHIBOKEN_LIBRARY}") + endif() + endif() +else() + include(FindPackageHandleStandardArgs) + find_package_handle_standard_args(${_module} + FOUND_VAR ${_module}_FOUND + REQUIRED_VARS SHIBOKEN_LIBRARY SHIBOKEN_INCLUDE_DIR SHIBOKEN_BINARY + VERSION_VAR ${_module}_VERSION) + + add_library(${_lib_target} INTERFACE IMPORTED) + set_target_properties(${_lib_target} PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${SHIBOKEN_INCLUDE_DIR}" INTERFACE_LINK_LIBRARIES "${SHIBOKEN_LIBRARY}") - add_executable(${_module}::shiboken2 IMPORTED) - set_target_properties(${_module}::shiboken2 PROPERTIES + add_executable(${_executable_target} IMPORTED) + set_target_properties(${_executable_target} PROPERTIES IMPORTED_LOCATION "${SHIBOKEN_BINARY}") endif()