[
https://issues.apache.org/jira/browse/THRIFT-6187?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jens Geyer updated THRIFT-6187:
-------------------------------
Description:
Every run of ./bootstrap.sh emits five autoconf obsolescence warnings. On a
clean tree at 569e4df2a, with autoconf 2.71 / automake 1.16.5 / libtool 2.4.7
as shipped by ubuntu-24.04:
{code}
configure.ac:87: warning: The macro `AC_PROG_LIBTOOL' is obsolete.
configure.ac:91: warning: AC_PROG_LEX without either yywrap or noyywrap is
obsolete
configure.ac:603: warning: The macro `AC_HEADER_STDC' is obsolete.
configure.ac:604: warning: The macro `AC_HEADER_TIME' is obsolete.
configure.ac:606: warning: The macro `AC_TYPE_SIGNAL' is obsolete.
{code}
h2. Why this is worth a ticket rather than ignoring
They are not just log noise. The lib-java-kotlin job runs
{{actions/setup-java}}, which registers a javac problem matcher, and later runs
{{./bootstrap.sh}}. Autoconf's {{file:line: warning: text}} output happens to
match that matcher, so GitHub turns the warnings into *file annotations* and
paints an alert marker next to configure.ac in the "Files changed" view of any
PR that touches it. Nobody wrote a check for this; it is an accidental
cross-hit between a Java matcher and autoconf's output, and it makes an
untouched, unrelated file look like it has findings. It confused a reviewer on
PR #3800.
h2. The changes
|| line || now || replacement || note ||
| 87 | {{AC_PROG_LIBTOOL}} | {{LT_INIT}} | aclocal/libtool.m4:99 already
carries {{AU_ALIAS(\[AC_PROG_LIBTOOL], \[LT_INIT])}}, so this is a rename with
no behaviour change. configure.ac:87 is the only call site. |
| 91 | {{AC_PROG_LEX}} | {{AC_PROG_LEX(\[noyywrap])}} | {{noyywrap}} is not a
guess: compiler/cpp/src/thrift/thriftl.ll:105 already declares {{%option
noyywrap}}. |
| 603 | {{AC_HEADER_STDC}} | delete | |
| 604 | {{AC_HEADER_TIME}} | delete | |
| 606 | {{AC_TYPE_SIGNAL}} | delete | |
h2. Three things to check before deleting anything
# *The three deletions are safe because nothing consumes their output.*
{{STDC_HEADERS}}, {{TIME_WITH_SYS_TIME}} and {{RETSIGTYPE}} appear only inside
checked-in generated config.h files (lib/cpp/src/thrift/config.h,
lib/c_glib/src/thrift/config.h, lib/php/src/ext/thrift_protocol/config.h). No
hand-written source guards on any of them.
# *Do not confuse AC_HEADER_TIME with HAVE_SYS_TIME_H.* That one _is_ used in
real code -- lib/cpp/src/thrift/server/TServer.cpp:22 and
lib/cpp/src/thrift/transport/TFDTransport.h:24 both {{#ifdef}} on it. It comes
from {{AC_CHECK_HEADERS(\[sys/time.h])}} at configure.ac:642, which stays.
Deleting AC_HEADER_TIME does not touch it.
# *No AC_PREREQ bump is needed.* The argument form of AC_PROG_LEX was
introduced in autoconf 2.70, and configure.ac declares {{AC_PREREQ(2.65)}}
while build/docker/ubuntu-focal still ships autoconf 2.69. Checked: 2.69
accepts the argument form, ignores the argument and generates configure
normally (exit 0). So the fix is effective on 2.70+ and harmless on 2.69, and
AC_PREREQ can stay where it is.
h2. Out of scope
A separate family of automake "user target ... overrides Automake target"
warnings exists in 85 Makefile.am files. Correction to an earlier version of
this description, which said they come from the same bootstrap run: they do
not. Plain automake, which is what ./bootstrap.sh runs, reports none of them;
they appear only under {{automake -Wall}} / {{autoreconf -Wall}}, so unlike the
five above they never reach CI. Filed separately as THRIFT-6188.
h2. Verification
autoconf should report zero warnings for configure.ac after the change, and
{{./bootstrap.sh && ./configure && make}} should still succeed. Worth
confirming on ubuntu-focal (autoconf 2.69) as well as noble, since those are
the two ends of the supported range.
----
Investigated and written with AI assistance (Claude Opus 5). The warning list,
the three safety checks and the autoconf 2.69 behaviour were all reproduced by
hand in clean containers.
was:
Every run of ./bootstrap.sh emits five autoconf obsolescence warnings. On a
clean tree at 569e4df2a, with autoconf 2.71 / automake 1.16.5 / libtool 2.4.7
as shipped by ubuntu-24.04:
{code}
configure.ac:87: warning: The macro `AC_PROG_LIBTOOL' is obsolete.
configure.ac:91: warning: AC_PROG_LEX without either yywrap or noyywrap is
obsolete
configure.ac:603: warning: The macro `AC_HEADER_STDC' is obsolete.
configure.ac:604: warning: The macro `AC_HEADER_TIME' is obsolete.
configure.ac:606: warning: The macro `AC_TYPE_SIGNAL' is obsolete.
{code}
h2. Why this is worth a ticket rather than ignoring
They are not just log noise. The lib-java-kotlin job runs
{{actions/setup-java}}, which registers a javac problem matcher, and later runs
{{./bootstrap.sh}}. Autoconf's {{file:line: warning: text}} output happens to
match that matcher, so GitHub turns the warnings into *file annotations* and
paints an alert marker next to configure.ac in the "Files changed" view of any
PR that touches it. Nobody wrote a check for this; it is an accidental
cross-hit between a Java matcher and autoconf's output, and it makes an
untouched, unrelated file look like it has findings. It confused a reviewer on
PR #3800.
h2. The changes
|| line || now || replacement || note ||
| 87 | {{AC_PROG_LIBTOOL}} | {{LT_INIT}} | aclocal/libtool.m4:99 already
carries {{AU_ALIAS(\[AC_PROG_LIBTOOL], \[LT_INIT])}}, so this is a rename with
no behaviour change. configure.ac:87 is the only call site. |
| 91 | {{AC_PROG_LEX}} | {{AC_PROG_LEX(\[noyywrap])}} | {{noyywrap}} is not a
guess: compiler/cpp/src/thrift/thriftl.ll:105 already declares {{%option
noyywrap}}. |
| 603 | {{AC_HEADER_STDC}} | delete | |
| 604 | {{AC_HEADER_TIME}} | delete | |
| 606 | {{AC_TYPE_SIGNAL}} | delete | |
h2. Three things to check before deleting anything
# *The three deletions are safe because nothing consumes their output.*
{{STDC_HEADERS}}, {{TIME_WITH_SYS_TIME}} and {{RETSIGTYPE}} appear only inside
checked-in generated config.h files (lib/cpp/src/thrift/config.h,
lib/c_glib/src/thrift/config.h, lib/php/src/ext/thrift_protocol/config.h). No
hand-written source guards on any of them.
# *Do not confuse AC_HEADER_TIME with HAVE_SYS_TIME_H.* That one _is_ used in
real code -- lib/cpp/src/thrift/server/TServer.cpp:22 and
lib/cpp/src/thrift/transport/TFDTransport.h:24 both {{#ifdef}} on it. It comes
from {{AC_CHECK_HEADERS(\[sys/time.h])}} at configure.ac:642, which stays.
Deleting AC_HEADER_TIME does not touch it.
# *No AC_PREREQ bump is needed.* The argument form of AC_PROG_LEX was
introduced in autoconf 2.70, and configure.ac declares {{AC_PREREQ(2.65)}}
while build/docker/ubuntu-focal still ships autoconf 2.69. Checked: 2.69
accepts the argument form, ignores the argument and generates configure
normally (exit 0). So the fix is effective on 2.70+ and harmless on 2.69, and
AC_PREREQ can stay where it is.
h2. Out of scope
The same bootstrap run also produces roughly forty automake warnings of the
form {{test/rb/Makefile.am:36: warning: user target 'distdir' defined here
...}}, across test/ and tutorial/. Different tool, different cause, much larger
blast radius -- that belongs in its own ticket if anyone wants it.
h2. Verification
autoconf should report zero warnings for configure.ac after the change, and
{{./bootstrap.sh && ./configure && make}} should still succeed. Worth
confirming on ubuntu-focal (autoconf 2.69) as well as noble, since those are
the two ends of the supported range.
----
Investigated and written with AI assistance (Claude Opus 5). The warning list,
the three safety checks and the autoconf 2.69 behaviour were all reproduced by
hand in clean containers.
> Replace the five obsolete autoconf macros in configure.ac
> ---------------------------------------------------------
>
> Key: THRIFT-6187
> URL: https://issues.apache.org/jira/browse/THRIFT-6187
> Project: Thrift
> Issue Type: Improvement
> Components: Build Process
> Reporter: Jens Geyer
> Priority: Minor
>
> Every run of ./bootstrap.sh emits five autoconf obsolescence warnings. On a
> clean tree at 569e4df2a, with autoconf 2.71 / automake 1.16.5 / libtool 2.4.7
> as shipped by ubuntu-24.04:
> {code}
> configure.ac:87: warning: The macro `AC_PROG_LIBTOOL' is obsolete.
> configure.ac:91: warning: AC_PROG_LEX without either yywrap or noyywrap is
> obsolete
> configure.ac:603: warning: The macro `AC_HEADER_STDC' is obsolete.
> configure.ac:604: warning: The macro `AC_HEADER_TIME' is obsolete.
> configure.ac:606: warning: The macro `AC_TYPE_SIGNAL' is obsolete.
> {code}
> h2. Why this is worth a ticket rather than ignoring
> They are not just log noise. The lib-java-kotlin job runs
> {{actions/setup-java}}, which registers a javac problem matcher, and later
> runs {{./bootstrap.sh}}. Autoconf's {{file:line: warning: text}} output
> happens to match that matcher, so GitHub turns the warnings into *file
> annotations* and paints an alert marker next to configure.ac in the "Files
> changed" view of any PR that touches it. Nobody wrote a check for this; it is
> an accidental cross-hit between a Java matcher and autoconf's output, and it
> makes an untouched, unrelated file look like it has findings. It confused a
> reviewer on PR #3800.
> h2. The changes
> || line || now || replacement || note ||
> | 87 | {{AC_PROG_LIBTOOL}} | {{LT_INIT}} | aclocal/libtool.m4:99 already
> carries {{AU_ALIAS(\[AC_PROG_LIBTOOL], \[LT_INIT])}}, so this is a rename
> with no behaviour change. configure.ac:87 is the only call site. |
> | 91 | {{AC_PROG_LEX}} | {{AC_PROG_LEX(\[noyywrap])}} | {{noyywrap}} is not a
> guess: compiler/cpp/src/thrift/thriftl.ll:105 already declares {{%option
> noyywrap}}. |
> | 603 | {{AC_HEADER_STDC}} | delete | |
> | 604 | {{AC_HEADER_TIME}} | delete | |
> | 606 | {{AC_TYPE_SIGNAL}} | delete | |
> h2. Three things to check before deleting anything
> # *The three deletions are safe because nothing consumes their output.*
> {{STDC_HEADERS}}, {{TIME_WITH_SYS_TIME}} and {{RETSIGTYPE}} appear only
> inside checked-in generated config.h files (lib/cpp/src/thrift/config.h,
> lib/c_glib/src/thrift/config.h, lib/php/src/ext/thrift_protocol/config.h). No
> hand-written source guards on any of them.
> # *Do not confuse AC_HEADER_TIME with HAVE_SYS_TIME_H.* That one _is_ used in
> real code -- lib/cpp/src/thrift/server/TServer.cpp:22 and
> lib/cpp/src/thrift/transport/TFDTransport.h:24 both {{#ifdef}} on it. It
> comes from {{AC_CHECK_HEADERS(\[sys/time.h])}} at configure.ac:642, which
> stays. Deleting AC_HEADER_TIME does not touch it.
> # *No AC_PREREQ bump is needed.* The argument form of AC_PROG_LEX was
> introduced in autoconf 2.70, and configure.ac declares {{AC_PREREQ(2.65)}}
> while build/docker/ubuntu-focal still ships autoconf 2.69. Checked: 2.69
> accepts the argument form, ignores the argument and generates configure
> normally (exit 0). So the fix is effective on 2.70+ and harmless on 2.69, and
> AC_PREREQ can stay where it is.
> h2. Out of scope
> A separate family of automake "user target ... overrides Automake target"
> warnings exists in 85 Makefile.am files. Correction to an earlier version of
> this description, which said they come from the same bootstrap run: they do
> not. Plain automake, which is what ./bootstrap.sh runs, reports none of them;
> they appear only under {{automake -Wall}} / {{autoreconf -Wall}}, so unlike
> the five above they never reach CI. Filed separately as THRIFT-6188.
> h2. Verification
> autoconf should report zero warnings for configure.ac after the change, and
> {{./bootstrap.sh && ./configure && make}} should still succeed. Worth
> confirming on ubuntu-focal (autoconf 2.69) as well as noble, since those are
> the two ends of the supported range.
> ----
> Investigated and written with AI assistance (Claude Opus 5). The warning
> list, the three safety checks and the autoconf 2.69 behaviour were all
> reproduced by hand in clean containers.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)