diff options
author | Lars Wendler <polynomial-c@gentoo.org> | 2020-10-17 21:59:58 +0200 |
---|---|---|
committer | Lars Wendler <polynomial-c@gentoo.org> | 2020-10-17 22:00:30 +0200 |
commit | c95e99d3956c8d0f6816937107fb0cfeae12366e (patch) | |
tree | 92a907b9b8d4ba8b6c49469338dac1e54cd86fc4 /sys-devel | |
parent | raname openldap user/group to ldap (diff) | |
download | gentoo-c95e99d3956c8d0f6816937107fb0cfeae12366e.tar.gz gentoo-c95e99d3956c8d0f6816937107fb0cfeae12366e.tar.bz2 gentoo-c95e99d3956c8d0f6816937107fb0cfeae12366e.zip |
sys-devel/autoconf: Revbump to improve AC_INIT arg quoting
Thanks-to: Michael Orlitzky <mjo@gentoo.org>
Bug: https://bugs.gentoo.org/732648
Package-Manager: Portage-3.0.8, Repoman-3.0.1
Signed-off-by: Lars Wendler <polynomial-c@gentoo.org>
Diffstat (limited to 'sys-devel')
-rw-r--r-- | sys-devel/autoconf/autoconf-2.70_beta2-r1.ebuild (renamed from sys-devel/autoconf/autoconf-2.70_beta2.ebuild) | 4 | ||||
-rw-r--r-- | sys-devel/autoconf/files/autoconf-2.70_beta2-AC_INIT_argument_quoting.patch | 573 |
2 files changed, 577 insertions, 0 deletions
diff --git a/sys-devel/autoconf/autoconf-2.70_beta2.ebuild b/sys-devel/autoconf/autoconf-2.70_beta2-r1.ebuild index 340c26016422..f5729eca99d2 100644 --- a/sys-devel/autoconf/autoconf-2.70_beta2.ebuild +++ b/sys-devel/autoconf/autoconf-2.70_beta2-r1.ebuild @@ -33,6 +33,10 @@ RDEPEND="${BDEPEND} [[ ${PV} == "9999" ]] && BDEPEND+=" >=sys-apps/texinfo-4.3" PDEPEND="emacs? ( app-emacs/autoconf-mode )" +PATCHES=( + "${FILESDIR}/${P}-AC_INIT_argument_quoting.patch" +) + src_prepare() { # usr/bin/libtool is provided by binutils-apple, need gnu libtool if [[ ${CHOST} == *-darwin* ]] ; then diff --git a/sys-devel/autoconf/files/autoconf-2.70_beta2-AC_INIT_argument_quoting.patch b/sys-devel/autoconf/files/autoconf-2.70_beta2-AC_INIT_argument_quoting.patch new file mode 100644 index 000000000000..8a308c44396a --- /dev/null +++ b/sys-devel/autoconf/files/autoconf-2.70_beta2-AC_INIT_argument_quoting.patch @@ -0,0 +1,573 @@ +From 8a4571772a5aadc7a005eb288f66ed52b5f52eef Mon Sep 17 00:00:00 2001 +From: Zack Weinberg <zackw@panix.com> +Date: Wed, 14 Oct 2020 18:03:21 -0400 +Subject: [PATCH 1/1] improvements to AC_INIT argument quoting + +--- + doc/autoconf.texi | 33 ++++--- + lib/autoconf/general.m4 | 149 +++++++++++++++----------------- + lib/autoconf/status.m4 | 29 ++++--- + tests/base.at | 184 +++++++++++++++++++++++++++++++++++++--- + 4 files changed, 279 insertions(+), 116 deletions(-) + +diff --git a/doc/autoconf.texi b/doc/autoconf.texi +index 9a52fbdb..a89f1469 100644 +--- a/doc/autoconf.texi ++++ b/doc/autoconf.texi +@@ -1876,21 +1876,24 @@ distribution tar ball names (e.g., @samp{autoconf}). It defaults to + other than alphanumerics and underscores are changed to @samp{-}. If + provided, @var{url} should be the home page for the package. + +-All the arguments of @code{AC_INIT} must be static, i.e., there should not +-be any shell computation, quotes, or newlines, but they can be computed +-by M4. This is because the package information strings are expanded at +-M4 time into several contexts, and must give the same text at shell time +-whether used in single-quoted strings, double-quoted strings, quoted +-here-documents, or unquoted here-documents. It is permissible to use +-@code{m4_esyscmd} or @code{m4_esyscmd_s} for computing a version string +-that changes with every commit to a version control system (in fact, +-Autoconf does just that, for all builds of the development tree made +-between releases). ++Leading and trailing whitespace is stripped from all the arguments to ++@code{AC_INIT}, and interior whitespace is collapsed to a single space. ++ ++The arguments to @code{AC_INIT} may be computed by M4, when ++@command{autoconf} is run. For instance, it is fine for the ++@var{version} argument to be an invocation of @code{m4_esyscmd} that ++runs a command that determines the package's version from information ++stored in the package's version control system. However, they may not ++be computed by the shell, when @command{configure} is run; if they ++contain any construct that would cause computation by the shell, ++Autoconf will issue an error. This restriction is because the arguments ++to AC_INIT are written into @file{configure} several times, in different ++places, only some of which are subject to shell variable and command ++substitution. + + The @var{tarname} argument is used to construct filenames. +-In addition to being static, it should not contain wildcard +-characters, white space, or anything else that could be troublesome +-as part of a file or directory name. ++It should not contain wildcard characters, white space, or anything else ++that could be troublesome as part of a file or directory name. + + The following M4 macros (e.g., @code{AC_PACKAGE_NAME}), output variables + (e.g., @code{PACKAGE_NAME}), and preprocessor symbols (e.g., +@@ -1947,6 +1950,10 @@ of updating @samp{$@@} and @samp{$*}. However, we suggest that you use + standard macros like @code{AC_ARG_ENABLE} instead of attempting to + implement your own option processing. @xref{Site Configuration}. + ++If you use the @code{AC_PACKAGE} M4 macros, beware that they may contain ++characters that are significant to M4. In almost all cases, you should ++refer to them using @code{m4_defn}. @xref{Programming in M4sugar}. ++ + @node Versioning + @section Dealing with Autoconf versions + @cindex Autoconf version +diff --git a/lib/autoconf/general.m4 b/lib/autoconf/general.m4 +index eaa1d91b..5955b672 100644 +--- a/lib/autoconf/general.m4 ++++ b/lib/autoconf/general.m4 +@@ -230,56 +230,47 @@ m4_define([_AC_INIT_LITERAL], + + # _AC_INIT_PACKAGE(PACKAGE-NAME, VERSION, BUG-REPORT, [TARNAME], [URL]) + # --------------------------------------------------------------------- ++# Set the values of AC_PACKAGE_{NAME,VERSION,STRING,BUGREPORT,TARNAME,URL} ++# from the arguments. + m4_define([_AC_INIT_PACKAGE], +-[m4_pushdef([_ac_init_NAME], m4_normalize([$1])) +-m4_pushdef([_ac_init_VERSION], m4_normalize([$2])) +-m4_pushdef([_ac_init_BUGREPORT], m4_normalize([$3])) +-m4_pushdef([_ac_init_TARNAME], m4_normalize([$4])) +-m4_pushdef([_ac_init_URL], m4_normalize([$5])) +-# NAME, VERSION, BUGREPORT, and URL should all be safe for use in shell +-# strings of all kinds. +-_AC_INIT_LITERAL(m4_defn([_ac_init_NAME])) +-_AC_INIT_LITERAL(m4_defn([_ac_init_VERSION])) +-_AC_INIT_LITERAL(m4_defn([_ac_init_BUGREPORT])) +-_AC_INIT_LITERAL(m4_defn([_ac_init_URL])) ++[_AC_INIT_PACKAGE_N(m4_normalize([$1]), m4_normalize([$2]), m4_normalize([$3]), ++ m4_normalize([$4]), m4_normalize([$5]))]) ++ ++# _AC_INIT_PACKAGE_N(PACKAGE-NAME, VERSION, BUG-REPORT, [TARNAME], [URL]) ++# ----------------------------------------------------------------------- ++# Subroutine of _AC_INIT_PACKAGE. ++m4_define([_AC_INIT_PACKAGE_N], ++[# PACKAGE-NAME, VERSION, BUGREPORT, and URL should all be safe for use ++# in shell strings of all kinds. ++_AC_INIT_LITERAL([$1]) ++_AC_INIT_LITERAL([$2]) ++_AC_INIT_LITERAL([$3]) ++_AC_INIT_LITERAL([$5]) + # TARNAME is even more constrained: it should not contain any shell + # metacharacters or whitespace, because it is used to construct + # filenames. +-AS_LITERAL_WORD_IF(m4_defn([_ac_init_TARNAME]), [], ++AS_LITERAL_WORD_IF([$4], [], + [m4_warn([syntax], +- [AC_INIT: unsafe as a filename: "]m4_defn([_ac_init_TARNAME])["])]) ++ [AC_INIT: unsafe as a filename: "$4"])]) + # +-# These do not use m4_copy because we don't want to copy the pushdef stack. +-m4_ifndef([AC_PACKAGE_NAME], +- [m4_define([AC_PACKAGE_NAME], +- m4_defn([_ac_init_NAME]))]) +-m4_ifndef([AC_PACKAGE_VERSION], +- [m4_define([AC_PACKAGE_VERSION], +- m4_defn([_ac_init_VERSION]))]) +-m4_ifndef([AC_PACKAGE_STRING], +- [m4_define([AC_PACKAGE_STRING], +- m4_defn([_ac_init_NAME])[ ]m4_defn([_ac_init_VERSION]))]) +-m4_ifndef([AC_PACKAGE_BUGREPORT], +- [m4_define([AC_PACKAGE_BUGREPORT], _ac_init_BUGREPORT)]) +-m4_ifndef([AC_PACKAGE_TARNAME], +- [m4_define([AC_PACKAGE_TARNAME], +- m4_default(m4_defn([_ac_init_TARNAME]), +- [m4_bpatsubst(m4_tolower( +- m4_bpatsubst(m4_defn([_ac_init_NAME]), +- [GNU ])), +- [[^_abcdefghijklmnopqrstuvwxyz0123456789]], +- [-])]))]) +-m4_ifndef([AC_PACKAGE_URL], +- [m4_define([AC_PACKAGE_URL], +- m4_default(m4_defn([_ac_init_URL]), +- [m4_if(m4_index(m4_defn([_ac_init_NAME]), +- [GNU ]), [0], +- [[https://www.gnu.org/software/]m4_defn([AC_PACKAGE_TARNAME])[/]])]))]) +-m4_popdef([_ac_init_NAME]) +-m4_popdef([_ac_init_VERSION]) +-m4_popdef([_ac_init_BUGREPORT]) +-m4_popdef([_ac_init_TARNAME]) +-m4_popdef([_ac_init_URL]) ++m4_define_default([AC_PACKAGE_NAME], [$1]) ++m4_define_default([AC_PACKAGE_VERSION], [$2]) ++# The m4_strip makes AC_PACKAGE_STRING be [], not [ ], when ++# both $1 and $2 are empty. ++m4_define_default([AC_PACKAGE_STRING], m4_strip([$1 $2])) ++m4_define_default([AC_PACKAGE_BUGREPORT], [$3]) ++# ++# N.B. m4_ifnblank strips one layer of quotation from whichever of its ++# second and third argument it evaluates to. ++m4_define_default([AC_PACKAGE_TARNAME], ++ m4_ifnblank([$4], [[$4]], ++ [m4_quote(m4_bpatsubst(m4_tolower(m4_bpatsubst([$1], [^GNU ], [])), ++ [[^_abcdefghijklmnopqrstuvwxyz0123456789]], [-]))])) ++m4_define_default([AC_PACKAGE_URL], ++ m4_ifnblank([$5], [[$5]], ++ [m4_if(m4_index([$1], [GNU ]), [0], ++ [[https://www.gnu.org/software/]m4_defn([AC_PACKAGE_TARNAME])[/]], ++ [])])) + ]) + + +@@ -363,13 +354,13 @@ m4_define([_AC_INIT_NOTICE], + [m4_divert_text([HEADER-COMMENT], + [@%:@ Guess values for system-dependent variables and create Makefiles. + @%:@ Generated by m4_PACKAGE_STRING[]dnl +-m4_ifset([AC_PACKAGE_STRING], [ for AC_PACKAGE_STRING]).]) +- ++m4_ifset([AC_PACKAGE_STRING], [ for m4_defn([AC_PACKAGE_STRING]). ++])dnl + m4_ifset([AC_PACKAGE_BUGREPORT], + [m4_divert_text([HEADER-COMMENT], + [@%:@ +-@%:@ Report bugs to <AC_PACKAGE_BUGREPORT>.])]) +-]) ++@%:@ Report bugs to: m4_defn([AC_PACKAGE_BUGREPORT])])]) ++])]) + + + # _AC_INIT_COPYRIGHT +@@ -436,18 +427,12 @@ AC_SUBST([SHELL])dnl + AC_SUBST([PATH_SEPARATOR])dnl + + # Identity of this package. +-AC_SUBST([PACKAGE_NAME], +- [m4_ifdef([AC_PACKAGE_NAME], ['AC_PACKAGE_NAME'])])dnl +-AC_SUBST([PACKAGE_TARNAME], +- [m4_ifdef([AC_PACKAGE_TARNAME], ['AC_PACKAGE_TARNAME'])])dnl +-AC_SUBST([PACKAGE_VERSION], +- [m4_ifdef([AC_PACKAGE_VERSION], ['AC_PACKAGE_VERSION'])])dnl +-AC_SUBST([PACKAGE_STRING], +- [m4_ifdef([AC_PACKAGE_STRING], ['AC_PACKAGE_STRING'])])dnl +-AC_SUBST([PACKAGE_BUGREPORT], +- [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])])dnl +-AC_SUBST([PACKAGE_URL], +- [m4_ifdef([AC_PACKAGE_URL], ['AC_PACKAGE_URL'])])dnl ++AC_SUBST([PACKAGE_NAME], ['m4_defn([AC_PACKAGE_NAME])'])dnl ++AC_SUBST([PACKAGE_TARNAME], ['m4_defn([AC_PACKAGE_TARNAME])'])dnl ++AC_SUBST([PACKAGE_VERSION], ['m4_defn([AC_PACKAGE_VERSION])'])dnl ++AC_SUBST([PACKAGE_STRING], ['m4_defn([AC_PACKAGE_STRING])'])dnl ++AC_SUBST([PACKAGE_BUGREPORT], ['m4_defn([AC_PACKAGE_BUGREPORT])'])dnl ++AC_SUBST([PACKAGE_URL], ['m4_defn([AC_PACKAGE_URL])'])dnl + + m4_divert_pop([DEFAULTS])dnl + m4_wrap_lifo([m4_divert_text([DEFAULTS], +@@ -1048,9 +1033,9 @@ if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +-\`configure' configures m4_ifset([AC_PACKAGE_STRING], +- [AC_PACKAGE_STRING], +- [this package]) to adapt to many kinds of systems. ++\`configure' configures m4_default_nblank(m4_defn([AC_PACKAGE_STRING]), ++ [this package])dnl ++ to adapt to many kinds of systems. + + Usage: $[0] [[OPTION]]... [[VAR=VALUE]]... + +@@ -1099,9 +1084,8 @@ Fine tuning of the installation directories: + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] +-]AS_HELP_STRING([--docdir=DIR], +- [documentation root ]@<:@DATAROOTDIR/doc/m4_ifset([AC_PACKAGE_TARNAME], +- [AC_PACKAGE_TARNAME], [PACKAGE])@:>@)[ ++ --docdir=DIR documentation root @<:@DATAROOTDIR/doc/]dnl ++m4_default_quoted(m4_defn([AC_PACKAGE_TARNAME]), [PACKAGE])[@:>@ + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] +@@ -1139,18 +1123,22 @@ fi + if test -n "$ac_init_help"; then + m4_ifset([AC_PACKAGE_STRING], + [ case $ac_init_help in +- short | recursive ) echo "Configuration of AC_PACKAGE_STRING:";; ++ short | recursive ) ++ AS_ECHO(["Configuration of m4_defn([AC_PACKAGE_STRING]):"]);; + esac]) + cat <<\_ACEOF + m4_divert_pop([HELP_ENABLE])dnl + m4_divert_push([HELP_END])dnl + +-Report bugs to m4_ifset([AC_PACKAGE_BUGREPORT], [<AC_PACKAGE_BUGREPORT>], +- [the package provider]).dnl +-m4_ifdef([AC_PACKAGE_NAME], [m4_ifset([AC_PACKAGE_URL], [ +-AC_PACKAGE_NAME home page: <AC_PACKAGE_URL>.])dnl +-m4_if(m4_index(m4_defn([AC_PACKAGE_NAME]), [GNU ]), [0], [ +-General help using GNU software: <https://www.gnu.org/gethelp/>.])]) ++m4_ifset([AC_PACKAGE_BUGREPORT], ++[Report bugs to: m4_defn([AC_PACKAGE_BUGREPORT]) ++])dnl ++m4_ifset([AC_PACKAGE_NAME], [m4_ifset([AC_PACKAGE_URL], ++[m4_defn([AC_PACKAGE_NAME]) home page: m4_defn([AC_PACKAGE_URL]) ++])])dnl ++m4_if(m4_index(m4_defn([AC_PACKAGE_NAME]), [GNU ]), [0], ++[General help using GNU software: <https://www.gnu.org/gethelp/>. ++])dnl + _ACEOF + ac_status=$? + fi +@@ -1189,9 +1177,9 @@ m4_define([_AC_INIT_VERSION], + [m4_divert_text([VERSION_BEGIN], + [if $ac_init_version; then + cat <<\_ACEOF +-m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])configure[]dnl +-m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +-generated by m4_PACKAGE_STRING]) ++m4_ifset([AC_PACKAGE_NAME], [m4_defn([AC_PACKAGE_NAME]) ])configure[]dnl ++m4_ifset([AC_PACKAGE_VERSION], [ m4_defn([AC_PACKAGE_VERSION])]) ++generated by m4_defn([m4_PACKAGE_STRING])]) + m4_divert_text([VERSION_END], + [_ACEOF + exit +@@ -1230,9 +1218,10 @@ cat >config.log <<_ACEOF + This file contains any messages produced by compilers while + running configure, to aid debugging if configure makes a mistake. + +-It was created by m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])dnl +-$as_me[]m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]), which was +-generated by m4_PACKAGE_STRING. Invocation command line was ++It was created by m4_ifset([AC_PACKAGE_NAME], [m4_defn([AC_PACKAGE_NAME]) ])dnl ++$as_me[]m4_ifset([AC_PACKAGE_VERSION], ++ [ m4_defn([AC_PACKAGE_VERSION])]), which was ++generated by m4_defn([m4_PACKAGE_STRING]). Invocation command line was + + $ $[0]$ac_configure_args_raw + +@@ -1446,7 +1435,7 @@ m4_define([_AS_FORCE_REEXEC_WITH_CONFIG_SHELL], [yes]) + AS_INIT[]dnl + AS_PREPARE[]dnl + m4_divert_push([KILL]) +-m4_ifval([$2], [_AC_INIT_PACKAGE($@)]) ++_AC_INIT_PACKAGE($@) + _AC_INIT_DEFAULTS + _AC_INIT_PARSE_ARGS + _AC_INIT_DIRCHECK +diff --git a/lib/autoconf/status.m4 b/lib/autoconf/status.m4 +index 1389f328..aa8324f0 100644 +--- a/lib/autoconf/status.m4 ++++ b/lib/autoconf/status.m4 +@@ -1343,9 +1343,11 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + # report actual input values of CONFIG_FILES etc. instead of their + # values after options handling. + ac_log=" +-This file was extended by m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])dnl +-$as_me[]m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]), which was +-generated by m4_PACKAGE_STRING. Invocation command line was ++This file was extended by m4_ifset([AC_PACKAGE_NAME], ++ [m4_defn([AC_PACKAGE_NAME]) ])dnl ++$as_me[]m4_ifset([AC_PACKAGE_VERSION], ++ [ m4_defn([AC_PACKAGE_VERSION])]), which was ++generated by m4_defn([m4_PACKAGE_STRING]). Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS +@@ -1431,12 +1433,15 @@ m4_ifdef([_AC_SEEN_CONFIG(COMMANDS)], + $config_commands + + ])dnl +-Report bugs to m4_ifset([AC_PACKAGE_BUGREPORT], [<AC_PACKAGE_BUGREPORT>], +- [the package provider]).dnl +-m4_ifdef([AC_PACKAGE_NAME], [m4_ifset([AC_PACKAGE_URL], [ +-AC_PACKAGE_NAME home page: <AC_PACKAGE_URL>.])dnl +-m4_if(m4_index(m4_defn([AC_PACKAGE_NAME]), [GNU ]), [0], [ +-General help using GNU software: <https://www.gnu.org/gethelp/>.])])" ++m4_ifset([AC_PACKAGE_BUGREPORT], ++[Report bugs to: m4_defn([AC_PACKAGE_BUGREPORT]) ++]))dnl ++m4_ifset([AC_PACKAGE_NAME], [m4_ifset([AC_PACKAGE_URL], ++[m4_defn([AC_PACKAGE_NAME]) home page: m4_defn([AC_PACKAGE_URL]) ++])])dnl ++m4_if(m4_index(m4_defn([AC_PACKAGE_NAME]), [GNU ]), [0], ++[General help using GNU software: <https://www.gnu.org/gethelp/>. ++])" + + _ACEOF + ac_cs_config=`AS_ECHO(["$ac_configure_args"]) | sed "$ac_safe_unquote"` +@@ -1444,9 +1449,9 @@ ac_cs_config_escaped=`AS_ECHO(["$ac_cs_config"]) | sed "s/^ //; s/'/'\\\\\\\\''/ + cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_cs_config='$ac_cs_config_escaped' + ac_cs_version="\\ +-m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.status[]dnl +-m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +-configured by $[0], generated by m4_PACKAGE_STRING, ++m4_ifset([AC_PACKAGE_NAME], [m4_defn([AC_PACKAGE_NAME]) ])config.status[]dnl ++m4_ifset([AC_PACKAGE_VERSION], [ m4_defn([AC_PACKAGE_VERSION])]) ++configured by $[0], generated by m4_defn([m4_PACKAGE_STRING]), + with options \\"\$ac_cs_config\\" + + Copyright (C) m4_PACKAGE_YEAR Free Software Foundation, Inc. +diff --git a/tests/base.at b/tests/base.at +index 6a1d9742..bc8e1faa 100644 +--- a/tests/base.at ++++ b/tests/base.at +@@ -238,36 +238,124 @@ AT_CLEANUP + + AT_SETUP([AC_INIT with unusual version strings]) + ++if echo 'ab*c' | grep -F 'ab*c' >/dev/null 2>&1; then ++ FGREP="grep -F" ++else ++ FGREP=fgrep ++fi ++ ++# In both of the arguments that might contain URLs, make sure we test ++# all of the unusual ASCII characters that commonly appear in URLs. ++# The RFC 3986 "unreserved" characters are ASCII letters and digits, plus ++# - . _ ~ ++# The RFC 3986 "gen-delims" and "sub-delims" are ++# / : ? # [ ] @ ! $ & ' ( ) * + , ; = ++# The URL escape character is ++# % ++# Characters that are still significant for Bourne shell within a ++# single-quoted string, double-quoted string, quoted here-doc, or ++# unquoted here-doc are explicitly not allowed: ++# ' $ ++# Also, we don't test unbalanced parentheses or brackets here. ++ + AT_DATA([configure.ac], +-[[AC_INIT([GNU String++ with spaces (foo)], ++[[AC_INIT([GNU String++ with spaces ++ (foo)], + [2.48++ (2010-07-03)], +- [[https://example.com/?a=b&c=d#e]], ++ [https://example/~bug/cdfijknoqrvw/-._:@!()[]*+,;/?y=z#1234567890 ++], + [string++], +- [[https://example.com/?f=g&h=i%2fj#42]]) ++ [HTTPS://EXAMPLE/~PKG/BCDFIJNOQRUVW/-._:@!()[]*+,;/?y=z#1234567890 ++]) + AC_OUTPUT + ]]) + +-if echo 'ab*c' | grep -F 'ab*c' >/dev/null 2>&1; then +- FGREP="grep -F" +-else +- FGREP=fgrep +-fi ++AT_CHECK_AUTOCONF([-Werror]) ++AT_CHECK_CONFIGURE([-q]) ++ ++AT_CHECK_CONFIGURE([--help], [], [stdout]) ++AT_CHECK([[$FGREP \ ++ 'https://example/~bug/cdfijknoqrvw/-._:@!()[]*+,;/?y=z#1234567890' \ ++ stdout]], [], [ignore]) ++AT_CHECK([[$FGREP \ ++ 'HTTPS://EXAMPLE/~PKG/BCDFIJNOQRUVW/-._:@!()[]*+,;/?y=z#1234567890' \ ++ stdout]], [], [ignore]) ++ ++AT_CHECK_CONFIGURE([--version], [], [stdout]) ++AT_CHECK([$FGREP 'GNU String++ with spaces (foo)' stdout], [], [ignore]) ++AT_CHECK([$FGREP '2.48++ (2010-07-03)' stdout], [], [ignore]) ++ ++AT_CHECK([./config.status --help], [], [stdout]) ++AT_CHECK([[$FGREP \ ++ 'https://example/~bug/cdfijknoqrvw/-._:@!()[]*+,;/?y=z#1234567890' \ ++ stdout]], [], [ignore]) ++AT_CHECK([[$FGREP \ ++ 'HTTPS://EXAMPLE/~PKG/BCDFIJNOQRUVW/-._:@!()[]*+,;/?y=z#1234567890' \ ++ stdout]], [], [ignore]) ++ ++AT_CHECK([./config.status --version], [], [stdout]) ++AT_CHECK([$FGREP 'GNU String++ with spaces (foo)' stdout], [], [ignore]) ++AT_CHECK([$FGREP '2.48++ (2010-07-03)' stdout], [], [ignore]) ++ ++# Repeat the above test using all the unusual characters that might appear ++# in a list of email addresses in both BUG-REPORT and URL. (URL isn't ++# supposed to contain email addresses, but there's no good reason to ++# restrict its syntax.) ++# The RFC 5822 "atext" characters are ASCII letters and digits, plus ++# ! # $ % & ' * + - / = ? ^ _ ` { | } ~ ++# The RFC 5822 "special" characters, all of which might appear somewhere ++# in an address list, are ++# ( ) < > [ ] : ; @ \ , . " ++# As above, characters that are significant for Bourne shell within ++# strings and heredocs are explicitly not allowed: ++# ' " ` \ $ ++# Whitespace is allowed but collapsed (just like AC_INIT does itself). ++AT_DATA([configure.ac], ++[[AC_INIT([GNU String++ with spaces ++ (foo)], ++ [2.48++ (2010-07-03)], ++ [bugs: fred <A=B?C^D_E@F>, ++ G!H!I#J@K.L (wilma), ++ M%N&O@[156.247.38.49], ++ P*Q+R-S/T@U, ++ {jon|chyp~}@kqtvxz.VWXYZ;], ++ [string++], ++ [contact: jem <A=B?C^D_E@bd>, ++ F!G!H#I@fv.J (lugh), ++ K%L&M@[156.247.38.49], ++ N*O+P-Q/R@STU, ++ {qik|~prys}@wxz.VWXYZ;]) ++AC_OUTPUT ++]]) + + AT_CHECK_AUTOCONF([-Werror]) + AT_CHECK_CONFIGURE([-q]) ++ + AT_CHECK_CONFIGURE([--help], [], [stdout]) +-AT_CHECK([[$FGREP 'com/?a=b&c=d#e' stdout]], [], [ignore]) +-AT_CHECK([[$FGREP 'com/?f=g&h=i%2fj#42' stdout]], [], [ignore]) ++AT_CHECK([[$FGREP \ ++ 'bugs: fred <A=B?C^D_E@F>, G!H!I#J@K.L (wilma), M%N&O@[156.247.38.49], P*Q+R-S/T@U, {jon|chyp~}@kqtvxz.VWXYZ;' \ ++ stdout]], [], [ignore]) ++AT_CHECK([[$FGREP \ ++ 'contact: jem <A=B?C^D_E@bd>, F!G!H#I@fv.J (lugh), K%L&M@[156.247.38.49], N*O+P-Q/R@STU, {qik|~prys}@wxz.VWXYZ;' \ ++ stdout]], [], [ignore]) ++ + AT_CHECK_CONFIGURE([--version], [], [stdout]) + AT_CHECK([$FGREP 'GNU String++ with spaces (foo)' stdout], [], [ignore]) + AT_CHECK([$FGREP '2.48++ (2010-07-03)' stdout], [], [ignore]) + + AT_CHECK([./config.status --help], [], [stdout]) +-AT_CHECK([[$FGREP 'com/?a=b&c=d#e' stdout]], [], [ignore]) ++AT_CHECK([[$FGREP \ ++ 'bugs: fred <A=B?C^D_E@F>, G!H!I#J@K.L (wilma), M%N&O@[156.247.38.49], P*Q+R-S/T@U, {jon|chyp~}@kqtvxz.VWXYZ;' \ ++ stdout]], [], [ignore]) ++AT_CHECK([[$FGREP \ ++ 'contact: jem <A=B?C^D_E@bd>, F!G!H#I@fv.J (lugh), K%L&M@[156.247.38.49], N*O+P-Q/R@STU, {qik|~prys}@wxz.VWXYZ;' \ ++ stdout]], [], [ignore]) ++ + AT_CHECK([./config.status --version], [], [stdout]) + AT_CHECK([$FGREP 'GNU String++ with spaces (foo)' stdout], [], [ignore]) + AT_CHECK([$FGREP '2.48++ (2010-07-03)' stdout], [], [ignore]) + ++# Check for invalid characters in each argument. + AT_DATA([configure.ac], + [[AC_INIT([GNU "String++"], + [2.48], [https://example.com/], [string++]) +@@ -347,6 +435,80 @@ AC_OUTPUT + AT_CHECK_AUTOCONF([-Werror], [1], [ignore], [stderr]) + AT_CHECK([grep 'AC_INIT: unsafe as a filename: ' stderr], [], [ignore]) + ++# Commas and unbalanced close parentheses are especially troublesome for M4. ++ ++AT_DATA([configure.ac], ++[[AC_INIT([GNU, String], [2.48], [bugs@gstring.example], ++ [string], [https://gstring.example/]) ++AC_OUTPUT ++]]) ++AT_CHECK_AUTOCONF ++ ++AT_DATA([configure.ac], ++[[AC_INIT([GNU String)], [2.48], [bugs@gstring.example], ++ [string], [https://gstring.example/]) ++AC_OUTPUT ++]]) ++AT_CHECK_AUTOCONF ++ ++AT_DATA([configure.ac], ++[[AC_INIT([GNU String], [2,48], [bugs@gstring.example], ++ [string], [https://gstring.example/]) ++AC_OUTPUT ++]]) ++AT_CHECK_AUTOCONF ++ ++AT_DATA([configure.ac], ++[[AC_INIT([GNU String], [2.48)], [bugs@gstring.example], ++ [string], [https://gstring.example/]) ++AC_OUTPUT ++]]) ++AT_CHECK_AUTOCONF ++ ++AT_DATA([configure.ac], ++[[AC_INIT([GNU String], [2.48], [bugs@gstring.example, ++ gstring-bugs@example.com], ++ [string], [https://gstring.example/]) ++AC_OUTPUT ++]]) ++AT_CHECK_AUTOCONF ++ ++AT_DATA([configure.ac], ++[[AC_INIT([GNU String], [2.48], [bugs)@gstring.example], ++ [string], [https://gstring.example/]) ++AC_OUTPUT ++]]) ++AT_CHECK_AUTOCONF ++ ++AT_DATA([configure.ac], ++[[AC_INIT([GNU String], [2.48], [bugs@gstring.example], ++ [string,], [https://gstring.example/]) ++AC_OUTPUT ++]]) ++AT_CHECK_AUTOCONF ++ ++AT_DATA([configure.ac], ++[[AC_INIT([GNU String], [2.48], [bugs@gstring.example], ++ [string)], [https://gstring.example/]) ++AC_OUTPUT ++]]) ++AT_CHECK_AUTOCONF([], [0], [ignore], [stderr]) ++AT_CHECK([grep 'AC_INIT: unsafe as a filename: ' stderr], [], [ignore]) ++ ++AT_DATA([configure.ac], ++[[AC_INIT([GNU String], [2.48], [bugs@gstring.example], ++ [string], [https://gstring.example/docs,html]) ++AC_OUTPUT ++]]) ++AT_CHECK_AUTOCONF ++ ++ ++AT_DATA([configure.ac], ++[[AC_INIT([GNU String], [2.48], [bugs@gstring.example], ++ [string], [https://gstring.example/weird)/path]) ++AC_OUTPUT ++]]) ++AT_CHECK_AUTOCONF + + AT_CLEANUP + +-- +2.26.2 + |