Michael Forney
2021-Apr-19 03:26 UTC
[PATCH] Use AC_SUBST_FILE to replace @DEPEND@ with contents of .depend
AC_SUBST_FILE[0] is similar to AC_SUBST, but instead of replacing a variable with its value, it replaces a variable with the contents of the file named by the value. This is exactly what we want in order to insert the contents of .depend at the end of the Makefile. Using AC_SUBST for this purpose poses some problems if $as_echo involves running an external command (i.e. printf is not built-in), in which case the size of .depend may exceed the operating system's argument size limit. In particular, since autoconf 2.70, $as_echo no longer uses `print -r` on ksh shells[1], causing the following message when creating config.log on Linux with oksh: ./configure: printf: Argument list too long AC_SUBST_FILE requires the substitution string to be on its own line, so drop the unneeded leading comment (the first line of .depend has a '#' of its own). [0] https://www.gnu.org/software/autoconf/manual/html_node/Setting-Output-Variables.html [1] http://git.savannah.gnu.org/gitweb/?p=autoconf.git;a=commitdiff;h=2b59b6f8a79b8bf77e178ff4e5aa0ede433d39cf;hp=bea5177adc0c924fe7483509a5e38a6d49319fcb --- Note that I only get this error if I manually generate configure from a git clone since the distributed tarballs used autoconf-2.69. It also seems that the error only affects the contents of config.log, not the Makefile (which is processed with an awk script). Makefile.in | 2 +- configure.ac | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Makefile.in b/Makefile.in index b749206d..4710c2fe 100644 --- a/Makefile.in +++ b/Makefile.in @@ -772,4 +772,4 @@ package: $(CONFIGFILES) $(MANPAGES) $(TARGETS) sh buildpkg.sh; \ fi -# @DEPEND@ + at DEPEND@ diff --git a/configure.ac b/configure.ac index 1c2757ca..af2379df 100644 --- a/configure.ac +++ b/configure.ac @@ -5442,7 +5442,8 @@ AC_SUBST([TEST_SSH_IPV6], [$TEST_SSH_IPV6]) AC_SUBST([TEST_SSH_UTF8], [$TEST_SSH_UTF8]) AC_SUBST([TEST_MALLOC_OPTIONS], [$TEST_MALLOC_OPTIONS]) AC_SUBST([UNSUPPORTED_ALGORITHMS], [$unsupported_algorithms]) -AC_SUBST([DEPEND], [$(cat $srcdir/.depend)]) +AC_SUBST_FILE([DEPEND]) +DEPEND=$srcdir/.depend CFLAGS="${CFLAGS} ${CFLAGS_AFTER}" LDFLAGS="${LDFLAGS} ${LDFLAGS_AFTER}" -- 2.30.1
Thorsten Glaser
2021-Apr-19 16:06 UTC
[PATCH] Use AC_SUBST_FILE to replace @DEPEND@ with contents of .depend
On Sun, 18 Apr 2021, Michael Forney wrote:> argument size limit. In particular, since autoconf 2.70, $as_echo > no longer uses `print -r` on ksh shells[1], causing the following > message when creating config.log on Linux with oksh: > > ./configure: printf: Argument list too longWhat? Whose stupid idea was *that*?> [1] http://git.savannah.gnu.org/gitweb/?p=autoconf.git;a=commitdiff;h=2b59b6f8a79b8bf77e178ff4e5aa0ede433d39cf;hp=bea5177adc0c924fe7483509a5e38a6d49319fcbDear GNU autoconf developer, please keep using print -r -- if $KSH_VERSION is not unset/empty. This is *much* faster and more reliable. (Also, print -nr -- to omit the trailing newline.) Thanks, //mirabilos (developer of mksh)
Michael Forney
2021-Jun-25 06:31 UTC
[PATCH] Use AC_SUBST_FILE to replace @DEPEND@ with contents of .depend
On 2021-04-18, Michael Forney <mforney at mforney.org> wrote:> AC_SUBST_FILE[0] is similar to AC_SUBST, but instead of replacing > a variable with its value, it replaces a variable with the contents > of the file named by the value. This is exactly what we want in > order to insert the contents of .depend at the end of the Makefile. > > Using AC_SUBST for this purpose poses some problems if $as_echo > involves running an external command (i.e. printf is not built-in), > in which case the size of .depend may exceed the operating system's > argument size limit. In particular, since autoconf 2.70, $as_echo > no longer uses `print -r` on ksh shells[1], causing the following > message when creating config.log on Linux with oksh: > > ./configure: printf: Argument list too long > > AC_SUBST_FILE requires the substitution string to be on its own > line, so drop the unneeded leading comment (the first line of .depend > has a '#' of its own). > > [0] > https://www.gnu.org/software/autoconf/manual/html_node/Setting-Output-Variables.html > [1] > http://git.savannah.gnu.org/gitweb/?p=autoconf.git;a=commitdiff;h=2b59b6f8a79b8bf77e178ff4e5aa0ede433d39cf;hp=bea5177adc0c924fe7483509a5e38a6d49319fcbPing on this patch.
Michael Forney
2021-Aug-08 19:24 UTC
[PATCH] Use AC_SUBST_FILE to replace @DEPEND@ with contents of .depend
On 2021-06-24, Michael Forney <mforney at mforney.org> wrote:> On 2021-04-18, Michael Forney <mforney at mforney.org> wrote: >> AC_SUBST_FILE[0] is similar to AC_SUBST, but instead of replacing >> a variable with its value, it replaces a variable with the contents >> of the file named by the value. This is exactly what we want in >> order to insert the contents of .depend at the end of the Makefile. >> >> Using AC_SUBST for this purpose poses some problems if $as_echo >> involves running an external command (i.e. printf is not built-in), >> in which case the size of .depend may exceed the operating system's >> argument size limit. In particular, since autoconf 2.70, $as_echo >> no longer uses `print -r` on ksh shells[1], causing the following >> message when creating config.log on Linux with oksh: >> >> ./configure: printf: Argument list too long >> >> AC_SUBST_FILE requires the substitution string to be on its own >> line, so drop the unneeded leading comment (the first line of .depend >> has a '#' of its own). >> >> [0] >> https://www.gnu.org/software/autoconf/manual/html_node/Setting-Output-Variables.html >> [1] >> http://git.savannah.gnu.org/gitweb/?p=autoconf.git;a=commitdiff;h=2b59b6f8a79b8bf77e178ff4e5aa0ede433d39cf;hp=bea5177adc0c924fe7483509a5e38a6d49319fcb > > Ping on this patch.Any concerns with this patch? I thought it would be fairly uncontroversial since it uses the autoconf macro designed exactly for this purpose.
Damien Miller
2021-Aug-11 06:59 UTC
[PATCH] Use AC_SUBST_FILE to replace @DEPEND@ with contents of .depend
On Sun, 18 Apr 2021, Michael Forney wrote:> AC_SUBST_FILE[0] is similar to AC_SUBST, but instead of replacing > a variable with its value, it replaces a variable with the contents > of the file named by the value. This is exactly what we want in > order to insert the contents of .depend at the end of the Makefile. > > Using AC_SUBST for this purpose poses some problems if $as_echo > involves running an external command (i.e. printf is not built-in), > in which case the size of .depend may exceed the operating system's > argument size limit. In particular, since autoconf 2.70, $as_echo > no longer uses `print -r` on ksh shells[1], causing the following > message when creating config.log on Linux with oksh: > > ./configure: printf: Argument list too long > > AC_SUBST_FILE requires the substitution string to be on its own > line, so drop the unneeded leading comment (the first line of .depend > has a '#' of its own).I actually have a few workflows that run make against the Makefile.in (e.g. generating cat format manpages as part of release) and these break with @DEPEND@ on it's own, uncommented line. I'll need to adjust these before merging this. It's unfortunate that AC_SUBST_FILE has the whole-line restriction whereas AC_SUBST does not :( -d