diff options
author | Robert Griebl <robert.griebl@qt.io> | 2021-06-28 18:01:19 +0200 |
---|---|---|
committer | Robert Griebl <robert.griebl@qt.io> | 2021-06-30 15:56:18 +0200 |
commit | 28db22bc8a55dc57126c575b9d5381fa6548a8ba (patch) | |
tree | b5bff1c1fa01afb6540b6c8667a8fcfefc0c0fbe /cmake | |
parent | f4c512a152ef0bc3a47ad1887546cedcb818107c (diff) | |
download | qtapplicationmanager-28db22bc8a55dc57126c575b9d5381fa6548a8ba.tar.gz |
cmake: reimplement the build-config.yaml mechanism
Also make sure to extend only existing targets
Change-Id: I4b61240568502f86a1f7b8631e6b17791d4a75f7
Reviewed-by: Dominik Holland <dominik.holland@qt.io>
Diffstat (limited to 'cmake')
-rw-r--r-- | cmake/QtAppManBuildConfig.cmake | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/cmake/QtAppManBuildConfig.cmake b/cmake/QtAppManBuildConfig.cmake new file mode 100644 index 00000000..7facc2cc --- /dev/null +++ b/cmake/QtAppManBuildConfig.cmake @@ -0,0 +1,77 @@ +# This function adds the current build configuration to the specified target +# as a YAML file named ":/build-config.yaml" via a Qt resource file. +function(qtam_internal_add_build_config target) + if(NOT TARGET "${target}") + message(FATAL_ERROR "Trying to extend non-existing target \"${target}\".") + endif() + + # get the git version, if available + file(READ ${CMAKE_SOURCE_DIR}/.tag GIT_VERSION) + STRING(REGEX REPLACE "\n" "" GIT_VERSION "${GIT_VERSION}") + if(GIT_VERSION STREQUAL "\$Format:%H\$") + set(GIT_VERSION "unknown") + if(EXISTS ${CMAKE_SOURCE_DIR}/.git) + execute_process( + COMMAND git describe --tags --always --dirty + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET + ) + endif() + endif() + + # generate the necessary strings to be backward compatible with qmake + string(TIMESTAMP _DATE_ UTC) + set(SOURCE_DIR ${CMAKE_SOURCE_DIR}) + set(BUILD_DIR ${CMAKE_BINARY_DIR}) + set(MODULE_VERSION ${PROJECT_VERSION}) + set(INSTALL_PREFIX ${QT6_INSTALL_PREFIX}) + set(QT_ARCH ${CMAKE_SYSTEM_PROCESSOR}) + set(QT_VERSION ${Qt6_VERSION}) + get_target_property(DEFINES ${target} COMPILE_DEFINITIONS) + set(DEFINES_TYPE "array") + + get_cmake_property(ALL_VARS VARIABLES) + foreach (VAR ${ALL_VARS}) + if (VAR MATCHES "^QT_FEATURE_([a-z])") + list(APPEND QT_FEATURES "${VAR}") + endif() + endforeach() + set(QT_FEATURES_TYPE "dict") + + set(build_config "${CMAKE_CURRENT_BINARY_DIR}/build-config.yaml") + file(WRITE "${build_config}" "---\n") + foreach(VAR _DATE_ MODULE_VERSION GIT_VERSION SOURCE_DIR BUILD_DIR INSTALL_PREFIX + QT_ARCH QT_VERSION QT_FEATURES DEFINES) + if(NOT VAR) + file(APPEND "${build_config}" "${VAR}: ~\n") + elseif("${${VAR}_TYPE}" STREQUAL "array") + file(APPEND "${build_config}" "${VAR}:\n") + foreach(VAL ${${VAR}}) + file(APPEND "${build_config}" " - '${VAL}'\n") + endforeach() + elseif("${${VAR}_TYPE}" STREQUAL "dict") + file(APPEND "${build_config}" "${VAR}:\n") + foreach(SUBVAR ${${VAR}}) + set(VAL ${${SUBVAR}}) + if(VAL STREQUAL "ON") + set(VAL "yes") + elseif(VAL STREQUAL "OFF") + set(VAL "no") + else() + set(VAL "'${VAL}'") + endif() + file(APPEND "${build_config}" " ${SUBVAR}: ${VAL}\n") + endforeach() + else() + file(APPEND "${build_config}" "${VAR}: '${${VAR}}'\n") + endif() + endforeach() + + qt_internal_add_resource(${target} "build-config" + PREFIX "/" + FILES "${build_config}" + BASE "${CMAKE_CURRENT_BINARY_DIR}" + ) +endfunction() |