@ -97,7 +97,8 @@ void CMakeCommandUsage(std::string const& program)
< < " Available commands: \n "
< < " capabilities - Report capabilities built into cmake "
" in JSON format \n "
< < " cat <files>... - concat the files and print them to the standard output \n "
< < " cat [--] <files>... - concat the files and print them to the "
" standard output \n "
< < " chdir dir cmd [args...] - run command in a given directory \n "
< < " compare_files [--ignore-eol] file1 file2 \n "
< < " - check if file1 is same as file2 \n "
@ -110,7 +111,7 @@ void CMakeCommandUsage(std::string const& program)
< < " echo [<string>...] - displays arguments as text \n "
< < " echo_append [<string>...] - displays arguments as text but no new "
" line \n "
< < " env [--unset=NAME]... [NAME=VALUE]... COMMAND [ARG]... \n "
< < " 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 parent and <dir> directories \n "
@ -125,8 +126,9 @@ void CMakeCommandUsage(std::string const& program)
< < " 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 "
< < " rm [-rRf] [--] <file/dir>... - remove files or directories, use -f "
" to force it, r or R to remove directories and their contents "
" recursively \n "
< < " sleep <number>... - sleep for given number of seconds \n "
< < " tar [cxt][vf][zjJ] file.tar [file/dir1 file/dir2 ...] \n "
< < " - create or extract a tar or zip archive \n "
@ -793,6 +795,12 @@ int cmcmd::ExecuteCMakeCommand(std::vector<std::string> const& args,
auto ae = args . cend ( ) ;
for ( ; ai ! = ae ; + + ai ) {
std : : string const & a = * ai ;
if ( a = = " -- " ) {
// Stop parsing options/environment variables; the next argument
// should be the command.
+ + ai ;
break ;
}
if ( cmHasLiteralPrefix ( a , " --unset= " ) ) {
// Unset environment variable.
cmSystemTools : : UnPutEnv ( a . substr ( 8 ) ) ;
@ -1051,9 +1059,12 @@ int cmcmd::ExecuteCMakeCommand(std::vector<std::string> const& args,
// Command to concat files into one
if ( args [ 1 ] = = " cat " & & args . size ( ) > = 3 ) {
int return_value = 0 ;
bool doing_options = true ;
for ( auto const & arg : cmMakeRange ( args ) . advance ( 2 ) ) {
if ( cmHasLiteralPrefix ( arg , " - " ) ) {
if ( arg ! = " -- " ) {
if ( doing_options & & cmHasLiteralPrefix ( arg , " - " ) ) {
if ( arg = = " -- " ) {
doing_options = false ;
} else {
cmSystemTools : : Error ( arg + " : option not handled " ) ;
return_value = 1 ;
}