mirror of
https://github.com/reactos/CMake.git
synced 2025-01-19 01:42:18 +00:00
separgs: Add a NATIVE_COMMAND mode
This commit is contained in:
parent
81841426fc
commit
2a207aaca1
@ -320,7 +320,7 @@ syn keyword cmakeKWremove
|
||||
\ contained
|
||||
|
||||
syn keyword cmakeKWseparate_arguments
|
||||
\ MSDN UNIX_COMMAND VARIABLE WINDOWS WINDOWS_COMMAND _COMMAND
|
||||
\ MSDN NATIVE_COMMAND UNIX_COMMAND VARIABLE WINDOWS WINDOWS_COMMAND _COMMAND
|
||||
\ contained
|
||||
|
||||
syn keyword cmakeKWset
|
||||
|
@ -5,9 +5,9 @@ Parse space-separated arguments into a semicolon-separated list.
|
||||
|
||||
::
|
||||
|
||||
separate_arguments(<var> <UNIX|WINDOWS>_COMMAND "<args>")
|
||||
separate_arguments(<var> <NATIVE|UNIX|WINDOWS>_COMMAND "<args>")
|
||||
|
||||
Parses a unix- or windows-style command-line string "<args>" and
|
||||
Parses a UNIX- or Windows-style command-line string "<args>" and
|
||||
stores a semicolon-separated list of the arguments in ``<var>``. The
|
||||
entire command line must be given in one "<args>" argument.
|
||||
|
||||
@ -16,12 +16,15 @@ recognizes both single-quote and double-quote pairs. A backslash
|
||||
escapes the next literal character (``\"`` is ``"``); there are no special
|
||||
escapes (``\n`` is just ``n``).
|
||||
|
||||
The ``WINDOWS_COMMAND`` mode parses a windows command-line using the same
|
||||
The ``WINDOWS_COMMAND`` mode parses a Windows command-line using the same
|
||||
syntax the runtime library uses to construct argv at startup. It
|
||||
separates arguments by whitespace that is not double-quoted.
|
||||
Backslashes are literal unless they precede double-quotes. See the
|
||||
MSDN article `Parsing C Command-Line Arguments`_ for details.
|
||||
|
||||
The ``NATIVE_COMMAND`` mode parses a Windows command-line if the host
|
||||
system is Windows, and a UNIX command-line otherwise.
|
||||
|
||||
.. _`Parsing C Command-Line Arguments`: https://msdn.microsoft.com/library/a1y7w461.aspx
|
||||
|
||||
::
|
||||
|
5
Help/release/dev/separgs-native.rst
Normal file
5
Help/release/dev/separgs-native.rst
Normal file
@ -0,0 +1,5 @@
|
||||
separgs-native
|
||||
-------------------
|
||||
|
||||
* A ``NATIVE_COMMAND`` mode was added to :command:`separate_arguments`
|
||||
performing argument separation depening on the host operating system.
|
@ -40,6 +40,13 @@ bool cmSeparateArgumentsCommand::InitialPass(
|
||||
if (doing == DoingVariable) {
|
||||
var = args[i];
|
||||
doing = DoingMode;
|
||||
} else if (doing == DoingMode && args[i] == "NATIVE_COMMAND") {
|
||||
#ifdef _WIN32
|
||||
mode = ModeWindows;
|
||||
#else
|
||||
mode = ModeUnix;
|
||||
#endif
|
||||
doing = DoingCommand;
|
||||
} else if (doing == DoingMode && args[i] == "UNIX_COMMAND") {
|
||||
mode = ModeUnix;
|
||||
doing = DoingCommand;
|
||||
|
19
Tests/RunCMake/separate_arguments/NativeCommand.cmake
Normal file
19
Tests/RunCMake/separate_arguments/NativeCommand.cmake
Normal file
@ -0,0 +1,19 @@
|
||||
set(unix_cmd "a \"b c\" 'd e' \";\" \\ \\'\\\" '\\'' \"\\\"\"")
|
||||
set(unix_exp "a;b c;d e;\;; '\";';\"")
|
||||
|
||||
set(windows_cmd "a \"b c\" 'd e' \";\" \\ \"c:\\windows\\path\\\\\" \\\"")
|
||||
set(windows_exp "a;b c;'d;e';\;;\\;c:\\windows\\path\\;\"")
|
||||
|
||||
if(CMAKE_HOST_WIN32)
|
||||
set(native_cmd "${windows_cmd}")
|
||||
set(native_exp "${windows_exp}")
|
||||
else()
|
||||
set(native_cmd "${unix_cmd}")
|
||||
set(native_exp "${unix_exp}")
|
||||
endif()
|
||||
separate_arguments(native_out NATIVE_COMMAND "${native_cmd}")
|
||||
|
||||
if(NOT "${native_out}" STREQUAL "${native_exp}")
|
||||
message(FATAL_ERROR "separate_arguments native-style failed. "
|
||||
"Expected\n [${native_exp}]\nbut got\n [${native_out}]\n")
|
||||
endif()
|
@ -4,3 +4,4 @@ run_cmake(EmptyCommand)
|
||||
run_cmake(PlainCommand)
|
||||
run_cmake(UnixCommand)
|
||||
run_cmake(WindowsCommand)
|
||||
run_cmake(NativeCommand)
|
||||
|
Loading…
x
Reference in New Issue
Block a user