You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
4.2 KiB
88 lines
4.2 KiB
include(RunCMake)
|
|
|
|
if (DEFINED with_qt_version)
|
|
set(RunCMake_TEST_OPTIONS
|
|
-Dwith_qt_version=${with_qt_version}
|
|
"-DQt${with_qt_version}_DIR:PATH=${Qt${with_qt_version}_DIR}"
|
|
"-DCMAKE_PREFIX_PATH:STRING=${CMAKE_PREFIX_PATH}"
|
|
)
|
|
if(RunCMake_GENERATOR MATCHES "Make|Ninja")
|
|
block()
|
|
if(QtCore_VERSION VERSION_GREATER_EQUAL 5.15.0)
|
|
if (RunCMake_GENERATOR MATCHES "Ninja Multi-Config")
|
|
set(config_list Debug Release RelWithDebInfo)
|
|
set(use_better_graph_list ON OFF)
|
|
else()
|
|
set(config_list single-config)
|
|
set(use_better_graph_list OFF)
|
|
endif()
|
|
|
|
foreach(use_better_graph IN ITEMS ${use_better_graph_list})
|
|
foreach(config IN ITEMS ${config_list})
|
|
block()
|
|
if (config STREQUAL "single-config")
|
|
set(config_suffix "")
|
|
else()
|
|
set(config_path "_${config}")
|
|
if (use_better_graph)
|
|
set(config_suffix "_${config}")
|
|
endif()
|
|
endif()
|
|
|
|
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/QtAutoMocDeps${config_path}-build)
|
|
run_cmake_with_options(QtAutoMocDeps ${RunCMake_TEST_OPTIONS} -DCMAKE_AUTOGEN_BETTER_GRAPH_MULTI_CONFIG=${use_better_graph})
|
|
set(RunCMake_TEST_NO_CLEAN 1)
|
|
# Build the project.
|
|
if (config STREQUAL "single-config")
|
|
set(config_param "")
|
|
else()
|
|
set(config_param "--config ${config}")
|
|
endif()
|
|
run_cmake_command(QtAutoMocDeps-build ${CMAKE_COMMAND} --build . --verbose ${config_param})
|
|
# Touch just the library source file, which shouldn't cause a rerun of AUTOMOC
|
|
# for app_with_qt target.
|
|
file(TOUCH "${RunCMake_SOURCE_DIR}/simple_lib.cpp")
|
|
set(RunCMake_TEST_NOT_EXPECT_stdout "Automatic MOC for target app_with_qt|\
|
|
Automatic MOC for target sub_exe_1|\
|
|
Automatic MOC for target sub_exe_2")
|
|
set(RunCMake_TEST_VARIANT_DESCRIPTION "-Don't execute AUTOMOC for 'app_with_qt', 'sub_exe_1' and 'sub_exe_2'")
|
|
# Build and assert that AUTOMOC was not run for app_with_qt, sub_exe_1 and sub_exe_2.
|
|
run_cmake_command(QtAutoMocDeps-build ${CMAKE_COMMAND} --build . --verbose ${config_param})
|
|
unset(RunCMake_TEST_VARIANT_DESCRIPTION)
|
|
unset(RunCMake_TEST_NOT_EXPECT_stdout)
|
|
|
|
macro(check_file_exists file)
|
|
if (EXISTS "${file}")
|
|
set(check_result "PASSED")
|
|
set(message_type "STATUS")
|
|
else()
|
|
set(check_result "FAILED")
|
|
set(message_type "FATAL_ERROR")
|
|
endif()
|
|
|
|
message(${message_type} "QtAutoMocDeps-build-\"${file}\" was generated - ${check_result}")
|
|
endmacro()
|
|
|
|
check_file_exists("${RunCMake_TEST_BINARY_DIR}/app_with_qt_autogen/deps${config_suffix}")
|
|
check_file_exists("${RunCMake_TEST_BINARY_DIR}/QtSubDir1/sub_exe_1_autogen/deps${config_suffix}")
|
|
check_file_exists("${RunCMake_TEST_BINARY_DIR}/QtSubDir2/sub_exe_2_autogen/deps${config_suffix}")
|
|
|
|
check_file_exists("${RunCMake_TEST_BINARY_DIR}/app_with_qt_autogen/timestamp${config_suffix}")
|
|
check_file_exists("${RunCMake_TEST_BINARY_DIR}/QtSubDir1/sub_exe_1_autogen/timestamp${config_suffix}")
|
|
check_file_exists("${RunCMake_TEST_BINARY_DIR}/QtSubDir2/sub_exe_2_autogen/timestamp${config_suffix}")
|
|
|
|
# Touch a header file to make sure an automoc dependency cycle is not introduced.
|
|
file(TOUCH "${RunCMake_SOURCE_DIR}/MyWindow.h")
|
|
set(RunCMake_TEST_VARIANT_DESCRIPTION "-First build after touch to detect dependency cycle")
|
|
run_cmake_command(QtAutoMocDeps-build ${CMAKE_COMMAND} --build . --verbose)
|
|
# Need to run a second time to hit the dependency cycle.
|
|
set(RunCMake_TEST_VARIANT_DESCRIPTION "-Don't hit dependency cycle")
|
|
run_cmake_command(QtAutoMocDeps-build ${CMAKE_COMMAND} --build . --verbose)
|
|
endblock()
|
|
endforeach()
|
|
endforeach()
|
|
endif()
|
|
endblock()
|
|
endif()
|
|
endif ()
|