Files
CMake/Tests/QtAutogen/MocInterfaceMacroNames/CheckAutogenJson.cmake
T
Orkun Tokdemir c5c3aff1f5 Autogen: Add INTERFACE_AUTOMOC_MACRO_NAMES target property
Add this target property to specify macro names that propagate to
dependents as `AUTOMOC_MACRO_NAMES`.  The dependents will automatically
generate MOC files for source files that contain the inherited macro
names.

Co-Authored-By: Craig Scott <craig.scott@crascit.com>
Fixes: #19679
2023-04-09 20:51:15 +10:00

28 lines
1.1 KiB
CMake

set(expected_values "SHARED_LIB_MACRO" "INTERFACE_LIB_MACRO" "STATIC_LIB_MACRO")
function(checkAutoMocMacroNames FILE_PATH)
message(STATUS "Checking for auto moc macro names in ${FILE_PATH}")
file(READ ${FILE_PATH} FILE_CONTENT)
string(JSON MOC_MACRO_NAMES_ARR GET ${FILE_CONTENT} MOC_MACRO_NAMES)
# get the length of MOC_MACRO_NAMES in JSON
string(JSON MOC_MACRO_NAMES_LENGTH LENGTH ${MOC_MACRO_NAMES_ARR})
if(${MOC_MACRO_NAMES_LENGTH} EQUAL 0)
message(FATAL_ERROR "MOC_MACRO_NAMES is empty")
endif()
message(STATUS "MOC_MACRO_NAMES: ${MOC_MACRO_NAMES_ARR}")
math(EXPR last_index "${MOC_MACRO_NAMES_LENGTH} - 1")
set(reverse_index ${last_index})
foreach(expected_value IN LISTS expected_values)
string(JSON element GET ${MOC_MACRO_NAMES_ARR} ${reverse_index})
# check if element equals to expected value
if(NOT ${element} STREQUAL ${expected_value})
message(FATAL_ERROR "MOC_MACRO_NAMES is expected to contain ${expected_value} but contains ${element}")
endif()
math(EXPR reverse_index "${reverse_index} - 1")
endforeach()
endfunction()
checkAutoMocMacroNames(${FILE_PATH})