File: DtkBuildConfig.cmake

package info (click to toggle)
dtkdeclarative 5.7.12-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 29,848 kB
  • sloc: cpp: 20,566; ansic: 66; makefile: 29; sh: 25
file content (102 lines) | stat: -rw-r--r-- 3,700 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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# This cmake file is used to deploy files that dconfig's meta and override configure.

include(CMakeParseArguments)

# generate dtk moudule config header file.
#
# MODULE_NAME   - module name.  ${MODULE_NAME}_config.h
# DEST_DIR      - used to get header file dest path, if it's empty, ${CMAKE_CURRENT_SOURCE_DIR} is used.
# HEADERS       - header files without .h extension. 
# EXT_CONTENTS  - extra contents strings.  
#
# e.g:
# set(VERSION_DEC "#define DTK_VERSION_MAJOR 5"
#                 "#define DTK_VERSION_MINOR 5"
#                 "#define DTK_VERSION_PATCH 23"
#                 "#define DTK_VERSION_BUILD 0"
#                 "#define DTK_VERSION_STR \"5.5.23\"\n")
# set(HEADERS ./DConfig ./DConfigFile ./DLog ./DObject)
# gen_dtk_config_header(MODULE_NAME dtkcore 
#                  DEST_DIR include/global
#                  HEADERS ${HEADERS}
#                  EXT_CONTENTS  ${VERSION_DEC})
#
#    filename: ${CMAKE_CURRENT_SOURCE_DIR}/include/global/dtkcore_config.h
#    ==== file content begin ====
#    // SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd.
#    //
#    // SPDX-License-Identifier: LGPL-3.0-or-later
#
#    #define DTK_VERSION_MAJOR 5
#    #define DTK_VERSION_MINOR 5
#    #define DTK_VERSION_PATCH 23
#    #define DTK_VERSION_BUILD 0
#    #define DTK_VERSION_STR "5.5.23"
#
#    #define DTKCORE_CLASS_DConfig
#    #define DTKCORE_CLASS_DConfigFile
#    #define DTKCORE_CLASS_DLog
#    #define DTKCORE_CLASS_DObject
#    ==== file content end ====
#
function(GEN_DTK_CONFIG_HEADER)
    set(oneValueArgs MODULE_NAME DEST_DIR OUTPUT_VARIABLE)
    set(multiValueArgs HEADERS EXT_CONTENTS)

    cmake_parse_arguments(_CONFIG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})

    if (DEFINED _CONFIG_MSG)
        message("MODULE_NAME: ${_CONFIG_MODULE_NAME}\n"
                "DEST_DIR: ${_CONFIG_DEST_DIR}\n"
                "HEADERS: ${_CONFIG_HEADERS}\n")
    endif()

    set(config_file_path ${CMAKE_CURRENT_SOURCE_DIR})
    if (DEFINED _CONFIG_DEST_DIR)
        set(config_file_path ${_CONFIG_DEST_DIR})
    endif()

    if (DEFINED _CONFIG_MODULE_NAME)
        string(APPEND config_file_path /${_CONFIG_MODULE_NAME}_config.h)
        message("generate file path:" ${config_file_path})
    else()
        message(FATAL_ERROR \"MODULE_NAME needs to be defined when calling gen_dtk_config_header\")
    endif()

    set(LICENSE_DEC 
    "// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd.\n"
    "//\n"
    "// SPDX-License-Identifier: LGPL-3.0-or-later\n"
    "\n")

    file(WRITE ${config_file_path} ${LICENSE_DEC})

    foreach(_ext_content ${_CONFIG_EXT_CONTENTS})
        file(APPEND ${config_file_path} "${_ext_content}\n")
    endforeach()

    foreach(_head_file ${_CONFIG_HEADERS})
        get_filename_component(classname ${_head_file} NAME)
        string(TOUPPER ${_CONFIG_MODULE_NAME} _UP_MODULE_NAME)
        file(APPEND ${config_file_path} "#define ${_UP_MODULE_NAME}_CLASS_${classname}\n")
    endforeach()

    set(${_CONFIG_OUTPUT_VARIABLE} ${config_file_path} PARENT_SCOPE)
endfunction()

function(dtk_extend_target TARGET)
    set(args_option)
    set(args_single
        EnableCov
    )
    cmake_parse_arguments(PARSE_ARGV 1 arg "${args_option}" "${args_single}" "${args_multi}")

    if (arg_EnableCov)
        if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
            target_compile_options(${TARGET} PRIVATE -fprofile-instr-generate -ftest-coverage)
        elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
            target_compile_options(${TARGET} PRIVATE -fprofile-arcs -ftest-coverage)
        endif()
        target_link_libraries(${TARGET} PRIVATE gcov)
    endif()
endfunction()