Skip to content

Commit

Permalink
Process C23 #elifdef and #elifndef
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
eggert committed Jun 15, 2024
1 parent e51e789 commit 7feeafd
Show file tree
Hide file tree
Showing 6 changed files with 21 additions and 9 deletions.
6 changes: 6 additions & 0 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions bin/autom4te.in
Original file line number Diff line number Diff line change
Expand Up @@ -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{$_} = $.
Expand Down Expand Up @@ -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/)
Expand Down
2 changes: 1 addition & 1 deletion bin/autoscan.in
Original file line number Diff line number Diff line change
Expand Up @@ -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+/))
{
Expand Down
9 changes: 5 additions & 4 deletions bin/ifnames.in
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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(/\*.*?\*/)();
Expand Down
5 changes: 3 additions & 2 deletions doc/autoconf.texi
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 4 additions & 0 deletions tests/tools.at
Original file line number Diff line number Diff line change
Expand Up @@ -732,6 +732,8 @@ LINE2

AT_DATA([iftest2.c],
[[#ifdef IFTEST2
#elifdef IFTEST3
#elifndef IFTEST4
#if VAL1
]])

Expand All @@ -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
Expand Down

0 comments on commit 7feeafd

Please sign in to comment.