Re: Possible regressions with trunk autoconf (vs 2.71)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello again,

Some progress on this, it looks like, at least for libpng, there is at one
place where the "Port AC_LANG_CALL" seems to be the culprit.
Specifically, the "," in the C comment, is interpreted by M4 as argument
split which in turn leads to the syntax error.
I made a small test where I  "overquote" the snippet, which seems to work
around the problem for this package at least, but there may be better
solutions:

diff --git a/lib/autoconf/c.m4 b/lib/autoconf/c.m4
index 48bd49a3..3f6e276d 100644
--- a/lib/autoconf/c.m4
+++ b/lib/autoconf/c.m4
@@ -124,16 +124,16 @@ m4_define([_AC_LANG_IO_PROGRAM(C)],
 m4_define([AC_LANG_CALL(C)],
 [AC_LANG_PROGRAM([$1
 m4_if([$2], [main], ,
-[/* Override any GCC internal prototype to avoid an error.
+[[/* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.
    The 'extern "C"' is for builds by C++ compilers;
    although this is not generally supported in C code, supporting it here
-   has little cost and some practical benefit (sr 110532).  */
-#ifdef __cplusplus
+   has little cost and some practical benefit (sr 110532).  */]
+[#ifdef __cplusplus
 extern "C"
 #endif
-char $2 ();])], [return $2 ();])])
+char $2 ();]])], [return $2 ();])])

The snippet of configure.ac that generated wrong code is the following:

# Checks for library functions.
AC_FUNC_STRTOD
AC_CHECK_FUNCS([pow], , AC_CHECK_LIB(m, pow, , AC_MSG_ERROR(cannot find
pow)) )

# Some later POSIX 1003.1 functions are required for test programs, failure
here
# is soft (the corresponding test program is not built).
AC_CHECK_FUNC([clock_gettime],,[AC_MSG_WARN([not building timepng])])
AM_CONDITIONAL([HAVE_CLOCK_GETTIME], [test "$ac_cv_func_clock_gettime" =
"yes"])

AC_ARG_WITH(zlib-prefix,
   AS_HELP_STRING([[[--with-zlib-prefix]]],
      [prefix that may have been used in installed zlib]),
      [ZPREFIX=${withval}],
      [ZPREFIX='z_'])
AC_CHECK_LIB(z, zlibVersion, ,
    AC_CHECK_LIB(z, ${ZPREFIX}zlibVersion, , AC_MSG_ERROR(zlib not
installed)))

Specifically, this one gets wrong shell code, where the comment is split at
the comma:
AC_CHECK_FUNCS([pow], , AC_CHECK_LIB(m, pow, , AC_MSG_ERROR(cannot find
pow)) )

I'll now start a mass rebuild with the work around, and try to figure out
the other errors.

Fred.

On Wed, Nov 16, 2022 at 8:41 AM Frederic Berat <fberat@xxxxxxxxxx> wrote:

> Hello,
>
> In the past few months, I worked on a tool that massively rebuild packages
> that depend on a specific other package, in order to help spot problems as
> early as possible (on Fedora and RHEL so far).
>
> I used this tool to check whether a new version of autoconf could lead to
> build failures in other packages, as 2.70 did.
> The result of this showed that, out of about 1165 packages in Fedora,
> there were around 70 new failures with autoconf 2.72c, and about 85 with
> trunk (commit 3cc9b414 at that time). Most of these failures are due to an
> invalid syntax in the generated configure script (generally regenerated
> through autoreconf).
>
> Earlier this week, I started to bisect when the failures started to
> appear, starting from 2.72c, and found the following commit:
>
> * b27bc3e2 2021-08-31 Paul Eggert  | Port AC_LANG_CALL(C) to C++
>
> Based on what the commit does, this doesn't make much sense to me. Either
> I miss something, or this commit only exposes another problem, which I
> haven't figured out yet. Since most of the packages are still using
> "obsolete" macros, it's hard to completely exclude that the syntax error is
> not due to incorrect syntax in the AC file.
>
> For now, the only thing I could do this week, is to massively rebuild the
> 1165 packages with a revert of this patch to verify that the assumption was
> correct. And so far: meh. Although that seems to work based on 2.72c
> (builds are still running), there are still about 10 failures for which
> there is a syntax error in configure with trunk.
>
> For reference, a candidate for the investigation based on 2.72c is libpng,
> a candidate for investigation based on trunk is krb5 (assuming there are 2
> distinct problems).
>
> My next step is to compare the configure script, with and without the
> revert for autoconf 2.72c and libpng first, then try to figure out with
> which commit I could do the same for krb5 if needed.
>
> Any help or advice to investigate further are welcome.
>
> Frédéric Bérat
>
> Senior Software Engineer, Platform Tools
>
> Red Hat <https://www.redhat.com>
>
> fberat@xxxxxxxxxx
> <https://www.redhat.com>
>




[Index of Archives]     [GCC Help]     [Kernel Discussion]     [RPM Discussion]     [Red Hat Development]     [Yosemite News]     [Linux USB]     [Samba]

  Powered by Linux