mirror of
				https://github.com/samba-team/samba.git
				synced 2025-10-30 08:23:49 +03:00 
			
		
		
		
	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.
		
			
				
	
	
		
			125 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			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"; 
 | |
| 	}
 | |
| }
 |