diff --git a/.krazy b/.krazy index 0f596307..65bd6b23 100644 --- a/.krazy +++ b/.krazy @@ -19,5 +19,5 @@ SKIP /KDDockWidgetsConfig.cmake.in #skip more files SKIP CMakePresets.json #skip the borrowed code in the cmake subdir -SKIP /cmake/Qt5Portability.cmake|/cmake/ECM/|/cmake/InstallLocation.cmake +SKIP /cmake/InstallLocation.cmake|/cmake/ECM/|/cmake/KDAB/ diff --git a/CMakeLists.txt b/CMakeLists.txt index 3d1b2c64..a094fa10 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -140,7 +140,6 @@ option(${PROJECT_NAME}_WERROR "Use -Werror (will be true for developer-mode unco list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/ECM/modules") list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/KDAB/modules") -list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/Python") #Always build the test harness in developer-mode if(${PROJECT_NAME}_DEVELOPER_MODE) diff --git a/Changelog b/Changelog index add00132..5771c0b6 100644 --- a/Changelog +++ b/Changelog @@ -1,8 +1,8 @@ * v1.5.0 (unreleased) - - + - Install the Python bindings to "site-packages" * v1.4.1 (unreleased) - - + - * v1.4.0 (16 July 2021) - No longer supports Qt versions less than 5.12 diff --git a/cmake/Python/FindPySide2.cmake b/cmake/KDAB/modules/FindPySide2.cmake similarity index 78% rename from cmake/Python/FindPySide2.cmake rename to cmake/KDAB/modules/FindPySide2.cmake index 7ebb33d0..8cbe370d 100644 --- a/cmake/Python/FindPySide2.cmake +++ b/cmake/KDAB/modules/FindPySide2.cmake @@ -1,10 +1,8 @@ # -# SPDX-FileCopyrightText: 2020-2021 Klarälvdalens Datakonsult AB, a KDAB Group company +# SPDX-FileCopyrightText: 2019-2021 Klarälvdalens Datakonsult AB, a KDAB Group company # Author: Renato Araujo Oliveira Filho # -# SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only -# -# Contact KDAB at for commercial licensing options. +# SPDX-License-Identifier: BSD-3-Clause # # PYSIDE_BASEDIR - Top of the PySide2 installation @@ -17,7 +15,7 @@ find_package(PkgConfig) if(PKG_CONFIG_FOUND) - pkg_check_modules(PYSIDE2_PRIV QUIET pyside2) + pkg_check_modules(PYSIDE2_PRIV QUIET pyside2) endif() set(PYSIDE2_FOUND FALSE) @@ -48,13 +46,13 @@ else() execute_process( COMMAND ${Python3_EXECUTABLE} -c "if True: - import os, sys - try: - import PySide2.QtCore as QtCore - print(os.path.dirname(QtCore.__file__)) - except Exception as error: - print(error, file=sys.stderr) - exit() + import os, sys + try: + import PySide2.QtCore as QtCore + print(os.path.dirname(QtCore.__file__)) + except Exception as error: + print(error, file=sys.stderr) + exit() " OUTPUT_VARIABLE PYSIDE2_BASEDIR OUTPUT_STRIP_TRAILING_WHITESPACE @@ -64,9 +62,9 @@ else() set(PYSIDE_BASEDIR ${PYSIDE2_BASEDIR} CACHE PATH "Top level install of PySide2" FORCE) execute_process( COMMAND ${Python3_EXECUTABLE} -c "if True: - import os - import PySide2.QtCore as QtCore - print(os.path.basename(QtCore.__file__).split('.', 1)[1]) + import os + import PySide2.QtCore as QtCore + print(os.path.basename(QtCore.__file__).split('.', 1)[1]) " OUTPUT_VARIABLE PYSIDE2_SUFFIX OUTPUT_STRIP_TRAILING_WHITESPACE @@ -74,9 +72,9 @@ else() execute_process( COMMAND ${Python3_EXECUTABLE} -c "if True: - import os - import PySide2.QtCore as QtCore - print(';'.join(map(str, QtCore.__version_info__))) + import os + import PySide2.QtCore as QtCore + print(';'.join(map(str, QtCore.__version_info__))) " OUTPUT_VARIABLE PYSIDE2_SO_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE @@ -88,17 +86,17 @@ else() if(NOT APPLE) set(PYSIDE2_SUFFIX "${PYSIDE2_SUFFIX}.${PYSIDE2_SO_MACRO_VERSION}.${PYSIDE2_SO_MICRO_VERSION}") - else() + else() string(REPLACE ".so" "" PYSIDE2_SUFFIX ${PYSIDE2_SUFFIX}) set(PYSIDE2_SUFFIX "${PYSIDE2_SUFFIX}.${PYSIDE2_SO_MACRO_VERSION}.${PYSIDE2_SO_MICRO_VERSION}.dylib") endif() set(PYSIDE2_FOUND TRUE) - message(STATUS "PySide2 base dir: ${PYSIDE2_BASEDIR}" ) + message(STATUS "PySide2 base dir: ${PYSIDE2_BASEDIR}") message(STATUS "PySide2 suffix: ${PYSIDE2_SUFFIX}") endif() - if (PYSIDE2_FOUND) + if(PYSIDE2_FOUND) #PySide #=============================================================================== find_path(PYSIDE_INCLUDE_DIR @@ -108,13 +106,13 @@ else() # Platform specific library names if(MSVC) - SET(PYSIDE_LIBRARY_BASENAMES "pyside2.abi3.lib") + set(PYSIDE_LIBRARY_BASENAMES "pyside2.abi3.lib") elseif(CYGWIN) - SET(PYSIDE_LIBRARY_BASENAMES "") + set(PYSIDE_LIBRARY_BASENAMES "") elseif(WIN32) - SET(PYSIDE_LIBRARY_BASENAMES "libpyside2.${PYSIDE2_SUFFIX}") + set(PYSIDE_LIBRARY_BASENAMES "libpyside2.${PYSIDE2_SUFFIX}") else() - SET(PYSIDE_LIBRARY_BASENAMES "libpyside2.${PYSIDE2_SUFFIX}") + set(PYSIDE_LIBRARY_BASENAMES "libpyside2.${PYSIDE2_SUFFIX}") endif() find_file(PYSIDE_LIBRARY @@ -138,11 +136,9 @@ if(PYSIDE2_FOUND) # Create PySide2 target add_library(PySide2::pyside2 SHARED IMPORTED GLOBAL) if(MSVC) - set_property(TARGET PySide2::pyside2 PROPERTY - IMPORTED_IMPLIB ${PYSIDE_LIBRARY}) + set_property(TARGET PySide2::pyside2 PROPERTY IMPORTED_IMPLIB ${PYSIDE_LIBRARY}) endif() - set_property(TARGET PySide2::pyside2 PROPERTY - IMPORTED_LOCATION ${PYSIDE_LIBRARY}) + set_property(TARGET PySide2::pyside2 PROPERTY IMPORTED_LOCATION ${PYSIDE_LIBRARY}) set_property(TARGET PySide2::pyside2 APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${PYSIDE_INCLUDE_DIR} @@ -153,7 +149,6 @@ if(PYSIDE2_FOUND) ) endif() - find_package_handle_standard_args(PySide2 REQUIRED_VARS PYSIDE2_BASEDIR PYSIDE_INCLUDE_DIR PYSIDE_LIBRARY PYSIDE_TYPESYSTEMS VERSION_VAR PYSIDE2_SO_VERSION diff --git a/cmake/Python/FindPySide6.cmake b/cmake/KDAB/modules/FindPySide6.cmake similarity index 78% rename from cmake/Python/FindPySide6.cmake rename to cmake/KDAB/modules/FindPySide6.cmake index b3978f23..126edaeb 100644 --- a/cmake/Python/FindPySide6.cmake +++ b/cmake/KDAB/modules/FindPySide6.cmake @@ -2,9 +2,7 @@ # SPDX-FileCopyrightText: 2020-2021 Klarälvdalens Datakonsult AB, a KDAB Group company # Author: Renato Araujo Oliveira Filho # -# SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only -# -# Contact KDAB at for commercial licensing options. +# SPDX-License-Identifier: BSD-3-Clause # # PYSIDE_BASEDIR - Top of the PySide6 installation @@ -23,13 +21,13 @@ get_filename_component(PYTHON_LIBRARY_FILENAME ${PYTHON_LIBRARY_FILENAME} NAME) execute_process( COMMAND ${Python3_EXECUTABLE} -c "if True: - import os, sys - try: - import PySide6.QtCore as QtCore - print(os.path.dirname(QtCore.__file__)) - except Exception as error: - print(error, file=sys.stderr) - exit() + import os, sys + try: + import PySide6.QtCore as QtCore + print(os.path.dirname(QtCore.__file__)) + except Exception as error: + print(error, file=sys.stderr) + exit() " OUTPUT_VARIABLE PYSIDE6_BASEDIR OUTPUT_STRIP_TRAILING_WHITESPACE @@ -39,9 +37,9 @@ if(PYSIDE6_BASEDIR) set(PYSIDE_BASEDIR ${PYSIDE6_BASEDIR} CACHE PATH "Top level install of PySide6" FORCE) execute_process( COMMAND ${Python3_EXECUTABLE} -c "if True: - import os - import PySide6.QtCore as QtCore - print(os.path.basename(QtCore.__file__).split('.', 1)[1]) + import os + import PySide6.QtCore as QtCore + print(os.path.basename(QtCore.__file__).split('.', 1)[1]) " OUTPUT_VARIABLE PYSIDE6_SUFFIX OUTPUT_STRIP_TRAILING_WHITESPACE @@ -49,9 +47,9 @@ if(PYSIDE6_BASEDIR) execute_process( COMMAND ${Python3_EXECUTABLE} -c "if True: - import os - import PySide6.QtCore as QtCore - print(';'.join(map(str, QtCore.__version_info__))) + import os + import PySide6.QtCore as QtCore + print(';'.join(map(str, QtCore.__version_info__))) " OUTPUT_VARIABLE PYSIDE6_SO_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE @@ -63,17 +61,17 @@ if(PYSIDE6_BASEDIR) if(NOT APPLE) set(PYSIDE6_SUFFIX "${PYSIDE6_SUFFIX}.${PYSIDE6_SO_MACRO_VERSION}.${PYSIDE6_SO_MICRO_VERSION}") - else() + else() string(REPLACE ".so" "" PYSIDE6_SUFFIX ${PYSIDE6_SUFFIX}) set(PYSIDE6_SUFFIX "${PYSIDE6_SUFFIX}.${PYSIDE6_SO_MACRO_VERSION}.${PYSIDE6_SO_MICRO_VERSION}.dylib") endif() set(PYSIDE6_FOUND TRUE) - message(STATUS "PySide6 base dir: ${PYSIDE6_BASEDIR}" ) + message(STATUS "PySide6 base dir: ${PYSIDE6_BASEDIR}") message(STATUS "PySide6 suffix: ${PYSIDE6_SUFFIX}") endif() -if (PYSIDE6_FOUND) +if(PYSIDE6_FOUND) #PySide #=============================================================================== find_path(PYSIDE_INCLUDE_DIR @@ -83,13 +81,13 @@ if (PYSIDE6_FOUND) # Platform specific library names if(MSVC) - SET(PYSIDE_LIBRARY_BASENAMES "pyside6.abi3.lib") + set(PYSIDE_LIBRARY_BASENAMES "pyside6.abi3.lib") elseif(CYGWIN) - SET(PYSIDE_LIBRARY_BASENAMES "") + set(PYSIDE_LIBRARY_BASENAMES "") elseif(WIN32) - SET(PYSIDE_LIBRARY_BASENAMES "libpyside6.${PYSIDE6_SUFFIX}") + set(PYSIDE_LIBRARY_BASENAMES "libpyside6.${PYSIDE6_SUFFIX}") else() - SET(PYSIDE_LIBRARY_BASENAMES "libpyside6.${PYSIDE6_SUFFIX}") + set(PYSIDE_LIBRARY_BASENAMES "libpyside6.${PYSIDE6_SUFFIX}") endif() find_file(PYSIDE_LIBRARY @@ -112,11 +110,9 @@ if(PYSIDE6_FOUND) # Create PySide6 target add_library(PySide6::pyside6 SHARED IMPORTED GLOBAL) if(MSVC) - set_property(TARGET PySide6::pyside6 PROPERTY - IMPORTED_IMPLIB ${PYSIDE_LIBRARY}) + set_property(TARGET PySide6::pyside6 PROPERTY IMPORTED_IMPLIB ${PYSIDE_LIBRARY}) endif() - set_property(TARGET PySide6::pyside6 PROPERTY - IMPORTED_LOCATION ${PYSIDE_LIBRARY}) + set_property(TARGET PySide6::pyside6 PROPERTY IMPORTED_LOCATION ${PYSIDE_LIBRARY}) set_property(TARGET PySide6::pyside6 APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${PYSIDE_INCLUDE_DIR} @@ -127,7 +123,6 @@ if(PYSIDE6_FOUND) ) endif() - find_package_handle_standard_args(PySide6 REQUIRED_VARS PYSIDE6_BASEDIR PYSIDE_INCLUDE_DIR PYSIDE_LIBRARY PYSIDE_TYPESYSTEMS VERSION_VAR PYSIDE6_SO_VERSION diff --git a/cmake/Python/FindShiboken2.cmake b/cmake/KDAB/modules/FindShiboken2.cmake similarity index 68% rename from cmake/Python/FindShiboken2.cmake rename to cmake/KDAB/modules/FindShiboken2.cmake index 33dee72b..30ac56b6 100644 --- a/cmake/Python/FindShiboken2.cmake +++ b/cmake/KDAB/modules/FindShiboken2.cmake @@ -1,10 +1,8 @@ # -# SPDX-FileCopyrightText: 2020-2021 Klarälvdalens Datakonsult AB, a KDAB Group company +# SPDX-FileCopyrightText: 2019-2021 Klarälvdalens Datakonsult AB, a KDAB Group company # Author: Renato Araujo Oliveira Filho # -# SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only -# -# Contact KDAB at for commercial licensing options. +# SPDX-License-Identifier: BSD-3-Clause # # SHIBOKEN_INCLUDE_DIR - Directories to include to use SHIBOKEN @@ -17,7 +15,7 @@ find_package(PkgConfig) if(PKG_CONFIG_FOUND) - pkg_check_modules(SHIBOKEN2_PRIV QUIET shiboken2) + pkg_check_modules(SHIBOKEN2_PRIV QUIET shiboken2) endif() set(SHIBOKEN_FOUND FALSE) @@ -42,33 +40,33 @@ if(SHIBOKEN2_PRIV_FOUND) else() execute_process( COMMAND ${Python3_EXECUTABLE} -c "if True: - import os - try: - import shiboken2_generator - print(shiboken2_generator.__path__[0]) - except: - exit() + import os + try: + import shiboken2_generator + print(shiboken2_generator.__path__[0]) + except: + exit() " OUTPUT_VARIABLE SHIBOKEN_GENERATOR_BASEDIR OUTPUT_STRIP_TRAILING_WHITESPACE ) execute_process( COMMAND ${Python3_EXECUTABLE} -c "if True: - import os - try: - import shiboken2 - print(shiboken2.__path__[0]) - except: - exit() + import os + try: + import shiboken2 + print(shiboken2.__path__[0]) + except: + exit() " OUTPUT_VARIABLE SHIBOKEN_BASEDIR OUTPUT_STRIP_TRAILING_WHITESPACE ) execute_process( COMMAND ${Python3_EXECUTABLE} -c "if True: - import os - import shiboken2 - print(';'.join(filter(None, map(str, shiboken2.__version_info__)))) + import os + import shiboken2 + print(';'.join(filter(None, map(str, shiboken2.__version_info__)))) " OUTPUT_VARIABLE SHIBOKEN_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE @@ -84,32 +82,33 @@ else() if(SHIBOKEN_BASEDIR) find_path(SHIBOKEN_INCLUDE_DIR - shiboken.h - PATHS ${SHIBOKEN_CUSTOM_PREFIX} ${SHIBOKEN_GENERATOR_BASEDIR}/include - NO_DEFAULT_PATH) + shiboken.h + PATHS ${SHIBOKEN_CUSTOM_PREFIX} ${SHIBOKEN_GENERATOR_BASEDIR}/include + NO_DEFAULT_PATH + ) if(MSVC) - SET(SHIBOKEN_LIBRARY_BASENAMES "shiboken2.abi3.lib") + set(SHIBOKEN_LIBRARY_BASENAMES "shiboken2.abi3.lib") elseif(CYGWIN) - SET(SHIBOKEN_LIBRARY_BASENAMES "") + set(SHIBOKEN_LIBRARY_BASENAMES "") elseif(WIN32) - SET(SHIBOKEN_LIBRARY_BASENAMES "libshiboken2.${PYSIDE2_SUFFIX}") + set(SHIBOKEN_LIBRARY_BASENAMES "libshiboken2.${PYSIDE2_SUFFIX}") elseif(APPLE) - SET(SHIBOKEN_LIBRARY_BASENAMES - libshiboken2.abi3.dylib - libshiboken2.abi3.${SHIBOKEN_MACRO_VERSION}.dylib - libshiboken2.abi3.${SHIBOKEN_MACRO_VERSION}.${SHIBOKEN_MICRO_VERSION}.dylib - libshiboken2.abi3.${SHIBOKEN_VERSION}.dylib + set(SHIBOKEN_LIBRARY_BASENAMES + libshiboken2.abi3.dylib + libshiboken2.abi3.${SHIBOKEN_MACRO_VERSION}.dylib + libshiboken2.abi3.${SHIBOKEN_MACRO_VERSION}.${SHIBOKEN_MICRO_VERSION}.dylib + libshiboken2.abi3.${SHIBOKEN_VERSION}.dylib ) else() - SET(SHIBOKEN_LIBRARY_BASENAMES - libshiboken2.abi3.so - libshiboken2.abi3.so.${SHIBOKEN_MACRO_VERSION} - libshiboken2.abi3.so.${SHIBOKEN_MACRO_VERSION}.${SHIBOKEN_MICRO_VERSION} - libshiboken2.abi3.so.${SHIBOKEN_VERSION} + set(SHIBOKEN_LIBRARY_BASENAMES + libshiboken2.abi3.so + libshiboken2.abi3.so.${SHIBOKEN_MACRO_VERSION} + libshiboken2.abi3.so.${SHIBOKEN_MACRO_VERSION}.${SHIBOKEN_MICRO_VERSION} + libshiboken2.abi3.so.${SHIBOKEN_VERSION} ) endif() - if (NOT SHIBOKEN_INCLUDE_DIR) + if(NOT SHIBOKEN_INCLUDE_DIR) return() endif() set(SHIBOKEN_SEARCH_PATHS ${SHIBOKEN_CUSTOM_PREFIX}) @@ -126,14 +125,13 @@ else() NO_DEFAULT_PATH ) endif() - if (SHIBOKEN_INCLUDE_DIR AND SHIBOKEN_LIBRARY AND SHIBOKEN_BINARY) + if(SHIBOKEN_INCLUDE_DIR AND SHIBOKEN_LIBRARY AND SHIBOKEN_BINARY) set(SHIBOKEN_FOUND TRUE) endif() if(SHIBOKEN_FOUND) endif() - if(MSVC) # On Windows we must link to python3.dll that is a small library that links against python3x.dll # that allow us to choose any python3x.dll at runtime @@ -150,12 +148,12 @@ else() OUTPUT_STRIP_TRAILING_WHITESPACE ) else() - # On Linux and MacOs our modules should not link with any python library - # that must be handled by the main process + # On Linux and MacOs our modules should not link with any python library + # that must be handled by the main process set(PYTHON_LIMITED_LIBRARIES "") endif() endif() -if (SHIBOKEN_FOUND) +if(SHIBOKEN_FOUND) message(STATUS "Shiboken include dir: ${SHIBOKEN_INCLUDE_DIR}") message(STATUS "Shiboken library: ${SHIBOKEN_LIBRARY}") message(STATUS "Shiboken binary: ${SHIBOKEN_BINARY}") @@ -167,17 +165,17 @@ if (SHIBOKEN_FOUND) set_property(TARGET Shiboken2::libshiboken PROPERTY IMPORTED_IMPLIB ${SHIBOKEN_LIBRARY}) endif() - set_property(TARGET Shiboken2::libshiboken PROPERTY - IMPORTED_LOCATION ${SHIBOKEN_LIBRARY}) + set_property(TARGET Shiboken2::libshiboken PROPERTY IMPORTED_LOCATION ${SHIBOKEN_LIBRARY}) set_property(TARGET Shiboken2::libshiboken APPEND PROPERTY - INTERFACE_INCLUDE_DIRECTORIES ${SHIBOKEN_INCLUDE_DIR} ${Python3_INCLUDE_DIRS}) + INTERFACE_INCLUDE_DIRECTORIES ${SHIBOKEN_INCLUDE_DIR} ${Python3_INCLUDE_DIRS} + ) set_property(TARGET Shiboken2::libshiboken APPEND PROPERTY - INTERFACE_LINK_LIBRARIES ${PYTHON_LIMITED_LIBRARIES}) + INTERFACE_LINK_LIBRARIES ${PYTHON_LIMITED_LIBRARIES} + ) # Generator target add_executable(Shiboken2::shiboken IMPORTED GLOBAL) - set_property(TARGET Shiboken2::shiboken PROPERTY - IMPORTED_LOCATION ${SHIBOKEN_BINARY}) + set_property(TARGET Shiboken2::shiboken PROPERTY IMPORTED_LOCATION ${SHIBOKEN_BINARY}) endif() find_package_handle_standard_args(Shiboken2 diff --git a/cmake/Python/FindShiboken6.cmake b/cmake/KDAB/modules/FindShiboken6.cmake similarity index 67% rename from cmake/Python/FindShiboken6.cmake rename to cmake/KDAB/modules/FindShiboken6.cmake index 24b1cc7a..e7b2f564 100644 --- a/cmake/Python/FindShiboken6.cmake +++ b/cmake/KDAB/modules/FindShiboken6.cmake @@ -2,9 +2,7 @@ # SPDX-FileCopyrightText: 2020-2021 Klarälvdalens Datakonsult AB, a KDAB Group company # Author: Renato Araujo Oliveira Filho # -# SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only -# -# Contact KDAB at for commercial licensing options. +# SPDX-License-Identifier: BSD-3-Clause # # SHIBOKEN_INCLUDE_DIR - Directories to include to use SHIBOKEN @@ -15,38 +13,37 @@ # You can install Shiboken from Qt repository with # pip3 install --index-url=https://download.qt.io/official_releases/QtForPython --trusted-host download.qt.io shiboken6-generator - set(SHIBOKEN_FOUND FALSE) execute_process( COMMAND ${Python3_EXECUTABLE} -c "if True: - import os - try: - import shiboken6_generator - print(shiboken6_generator.__path__[0]) - except: - exit() + import os + try: + import shiboken6_generator + print(shiboken6_generator.__path__[0]) + except: + exit() " OUTPUT_VARIABLE SHIBOKEN_GENERATOR_BASEDIR OUTPUT_STRIP_TRAILING_WHITESPACE ) execute_process( COMMAND ${Python3_EXECUTABLE} -c "if True: - import os - try: - import shiboken6 - print(shiboken6.__path__[0]) - except: - exit() + import os + try: + import shiboken6 + print(shiboken6.__path__[0]) + except: + exit() " OUTPUT_VARIABLE SHIBOKEN_BASEDIR OUTPUT_STRIP_TRAILING_WHITESPACE ) execute_process( COMMAND ${Python3_EXECUTABLE} -c "if True: - import os - import shiboken6 - print(';'.join(filter(None, map(str, shiboken6.__version_info__)))) + import os + import shiboken6 + print(';'.join(filter(None, map(str, shiboken6.__version_info__)))) " OUTPUT_VARIABLE SHIBOKEN_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE @@ -62,32 +59,33 @@ message(STATUS "Shiboken custom path: ${SHIBOKEN_CUSTOM_PREFIX}") if(SHIBOKEN_BASEDIR) find_path(SHIBOKEN_INCLUDE_DIR - shiboken.h - PATHS ${SHIBOKEN_CUSTOM_PREFIX} ${SHIBOKEN_GENERATOR_BASEDIR}/include - NO_DEFAULT_PATH) + shiboken.h + PATHS ${SHIBOKEN_CUSTOM_PREFIX} ${SHIBOKEN_GENERATOR_BASEDIR}/include + NO_DEFAULT_PATH + ) if(MSVC) - SET(SHIBOKEN_LIBRARY_BASENAMES "shiboken6.abi3.lib") + set(SHIBOKEN_LIBRARY_BASENAMES "shiboken6.abi3.lib") elseif(CYGWIN) - SET(SHIBOKEN_LIBRARY_BASENAMES "") + set(SHIBOKEN_LIBRARY_BASENAMES "") elseif(WIN32) - SET(SHIBOKEN_LIBRARY_BASENAMES "libshiboken6.${PYSIDE2_SUFFIX}") + set(SHIBOKEN_LIBRARY_BASENAMES "libshiboken6.${PYSIDE2_SUFFIX}") elseif(APPLE) - SET(SHIBOKEN_LIBRARY_BASENAMES - libshiboken6.abi3.dylib - libshiboken6.abi3.${SHIBOKEN_MACRO_VERSION}.dylib - libshiboken6.abi3.${SHIBOKEN_MACRO_VERSION}.${SHIBOKEN_MICRO_VERSION}.dylib - libshiboken6.abi3.${SHIBOKEN_VERSION}.dylib + set(SHIBOKEN_LIBRARY_BASENAMES + libshiboken6.abi3.dylib + libshiboken6.abi3.${SHIBOKEN_MACRO_VERSION}.dylib + libshiboken6.abi3.${SHIBOKEN_MACRO_VERSION}.${SHIBOKEN_MICRO_VERSION}.dylib + libshiboken6.abi3.${SHIBOKEN_VERSION}.dylib ) else() - SET(SHIBOKEN_LIBRARY_BASENAMES - libshiboken6.abi3.so - libshiboken6.abi3.so.${SHIBOKEN_MACRO_VERSION} - libshiboken6.abi3.so.${SHIBOKEN_MACRO_VERSION}.${SHIBOKEN_MICRO_VERSION} - libshiboken6.abi3.so.${SHIBOKEN_VERSION} + set(SHIBOKEN_LIBRARY_BASENAMES + libshiboken6.abi3.so + libshiboken6.abi3.so.${SHIBOKEN_MACRO_VERSION} + libshiboken6.abi3.so.${SHIBOKEN_MACRO_VERSION}.${SHIBOKEN_MICRO_VERSION} + libshiboken6.abi3.so.${SHIBOKEN_VERSION} ) endif() - if (NOT SHIBOKEN_INCLUDE_DIR) + if(NOT SHIBOKEN_INCLUDE_DIR) return() endif() set(SHIBOKEN_SEARCH_PATHS ${SHIBOKEN_CUSTOM_PREFIX}) @@ -104,14 +102,13 @@ if(SHIBOKEN_BASEDIR) NO_DEFAULT_PATH ) endif() -if (SHIBOKEN_INCLUDE_DIR AND SHIBOKEN_LIBRARY AND SHIBOKEN_BINARY) +if(SHIBOKEN_INCLUDE_DIR AND SHIBOKEN_LIBRARY AND SHIBOKEN_BINARY) set(SHIBOKEN_FOUND TRUE) endif() if(SHIBOKEN_FOUND) endif() - if(MSVC) # On Windows we must link to python3.dll that is a small library that links against python3x.dll # that allow us to choose any python3x.dll at runtime @@ -128,12 +125,12 @@ if(MSVC) OUTPUT_STRIP_TRAILING_WHITESPACE ) else() - # On Linux and MacOs our modules should not link with any python library - # that must be handled by the main process + # On Linux and MacOs our modules should not link with any python library + # that must be handled by the main process set(PYTHON_LIMITED_LIBRARIES "") endif() -if (SHIBOKEN_FOUND) +if(SHIBOKEN_FOUND) message(STATUS "Shiboken include dir: ${SHIBOKEN_INCLUDE_DIR}") message(STATUS "Shiboken library: ${SHIBOKEN_LIBRARY}") message(STATUS "Shiboken binary: ${SHIBOKEN_BINARY}") @@ -145,17 +142,17 @@ if (SHIBOKEN_FOUND) set_property(TARGET Shiboken6::libshiboken PROPERTY IMPORTED_IMPLIB ${SHIBOKEN_LIBRARY}) endif() - set_property(TARGET Shiboken6::libshiboken PROPERTY - IMPORTED_LOCATION ${SHIBOKEN_LIBRARY}) + set_property(TARGET Shiboken6::libshiboken PROPERTY IMPORTED_LOCATION ${SHIBOKEN_LIBRARY}) set_property(TARGET Shiboken6::libshiboken APPEND PROPERTY - INTERFACE_INCLUDE_DIRECTORIES ${SHIBOKEN_INCLUDE_DIR} ${Python3_INCLUDE_DIRS}) + INTERFACE_INCLUDE_DIRECTORIES ${SHIBOKEN_INCLUDE_DIR} ${Python3_INCLUDE_DIRS} + ) set_property(TARGET Shiboken6::libshiboken APPEND PROPERTY - INTERFACE_LINK_LIBRARIES ${PYTHON_LIMITED_LIBRARIES}) + INTERFACE_LINK_LIBRARIES ${PYTHON_LIMITED_LIBRARIES} + ) # Generator target add_executable(Shiboken6::shiboken IMPORTED GLOBAL) - set_property(TARGET Shiboken6::shiboken PROPERTY - IMPORTED_LOCATION ${SHIBOKEN_BINARY}) + set_property(TARGET Shiboken6::shiboken PROPERTY IMPORTED_LOCATION ${SHIBOKEN_BINARY}) endif() find_package_handle_standard_args(Shiboken6 diff --git a/cmake/Python/PySide2ModuleBuild.cmake b/cmake/KDAB/modules/PySide2ModuleBuild.cmake similarity index 85% rename from cmake/Python/PySide2ModuleBuild.cmake rename to cmake/KDAB/modules/PySide2ModuleBuild.cmake index b8612e0f..1d61402d 100644 --- a/cmake/Python/PySide2ModuleBuild.cmake +++ b/cmake/KDAB/modules/PySide2ModuleBuild.cmake @@ -1,30 +1,28 @@ # -# SPDX-FileCopyrightText: 2020-2021 Klarälvdalens Datakonsult AB, a KDAB Group company +# SPDX-FileCopyrightText: 2019-2021 Klarälvdalens Datakonsult AB, a KDAB Group company # Author: Renato Araujo Oliveira Filho # -# SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only -# -# Contact KDAB at for commercial licensing options. +# SPDX-License-Identifier: BSD-3-Clause # -if (NOT ${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX) - SET(${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} CACHE FILEPATH "Custom path to install python bindings.") +if(NOT ${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX) + set(${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} CACHE FILEPATH "Custom path to install python bindings.") endif() message(STATUS "PYTHON INSTALL PREFIX ${${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX}") -if (WIN32) +if(WIN32) set(PATH_SEP "\;") else() set(PATH_SEP ":") endif() -if (NOT CMAKE_CXX_STANDARD) +if(NOT CMAKE_CXX_STANDARD) set(CMAKE_CXX_STANDARD 17) endif() # On macOS, check if Qt is a framework build. This affects how include paths should be handled. get_target_property(QtCore_is_framework Qt5::Core FRAMEWORK) -if (QtCore_is_framework) +if(QtCore_is_framework) # Get the path to the framework dir. list(GET Qt5Core_INCLUDE_DIRS 0 QT_INCLUDE_DIR) get_filename_component(QT_FRAMEWORK_INCLUDE_DIR "${QT_INCLUDE_DIR}/../" ABSOLUTE) @@ -46,12 +44,14 @@ endif() # --use-isnull-as-nb_nonzero: If a class have an isNull() const method, it will be used to compute # the value of boolean casts. # Example, QImage::isNull() will be used when on python side you do `if (myQImage)` -set(GENERATOR_EXTRA_FLAGS --generator-set=shiboken - --enable-parent-ctor-heuristic - --enable-pyside-extensions - --enable-return-value-heuristic - --use-isnull-as-nb_nonzero - -std=c++${CMAKE_CXX_STANDARD}) +set(GENERATOR_EXTRA_FLAGS + --generator-set=shiboken + --enable-parent-ctor-heuristic + --enable-pyside-extensions + --enable-return-value-heuristic + --use-isnull-as-nb_nonzero + -std=c++${CMAKE_CXX_STANDARD} +) # 2017-04-24 The protected hack can unfortunately not be disabled, because # Clang does produce linker errors when we disable the hack. @@ -62,8 +62,8 @@ if(WIN32 OR DEFINED AVOID_PROTECTED_HACK) endif() macro(make_path varname) - # accepts any number of path variables - string(REPLACE ";" "${PATH_SEP}" ${varname} "${ARGN}") + # accepts any number of path variables + string(REPLACE ";" "${PATH_SEP}" ${varname} "${ARGN}") endmacro() # Creates a PySide module target based on the arguments @@ -84,16 +84,16 @@ endmacro() # trigger if one of these files changes # MODULE_OUTPUT_DIR - Where the library file should be stored macro(CREATE_PYTHON_BINDINGS - LIBRARY_NAME - TYPESYSTEM_PATHS - INCLUDE_PATHS - OUTPUT_SOURCES - TARGET_INCLUDE_DIRS - TARGET_LINK_LIBRARIES - GLOBAL_INCLUDE - TYPESYSTEM_XML - DEPENDS - MODULE_OUTPUT_DIR) + LIBRARY_NAME + TYPESYSTEM_PATHS + INCLUDE_PATHS + OUTPUT_SOURCES + TARGET_INCLUDE_DIRS + TARGET_LINK_LIBRARIES + GLOBAL_INCLUDE + TYPESYSTEM_XML + DEPENDS + MODULE_OUTPUT_DIR) # Transform the path separators into something shiboken understands. make_path(shiboken_include_dirs ${INCLUDE_PATHS}) @@ -152,5 +152,5 @@ macro(CREATE_PYTHON_BINDINGS LINK_FLAGS "-undefined dynamic_lookup") endif() install(TARGETS ${TARGET_NAME} - LIBRARY DESTINATION ${${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX}/${TARGET_NAME}) + LIBRARY DESTINATION ${${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX}) endmacro() diff --git a/cmake/Python/PySide6ModuleBuild.cmake b/cmake/KDAB/modules/PySide6ModuleBuild.cmake similarity index 86% rename from cmake/Python/PySide6ModuleBuild.cmake rename to cmake/KDAB/modules/PySide6ModuleBuild.cmake index b0c62faf..808c0183 100644 --- a/cmake/Python/PySide6ModuleBuild.cmake +++ b/cmake/KDAB/modules/PySide6ModuleBuild.cmake @@ -2,29 +2,27 @@ # SPDX-FileCopyrightText: 2020-2021 Klarälvdalens Datakonsult AB, a KDAB Group company # Author: Renato Araujo Oliveira Filho # -# SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only -# -# Contact KDAB at for commercial licensing options. +# SPDX-License-Identifier: BSD-3-Clause # -if (NOT ${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX) - SET(${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} CACHE FILEPATH "Custom path to install python bindings.") +if(NOT ${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX) + set(${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} CACHE FILEPATH "Custom path to install python bindings.") endif() message(STATUS "PYTHON INSTALL PREFIX ${${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX}") -if (WIN32) +if(WIN32) set(PATH_SEP "\;") else() set(PATH_SEP ":") endif() -if (NOT CMAKE_CXX_STANDARD) +if(NOT CMAKE_CXX_STANDARD) set(CMAKE_CXX_STANDARD 17) endif() # On macOS, check if Qt is a framework build. This affects how include paths should be handled. get_target_property(QtCore_is_framework Qt6::Core FRAMEWORK) -if (QtCore_is_framework) +if(QtCore_is_framework) # Get the path to the framework dir. list(GET Qt6Core_INCLUDE_DIRS 0 QT_INCLUDE_DIR) get_filename_component(QT_FRAMEWORK_INCLUDE_DIR "${QT_INCLUDE_DIR}/../" ABSOLUTE) @@ -46,12 +44,14 @@ endif() # --use-isnull-as-nb_nonzero: If a class have an isNull() const method, it will be used to compute # the value of boolean casts. # Example, QImage::isNull() will be used when on python side you do `if (myQImage)` -set(GENERATOR_EXTRA_FLAGS --generator-set=shiboken - --enable-parent-ctor-heuristic - --enable-pyside-extensions - --enable-return-value-heuristic - --use-isnull-as-nb_nonzero - -std=c++${CMAKE_CXX_STANDARD}) +set(GENERATOR_EXTRA_FLAGS + --generator-set=shiboken + --enable-parent-ctor-heuristic + --enable-pyside-extensions + --enable-return-value-heuristic + --use-isnull-as-nb_nonzero + -std=c++${CMAKE_CXX_STANDARD} +) # 2017-04-24 The protected hack can unfortunately not be disabled, because # Clang does produce linker errors when we disable the hack. @@ -62,8 +62,8 @@ if(WIN32 OR DEFINED AVOID_PROTECTED_HACK) endif() macro(make_path varname) - # accepts any number of path variables - string(REPLACE ";" "${PATH_SEP}" ${varname} "${ARGN}") + # accepts any number of path variables + string(REPLACE ";" "${PATH_SEP}" ${varname} "${ARGN}") endmacro() # Creates a PySide module target based on the arguments @@ -84,16 +84,16 @@ endmacro() # trigger if one of these files changes # MODULE_OUTPUT_DIR - Where the library file should be stored macro(CREATE_PYTHON_BINDINGS - LIBRARY_NAME - TYPESYSTEM_PATHS - INCLUDE_PATHS - OUTPUT_SOURCES - TARGET_INCLUDE_DIRS - TARGET_LINK_LIBRARIES - GLOBAL_INCLUDE - TYPESYSTEM_XML - DEPENDS - MODULE_OUTPUT_DIR) + LIBRARY_NAME + TYPESYSTEM_PATHS + INCLUDE_PATHS + OUTPUT_SOURCES + TARGET_INCLUDE_DIRS + TARGET_LINK_LIBRARIES + GLOBAL_INCLUDE + TYPESYSTEM_XML + DEPENDS + MODULE_OUTPUT_DIR) # Transform the path separators into something shiboken understands. make_path(shiboken_include_dirs ${INCLUDE_PATHS}) diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 075746ba..e284bec6 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -8,20 +8,25 @@ # # Contact KDAB at for commercial licensing options. # - -set(PYTHON_VERSION "3.7" CACHE STRING "Use specific python version to build the project.") -find_package(Python3 ${PYTHON_VERSION} REQUIRED COMPONENTS Interpreter Development) +set(PYTHON_BINDING_NAMESPACE "PyKDDockWidgets") if(${PROJECT_NAME}_QT6) - find_package(Shiboken6 REQUIRED) - find_package(PySide6 ${Qt6Widgets_VERSION} EXACT REQUIRED) - include(PySide6ModuleBuild) set(PYSIDE_MAJOR_VERSION "6") + set(QtWidgets_VERSION ${Qt6Widgets_VERSION}) else() - find_package(Shiboken2 REQUIRED) - find_package(PySide2 ${Qt5Widgets_VERSION} EXACT REQUIRED) - include(PySide2ModuleBuild) set(PYSIDE_MAJOR_VERSION "2") + set(QtWidgets_VERSION ${Qt5Widgets_VERSION}) endif() +find_package(Python3 3.7 REQUIRED COMPONENTS Interpreter Development) +find_package(Shiboken${PYSIDE_MAJOR_VERSION} REQUIRED) +find_package(PySide${PYSIDE_MAJOR_VERSION} ${QtWidgets_VERSION} EXACT REQUIRED) + +if(NOT ${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX) + set(${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") +endif() +set(BINDINGS_DIR "${INSTALL_LIBRARY_DIR}/python${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}/site-packages/${PYTHON_BINDING_NAMESPACE}") +set(${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX "${${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX}/${BINDINGS_DIR}") + +include(PySide${PYSIDE_MAJOR_VERSION}ModuleBuild) add_subdirectory(PyKDDockWidgets) diff --git a/python/PyKDDockWidgets/CMakeLists.txt b/python/PyKDDockWidgets/CMakeLists.txt index 848a1501..e594ff25 100644 --- a/python/PyKDDockWidgets/CMakeLists.txt +++ b/python/PyKDDockWidgets/CMakeLists.txt @@ -80,4 +80,5 @@ create_python_bindings( configure_file(${CMAKE_CURRENT_SOURCE_DIR}/__init__.py.cmake ${CMAKE_CURRENT_BINARY_DIR}/__init__.py @ONLY) # install -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/__init__.py DESTINATION ${${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX}/PyKDDockWidgets) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/__init__.py + DESTINATION ${${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX}) diff --git a/python/examples/main.py b/python/examples/main.py index 73ad759a..c7a864b0 100644 --- a/python/examples/main.py +++ b/python/examples/main.py @@ -15,7 +15,7 @@ from MyMainWindow import MyMainWindow from PySide import QtWidgets, QtCore import sys -import rc_assets +#import rc_assets if __name__ == "__main__": QtWidgets.QApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)