summaryrefslogtreecommitdiffstats
path: root/cmake/QtResourceHelpers.cmake
blob: d326c7c441e9efdad08565fe65654c531d1c4b0f (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
function(qt_internal_add_resource target resourceName)
    # Don't try to add resources when cross compiling, and the target is actually a host target
    # (like a tool).
    qt_is_imported_target("${target}" is_imported)
    if(is_imported)
        return()
    endif()

    qt_parse_all_arguments(arg "qt_add_resource" "" "PREFIX;LANG;BASE" "FILES" ${ARGN})

    QT6_PROCESS_RESOURCE(${target} ${resourceName}
        PREFIX "${arg_PREFIX}"
        LANG "${arg_LANG}"
        BASE "${arg_BASE}"
        FILES ${arg_FILES}
        OUTPUT_TARGETS out_targets
   )

   if (out_targets)
        qt_install(TARGETS ${out_targets}
            EXPORT "${INSTALL_CMAKE_NAMESPACE}${target}Targets"
            DESTINATION ${INSTALL_LIBDIR}
        )
        foreach(out_target ${out_targets})
            get_target_property(resource_name ${out_target} QT_RESOURCE_NAME)
            if(NOT resource_name)
                continue()
            endif()
            if(QT_WILL_INSTALL)
                # Compute the install location of the rcc object file.
                # This is the relative path below the install destination (install_prefix/lib).
                # See CMake's computeInstallObjectDir function.
                set(object_file_name "qrc_${resource_name}.cpp${CMAKE_CXX_OUTPUT_EXTENSION}")
                qt_path_join(rcc_object_file_path
                    "objects-$<CONFIG>" ${out_target} .rcc "${object_file_name}")
            else()
                # In a non-prefix build we use the object file paths right away.
                set(rcc_object_file_path $<TARGET_OBJECTS:$<TARGET_NAME:${out_target}>>)
            endif()
            set_property(TARGET ${target} APPEND PROPERTY QT_RCC_OBJECTS "${rcc_object_file_path}")

            # Make sure that the target cpp files are compiled with the regular Qt internal compile
            # flags, needed for building iOS apps with qmake where bitcode is involved.
            target_link_libraries("${out_target}" PRIVATE Qt::PlatformModuleInternal)
        endforeach()
   endif()

endfunction()