File: versiontools.cmake

package info (click to toggle)
bespokesynth 1.3.0%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 44,592 kB
  • sloc: cpp: 117,136; ansic: 18,752; python: 593; xml: 74; makefile: 4
file content (76 lines) | stat: -rw-r--r-- 3,686 bytes parent folder | download
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
# This is a multi-role CMake file. The IF branch runs on include, the ELSE
# branch runs in script mode or when re-included after setting BESPOKESRC.
if(CMAKE_PARENT_LIST_FILE AND NOT BESPOKESRC)
    # Toggle this to on by default. here's my reasoning
    # 1. Users who know what they are doing and dont want this can turn it off
    # 2. Self build users who are struggling to build won't know to turn it off but need reliable build inf
    # so having it 'on' means a few power users add an option but the bug reports on discord get more
    # version accurate
    option(BESPOKE_RELIABLE_VERSION_INFO "Update version info on every build (off: generate only at configuration time)" ON)
    function(bespoke_buildtime_version_info TARGET)
        configure_file(VersionInfo.cpp.in geninclude/VersionInfo.cpp)
        target_sources(${TARGET} PRIVATE
            ${CMAKE_CURRENT_BINARY_DIR}/geninclude/VersionInfo.cpp
            ${CMAKE_CURRENT_BINARY_DIR}/geninclude/VersionInfoBld.cpp
            )
        set(BESPOKE_BUILD_ARCH "${MSVC_CXX_ARCHITECTURE_ID}")
        if("${BESPOKE_BUILD_ARCH}" STREQUAL "")
            set(BESPOKE_BUILD_ARCH "${CMAKE_SYSTEM_PROCESSOR}")
        endif()
        if(BESPOKE_RELIABLE_VERSION_INFO)
            add_custom_target(version-info BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/geninclude/VersionInfoBld.cpp
                WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
                COMMAND ${CMAKE_COMMAND} -D CMAKE_PROJECT_VERSION_MAJOR=${CMAKE_PROJECT_VERSION_MAJOR}
                -D CMAKE_PROJECT_VERSION_MINOR=${CMAKE_PROJECT_VERSION_MINOR}
                -D BESPOKE_BUILD_ARCH="${BESPOKE_BUILD_ARCH}"
                -D BESPOKESRC=${CMAKE_SOURCE_DIR} -D BESPOKEBLD=${CMAKE_CURRENT_BINARY_DIR}
                -D WIN32=${WIN32}
                -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/versiontools.cmake
                )
            add_dependencies(${TARGET} version-info)
        else()
            set(BESPOKESRC ${CMAKE_SOURCE_DIR})
            set(BESPOKEBLD ${CMAKE_CURRENT_BINARY_DIR})
            include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/versiontools.cmake)
        endif()
    endfunction()
else()
    find_package(Git)

    if (NOT EXISTS ${BESPOKESRC}/.git)
        message(STATUS "This is not a .git checkout; Defaulting versions")
        set(GIT_BRANCH "unknown-branch")
        set(GIT_COMMIT_HASH "deadbeef")
    elseif (Git_FOUND)
        execute_process(
            COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD
            WORKING_DIRECTORY ${BESPOKESRC}
            OUTPUT_VARIABLE GIT_BRANCH
            OUTPUT_STRIP_TRAILING_WHITESPACE
            )

        execute_process(
            COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
            WORKING_DIRECTORY ${BESPOKESRC}
            OUTPUT_VARIABLE GIT_COMMIT_HASH
            OUTPUT_STRIP_TRAILING_WHITESPACE
            )
    else()
        message(STATUS "GIT EXE not found Defaulting versions")
        set(GIT_BRANCH "built-without-git")
        set(GIT_COMMIT_HASH "deadbeef")
    endif ()

    cmake_host_system_information(RESULT BESPOKE_BUILD_FQDN QUERY FQDN)

    message(STATUS "Setting up BESPOKE version")
    message(STATUS "  git hash is ${GIT_COMMIT_HASH} and branch is ${GIT_BRANCH}")
    message(STATUS "  buildhost is ${BESPOKE_BUILD_FQDN}")
    message(STATUS "  buildarch is ${BESPOKE_BUILD_ARCH}")

    string(TIMESTAMP BESPOKE_BUILD_DATE "(omitted in Debian builds)")
    string(TIMESTAMP BESPOKE_BUILD_TIME "(omitted in Debian builds)")

    message(STATUS "Configuring ${BESPOKEBLD}/geninclude/VersionInfoBld.cpp")
    configure_file(${BESPOKESRC}/Source/VersionInfoBld.cpp.in ${BESPOKEBLD}/geninclude/VersionInfoBld.cpp)
endif()