GNU clisp contains invocations of AC_LIB_FROMPACKAGE and
AC_LIB_LINKFLAGS like this:
AC_LIB_FROMPACKAGE([avcall], [libffcall])
AC_LIB_FROMPACKAGE([callback], [libffcall])
...
AC_LIB_LINKFLAGS([avcall])
AC_LIB_LINKFLAGS([callback])
This is expected to produce a "configure --help" message like this:
--with-libffcall-prefix[=DIR] search for libavcall, libcallback in
DIR/include and DIR/lib
--without-libffcall-prefix don't search for libavcall, libcallback in
includedir and libdir
But the comma in there, between libavcall and libcallback, gets stuffed
into the expansion of the locally defined macro PACKLIBS and, from there,
is apparently being interpreted as an m4 argument separator, somewhere
in the m4 macro invocation chain (look at $3):
AC_DEFUN([AC_ARG_WITH],
[...
_AC_ENABLE_IF([with], [$1], [$3], [$4])dnl
])# AC_ARG_WITH
m4_define([_AC_ENABLE_IF],
[@%:@ Check whether --$1-$2 was given.
_AC_ENABLE_IF_ACTION([$1], m4_translit([$2], [-+.], [___]), [$3], [$4])
])
m4_define([_AC_ENABLE_IF_ACTION],
[...
AS_IF([test ${$1_$2+y}], [$1val=$$1_$2; $3], [$4])dnl
])
Part of what was intended to be the $2 of the AC_ARG_WITH invocation
ends up being the $3 in this macro invocation chain.
Adding one or two levels of additional m4 quotes fixes this.
2025-05-04 Bruno Haible <[email protected]>
havelib: Fix m4 underquoting bug in AC_LIB_FROMPACKAGE.
Reported for GNU clisp by Adam Sampson <[email protected]> at
<https://gitlab.com/gnu-clisp/clisp/-/issues/60>.
* m4/lib-link.m4 (AC_LIB_FROMPACKAGE): Protect the comma in the
expansion of [acl_libsinpackage_]PACKUP by one more level of quotes.
diff --git a/m4/lib-link.m4 b/m4/lib-link.m4
index d6de4fe2fe..1863f4e168 100644
--- a/m4/lib-link.m4
+++ b/m4/lib-link.m4
@@ -1,5 +1,5 @@
# lib-link.m4
-# serial 34
+# serial 35
dnl Copyright (C) 2001-2025 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -170,7 +170,7 @@ AC_DEFUN([AC_LIB_FROMPACKAGE]
pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-],
[ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
define([acl_libsinpackage_]PACKUP,
- m4_ifdef([acl_libsinpackage_]PACKUP,
[m4_defn([acl_libsinpackage_]PACKUP)[, ]],)[lib$1])
+ m4_ifdef([acl_libsinpackage_]PACKUP,
[m4_defn([acl_libsinpackage_]PACKUP)[[, ]]],)[lib$1])
popdef([PACKUP])
popdef([PACK])
])