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
|
that can be used on all systems. Run with -E help for the usage
|
||||||
information. Commands available are: chdir, compare_files, copy,
|
information. Commands available are: chdir, compare_files, copy,
|
||||||
copy_directory, copy_if_different, echo, echo_append, environment,
|
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
|
touch, touch_nocreate. In addition, some platform specific commands
|
||||||
are available. On Windows: delete_regv, write_regv. On
|
are available. On Windows: delete_regv, write_regv. On
|
||||||
UNIX: create_symlink.
|
UNIX: create_symlink.
|
||||||
|
|
|
@ -71,6 +71,7 @@ void CMakeCommandUsage(const char* program)
|
||||||
"(on one volume)\n"
|
"(on one volume)\n"
|
||||||
<< " tar [cxt][vfz][cvfj] file.tar [file/dir1 file/dir2 ...]\n"
|
<< " tar [cxt][vfz][cvfj] file.tar [file/dir1 file/dir2 ...]\n"
|
||||||
<< " - create or extract a tar or zip archive\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"
|
<< " time command [args] ... - run command and return elapsed time\n"
|
||||||
<< " touch file - touch a file.\n"
|
<< " touch file - touch a file.\n"
|
||||||
<< " touch_nocreate file - touch a file but do not create it.\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;
|
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
|
// Clock command
|
||||||
else if (args[1] == "time" && args.size() > 2)
|
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 .
|
${CMAKE_COMMAND} -E create_symlink T .
|
||||||
)
|
)
|
||||||
endif()
|
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