File: QtGnConfigHelpers.cmake

package info (click to toggle)
qt6-webengine 6.9.1%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 4,111,516 kB
  • sloc: cpp: 21,436,007; ansic: 8,086,803; javascript: 2,747,888; python: 856,612; asm: 848,149; xml: 616,344; java: 222,847; sh: 105,206; objc: 99,183; perl: 70,870; cs: 51,103; sql: 40,087; makefile: 26,374; pascal: 25,140; fortran: 24,137; tcl: 9,609; yacc: 8,132; php: 7,051; lisp: 3,462; lex: 1,327; ruby: 914; awk: 339; csh: 120; sed: 36
file content (83 lines) | stat: -rw-r--r-- 3,442 bytes parent folder | download | duplicates (3)
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
# Copyright (C) 2024 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause

# These are functions aim to create cmake files with configuration needed by GnGen
#  * gn_config_target.cmake
#  * gn_config_c.cmake
#  * gn_config_cxx.cmake
#  * gn_static.cmake

function(get_config_filenames c_config cxx_config static_config target_config)
    set(${target_config} gn_config_target.cmake PARENT_SCOPE)
    set(${cxx_config} gn_config_cxx.cmake PARENT_SCOPE)
    set(${c_config} gn_config_c.cmake PARENT_SCOPE)
    set(${static_config} gn_static.cmake PARENT_SCOPE)
endfunction()

function(create_cxx_configs cmake_target arch)
    get_config_filenames(c_config_file_name cxx_config_file_name static_config_file_name target_config_file_name)
    create_c_config(${cmake_target} ${arch} ${c_config_file_name})
    create_cxx_config(${cmake_target} ${arch} ${cxx_config_file_name})
    create_static_config(${cmake_target} ${arch} ${static_config_file_name})
endfunction()

function(create_cxx_config cmake_target arch config_file_name)
    if(NOT QT_SUPERBUILD AND QT_WILL_INSTALL)
        get_target_property(moc_file_path Qt6::moc IMPORTED_LOCATION)
    else()
        if(CMAKE_CROSSCOMPILING)
            set(moc_file_path "${QT_HOST_PATH}/${INSTALL_LIBEXECDIR}/moc${CMAKE_EXECUTABLE_SUFFIX}")
        else()
            set(moc_file_path "${QT_BUILD_DIR}/${INSTALL_LIBEXECDIR}/moc${CMAKE_EXECUTABLE_SUFFIX}")
        endif()
    endif()
    file(GENERATE
        OUTPUT $<CONFIG>/${arch}/${config_file_name}
        CONTENT "\
            set(GN_INCLUDES \"$<TARGET_PROPERTY:INCLUDE_DIRECTORIES>\")\n\
            set(GN_DEFINES \"$<TARGET_PROPERTY:COMPILE_DEFINITIONS>\")\n\
            set(GN_LINK_OPTIONS \"$<TARGET_PROPERTY:LINK_OPTIONS>\")\n\
            set(GN_CXX_COMPILE_OPTIONS \"$<TARGET_PROPERTY:COMPILE_OPTIONS>\")\n\
            set(GN_MOC_PATH \"${moc_file_path}\")"
#           set(GN_LIBS $<TARGET_PROPERTY:LINK_LIBRARIES>)
        CONDITION $<COMPILE_LANGUAGE:CXX>
        TARGET ${cmake_target}
    )
endfunction()

function(create_static_config cmake_target arch config_file_name)
    list(APPEND libs Png Jpeg Harfbuzz Freetype Zlib)
    foreach(lib IN LISTS libs)
        string(TOUPPER ${lib} out)
        set(lib Qt::${lib}Private)
        list(APPEND contents "set(GN_${out}_INCLUDES \"$<$<STREQUAL:$<TARGET_NAME_IF_EXISTS:${lib}>,${lib}>:$<TARGET_PROPERTY:${lib},INTERFACE_INCLUDE_DIRECTORIES>>\")")
    endforeach()
    list(JOIN contents "\n" contents)
    file(GENERATE
        OUTPUT $<CONFIG>/${arch}/${config_file_name}
        CONTENT "${contents}"
    )
endfunction()

function(create_c_config cmake_target arch config_file_name)
    file(GENERATE
          OUTPUT $<CONFIG>/${arch}/${config_file_name}
          CONTENT "set(GN_C_COMPILE_OPTIONS $<TARGET_PROPERTY:COMPILE_OPTIONS>)"
          CONDITION $<COMPILE_LANGUAGE:C>
          TARGET ${cmake_target})
endfunction()

function(create_gn_target_config target config_file_name)
    get_target_property(element_list ${target} ELEMENTS)
    get_target_property(prefix ${target} PREFIX)
    file(WRITE ${config_file_name}
        "set(PREFIX ${prefix})\nset(ELEMENTS ${element_list})\n"
    )
    foreach(element IN LISTS element_list)
         get_target_property(prop ${target} ${prefix}_${element})
         if(prop)
             file(APPEND ${config_file_name} "set(${prefix}_${element} ${prop})\n")
         endif()
    endforeach()
endfunction()