summaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
authorRobert Griebl <robert.griebl@qt.io>2021-06-28 18:01:19 +0200
committerRobert Griebl <robert.griebl@qt.io>2021-06-30 15:56:18 +0200
commit28db22bc8a55dc57126c575b9d5381fa6548a8ba (patch)
treeb5bff1c1fa01afb6540b6c8667a8fcfefc0c0fbe /cmake
parentf4c512a152ef0bc3a47ad1887546cedcb818107c (diff)
downloadqtapplicationmanager-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.cmake77
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()