summaryrefslogtreecommitdiff
path: root/cmake/QtAppManBuildConfig.cmake
blob: b111c2df55f3b0916cca73285260aba3c87cf444 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# 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
    if(EXISTS "${PROJECT_SOURCE_DIR}/.tag")
        file(READ ${PROJECT_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()
    else()
        set(GIT_VERSION "")
    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()