cmake: Teach -E make_directory to support multiple input directories

This commit is contained in:
Bartosz Kosiorek 2015-12-09 15:59:43 +01:00 committed by Brad King
parent 4ce6fbc76b
commit 7984ac5e58
10 changed files with 39 additions and 11 deletions

View File

@ -167,7 +167,8 @@ Available commands are:
Change the current working directory and run a command.
``compare_files <file1> <file2>``
Check if file1 is same as file2.
Check if ``<file1>`` is same as ``<file2>``. If files are the same,
then returns 0, if not itreturns 1.
``copy <file>... <destination>``
Copy files to ``<destination>`` (either file or directory).
@ -194,10 +195,11 @@ Available commands are:
Run command in a modified environment.
``environment``
Display the current environment.
Display the current environment variables.
``make_directory <dir>``
Create a directory.
``make_directory <dir>...``
Create ``<dir>`` directories. If necessary, create parent
directories too.
``md5sum <file>...``
Compute md5sum of files.

View File

@ -6,3 +6,6 @@ cmake-E-multiple-inputs
* The :manual:`cmake(1)` ``-E copy_directory`` command-line
tool learned to support copying multiple input directories to a directory.
* The :manual:`cmake(1)` ``-E make_directory`` command-line
tool learned to support copying multiple input directories to a directory.

View File

@ -68,7 +68,7 @@ void CMakeCommandUsage(const char* program)
<< " env [--unset=NAME]... [NAME=VALUE]... COMMAND [ARG]...\n"
<< " - run command in a modified environment\n"
<< " environment - display the current environment\n"
<< " make_directory dir - create a directory\n"
<< " make_directory <dir>... - create parent and <dir> directories\n"
<< " md5sum <file>... - compute md5sum of files\n"
<< " remove [-f] <file>... - remove the file(s), use -f to force "
"it\n"
@ -447,15 +447,20 @@ int cmcmd::ExecuteCMakeCommand(std::vector<std::string>& args)
}
#endif
else if (args[1] == "make_directory" && args.size() == 3)
else if (args[1] == "make_directory" && args.size() > 2)
{
if(!cmSystemTools::MakeDirectory(args[2].c_str()))
// If error occurs we want to continue copying next files.
bool return_value = 0;
for (std::string::size_type cc = 2; cc < args.size(); cc ++)
{
std::cerr << "Error making directory \"" << args[2]
<< "\".\n";
return 1;
if(!cmSystemTools::MakeDirectory(args[cc].c_str()))
{
std::cerr << "Error creating directory \""
<< args[cc] << "\".\n";
return_value = 1;
}
return 0;
}
return return_value;
}
else if (args[1] == "remove_directory" && args.size() == 3)

View File

@ -0,0 +1 @@
^Error creating directory .*file_for_test.txt\".$

View File

@ -140,6 +140,20 @@ 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
${CMAKE_COMMAND} -E make_directory ${out}/d1 ${out}/d2 ${out}/d2)
run_cmake_command(E_make_directory-directory-with-parent
${CMAKE_COMMAND} -E make_directory ${out}/parent/child)
run_cmake_command(E_make_directory-three-directories-and-file
${CMAKE_COMMAND} -E make_directory ${out}/d1 ${out}/d2 ${outfile})
unset(out)
unset(outfile)
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)