Minutes of the 8th February 2018 Teleconference Austin-854 Page 1 of 1 Submitted by Andrew Josey, The Open Group. 10th February 2018 Attendees: Mark Ziegast, SHware Systems Dev. Jeorg Schilling, FOKUS Fraunhofer Don Cragun, IEEE PASC OR Nick Stoughton, USENIX, ISO/IEC JTC 1/SC 22 OR Geoff Clare, The Open Group Andrew Josey, The Open Group Martin Rehak, Oracle, The Open Group OR David Clissold, IBM Eric Blake, Red Hat * General news IEEE has formally published 2017 edition, so we have until 2027 to get Issue 8 out :-) The Open Group PDFs and HTML will follow soon. * Outstanding actions ( Please note that this section has been flushed to shorten the minutes - to locate the previous set of outstanding actions, look to the minutes from 28 Jan 2016) Bug 0000249: Add standard support for $'...' in shell Reopened http://austingroupbugs.net/bug_view_page.php?bug_id=249 We will return to bug 249 on a future call. Bug 0000953: Alias expansion is under-specified Was Accepted as Marked http://austingroupbugs.net/view.php?id=953 Richard has an action to propose new wording to discuss in a future telecon. * Current Business Bug 1068: Binding to a system-assigned port. OPEN http://austingroupbugs.net/bug_view_page.php?bug_id=1068 There was a previous action from the ealier to find a volunteer to liaise with IETF. Andrew reported he had one volunteer, and has forwarded the details to the Core team. We did not discuss this, but should pick up on a future call. Bug 1072: m4 ifelse argument expansion clarification Accept as Marked http://austingroupbugs.net/view.php?id=1072 An interpretation is required. Interpretation response: The standard is unclear on this issue, and no conformance distinction can be made between alternative implementations based on this. This is being referred to the sponsor. Rationale: All known m4 implementations perform macro expansion and argument collection in the same manner; but the wording used in the standard did not give enough details on how this occurs. Notes to the Editor (not part of this interpretation): All page and line numbers are for the 2016 edition. On page 2934 lines 97081-97090 change: The m4 utility shall compare each token from the input against the set of built-in and user-defined macros. If the token matches the name of a macro, then the token shall be replaced by the macro’s defining text, if any, and rescanned for matching macro names. Once no portion of the token matches the name of a macro, it shall be written to standard output. Macros may have arguments, in which case the arguments shall be substituted into the defining text before it is rescanned. Macro calls have the form: name(arg1, arg2, ..., argn) Macro names shall consist of letters, digits, and underscores, where the first character is not a digit. Tokens not of this form shall not be treated as macros. to: The m4 utility shall compare each token from the input against the set of built-in and user-defined macros. If the token matches the name of a macro, then the token shall be replaced by the macro’s defining text, if any, then scanning for tokens shall resume at the start of the macro's defining text concatenated with the subsequent input. If a token does not match the name of a macro, it shall be written to standard output. Macros may have arguments, in which case the arguments shall be substituted into the defining text before it is rescanned. No special meaning shall be given to characters enclosed between matching left and right quoting strings, other than identifying nested quoting while finding the matching right quoting string, but the outermost quoting strings shall themselves be discarded. By default, the left quoting string consists of a grave accent (backquote) and the right quoting string consists of an acute accent (single-quote); see also the changequote macro. Comments are written but not scanned for matching macro names; by default, the begin-comment string consists of the character and the end-comment string consists of a . See also the changecom and dnl macros. Name tokens shall consist of the longest possible sequence of letters, digits, and underscores, where the first character is not a digit. Tokens not of this form shall not be treated as name tokens. A macro call is a name token that matches the name of a built-in or user-defined macro. Macro calls can have either of the following forms, which shall be distinguished by whether or not the macro name is immediately followed by a : name name(arg1, arg2, ..., argn) On page 2934 lines 97094-97106 change: If a macro name is followed by a , its arguments are the -separated tokens between the and the matching . Unquoted white-space characters preceding each argument shall be ignored. All other characters, including trailing white-space characters, are retained. characters enclosed between and characters do not delimit arguments. Arguments are positionally defined and referenced. The string "$1" in the defining text shall be replaced by the first argument. Systems shall support at least nine arguments; only the first nine can be referenced, using the strings "$1" to "$9", inclusive. The string "$0" is replaced with the name of the macro. The string "$#" is replaced by the number of arguments as a string. The string "$*" is replaced by a list of all of the arguments, separated by characters. The string "$@" is replaced by a list of all of the arguments separated by characters, and each argument is quoted using the current left and right quoting strings. The string "${" produces unspecified behavior. to: If a macro name is followed by a , the subsequent text shall be tokenized and expanded until a token is encountered that is not a quoted string and whose expansion includes a matching unquoted . The expanded text between the and the matching unquoted is the macro's argument text. An unquoted character within the macro's argument text shall mark the end of one argument and the beginning of the next argument unless the unquoted is enclosed within a nested unquoted , pair. The unquoted characters that separate the arguments, and any unquoted whitespace characters at the beginning of each argument, shall be discarded. All other characters in the macro's argument text, including any whitespace characters at the end of an argument and any nested parenthesized text, shall be retained. The input text containing the macro name, the following , and all tokens up to and including the token whose expansion contained the matching unquoted shall be replaced, and tokenization shall resume on the result of performing argument substition on the macro's defining text followed by any expanded text that followed the matching unquoted . Otherwise, the macro name was not followed by a , and tokenization shall resume on the result of performing argument substitution with zero arguments on the macro's defining text. During argument substitution, arguments shall be positionally defined and referenced. The string "$1" in the defining text shall be replaced by the first argument. Systems shall support at least nine arguments; only the first nine can be referenced, using the strings "$1" to "$9", inclusive. The string "$0" shall be replaced with the name of the macro. The string "$#" shall be replaced by the number of arguments as a minimal string of decimal digits ('0' if the macro was invoked without being followed by a , otherwise 1 more than the number of unquoted characters that divided arguments in the macro's argument text). The string "$*" shall be replaced by a list of all of the arguments, separated by characters. The string "$@" shall be replaced by a list of all of the arguments separated by characters, and each argument shall be quoted using the current left and right quoting strings. The string "${" produces unspecified behavior. On page 2934, delete lines 97110-97116: No special meaning is given to any characters enclosed between matching left and right quoting strings, but the quoting strings are themselves discarded. By default, the left quoting string consists of a grave accent (backquote) and the right quoting string consists of an acute accent (single-quote); see also the changequote macro. Comments are written but not scanned for matching macro names; by default, the begin-comment string consists of the character and the end-comment string consists of a . See also the changecom and dnl macros. (as these lines were moved and reworded in the earlier changeset at line 97081) On page 2935 line 97129 (changecom), change: The behavior is unspecified if either argument is provided but null. to: The behavior is unspecified if either argument is provided but null, or if either argument includes letters, digits, underscore, or . On page 2935 line 97133 (changequote), change: The behavior is unspecified if there is a single argument or either argument is null. to: The behavior is unspecified if there is a single argument, or if either argument is null or includes letters, digits, underscore, or . On page 2936 line 97206 (ifelse), remove the following parenthetical remark: (after macro expansion of both arguments) On page 2940, in the EXAMPLES section, after line 97369, add the following (note to editor: feel free to use bullets or other list identifiers instead of numbers, if that is better): In the following six examples, an additional line is evaluated after this prologue of three definitions: define(`macro', `argument 2 is :`$2':, called with $# arguments')dnl define(`argumentsa', `Arguments')dnl define(`a', `.')dnl 1. The additional line: macro`'a produces: argument 2 is ::, called with 0 arguments. Explanation: macro is called with 0 arguments (as shown by the $# substitution), the substitution of $2 is the empty string, and the empty quoted string after the expansion text prevents concatenation with the subsequent "a", which in turn lets macro a expand to the final .. 2. The additional line: macro()a produces: argument 2 is ::, called with 1 Arguments Explanation: macro is called with one (empty string) argument; then the defining text ending in "arguments" is concatenated with the subsequent "a" to form the next macro name argumentsa which is expanded into Arguments before the final output. 3. The additional line: macro( 1, ( ,2,) , `3') produces: argument 2 is :( ,2,) :, called with 3 arguments Explanation: Leading (but not internal or trailing) space is removed before the argument substituted for $2, and the unquoted commas embedded in parentheses do not delineate arguments. 4. The additional line: macro( `1', `mac2(,`2',)', `3') produces: argument 2 is :mac2(,`2',):, called with 3 arguments Explanation: Regardless of whether mac2 is a defined macro, quoting in the macro call prevents interpretation of "mac2" during argument collection, and the quoting in the defining text of macro prevents interpretation of "mac2" in the substitution of $2 during rescan of the output of macro. 5. The additional line: undefine(`mac2')macro( 1, mac2(,2,), 3) produces: argument 2 is :mac2(,2,):, called with 3 arguments Explanation: mac2 is not a macro name when scanned during argument collection, so it and the subsequent parenthesized text is used literally. 6. The additional line: define(`mac2', `hi $@')macro( 1, mac2( ,2,), 3) produces: argument 2 is :hi :, called with 5 arguments Explanation: mac2 is a macro name, so collecting the arguments to macro requires scanning the output of mac2(,2,) (the text hi `',`2',`' after substitution of $@); this output contains unquoted commas causing additional arguments to be visible to macro. Next Steps ---------- The next call is on Feb 15th, 2018 (a Thursday) Calls are anchored on US time. (8am Pacific) This call will be for the regular 90 minutes. http://austingroupbugs.net An IRC channel will be available for the meeting irc://irc.freenode.net/austingroupbugs An etherpad is usually up for the meeting, with a URL using the date format as below: https://posix.rhansen.org/p/201x-mm-dd username=posix password=2115756#