mirror of
				https://github.com/samba-team/samba.git
				synced 2025-10-30 08:23:49 +03:00 
			
		
		
		
	(used in configure.in, but their output is never used) autoconf macros: - AC_DEFINE - AC_CHECK_FUNC - AC_CHECK_FUNCS - AC_CHECK_HEADER - AC_CHECK_HEADERS
		
			
				
	
	
		
			121 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			2.6 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;	
 | |
| 	foreach(<FI>) { 
 | |
| 		$ln++;
 | |
| 		foreach(/\#([ \t]*)include ["<]([^">]+)/g) { 
 | |
| 			$headers->{$2} = "$in:$ln";
 | |
| 		}
 | |
| 
 | |
| 		foreach(/([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) {
 | |
| 	if (not defined($symbols{$_})) {
 | |
| 		print "$ac_func_checks{$_}: Autoconf-checked function $_ is unused\n";
 | |
| 	} elsif (not defined($symbols{"HAVE_".uc($_)})) {
 | |
| 		print "$ac_func_checks{$_}: Autoconf-define 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 for header $_ is unused\n"; 
 | |
| 	}
 | |
| }
 |