include ( RunCMake )
run_cmake ( NoQt )
if ( DEFINED with_qt_version )
set ( RunCMake_TEST_OPTIONS
- D w i t h _ q t _ v e r s i o n = $ { w i t h _ q t _ v e r s i o n }
" - D Q t $ { w i t h _ q t _ v e r s i o n } _ D I R : P A T H = $ { Q t $ { w i t h _ q t _ v e r s i o n } _ D I R } "
" - D C M A K E _ P R E F I X _ P A T H : S T R I N G = $ { C M A K E _ P R E F I X _ P A T H } "
)
run_cmake ( QtInFunction )
run_cmake ( QtInFunctionNested )
run_cmake ( QtInFunctionProperty )
run_cmake ( CMP0111-imported-target-full )
run_cmake ( CMP0111-imported-target-libname )
run_cmake ( CMP0111-imported-target-implib-only )
block ( )
set ( RunCMake_TEST_BINARY_DIR ${ RunCMake_BINARY_DIR } /MocPredefs-build )
run_cmake ( MocPredefs )
set ( RunCMake_TEST_NO_CLEAN 1 )
run_cmake_command ( MocPredefs-build ${ CMAKE_COMMAND } --build . --config Debug )
endblock ( )
# Detect information from the toolchain:
# - CMAKE_INCLUDE_FLAG_CXX
# - CMAKE_INCLUDE_SYSTEM_FLAG_CXX
run_cmake ( Inspect )
include ( "${RunCMake_BINARY_DIR}/Inspect-build/info.cmake" )
if ( CMAKE_INCLUDE_SYSTEM_FLAG_CXX )
if ( RunCMake_GENERATOR MATCHES "Visual Studio" )
string ( REGEX REPLACE "^-" "/" test_expect_stdout "${CMAKE_INCLUDE_SYSTEM_FLAG_CXX}" )
else ( )
set ( test_expect_stdout "-*${CMAKE_INCLUDE_SYSTEM_FLAG_CXX}" )
endif ( )
string ( APPEND test_expect_stdout " *(\" [^\ "]*|([^ ]|\\ )*)[\\/]dummy_autogen[\\/]include" )
if ( RunCMake_GENERATOR_IS_MULTI_CONFIG )
string ( APPEND test_expect_stdout "_Debug" )
endif ( )
block ( )
set ( RunCMake_TEST_BINARY_DIR ${ RunCMake_BINARY_DIR } /CMP0151-new-build )
run_cmake_with_options ( CMP0151-new ${ RunCMake_TEST_OPTIONS } -DCMAKE_POLICY_DEFAULT_CMP0151=NEW )
set ( RunCMake_TEST_NO_CLEAN 1 )
set ( RunCMake_TEST_EXPECT_stdout "${test_expect_stdout}" )
message ( STATUS "RunCMake_TEST_EXPECT_stdout: ${RunCMake_TEST_EXPECT_stdout}" )
run_cmake_command ( CMP0151-new-build ${ CMAKE_COMMAND } --build . --config Debug --verbose )
endblock ( )
block ( )
set ( RunCMake_TEST_BINARY_DIR ${ RunCMake_BINARY_DIR } /AutogenUseSystemIncludeOn-build )
run_cmake_with_options ( AutogenUseSystemIncludeOn ${ RunCMake_TEST_OPTIONS } -DCMAKE_POLICY_DEFAULT_CMP0151=NEW )
set ( RunCMake_TEST_NO_CLEAN 1 )
set ( RunCMake_TEST_EXPECT_stdout "${test_expect_stdout}" )
message ( STATUS "RunCMake_TEST_EXPECT_stdout: ${RunCMake_TEST_EXPECT_stdout}" )
run_cmake_command ( AutogenUseSystemIncludeOn ${ CMAKE_COMMAND } --build . --config Debug --verbose )
endblock ( )
endif ( )
if ( CMAKE_INCLUDE_FLAG_CXX )
if ( RunCMake_GENERATOR MATCHES "Visual Studio" )
string ( REGEX REPLACE "^-" "/" test_expect_stdout "${CMAKE_INCLUDE_FLAG_CXX}" )
else ( )
set ( test_expect_stdout "-*${CMAKE_INCLUDE_FLAG_CXX}" )
endif ( )
string ( APPEND test_expect_stdout " *(\" [^\ "]*|([^ ]|\\ )*)[\\/]dummy_autogen[\\/]include" )
if ( RunCMake_GENERATOR_IS_MULTI_CONFIG )
string ( APPEND test_expect_stdout "_Debug" )
endif ( )
block ( )
set ( RunCMake_TEST_BINARY_DIR ${ RunCMake_BINARY_DIR } /CMP0151-old-build )
run_cmake_with_options ( CMP0151-old ${ RunCMake_TEST_OPTIONS } -DCMAKE_POLICY_DEFAULT_CMP0151=OLD )
set ( RunCMake_TEST_NO_CLEAN 1 )
set ( RunCMake_TEST_EXPECT_stdout "${test_expect_stdout}" )
message ( STATUS "RunCMake_TEST_EXPECT_stdout: ${RunCMake_TEST_EXPECT_stdout}" )
run_cmake_command ( CMP0151-old-build ${ CMAKE_COMMAND } --build . --config Debug --verbose )
endblock ( )
block ( )
set ( RunCMake_TEST_BINARY_DIR ${ RunCMake_BINARY_DIR } /AutogenUseSystemIncludeOff-build )
run_cmake_with_options ( AutogenUseSystemIncludeOff ${ RunCMake_TEST_OPTIONS } -DCMAKE_POLICY_DEFAULT_CMP0151=NEW )
set ( RunCMake_TEST_NO_CLEAN 1 )
set ( RunCMake_TEST_EXPECT_stdout "${test_expect_stdout}" )
message ( STATUS "RunCMake_TEST_EXPECT_stdout: ${RunCMake_TEST_EXPECT_stdout}" )
run_cmake_command ( AutogenUseSystemIncludeOff ${ CMAKE_COMMAND } --build . --config Debug --verbose )
endblock ( )
if ( RunCMake_GENERATOR MATCHES "Make|Ninja" )
block ( )
set ( RunCMake_TEST_BINARY_DIR ${ RunCMake_BINARY_DIR } /AutogenSkipLinting-build )
list ( APPEND RunCMake_TEST_OPTIONS
" - D P S E U D O _ C P P C H E C K = $ { P S E U D O _ C P P C H E C K } "
" - D P S E U D O _ C P P L I N T = $ { P S E U D O _ C P P L I N T } "
" - D P S E U D O _ I W Y U = $ { P S E U D O _ I W Y U } "
" - D P S E U D O _ T I D Y = $ { P S E U D O _ T I D Y } " )
run_cmake ( AutogenSkipLinting )
set ( RunCMake_TEST_NO_CLEAN 1 )
run_cmake_command ( AutogenSkipLinting-build ${ CMAKE_COMMAND } --build . --config Debug --verbose )
endblock ( )
endif ( )
endif ( )
if ( RunCMake_GENERATOR_IS_MULTI_CONFIG AND NOT RunCMake_GENERATOR MATCHES "Xcode" )
block ( )
set ( RunCMake_TEST_BINARY_DIR ${ RunCMake_BINARY_DIR } /MocGeneratedFile-build )
run_cmake ( MocGeneratedFile )
set ( RunCMake_TEST_NO_CLEAN 1 )
run_cmake_command ( MocGeneratedFile-build ${ CMAKE_COMMAND } --build . --config Debug --verbose )
endblock ( )
if ( RunCMake_GENERATOR MATCHES "Ninja Multi-Config" )
block ( )
set ( RunCMake_TEST_BINARY_DIR ${ RunCMake_BINARY_DIR } /MocGeneratedFile-cross-config-build )
list ( APPEND RunCMake_TEST_OPTIONS -DCMAKE_CROSS_CONFIGS=all )
run_cmake ( MocGeneratedFile )
set ( RunCMake_TEST_NO_CLEAN 1 )
run_cmake_command ( MocGeneratedFile-cross-config-build ${ CMAKE_COMMAND } --build . --config Release --target libgen:Debug )
run_cmake_command ( MocGeneratedFile-cross-config-build ${ CMAKE_COMMAND } --build . --config Debug --target libgen:Release )
endblock ( )
endif ( )
endif ( )
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|\
A u t o m a t i c M O C f o r t a r g e t s u b _ e x e _ 1 | \
A u t o m a t i c M O C f o r t a r g e t s u b _ e x e _ 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 ( )
function ( run_make_program dir )
execute_process (
C O M M A N D " $ { R u n C M a k e _ M A K E _ P R O G R A M } " $ { A R G N }
W O R K I N G _ D I R E C T O R Y " $ { d i r } "
O U T P U T _ V A R I A B L E m a k e _ p r o g r a m _ s t d o u t
E R R O R _ V A R I A B L E m a k e _ p r o g r a m _ s t d e r r
R E S U L T _ V A R I A B L E m a k e _ p r o g r a m _ r e s u l t
)
if ( NOT DEFINED RunMakeProgram_expected_result )
set ( RunMakeProgram_expected_result 0 )
endif ( )
if ( NOT "${make_program_result}" MATCHES "${RunMakeProgram_expected_result}" )
message ( STATUS "
= = = = = = = = = = = = b e g i n n i n g o f $ { R u n C M a k e _ M A K E _ P R O G R A M } ' s s t d o u t = = = = = = = = = = = =
$ { m a k e _ p r o g r a m _ s t d o u t }
= = = = = = = = = = = = = = = e n d o f $ { R u n C M a k e _ M A K E _ P R O G R A M } ' s s t d o u t = = = = = = = = = = = = = = =
" )
message ( STATUS "
= = = = = = = = = = = = b e g i n n i n g o f $ { R u n C M a k e _ M A K E _ P R O G R A M } ' s s t d e r r = = = = = = = = = = = =
$ { m a k e _ p r o g r a m _ s t d e r r }
= = = = = = = = = = = = = = = e n d o f $ { R u n C M a k e _ M A K E _ P R O G R A M } ' s s t d e r r = = = = = = = = = = = = = = =
" )
message ( FATAL_ERROR
" t o p $ { R u n C M a k e _ M A K E _ P R O G R A M } b u i l d f a i l e d e x i t e d w i t h s t a t u s $ { m a k e _ p r o g r a m _ r e s u l t } " )
endif ( )
set ( make_program_stdout "${make_program_stdout}" PARENT_SCOPE )
endfunction ( run_make_program )
function ( count_substring STRING SUBSTRING COUNT_VAR )
string ( LENGTH "${STRING}" STRING_LENGTH )
string ( LENGTH "${SUBSTRING}" SUBSTRING_LENGTH )
if ( SUBSTRING_LENGTH EQUAL 0 )
message ( FATAL_ERROR "SUBSTRING_LENGTH is 0" )
endif ( )
if ( STRING_LENGTH EQUAL 0 )
message ( FATAL_ERROR "STRING_LENGTH is 0" )
endif ( )
if ( STRING_LENGTH LESS SUBSTRING_LENGTH )
message ( FATAL_ERROR "STRING_LENGTH is less than SUBSTRING_LENGTH" )
endif ( )
set ( COUNT 0 )
string ( FIND "${STRING}" "${SUBSTRING}" SUBSTRING_START )
while ( SUBSTRING_START GREATER_EQUAL 0 )
math ( EXPR COUNT "${COUNT} + 1" )
math ( EXPR SUBSTRING_START "${SUBSTRING_START} + ${SUBSTRING_LENGTH}" )
string ( SUBSTRING "${STRING}" ${ SUBSTRING_START } -1 STRING )
string ( FIND "${STRING}" "${SUBSTRING}" SUBSTRING_START )
endwhile ( )
set ( ${ COUNT_VAR } ${ COUNT } PARENT_SCOPE )
endfunction ( )
function ( expect_only_once make_program_stdout expected_output test_name )
count_substring ( "${make_program_stdout}" "${expected_output}" count )
if ( NOT count EQUAL 1 )
message ( STATUS "${test_name}-expect_only_once - FAILED" )
message ( FATAL_ERROR "Expected to find ${expected_output} exactly once in ${make_program_stdout} but found ${count} occurrences of ${expected_output}" )
else ( )
message ( STATUS "${test_name}-expect_only_once - PASSED" )
endif ( )
endfunction ( )
function ( expect_n_times string_to_check expected_output expected_count test_name )
count_substring ( "${string_to_check}" "${expected_output}" count )
if ( NOT count EQUAL ${ expected_count } )
message ( STATUS "${test_name}-expect_${expected_count}_times - FAILED" )
message ( FATAL_ERROR "Expected to find ${expected_output} exactly ${expected_count} times in ${string_to_check} but found ${count} occurrences of ${expected_output}" )
else ( )
message ( STATUS "${test_name}-expect_${expected_count}_times - PASSED" )
endif ( )
endfunction ( )
function ( not_expect make_program_stdout unexpected_output test_name )
count_substring ( "${make_program_stdout}" "${unexpected_output}" count )
if ( NOT count EQUAL 0 )
message ( STATUS "${test_name}-not_expect - FAILED" )
message ( FATAL_ERROR "Expected to find ${unexpected_output} exactly 0 times in ${make_program_stdout} but found ${count} occurrences of ${unexpected_output}" )
else ( )
message ( STATUS "${test_name}-not_expect - PASSED" )
endif ( )
endfunction ( )
if ( QtCore_VERSION VERSION_GREATER_EQUAL 5.15.0 )
foreach ( exe IN ITEMS Moc Uic Rcc )
if ( RunCMake_GENERATOR MATCHES "Ninja Multi-Config" )
block ( )
set ( RunCMake_TEST_VARIANT_DESCRIPTION "-CMake-configure" )
set ( RunCMake_TEST_BINARY_DIR ${ RunCMake_BINARY_DIR } /Auto ${ exe } ExecutableConfig-multi-config-build )
run_cmake_with_options ( Auto ${ exe } ExecutableConfig ${ RunCMake_TEST_OPTIONS } -DCMAKE_AUTOGEN_VERBOSE=ON -DCMAKE_AUTOGEN_BETTER_GRAPH_MULTI_CONFIG=ON )
unset ( RunCMake_TEST_VARIANT_DESCRIPTION )
set ( RunCMake_TEST_NO_CLEAN 1 )
foreach ( config IN ITEMS Debug Release RelWithDebInfo )
block ( )
set ( RunCMake_TEST_EXPECT_stdout ".*running_exe_${config}*" )
set ( RunCMake_TEST_VARIANT_DESCRIPTION "-${config}-expect_running_exe_${config}" )
run_cmake_command ( Auto ${ exe } ExecutableConfig-multi-config-build ${ CMAKE_COMMAND } --build . --config ${ config } )
endblock ( )
endforeach ( )
set ( RunCMake_TEST_EXPECT_stdout "ninja: no work to do" )
foreach ( config IN ITEMS Debug Release RelWithDebInfo )
block ( )
set ( RunCMake_TEST_VARIANT_DESCRIPTION "-${config}-expect_no_work_to_do" )
run_cmake_command ( Auto ${ exe } ExecutableConfig-multi-config-build ${ CMAKE_COMMAND } --build . --config ${ config } )
endblock ( )
endforeach ( )
endblock ( )
block ( )
set ( RunCMake_TEST_BINARY_DIR ${ RunCMake_BINARY_DIR } /Auto ${ exe } ExecutableConfig-build )
run_cmake_with_options ( Auto ${ exe } ExecutableConfig ${ RunCMake_TEST_OPTIONS } -DCMAKE_AUTOGEN_VERBOSE=ON -DCMAKE_AUTOGEN_BETTER_GRAPH_MULTI_CONFIG=ON )
foreach ( config IN ITEMS Debug Release RelWithDebInfo )
block ( )
run_make_program ( ${ RunCMake_TEST_BINARY_DIR } --verbose -f build- ${ config } .ninja )
set ( expected_output "running_exe_${config}" )
expect_only_once ( "${make_program_stdout}" "${expected_output}" "Auto${exe}ExecutableConfig-${config}-${expected_output}" )
foreach ( sub_config IN ITEMS Debug Release RelWithDebInfo )
if ( NOT sub_config STREQUAL config )
set ( unexpected_output "running_exe_${sub_config}" )
not_expect ( "${make_program_stdout}" "${unexpected_output}" "Auto${exe}ExecutableConfig-${config}-${unexpected_output}" )
endif ( )
endforeach ( )
if ( exe STREQUAL "Moc" OR exe STREQUAL "Uic" )
set ( expected_output "cmake_autogen" )
else ( )
set ( expected_output "cmake_autorcc" )
endif ( )
expect_only_once ( "${make_program_stdout}" "${expected_output}" "Auto${exe}ExecutableConfig-${config}-${expected_output}" )
endblock ( )
endforeach ( )
endblock ( )
block ( )
foreach ( ninja_config IN ITEMS Debug Release RelWithDebInfo )
foreach ( target_config IN ITEMS Debug Release RelWithDebInfo )
block ( )
set ( TEST_SUFFIX "-CrossConfig-${ninja_config}-${target_config}" )
set ( RunCMake_TEST_BINARY_DIR ${ RunCMake_BINARY_DIR } /Auto ${ exe } ExecutableConfig ${ TEST_SUFFIX } -build )
set ( RunCMake_TEST_VARIANT_DESCRIPTION ${ TEST_SUFFIX } )
run_cmake_with_options ( Auto ${ exe } ExecutableConfig ${ RunCMake_TEST_OPTIONS } -DCMAKE_CROSS_CONFIGS=all -DCMAKE_DEFAULT_BUILD_TYPE= ${ ninja_config } -DCMAKE_AUTOGEN_BETTER_GRAPH_MULTI_CONFIG=ON )
unset ( RunCMake_TEST_VARIANT_DESCRIPTION )
run_make_program ( ${ RunCMake_TEST_BINARY_DIR } --verbose -f build- ${ ninja_config } .ninja dummy: ${ target_config } )
set ( expected_output "running_exe_${ninja_config}" )
expect_only_once ( "${make_program_stdout}" "${expected_output}" "Auto${exe}ExecutableConfig${TEST_SUFFIX}-${expected_output}" )
foreach ( sub_config IN ITEMS Debug Release RelWithDebInfo )
if ( NOT sub_config STREQUAL ninja_config )
set ( unexpected_output "running_exe_${sub_config}" )
not_expect ( "${make_program_stdout}" "${unexpected_output}" "Auto${exe}ExecutableConfig${TEST_SUFFIX}-${unexpected_output}" )
endif ( )
endforeach ( )
if ( exe STREQUAL "Moc" OR exe STREQUAL "Uic" )
set ( expected_output "cmake_autogen" )
else ( )
set ( expected_output "cmake_autorcc" )
endif ( )
expect_only_once ( "${make_program_stdout}" "${expected_output}" "Auto${exe}ExecutableConfig${TEST_SUFFIX}-${expected_output}" )
endblock ( )
endforeach ( )
endforeach ( )
endblock ( )
block ( )
foreach ( ninja_config IN ITEMS Debug Release RelWithDebInfo )
set ( TEST_SUFFIX "-CrossConfig-${ninja_config}-all-all" )
set ( RunCMake_TEST_BINARY_DIR ${ RunCMake_BINARY_DIR } /Auto ${ exe } ExecutableConfig ${ TEST_SUFFIX } -build )
set ( RunCMake_TEST_VARIANT_DESCRIPTION ${ TEST_SUFFIX } )
run_cmake_with_options ( Auto ${ exe } ExecutableConfig ${ RunCMake_TEST_OPTIONS } -DCMAKE_CROSS_CONFIGS=all -DCMAKE_AUTOGEN_BETTER_GRAPH_MULTI_CONFIG=ON )
unset ( RunCMake_TEST_VARIANT_DESCRIPTION )
run_make_program ( ${ RunCMake_TEST_BINARY_DIR } --verbose -f build- ${ ninja_config } .ninja all:all )
endforeach ( )
endblock ( )
elseif ( RunCMake_GENERATOR MATCHES "Ninja|Make" )
block ( )
set ( RunCMake_TEST_BINARY_DIR ${ RunCMake_BINARY_DIR } /Auto ${ exe } ExecutableConfig-build )
foreach ( config IN ITEMS Debug Release RelWithDebInfo )
block ( )
set ( RunCMake_TEST_VARIANT_DESCRIPTION "-${config}" )
run_cmake_with_options ( Auto ${ exe } ExecutableConfig ${ RunCMake_TEST_OPTIONS } -DCMAKE_BUILD_TYPE= ${ config } -DCMAKE_AUTOGEN_VERBOSE=ON )
unset ( RunCMake_TEST_VARIANT_DESCRIPTION )
set ( RunCMake_TEST_NO_CLEAN 1 )
set ( RunCMake_TEST_EXPECT_stdout ".*running_exe_${config}*" )
run_cmake_command ( Auto ${ exe } ExecutableConfig- ${ config } -build ${ CMAKE_COMMAND } --build . )
endblock ( )
endforeach ( )
endblock ( )
endif ( )
endforeach ( )
endif ( )
# Visual Studio specific dependency tests
if ( RunCMake_GENERATOR MATCHES "Visual Studio" )
foreach ( exe IN ITEMS Moc Uic Rcc )
block ( )
set ( RunCMake_TEST_BINARY_DIR ${ RunCMake_BINARY_DIR } / ${ exe } Example-build )
set ( RunCMake_TEST_VARIANT_DESCRIPTION "-CMake-configure" )
run_cmake_with_options ( ${ exe } Example ${ RunCMake_TEST_OPTIONS } -DCMAKE_AUTOGEN_VERBOSE=ON )
unset ( RunCMake_TEST_VARIANT_DESCRIPTION )
set ( RunCMake_TEST_NO_CLEAN 1 )
foreach ( config IN ITEMS Debug Release RelWithDebInfo )
block ( )
set ( RunCMake_TEST_VARIANT_DESCRIPTION "-${config}-first-build" )
run_cmake_command ( ${ exe } Example-build ${ CMAKE_COMMAND } --build . --config ${ config } )
endblock ( )
endforeach ( )
foreach ( config IN ITEMS Debug Release RelWithDebInfo )
block ( )
if ( exe STREQUAL "Moc" OR exe STREQUAL "Uic" )
set ( RunCMake_TEST_NOT_EXPECT_stdout "Auto${exe}" )
set ( not_expect_descripton "Auto${exe}" )
else ( )
set ( RunCMake_TEST_NOT_EXPECT_stdout "Auto${exe}" )
set ( not_expect_descripton "Auto${exe}" )
endif ( )
set ( RunCMake_TEST_VARIANT_DESCRIPTION "-second-build-${config}_expect_no_${not_expect_descripton}" )
run_cmake_command ( ${ exe } Example-build ${ CMAKE_COMMAND } --build . --config ${ config } )
endblock ( )
endforeach ( )
endblock ( )
endforeach ( )
endif ( )
if ( RunCMake_GENERATOR MATCHES "Xcode" )
foreach ( exe IN ITEMS Moc Uic Rcc )
block ( )
set ( RunCMake_TEST_BINARY_DIR ${ RunCMake_BINARY_DIR } / ${ exe } Example-build )
set ( RunCMake_TEST_VARIANT_DESCRIPTION "-CMake-configure" )
set ( RunCMake_TEST_EXPECT_stderr ".*" )
run_cmake_with_options ( ${ exe } Example ${ RunCMake_TEST_OPTIONS } -DCMAKE_AUTOGEN_VERBOSE=ON )
set ( RunCMake_TEST_NO_CLEAN 1 )
set ( RunCMake_MAKE_PROGRAM ${ CMAKE_COMMAND } )
run_make_program ( ${ RunCMake_TEST_BINARY_DIR } --build . --config Debug )
if ( exe STREQUAL "Moc" )
set ( expected_count 16 )
elseif ( exe STREQUAL "Uic" )
set ( expected_count 4 )
else ( )
set ( expected_count 12 )
endif ( )
expect_n_times ( "${make_program_stdout}" "Auto${exe}:" ${ expected_count } "${exe}Example-build-Auto${exe}" )
expect_n_times ( "${make_program_stdout}" "Auto${exe}:" ${ expected_count } "${exe}Example-build-Auto${exe}" )
if ( exe STREQUAL "Moc" OR exe STREQUAL "Uic" )
expect_n_times ( "${make_program_stdout}" "AutoGen:" 20 "${exe}Example-build-AutoGen:" )
endif ( )
foreach ( config IN ITEMS Debug Release RelWithDebInfo )
block ( )
run_make_program ( ${ RunCMake_TEST_BINARY_DIR } --build . --config ${ config } )
not_expect ( "${make_program_stdout}" "Auto${exe}" "${exe}Example-${config}_Auto${exe}" )
not_expect ( "${make_program_stdout}" "AutoGen:" "${exe}Example-${config}_AutoGen" )
endblock ( )
endforeach ( )
endblock ( )
endforeach ( )
endif ( )
if ( QtCore_VERSION VERSION_GREATER_EQUAL 6 )
if ( RunCMake_GENERATOR MATCHES "Make|Ninja" )
foreach ( value IN ITEMS ON OFF )
block ( )
set ( RunCMake_TEST_BINARY_DIR
$ { R u n C M a k e _ B I N A R Y _ D I R } / R c c N o Z T S D - $ { v a l u e } - b u i l d )
run_cmake_with_options ( RccExample ${ RunCMake_TEST_OPTIONS }
- D C M A K E _ A U T O G E N _ V E R B O S E = O N - D Z S T D _ V A L U E = $ { v a l u e } )
if ( value STREQUAL "OFF" )
set ( RunCMake_TEST_EXPECT_stdout "--no-zstd" )
else ( )
set ( RunCMake_TEST_NOT_EXPECT_stdout "--no-zstd" )
endif ( )
set ( RunCMake_TEST_NO_CLEAN 1 )
run_cmake_command ( RccNoZTSD- ${ value } -build ${ CMAKE_COMMAND }
- - b u i l d . - - c o n f i g D e b u g )
endblock ( )
endforeach ( )
endif ( )
endif ( )
endif ( )