From: Paul Eggert Date: Sat, 15 Jun 2024 15:24:05 +0000 (-0700) Subject: Process C23 #elifdef and #elifndef X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7feeafdf2f3e5bfe670b40994092d2e8ec5a536c;p=thirdparty%2Fautoconf.git Process C23 #elifdef and #elifndef Inspired by Collin Funk’s suggestion in: https://lists.gnu.org/r/autoconf-patches/2024-06/msg00000.html * bin/autom4te.in (handle_output): * bin/autoscan.in, bin/ifnames.in (scan_c_file): Also recognize #elifdef and #elifndef. * tests/tools.at (ifnames): Test it for ifnames. --- diff --git a/NEWS b/NEWS index 521bbd3a3..bca113911 100644 --- a/NEWS +++ b/NEWS @@ -22,6 +22,12 @@ GNU Autoconf NEWS - User visible changes. This reverts to Autoconf 2.69 behavior, and also fixes a bug where AC_PROG_CXX rejected C++20 compilers. +** New features + +*** Programs now recognize #elifdef and #elifndef. + The autom4te, autoscan and ifnames programs now recognize the two + preprocessor directives, which were introduced in C23 and C++23. + * Noteworthy changes in release 2.72 (2023-12-22) [release] ** Backward incompatibilities diff --git a/bin/autom4te.in b/bin/autom4te.in index e9fa18863..48377cb91 100644 --- a/bin/autom4te.in +++ b/bin/autom4te.in @@ -636,7 +636,7 @@ sub handle_output ($$) # Don't complain in comments. Well, until we have something # better, don't consider '#include' etc. are comments. s/\#.*// - unless /^\#\s*(if|include|endif|ifdef|ifndef|define)\b/; + unless /^\#\s*(include|endif|(el)?if(n?def)?|define)\b/; foreach (split (/\W+/)) { $prohibited{$_} = $. @@ -673,7 +673,7 @@ sub handle_output ($$) # Don't complain in comments. Well, until we have something # better, don't consider '#include' etc. to be comments. s/\#.*// - unless /^\#(if|include|endif|ifdef|ifndef|define)\b/; + unless /^\#(include|endif|(el)?if(n?def)?|define)\b/; # Complain once per word, but possibly several times per line. while (/$prohibited/) diff --git a/bin/autoscan.in b/bin/autoscan.in index 5072f80c6..542865a99 100644 --- a/bin/autoscan.in +++ b/bin/autoscan.in @@ -276,7 +276,7 @@ sub scan_c_file ($) { used ('header', $1); } - if (s/^(if|ifdef|ifndef|elif)\s+//) + if (s/^(el)?if(n?def)?\s+//) { foreach my $word (split (/\W+/)) { diff --git a/bin/ifnames.in b/bin/ifnames.in index c0c5f6115..59a3d1316 100644 --- a/bin/ifnames.in +++ b/bin/ifnames.in @@ -55,9 +55,10 @@ $help = "Usage: $0 [OPTION]... [FILE]... Scan all of the C source FILES (or the standard input, if none are given) and write to the standard output a sorted list of all the -identifiers that appear in those files in '#if', '#elif', '#ifdef', or -'#ifndef' directives. Print each identifier on a line, followed by a -space-separated list of the files in which that identifier occurs. +identifiers that appear in those files in '#if', '#ifdef', '#ifndef', +'#elif', '#elifdef', or '#elifndef' directives. Print each identifier +on a line, followed by a space-separated list of the files in which +that identifier occurs. -h, --help print this help, then exit -V, --version print version number, then exit @@ -109,7 +110,7 @@ sub scan_file ($) while (s/\\$//); # Preprocessor directives. - if (s/^\s*\#\s*(if|ifdef|ifndef|elif)\s+//) + if (s/^\s*\#\s*(el)?if(n?def)?\s+//) { # Remove comments. Not perfect, but close enough. s(/\*.*?\*/)(); diff --git a/doc/autoconf.texi b/doc/autoconf.texi index 9c05eceea..832858cf4 100644 --- a/doc/autoconf.texi +++ b/doc/autoconf.texi @@ -1478,8 +1478,9 @@ Invocation}). @command{ifnames} scans all of the C source files named on the command line (or the standard input, if none are given) and writes to the standard output a sorted list of all the identifiers that appear in those files -in @code{#if}, @code{#elif}, @code{#ifdef}, or @code{#ifndef} -directives. It prints each identifier on a line, followed by a +in @code{#if}, @code{#ifdef}, @code{#ifndef}, @code{#elif}, +@code{#elifdef}, or @code{#elifndef} directives. +It prints each identifier on a line, followed by a space-separated list of the files in which that identifier occurs. @noindent diff --git a/tests/tools.at b/tests/tools.at index 37fe14660..867ecd68b 100644 --- a/tests/tools.at +++ b/tests/tools.at @@ -732,6 +732,8 @@ LINE2 AT_DATA([iftest2.c], [[#ifdef IFTEST2 +#elifdef IFTEST3 +#elifndef IFTEST4 #if VAL1 ]]) @@ -741,6 +743,8 @@ DEF2 iftest1.c DEF3 iftest1.c DEF4 iftest1.c IFTEST2 iftest2.c +IFTEST3 iftest2.c +IFTEST4 iftest2.c LINE1 iftest1.c LINE2 iftest1.c SPACES iftest1.c