Merge topic 'cmake-e-rm'

2d0100fac7 replace remove and remove_directory with rm in tests
5239fc5c75 cmake -E: Add rm with improved semantics over remove and remove_directory

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !3949
This commit is contained in:
Kyle Edwards
2019-11-15 14:57:38 +00:00
committed by Kitware Robot
70 changed files with 287 additions and 54 deletions

View File

@@ -554,22 +554,38 @@ Available commands are:
7a0b54896fe5e70cca6dd643ad6f672614b189bf26f8153061c4d219474b05dad08c4e729af9f4b009f1a1a280cb625454bf587c690f4617c27e3aebdf3b7a2d file2.txt
``remove [-f] <file>...``
Remove the file(s). If any of the listed files already do not
exist, the command returns a non-zero exit code, but no message
is logged. The ``-f`` option changes the behavior to return a
.. deprecated:: 3.17
Remove the file(s). The planned behaviour was that if any of the
listed files already do not exist, the command returns a non-zero exit code,
but no message is logged. The ``-f`` option changes the behavior to return a
zero exit code (i.e. success) in such situations instead.
``remove`` does not follow symlinks. That means it remove only symlinks
and not files it point to.
The implementation was buggy and always returned 0. It cannot be fixed without
breaking backwards compatibility. Use ``rm`` instead.
``remove_directory <dir>...``
Remove ``<dir>`` directories and their contents. If a directory does
.. deprecated:: 3.17
Remove ``<dir>`` directories and their contents. If a directory does
not exist it will be silently ignored. If ``<dir>`` is a symlink to
a directory, just the symlink will be removed.
Use ``rm`` instead.
``rename <oldname> <newname>``
Rename a file or directory (on one volume). If file with the ``<newname>`` name
already exists, then it will be silently replaced.
``rm [-rRf] <file> <dir>...``
Remove the files ``<file>`` or directories ``dir``.
Use ``-r`` or ``-R`` to remove directories and their contents recursively.
If any of the listed files/directories do not exist, the command returns a
non-zero exit code, but no message is logged. The ``-f`` option changes
the behavior to return a zero exit code (i.e. success) in such
situations instead.
``server``
Launch :manual:`cmake-server(7)` mode.

View File

@@ -0,0 +1,12 @@
Command-Line
--------------------
* :manual:`cmake(1)` gained a ``rm`` command line
option that can be used to remove directories (with ``-r`` or ``-R`` flag)
and files.
If the ``-f`` flag is not specified, attempting to remove a file that
doesn't exist returns an non-zero error code.
This command deprecates ``remove`` and ``remove_directory``.
The ``remove`` implementation was buggy and always returned 0 when ``force``
flag was not present and a file didn't exist. It cannot be fixed without
breaking backwards compatibility so we introduced ``rm``.

View File

@@ -155,7 +155,7 @@ function(cmake_add_fortran_subdirectory subdir)
# make the external project always run make with each build
externalproject_add_step(${project_name}_build forcebuild
COMMAND ${CMAKE_COMMAND}
-E remove
-E rm -f
${CMAKE_CURRENT_BUILD_DIR}/${project_name}-prefix/src/${project_name}-stamp/${project_name}-build
DEPENDEES configure
DEPENDERS build

View File

@@ -1120,7 +1120,7 @@ if(NOT \"${gitclone_infofile}\" IS_NEWER_THAN \"${gitclone_stampfile}\")
endif()
execute_process(
COMMAND \${CMAKE_COMMAND} -E remove_directory \"${source_dir}\"
COMMAND \${CMAKE_COMMAND} -E rm -rf \"${source_dir}\"
RESULT_VARIABLE error_code
)
if(error_code)
@@ -1196,7 +1196,7 @@ if(NOT \"${hgclone_infofile}\" IS_NEWER_THAN \"${hgclone_stampfile}\")
endif()
execute_process(
COMMAND \${CMAKE_COMMAND} -E remove_directory \"${source_dir}\"
COMMAND \${CMAKE_COMMAND} -E rm -rf \"${source_dir}\"
RESULT_VARIABLE error_code
)
if(error_code)
@@ -2580,7 +2580,7 @@ function(_ep_add_download_command name)
if(IS_DIRECTORY "${url}")
get_filename_component(abs_dir "${url}" ABSOLUTE)
set(comment "Performing download step (DIR copy) for '${name}'")
set(cmd ${CMAKE_COMMAND} -E remove_directory ${source_dir}
set(cmd ${CMAKE_COMMAND} -E rm -rf ${source_dir}
COMMAND ${CMAKE_COMMAND} -E copy_directory ${abs_dir} ${source_dir})
else()
get_property(no_extract TARGET "${name}" PROPERTY _EP_DOWNLOAD_NO_EXTRACT SET)

View File

@@ -2006,7 +2006,7 @@ macro(CUDA_BUILD_CLEAN_TARGET)
string(TOUPPER ${cuda_clean_target_name} cuda_clean_target_name)
endif()
add_custom_target(${cuda_clean_target_name}
COMMAND ${CMAKE_COMMAND} -E remove ${CUDA_ADDITIONAL_CLEAN_FILES})
COMMAND ${CMAKE_COMMAND} -E rm -f ${CUDA_ADDITIONAL_CLEAN_FILES})
# Clear out the variable, so the next time we configure it will be empty.
# This is useful so that the files won't persist in the list after targets

View File

@@ -174,7 +174,7 @@ endmacro()
# Delete the target file
cuda_execute_process(
"Removing ${generated_file}"
COMMAND "${CMAKE_COMMAND}" -E remove "${generated_file}"
COMMAND "${CMAKE_COMMAND}" -E rm -f "${generated_file}"
)
# For CUDA 2.3 and below, -G -M doesn't work, so remove the -G flag
@@ -241,7 +241,7 @@ endif()
# Delete the temporary file
cuda_execute_process(
"Removing ${cmake_dependency_file}.tmp and ${NVCC_generated_dependency_file}"
COMMAND "${CMAKE_COMMAND}" -E remove "${cmake_dependency_file}.tmp" "${NVCC_generated_dependency_file}"
COMMAND "${CMAKE_COMMAND}" -E rm -f "${cmake_dependency_file}.tmp" "${NVCC_generated_dependency_file}"
)
if(CUDA_result)
@@ -267,7 +267,7 @@ if(CUDA_result)
# Since nvcc can sometimes leave half done files make sure that we delete the output file.
cuda_execute_process(
"Removing ${generated_file}"
COMMAND "${CMAKE_COMMAND}" -E remove "${generated_file}"
COMMAND "${CMAKE_COMMAND}" -E rm -f "${generated_file}"
)
message(FATAL_ERROR "Error generating file ${generated_file}")
else()

View File

@@ -47,7 +47,7 @@ set(CMAKE_C_LINK_EXECUTABLE "<CMAKE_C_COMPILER> <FLAGS> <OBJECTS> -o <TARGET> <C
# needs sdcc 2.7.0 + sddclib from cvs
set(CMAKE_C_CREATE_STATIC_LIBRARY
"\"${CMAKE_COMMAND}\" -E remove <TARGET>"
"\"${CMAKE_COMMAND}\" -E rm -f <TARGET>"
"<CMAKE_AR> -a <TARGET> <LINK_FLAGS> <OBJECTS> ")
# not supported by sdcc

View File

@@ -124,7 +124,7 @@ macro(__windows_compiler_gnu lang)
string(REPLACE "<OBJECTS>" "-Wl,--whole-archive <OBJECT_DIR>/objects.a -Wl,--no-whole-archive"
CMAKE_${lang}_${rule} "${CMAKE_${lang}_${rule}}")
set(CMAKE_${lang}_${rule}
"<CMAKE_COMMAND> -E remove -f <OBJECT_DIR>/objects.a"
"<CMAKE_COMMAND> -E rm -f <OBJECT_DIR>/objects.a"
"<CMAKE_AR> cr <OBJECT_DIR>/objects.a <OBJECTS>"
"${CMAKE_${lang}_${rule}}"
)

View File

@@ -629,7 +629,7 @@ void cmLocalUnixMakefileGenerator3::WriteMakeVariables(
<< "# The command to remove a file.\n"
<< "RM = "
<< cmakeShellCommand
<< " -E remove -f\n"
<< " -E rm -f\n"
<< "\n";
makefileStream
<< "# Escaping for special characters.\n"

View File

@@ -486,7 +486,7 @@ std::vector<std::string> cmNinjaNormalTargetGenerator::ComputeLinkCmd()
std::string cmakeCommand =
this->GetLocalGenerator()->ConvertToOutputFormat(
cmSystemTools::GetCMakeCommand(), cmOutputConverter::SHELL);
linkCmds.push_back(cmakeCommand + " -E remove $TARGET_FILE");
linkCmds.push_back(cmakeCommand + " -E rm -f $TARGET_FILE");
}
// TODO: Use ARCHIVE_APPEND for archives over a certain size.
{

View File

@@ -107,10 +107,12 @@ void CMakeCommandUsage(const char* program)
<< " sha384sum <file>... - create SHA384 checksum of files\n"
<< " sha512sum <file>... - create SHA512 checksum of files\n"
<< " remove [-f] <file>... - remove the file(s), use -f to force "
"it\n"
<< " remove_directory <dir>... - remove directories and their contents\n"
"it (deprecated: use rm instead)\n"
<< " remove_directory <dir>... - remove directories and their contents (deprecated: use rm instead)\n"
<< " rename oldname newname - rename a file or directory "
"(on one volume)\n"
<< " rm [-rRf] <file/dir>... - remove files or directories, use -f to "
"force it, r or R to remove directories and their contents recursively\n"
<< " server - start cmake in server mode\n"
<< " sleep <number>... - sleep for given number of seconds\n"
<< " tar [cxt][vf][zjJ] file.tar [file/dir1 file/dir2 ...]\n"
@@ -172,6 +174,24 @@ static bool cmTarFilesFrom(std::string const& file,
return true;
}
static bool cmRemoveDirectory(const std::string& dir, bool recursive = true)
{
if (cmSystemTools::FileIsSymlink(dir)) {
if (!cmSystemTools::RemoveFile(dir)) {
std::cerr << "Error removing directory symlink \"" << dir << "\".\n";
return false;
}
} else if (!recursive) {
std::cerr << "Error removing directory \"" << dir
<< "\" without recursive option.\n";
return false;
} else if (!cmSystemTools::RemoveADirectory(dir)) {
std::cerr << "Error removing directory \"" << dir << "\".\n";
return false;
}
return true;
}
static int HandleIWYU(const std::string& runCmd,
const std::string& /* sourceFile */,
const std::vector<std::string>& orig_cmd)
@@ -706,14 +726,7 @@ int cmcmd::ExecuteCMakeCommand(std::vector<std::string> const& args)
bool return_value = false;
for (auto const& arg : cmMakeRange(args).advance(2)) {
if (cmSystemTools::FileIsDirectory(arg)) {
if (cmSystemTools::FileIsSymlink(arg)) {
if (!cmSystemTools::RemoveFile(arg)) {
std::cerr << "Error removing directory symlink \"" << arg
<< "\".\n";
return_value = true;
}
} else if (!cmSystemTools::RemoveADirectory(arg)) {
std::cerr << "Error removing directory \"" << arg << "\".\n";
if (!cmRemoveDirectory(arg)) {
return_value = true;
}
}
@@ -739,6 +752,65 @@ int cmcmd::ExecuteCMakeCommand(std::vector<std::string> const& args)
return 0;
}
// Remove directories or files with rm
if (args[1] == "rm" && args.size() > 2) {
// If an error occurs, we want to continue removing the remaining
// files/directories.
int return_value = 0;
bool force = false;
bool recursive = false;
bool doing_options = true;
bool at_least_one_file = false;
for (auto const& arg : cmMakeRange(args).advance(2)) {
if (doing_options && cmHasLiteralPrefix(arg, "-")) {
if (arg == "--") {
doing_options = false;
}
if (arg.find('f') != std::string::npos) {
force = true;
}
if (arg.find_first_of("rR") != std::string::npos) {
recursive = true;
}
if (arg.find_first_not_of("-frR") != std::string::npos) {
cmSystemTools::Error("Unknown -E rm argument: " + arg);
return 1;
}
} else {
if (arg.empty()) {
continue;
}
at_least_one_file = true;
// Complain if the -f option was not given and
// either file does not exist or
// file could not be removed and still exists
bool file_exists_or_forced_remove = cmSystemTools::FileExists(arg) ||
cmSystemTools::FileIsSymlink(arg) || force;
if (cmSystemTools::FileIsDirectory(arg)) {
if (!cmRemoveDirectory(arg, recursive)) {
return_value = 1;
}
} else if ((!file_exists_or_forced_remove) ||
(!cmSystemTools::RemoveFile(arg) &&
cmSystemTools::FileExists(arg))) {
if (!file_exists_or_forced_remove) {
cmSystemTools::Error(
"File to remove does not exist and force is not set: " + arg);
} else {
cmSystemTools::Error("File can't be removed and still exist: " +
arg);
}
return_value = 1;
}
}
}
if (!at_least_one_file) {
cmSystemTools::Error("Missing file/directory to remove");
return 1;
}
return return_value;
}
// Touch file
if (args[1] == "touch" && args.size() > 2) {
for (auto const& arg : cmMakeRange(args).advance(2)) {

View File

@@ -21,11 +21,11 @@ set(N 7)
# First setup source and binary trees:
#
execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory
execute_process(COMMAND ${CMAKE_COMMAND} -E rm -rf
${dir}/Source
)
execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory
execute_process(COMMAND ${CMAKE_COMMAND} -E rm -rf
${dir}/Build
)
@@ -69,7 +69,7 @@ foreach(i RANGE 1 ${N})
# Save this iteration of the Build directory:
#
execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory
execute_process(COMMAND ${CMAKE_COMMAND} -E rm -rf
${dir}/b${i}
)
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory

View File

@@ -104,7 +104,7 @@ install(FILES ${CPackComponentsDEB_BINARY_DIR}/symtest
COMPONENT applications)
if(EXISTS "./dirtest")
execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory ./dirtest)
execute_process(COMMAND ${CMAKE_COMMAND} -E rm -rf ./dirtest)
endif()
# NOTE: directory left empty on purpose
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ./dirtest)

View File

@@ -324,7 +324,7 @@ if (WIN32)
${file}
"[${hkey}]" DOC "Registry_Test_Path")
exec_program(${CMAKE_COMMAND} ARGS "-E delete_regv \"${hkey}\"")
exec_program(${CMAKE_COMMAND} ARGS "-E remove \"${dir}/${file}\"")
exec_program(${CMAKE_COMMAND} ARGS "-E rm -f \"${dir}/${file}\"")
endif ()
endif ()

View File

@@ -131,7 +131,7 @@ if("${CMAKE_GENERATOR}" MATCHES "Makefile" AND CMAKE_MAKE_PROGRAM)
# Custom target to try preprocessing invocation.
add_custom_target(test_preprocess ${MAYBE_ALL}
COMMAND ${CMAKE_COMMAND} -E remove CMakeFiles/create_file.dir/create_file.i
COMMAND ${CMAKE_COMMAND} -E rm -f CMakeFiles/create_file.dir/create_file.i
COMMAND ${CMAKE_MAKE_PROGRAM} create_file.i
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/test_preprocess.cmake
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}

View File

@@ -281,7 +281,7 @@ if (WIN32)
${file}
"[${hkey}]" DOC "Registry_Test_Path")
exec_program(${CMAKE_COMMAND} ARGS "-E delete_regv \"${hkey}\"")
exec_program(${CMAKE_COMMAND} ARGS "-E remove \"${dir}/${file}\"")
exec_program(${CMAKE_COMMAND} ARGS "-E rm -f \"${dir}/${file}\"")
endif ()
endif ()

View File

@@ -131,7 +131,7 @@ if("${CMAKE_GENERATOR}" MATCHES "Makefile" AND CMAKE_MAKE_PROGRAM)
# Custom target to try preprocessing invocation.
add_custom_target(test_preprocess ${MAYBE_ALL}
COMMAND ${CMAKE_COMMAND} -E remove CMakeFiles/create_file.dir/create_file.i
COMMAND ${CMAKE_COMMAND} -E rm -f CMakeFiles/create_file.dir/create_file.i
COMMAND ${CMAKE_MAKE_PROGRAM} create_file.i
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/test_preprocess.cmake
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}

View File

@@ -70,7 +70,7 @@ add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/doc1.h APPEND
COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/doc1temp.h
${PROJECT_BINARY_DIR}/doc1.h
COMMAND ${CMAKE_COMMAND} -E echo " Removing doc1temp.h."
COMMAND ${CMAKE_COMMAND} -E remove -f ${PROJECT_BINARY_DIR}/doc1temp.h
COMMAND ${CMAKE_COMMAND} -E rm -f ${PROJECT_BINARY_DIR}/doc1temp.h
)
# Add custom command to generate foo.h.
@@ -412,7 +412,7 @@ add_custom_target(do_check_command_line ALL
add_dependencies(do_check_command_line check_command_line)
add_custom_target(pre_check_command_line
COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_CURRENT_BINARY_DIR}/check_mark.txt
COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_CURRENT_BINARY_DIR}/check_mark.txt
)
add_dependencies(do_check_command_line pre_check_command_line)

View File

@@ -7,7 +7,7 @@ endif()
# Wipe out the install tree to make sure the exporter works.
add_custom_command(
OUTPUT ${ExportImport_BINARY_DIR}/CleanupProject
COMMAND ${CMAKE_COMMAND} -E remove_directory ${ExportImport_BINARY_DIR}/Root
COMMAND ${CMAKE_COMMAND} -E rm -rf ${ExportImport_BINARY_DIR}/Root
)
add_custom_target(CleanupTarget ALL DEPENDS ${ExportImport_BINARY_DIR}/CleanupProject)
set_property(

View File

@@ -103,11 +103,11 @@ if("${CMAKE_GENERATOR}" MATCHES "Makefile" AND CMAKE_MAKE_PROGRAM)
# Custom target to try preprocessing invocation.
add_custom_target(test_preprocess ${MAYBE_ALL}
COMMAND ${CMAKE_COMMAND} -E remove CMakeFiles/preprocess.dir/preprocess.F.i
COMMAND ${CMAKE_COMMAND} -E rm -f CMakeFiles/preprocess.dir/preprocess.F.i
COMMAND ${CMAKE_MAKE_PROGRAM} preprocess.i
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/test_preprocess.cmake
# Remove bogus file some compilers leave behind.
COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_CURRENT_SOURCE_DIR}/preprocess.s
COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_CURRENT_SOURCE_DIR}/preprocess.s
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
)
endif()

View File

@@ -9,7 +9,7 @@ find_package(Java COMPONENTS Development)
# Wipe out the install tree to make sure the exporter works.
add_custom_command(
OUTPUT ${JavaExportImport_BINARY_DIR}/CleanupProject
COMMAND ${CMAKE_COMMAND} -E remove_directory ${JavaExportImport_BINARY_DIR}/Root
COMMAND ${CMAKE_COMMAND} -E rm -rf ${JavaExportImport_BINARY_DIR}/Root
)
add_custom_target(CleanupTarget ALL DEPENDS ${JavaExportImport_BINARY_DIR}/CleanupProject)
set_property(

View File

@@ -33,7 +33,7 @@ ExternalProject_Add(ExternalTarget
# directly because it does not know the full paths to the libraries.
# (The purpose of this test is to check that link_directories works.)
ExternalProject_Add_Step(ExternalTarget cleanup
COMMAND ${CMAKE_COMMAND} -E remove_directory ${LinkDirectory_BINARY_DIR}/bin
COMMAND ${CMAKE_COMMAND} -E rm -rf ${LinkDirectory_BINARY_DIR}/bin
DEPENDEES download
DEPENDERS configure
DEPENDS mylibA mylibB

View File

@@ -7,7 +7,7 @@ endif()
# Wipe out the install tree to make sure the exporter works.
add_custom_command(
OUTPUT ${MacRuntimePath_BINARY_DIR}/CleanupProject
COMMAND ${CMAKE_COMMAND} -E remove_directory ${MacRuntimePath_BINARY_DIR}/Root
COMMAND ${CMAKE_COMMAND} -E rm -rf ${MacRuntimePath_BINARY_DIR}/Root
)
add_custom_target(CleanupTarget ALL DEPENDS ${MacRuntimePath_BINARY_DIR}/CleanupProject)
set_property(

View File

@@ -445,7 +445,7 @@ add_RunCMake_test(target_include_directories)
add_RunCMake_test(target_sources)
add_RunCMake_test(CheckModules)
add_RunCMake_test(CheckIPOSupported)
add_RunCMake_test(CommandLine -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME})
add_RunCMake_test(CommandLine -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME} -DCYGWIN=${CYGWIN})
add_RunCMake_test(CommandLineTar)
if(CMAKE_PLATFORM_NO_VERSIONED_SONAME OR (NOT CMAKE_SHARED_LIBRARY_SONAME_FLAG AND NOT CMAKE_SHARED_LIBRARY_SONAME_C_FLAG))

View File

@@ -1,6 +1,6 @@
function(setup_resource_tests)
if(CTEST_RESOURCE_ALLOC_ENABLED)
add_test(NAME ResourceSetup COMMAND "${CMAKE_COMMAND}" -E remove -f "${CMAKE_BINARY_DIR}/ctresalloc.log")
add_test(NAME ResourceSetup COMMAND "${CMAKE_COMMAND}" -E rm -f "${CMAKE_BINARY_DIR}/ctresalloc.log")
endif()
endfunction()

View File

@@ -0,0 +1 @@
1

View File

@@ -0,0 +1 @@
^CMake Error: Unknown -E rm argument: -rd$

View File

@@ -0,0 +1,3 @@
if(NOT EXISTS ${out}/dir/existing.txt)
set(RunCMake_TEST_FAILED "${out}/dir/existing.txt should exist (we only removed the link to dir folder)")
endif()

View File

@@ -0,0 +1 @@
^CMake Error: Missing file/directory to remove$

View File

@@ -0,0 +1,8 @@
execute_process(
COMMAND ${CMAKE_COMMAND} -E rm ""
RESULT_VARIABLE actual_result
)
if(NOT "${actual_result}" EQUAL "1")
message(SEND_ERROR "cmake -E rm \"\" should have returned 1, got ${actual_result}")
endif()

View File

@@ -0,0 +1,3 @@
if(EXISTS ${out}/existing.txt)
set(RunCMake_TEST_FAILED "${out}/existing.txt not removed")
endif()

View File

@@ -0,0 +1 @@
0

View File

@@ -0,0 +1,3 @@
if(NOT EXISTS ${out}/existing.txt)
set(RunCMake_TEST_FAILED "${out}/existing.txt should exist (we only removed the link)")
endif()

View File

@@ -0,0 +1 @@
0

View File

@@ -0,0 +1,3 @@
if(EXISTS ${out}/existing.txt)
set(RunCMake_TEST_FAILED "${out}/existing.txt not removed")
endif()

View File

@@ -0,0 +1 @@
^CMake Error: File to remove does not exist and force is not set: .*/rm_tests/not_existing.txt

View File

@@ -0,0 +1,3 @@
if(EXISTS ${out}/existing.txt)
set(RunCMake_TEST_FAILED "${out}/existing.txt not removed")
endif()

View File

@@ -0,0 +1 @@
^CMake Error: File to remove does not exist and force is not set: .*/rm_tests/not_existing.txt

View File

@@ -0,0 +1,3 @@
if(EXISTS ${out})
set(RunCMake_TEST_FAILED "${out} not removed")
endif()

View File

@@ -0,0 +1 @@
1

View File

@@ -0,0 +1 @@
^CMake Error: Missing file/directory to remove$

View File

@@ -0,0 +1,3 @@
if(NOT EXISTS ${out}/d1 OR NOT EXISTS ${out}/d2)
set(RunCMake_TEST_FAILED "${out}/d1 or ${out}/d2 is removed but should not")
endif()

View File

@@ -0,0 +1,2 @@
^Error removing directory ".*/rm_tests/d1" without recursive option\.
Error removing directory ".*/rm_tests/d2" without recursive option\.$

View File

@@ -0,0 +1,3 @@
if(EXISTS ${out}/d1 OR EXISTS ${out}/d2)
set(RunCMake_TEST_FAILED "${out}/d1 or ${out}/d2 should be removed")
endif()

View File

@@ -0,0 +1,3 @@
if(NOT EXISTS ${out}/dir/existing.txt)
set(RunCMake_TEST_FAILED "${out}/dir/existing.txt should exist (we only removed the link to dir folder)")
endif()

View File

@@ -0,0 +1,3 @@
if(NOT EXISTS ${out}/existing.txt)
set(RunCMake_TEST_FAILED "${out}/existing.txt should exist (we only removed the link)")
endif()

View File

@@ -388,6 +388,76 @@ 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
${CMAKE_COMMAND} -E rm -f ${out}/existing.txt)
file(TOUCH ${out}/existing.txt)
run_cmake_command(E_rm_file_non_force_existing
${CMAKE_COMMAND} -E rm ${out}/existing.txt)
run_cmake_command(E_rm_file_force_non_existing
${CMAKE_COMMAND} -E rm -f ${out}/not_existing.txt)
run_cmake_command(E_rm_file_non_force_non_existing
${CMAKE_COMMAND} -E rm ${out}/not_existing.txt)
file(TOUCH ${out}/existing.txt)
run_cmake_command(E_rm_file_recursive_existing
${CMAKE_COMMAND} -E rm -r ${out}/existing.txt)
run_cmake_command(E_rm_file_recursive_non_existing
${CMAKE_COMMAND} -E rm -r ${out}/not_existing.txt)
file(MAKE_DIRECTORY ${out}/d1 ${out}/d2)
run_cmake_command(E_rm_non_recursive_directory-two-directories
${CMAKE_COMMAND} -E rm ${out}/d1 ${out}/d2)
run_cmake_command(E_rm_recursive_directory-two-directories
${CMAKE_COMMAND} -E rm -R ${out}/d1 ${out}/d2)
run_cmake_command(E_rm_no_file_specified
${CMAKE_COMMAND} -E rm -rf)
run_cmake_command(E_rm_empty_file_specified
${CMAKE_COMMAND} -P ${RunCMake_SOURCE_DIR}/E_rm_empty_file_specified.cmake)
run_cmake_command(E_rm_bad_argument
${CMAKE_COMMAND} -E rm -rd ${out}/d1 ${out}/d2)
file(MAKE_DIRECTORY ${out}/d1 ${out}/d2)
file(WRITE ${out}/test.txt "")
run_cmake_command(E_rm_force_recursive_directory_with_files
${CMAKE_COMMAND} -E rm -rf ${out}/)
run_cmake_command(E_rm_force_recursive_non_existing_file
${CMAKE_COMMAND} -E rm -Rf ${out}/test.txt)
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
${CMAKE_COMMAND} -E rm ${out}/existing_file_link.txt)
run_cmake_command(E_rm_directory_link_existing
${CMAKE_COMMAND} -E rm ${out}/link_dir)
run_cmake_command(E_rm_file_link_non_existing
${CMAKE_COMMAND} -E rm ${out}/non_existing_file_link.txt)
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
${CMAKE_COMMAND} -E rm -R ${out}/existing_file_link.txt)
run_cmake_command(E_rm_recursive_directory_link_existing
${CMAKE_COMMAND} -E rm -r ${out}/link_dir)
run_cmake_command(E_rm_recursive_file_link_non_existing
${CMAKE_COMMAND} -E rm -r ${out}/non_existing_file_link.txt)
endif()
unset(out)
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)

View File

@@ -53,7 +53,7 @@ LIBRARY_PATH=c:/DoesNotExist/mingw/bin/../lib/gcc/mingw32/4.9.3/;c:/DoesNotExist
COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\cmTC_ab097.dir\CMakeCCompilerABI.c.obj' '-c' '-mtune=generic' '-march=i586'
Linking C executable cmTC_ab097.exe
"C:\CMake\bin\cmake.exe" -E cmake_link_script CMakeFiles\cmTC_ab097.dir\link.txt --verbose=1
"C:\CMake\bin\cmake.exe" -E remove -f CMakeFiles\cmTC_ab097.dir/objects.a
"C:\CMake\bin\cmake.exe" -E rm -f CMakeFiles\cmTC_ab097.dir/objects.a
C:\DoesNotExist\MinGW\bin\ar.exe cr CMakeFiles\cmTC_ab097.dir/objects.a @CMakeFiles\cmTC_ab097.dir\objects1.rsp
C:\DoesNotExist\MinGW\bin\gcc.exe -v -Wl,--whole-archive CMakeFiles\cmTC_ab097.dir/objects.a -Wl,--no-whole-archive -o cmTC_ab097.exe -Wl,--out-implib,libcmTC_ab097.dll.a -Wl,--major-image-version,0,--minor-image-version,0
Using built-in specs.

View File

@@ -59,7 +59,7 @@ LIBRARY_PATH=c:/DoesNotExist/mingw/bin/../lib/gcc/mingw32/4.9.3/;c:/DoesNotExist
COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\cmTC_2b790.dir\CMakeCXXCompilerABI.cpp.obj' '-c' '-shared-libgcc' '-mtune=generic' '-march=i586'
Linking CXX executable cmTC_2b790.exe
"C:\CMake\bin\cmake.exe" -E cmake_link_script CMakeFiles\cmTC_2b790.dir\link.txt --verbose=1
"C:\CMake\bin\cmake.exe" -E remove -f CMakeFiles\cmTC_2b790.dir/objects.a
"C:\CMake\bin\cmake.exe" -E rm -f CMakeFiles\cmTC_2b790.dir/objects.a
C:\DoesNotExist\MinGW\bin\ar.exe cr CMakeFiles\cmTC_2b790.dir/objects.a @CMakeFiles\cmTC_2b790.dir\objects1.rsp
C:\DoesNotExist\MinGW\bin\g++.exe -v -Wl,--whole-archive CMakeFiles\cmTC_2b790.dir/objects.a -Wl,--no-whole-archive -o cmTC_2b790.exe -Wl,--out-implib,libcmTC_2b790.dll.a -Wl,--major-image-version,0,--minor-image-version,0
Using built-in specs.

View File

@@ -5,7 +5,7 @@ project(StagingPrefix)
# Wipe out the install tree
add_custom_command(
OUTPUT ${CMAKE_BINARY_DIR}/CleanupProject
COMMAND ${CMAKE_COMMAND} -E remove_directory
COMMAND ${CMAKE_COMMAND} -E rm -rf
${CMAKE_BINARY_DIR}/ConsumerBuild
${CMAKE_BINARY_DIR}/ProducerBuild
${CMAKE_BINARY_DIR}/stage

View File

@@ -3,5 +3,5 @@ project(example1)
add_executable(example1 example1.cxx)
add_custom_command(TARGET example1 POST_BUILD
COMMAND "${CMAKE_COMMAND}" ARGS -E remove ${SUBDIR_BINARY_DIR}/ShouldBeHere
COMMAND "${CMAKE_COMMAND}" ARGS -E rm -f ${SUBDIR_BINARY_DIR}/ShouldBeHere
COMMENT "Remove marker file that should exist because this should not be run")

View File

@@ -3,5 +3,5 @@ project(example1)
add_executable(example1 example1.cxx)
add_custom_command(TARGET example1 POST_BUILD
COMMAND "${CMAKE_COMMAND}" ARGS -E remove ${SUBDIR_BINARY_DIR}/ShouldBeHere
COMMAND "${CMAKE_COMMAND}" ARGS -E rm -f ${SUBDIR_BINARY_DIR}/ShouldBeHere
COMMENT "Remove marker file that should exist because this should not be run")

View File

@@ -56,8 +56,8 @@ set(source_dir "${base_dir}/src")
#
ExternalProject_Add(clean-${PROJECT_NAME}
DOWNLOAD_COMMAND ""
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E remove_directory "${source_dir}"
BUILD_COMMAND ${CMAKE_COMMAND} -E remove_directory "${binary_dir}"
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E rm -rf "${source_dir}"
BUILD_COMMAND ${CMAKE_COMMAND} -E rm -rf "${binary_dir}"
INSTALL_COMMAND ""
)

View File

@@ -13,7 +13,7 @@ if(CMAKE_DOC_TARBALL)
endif()
add_custom_command(
OUTPUT ${dir}.stamp
COMMAND cmake -E remove_directory ${dir}
COMMAND cmake -E rm -rf ${dir}
COMMAND cmake -E tar xf ${CMAKE_DOC_TARBALL}
COMMAND cmake -E touch ${dir}.stamp
DEPENDS ${CMAKE_DOC_TARBALL}

View File

@@ -13,7 +13,7 @@ foreach(file ${files})
message(STATUS "Uninstalling $ENV{DESTDIR}${file}")
if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
exec_program(
"@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""
"@CMAKE_COMMAND@" ARGS "-E rm -f \"$ENV{DESTDIR}${file}\""
OUTPUT_VARIABLE rm_out
RETURN_VALUE rm_retval
)

View File

@@ -8,7 +8,7 @@ foreach(file ${files})
message(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"")
if(EXISTS "$ENV{DESTDIR}${file}")
exec_program(
"@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""
"@CMAKE_COMMAND@" ARGS "-E rm -f \"$ENV{DESTDIR}${file}\""
OUTPUT_VARIABLE rm_out
RETURN_VALUE rm_retval
)