cmake: Add '-E sleep' command
Add a cmake command-line interface to provide a cross-platform 'sleep'.
This commit is contained in:
parent
a86865e96c
commit
94389f6388
|
@ -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.
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
1
|
|
@ -0,0 +1 @@
|
|||
^Unknown sleep time format "x"\.$
|
|
@ -0,0 +1 @@
|
|||
1
|
|
@ -0,0 +1 @@
|
|||
^Unknown sleep time format "-1"\.$
|
|
@ -0,0 +1 @@
|
|||
1
|
|
@ -0,0 +1,2 @@
|
|||
Usage: .*/cmake -E \[command\] \[arguments \.\.\.\]
|
||||
Available commands:
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue