Blame bin/ifnames.in

Packit 47b4ca
#! @PERL@ -w
Packit 47b4ca
# -*- perl -*-
Packit 47b4ca
# @configure_input@
Packit 47b4ca
Packit 47b4ca
eval 'case $# in 0) exec @PERL@ -S "$0";; *) exec @PERL@ -S "$0" "$@";; esac'
Packit 47b4ca
    if 0;
Packit 47b4ca
Packit 47b4ca
# ifnames - print the identifiers used in C preprocessor conditionals
Packit 47b4ca
Packit 47b4ca
# Copyright (C) 1994-1995, 1999-2003, 2005-2012 Free Software
Packit 47b4ca
# Foundation, Inc.
Packit 47b4ca
Packit 47b4ca
# This program is free software: you can redistribute it and/or modify
Packit 47b4ca
# it under the terms of the GNU General Public License as published by
Packit 47b4ca
# the Free Software Foundation, either version 3 of the License, or
Packit 47b4ca
# (at your option) any later version.
Packit 47b4ca
Packit 47b4ca
# This program is distributed in the hope that it will be useful,
Packit 47b4ca
# but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 47b4ca
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 47b4ca
# GNU General Public License for more details.
Packit 47b4ca
Packit 47b4ca
# You should have received a copy of the GNU General Public License
Packit 47b4ca
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit 47b4ca
Packit 47b4ca
# Reads from stdin if no files are given.
Packit 47b4ca
# Writes to stdout.
Packit 47b4ca
Packit 47b4ca
# Written by David MacKenzie <djm@gnu.ai.mit.edu>
Packit 47b4ca
# and Paul Eggert <eggert@twinsun.com>.
Packit 47b4ca
Packit 47b4ca
BEGIN
Packit 47b4ca
{
Packit 47b4ca
  my $pkgdatadir = $ENV{'autom4te_perllibdir'} || '@pkgdatadir@';
Packit 47b4ca
  unshift @INC, $pkgdatadir;
Packit 47b4ca
Packit 47b4ca
  # Override SHELL.  On DJGPP SHELL may not be set to a shell
Packit 47b4ca
  # that can handle redirection and quote arguments correctly,
Packit 47b4ca
  # e.g.: COMMAND.COM.  For DJGPP always use the shell that configure
Packit 47b4ca
  # has detected.
Packit 47b4ca
  $ENV{'SHELL'} = '@SHELL@' if ($^O eq 'dos');
Packit 47b4ca
}
Packit 47b4ca
Packit 47b4ca
use Autom4te::General;
Packit 47b4ca
use Autom4te::XFile;
Packit 47b4ca
use Autom4te::FileUtils;
Packit 47b4ca
Packit 47b4ca
# $HELP
Packit 47b4ca
# -----
Packit 47b4ca
$help = "Usage: $0 [OPTION]... [FILE]...
Packit 47b4ca
Packit 47b4ca
Scan all of the C source FILES (or the standard input, if none are
Packit 47b4ca
given) and write to the standard output a sorted list of all the
Packit 47b4ca
identifiers that appear in those files in `#if', `#elif', `#ifdef', or
Packit 47b4ca
`#ifndef' directives.  Print each identifier on a line, followed by a
Packit 47b4ca
space-separated list of the files in which that identifier occurs.
Packit 47b4ca
Packit 47b4ca
  -h, --help      print this help, then exit
Packit 47b4ca
  -V, --version   print version number, then exit
Packit 47b4ca
Packit 47b4ca
Report bugs to <bug-autoconf\@gnu.org>.
Packit 47b4ca
GNU Autoconf home page: <http://www.gnu.org/software/autoconf/>.
Packit 47b4ca
General help using GNU software: <http://www.gnu.org/gethelp/>.
Packit 47b4ca
";
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# $VERSION
Packit 47b4ca
# --------
Packit 47b4ca
$version = "ifnames (@PACKAGE_NAME@) @VERSION@
Packit 47b4ca
Copyright (C) @RELEASE_YEAR@ Free Software Foundation, Inc.
Packit 47b4ca
License GPLv3+/Autoconf: GNU GPL version 3 or later
Packit 47b4ca
<http://gnu.org/licenses/gpl.html>, <http://gnu.org/licenses/exceptions.html>
Packit 47b4ca
This is free software: you are free to change and redistribute it.
Packit 47b4ca
There is NO WARRANTY, to the extent permitted by law.
Packit 47b4ca
Packit 47b4ca
Written by David J. MacKenzie and Paul Eggert.
Packit 47b4ca
";
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# &parse_args ()
Packit 47b4ca
# --------------
Packit 47b4ca
# Process any command line arguments.
Packit 47b4ca
sub parse_args ()
Packit 47b4ca
{
Packit 47b4ca
  getopt ();
Packit 47b4ca
}
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# %OCCURRENCE
Packit 47b4ca
# -----------
Packit 47b4ca
my %occurrence;
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
# &scan_file ($FILE-NAME)
Packit 47b4ca
# -----------------------
Packit 47b4ca
sub scan_file ($)
Packit 47b4ca
{
Packit 47b4ca
  my ($file_name) = @_;
Packit 47b4ca
  my $file = new Autom4te::XFile ("< " . open_quote ($file_name));
Packit 47b4ca
  while ($_ = $file->getline)
Packit 47b4ca
    {
Packit 47b4ca
      # Continuation lines.
Packit 47b4ca
      $_ .= $file->getline
Packit 47b4ca
	while (s/\\$//);
Packit 47b4ca
Packit 47b4ca
      # Preprocessor directives.
Packit 47b4ca
      if (s/^\s*\#\s*(if|ifdef|ifndef|elif)\s+//)
Packit 47b4ca
	{
Packit 47b4ca
	  # Remove comments.  Not perfect, but close enough.
Packit 47b4ca
	  s(/\*.*?\*/)();
Packit 47b4ca
	  s(/\*.*)();
Packit 47b4ca
	  s(//.*)();
Packit 47b4ca
	  foreach my $word (split (/\W+/))
Packit 47b4ca
	    {
Packit 47b4ca
	      next
Packit 47b4ca
		if $word eq 'defined' || $word !~ /^[a-zA-Z_]/;
Packit 47b4ca
	      $occurrence{$word}{$file_name} = 1;
Packit 47b4ca
	    }
Packit 47b4ca
	}
Packit 47b4ca
    }
Packit 47b4ca
}
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
## ------ ##
Packit 47b4ca
## Main.  ##
Packit 47b4ca
## ------ ##
Packit 47b4ca
Packit 47b4ca
parse_args();
Packit 47b4ca
foreach (@ARGV)
Packit 47b4ca
  {
Packit 47b4ca
    scan_file ($_);
Packit 47b4ca
  }
Packit 47b4ca
foreach (sort keys %occurrence)
Packit 47b4ca
  {
Packit 47b4ca
    print "$_ ", join (' ', sort keys %{$occurrence{$_}}), "\n";
Packit 47b4ca
  }
Packit 47b4ca
Packit 47b4ca
### Setup "GNU" style for perl-mode and cperl-mode.
Packit 47b4ca
## Local Variables:
Packit 47b4ca
## perl-indent-level: 2
Packit 47b4ca
## perl-continued-statement-offset: 2
Packit 47b4ca
## perl-continued-brace-offset: 0
Packit 47b4ca
## perl-brace-offset: 0
Packit 47b4ca
## perl-brace-imaginary-offset: 0
Packit 47b4ca
## perl-label-offset: -2
Packit 47b4ca
## cperl-indent-level: 2
Packit 47b4ca
## cperl-brace-offset: 0
Packit 47b4ca
## cperl-continued-brace-offset: 0
Packit 47b4ca
## cperl-label-offset: -2
Packit 47b4ca
## cperl-extra-newline-before-brace: t
Packit 47b4ca
## cperl-merge-trailing-else: nil
Packit 47b4ca
## cperl-continued-statement-offset: 2
Packit 47b4ca
## End: