cmake_minimum_required ( VERSION 3.1 )
include ( RunCMake )
run_cmake_command ( NoArgs ${ CMAKE_COMMAND } )
run_cmake_command ( InvalidArg1 ${ CMAKE_COMMAND } -invalid )
run_cmake_command ( InvalidArg2 ${ CMAKE_COMMAND } --invalid )
run_cmake_command ( Wizard ${ CMAKE_COMMAND } -i )
run_cmake_command ( C-no-arg ${ CMAKE_COMMAND } -B DummyBuildDir -C )
run_cmake_command ( C-no-file ${ CMAKE_COMMAND } -B DummyBuildDir -C nosuchcachefile.txt )
run_cmake_command ( Cno-file ${ CMAKE_COMMAND } -B DummyBuildDir -Cnosuchcachefile.txt )
run_cmake_command ( cache-no-file ${ CMAKE_COMMAND } nosuchsubdir/CMakeCache.txt )
run_cmake_command ( lists-no-file ${ CMAKE_COMMAND } nosuchsubdir/CMakeLists.txt )
run_cmake_command ( D-no-arg ${ CMAKE_COMMAND } -B DummyBuildDir -D )
run_cmake_command ( D-no-src ${ CMAKE_COMMAND } -B DummyBuildDir -D VAR=VALUE )
run_cmake_command ( Dno-src ${ CMAKE_COMMAND } -B DummyBuildDir -DVAR=VALUE )
run_cmake_command ( U-no-arg ${ CMAKE_COMMAND } -B DummyBuildDir -U )
run_cmake_command ( U-no-src ${ CMAKE_COMMAND } -B DummyBuildDir -U VAR )
run_cmake_command ( Uno-src ${ CMAKE_COMMAND } -B DummyBuildDir -UVAR )
run_cmake_command ( E-no-arg ${ CMAKE_COMMAND } -E )
run_cmake_command ( E_capabilities ${ CMAKE_COMMAND } -E capabilities )
run_cmake_command ( E_capabilities-arg ${ CMAKE_COMMAND } -E capabilities --extra-arg )
run_cmake_command ( E_compare_files-different-eol ${ CMAKE_COMMAND } -E compare_files ${ RunCMake_SOURCE_DIR } /compare_files/lf ${ RunCMake_SOURCE_DIR } /compare_files/crlf )
run_cmake_command ( E_compare_files-ignore-eol-same ${ CMAKE_COMMAND } -E compare_files --ignore-eol ${ RunCMake_SOURCE_DIR } /compare_files/lf ${ RunCMake_SOURCE_DIR } /compare_files/crlf )
run_cmake_command ( E_compare_files-ignore-eol-empty ${ CMAKE_COMMAND } -E compare_files --ignore-eol ${ RunCMake_SOURCE_DIR } /compare_files/empty1 ${ RunCMake_SOURCE_DIR } /compare_files/empty2 )
run_cmake_command ( E_compare_files-ignore-eol-nonexistent ${ CMAKE_COMMAND } -E compare_files --ignore-eol nonexistent_a nonexistent_b )
run_cmake_command ( E_compare_files-invalid-arguments ${ CMAKE_COMMAND } -E compare_files file1.txt file2.txt file3.txt )
run_cmake_command ( E_echo_append ${ CMAKE_COMMAND } -E echo_append )
run_cmake_command ( E_rename-no-arg ${ CMAKE_COMMAND } -E rename )
run_cmake_command ( E_server ${ CMAKE_COMMAND } -E server )
run_cmake_command ( E_true ${ CMAKE_COMMAND } -E true )
run_cmake_command ( E_true-extraargs ${ CMAKE_COMMAND } -E true ignored )
run_cmake_command ( E_false ${ CMAKE_COMMAND } -E false )
run_cmake_command ( E_false-extraargs ${ CMAKE_COMMAND } -E false ignored )
run_cmake_command ( E_touch_nocreate-no-arg ${ CMAKE_COMMAND } -E touch_nocreate )
run_cmake_command ( E_touch-nonexistent-dir ${ CMAKE_COMMAND } -E touch "${RunCMake_BINARY_DIR}/touch-nonexistent-dir/foo" )
run_cmake_command ( E_time ${ CMAKE_COMMAND } -E time ${ CMAKE_COMMAND } -E echo "hello world" )
run_cmake_command ( E_time-no-arg ${ CMAKE_COMMAND } -E time )
run_cmake_command ( E___run_co_compile-no-iwyu ${ CMAKE_COMMAND } -E __run_co_compile -- command-does-not-exist )
run_cmake_command ( E___run_co_compile-bad-iwyu ${ CMAKE_COMMAND } -E __run_co_compile --iwyu=iwyu-does-not-exist -- command-does-not-exist )
run_cmake_command ( E___run_co_compile-no--- ${ CMAKE_COMMAND } -E __run_co_compile --iwyu=iwyu-does-not-exist command-does-not-exist )
run_cmake_command ( E___run_co_compile-no-cc ${ CMAKE_COMMAND } -E __run_co_compile --iwyu=iwyu-does-not-exist -- )
run_cmake_command ( G_no-arg ${ CMAKE_COMMAND } -B DummyBuildDir -G )
run_cmake_command ( G_bad-arg ${ CMAKE_COMMAND } -B DummyBuildDir -G NoSuchGenerator )
run_cmake_command ( P_no-arg ${ CMAKE_COMMAND } -P )
run_cmake_command ( P_no-file ${ CMAKE_COMMAND } -P nosuchscriptfile.cmake )
run_cmake_command ( P_arbitrary_args ${ CMAKE_COMMAND } -P "${RunCMake_SOURCE_DIR}/P_arbitrary_args.cmake" -- -DFOO )
run_cmake_command ( build-no-dir
$ { C M A K E _ C O M M A N D } - - b u i l d )
run_cmake_command ( build-no-cache
$ { C M A K E _ C O M M A N D } - - b u i l d $ { R u n C M a k e _ S O U R C E _ D I R } )
run_cmake_command ( build-unknown-command-short
$ { C M A K E _ C O M M A N D } - - b u i l d $ { R u n C M a k e _ S O U R C E _ D I R } - i n v a l i d - c o m m a n d )
run_cmake_command ( build-unknown-command-long
$ { C M A K E _ C O M M A N D } - - b u i l d $ { R u n C M a k e _ S O U R C E _ D I R } - - i n v a l i d - c o m m a n d )
run_cmake_command ( build-unknown-command-partial-match
$ { C M A K E _ C O M M A N D } - - b u i l d $ { R u n C M a k e _ S O U R C E _ D I R } - - t a r g e t i n v a l i d )
run_cmake_command ( build-invalid-target-syntax
$ { C M A K E _ C O M M A N D } - - b u i l d $ { R u n C M a k e _ S O U R C E _ D I R } - - t a r g e t = i n v a l i d )
run_cmake_command ( build-no-generator
$ { C M A K E _ C O M M A N D } - - b u i l d $ { R u n C M a k e _ S O U R C E _ D I R } / c a c h e - n o - g e n e r a t o r )
run_cmake_command ( build-bad-dir
$ { C M A K E _ C O M M A N D } - - b u i l d d i r - d o e s - n o t - e x i s t )
run_cmake_command ( build-bad-generator
$ { C M A K E _ C O M M A N D } - - b u i l d $ { R u n C M a k e _ S O U R C E _ D I R } / c a c h e - b a d - g e n e r a t o r )
run_cmake_command ( install-prefix-no-arg ${ CMAKE_COMMAND } -B DummyBuildDir --install-prefix )
run_cmake_command ( install-no-dir
$ { C M A K E _ C O M M A N D } - - i n s t a l l )
run_cmake_command ( install-bad-dir
$ { C M A K E _ C O M M A N D } - - i n s t a l l d i r - d o e s - n o t - e x i s t )
run_cmake_command ( install-unknown-command-short
$ { C M A K E _ C O M M A N D } - - i n s t a l l $ { R u n C M a k e _ S O U R C E _ D I R } - i n v a l i d - c o m m a n d )
run_cmake_command ( install-unknown-command-long
$ { C M A K E _ C O M M A N D } - - i n s t a l l $ { R u n C M a k e _ S O U R C E _ D I R } - - i n v a l i d - c o m m a n d )
run_cmake_command ( install-options-to-vars
$ { C M A K E _ C O M M A N D } - - i n s t a l l $ { R u n C M a k e _ S O U R C E _ D I R } / d i r - i n s t a l l - o p t i o n s - t o - v a r s
- - s t r i p - - p r e f i x / v a r / t e s t - - c o n f i g s a m p l e - - c o m p o n e n t p a c k )
run_cmake_command ( install-default-dir-permissions-all
$ { C M A K E _ C O M M A N D } - - i n s t a l l $ { R u n C M a k e _ S O U R C E _ D I R } / d i r - p e r m i s s i o n s - i n s t a l l - o p t i o n s - t o - v a r s
- - d e f a u l t - d i r e c t o r y - p e r m i s s i o n s u = r w x , g = r x , o = r x )
run_cmake_command ( install-default-dir-permissions-afew
$ { C M A K E _ C O M M A N D } - - i n s t a l l $ { R u n C M a k e _ S O U R C E _ D I R } / d i r - p e r m i s s i o n s - i n s t a l l - o p t i o n s - t o - v a r s
- - d e f a u l t - d i r e c t o r y - p e r m i s s i o n s u = r w x , g = r x )
run_cmake_command ( install-default-dir-permissions-none
$ { C M A K E _ C O M M A N D } - - i n s t a l l $ { R u n C M a k e _ S O U R C E _ D I R } / d i r - p e r m i s s i o n s - i n s t a l l - o p t i o n s - t o - v a r s )
run_cmake_command ( install-default-dir-permissions-invalid-comma1
$ { C M A K E _ C O M M A N D } - - i n s t a l l $ { R u n C M a k e _ S O U R C E _ D I R } / d i r - p e r m i s s i o n s - i n s t a l l - o p t i o n s - t o - v a r s
- - d e f a u l t - d i r e c t o r y - p e r m i s s i o n s u = r w x g = , x )
run_cmake_command ( install-default-dir-permissions-invalid-comma2
$ { C M A K E _ C O M M A N D } - - i n s t a l l $ { R u n C M a k e _ S O U R C E _ D I R } / d i r - p e r m i s s i o n s - i n s t a l l - o p t i o n s - t o - v a r s
- - d e f a u l t - d i r e c t o r y - p e r m i s s i o n s u = r w x g , = x )
run_cmake_command ( install-default-dir-permissions-comma-at-the-end
$ { C M A K E _ C O M M A N D } - - i n s t a l l $ { R u n C M a k e _ S O U R C E _ D I R } / d i r - p e r m i s s i o n s - i n s t a l l - o p t i o n s - t o - v a r s
- - d e f a u l t - d i r e c t o r y - p e r m i s s i o n s u = r w x , )
run_cmake_command ( install-default-dir-permissions-invalid-assignment
$ { C M A K E _ C O M M A N D } - - i n s t a l l $ { R u n C M a k e _ S O U R C E _ D I R } / d i r - p e r m i s s i o n s - i n s t a l l - o p t i o n s - t o - v a r s
- - d e f a u l t - d i r e c t o r y - p e r m i s s i o n s u = r w x , = x )
run_cmake_command ( install-default-dir-permissions-assignment-at-the-end
$ { C M A K E _ C O M M A N D } - - i n s t a l l $ { R u n C M a k e _ S O U R C E _ D I R } / d i r - p e r m i s s i o n s - i n s t a l l - o p t i o n s - t o - v a r s
- - d e f a u l t - d i r e c t o r y - p e r m i s s i o n s u = r w x , g = )
run_cmake_command ( install-default-dir-permissions-assignment-at-the-beginning
$ { C M A K E _ C O M M A N D } - - i n s t a l l $ { R u n C M a k e _ S O U R C E _ D I R } / d i r - p e r m i s s i o n s - i n s t a l l - o p t i o n s - t o - v a r s
- - d e f a u l t - d i r e c t o r y - p e r m i s s i o n s = u = r w x , g = r x )
run_cmake_command ( cache-bad-entry
$ { C M A K E _ C O M M A N D } - - b u i l d $ { R u n C M a k e _ S O U R C E _ D I R } / c a c h e - b a d - e n t r y / )
run_cmake_command ( cache-empty-entry
$ { C M A K E _ C O M M A N D } - - b u i l d $ { R u n C M a k e _ S O U R C E _ D I R } / c a c h e - e m p t y - e n t r y / )
function ( run_ExplicitDirs )
set ( RunCMake_TEST_NO_CLEAN 1 )
set ( RunCMake_TEST_NO_SOURCE_DIR 1 )
set ( source_dir ${ RunCMake_BINARY_DIR } /ExplicitDirsMissing )
file ( REMOVE_RECURSE "${source_dir}" )
file ( MAKE_DIRECTORY "${source_dir}" )
file ( WRITE ${ source_dir } /CMakeLists.txt [=[
cmake_minimum_required ( VERSION 3.13 )
project ( ExplicitDirsMissing LANGUAGES NONE )
] = ] )
set ( RunCMake_TEST_SOURCE_DIR "${source_dir}" )
set ( RunCMake_TEST_BINARY_DIR "${source_dir}" )
run_cmake_with_options ( no-S-B -DFOO=BAR )
set ( source_dir ${ RunCMake_SOURCE_DIR } /ExplicitDirs )
set ( binary_dir ${ RunCMake_BINARY_DIR } /ExplicitDirs-build )
set ( RunCMake_TEST_SOURCE_DIR "${source_dir}" )
set ( RunCMake_TEST_BINARY_DIR "${binary_dir}" )
file ( REMOVE_RECURSE "${binary_dir}" )
run_cmake_with_options ( S-arg -S ${ source_dir } ${ binary_dir } )
run_cmake_with_options ( S-arg-reverse-order ${ binary_dir } -S ${ source_dir } )
run_cmake_with_options ( S-no-arg -S )
run_cmake_with_options ( S-no-arg2 -S -T )
run_cmake_with_options ( S-B -S ${ source_dir } -B ${ binary_dir } )
# make sure that -B can explicitly construct build directories
file ( REMOVE_RECURSE "${binary_dir}" )
run_cmake_with_options ( B-arg -B ${ binary_dir } ${ source_dir } )
file ( REMOVE_RECURSE "${binary_dir}" )
run_cmake_with_options ( B-arg-reverse-order ${ source_dir } -B ${ binary_dir } )
run_cmake_with_options ( B-no-arg -B )
run_cmake_with_options ( B-no-arg2 -B -T )
file ( REMOVE_RECURSE "${binary_dir}" )
run_cmake_with_options ( B-S -B ${ binary_dir } -S ${ source_dir } )
message ( "copied to ${RunCMake_TEST_BINARY_DIR}/initial-cache.txt" )
file ( COPY ${ RunCMake_SOURCE_DIR } /C_buildsrcdir/initial-cache.txt DESTINATION ${ RunCMake_TEST_BINARY_DIR } )
# CMAKE_BINARY_DIR should be determined by -B if specified, and CMAKE_SOURCE_DIR determined by -S if specified.
# Path to initial-cache.txt is relative to the $PWD, which is normally set to ${RunCMake_TEST_BINARY_DIR}.
run_cmake_with_options ( C_buildsrcdir -B DummyBuildDir -S ${ RunCMake_SOURCE_DIR } /C_buildsrcdir/src -C initial-cache.txt )
# Test that full path works, too.
run_cmake_with_options ( C_buildsrcdir -B DummyBuildDir -S ${ RunCMake_SOURCE_DIR } /C_buildsrcdir/src -C ${ RunCMake_TEST_BINARY_DIR } /initial-cache.txt )
endfunction ( )
run_ExplicitDirs ( )
function ( run_Toolchain )
set ( RunCMake_TEST_NO_SOURCE_DIR 1 )
set ( source_dir ${ RunCMake_SOURCE_DIR } /Toolchain )
run_cmake_with_options ( toolchain-no-arg -S ${ source_dir } --toolchain= )
run_cmake_with_options ( toolchain-valid-abs-path -S ${ source_dir } --toolchain "${source_dir}/toolchain.cmake" )
run_cmake_with_options ( toolchain-valid-rel-src-path -S ${ source_dir } --toolchain=toolchain.cmake )
set ( RunCMake_TEST_NO_CLEAN 1 )
set ( binary_dir ${ RunCMake_BINARY_DIR } /Toolchain-build )
set ( RunCMake_TEST_BINARY_DIR "${binary_dir}" )
file ( REMOVE_RECURSE "${binary_dir}" )
# Test that we both search the binary dir for toolchain files, and it takes
# precedence over source dir
file ( WRITE ${ binary_dir } /toolchain.cmake [=[
set ( CMAKE_SYSTEM_NAME Linux )
set ( toolchain_file binary_dir )
] = ] )
run_cmake_with_options ( toolchain-valid-rel-build-path ${ CMAKE_COMMAND } -S ${ source_dir } -B ${ binary_dir } --toolchain toolchain.cmake )
endfunction ( )
run_Toolchain ( )
function ( run_BuildDir )
# Use a single build tree for a few tests without cleaning.
set ( RunCMake_TEST_BINARY_DIR ${ RunCMake_BINARY_DIR } /BuildDir-build )
set ( RunCMake_TEST_NO_CLEAN 1 )
file ( REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}" )
file ( MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}" )
run_cmake ( BuildDir )
run_cmake_command ( BuildDir--build ${ CMAKE_COMMAND } -E chdir ..
$ { C M A K E _ C O M M A N D } - - b u i l d B u i l d D i r - b u i l d - - t a r g e t C u s t o m T a r g e t )
run_cmake_command ( BuildDir--build-multiple-targets ${ CMAKE_COMMAND } -E chdir ..
$ { C M A K E _ C O M M A N D } - - b u i l d B u i l d D i r - b u i l d - t C u s t o m T a r g e t 2 - - t a r g e t C u s t o m T a r g e t 3 )
run_cmake_command ( BuildDir--build-multiple-targets-fail ${ CMAKE_COMMAND } -E chdir ..
$ { C M A K E _ C O M M A N D } - - b u i l d B u i l d D i r - b u i l d - t C u s t o m T a r g e t F a i l - - t a r g e t C u s t o m T a r g e t 3 )
run_cmake_command ( BuildDir--build-multiple-targets-jobs ${ CMAKE_COMMAND } -E chdir ..
$ { C M A K E _ C O M M A N D } - - b u i l d B u i l d D i r - b u i l d - - t a r g e t C u s t o m T a r g e t C u s t o m T a r g e t 2 - j 2 - - t a r g e t C u s t o m T a r g e t 3 )
run_cmake_command ( BuildDir--build-multiple-targets-with-clean-first ${ CMAKE_COMMAND } -E chdir ..
$ { C M A K E _ C O M M A N D } - - b u i l d B u i l d D i r - b u i l d - - t a r g e t c l e a n C u s t o m T a r g e t )
run_cmake_command ( BuildDir--build-multiple-targets-with-clean-second ${ CMAKE_COMMAND } -E chdir ..
$ { C M A K E _ C O M M A N D } - - b u i l d B u i l d D i r - b u i l d - - t a r g e t C u s t o m T a r g e t c l e a n )
run_cmake_command ( BuildDir--build-jobs-bad-number ${ CMAKE_COMMAND } -E chdir ..
$ { C M A K E _ C O M M A N D } - - b u i l d B u i l d D i r - b u i l d - j 1 2 a b )
run_cmake_command ( BuildDir--build-jobs-good-number ${ CMAKE_COMMAND } -E chdir ..
$ { C M A K E _ C O M M A N D } - - b u i l d B u i l d D i r - b u i l d - j 2 )
run_cmake_command ( BuildDir--build-jobs-good-number-trailing--target ${ CMAKE_COMMAND } -E chdir ..
$ { C M A K E _ C O M M A N D } - - b u i l d B u i l d D i r - b u i l d - j 2 - - t a r g e t C u s t o m T a r g e t )
run_cmake_command ( BuildDir--build--parallel-bad-number ${ CMAKE_COMMAND } -E chdir ..
$ { C M A K E _ C O M M A N D } - - b u i l d B u i l d D i r - b u i l d - - p a r a l l e l 1 2 a b )
run_cmake_command ( BuildDir--build--parallel-good-number ${ CMAKE_COMMAND } -E chdir ..
$ { C M A K E _ C O M M A N D } - - b u i l d B u i l d D i r - b u i l d - - p a r a l l e l 2 )
run_cmake_command ( BuildDir--build--parallel-good-number-trailing--target ${ CMAKE_COMMAND } -E chdir ..
$ { C M A K E _ C O M M A N D } - - b u i l d B u i l d D i r - b u i l d - - p a r a l l e l 2 - - t a r g e t C u s t o m T a r g e t )
run_cmake_command ( BuildDir--build-jobs-no-space-bad-number ${ CMAKE_COMMAND } -E chdir ..
$ { C M A K E _ C O M M A N D } - - b u i l d B u i l d D i r - b u i l d - j 1 2 a b )
run_cmake_command ( BuildDir--build-jobs-no-space-good-number ${ CMAKE_COMMAND } -E chdir ..
$ { C M A K E _ C O M M A N D } - - b u i l d B u i l d D i r - b u i l d - j 2 )
run_cmake_command ( BuildDir--build-jobs-no-space-good-number-trailing--target ${ CMAKE_COMMAND } -E chdir ..
$ { C M A K E _ C O M M A N D } - - b u i l d B u i l d D i r - b u i l d - j 2 - - t a r g e t C u s t o m T a r g e t )
run_cmake_command ( BuildDir--build--parallel-no-space-bad-number ${ CMAKE_COMMAND } -E chdir ..
$ { C M A K E _ C O M M A N D } - - b u i l d B u i l d D i r - b u i l d - - p a r a l l e l 1 2 a b )
run_cmake_command ( BuildDir--build--parallel-no-space-good-number ${ CMAKE_COMMAND } -E chdir ..
$ { C M A K E _ C O M M A N D } - - b u i l d B u i l d D i r - b u i l d - - p a r a l l e l 2 )
run_cmake_command ( BuildDir--build--parallel-no-space-good-number-trailing--target ${ CMAKE_COMMAND } -E chdir ..
$ { C M A K E _ C O M M A N D } - - b u i l d B u i l d D i r - b u i l d - - p a r a l l e l 2 - - t a r g e t C u s t o m T a r g e t )
run_cmake_command ( BuildDir--build-jobs-zero ${ CMAKE_COMMAND } -E chdir ..
$ { C M A K E _ C O M M A N D } - - b u i l d B u i l d D i r - b u i l d - j 0 )
run_cmake_command ( BuildDir--build--parallel-zero ${ CMAKE_COMMAND } -E chdir ..
$ { C M A K E _ C O M M A N D } - - b u i l d B u i l d D i r - b u i l d - - p a r a l l e l 0 )
run_cmake_command ( BuildDir--build-jobs-large ${ CMAKE_COMMAND } -E chdir ..
$ { C M A K E _ C O M M A N D } - - b u i l d B u i l d D i r - b u i l d - j 4 2 9 4 9 6 7 2 9 3 )
run_cmake_command ( BuildDir--build--parallel-large ${ CMAKE_COMMAND } -E chdir ..
$ { C M A K E _ C O M M A N D } - - b u i l d B u i l d D i r - b u i l d - - p a r a l l e l 4 2 9 4 9 6 7 2 9 3 )
# No default jobs for FreeBSD build command
if ( NOT CMAKE_SYSTEM_NAME MATCHES "FreeBSD" )
run_cmake_command ( BuildDir--build-jobs-no-number ${ CMAKE_COMMAND } -E chdir ..
$ { C M A K E _ C O M M A N D } - - b u i l d B u i l d D i r - b u i l d - j )
run_cmake_command ( BuildDir--build-jobs-no-number-trailing--target ${ CMAKE_COMMAND } -E chdir ..
$ { C M A K E _ C O M M A N D } - - b u i l d B u i l d D i r - b u i l d - j - - t a r g e t C u s t o m T a r g e t )
if ( RunCMake_GENERATOR MATCHES "Unix Makefiles" OR RunCMake_GENERATOR MATCHES "Ninja" )
run_cmake_command ( BuildDir--build-jobs-no-number-trailing--invalid-target ${ CMAKE_COMMAND } -E chdir ..
$ { C M A K E _ C O M M A N D } - - b u i l d B u i l d D i r - b u i l d - j - - t a r g e t i n v a l i d - t a r g e t )
endif ( )
run_cmake_command ( BuildDir--build--parallel-no-number ${ CMAKE_COMMAND } -E chdir ..
$ { C M A K E _ C O M M A N D } - - b u i l d B u i l d D i r - b u i l d - - p a r a l l e l )
run_cmake_command ( BuildDir--build--parallel-no-number-trailing--target ${ CMAKE_COMMAND } -E chdir ..
$ { C M A K E _ C O M M A N D } - - b u i l d B u i l d D i r - b u i l d - - p a r a l l e l - - t a r g e t C u s t o m T a r g e t )
endif ( )
endfunction ( )
run_BuildDir ( )
function ( run_EnvironmentGenerator )
set ( source_dir ${ RunCMake_SOURCE_DIR } /EnvGenerator )
set ( ENV{CMAKE_GENERATOR_INSTANCE} "instance" )
set ( ENV{CMAKE_GENERATOR_PLATFORM} "platform" )
set ( ENV{CMAKE_GENERATOR_TOOLSET} "toolset" )
run_cmake_command ( Envgen-warnings ${ CMAKE_COMMAND } -G )
unset ( ENV{CMAKE_GENERATOR_INSTANCE} )
unset ( ENV{CMAKE_GENERATOR_PLATFORM} )
unset ( ENV{CMAKE_GENERATOR_TOOLSET} )
# Test CMAKE_GENERATOR without actual configuring
run_cmake_command ( Envgen-unset ${ CMAKE_COMMAND } -G )
set ( ENV{CMAKE_GENERATOR} "Ninja" )
run_cmake_command ( Envgen-ninja ${ CMAKE_COMMAND } -G )
set ( ENV{CMAKE_GENERATOR} "NoSuchGenerator" )
run_cmake_command ( Envgen-bad ${ CMAKE_COMMAND } -G )
unset ( ENV{CMAKE_GENERATOR} )
if ( RunCMake_GENERATOR MATCHES "Visual Studio.*" )
set ( ENV{CMAKE_GENERATOR} "${RunCMake_GENERATOR}" )
run_cmake_command ( Envgen ${ CMAKE_COMMAND } ${ source_dir } )
# Toolset is available since VS 2010.
if ( RunCMake_GENERATOR MATCHES "Visual Studio [1-9][0-9]" )
set ( ENV{CMAKE_GENERATOR_TOOLSET} "invalid" )
# Envvar shouldn't affect existing build tree
run_cmake_command ( Envgen-toolset-existing ${ CMAKE_COMMAND } -E chdir ..
$ { C M A K E _ C O M M A N D } - - b u i l d E n v g e n - b u i l d )
run_cmake_command ( Envgen-toolset-invalid ${ CMAKE_COMMAND } ${ source_dir } )
# Command line -G implies -T""
run_cmake_command ( Envgen-G-implicit-toolset ${ CMAKE_COMMAND } -G "${RunCMake_GENERATOR}" ${ source_dir } )
run_cmake_command ( Envgen-T-toolset ${ CMAKE_COMMAND } -T "fromcli" ${ source_dir } )
unset ( ENV{CMAKE_GENERATOR_TOOLSET} )
endif ( )
# Platform can be set only if not in generator name.
if ( RunCMake_GENERATOR MATCHES "^Visual Studio [0-9]+ [0-9]+$" )
set ( ENV{CMAKE_GENERATOR_PLATFORM} "invalid" )
# Envvar shouldn't affect existing build tree
run_cmake_command ( Envgen-platform-existing ${ CMAKE_COMMAND } -E chdir ..
$ { C M A K E _ C O M M A N D } - - b u i l d E n v g e n - b u i l d )
if ( RunCMake_GENERATOR MATCHES "^Visual Studio 9 " )
set ( RunCMake-stderr-file "Envgen-platform-invalid-stderr-vs9.txt" )
endif ( )
run_cmake_command ( Envgen-platform-invalid ${ CMAKE_COMMAND } ${ source_dir } )
unset ( RunCMake-stderr-file )
# Command line -G implies -A""
run_cmake_command ( Envgen-G-implicit-platform ${ CMAKE_COMMAND } -G "${RunCMake_GENERATOR}" ${ source_dir } )
if ( RunCMake_GENERATOR MATCHES "^Visual Studio 9 " )
set ( RunCMake-stderr-file "Envgen-A-platform-stderr-vs9.txt" )
endif ( )
run_cmake_command ( Envgen-A-platform ${ CMAKE_COMMAND } -A "fromcli" ${ source_dir } )
unset ( RunCMake-stderr-file )
unset ( ENV{CMAKE_GENERATOR_PLATFORM} )
endif ( )
# Instance is available since VS 2017.
if ( RunCMake_GENERATOR MATCHES "Visual Studio 1[567].*" )
set ( ENV{CMAKE_GENERATOR_INSTANCE} "invalid" )
# Envvar shouldn't affect existing build tree
run_cmake_command ( Envgen-instance-existing ${ CMAKE_COMMAND } -E chdir ..
$ { C M A K E _ C O M M A N D } - - b u i l d E n v g e n - b u i l d )
run_cmake_command ( Envgen-instance-invalid ${ CMAKE_COMMAND } ${ source_dir } )
unset ( ENV{CMAKE_GENERATOR_INSTANCE} )
endif ( )
unset ( ENV{CMAKE_GENERATOR} )
endif ( )
endfunction ( )
run_EnvironmentGenerator ( )
function ( run_EnvironmentExportCompileCommands )
set ( RunCMake_TEST_SOURCE_DIR ${ RunCMake_SOURCE_DIR } /env-export-compile-commands )
run_cmake ( env-export-compile-commands-unset )
set ( ENV{CMAKE_EXPORT_COMPILE_COMMANDS} ON )
run_cmake ( env-export-compile-commands-set )
set ( RunCMake_TEST_OPTIONS -DCMAKE_EXPORT_COMPILE_COMMANDS=OFF )
run_cmake ( env-export-compile-commands-override )
unset ( ENV{CMAKE_EXPORT_COMPILE_COMMANDS} )
endfunction ( run_EnvironmentExportCompileCommands )
if ( RunCMake_GENERATOR MATCHES "Unix Makefiles" OR RunCMake_GENERATOR MATCHES "Ninja" )
run_EnvironmentExportCompileCommands ( )
endif ( )
function ( run_EnvironmentBuildType )
set ( ENV{CMAKE_BUILD_TYPE} "BuildTypeEnv" )
run_cmake ( EnvBuildType )
run_cmake_with_options ( EnvBuildTypeIgnore -DCMAKE_BUILD_TYPE=BuildTypeOpt )
unset ( ENV{CMAKE_BUILD_TYPE} )
endfunction ( )
function ( run_EnvironmentConfigTypes )
set ( ENV{CMAKE_CONFIGURATION_TYPES} "ConfigTypesEnv" )
run_cmake ( EnvConfigTypes )
run_cmake_with_options ( EnvConfigTypesIgnore -DCMAKE_CONFIGURATION_TYPES=ConfigTypesOpt )
unset ( ENV{CMAKE_CONFIGURATION_TYPES} )
endfunction ( )
if ( RunCMake_GENERATOR MATCHES "Make|^Ninja$" )
run_EnvironmentBuildType ( )
elseif ( RunCMake_GENERATOR MATCHES "Ninja Multi-Config|Visual Studio|Xcode" )
run_EnvironmentConfigTypes ( )
endif ( )
function ( run_EnvironmentToolchain )
set ( ENV{CMAKE_TOOLCHAIN_FILE} "${RunCMake_SOURCE_DIR}/EnvToolchain-toolchain.cmake" )
run_cmake ( EnvToolchainAbsolute )
run_cmake_with_options ( EnvToolchainIgnore -DCMAKE_TOOLCHAIN_FILE= )
unset ( ENV{CMAKE_TOOLCHAIN_FILE} )
set ( ENV{CMAKE_TOOLCHAIN_FILE} "EnvToolchain-toolchain.cmake" )
set ( RunCMake_TEST_BINARY_DIR ${ RunCMake_BINARY_DIR } /EnvToolchainRelative-build )
set ( RunCMake_TEST_NO_CLEAN 1 )
file ( REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}" )
file ( MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}" )
configure_file ( "${RunCMake_SOURCE_DIR}/EnvToolchain-toolchain.cmake" "${RunCMake_TEST_BINARY_DIR}/EnvToolchain-toolchain.cmake" COPYONLY )
run_cmake ( EnvToolchainRelative )
unset ( ENV{CMAKE_TOOLCHAIN_FILE} )
unset ( RunCMake_TEST_NO_CLEAN )
set ( RunCMake_TEST_BINARY_DIR ${ RunCMake_BINARY_DIR } /EnvToolchainNone-build )
run_cmake ( EnvToolchainNone )
set ( RunCMake_TEST_NO_CLEAN 1 )
file ( REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}/CMakeFiles" )
set ( ENV{CMAKE_TOOLCHAIN_FILE} "${RunCMake_SOURCE_DIR}/EnvToolchain-toolchain.cmake" )
run_cmake_command ( EnvToolchainNoneExisting ${ CMAKE_COMMAND } . )
unset ( ENV{CMAKE_TOOLCHAIN_FILE} )
unset ( RunCMake_TEST_NO_CLEAN )
endfunction ( )
run_EnvironmentToolchain ( )
if ( RunCMake_GENERATOR STREQUAL "Ninja" )
# Use a single build tree for a few tests without cleaning.
set ( RunCMake_TEST_BINARY_DIR ${ RunCMake_BINARY_DIR } /Build-build )
set ( RunCMake_TEST_NO_CLEAN 1 )
file ( REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}" )
file ( MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}" )
set ( RunCMake_TEST_OPTIONS -DCMAKE_VERBOSE_MAKEFILE=1 )
run_cmake ( Build )
unset ( RunCMake_TEST_OPTIONS )
run_cmake_command ( Build-ninja-v ${ CMAKE_COMMAND } --build . )
unset ( RunCMake_TEST_BINARY_DIR )
unset ( RunCMake_TEST_NO_CLEAN )
endif ( )
run_cmake_command ( E_create_symlink-no-arg
$ { C M A K E _ C O M M A N D } - E c r e a t e _ s y m l i n k
)
run_cmake_command ( E_create_symlink-missing-dir
$ { C M A K E _ C O M M A N D } - E c r e a t e _ s y m l i n k T m i s s i n g - d i r / L
)
# Use a single build tree for a few tests without cleaning.
# These tests are special on Windows since it will only fail if the user
# running the test does not have the priveldge to create symlinks. If this
# happens we clear the msg in the -check.cmake and say that the test passes
set ( RunCMake_DEFAULT_stderr "(A required privilege is not held by the client)?" )
set ( RunCMake_TEST_BINARY_DIR
$ { R u n C M a k e _ B I N A R Y _ D I R } / E _ c r e a t e _ s y m l i n k - b r o k e n - b u i l d )
set ( RunCMake_TEST_NO_CLEAN 1 )
file ( REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}" )
run_cmake_command ( E_create_symlink-broken-create
$ { C M A K E _ C O M M A N D } - E c r e a t e _ s y m l i n k T L
)
run_cmake_command ( E_create_symlink-broken-replace
$ { C M A K E _ C O M M A N D } - E c r e a t e _ s y m l i n k . L
)
unset ( RunCMake_TEST_BINARY_DIR )
unset ( RunCMake_TEST_NO_CLEAN )
unset ( RunCMake_DEFAULT_stderr )
run_cmake_command ( E_create_symlink-no-replace-dir
$ { C M A K E _ C O M M A N D } - E c r e a t e _ s y m l i n k T .
)
#create hard link tests
run_cmake_command ( E_create_hardlink-no-arg
$ { C M A K E _ C O M M A N D } - E c r e a t e _ h a r d l i n k
)
set ( dir ${ RunCMake_BINARY_DIR } /hardlink_tests )
file ( REMOVE_RECURSE "${dir}" )
file ( MAKE_DIRECTORY ${ dir } )
run_cmake_command ( E_create_hardlink-non-existent-source
$ { C M A K E _ C O M M A N D } - E c r e a t e _ h a r d l i n k $ { d i r } / I _ d o n t _ e x i s t $ { d i r } / l i n k
)
file ( TOUCH ${ dir } /1 )
run_cmake_command ( E_create_hardlink-ok
$ { C M A K E _ C O M M A N D } - E c r e a t e _ h a r d l i n k $ { d i r } / 1 $ { d i r } / 1 - l i n k
)
run_cmake_command ( E_create_hardlink-no-directory
$ { C M A K E _ C O M M A N D } - E c r e a t e _ h a r d l i n k $ { d i r } / 1 $ { d i r } / a / 1 - l i n k
)
#On Windows, if the user does not have sufficient privileges
#don't fail this test
set ( RunCMake_DEFAULT_stderr "(A required privilege is not held by the client)?" )
run_cmake_command ( E_create_hardlink-unresolved-symlink-prereq
$ { C M A K E _ C O M M A N D } - E c r e a t e _ s y m l i n k $ { d i r } / 1 $ { d i r } / 1 - s y m l i n k
)
file ( REMOVE ${ dir } /1 )
run_cmake_command ( E_create_hardlink-unresolved-symlink
$ { C M A K E _ C O M M A N D } - E c r e a t e _ h a r d l i n k $ { d i r } / 1 - s y m l i n k $ { d i r } / 1 s - l i n k
)
unset ( RunCMake_DEFAULT_stderr )
set ( in ${ RunCMake_SOURCE_DIR } /copy_input )
set ( out ${ RunCMake_BINARY_DIR } /copy_output )
file ( REMOVE_RECURSE "${out}" )
file ( MAKE_DIRECTORY ${ out } )
run_cmake_command ( E_copy-one-source-file
$ { C M A K E _ C O M M A N D } - E c o p y $ { o u t } / f 1 . t x t )
run_cmake_command ( E_copy-one-source-directory-target-is-directory
$ { C M A K E _ C O M M A N D } - E c o p y $ { i n } / f 1 . t x t $ { o u t } )
run_cmake_command ( E_copy-three-source-files-target-is-directory
$ { C M A K E _ C O M M A N D } - E c o p y $ { i n } / f 1 . t x t $ { i n } / f 2 . t x t $ { i n } / f 3 . t x t $ { o u t } )
run_cmake_command ( E_copy-three-source-files-target-is-file
$ { C M A K E _ C O M M A N D } - E c o p y $ { i n } / f 1 . t x t $ { i n } / f 2 . t x t $ { i n } / f 3 . t x t $ { o u t } / f 1 . t x t )
run_cmake_command ( E_copy-two-good-and-one-bad-source-files-target-is-directory
$ { C M A K E _ C O M M A N D } - E c o p y $ { i n } / f 1 . t x t $ { i n } / n o t _ e x i s t i n g _ f i l e . b a d $ { i n } / f 3 . t x t $ { o u t } )
run_cmake_command ( E_copy_if_different-one-source-directory-target-is-directory
$ { C M A K E _ C O M M A N D } - E c o p y _ i f _ d i f f e r e n t $ { i n } / f 1 . t x t $ { o u t } )
run_cmake_command ( E_copy_if_different-three-source-files-target-is-directory
$ { C M A K E _ C O M M A N D } - E c o p y _ i f _ d i f f e r e n t $ { i n } / f 1 . t x t $ { i n } / f 2 . t x t $ { i n } / f 3 . t x t $ { o u t } )
run_cmake_command ( E_copy_if_different-three-source-files-target-is-file
$ { C M A K E _ C O M M A N D } - E c o p y _ i f _ d i f f e r e n t $ { i n } / f 1 . t x t $ { i n } / f 2 . t x t $ { i n } / f 3 . t x t $ { o u t } / f 1 . t x t )
unset ( in )
unset ( out )
set ( in ${ RunCMake_SOURCE_DIR } /copy_input )
set ( out ${ RunCMake_BINARY_DIR } /copy_directory_output )
set ( outfile ${ out } /file_for_test.txt )
file ( REMOVE_RECURSE "${out}" )
file ( MAKE_DIRECTORY ${ out } )
file ( WRITE ${ outfile } "" )
run_cmake_command ( E_copy_directory-three-source-files-target-is-directory
$ { C M A K E _ C O M M A N D } - E c o p y _ d i r e c t o r y $ { i n } / d 1 $ { i n } / d 2 $ { i n } / d 3 $ { o u t } )
run_cmake_command ( E_copy_directory-three-source-files-target-is-file
$ { C M A K E _ C O M M A N D } - E c o p y _ d i r e c t o r y $ { i n } / d 1 $ { i n } / d 2 $ { i n } / d 3 $ { o u t f i l e } )
run_cmake_command ( E_copy_directory-three-source-files-target-is-not-exist
$ { C M A K E _ C O M M A N D } - E c o p y _ d i r e c t o r y $ { i n } / d 1 $ { i n } / d 2 $ { i n } / d 3 $ { o u t } / n o t _ e x i s t i n g _ d i r e c t o r y )
unset ( in )
unset ( out )
unset ( outfile )
set ( out ${ RunCMake_BINARY_DIR } /make_directory_output )
set ( outfile ${ out } /file_for_test.txt )
file ( REMOVE_RECURSE "${out}" )
file ( MAKE_DIRECTORY ${ out } )
file ( WRITE ${ outfile } "" )
run_cmake_command ( E_make_directory-three-directories
$ { C M A K E _ C O M M A N D } - E m a k e _ d i r e c t o r y $ { o u t } / d 1 $ { o u t } / d 2 $ { o u t } / d 2 )
run_cmake_command ( E_remove_directory-three-directories
$ { C M A K E _ C O M M A N D } - E r e m o v e _ d i r e c t o r y $ { o u t } / d 1 $ { o u t } / d 2 $ { o u t } / d 2 )
run_cmake_command ( E_make_directory-directory-with-parent
$ { C M A K E _ C O M M A N D } - E m a k e _ d i r e c t o r y $ { o u t } / p a r e n t / c h i l d )
run_cmake_command ( E_remove_directory-directory-with-parent
$ { C M A K E _ C O M M A N D } - E r e m o v e _ d i r e c t o r y $ { o u t } / p a r e n t )
run_cmake_command ( E_make_directory-two-directories-and-file
$ { C M A K E _ C O M M A N D } - E m a k e _ d i r e c t o r y $ { o u t } / d 1 $ { o u t } / d 2 $ { o u t f i l e } )
run_cmake_command ( E_remove_directory-two-directories-and-file
$ { C M A K E _ C O M M A N D } - E r e m o v e _ d i r e c t o r y $ { o u t } / d 1 $ { o u t } / d 2 $ { o u t f i l e } )
if ( UNIX )
file ( MAKE_DIRECTORY ${ out } /dir )
file ( CREATE_LINK ${ out } /dir ${ out } /link_dir SYMBOLIC )
file ( CREATE_LINK ${ outfile } ${ out } /link_file_for_test.txt SYMBOLIC )
run_cmake_command ( E_remove_directory-symlink-dir
$ { C M A K E _ C O M M A N D } - E r e m o v e _ d i r e c t o r y $ { o u t } / l i n k _ d i r )
run_cmake_command ( E_remove_directory-symlink-file
$ { C M A K E _ C O M M A N D } - E r e m o v e _ d i r e c t o r y $ { o u t } / l i n k _ f i l e _ f o r _ t e s t . t x t )
endif ( )
unset ( out )
unset ( outfile )
set ( out ${ RunCMake_BINARY_DIR } /rm_tests )
file ( REMOVE_RECURSE "${out}" )
file ( MAKE_DIRECTORY ${ out } )
file ( TOUCH ${ out } /existing.txt )
run_cmake_command ( E_rm_file_force_existing
$ { C M A K E _ C O M M A N D } - E r m - f $ { o u t } / e x i s t i n g . t x t )
file ( TOUCH ${ out } /existing.txt )
run_cmake_command ( E_rm_file_non_force_existing
$ { C M A K E _ C O M M A N D } - E r m $ { o u t } / e x i s t i n g . t x t )
run_cmake_command ( E_rm_file_force_non_existing
$ { C M A K E _ C O M M A N D } - E r m - f $ { o u t } / n o t _ e x i s t i n g . t x t )
run_cmake_command ( E_rm_file_non_force_non_existing
$ { C M A K E _ C O M M A N D } - E r m $ { o u t } / n o t _ e x i s t i n g . t x t )
file ( TOUCH ${ out } /existing.txt )
run_cmake_command ( E_rm_file_recursive_existing
$ { C M A K E _ C O M M A N D } - E r m - r $ { o u t } / e x i s t i n g . t x t )
run_cmake_command ( E_rm_file_recursive_non_existing
$ { C M A K E _ C O M M A N D } - E r m - r $ { o u t } / n o t _ e x i s t i n g . t x t )
file ( MAKE_DIRECTORY ${ out } /d1 ${ out } /d2 )
run_cmake_command ( E_rm_non_recursive_directory-two-directories
$ { C M A K E _ C O M M A N D } - E r m $ { o u t } / d 1 $ { o u t } / d 2 )
run_cmake_command ( E_rm_recursive_directory-two-directories
$ { C M A K E _ C O M M A N D } - E r m - R $ { o u t } / d 1 $ { o u t } / d 2 )
run_cmake_command ( E_rm_no_file_specified
$ { C M A K E _ C O M M A N D } - E r m - r f )
run_cmake_command ( E_rm_empty_file_specified
$ { C M A K E _ C O M M A N D } - P $ { R u n C M a k e _ S O U R C E _ D I R } / E _ r m _ e m p t y _ f i l e _ s p e c i f i e d . c m a k e )
run_cmake_command ( E_rm_bad_argument
$ { C M A K E _ C O M M A N D } - E r m - r d $ { o u t } / d 1 $ { o u t } / d 2 )
file ( MAKE_DIRECTORY ${ out } /d1 ${ out } /d2 )
file ( WRITE ${ out } /test.txt "" )
run_cmake_command ( E_rm_force_recursive_directory_with_files
$ { C M A K E _ C O M M A N D } - E r m - r f $ { o u t } / )
run_cmake_command ( E_rm_force_recursive_non_existing_file
$ { C M A K E _ C O M M A N D } - E r m - R f $ { o u t } / t e s t . t x t )
if ( NOT WIN32 AND NOT CYGWIN )
file ( MAKE_DIRECTORY ${ out } )
file ( TOUCH ${ out } /existing.txt )
file ( MAKE_DIRECTORY ${ out } /dir )
file ( TOUCH ${ out } /dir/existing.txt ) # add a file in the folder
file ( CREATE_LINK ${ out } /dir ${ out } /link_dir SYMBOLIC )
file ( CREATE_LINK ${ out } /existing.txt ${ out } /existing_file_link.txt SYMBOLIC )
file ( CREATE_LINK ${ out } /non_existing.txt ${ out } /non_existing_file_link.txt SYMBOLIC )
run_cmake_command ( E_rm_file_link_existing
$ { C M A K E _ C O M M A N D } - E r m $ { o u t } / e x i s t i n g _ f i l e _ l i n k . t x t )
run_cmake_command ( E_rm_directory_link_existing
$ { C M A K E _ C O M M A N D } - E r m $ { o u t } / l i n k _ d i r )
run_cmake_command ( E_rm_file_link_non_existing
$ { C M A K E _ C O M M A N D } - E r m $ { o u t } / n o n _ e x i s t i n g _ f i l e _ l i n k . t x t )
file ( CREATE_LINK ${ out } /dir ${ out } /link_dir SYMBOLIC )
file ( CREATE_LINK ${ out } /existing.txt ${ out } /existing_file_link.txt SYMBOLIC )
file ( CREATE_LINK ${ out } /non_existing.txt ${ out } /non_existing_file_link.txt SYMBOLIC )
run_cmake_command ( E_rm_recursive_file_link_existing
$ { C M A K E _ C O M M A N D } - E r m - R $ { o u t } / e x i s t i n g _ f i l e _ l i n k . t x t )
run_cmake_command ( E_rm_recursive_directory_link_existing
$ { C M A K E _ C O M M A N D } - E r m - r $ { o u t } / l i n k _ d i r )
run_cmake_command ( E_rm_recursive_file_link_non_existing
$ { C M A K E _ C O M M A N D } - E r m - r $ { o u t } / n o n _ e x i s t i n g _ f i l e _ l i n k . t x t )
endif ( )
unset ( out )
# cat tests
set ( out ${ RunCMake_BINARY_DIR } /cat_tests )
file ( REMOVE_RECURSE "${out}" )
file ( MAKE_DIRECTORY ${ out } )
run_cmake_command ( E_cat_non_existing_file
$ { C M A K E _ C O M M A N D } - E c a t $ { o u t } / n o n - e x i s t i n g - f i l e . t x t )
if ( UNIX AND NOT MSYS )
# test non readable file only if not root
execute_process (
C O M M A N D i d - u $ E N V { U S E R }
O U T P U T _ V A R I A B L E u i d
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E )
if ( NOT "${uid}" STREQUAL "0" )
# Create non readable file
set ( inside_folder "${out}/in" )
file ( MAKE_DIRECTORY ${ inside_folder } )
file ( WRITE "${inside_folder}/non_readable_file.txt" "first file to append\n" )
file ( COPY "${inside_folder}/non_readable_file.txt" DESTINATION "${out}" FILE_PERMISSIONS OWNER_WRITE )
run_cmake_command ( E_cat_non_readable_file
$ { C M A K E _ C O M M A N D } - E c a t " $ { o u t } / n o n _ r e a d a b l e _ f i l e . t x t " )
endif ( )
endif ( )
run_cmake_command ( E_cat_option_not_handled
$ { C M A K E _ C O M M A N D } - E c a t - f )
run_cmake_command ( E_cat_directory
$ { C M A K E _ C O M M A N D } - E c a t $ { o u t } )
file ( WRITE "${out}/first_file.txt" "first file to append\n" )
file ( WRITE "${out}/second_file.txt" "second file to append\n" )
file ( WRITE "${out}/empty_file.txt" "" )
file ( WRITE "${out}/unicode_file.txt" "àéùç - 한국어" ) # Korean in Korean
run_cmake_command ( E_cat_good_cat
$ { C M A K E _ C O M M A N D } - E c a t " $ { o u t } / f i r s t _ f i l e . t x t " " $ { o u t } / s e c o n d _ f i l e . t x t " " $ { o u t } / e m p t y _ f i l e . t x t " " $ { o u t } / u n i c o d e _ f i l e . t x t " )
unset ( out )
run_cmake_command ( E_cat_good_binary_cat
$ { C M A K E _ C O M M A N D } - E c a t " $ { R u n C M a k e _ S O U R C E _ D I R } / E _ c a t _ b i n a r y _ f i l e s / b i n a r y . o b j " " $ { R u n C M a k e _ S O U R C E _ D I R } / E _ c a t _ b i n a r y _ f i l e s / b i n a r y . o b j " )
run_cmake_command ( E_env-no-command0 ${ CMAKE_COMMAND } -E env )
run_cmake_command ( E_env-no-command1 ${ CMAKE_COMMAND } -E env TEST_ENV=1 )
run_cmake_command ( E_env-bad-arg1 ${ CMAKE_COMMAND } -E env -bad-arg1 )
run_cmake_command ( E_env-set ${ CMAKE_COMMAND } -E env TEST_ENV=1 ${ CMAKE_COMMAND } -P ${ RunCMake_SOURCE_DIR } /E_env-set.cmake )
run_cmake_command ( E_env-unset ${ CMAKE_COMMAND } -E env TEST_ENV=1 ${ CMAKE_COMMAND } -E env --unset=TEST_ENV ${ CMAKE_COMMAND } -P ${ RunCMake_SOURCE_DIR } /E_env-unset.cmake )
run_cmake_command ( E_md5sum-dir ${ CMAKE_COMMAND } -E md5sum . )
run_cmake_command ( E_sha1sum-dir ${ CMAKE_COMMAND } -E sha1sum . )
run_cmake_command ( E_sha224sum-dir ${ CMAKE_COMMAND } -E sha224sum . )
run_cmake_command ( E_sha256sum-dir ${ CMAKE_COMMAND } -E sha256sum . )
run_cmake_command ( E_sha384sum-dir ${ CMAKE_COMMAND } -E sha384sum . )
run_cmake_command ( E_sha512sum-dir ${ CMAKE_COMMAND } -E sha512sum . )
run_cmake_command ( E_md5sum-no-file ${ CMAKE_COMMAND } -E md5sum nonexisting )
run_cmake_command ( E_sha1sum-no-file ${ CMAKE_COMMAND } -E sha1sum nonexisting )
run_cmake_command ( E_sha224sum-no-file ${ CMAKE_COMMAND } -E sha224sum nonexisting )
run_cmake_command ( E_sha256sum-no-file ${ CMAKE_COMMAND } -E sha256sum nonexisting )
run_cmake_command ( E_sha384sum-no-file ${ CMAKE_COMMAND } -E sha384sum nonexisting )
run_cmake_command ( E_sha512sum-no-file ${ CMAKE_COMMAND } -E sha512sum nonexisting )
file ( WRITE "${RunCMake_BINARY_DIR}/dummy" "dummy" )
run_cmake_command ( E_md5sum ${ CMAKE_COMMAND } -E md5sum ../dummy )
run_cmake_command ( E_md5sum-mixed ${ CMAKE_COMMAND } -E md5sum . ../dummy nonexisting )
run_cmake_command ( E_sha1sum ${ CMAKE_COMMAND } -E sha1sum ../dummy )
run_cmake_command ( E_sha224sum ${ CMAKE_COMMAND } -E sha224sum ../dummy )
run_cmake_command ( E_sha256sum ${ CMAKE_COMMAND } -E sha256sum ../dummy )
run_cmake_command ( E_sha384sum ${ CMAKE_COMMAND } -E sha384sum ../dummy )
run_cmake_command ( E_sha512sum ${ CMAKE_COMMAND } -E sha512sum ../dummy )
file ( REMOVE "${RunCMake_BINARY_DIR}/dummy" )
set ( RunCMake_DEFAULT_stderr "." )
run_cmake_command ( E_sleep-no-args ${ CMAKE_COMMAND } -E sleep )
unset ( RunCMake_DEFAULT_stderr )
run_cmake_command ( E_sleep-bad-arg1 ${ CMAKE_COMMAND } -E sleep x )
run_cmake_command ( E_sleep-bad-arg2 ${ CMAKE_COMMAND } -E sleep 1 -1 )
run_cmake_command ( E_sleep-one-tenth ${ CMAKE_COMMAND } -E sleep 0.1 )
run_cmake_command ( P_directory ${ CMAKE_COMMAND } -P ${ RunCMake_SOURCE_DIR } )
run_cmake_command ( P_working-dir ${ CMAKE_COMMAND } -DEXPECTED_WORKING_DIR= ${ RunCMake_BINARY_DIR } /P_working-dir-build -P ${ RunCMake_SOURCE_DIR } /P_working-dir.cmake )
# Documented to return the same result as above even if -S and -B are set to something else.
# Tests the values of CMAKE_BINARY_DIR CMAKE_CURRENT_BINARY_DIR CMAKE_SOURCE_DIR CMAKE_CURRENT_SOURCE_DIR.
run_cmake_command ( P_working-dir ${ CMAKE_COMMAND } -DEXPECTED_WORKING_DIR= ${ RunCMake_BINARY_DIR } /P_working-dir-build -P ${ RunCMake_SOURCE_DIR } /P_working-dir.cmake -S something_else -B something_else_1 )
# Place an initial cache where C_basic will find it when passed the relative path "..".
file ( COPY ${ RunCMake_SOURCE_DIR } /C_basic_initial-cache.txt DESTINATION ${ RunCMake_BINARY_DIR } )
run_cmake_with_options ( C_basic -C ../C_basic_initial-cache.txt )
run_cmake_with_options ( C_basic_fullpath -C ${ RunCMake_BINARY_DIR } /C_basic_initial-cache.txt )
set ( RunCMake_TEST_OPTIONS
" - D F O O = - D B A R : B O O L = B A Z " )
run_cmake ( D_nested_cache )
set ( RunCMake_TEST_OPTIONS
" - D F O O : S T R I N G = - D B A R : B O O L = B A Z " )
run_cmake ( D_typed_nested_cache )
set ( RunCMake_TEST_OPTIONS -Wno-dev )
run_cmake ( Wno-dev )
unset ( RunCMake_TEST_OPTIONS )
set ( RunCMake_TEST_OPTIONS -Wdev )
run_cmake ( Wdev )
unset ( RunCMake_TEST_OPTIONS )
set ( RunCMake_TEST_OPTIONS -Werror=dev )
run_cmake ( Werror_dev )
unset ( RunCMake_TEST_OPTIONS )
set ( RunCMake_TEST_OPTIONS -Wno-error=dev )
run_cmake ( Wno-error_deprecated )
unset ( RunCMake_TEST_OPTIONS )
# -Wdev should not override deprecated options if specified
set ( RunCMake_TEST_OPTIONS -Wdev -Wno-deprecated )
run_cmake ( Wno-deprecated )
unset ( RunCMake_TEST_OPTIONS )
set ( RunCMake_TEST_OPTIONS -Wno-deprecated -Wdev )
run_cmake ( Wno-deprecated )
unset ( RunCMake_TEST_OPTIONS )
# -Wdev should enable deprecated warnings as well
set ( RunCMake_TEST_OPTIONS -Wdev )
run_cmake ( Wdeprecated )
unset ( RunCMake_TEST_OPTIONS )
# -Werror=dev should enable deprecated errors as well
set ( RunCMake_TEST_OPTIONS -Werror=dev )
run_cmake ( Werror_deprecated )
unset ( RunCMake_TEST_OPTIONS )
set ( RunCMake_TEST_OPTIONS -Wdeprecated )
run_cmake ( Wdeprecated )
unset ( RunCMake_TEST_OPTIONS )
set ( RunCMake_TEST_OPTIONS -Wno-deprecated )
run_cmake ( Wno-deprecated )
unset ( RunCMake_TEST_OPTIONS )
set ( RunCMake_TEST_OPTIONS -Werror=deprecated )
run_cmake ( Werror_deprecated )
unset ( RunCMake_TEST_OPTIONS )
set ( RunCMake_TEST_OPTIONS -Wno-error=deprecated )
run_cmake ( Wno-error_deprecated )
unset ( RunCMake_TEST_OPTIONS )
set ( RunCMake_TEST_OPTIONS -Werror=deprecated -Wno-error=deprecated )
run_cmake ( Wno-error_deprecated )
unset ( RunCMake_TEST_OPTIONS )
# Dev warnings should be on by default
run_cmake ( Wdev )
# Deprecated warnings should be on by default
run_cmake ( Wdeprecated )
# Conflicting -W options should honor the last value
set ( RunCMake_TEST_OPTIONS -Wno-dev -Wdev )
run_cmake ( Wdev )
unset ( RunCMake_TEST_OPTIONS )
set ( RunCMake_TEST_OPTIONS -Wdev -Wno-dev )
run_cmake ( Wno-dev )
unset ( RunCMake_TEST_OPTIONS )
run_cmake_command ( W_bad-arg1 ${ CMAKE_COMMAND } -B DummyBuildDir -W )
run_cmake_command ( W_bad-arg2 ${ CMAKE_COMMAND } -B DummyBuildDir -Wno- )
run_cmake_command ( W_bad-arg3 ${ CMAKE_COMMAND } -B DummyBuildDir -Werror= )
set ( RunCMake_TEST_OPTIONS --debug-output )
run_cmake ( debug-output )
unset ( RunCMake_TEST_OPTIONS )
set ( RunCMake_TEST_OPTIONS --trace )
run_cmake ( trace )
unset ( RunCMake_TEST_OPTIONS )
set ( RunCMake_TEST_OPTIONS --trace-expand )
run_cmake ( trace-expand )
unset ( RunCMake_TEST_OPTIONS )
set ( RunCMake_TEST_OPTIONS --trace-expand --warn-uninitialized )
run_cmake ( trace-expand-warn-uninitialized )
unset ( RunCMake_TEST_OPTIONS )
set ( RunCMake_TEST_OPTIONS --trace-redirect= ${ RunCMake_BINARY_DIR } /redirected.trace )
run_cmake ( trace-redirect )
unset ( RunCMake_TEST_OPTIONS )
set ( RunCMake_TEST_OPTIONS --trace-redirect=/no/such/file.txt )
run_cmake ( trace-redirect-nofile )
unset ( RunCMake_TEST_OPTIONS )
set ( RunCMake_TEST_OPTIONS --trace --trace-format=json-v1 --trace-redirect= ${ RunCMake_BINARY_DIR } /json-v1.trace )
run_cmake ( trace-json-v1 )
unset ( RunCMake_TEST_OPTIONS )
set ( RunCMake_TEST_OPTIONS --trace-expand --trace-format=json-v1 --trace-redirect= ${ RunCMake_BINARY_DIR } /json-v1-expand.trace )
run_cmake ( trace-json-v1-expand )
unset ( RunCMake_TEST_OPTIONS )
set ( RunCMake_TEST_OPTIONS -Wno-deprecated --warn-uninitialized )
run_cmake ( warn-uninitialized )
unset ( RunCMake_TEST_OPTIONS )
set ( RunCMake_TEST_OPTIONS --trace-source=trace-only-this-file.cmake )
run_cmake ( trace-source )
unset ( RunCMake_TEST_OPTIONS )
set ( RunCMake_TEST_OPTIONS --debug-trycompile )
run_cmake ( debug-trycompile )
unset ( RunCMake_TEST_OPTIONS )
function ( run_cmake_depends )
set ( RunCMake_TEST_SOURCE_DIR "${RunCMake_SOURCE_DIR}/cmake_depends" )
set ( RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/cmake_depends-build" )
set ( RunCMake_TEST_NO_CLEAN 1 )
file ( REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}" )
file ( MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}" )
file ( WRITE "${RunCMake_TEST_BINARY_DIR}/CMakeFiles/DepTarget.dir/DependInfo.cmake" "
set ( CMAKE_DEPENDS_LANGUAGES \"C\")
set ( CMAKE_DEPENDS_CHECK_C
\ " $ { R u n C M a k e _ T E S T _ S O U R C E _ D I R } / t e s t . c \ "
\ " $ { R u n C M a k e _ T E S T _ B I N A R Y _ D I R } / C M a k e F i l e s / D e p T a r g e t . d i r / t e s t . c . o \ "
)
" )
file ( WRITE "${RunCMake_TEST_BINARY_DIR}/CMakeFiles/CMakeDirectoryInformation.cmake" "
set ( CMAKE_RELATIVE_PATH_TOP_SOURCE \"${RunCMake_TEST_SOURCE_DIR}\")
set ( CMAKE_RELATIVE_PATH_TOP_BINARY \"${RunCMake_TEST_BINARY_DIR}\")
" )
run_cmake_command ( cmake_depends ${ CMAKE_COMMAND } -E cmake_depends
" U n i x M a k e f i l e s "
$ { R u n C M a k e _ T E S T _ S O U R C E _ D I R } $ { R u n C M a k e _ T E S T _ S O U R C E _ D I R }
$ { R u n C M a k e _ T E S T _ B I N A R Y _ D I R } $ { R u n C M a k e _ T E S T _ B I N A R Y _ D I R }
$ { R u n C M a k e _ T E S T _ B I N A R Y _ D I R } / C M a k e F i l e s / D e p T a r g e t . d i r / D e p e n d I n f o . c m a k e
)
endfunction ( )
run_cmake_depends ( )
function ( reject_fifo )
find_program ( BASH_EXECUTABLE bash )
if ( BASH_EXECUTABLE )
set ( BASH_COMMAND_ARGUMENT "'${CMAKE_COMMAND}' -P <(echo 'return()')" )
run_cmake_command ( reject_fifo ${ BASH_EXECUTABLE } -c ${ BASH_COMMAND_ARGUMENT } )
endif ( )
endfunction ( )
if ( CMAKE_HOST_UNIX AND NOT CMAKE_SYSTEM_NAME STREQUAL "CYGWIN" AND NOT CMAKE_SYSTEM_NAME STREQUAL "MSYS" )
reject_fifo ( )
run_cmake_command ( closed_stdin sh -c "\" ${ CMAKE_COMMAND } \" --version <&- " )
run_cmake_command ( closed_stdout sh -c "\" ${ CMAKE_COMMAND } \" --version >&- " )
run_cmake_command ( closed_stderr sh -c "\" ${ CMAKE_COMMAND } \" --version 2>&- " )
run_cmake_command ( closed_stdall sh -c "\" ${ CMAKE_COMMAND } \" --version <&- >&- 2>&- " )
endif ( )
function ( run_llvm_rc )
set ( RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/llvm_rc-build" )
set ( RunCMake_TEST_NO_CLEAN 1 )
file ( REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}" )
file ( MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}" )
run_cmake_command ( llvm_rc_no_args ${ CMAKE_COMMAND } -E cmake_llvm_rc )
run_cmake_command ( llvm_rc_no_-- ${ CMAKE_COMMAND } -E cmake_llvm_rc ${ RunCMake_TEST_BINARY_DIR } /source_file test.tmp ${ CMAKE_COMMAND } -E echo "This is a test" )
run_cmake_command ( llvm_rc_empty_preprocessor ${ CMAKE_COMMAND } -E cmake_llvm_rc ${ RunCMake_TEST_BINARY_DIR } /source_file test.tmp ++ ${ CMAKE_COMMAND } -E echo "This is a test" )
run_cmake_command ( llvm_rc_failing_first_command ${ CMAKE_COMMAND } -E cmake_llvm_rc ${ RunCMake_TEST_BINARY_DIR } /source_file test.tmp ${ CMAKE_COMMAND } -P FailedProgram.cmake ++ ${ CMAKE_COMMAND } -E echo "This is a test" )
run_cmake_command ( llvm_rc_failing_second_command ${ CMAKE_COMMAND } -E cmake_llvm_rc ${ RunCMake_TEST_BINARY_DIR } /source_file test.tmp ${ CMAKE_COMMAND } -E echo "This is a test" ++ ${ CMAKE_COMMAND } -P FailedProgram.cmake )
if ( EXISTS ${ RunCMake_TEST_BINARY_DIR } /test.tmp )
message ( SEND_ERROR "${test} - FAILED:\n"
" t e s t . t m p w a s n o t d e l e t e d " )
endif ( )
file ( MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}/ExpandSourceDir" )
run_cmake_command ( llvm_rc_full_run ${ CMAKE_COMMAND } -E cmake_llvm_rc ${ RunCMake_TEST_BINARY_DIR } /ExpandSourceDir/source_file test.tmp ${ CMAKE_COMMAND } -E echo "This is a test" ++ ${ LLVM_RC } -bad /FO SOURCE_DIR/llvmrc.result test.tmp )
if ( EXISTS ${ RunCMake_TEST_BINARY_DIR } /ExpandSourceDir/test.tmp )
message ( SEND_ERROR "${test} - FAILED:\n"
" t e s t . t m p w a s n o t d e l e t e d " )
endif ( )
file ( READ ${ RunCMake_TEST_BINARY_DIR } /ExpandSourceDir/llvmrc.result LLVMRC_RESULT )
if ( NOT "${LLVMRC_RESULT}" STREQUAL "This is a test\n" )
message ( SEND_ERROR "${test} - FAILED:\n"
" l l v m r c . r e s u l t w a s n o t c r e a t e d " )
endif ( )
unset ( LLVMRC_RESULT )
endfunction ( )
run_llvm_rc ( )
set ( RunCMake_TEST_OPTIONS --profiling-output=/no/such/file.txt --profiling-format=google-trace )
run_cmake ( profiling-all-params )
unset ( RunCMake_TEST_OPTIONS )
set ( RunCMake_TEST_OPTIONS --profiling-output=/no/such/file.txt --profiling-format=invalid-format )
run_cmake ( profiling-invalid-format )
unset ( RunCMake_TEST_OPTIONS )
set ( RunCMake_TEST_OPTIONS --profiling-output=/no/such/file.txt )
run_cmake ( profiling-missing-format )
unset ( RunCMake_TEST_OPTIONS )
set ( RunCMake_TEST_OPTIONS --profiling-format=google-trace )
run_cmake ( profiling-missing-output )
unset ( RunCMake_TEST_OPTIONS )
set ( RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/profiling-test" )
set ( ProfilingTestOutput ${ RunCMake_TEST_BINARY_DIR } /output.json )
set ( RunCMake_TEST_OPTIONS --profiling-format=google-trace --profiling-output= ${ ProfilingTestOutput } )
run_cmake ( ProfilingTest )
unset ( RunCMake_TEST_OPTIONS )
if ( RunCMake_GENERATOR MATCHES "^Visual Studio 10 2010" )
run_cmake_with_options ( DeprecateVS10-WARN-ON -DCMAKE_WARN_VS10=ON )
unset ( ENV{CMAKE_WARN_VS10} )
run_cmake ( DeprecateVS10-WARN-ON )
run_cmake_with_options ( DeprecateVS10-WARN-OFF -DCMAKE_WARN_VS10=OFF )
endif ( )