foreach ( arg
R u n C M a k e _ G E N E R A T O R
R u n C M a k e _ S O U R C E _ D I R
R u n C M a k e _ B I N A R Y _ D I R
)
if ( NOT DEFINED ${ arg } )
message ( FATAL_ERROR "${arg} not given!" )
endif ( )
endforeach ( )
function ( run_cmake test )
set ( top_src "${RunCMake_SOURCE_DIR}" )
set ( top_bin "${RunCMake_BINARY_DIR}" )
if ( EXISTS ${ top_src } / ${ test } -result.txt )
file ( READ ${ top_src } / ${ test } -result.txt expect_result )
string ( REGEX REPLACE "\n+$" "" expect_result "${expect_result}" )
else ( )
set ( expect_result 0 )
endif ( )
foreach ( o out err )
if ( RunCMake-std ${ o } -file AND EXISTS ${ top_src } / ${ RunCMake-std${o } -file} )
file ( READ ${ top_src } / ${ RunCMake-std${o } -file} expect_std ${ o } )
string ( REGEX REPLACE "\n+$" "" expect_std ${ o } "${expect_std${o}}" )
elseif ( EXISTS ${ top_src } / ${ test } -std ${ o } .txt )
file ( READ ${ top_src } / ${ test } -std ${ o } .txt expect_std ${ o } )
string ( REGEX REPLACE "\n+$" "" expect_std ${ o } "${expect_std${o}}" )
else ( )
unset ( expect_std ${ o } )
endif ( )
endforeach ( )
if ( NOT expect_stderr )
if ( NOT RunCMake_DEFAULT_stderr )
set ( RunCMake_DEFAULT_stderr "^$" )
endif ( )
set ( expect_stderr ${ RunCMake_DEFAULT_stderr } )
endif ( )
if ( NOT RunCMake_TEST_SOURCE_DIR )
set ( RunCMake_TEST_SOURCE_DIR "${top_src}" )
endif ( )
if ( NOT RunCMake_TEST_BINARY_DIR )
set ( RunCMake_TEST_BINARY_DIR "${top_bin}/${test}-build" )
endif ( )
if ( NOT RunCMake_TEST_NO_CLEAN )
file ( REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}" )
endif ( )
file ( MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}" )
if ( NOT DEFINED RunCMake_TEST_OPTIONS )
set ( RunCMake_TEST_OPTIONS "" )
endif ( )
if ( APPLE )
list ( APPEND RunCMake_TEST_OPTIONS -DCMAKE_POLICY_DEFAULT_CMP0025=NEW )
endif ( )
if ( RunCMake_GENERATOR MATCHES "^Visual Studio 8 2005" AND NOT RunCMake_WARN_VS8 )
list ( APPEND RunCMake_TEST_OPTIONS -DCMAKE_WARN_VS8=OFF )
endif ( )
if ( RunCMake_MAKE_PROGRAM )
list ( APPEND RunCMake_TEST_OPTIONS "-DCMAKE_MAKE_PROGRAM=${RunCMake_MAKE_PROGRAM}" )
endif ( )
if ( RunCMake_TEST_OUTPUT_MERGE )
set ( actual_stderr_var actual_stdout )
set ( actual_stderr "" )
else ( )
set ( actual_stderr_var actual_stderr )
endif ( )
if ( DEFINED RunCMake_TEST_TIMEOUT )
set ( maybe_timeout TIMEOUT ${ RunCMake_TEST_TIMEOUT } )
else ( )
set ( maybe_timeout "" )
endif ( )
if ( RunCMake_TEST_COMMAND )
execute_process (
C O M M A N D $ { R u n C M a k e _ T E S T _ C O M M A N D }
W O R K I N G _ D I R E C T O R Y " $ { R u n C M a k e _ T E S T _ B I N A R Y _ D I R } "
O U T P U T _ V A R I A B L E a c t u a l _ s t d o u t
E R R O R _ V A R I A B L E $ { a c t u a l _ s t d e r r _ v a r }
R E S U L T _ V A R I A B L E a c t u a l _ r e s u l t
E N C O D I N G U T F 8
$ { m a y b e _ t i m e o u t }
)
else ( )
execute_process (
C O M M A N D $ { C M A K E _ C O M M A N D } " $ { R u n C M a k e _ T E S T _ S O U R C E _ D I R } "
- G " $ { R u n C M a k e _ G E N E R A T O R } "
- A " $ { R u n C M a k e _ G E N E R A T O R _ P L A T F O R M } "
- T " $ { R u n C M a k e _ G E N E R A T O R _ T O O L S E T } "
- D R u n C M a k e _ T E S T = $ { t e s t }
- - n o - w a r n - u n u s e d - c l i
$ { R u n C M a k e _ T E S T _ O P T I O N S }
W O R K I N G _ D I R E C T O R Y " $ { R u n C M a k e _ T E S T _ B I N A R Y _ D I R } "
O U T P U T _ V A R I A B L E a c t u a l _ s t d o u t
E R R O R _ V A R I A B L E $ { a c t u a l _ s t d e r r _ v a r }
R E S U L T _ V A R I A B L E a c t u a l _ r e s u l t
E N C O D I N G U T F 8
$ { m a y b e _ t i m e o u t }
)
endif ( )
set ( msg "" )
if ( NOT "${actual_result}" MATCHES "${expect_result}" )
string ( APPEND msg "Result is [${actual_result}], not [${expect_result}].\n" )
endif ( )
foreach ( o out err )
string ( REGEX REPLACE "\r\n" "\n" actual_std ${ o } "${actual_std${o}}" )
string ( REGEX REPLACE "(^|\n)((==[0-9]+==|BullseyeCoverage|[a-z]+\\([0-9]+\\) malloc:|Error kstat returned|Hit xcodebuild bug|[^\n]*is a member of multiple groups|[^\n]*from Time Machine by path|[^\n]*Bullseye Testing Technology)[^\n]*\n)+" "\\1" actual_std ${ o } "${actual_std${o}}" )
string ( REGEX REPLACE "\n+$" "" actual_std ${ o } "${actual_std${o}}" )
set ( expect_ ${ o } "" )
if ( DEFINED expect_std ${ o } )
if ( NOT "${actual_std${o}}" MATCHES "${expect_std${o}}" )
string ( REGEX REPLACE "\n" "\n expect-${o}> " expect_ ${ o }
" e x p e c t - $ { o } > $ { e x p e c t _ s t d $ { o } } " )
set ( expect_ ${ o } "Expected std${o} to match:\n${expect_${o}}\n" )
string ( APPEND msg "std${o} does not match that expected.\n" )
endif ( )
endif ( )
endforeach ( )
unset ( RunCMake_TEST_FAILED )
if ( RunCMake-check-file AND EXISTS ${ top_src } / ${ RunCMake-check-file } )
include ( ${ top_src } / ${ RunCMake-check-file } )
else ( )
include ( ${ top_src } / ${ test } -check.cmake OPTIONAL )
endif ( )
if ( RunCMake_TEST_FAILED )
set ( msg "${RunCMake_TEST_FAILED}\n${msg}" )
endif ( )
if ( msg AND RunCMake_TEST_COMMAND )
string ( REPLACE ";" "\" \"" command "\" ${ RunCMake_TEST_COMMAND } \"")
string ( APPEND msg "Command was:\n command> ${command}\n" )
endif ( )
if ( msg )
string ( REGEX REPLACE "\n" "\n actual-out> " actual_out " actual-out> ${actual_stdout}" )
string ( REGEX REPLACE "\n" "\n actual-err> " actual_err " actual-err> ${actual_stderr}" )
message ( SEND_ERROR "${test} - FAILED:\n"
" $ { m s g } "
" $ { e x p e c t _ o u t } "
" A c t u a l s t d o u t : \ n $ { a c t u a l _ o u t } \ n "
" $ { e x p e c t _ e r r } "
" A c t u a l s t d e r r : \ n $ { a c t u a l _ e r r } \ n "
)
else ( )
message ( STATUS "${test} - PASSED" )
endif ( )
endfunction ( )
function ( run_cmake_command test )
set ( RunCMake_TEST_COMMAND "${ARGN}" )
run_cmake ( ${ test } )
endfunction ( )
# Protect RunCMake tests from calling environment.
unset ( ENV{MAKEFLAGS} )