Unix-style redirection from standard input for script mode (cmake -P)
### Motivation
CMake's script mode is convenient, but it still requires that the script exist as a file on disk. That can be a hindrance, if all you really want to do is test the result of some one-off scripting command.
UNIX has had a solution to this for decades now: It's long been a convention that, where a command accepts a file path as an argument, using a single hyphen in place of the filename means "read the input from stdin instead of opening the named file".
Having the ability to pipe a script into `cmake -P -` would allow CMake commands to be quickly evaluated, for testing or experimentation purposes, without having to first create a file and write the commands into it.
### Potential use patterns (examples)
A `cmake -P -` mode could permit all of the following uses:
#### Piping script commands to cmake
```sh
$ echo 'message(STATUS Test)' | cmake -P -
-- Test
```
#### Pasting/typing commands on stdin
```sh
$ cmake -P-
message(STATUS "This is my input")
^D
-- This is my input
```
#### Here-docs
```sh
cmake -P - << __SCRIPT__
message(STATUS "Here is the script")
message(STATUS "The script is here")
__SCRIPT__
-- Here is the script
-- The script is here
```
#### (Pointlessly) piping/redirecting from a file
```sh
# (Both Equivalent to `cmake -P some-script.cmake`)
$ cmake -P - < some-script.cmake
$ cat some-script.cmake | cmake -P-
```
With the virtual filename for script mode set to `<stdin>`, the output of `cmake -P - --trace` would resemble:
```sh
$ echo 'message(STATUS "Redirected")' | cmake -P - --trace
<stdin>(1): message(STATUS Redirected )
-- Redirected
```
#### Concerns
As _its authors_ are probably well aware, the CMake command-line processing is **very** averse to accepting any **arguments** to a flag that themselves start with a `-`. There are checks throughout the code that reject any argument capture when `nextArg[0] == '-'`. Those checks are diametrically opposed to the needs of this feature, and implementing it would require relaxing them (at least for the `-P` argument).
To avoid any destabilization of existing checks for arguments other than `-P`, an entirely new values Type can be added to the `cmCommandLineArgument::Values` enum: `Values::OneOrHyphen`. This type would behave much like the previous `Values::One` type used for `-P`, but without the usual protection against `nextArg[0] == '-'`.
Special-casing the argument type for a single flag, and the redundancy it creates in the code, isn't ideal. But it feels like a safe approach to supporting commands like `cmake -P -` and `cmake -P-` without destabilizing the existing processing (and protections) for all of the other arguments.
issue