File: DtkDConfigConfig.cmake

package info (click to toggle)
dtkcore 5.7.12-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 3,728 kB
  • sloc: cpp: 22,021; ansic: 183; python: 68; xml: 58; makefile: 27; sh: 15
file content (101 lines) | stat: -rw-r--r-- 3,794 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
# SPDX-FileCopyrightText: 2022 - 2023 Uniontech Software Technology Co.,Ltd.
#
# SPDX-License-Identifier: LGPL-3.0-or-later

# This cmake file is used to deploy files that dconfig's meta and override configure.

include(CMakeParseArguments)

# get subpath according `FILE` and `BASE`.
# e.g: FILE = /a/b/c/d/foo.json, BASE = /a/b, then return SUBPATH = /c/d/
function(get_subpath FILE BASE SUBPATH)
    get_filename_component(BASE_FILE_PATH ${BASE} REALPATH)
    get_filename_component(FILE_PATH ${FILE} REALPATH)
    string(REPLACE ${BASE_FILE_PATH} "" SUBPATH_FILE_NAME ${FILE_PATH})
    get_filename_component(SUBPATH_PATH ${SUBPATH_FILE_NAME} DIRECTORY)

    set(${SUBPATH} ${SUBPATH_PATH} PARENT_SCOPE)
endfunction()

if(NOT DEFINED DSG_DATA_DIR)
    set(DSG_DATA_DIR ${CMAKE_INSTALL_PREFIX}/share/dsg)
endif()

add_definitions(-DDSG_DATA_DIR=\"${DSG_DATA_DIR}\")
# deploy some `meta` 's configure.
#
# FILES       - deployed files.
# BASE        - used to get subpath, if it's empty, only copy files, and ignore it's subpath structure.
# APPID       - working for the app.
# COMMONID    - working for common.
#
# e.g:
# dtk_add_config_meta_files(APPID dconfigexample BASE ./configs FILES ./configs/example.json ./configs/a/example.json)
#
function(dtk_add_config_meta_files)
    set(oneValueArgs BASE APPID COMMONID)
    set(multiValueArgs FILES)

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

    foreach(_current_FILE ${METAITEM_FILES})
        set(SUBPATH "")
        if (DEFINED METAITEM_BASE)
            GET_SUBPATH(${_current_FILE} ${METAITEM_BASE} SUBPATH)
        endif()

        if (DEFINED METAITEM_APPID)
            install(FILES "${_current_FILE}" DESTINATION ${DSG_DATA_DIR}/configs/${METAITEM_APPID}/${SUBPATH})
        elseif (DEFINED METAITEM_COMMONID)
            install(FILES ${_current_FILE} DESTINATION ${DSG_DATA_DIR}/configs/${SUBPATH})
        else()
            message(FATAL_ERROR "Please set APPID or COMMONID for the meta item." ${_current_FILE})
        endif()
    endforeach()
endfunction()


# deploy some `meta` 's override configure.
#
# configuration for the `meta_name` 's  override configure.
#
# FILES       - deployed files.
# BASE        - used to get subpath, if it's empty, only copy files, and ignore it's subpath structure.
# APPID       - working for the app, if it's empty, working for all app.
# META_NAME   - override for the meta configure.
#
# e.g :
#dtk_add_config_override_files(APPID dconfigexample BASE ./configs META_NAME example  FILES ./configs/dconf-example.override.json ./configs/a/dconf-example.override.a.json)
#
function(dtk_add_config_override_files)
    set(options)
    set(oneValueArgs BASE APPID META_NAME)
    set(multiValueArgs FILES)

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

    if (NOT DEFINED OVERRIDEITEM_META_NAME)
        message(FATAL_ERROR "Please set meta_name for the override configuration." ${FILES})
    endif()

    foreach(_current_FILE ${OVERRIDEITEM_FILES})
        set(SUBPATH "")
        if (DEFINED OVERRIDEITEM_BASE)
            GET_SUBPATH(${_current_FILE} ${OVERRIDEITEM_BASE} SUBPATH)
        endif()

        if (DEFINED OVERRIDEITEM_APPID)
            install(FILES "${_current_FILE}" DESTINATION ${DSG_DATA_DIR}/configs/overrides/${OVERRIDEITEM_APPID}/${OVERRIDEITEM_META_NAME}/${SUBPATH})
        else()
            install(FILES "${_current_FILE}" DESTINATION ${DSG_DATA_DIR}/configs/overrides/${OVERRIDEITEM_META_NAME}/${SUBPATH})
        endif()
    endforeach()
endfunction()

# deprecated since dtk6
function(dconfig_meta_files)
    dtk_add_config_meta_files(${ARGV})
endfunction()
function(dconfig_override_files)
    dtk_add_config_override_files(${ARGV})
endfunction()