cmake: Add '-E sleep' command

Add a cmake command-line interface to provide a cross-platform 'sleep'.
This commit is contained in:
Brad King 2014-01-21 13:48:30 -05:00
parent a86865e96c
commit 94389f6388
9 changed files with 41 additions and 1 deletions

View File

@ -39,7 +39,7 @@ Options
that can be used on all systems. Run with -E help for the usage
information. Commands available are: chdir, compare_files, copy,
copy_directory, copy_if_different, echo, echo_append, environment,
make_directory, md5sum, remove, remove_directory, rename, tar, time,
make_directory, md5sum, remove, remove_directory, rename, sleep, tar, time,
touch, touch_nocreate. In addition, some platform specific commands
are available. On Windows: delete_regv, write_regv. On
UNIX: create_symlink.

View File

@ -71,6 +71,7 @@ void CMakeCommandUsage(const char* program)
"(on one volume)\n"
<< " tar [cxt][vfz][cvfj] file.tar [file/dir1 file/dir2 ...]\n"
<< " - create or extract a tar or zip archive\n"
<< " sleep <number>... - sleep for given number of seconds\n"
<< " time command [args] ... - run command and return elapsed time\n"
<< " touch file - touch a file.\n"
<< " touch_nocreate file - touch a file but do not create it.\n"
@ -279,6 +280,33 @@ int cmcmd::ExecuteCMakeCommand(std::vector<std::string>& args)
return 0;
}
// Sleep command
else if (args[1] == "sleep" && args.size() > 2)
{
double total = 0;
for(size_t i = 2; i < args.size(); ++i)
{
double num = 0.0;
char unit;
char extra;
int n = sscanf(args[i].c_str(), "%lg%c%c", &num, &unit, &extra);
if((n == 1 || (n == 2 && unit == 's')) && num >= 0)
{
total += num;
}
else
{
std::cerr << "Unknown sleep time format \"" << args[i] << "\".\n";
return 1;
}
}
if(total > 0)
{
cmSystemTools::Delay(static_cast<unsigned int>(total*1000));
}
return 0;
}
// Clock command
else if (args[1] == "time" && args.size() > 2)
{

View File

@ -0,0 +1 @@
1

View File

@ -0,0 +1 @@
^Unknown sleep time format "x"\.$

View File

@ -0,0 +1 @@
1

View File

@ -0,0 +1 @@
^Unknown sleep time format "-1"\.$

View File

@ -0,0 +1 @@
1

View File

@ -0,0 +1,2 @@
Usage: .*/cmake -E \[command\] \[arguments \.\.\.\]
Available commands:

View File

@ -23,3 +23,8 @@ if(UNIX)
${CMAKE_COMMAND} -E create_symlink T .
)
endif()
run_cmake_command(E_sleep-no-args ${CMAKE_COMMAND} -E sleep)
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)