diff options
author | Craig Scott <craig.scott@crascit.com> | 2023-04-10 22:05:54 +0000 |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2023-04-10 18:06:06 -0400 |
commit | e245b4df7505f2190dbc1442b7ceb94fc507a40e (patch) | |
tree | 4ec32f0f25d3cfa2c76ee04a7545d4361671a1da /Tests | |
parent | 453cf8a1968081731b667edd01ff942adf1f7bcc (diff) | |
parent | c5c3aff1f5aa36d44f3c639726dd36eedc28f823 (diff) | |
download | cmake-e245b4df7505f2190dbc1442b7ceb94fc507a40e.tar.gz |
Merge topic 'automoc-macro-names'
c5c3aff1f5 Autogen: Add INTERFACE_AUTOMOC_MACRO_NAMES target property
69cf9700e6 Autogen: Defer setup until Generate step
7cecb6353e cmGeneratorTarget: Factor out EvaluatedTargetProperty infrastructure
2daba01ddf cmGeneratorTarget: Avoid incidental include-what-you-use warning
850b4d990c IWYU: Add mapping for 'std::remove_reference<Defer &>::type'
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !8391
Diffstat (limited to 'Tests')
7 files changed, 147 insertions, 0 deletions
diff --git a/Tests/QtAutogen/MocInterfaceMacroNames/CMakeLists.txt b/Tests/QtAutogen/MocInterfaceMacroNames/CMakeLists.txt new file mode 100644 index 0000000000..7744d78402 --- /dev/null +++ b/Tests/QtAutogen/MocInterfaceMacroNames/CMakeLists.txt @@ -0,0 +1,61 @@ +cmake_minimum_required(VERSION 3.16) +project(MocInterfaceMacroNames) + +include("../AutogenCoreTest.cmake") + +set(CMAKE_AUTOMOC ON) + +add_executable(dummy dummy.cpp) +target_link_libraries(dummy PRIVATE static_lib interface_lib shared_lib) + +add_library(shared_lib SHARED shared_lib.cpp) +set_target_properties(shared_lib PROPERTIES INTERFACE_AUTOMOC_MACRO_NAMES "SHARED_LIB_MACRO") + +add_library(interface_lib INTERFACE) +set_target_properties(interface_lib PROPERTIES INTERFACE_AUTOMOC_MACRO_NAMES "INTERFACE_LIB_MACRO") + +add_library(static_lib STATIC static_lib.cpp) +set_target_properties(static_lib PROPERTIES INTERFACE_AUTOMOC_MACRO_NAMES "STATIC_LIB_MACRO") + +set(AUTOGEN_INFO_FILE "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/dummy_autogen.dir/AutogenInfo.json") +set(CHECK_AUTOGEN_JSON_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CheckAutogenJson.cmake") +message(STATUS "AutogenInfo.json: ${AUTOGEN_INFO_FILE}") + +add_custom_command(TARGET dummy POST_BUILD + COMMAND ${CMAKE_COMMAND} -DFILE_PATH=${AUTOGEN_INFO_FILE} -P ${CHECK_AUTOGEN_JSON_PATH} +) + +install(TARGETS shared_lib EXPORT shared_lib) +install(TARGETS interface_lib EXPORT interface_lib) +install(TARGETS static_lib EXPORT static_lib) + +install(EXPORT shared_lib FILE shared_libTargets.cmake DESTINATION lib/cmake/shared_lib) +install(EXPORT interface_lib FILE interface_libTargets.cmake DESTINATION lib/cmake/interface_lib) +install(EXPORT static_lib FILE static_libTargets.cmake DESTINATION lib/cmake/static_lib) + +set(CHECK_EXPORT_TARGETS_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CheckExportTargets.cmake") +set(EXPORT_FOLDER_PATH "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Export") + +add_custom_command(TARGET dummy POST_BUILD + COMMAND ${CMAKE_COMMAND} -DFOLDER_PATH=${EXPORT_FOLDER_PATH} -P ${CHECK_EXPORT_TARGETS_PATH} +) + +# check if INTERFACE_AUTOMOC_MACRO_NAMES were transferred to the *_link libraries correctly +add_executable(dummy_link dummy.cpp) +target_link_libraries(dummy_link PRIVATE static_link_lib interface_link_lib shared_link_lib) + +add_library(shared_link_lib SHARED shared_lib.cpp) +target_link_libraries(shared_link_lib PUBLIC shared_lib) + +add_library(interface_link_lib INTERFACE) +target_link_libraries(interface_link_lib INTERFACE interface_lib) + +add_library(static_link_lib STATIC static_lib.cpp) +target_link_libraries(static_link_lib PUBLIC static_lib) + +set(AUTOGEN_INFO_FILE "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/dummy_link_autogen.dir/AutogenInfo.json") +message(STATUS "AutogenInfo.json: ${AUTOGEN_INFO_FILE}") + +add_custom_command(TARGET dummy_link POST_BUILD + COMMAND ${CMAKE_COMMAND} -DFILE_PATH=${AUTOGEN_INFO_FILE} -P ${CHECK_AUTOGEN_JSON_PATH} +) diff --git a/Tests/QtAutogen/MocInterfaceMacroNames/CheckAutogenJson.cmake b/Tests/QtAutogen/MocInterfaceMacroNames/CheckAutogenJson.cmake new file mode 100644 index 0000000000..338f345029 --- /dev/null +++ b/Tests/QtAutogen/MocInterfaceMacroNames/CheckAutogenJson.cmake @@ -0,0 +1,27 @@ + + +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}) diff --git a/Tests/QtAutogen/MocInterfaceMacroNames/CheckExportTargets.cmake b/Tests/QtAutogen/MocInterfaceMacroNames/CheckExportTargets.cmake new file mode 100644 index 0000000000..9db23f62b8 --- /dev/null +++ b/Tests/QtAutogen/MocInterfaceMacroNames/CheckExportTargets.cmake @@ -0,0 +1,45 @@ + +set(TARGET_NAMES "static_lib" "shared_lib" "interface_lib") +set(static_lib_FOUND "0") +set(shared_lib_FOUND "0") +set(interface_lib_FOUND "0") + +macro(checkExportTargets FOLDER_PATH) + message("Checking folder: ${FOLDER_PATH}") + file(GLOB sources_list LIST_DIRECTORIES true RELATIVE ${FOLDER_PATH} ${FOLDER_PATH}/*) + message("Found files and folders: ${sources_list}") + foreach(source ${sources_list}) + set(SOURCE_ABS "${FOLDER_PATH}/${source}") + if(IS_DIRECTORY ${SOURCE_ABS}) + message("Found subfolder: ${source}") + checkExportTargets(${SOURCE_ABS}) + else() + message("Found file: ${source}") + foreach(TARGET_NAME ${TARGET_NAMES}) + set(TARGETS_FILE "${TARGET_NAME}Targets.cmake") + if(${source} STREQUAL ${TARGETS_FILE}) + message("Found ${TARGETS_FILE} in ${FOLDER_PATH}") + string(TOUPPER ${TARGET_NAME} TARGET_NAME_UPPER) + set(expected_macro "${TARGET_NAME_UPPER}_MACRO") + set(expected_string "INTERFACE_AUTOMOC_MACRO_NAMES \"${expected_macro}\"") + file(READ ${FOLDER_PATH}/${source} contents) + if (NOT contents MATCHES ${expected_string}) + message(FATAL_ERROR "Expected ${expected_string} in ${FOLDER_PATH}/${source}") + else() + message("Found ${expected_string} in ${FOLDER_PATH}/${source}") + set(${TARGET_NAME}_FOUND "1") + endif() + endif() + endforeach() + endif() + endforeach() +endmacro() + +checkExportTargets(${FOLDER_PATH}) + +foreach(TARGET_NAME ${TARGET_NAMES}) + # check if the target found equals the expected value + if(NOT ${TARGET_NAME}_FOUND STREQUAL "1") + message(FATAL_ERROR "Did not find ${TARGET_NAME}Targets.cmake") + endif() +endforeach() diff --git a/Tests/QtAutogen/MocInterfaceMacroNames/dummy.cpp b/Tests/QtAutogen/MocInterfaceMacroNames/dummy.cpp new file mode 100644 index 0000000000..f8b643afbf --- /dev/null +++ b/Tests/QtAutogen/MocInterfaceMacroNames/dummy.cpp @@ -0,0 +1,4 @@ +int main() +{ + return 0; +} diff --git a/Tests/QtAutogen/MocInterfaceMacroNames/shared_lib.cpp b/Tests/QtAutogen/MocInterfaceMacroNames/shared_lib.cpp new file mode 100644 index 0000000000..3a5c48208f --- /dev/null +++ b/Tests/QtAutogen/MocInterfaceMacroNames/shared_lib.cpp @@ -0,0 +1,6 @@ +#ifdef _WIN32 +__declspec(dllexport) +#endif + void foo() +{ +} diff --git a/Tests/QtAutogen/MocInterfaceMacroNames/static_lib.cpp b/Tests/QtAutogen/MocInterfaceMacroNames/static_lib.cpp new file mode 100644 index 0000000000..3695dc91e3 --- /dev/null +++ b/Tests/QtAutogen/MocInterfaceMacroNames/static_lib.cpp @@ -0,0 +1,3 @@ +void foo() +{ +} diff --git a/Tests/QtAutogen/Tests.cmake b/Tests/QtAutogen/Tests.cmake index b507ab5e6e..412d511349 100644 --- a/Tests/QtAutogen/Tests.cmake +++ b/Tests/QtAutogen/Tests.cmake @@ -7,6 +7,7 @@ ADD_AUTOGEN_TEST(GlobalAutogenTarget) ADD_AUTOGEN_TEST(GlobalAutogenExecutable) ADD_AUTOGEN_TEST(LowMinimumVersion lowMinimumVersion) ADD_AUTOGEN_TEST(ManySources manySources) +ADD_AUTOGEN_TEST(MocInterfaceMacroNames) ADD_AUTOGEN_TEST(MocOnly mocOnly) ADD_AUTOGEN_TEST(MocOptions mocOptions) ADD_AUTOGEN_TEST(ObjectLibrary someProgram) |