1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-24 21:34:56 +03:00
samba-mirror/source4/script/configure_check_unused.pl
Jelmer Vernooij d5888fbb60 r7866: Remove some unused autoconf macro calls.
Some of these should probably be re-added again later when
we need them. They should then be added to the appropriate config.m4 file
in the source tree rather then in rewrite.m4.
(This used to be commit 4eca613470)
2007-10-10 13:18:45 -05:00

125 lines
2.7 KiB
Perl
Executable File

#!/usr/bin/perl
# Script that finds macros in a configure script that are not
# used in a set of C files.
# Copyright Jelmer Vernooij <jelmer@samba.org>, GPL
#
# Usage: ./$ARGV[0] configure.in [c-files...]
use strict;
sub autoconf_parse($$$$)
{
my $in = shift;
my $defines = shift;
my $functions = shift;
my $headers = shift;
open(IN, $in) or die("Can't open $in");
my $ln = 0;
foreach(<IN>) {
$ln++;
if(/AC_DEFINE\(([^,]+),/) {
$defines->{$1} = "$in:$ln";
}
if(/AC_CHECK_FUNCS\(\[*(.[^],)]+)/) {
foreach(split / /, $1) {
$functions->{$_} = "$in:$ln";
}
}
if(/AC_CHECK_FUNC\(([^,)]+)/) {
$functions->{$1} = "$in:$ln";
}
if(/AC_CHECK_HEADERS\(\[*([^],)]+)/) {
foreach(split / /, $1) {
$headers->{$_} = "$in:$ln";
}
}
if(/AC_CHECK_HEADER\(([^,)]+)/) {
$headers->{$1} = "$in:$ln";
}
if(/sinclude\(([^,]+)\)/) {
autoconf_parse($1, $defines, $functions, $headers);
}
}
close IN;
}
# Return the symbols and headers used by a C file
sub cfile_parse($$$)
{
my $in = shift;
my $symbols = shift;
my $headers = shift;
open(FI, $in) or die("Can't open $in");
my $ln = 0;
my $line;
while($line = <FI>) {
$ln++;
$_ = $line;
if (/\#([ \t]*)include ["<]([^">]+)/) {
$headers->{$2} = "$in:$ln";
}
$_ = $line;
while(/([A-Za-z0-9_]+)/g) {
$symbols->{$1} = "$in:$ln";
}
}
close FI;
}
my %ac_defines = ();
my %ac_func_checks = ();
my %ac_headers = ();
my %symbols = ();
my %headers = ();
if (scalar(@ARGV) <= 1) {
print("Usage: configure_find_unused.pl configure.in [CFILE...]\n");
exit 0;
}
autoconf_parse(shift(@ARGV), \%ac_defines, \%ac_func_checks, \%ac_headers);
cfile_parse($_, \%symbols, \%headers) foreach(@ARGV);
(keys %ac_defines) or warn("No defines found in configure.in file, parse error?");
foreach (keys %ac_defines) {
if (not defined($symbols{$_})) {
print "$ac_defines{$_}: Autoconf-defined $_ is unused\n";
}
}
(keys %ac_func_checks) or warn("No function checks found in configure.in file, parse error?");
foreach (keys %ac_func_checks) {
my $def = "HAVE_".uc($_);
if (not defined($symbols{$_})) {
print "$ac_func_checks{$_}: Autoconf-checked function `$_' is unused\n";
} elsif (not defined($symbols{$def})) {
print "$ac_func_checks{$_}: Autoconf-define `$def' for function `$_' is unused\n";
}
}
(keys %ac_headers) or warn("No headers found in configure.in file, parse error?");
foreach (keys %ac_headers) {
my $def = "HAVE_".uc($_);
$def =~ s/[\/\.]/_/g;
if (not defined($headers{$_})) {
print "$ac_headers{$_}: Autoconf-checked header `$_' is unused\n";
} elsif (not defined($symbols{$def})) {
print "$ac_headers{$_}: Autoconf-define `$def' for header `$_' is unused\n";
}
}