[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
option processing docs
From: |
Eric Blake |
Subject: |
option processing docs |
Date: |
Thu, 21 Sep 2006 16:31:30 +0000 (UTC) |
User-agent: |
Loom/3.14 (http://gmane.org/) |
Based on the lengthy thread in bug-m4, I'm installing this clarification:
branch:
2006-09-21 Eric Blake <address@hidden>
* doc/m4.texinfo (Invoking m4): Add clarification on option
processing behavior.
* THANKS: Update.
Reported by Mikhail Teterin.
Index: doc/m4.texinfo
===================================================================
RCS file: /sources/m4/m4/doc/m4.texinfo,v
retrieving revision 1.1.1.1.2.78
diff -u -r1.1.1.1.2.78 m4.texinfo
--- doc/m4.texinfo 21 Sep 2006 04:13:21 -0000 1.1.1.1.2.78
+++ doc/m4.texinfo 21 Sep 2006 14:55:17 -0000
@@ -378,12 +378,32 @@
@cindex command line, options
@cindex options, command line
address@hidden @env{POSIXLY_CORRECT}
All options begin with @samp{-}, or if long option names are used, with
-a @samp{--}. A long option name need not be written completely, any
-unambiguous prefix is sufficient. Options may be intermixed with files,
-use @option{--} as a marker to denote the end of options. @code{m4}
-understands the following options, grouped by functionality.
address@hidden A long option name need not be written completely, any
+unambiguous prefix is sufficient. Unless @env{POSIXLY_CORRECT} is set
+in the environment, options may be intermixed with files. The argument
address@hidden is a marker to denote the end of options.
+
+With short options, options that do not take arguments may be combined
+into a single command line argument with subsequent options, options
+with mandatory arguments may be provided either as a single command line
+argument or as two arguments, and options with optional arguments must
+be provided as a single argument. In other words, without
address@hidden, @kbd{m4 -QPDfoo -d a -d+f} is equivalent to
address@hidden -Q -P -D foo -d -d+f -- a}, although the latter form is
+considered canonical. (With @env{POSIXLY_CORRECT}, it is equivalent to
address@hidden -Q -P -D foo -d -- a ./-d+f}).
+
+With long options, options with mandatory arguments may be provided with
+an equal sign (@samp{=}) in a single argument, or as two arguments, and
+options with optional arguments must be provided as a single argument.
+In other words, @kbd{m4 --def foo --debug a} is equivalent to
address@hidden --define=foo --debug= -- a}, although the latter form is
+considered canonical (not to mention more robust, in case a future
+version of @code{m4} introduces an option named @option{--default}).
address@hidden understands the following options, grouped by functionality.
Several options control the overall operation of @code{m4}:
@table @code
head:
2006-09-21 Eric Blake <address@hidden>
* doc/m4.texinfo (Invoking m4): Add clarification on option
processing behavior.
* tests/options.at (option grouping): Test this.
* THANKS: Update.
Reported by Mikhail Teterin.
Index: doc/m4.texinfo
===================================================================
RCS file: /sources/m4/m4/doc/m4.texinfo,v
retrieving revision 1.50
diff -u -r1.50 m4.texinfo
--- doc/m4.texinfo 21 Sep 2006 04:12:55 -0000 1.50
+++ doc/m4.texinfo 21 Sep 2006 16:28:36 -0000
@@ -397,13 +397,32 @@
@cindex command line, options
@cindex options, command line
address@hidden @env{POSIXLY_CORRECT}
All options begin with @samp{-}, or if long option names are used, with
-a @samp{--}. A long option name need not be written completely, any
address@hidden A long option name need not be written completely, any
unambiguous prefix is sufficient. Unless @env{POSIXLY_CORRECT} is set
-in the environment, options may be intermixed with files, with
address@hidden as a marker to denote the end of options. @code{m4}
-understands the following options, grouped by functionality.
+in the environment, options may be intermixed with files. The argument
address@hidden is a marker to denote the end of options.
+
+With short options, options that do not take arguments may be combined
+into a single command line argument with subsequent options, options
+with mandatory arguments may be provided either as a single command line
+argument or as two arguments, and options with optional arguments must
+be provided as a single argument. In other words, without
address@hidden, @kbd{m4 -QPDfoo -d a -d+f} is equivalent to
address@hidden -Q -P -D foo -d -d+f -- a}, although the latter form is
+considered canonical. (With @env{POSIXLY_CORRECT}, it is equivalent to
address@hidden -Q -P -D foo -d -- a ./-d+f}).
+
+With long options, options with mandatory arguments may be provided with
+an equal sign (@samp{=}) in a single argument, or as two arguments, and
+options with optional arguments must be provided as a single argument.
+In other words, @kbd{m4 --def foo --debug a} is equivalent to
address@hidden --define=foo --debug= -- a}, although the latter form is
+considered canonical (not to mention more robust, in case a future
+version of @code{m4} introduces an option named @option{--default}).
address@hidden understands the following options, grouped by functionality.
Several options control the overall operation of @code{m4}:
@table @code
Index: tests/options.at
===================================================================
RCS file: /sources/m4/m4/tests/options.at,v
retrieving revision 1.11
diff -u -r1.11 options.at
--- tests/options.at 21 Sep 2006 04:12:55 -0000 1.11
+++ tests/options.at 21 Sep 2006 16:28:36 -0000
@@ -19,6 +19,67 @@
AT_BANNER([Options.])
+## ---------------- ##
+## Option grouping. ##
+## ---------------- ##
+
+AT_SETUP([option grouping])
+
+dnl this test group depends on correct settings of POSIXLY_CORRECT
+if test -n "${POSIXLY_CORRECT+set}" ; then
+ (unset POSIXLY_CORRECT) >/dev/null 2>&1 || {
+ echo "Problem unsetting POSIXLY_CORRECT"
+ AT_CHECK([exit 77])
+ }
+ unset POSIXLY_CORRECT
+fi
+
+dnl This comes from the "Invoking m4" node; it was easier to write the
+dnl test separately than to let generate.awk fiddle with it.
+AT_DATA([a], [[foo 1
+m@&address@hidden()
+]])
+
+AT_DATA([-d+f], [[hi
+]])
+
+dnl First, run with GNU semantics
+AT_CHECK_M4([-QPDfoo -d a -d+f], [0], [[ 1
+]])
+
+AT_CHECK_M4([-Q -P -D foo -d -d+f -- a], [0], [[ 1
+]])
+
+AT_CHECK_M4([--def foo --debug a], [0], [[ 1
+m@&address@hidden()
+]])
+
+AT_CHECK_M4([--define=foo --debug= -- a], [0], [[ 1
+m@&address@hidden()
+]])
+
+dnl Next, run with POSIX semantics
+POSIXLY_CORRECT=1
+export POSIXLY_CORRECT
+
+AT_CHECK_M4([-QPDfoo -d a -d+f], [0], [[ 1
+hi
+]])
+
+AT_CHECK_M4([-Q -P -D foo -d -- a ./-d+f], [0], [[ 1
+hi
+]])
+
+AT_CHECK_M4([--def foo --debug a], [0], [[ 1
+m@&address@hidden()
+]])
+
+AT_CHECK_M4([--define=foo --debug= -- a], [0], [[ 1
+m@&address@hidden()
+]])
+
+AT_CLEANUP
+
## ------------------ ##
## Discard comments. ##
## ------------------ ##
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- option processing docs,
Eric Blake <=