aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexandru Croitor <alexandru.croitor@qt.io>2021-10-25 15:41:43 +0200
committerAlexandru Croitor <alexandru.croitor@qt.io>2021-10-28 11:16:37 +0200
commit70209f6768a26892cb5af2732001c174015da29e (patch)
treeb359adefb94f21fa40ceb04c4aee9a1f816e78d5
parent5422a8da663709719265c717b05f7e2f8c7af345 (diff)
CMake: Dissolve generic cmake_helpers/helpers.cmake
Move PySide specific functions into a new PySideHelpers.cmake file. Keep functions used by both shiboken and pyside in a renamed ShibokHelpers.cmake file. This brings the CMake file structure more in-line with how it's structured in Qt6 itself. TODO: Ideally the pyside subproject should not include the shiboken files directly, but rather have access to those functions as a consequence of calling find_package(Shiboken6). Change-Id: I954d8be0df86a45e74b6011f8e2758026f3340fa Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> (cherry picked from commit 73415e134b75876d547667c6eeb7052f76750687)
-rw-r--r--sources/cmake_helpers/helpers.cmake265
-rw-r--r--sources/pyside6/cmake/PySideHelpers.cmake186
-rw-r--r--sources/pyside6/cmake/PySideSetup.cmake8
-rw-r--r--sources/shiboken6/cmake/ShibokenHelpers.cmake (renamed from sources/shiboken6/cmake/shiboken_helpers.cmake)79
-rw-r--r--sources/shiboken6/cmake/ShibokenSetup.cmake4
-rw-r--r--sources/shiboken6/data/CMakeLists.txt2
-rw-r--r--sources/shiboken6/data/Shiboken6Config-spec.cmake.in2
7 files changed, 273 insertions, 273 deletions
diff --git a/sources/cmake_helpers/helpers.cmake b/sources/cmake_helpers/helpers.cmake
deleted file mode 100644
index 3bc26f17d..000000000
--- a/sources/cmake_helpers/helpers.cmake
+++ /dev/null
@@ -1,265 +0,0 @@
-macro(collect_essential_modules)
-# Collect all essential modules.
-# note: the order of this list is relevant for dependencies.
-# For instance: Qt5Printsupport must come before Qt5WebKitWidgets.
-set(ALL_ESSENTIAL_MODULES
- Core
- Gui
- Widgets
- PrintSupport
- Sql
- Network
- Test
- Concurrent)
-endmacro()
-
-macro(collect_optional_modules)
-# Collect all optional modules.
-set(ALL_OPTIONAL_MODULES
- Designer
- Xml
- Help Multimedia
- MultimediaWidgets
- OpenGL
- OpenGLWidgets
- Positioning
- Location
- NetworkAuth
- Qml
- Quick
- QuickControls2
- QuickWidgets
- RemoteObjects
- Scxml
- Sensors
- SerialPort
- StateMachine
- TextToSpeech
- Charts
- Svg
- SvgWidgets
- DataVisualization
- Bluetooth)
-find_package(Qt${QT_MAJOR_VERSION}UiTools)
-if(Qt${QT_MAJOR_VERSION}UiTools_FOUND)
- list(APPEND ALL_OPTIONAL_MODULES UiTools)
-else()
- set(DISABLE_QtUiTools 1)
-endif()
-if(WIN32)
- list(APPEND ALL_OPTIONAL_MODULES AxContainer)
-endif()
-list(APPEND ALL_OPTIONAL_MODULES WebChannel WebEngineCore WebEngineWidgets
- WebEngineQuick WebSockets)
-if(NOT WIN32 AND NOT APPLE)
- list(APPEND ALL_OPTIONAL_MODULES DBus)
-endif()
-if (Qt${QT_MAJOR_VERSION}Core_VERSION VERSION_GREATER 6.0.2)
- list(APPEND ALL_OPTIONAL_MODULES 3DCore 3DRender 3DInput 3DLogic 3DAnimation 3DExtras)
-endif()
-if(WIN32)
- list(APPEND ALL_OPTIONAL_MODULES WinExtras)
-endif()
-endmacro()
-
-macro(check_os)
-set(ENABLE_UNIX "1")
-set(ENABLE_MAC "0")
-set(ENABLE_WIN "0")
-
-if(CMAKE_HOST_APPLE)
- set(ENABLE_MAC "1")
-elseif(CMAKE_HOST_WIN32)
- set(ENABLE_WIN "1")
- set(ENABLE_UNIX "0")
-elseif(NOT CMAKE_HOST_UNIX)
- message(FATAL_ERROR "OS not supported")
-endif()
-endmacro()
-
-macro(use_protected_as_public_hack)
-# 2017-04-24 The protected hack can unfortunately not be disabled, because
-# Clang does produce linker errors when we disable the hack.
-# But the ugly workaround in Python is replaced by a shiboken change.
-if(WIN32 OR DEFINED AVOID_PROTECTED_HACK)
- message(STATUS "PySide6 will be generated avoiding the protected hack!")
- set(GENERATOR_EXTRA_FLAGS ${GENERATOR_EXTRA_FLAGS} --avoid-protected-hack)
- add_definitions(-DAVOID_PROTECTED_HACK)
-else()
- message(STATUS "PySide will be generated using the protected hack!")
-endif()
-endmacro()
-
-macro(remove_skipped_modules)
-# Removing from the MODULES list the items that were defined with
-# -DSKIP_MODULES on command line
-if (SKIP_MODULES)
- foreach(s ${SKIP_MODULES})
- list(REMOVE_ITEM MODULES ${s})
- endforeach()
-endif()
-
-foreach(m ${MODULES})
- COLLECT_MODULE_IF_FOUND(${m})
- list(FIND all_module_shortnames ${m} is_module_collected)
- # If the module was collected, remove it from disabled modules list.
- if (NOT is_module_collected EQUAL -1)
- list(REMOVE_ITEM DISABLED_MODULES ${m})
- endif()
-endforeach()
-endmacro()
-
-macro(COLLECT_MODULE_IF_FOUND shortname)
- set(name "Qt${QT_MAJOR_VERSION}${shortname}")
- set(_qt_module_name "${name}")
- if ("${shortname}" STREQUAL "OpenGLFunctions")
- set(_qt_module_name "Qt${QT_MAJOR_VERSION}Gui")
- endif()
- # Determine essential/optional/missing
- set(module_state "missing")
- list(FIND ALL_ESSENTIAL_MODULES "${shortname}" essentialIndex)
- if(${essentialIndex} EQUAL -1)
- list(FIND ALL_OPTIONAL_MODULES "${shortname}" optionalIndex)
- if(NOT ${optionalIndex} EQUAL -1)
- set(module_state "optional")
- endif()
- else()
- set(module_state "essential")
- endif()
-
- # Silence warnings when optional packages are not found when doing a quiet build.
- set(quiet_argument "")
- if (QUIET_BUILD AND "${module_state}" STREQUAL "optional")
- set(quiet_argument "QUIET")
- endif()
-
- find_package(${_qt_module_name} ${quiet_argument})
- # If package is found, _name_found will be equal to 1
- set(_name_found "${_qt_module_name}_FOUND")
- # _name_dir will keep the path to the directory where the CMake rules were found
- # e.g: ~/qt5.9-install/qtbase/lib/cmake/Qt5Core or /usr/lib64/cmake/Qt5Core
- set(_name_dir "${_qt_module_name}_DIR")
- # Qt5Core will set the base path to check if all the modules are on the same
- # directory, to avoid CMake looking in another path.
- # This will be saved in a global variable at the beginning of the modules
- # collection process.
- string(FIND "${name}" "Qt${QT_MAJOR_VERSION}Core" qtcore_found)
- if(("${qtcore_found}" GREATER "0") OR ("${qtcore_found}" EQUAL "0"))
- get_filename_component(_core_abs_dir "${${_name_dir}}/../" ABSOLUTE)
- # Setting the absolute path where the Qt5Core was found
- # e.g: ~/qt5.9-install/qtbase/lib/cmake or /usr/lib64/cmake
- message(STATUS "CORE_ABS_DIR:" ${_core_abs_dir})
- endif()
-
- # Getting the absolute path for each module where the CMake was found, to
- # compare it with CORE_ABS_DIR and check if they are in the same source directory
- # e.g: ~/qt5.9-install/qtbase/lib/cmake/Qt5Script or /usr/lib64/cmake/Qt5Script
- get_filename_component(_module_dir "${${_name_dir}}" ABSOLUTE)
- string(FIND "${_module_dir}" "${_core_abs_dir}" found_basepath)
-
- # If the module was found, and also the module path is the same as the
- # Qt5Core base path, we will generate the list with the modules to be installed
- set(looked_in_message ". Looked in: ${${_name_dir}}")
- if("${${_name_found}}" AND (("${found_basepath}" GREATER "0") OR ("${found_basepath}" EQUAL "0")))
- message(STATUS "${module_state} module ${name} found (${ARGN})${looked_in_message}")
- # record the shortnames for the tests
- list(APPEND all_module_shortnames ${shortname})
- # Build Qt 5 compatibility variables
- if(${QT_MAJOR_VERSION} GREATER_EQUAL 6 AND NOT "${shortname}" STREQUAL "OpenGLFunctions")
- get_target_property(Qt6${shortname}_INCLUDE_DIRS Qt6::${shortname}
- INTERFACE_INCLUDE_DIRECTORIES)
- get_target_property(Qt6${shortname}_PRIVATE_INCLUDE_DIRS
- Qt6::${shortname}Private
- INTERFACE_INCLUDE_DIRECTORIES)
- set(Qt6${shortname}_LIBRARIES Qt::${shortname})
- endif()
- else()
- if("${module_state}" STREQUAL "optional")
- message(STATUS "optional module ${name} skipped${looked_in_message}")
- elseif("${module_state}" STREQUAL "essential")
- message(STATUS "skipped module ${name} is essential!\n"
- " We do not guarantee that all tests are working.${looked_in_message}")
- else()
- message(FATAL_ERROR "module ${name} MISSING${looked_in_message}")
- endif()
- endif()
-endmacro()
-
-macro(compute_config_py_values
- full_version_var_name
- )
- string(TIMESTAMP PACKAGE_BUILD_DATE "%Y-%m-%dT%H:%M:%S+00:00" UTC)
- if (PACKAGE_BUILD_DATE)
- set(PACKAGE_BUILD_DATE "__build_date__ = '${PACKAGE_BUILD_DATE}'")
- endif()
-
- if (PACKAGE_SETUP_PY_PACKAGE_VERSION)
- set(PACKAGE_SETUP_PY_PACKAGE_VERSION_ASSIGNMENT "__setup_py_package_version__ = '${PACKAGE_SETUP_PY_PACKAGE_VERSION}'")
- set(FINAL_PACKAGE_VERSION ${PACKAGE_SETUP_PY_PACKAGE_VERSION})
- else()
- set(FINAL_PACKAGE_VERSION ${${full_version_var_name}})
- endif()
-
- if (PACKAGE_SETUP_PY_PACKAGE_TIMESTAMP)
- set(PACKAGE_SETUP_PY_PACKAGE_TIMESTAMP_ASSIGNMENT "__setup_py_package_timestamp__ = '${PACKAGE_SETUP_PY_PACKAGE_TIMESTAMP}'")
- else()
- set(PACKAGE_SETUP_PY_PACKAGE_TIMESTAMP_ASSIGNMENT "")
- endif()
-
- find_package(Git)
- if(GIT_FOUND)
- # Check if current source folder is inside a git repo, so that commit information can be
- # queried.
- execute_process(
- COMMAND ${GIT_EXECUTABLE} rev-parse --git-dir
- OUTPUT_VARIABLE PACKAGE_SOURCE_IS_INSIDE_REPO
- ERROR_QUIET
- OUTPUT_STRIP_TRAILING_WHITESPACE)
-
- if(PACKAGE_SOURCE_IS_INSIDE_REPO)
- # Force git dates to be UTC-based.
- set(ENV{TZ} UTC)
- execute_process(
- COMMAND ${GIT_EXECUTABLE} --no-pager show --date=format-local:%Y-%m-%dT%H:%M:%S+00:00 -s --format=%cd HEAD
- OUTPUT_VARIABLE PACKAGE_BUILD_COMMIT_DATE
- OUTPUT_STRIP_TRAILING_WHITESPACE)
- if(PACKAGE_BUILD_COMMIT_DATE)
- set(PACKAGE_BUILD_COMMIT_DATE "__build_commit_date__ = '${PACKAGE_BUILD_COMMIT_DATE}'")
- endif()
- unset(ENV{TZ})
-
- execute_process(
- COMMAND ${GIT_EXECUTABLE} rev-parse HEAD
- OUTPUT_VARIABLE PACKAGE_BUILD_COMMIT_HASH
- OUTPUT_STRIP_TRAILING_WHITESPACE)
- if(PACKAGE_BUILD_COMMIT_HASH)
- set(PACKAGE_BUILD_COMMIT_HASH "__build_commit_hash__ = '${PACKAGE_BUILD_COMMIT_HASH}'")
- endif()
-
- execute_process(
- COMMAND ${GIT_EXECUTABLE} describe HEAD
- OUTPUT_VARIABLE PACKAGE_BUILD_COMMIT_HASH_DESCRIBED
- OUTPUT_STRIP_TRAILING_WHITESPACE)
- if(PACKAGE_BUILD_COMMIT_HASH_DESCRIBED)
- set(PACKAGE_BUILD_COMMIT_HASH_DESCRIBED "__build_commit_hash_described__ = '${PACKAGE_BUILD_COMMIT_HASH_DESCRIBED}'")
- endif()
-
- endif()
- endif()
-
-endmacro()
-
-# Creates a new target called "${library_name}_generator" which
-# depends on the mjb_rejected_classes.log file generated by shiboken.
-# This target is added as a dependency to ${library_name} target.
-# This file's timestamp informs cmake when the last generation was
-# done, without force-updating the timestamps of the generated class
-# cpp files.
-# In practical terms this means that changing some injection code in
-# an xml file that modifies only one specific class cpp file, will
-# not force rebuilding all the cpp files, and thus allow for better
-# incremental builds.
-macro(create_generator_target library_name)
- add_custom_target(${library_name}_generator DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/mjb_rejected_classes.log")
- add_dependencies(${library_name} ${library_name}_generator)
-endmacro()
diff --git a/sources/pyside6/cmake/PySideHelpers.cmake b/sources/pyside6/cmake/PySideHelpers.cmake
new file mode 100644
index 000000000..dc6fe22ce
--- /dev/null
+++ b/sources/pyside6/cmake/PySideHelpers.cmake
@@ -0,0 +1,186 @@
+macro(collect_essential_modules)
+ # Collect all essential modules.
+ # note: the order of this list is relevant for dependencies.
+ # For instance: Qt5Printsupport must come before Qt5WebKitWidgets.
+ set(ALL_ESSENTIAL_MODULES
+ Core
+ Gui
+ Widgets
+ PrintSupport
+ Sql
+ Network
+ Test
+ Concurrent)
+endmacro()
+
+macro(collect_optional_modules)
+ # Collect all optional modules.
+ set(ALL_OPTIONAL_MODULES
+ Designer
+ Xml
+ Help Multimedia
+ MultimediaWidgets
+ OpenGL
+ OpenGLWidgets
+ Positioning
+ Location
+ NetworkAuth
+ Qml
+ Quick
+ QuickControls2
+ QuickWidgets
+ RemoteObjects
+ Scxml
+ Sensors
+ SerialPort
+ StateMachine
+ TextToSpeech
+ Charts
+ Svg
+ SvgWidgets
+ DataVisualization
+ Bluetooth)
+ find_package(Qt${QT_MAJOR_VERSION}UiTools)
+ if(Qt${QT_MAJOR_VERSION}UiTools_FOUND)
+ list(APPEND ALL_OPTIONAL_MODULES UiTools)
+ else()
+ set(DISABLE_QtUiTools 1)
+ endif()
+ if(WIN32)
+ list(APPEND ALL_OPTIONAL_MODULES AxContainer)
+ endif()
+ list(APPEND ALL_OPTIONAL_MODULES WebChannel WebEngineCore WebEngineWidgets
+ WebEngineQuick WebSockets)
+ if(NOT WIN32 AND NOT APPLE)
+ list(APPEND ALL_OPTIONAL_MODULES DBus)
+ endif()
+ if (Qt${QT_MAJOR_VERSION}Core_VERSION VERSION_GREATER 6.0.2)
+ list(APPEND ALL_OPTIONAL_MODULES 3DCore 3DRender 3DInput 3DLogic 3DAnimation 3DExtras)
+ endif()
+ if(WIN32)
+ list(APPEND ALL_OPTIONAL_MODULES WinExtras)
+ endif()
+endmacro()
+
+macro(check_os)
+ set(ENABLE_UNIX "1")
+ set(ENABLE_MAC "0")
+ set(ENABLE_WIN "0")
+
+ if(CMAKE_HOST_APPLE)
+ set(ENABLE_MAC "1")
+ elseif(CMAKE_HOST_WIN32)
+ set(ENABLE_WIN "1")
+ set(ENABLE_UNIX "0")
+ elseif(NOT CMAKE_HOST_UNIX)
+ message(FATAL_ERROR "OS not supported")
+ endif()
+endmacro()
+
+macro(use_protected_as_public_hack)
+ # 2017-04-24 The protected hack can unfortunately not be disabled, because
+ # Clang does produce linker errors when we disable the hack.
+ # But the ugly workaround in Python is replaced by a shiboken change.
+ if(WIN32 OR DEFINED AVOID_PROTECTED_HACK)
+ message(STATUS "PySide6 will be generated avoiding the protected hack!")
+ set(GENERATOR_EXTRA_FLAGS ${GENERATOR_EXTRA_FLAGS} --avoid-protected-hack)
+ add_definitions(-DAVOID_PROTECTED_HACK)
+ else()
+ message(STATUS "PySide will be generated using the protected hack!")
+ endif()
+endmacro()
+
+macro(remove_skipped_modules)
+ # Removing from the MODULES list the items that were defined with
+ # -DSKIP_MODULES on command line
+ if(SKIP_MODULES)
+ foreach(s ${SKIP_MODULES})
+ list(REMOVE_ITEM MODULES ${s})
+ endforeach()
+ endif()
+
+ foreach(m ${MODULES})
+ collect_module_if_found(${m})
+ list(FIND all_module_shortnames ${m} is_module_collected)
+ # If the module was collected, remove it from disabled modules list.
+ if (NOT is_module_collected EQUAL -1)
+ list(REMOVE_ITEM DISABLED_MODULES ${m})
+ endif()
+ endforeach()
+endmacro()
+
+macro(collect_module_if_found shortname)
+ set(name "Qt${QT_MAJOR_VERSION}${shortname}")
+ set(_qt_module_name "${name}")
+ if ("${shortname}" STREQUAL "OpenGLFunctions")
+ set(_qt_module_name "Qt${QT_MAJOR_VERSION}Gui")
+ endif()
+ # Determine essential/optional/missing
+ set(module_state "missing")
+ list(FIND ALL_ESSENTIAL_MODULES "${shortname}" essentialIndex)
+ if(${essentialIndex} EQUAL -1)
+ list(FIND ALL_OPTIONAL_MODULES "${shortname}" optionalIndex)
+ if(NOT ${optionalIndex} EQUAL -1)
+ set(module_state "optional")
+ endif()
+ else()
+ set(module_state "essential")
+ endif()
+
+ # Silence warnings when optional packages are not found when doing a quiet build.
+ set(quiet_argument "")
+ if (QUIET_BUILD AND "${module_state}" STREQUAL "optional")
+ set(quiet_argument "QUIET")
+ endif()
+
+ find_package(${_qt_module_name} ${quiet_argument})
+ # If package is found, _name_found will be equal to 1
+ set(_name_found "${_qt_module_name}_FOUND")
+ # _name_dir will keep the path to the directory where the CMake rules were found
+ # e.g: ~/qt5.9-install/qtbase/lib/cmake/Qt5Core or /usr/lib64/cmake/Qt5Core
+ set(_name_dir "${_qt_module_name}_DIR")
+ # Qt5Core will set the base path to check if all the modules are on the same
+ # directory, to avoid CMake looking in another path.
+ # This will be saved in a global variable at the beginning of the modules
+ # collection process.
+ string(FIND "${name}" "Qt${QT_MAJOR_VERSION}Core" qtcore_found)
+ if(("${qtcore_found}" GREATER "0") OR ("${qtcore_found}" EQUAL "0"))
+ get_filename_component(_core_abs_dir "${${_name_dir}}/../" ABSOLUTE)
+ # Setting the absolute path where the Qt5Core was found
+ # e.g: ~/qt5.9-install/qtbase/lib/cmake or /usr/lib64/cmake
+ message(STATUS "CORE_ABS_DIR:" ${_core_abs_dir})
+ endif()
+
+ # Getting the absolute path for each module where the CMake was found, to
+ # compare it with CORE_ABS_DIR and check if they are in the same source directory
+ # e.g: ~/qt5.9-install/qtbase/lib/cmake/Qt5Script or /usr/lib64/cmake/Qt5Script
+ get_filename_component(_module_dir "${${_name_dir}}" ABSOLUTE)
+ string(FIND "${_module_dir}" "${_core_abs_dir}" found_basepath)
+
+ # If the module was found, and also the module path is the same as the
+ # Qt5Core base path, we will generate the list with the modules to be installed
+ set(looked_in_message ". Looked in: ${${_name_dir}}")
+ if("${${_name_found}}" AND (("${found_basepath}" GREATER "0") OR ("${found_basepath}" EQUAL "0")))
+ message(STATUS "${module_state} module ${name} found (${ARGN})${looked_in_message}")
+ # record the shortnames for the tests
+ list(APPEND all_module_shortnames ${shortname})
+ # Build Qt 5 compatibility variables
+ if(${QT_MAJOR_VERSION} GREATER_EQUAL 6 AND NOT "${shortname}" STREQUAL "OpenGLFunctions")
+ get_target_property(Qt6${shortname}_INCLUDE_DIRS Qt6::${shortname}
+ INTERFACE_INCLUDE_DIRECTORIES)
+ get_target_property(Qt6${shortname}_PRIVATE_INCLUDE_DIRS
+ Qt6::${shortname}Private
+ INTERFACE_INCLUDE_DIRECTORIES)
+ set(Qt6${shortname}_LIBRARIES Qt::${shortname})
+ endif()
+ else()
+ if("${module_state}" STREQUAL "optional")
+ message(STATUS "optional module ${name} skipped${looked_in_message}")
+ elseif("${module_state}" STREQUAL "essential")
+ message(STATUS "skipped module ${name} is essential!\n"
+ " We do not guarantee that all tests are working.${looked_in_message}")
+ else()
+ message(FATAL_ERROR "module ${name} MISSING${looked_in_message}")
+ endif()
+ endif()
+endmacro()
diff --git a/sources/pyside6/cmake/PySideSetup.cmake b/sources/pyside6/cmake/PySideSetup.cmake
index 0b7138f48..b46d09b57 100644
--- a/sources/pyside6/cmake/PySideSetup.cmake
+++ b/sources/pyside6/cmake/PySideSetup.cmake
@@ -3,12 +3,14 @@ cmake_policy(SET CMP0046 NEW)
set(QT_MAJOR_VERSION 6)
-list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/../../cmake_helpers")
+list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}")
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/../../shiboken6/cmake")
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/Macros")
-include(helpers)
-include(shiboken_helpers)
+# TODO: Don't directly include, ShibokenHelpers but rather pick it up from the installed Shiboken
+# package. Needs to support top-level build as well (Shiboken is not yet installed in that case).
+include(ShibokenHelpers)
+include(PySideHelpers)
# Don't display "up-to-date / install" messages when installing, to reduce visual clutter.
if(QUIET_BUILD)
diff --git a/sources/shiboken6/cmake/shiboken_helpers.cmake b/sources/shiboken6/cmake/ShibokenHelpers.cmake
index 2e4a23867..c17401ccc 100644
--- a/sources/shiboken6/cmake/shiboken_helpers.cmake
+++ b/sources/shiboken6/cmake/ShibokenHelpers.cmake
@@ -387,3 +387,82 @@ function(shiboken_internal_disable_pkg_config_if_needed)
shiboken_internal_disable_pkg_config()
endif()
endfunction()
+
+macro(compute_config_py_values
+ full_version_var_name
+ )
+ string(TIMESTAMP PACKAGE_BUILD_DATE "%Y-%m-%dT%H:%M:%S+00:00" UTC)
+ if (PACKAGE_BUILD_DATE)
+ set(PACKAGE_BUILD_DATE "__build_date__ = '${PACKAGE_BUILD_DATE}'")
+ endif()
+
+ if (PACKAGE_SETUP_PY_PACKAGE_VERSION)
+ set(PACKAGE_SETUP_PY_PACKAGE_VERSION_ASSIGNMENT "__setup_py_package_version__ = '${PACKAGE_SETUP_PY_PACKAGE_VERSION}'")
+ set(FINAL_PACKAGE_VERSION ${PACKAGE_SETUP_PY_PACKAGE_VERSION})
+ else()
+ set(FINAL_PACKAGE_VERSION ${${full_version_var_name}})
+ endif()
+
+ if (PACKAGE_SETUP_PY_PACKAGE_TIMESTAMP)
+ set(PACKAGE_SETUP_PY_PACKAGE_TIMESTAMP_ASSIGNMENT "__setup_py_package_timestamp__ = '${PACKAGE_SETUP_PY_PACKAGE_TIMESTAMP}'")
+ else()
+ set(PACKAGE_SETUP_PY_PACKAGE_TIMESTAMP_ASSIGNMENT "")
+ endif()
+
+ find_package(Git)
+ if(GIT_FOUND)
+ # Check if current source folder is inside a git repo, so that commit information can be
+ # queried.
+ execute_process(
+ COMMAND ${GIT_EXECUTABLE} rev-parse --git-dir
+ OUTPUT_VARIABLE PACKAGE_SOURCE_IS_INSIDE_REPO
+ ERROR_QUIET
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+ if(PACKAGE_SOURCE_IS_INSIDE_REPO)
+ # Force git dates to be UTC-based.
+ set(ENV{TZ} UTC)
+ execute_process(
+ COMMAND ${GIT_EXECUTABLE} --no-pager show --date=format-local:%Y-%m-%dT%H:%M:%S+00:00 -s --format=%cd HEAD
+ OUTPUT_VARIABLE PACKAGE_BUILD_COMMIT_DATE
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+ if(PACKAGE_BUILD_COMMIT_DATE)
+ set(PACKAGE_BUILD_COMMIT_DATE "__build_commit_date__ = '${PACKAGE_BUILD_COMMIT_DATE}'")
+ endif()
+ unset(ENV{TZ})
+
+ execute_process(
+ COMMAND ${GIT_EXECUTABLE} rev-parse HEAD
+ OUTPUT_VARIABLE PACKAGE_BUILD_COMMIT_HASH
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+ if(PACKAGE_BUILD_COMMIT_HASH)
+ set(PACKAGE_BUILD_COMMIT_HASH "__build_commit_hash__ = '${PACKAGE_BUILD_COMMIT_HASH}'")
+ endif()
+
+ execute_process(
+ COMMAND ${GIT_EXECUTABLE} describe HEAD
+ OUTPUT_VARIABLE PACKAGE_BUILD_COMMIT_HASH_DESCRIBED
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+ if(PACKAGE_BUILD_COMMIT_HASH_DESCRIBED)
+ set(PACKAGE_BUILD_COMMIT_HASH_DESCRIBED "__build_commit_hash_described__ = '${PACKAGE_BUILD_COMMIT_HASH_DESCRIBED}'")
+ endif()
+
+ endif()
+ endif()
+
+endmacro()
+
+# Creates a new target called "${library_name}_generator" which
+# depends on the mjb_rejected_classes.log file generated by shiboken.
+# This target is added as a dependency to ${library_name} target.
+# This file's timestamp informs cmake when the last generation was
+# done, without force-updating the timestamps of the generated class
+# cpp files.
+# In practical terms this means that changing some injection code in
+# an xml file that modifies only one specific class cpp file, will
+# not force rebuilding all the cpp files, and thus allow for better
+# incremental builds.
+macro(create_generator_target library_name)
+ add_custom_target(${library_name}_generator DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/mjb_rejected_classes.log")
+ add_dependencies(${library_name} ${library_name}_generator)
+endmacro()
diff --git a/sources/shiboken6/cmake/ShibokenSetup.cmake b/sources/shiboken6/cmake/ShibokenSetup.cmake
index cb6264a16..c5ab582c3 100644
--- a/sources/shiboken6/cmake/ShibokenSetup.cmake
+++ b/sources/shiboken6/cmake/ShibokenSetup.cmake
@@ -1,10 +1,8 @@
include(CheckIncludeFileCXX)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}")
-list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/../../cmake_helpers")
-include(helpers)
-include(shiboken_helpers)
+include(ShibokenHelpers)
option(BUILD_TESTS "Build tests." TRUE)
option(USE_PYTHON_VERSION "Use specific python version to build shiboken6." "")
diff --git a/sources/shiboken6/data/CMakeLists.txt b/sources/shiboken6/data/CMakeLists.txt
index fb650f74c..6dedb139f 100644
--- a/sources/shiboken6/data/CMakeLists.txt
+++ b/sources/shiboken6/data/CMakeLists.txt
@@ -53,7 +53,7 @@ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/install/Shiboken6Config${PYTHON_CONFI
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/Shiboken6ConfigVersion.cmake"
DESTINATION "${LIB_INSTALL_DIR}/cmake/Shiboken6-${shiboken6_VERSION}")
-install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../cmake/shiboken_helpers.cmake"
+install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../cmake/ShibokenHelpers.cmake"
DESTINATION "${LIB_INSTALL_DIR}/cmake/Shiboken6-${shiboken6_VERSION}")
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/shiboken6${shiboken6_SUFFIX}.pc"
diff --git a/sources/shiboken6/data/Shiboken6Config-spec.cmake.in b/sources/shiboken6/data/Shiboken6Config-spec.cmake.in
index 06518d253..077601f8a 100644
--- a/sources/shiboken6/data/Shiboken6Config-spec.cmake.in
+++ b/sources/shiboken6/data/Shiboken6Config-spec.cmake.in
@@ -14,7 +14,7 @@ set(SHIBOKEN_PYTHON_LIMITED_API "@PYTHON_LIMITED_API@")
# file (so not during a regular shiboken build, or during a super project build).
if (NOT TARGET Shiboken6::shiboken6)
include("${CMAKE_CURRENT_LIST_DIR}/Shiboken6Targets.cmake")
- include("${CMAKE_CURRENT_LIST_DIR}/shiboken_helpers.cmake")
+ include("${CMAKE_CURRENT_LIST_DIR}/ShibokenHelpers.cmake")
# Compute the python include and libraries path if needed (aka not part of super project build).
shiboken_find_required_python(@PYTHON_VERSION_MAJOR@)