From: Akim Demaille Date: Tue, 11 Apr 2000 12:06:12 +0000 (+0000) Subject: * autoscan.pl: Reindent using 2 spaces, not 4. X-Git-Tag: autoconf-2.50~965 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=63d0122eb02cbda6666cbd5a73fd9a50338617cf;p=thirdparty%2Fautoconf.git * autoscan.pl: Reindent using 2 spaces, not 4. Use `#' to denote Autoconf comments, not `dnl'. Put a few `' here and there to avoid misfontification and misindentation. Use your base name when reporting errors. (parse_args::usage): Use $0, use the same order as the other executables. (parse_args): Don't dump `--help' on cmd line errors. --- diff --git a/ChangeLog b/ChangeLog index 089549d1a..5a3f1cd18 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2000-04-11 Akim Demaille + + * autoscan.pl: Reindent using 2 spaces, not 4. + Use `#' to denote Autoconf comments, not `dnl'. + Put a few `\' here and there to avoid misfontification and + misindentation. + Use your base name when reporting errors. + (parse_args::usage): Use $0, use the same order as the other + executables. + (parse_args): Don't dump `--help' on cmd line errors. + 2000-04-11 Akim Demaille * acgeneral.m4 (AC_PROVIDE_IF): Rename as... diff --git a/autoscan.in b/autoscan.in index f40e0c9cb..6ac9d6470 100644 --- a/autoscan.in +++ b/autoscan.in @@ -22,7 +22,9 @@ require "find.pl"; $datadir = $ENV{"AC_MACRODIR"} || "@datadir@"; +($me = $0) =~ s,.*/,,; $verbose = 0; + # Reference these variables to pacify perl -w. undef %identifiers_macros; undef %makevars_macros; @@ -39,23 +41,25 @@ exit 0; # Process any command line arguments. sub parse_args { - local ($usage) = <<'EOD'; -Usage: autoscan [OPTION] ... [SRCDIR] + # There are a couple of useless `\' below. They are used to have + # Emacs fontify properly. + local ($usage) = <. +Report bugs to . EOD - local ($version) = <<'EOD'; + local ($version) = <<'EOD'; autoscan (GNU @PACKAGE@) @VERSION@ Written by David J. MacKenzie. @@ -64,353 +68,355 @@ This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. EOD - local $need_datadir = 0; - - foreach $_ (@ARGV) { - if (/^--m[a-z]*=(.*)/) { - $datadir = $1; - } elsif (/^-m$/) { - $need_datadir = 1; - } elsif (/^--h/ || /^-h$/) { - print "$usage"; - exit 0; - } elsif (/^--verb/ || /^-v$/) { - $verbose = 1; - } elsif (/^--vers/ || /^-V$/) { - print "$version"; - exit 0; - } elsif (/^[^-]/) { - if ($need_datadir) { - $datadir = $_; - $need_datadir = 0; - } else { - die "$usage" if defined($srcdir); - # Top level directory of the package being autoscanned. - $srcdir = $_; - } - } else { - die "$usage"; - } + local ($help) = "Try \`$me --help' for more information."; + + local $need_datadir = 0; + + foreach $_ (@ARGV) { + if (/^--m[a-z]*=(.*)/) { + $datadir = $1; + } elsif (/^-m$/) { + $need_datadir = 1; + } elsif (/^--h/ || /^-h$/) { + print "$usage"; + exit 0; + } elsif (/^--verb/ || /^-v$/) { + $verbose = 1; + } elsif (/^--vers/ || /^-V$/) { + print "$version"; + exit 0; + } elsif (/^[^-]/) { + if ($need_datadir) { + $datadir = $_; + $need_datadir = 0; + } else { + die "$me: too many arguments\n$help" if defined($srcdir); + # Top level directory of the package being autoscanned. + $srcdir = $_; + } + } else { + die "$me: invalid option $_\n$help"; } + } - die $usage if $need_datadir; + die "$me: missing argument to -m\n$help" if $need_datadir; - $srcdir="." if !defined($srcdir); + $srcdir="." if !defined($srcdir); - print "srcdir=$srcdir\n" if $verbose; - chdir $srcdir || die "$0: cannot cd to $srcdir: $!\n"; + print "srcdir=$srcdir\n" if $verbose; + chdir $srcdir || die "$me: cannot cd to $srcdir: $!\n"; - open(CONF, ">configure.scan") || - die "$0: cannot create configure.scan: $!\n"; + open(CONF, ">configure.scan") || + die "$me: cannot create configure.scan: $!\n"; } # Put values in the tables of what to do with each token. sub init_tables { - local($kind, $word, $macro); - - # Initialize a table of C keywords (to ignore). - # Taken from K&R 1st edition p. 180. - # ANSI C, GNU C, and C++ keywords can introduce portability problems, - # so don't ignore them. - foreach $word ('int', 'char', 'float', 'double', 'struct', 'union', - 'long', 'short', 'unsigned', 'auto', 'extern', 'register', - 'typedef', 'static', 'goto', 'return', 'sizeof', 'break', - 'continue', 'if', 'else', 'for', 'do', 'while', 'switch', - 'case', 'default') { - $c_keywords{$word} = 0; - } - - # The data file format supports only one line of macros per function. - # If more than that is required for a common portability problem, - # a new Autoconf macro should probably be written for that case, - # instead of duplicating the code in lots of configure.in files. - - foreach $kind ('functions', 'headers', 'identifiers', 'programs', - 'makevars') { - open(TABLE, "<$datadir/ac$kind") || - die "$0: cannot open $datadir/ac$kind: $!\n"; - while () { - next if /^\s*$/ || /^\s*#/; # Ignore blank lines and comments. - ($word, $macro) = split; - eval "\$$kind" . "_macros{\$word} = \$macro"; - } - close(TABLE); + local($kind, $word, $macro); + + # Initialize a table of C keywords (to ignore). + # Taken from K&R 1st edition p. 180. + # ANSI C, GNU C, and C++ keywords can introduce portability problems, + # so don't ignore them. + foreach $word ('int', 'char', 'float', 'double', 'struct', 'union', + 'long', 'short', 'unsigned', 'auto', 'extern', 'register', + 'typedef', 'static', 'goto', 'return', 'sizeof', 'break', + 'continue', 'if', 'else', 'for', 'do', 'while', 'switch', + 'case', 'default') { + $c_keywords{$word} = 0; + } + + # The data file format supports only one line of macros per function. + # If more than that is required for a common portability problem, + # a new Autoconf macro should probably be written for that case, + # instead of duplicating the code in lots of configure.in files. + + foreach $kind ('functions', 'headers', 'identifiers', 'programs', + 'makevars') { + open(TABLE, "<$datadir/ac$kind") || + die "$me: cannot open $datadir/ac$kind: $!\n"; + while (
) { + next if /^\s*$/ || /^\s*#/; # Ignore blank lines and comments. + ($word, $macro) = split; + eval "\$$kind" . "_macros{\$word} = \$macro"; } + close(TABLE); + } } # Collect names of various kinds of files in the package. # Called by &find on each file. sub wanted { - if (/^.*\.[chlymC]$/ || /^.*\.cc$/) { - $name =~ s?^\./??; push(@cfiles, $name); - } - elsif (/^[Mm]akefile$/ || /^[Mm]akefile\.in$/ || /^GNUmakefile$/) { - $name =~ s?^\./??; push(@makefiles, $name); - } - elsif (/^.*\.sh$/) { - $name =~ s?^\./??; push(@shfiles, $name); - } + if (/^.*\.[chlymC]$/ || /^.*\.cc$/) { + $name =~ s?^\./??; push(@cfiles, $name); + } + elsif (/^[Mm]akefile$/ || /^[Mm]akefile\.in$/ || /^GNUmakefile$/) { + $name =~ s?^\./??; push(@makefiles, $name); + } + elsif (/^.*\.sh$/) { + $name =~ s?^\./??; push(@shfiles, $name); + } } # Read through the files and collect lists of tokens in them # that might create nonportabilities. sub scan_files { - $initfile = $cfiles[0]; # Pick one at random. + $initfile = $cfiles[0]; # Pick one at random. + + if ($verbose) { + print "cfiles:", join(" ", @cfiles), "\n"; + print "makefiles:", join(" ", @makefiles), "\n"; + print "shfiles:", join(" ", @shfiles), "\n"; + } + + foreach $file (@cfiles) { + $programs{"cc"}++; + &scan_c_file($file); + } + + foreach $file (@makefiles) { + &scan_makefile($file); + } + + foreach $file (@shfiles) { + &scan_sh_file($file); + } +} - if ($verbose) { - print "cfiles:", join(" ", @cfiles), "\n"; - print "makefiles:", join(" ", @makefiles), "\n"; - print "shfiles:", join(" ", @shfiles), "\n"; +sub scan_c_file +{ + local($file) = @_; + local($in_comment) = 0; # Nonzero if in a multiline comment. + + open(CFILE, "<$file") || die "$me: cannot open $file: $!\n"; + while () { + # Strip out comments, approximately. + # Ending on this line. + if ($in_comment && m,\*/,) { + s,.*\*/,,; + $in_comment = 0; } - - foreach $file (@cfiles) { - $programs{"cc"}++; - &scan_c_file($file); + # All on one line. + s,/\*.*\*/,,g; + # Starting on this line. + if (m,/\*,) { + $in_comment = 1; } + # Continuing on this line. + next if $in_comment; - foreach $file (@makefiles) { - &scan_makefile($file); + # Preprocessor directives. + if (/^\s*\#\s*include\s*<([^>]*)>/) { + $headers{$1}++; } + # Ignore other preprocessor directives. + next if /^\s*\#/; - foreach $file (@shfiles) { - &scan_sh_file($file); - } -} + # Remove string and character constants. + s,\"[^\"]*\",,g; + s,\'[^\']*\',,g; -sub scan_c_file -{ - local($file) = @_; - local($in_comment) = 0; # Nonzero if in a multiline comment. - - open(CFILE, "<$file") || die "$0: cannot open $file: $!\n"; - while () { - # Strip out comments, approximately. - # Ending on this line. - if ($in_comment && m,\*/,) { - s,.*\*/,,; - $in_comment = 0; - } - # All on one line. - s,/\*.*\*/,,g; - # Starting on this line. - if (m,/\*,) { - $in_comment = 1; - } - # Continuing on this line. - next if $in_comment; - - # Preprocessor directives. - if (/^\s*#\s*include\s*<([^>]*)>/) { - $headers{$1}++; - } - # Ignore other preprocessor directives. - next if /^\s*#/; - - # Remove string and character constants. - s,\"[^\"]*\",,g; - s,\'[^\']*\',,g; - - # Tokens in the code. - # Maybe we should ignore function definitions (in column 0)? - while (s/\W([a-zA-Z_]\w*)\s*\(/ /) { - $functions{$1}++ if !defined($c_keywords{$1}); - } - while (s/\W([a-zA-Z_]\w*)\W/ /) { - $identifiers{$1}++ if !defined($c_keywords{$1}); - } + # Tokens in the code. + # Maybe we should ignore function definitions (in column 0)? + while (s/\W([a-zA-Z_]\w*)\s*\(/ /) { + $functions{$1}++ if !defined($c_keywords{$1}); + } + while (s/\W([a-zA-Z_]\w*)\W/ /) { + $identifiers{$1}++ if !defined($c_keywords{$1}); } - close(CFILE); + } + close(CFILE); - if ($verbose) { - local($word); + if ($verbose) { + local($word); - print "\n$file functions:\n"; - foreach $word (sort keys %functions) { - print "$word $functions{$word}\n"; - } + print "\n$file functions:\n"; + foreach $word (sort keys %functions) { + print "$word $functions{$word}\n"; + } - print "\n$file identifiers:\n"; - foreach $word (sort keys %identifiers) { - print "$word $identifiers{$word}\n"; - } + print "\n$file identifiers:\n"; + foreach $word (sort keys %identifiers) { + print "$word $identifiers{$word}\n"; + } - print "\n$file headers:\n"; - foreach $word (sort keys %headers) { - print "$word $headers{$word}\n"; - } + print "\n$file headers:\n"; + foreach $word (sort keys %headers) { + print "$word $headers{$word}\n"; } + } } sub scan_makefile { - local($file) = @_; - - open(MFILE, "<$file") || die "$0: cannot open $file: $!\n"; - while () { - # Strip out comments and variable references. - s/#.*//; - s/\$\([^\)]*\)//g; - s/\${[^\}]*}//g; - s/@[^@]*@//g; - - # Variable assignments. - while (s/\W([a-zA-Z_]\w*)\s*=/ /) { - $makevars{$1}++; - } - # Libraries. - while (s/\W-l([a-zA-Z_]\w*)\W/ /) { - $libraries{$1}++; - } - # Tokens in the code. - while (s/\W([a-zA-Z_]\w*)\W/ /) { - $programs{$1}++; - } + local($file) = @_; + + open(MFILE, "<$file") || die "$me: cannot open $file: $!\n"; + while () { + # Strip out comments and variable references. + s/#.*//; + s/\$\([^\)]*\)//g; + s/\${[^\}]*}//g; + s/@[^@]*@//g; + + # Variable assignments. + while (s/\W([a-zA-Z_]\w*)\s*=/ /) { + $makevars{$1}++; + } + # Libraries. + while (s/\W-l([a-zA-Z_]\w*)\W/ /) { + $libraries{$1}++; } - close(MFILE); + # Tokens in the code. + while (s/\W([a-zA-Z_]\w*)\W/ /) { + $programs{$1}++; + } + } + close(MFILE); - if ($verbose) { - local($word); + if ($verbose) { + local($word); - print "\n$file makevars:\n"; - foreach $word (sort keys %makevars) { - print "$word $makevars{$word}\n"; - } + print "\n$file makevars:\n"; + foreach $word (sort keys %makevars) { + print "$word $makevars{$word}\n"; + } - print "\n$file libraries:\n"; - foreach $word (sort keys %libraries) { - print "$word $libraries{$word}\n"; - } + print "\n$file libraries:\n"; + foreach $word (sort keys %libraries) { + print "$word $libraries{$word}\n"; + } - print "\n$file programs:\n"; - foreach $word (sort keys %programs) { - print "$word $programs{$word}\n"; - } + print "\n$file programs:\n"; + foreach $word (sort keys %programs) { + print "$word $programs{$word}\n"; } + } } sub scan_sh_file { - local($file) = @_; - - open(MFILE, "<$file") || die "$0: cannot open $file: $!\n"; - while () { - # Strip out comments and variable references. - s/#.*//; - s/\${[^\}]*}//g; - s/@[^@]*@//g; - - # Tokens in the code. - while (s/\W([a-zA-Z_]\w*)\W/ /) { - $programs{$1}++; - } + local($file) = @_; + + open(MFILE, "<$file") || die "$me: cannot open $file: $!\n"; + while () { + # Strip out comments and variable references. + s/#.*//; + s/\${[^\}]*}//g; + s/@[^@]*@//g; + + # Tokens in the code. + while (s/\W([a-zA-Z_]\w*)\W/ /) { + $programs{$1}++; } - close(MFILE); + } + close(MFILE); - if ($verbose) { - local($word); + if ($verbose) { + local($word); - print "\n$file programs:\n"; - foreach $word (sort keys %programs) { - print "$word $programs{$word}\n"; - } + print "\n$file programs:\n"; + foreach $word (sort keys %programs) { + print "$word $programs{$word}\n"; } + } } # Print a configure.in. sub output { - local (%unique_makefiles); + local (%unique_makefiles); - print CONF "dnl Process this file with autoconf to produce a configure script.\n"; - print CONF "AC_INIT($initfile)\n"; + print CONF "# Process this file with autoconf to produce a configure script.\n"; + print CONF "AC_INIT($initfile)\n"; - &output_programs; - &output_headers; - &output_identifiers; - &output_functions; + &output_programs; + &output_headers; + &output_identifiers; + &output_functions; - # Change DIR/Makefile.in to DIR/Makefile. - foreach $_ (@makefiles) { - s/\.in$//; - $unique_makefiles{$_}++; - } - print CONF "\nAC_OUTPUT(", join(" ", keys(%unique_makefiles)), ")\n"; + # Change DIR/Makefile.in to DIR/Makefile. + foreach $_ (@makefiles) { + s/\.in$//; + $unique_makefiles{$_}++; + } + print CONF "\nAC_OUTPUT(", join(" ", keys(%unique_makefiles)), ")\n"; - close CONF; + close CONF; } # Print Autoconf macro $1 if it's not undef and hasn't been printed already. sub print_unique { - local($macro) = @_; + local($macro) = @_; - if (defined($macro) && !defined($printed{$macro})) { - print CONF "$macro\n"; - $printed{$macro} = 1; - } + if (defined($macro) && !defined($printed{$macro})) { + print CONF "$macro\n"; + $printed{$macro} = 1; + } } sub output_programs { - local ($word); - - print CONF "\ndnl Checks for programs.\n"; - foreach $word (sort keys %programs) { - &print_unique($programs_macros{$word}); - } - foreach $word (sort keys %makevars) { - &print_unique($makevars_macros{$word}); - } - print CONF "\ndnl Checks for libraries.\n"; - foreach $word (sort keys %libraries) { - print CONF "dnl Replace `\main\' with a function in -l$word:\n"; - print CONF "AC_CHECK_LIB($word, main)\n"; - } + local ($word); + + print CONF "\n# Checks for programs.\n"; + foreach $word (sort keys %programs) { + &print_unique($programs_macros{$word}); + } + foreach $word (sort keys %makevars) { + &print_unique($makevars_macros{$word}); + } + print CONF "\n# Checks for libraries.\n"; + foreach $word (sort keys %libraries) { + print CONF "# Replace `\main\' with a function in -l$word:\n"; + print CONF "AC_CHECK_LIB($word, main)\n"; + } } sub output_headers { - local ($word); - - print CONF "\ndnl Checks for header files.\n"; - foreach $word (sort keys %headers) { - if (defined($headers_macros{$word}) && - $headers_macros{$word} eq 'AC_CHECK_HEADERS') { - push(@have_headers, $word); - } else { - &print_unique($headers_macros{$word}); - } + local ($word); + + print CONF "\n# Checks for header files.\n"; + foreach $word (sort keys %headers) { + if (defined($headers_macros{$word}) && + $headers_macros{$word} eq 'AC_CHECK_HEADERS') { + push(@have_headers, $word); + } else { + &print_unique($headers_macros{$word}); } - print CONF "AC_CHECK_HEADERS(" . join(' ', sort(@have_headers)) . ")\n" - if defined(@have_headers); + } + print CONF "AC_CHECK_HEADERS(" . join(' ', sort(@have_headers)) . ")\n" + if defined(@have_headers); } sub output_identifiers { - local ($word); + local ($word); - print CONF "\ndnl Checks for typedefs, structures, and compiler characteristics.\n"; - foreach $word (sort keys %identifiers) { - &print_unique($identifiers_macros{$word}); - } + print CONF "\n# Checks for typedefs, structures, and compiler characteristics.\n"; + foreach $word (sort keys %identifiers) { + &print_unique($identifiers_macros{$word}); + } } sub output_functions { - local ($word); - - print CONF "\ndnl Checks for library functions.\n"; - foreach $word (sort keys %functions) { - if (defined($functions_macros{$word}) && - $functions_macros{$word} eq 'AC_CHECK_FUNCS') { - push(@have_funcs, $word); - } else { - &print_unique($functions_macros{$word}); - } + local ($word); + + print CONF "\n# Checks for library functions.\n"; + foreach $word (sort keys %functions) { + if (defined($functions_macros{$word}) && + $functions_macros{$word} eq 'AC_CHECK_FUNCS') { + push(@have_funcs, $word); + } else { + &print_unique($functions_macros{$word}); } - print CONF "AC_CHECK_FUNCS(" . join(' ', sort(@have_funcs)) . ")\n" - if defined(@have_funcs); + } + print CONF "AC_CHECK_FUNCS(" . join(' ', sort(@have_funcs)) . ")\n" + if defined(@have_funcs); } diff --git a/autoscan.pl b/autoscan.pl index f40e0c9cb..6ac9d6470 100644 --- a/autoscan.pl +++ b/autoscan.pl @@ -22,7 +22,9 @@ require "find.pl"; $datadir = $ENV{"AC_MACRODIR"} || "@datadir@"; +($me = $0) =~ s,.*/,,; $verbose = 0; + # Reference these variables to pacify perl -w. undef %identifiers_macros; undef %makevars_macros; @@ -39,23 +41,25 @@ exit 0; # Process any command line arguments. sub parse_args { - local ($usage) = <<'EOD'; -Usage: autoscan [OPTION] ... [SRCDIR] + # There are a couple of useless `\' below. They are used to have + # Emacs fontify properly. + local ($usage) = <. +Report bugs to . EOD - local ($version) = <<'EOD'; + local ($version) = <<'EOD'; autoscan (GNU @PACKAGE@) @VERSION@ Written by David J. MacKenzie. @@ -64,353 +68,355 @@ This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. EOD - local $need_datadir = 0; - - foreach $_ (@ARGV) { - if (/^--m[a-z]*=(.*)/) { - $datadir = $1; - } elsif (/^-m$/) { - $need_datadir = 1; - } elsif (/^--h/ || /^-h$/) { - print "$usage"; - exit 0; - } elsif (/^--verb/ || /^-v$/) { - $verbose = 1; - } elsif (/^--vers/ || /^-V$/) { - print "$version"; - exit 0; - } elsif (/^[^-]/) { - if ($need_datadir) { - $datadir = $_; - $need_datadir = 0; - } else { - die "$usage" if defined($srcdir); - # Top level directory of the package being autoscanned. - $srcdir = $_; - } - } else { - die "$usage"; - } + local ($help) = "Try \`$me --help' for more information."; + + local $need_datadir = 0; + + foreach $_ (@ARGV) { + if (/^--m[a-z]*=(.*)/) { + $datadir = $1; + } elsif (/^-m$/) { + $need_datadir = 1; + } elsif (/^--h/ || /^-h$/) { + print "$usage"; + exit 0; + } elsif (/^--verb/ || /^-v$/) { + $verbose = 1; + } elsif (/^--vers/ || /^-V$/) { + print "$version"; + exit 0; + } elsif (/^[^-]/) { + if ($need_datadir) { + $datadir = $_; + $need_datadir = 0; + } else { + die "$me: too many arguments\n$help" if defined($srcdir); + # Top level directory of the package being autoscanned. + $srcdir = $_; + } + } else { + die "$me: invalid option $_\n$help"; } + } - die $usage if $need_datadir; + die "$me: missing argument to -m\n$help" if $need_datadir; - $srcdir="." if !defined($srcdir); + $srcdir="." if !defined($srcdir); - print "srcdir=$srcdir\n" if $verbose; - chdir $srcdir || die "$0: cannot cd to $srcdir: $!\n"; + print "srcdir=$srcdir\n" if $verbose; + chdir $srcdir || die "$me: cannot cd to $srcdir: $!\n"; - open(CONF, ">configure.scan") || - die "$0: cannot create configure.scan: $!\n"; + open(CONF, ">configure.scan") || + die "$me: cannot create configure.scan: $!\n"; } # Put values in the tables of what to do with each token. sub init_tables { - local($kind, $word, $macro); - - # Initialize a table of C keywords (to ignore). - # Taken from K&R 1st edition p. 180. - # ANSI C, GNU C, and C++ keywords can introduce portability problems, - # so don't ignore them. - foreach $word ('int', 'char', 'float', 'double', 'struct', 'union', - 'long', 'short', 'unsigned', 'auto', 'extern', 'register', - 'typedef', 'static', 'goto', 'return', 'sizeof', 'break', - 'continue', 'if', 'else', 'for', 'do', 'while', 'switch', - 'case', 'default') { - $c_keywords{$word} = 0; - } - - # The data file format supports only one line of macros per function. - # If more than that is required for a common portability problem, - # a new Autoconf macro should probably be written for that case, - # instead of duplicating the code in lots of configure.in files. - - foreach $kind ('functions', 'headers', 'identifiers', 'programs', - 'makevars') { - open(TABLE, "<$datadir/ac$kind") || - die "$0: cannot open $datadir/ac$kind: $!\n"; - while (
) { - next if /^\s*$/ || /^\s*#/; # Ignore blank lines and comments. - ($word, $macro) = split; - eval "\$$kind" . "_macros{\$word} = \$macro"; - } - close(TABLE); + local($kind, $word, $macro); + + # Initialize a table of C keywords (to ignore). + # Taken from K&R 1st edition p. 180. + # ANSI C, GNU C, and C++ keywords can introduce portability problems, + # so don't ignore them. + foreach $word ('int', 'char', 'float', 'double', 'struct', 'union', + 'long', 'short', 'unsigned', 'auto', 'extern', 'register', + 'typedef', 'static', 'goto', 'return', 'sizeof', 'break', + 'continue', 'if', 'else', 'for', 'do', 'while', 'switch', + 'case', 'default') { + $c_keywords{$word} = 0; + } + + # The data file format supports only one line of macros per function. + # If more than that is required for a common portability problem, + # a new Autoconf macro should probably be written for that case, + # instead of duplicating the code in lots of configure.in files. + + foreach $kind ('functions', 'headers', 'identifiers', 'programs', + 'makevars') { + open(TABLE, "<$datadir/ac$kind") || + die "$me: cannot open $datadir/ac$kind: $!\n"; + while (
) { + next if /^\s*$/ || /^\s*#/; # Ignore blank lines and comments. + ($word, $macro) = split; + eval "\$$kind" . "_macros{\$word} = \$macro"; } + close(TABLE); + } } # Collect names of various kinds of files in the package. # Called by &find on each file. sub wanted { - if (/^.*\.[chlymC]$/ || /^.*\.cc$/) { - $name =~ s?^\./??; push(@cfiles, $name); - } - elsif (/^[Mm]akefile$/ || /^[Mm]akefile\.in$/ || /^GNUmakefile$/) { - $name =~ s?^\./??; push(@makefiles, $name); - } - elsif (/^.*\.sh$/) { - $name =~ s?^\./??; push(@shfiles, $name); - } + if (/^.*\.[chlymC]$/ || /^.*\.cc$/) { + $name =~ s?^\./??; push(@cfiles, $name); + } + elsif (/^[Mm]akefile$/ || /^[Mm]akefile\.in$/ || /^GNUmakefile$/) { + $name =~ s?^\./??; push(@makefiles, $name); + } + elsif (/^.*\.sh$/) { + $name =~ s?^\./??; push(@shfiles, $name); + } } # Read through the files and collect lists of tokens in them # that might create nonportabilities. sub scan_files { - $initfile = $cfiles[0]; # Pick one at random. + $initfile = $cfiles[0]; # Pick one at random. + + if ($verbose) { + print "cfiles:", join(" ", @cfiles), "\n"; + print "makefiles:", join(" ", @makefiles), "\n"; + print "shfiles:", join(" ", @shfiles), "\n"; + } + + foreach $file (@cfiles) { + $programs{"cc"}++; + &scan_c_file($file); + } + + foreach $file (@makefiles) { + &scan_makefile($file); + } + + foreach $file (@shfiles) { + &scan_sh_file($file); + } +} - if ($verbose) { - print "cfiles:", join(" ", @cfiles), "\n"; - print "makefiles:", join(" ", @makefiles), "\n"; - print "shfiles:", join(" ", @shfiles), "\n"; +sub scan_c_file +{ + local($file) = @_; + local($in_comment) = 0; # Nonzero if in a multiline comment. + + open(CFILE, "<$file") || die "$me: cannot open $file: $!\n"; + while () { + # Strip out comments, approximately. + # Ending on this line. + if ($in_comment && m,\*/,) { + s,.*\*/,,; + $in_comment = 0; } - - foreach $file (@cfiles) { - $programs{"cc"}++; - &scan_c_file($file); + # All on one line. + s,/\*.*\*/,,g; + # Starting on this line. + if (m,/\*,) { + $in_comment = 1; } + # Continuing on this line. + next if $in_comment; - foreach $file (@makefiles) { - &scan_makefile($file); + # Preprocessor directives. + if (/^\s*\#\s*include\s*<([^>]*)>/) { + $headers{$1}++; } + # Ignore other preprocessor directives. + next if /^\s*\#/; - foreach $file (@shfiles) { - &scan_sh_file($file); - } -} + # Remove string and character constants. + s,\"[^\"]*\",,g; + s,\'[^\']*\',,g; -sub scan_c_file -{ - local($file) = @_; - local($in_comment) = 0; # Nonzero if in a multiline comment. - - open(CFILE, "<$file") || die "$0: cannot open $file: $!\n"; - while () { - # Strip out comments, approximately. - # Ending on this line. - if ($in_comment && m,\*/,) { - s,.*\*/,,; - $in_comment = 0; - } - # All on one line. - s,/\*.*\*/,,g; - # Starting on this line. - if (m,/\*,) { - $in_comment = 1; - } - # Continuing on this line. - next if $in_comment; - - # Preprocessor directives. - if (/^\s*#\s*include\s*<([^>]*)>/) { - $headers{$1}++; - } - # Ignore other preprocessor directives. - next if /^\s*#/; - - # Remove string and character constants. - s,\"[^\"]*\",,g; - s,\'[^\']*\',,g; - - # Tokens in the code. - # Maybe we should ignore function definitions (in column 0)? - while (s/\W([a-zA-Z_]\w*)\s*\(/ /) { - $functions{$1}++ if !defined($c_keywords{$1}); - } - while (s/\W([a-zA-Z_]\w*)\W/ /) { - $identifiers{$1}++ if !defined($c_keywords{$1}); - } + # Tokens in the code. + # Maybe we should ignore function definitions (in column 0)? + while (s/\W([a-zA-Z_]\w*)\s*\(/ /) { + $functions{$1}++ if !defined($c_keywords{$1}); + } + while (s/\W([a-zA-Z_]\w*)\W/ /) { + $identifiers{$1}++ if !defined($c_keywords{$1}); } - close(CFILE); + } + close(CFILE); - if ($verbose) { - local($word); + if ($verbose) { + local($word); - print "\n$file functions:\n"; - foreach $word (sort keys %functions) { - print "$word $functions{$word}\n"; - } + print "\n$file functions:\n"; + foreach $word (sort keys %functions) { + print "$word $functions{$word}\n"; + } - print "\n$file identifiers:\n"; - foreach $word (sort keys %identifiers) { - print "$word $identifiers{$word}\n"; - } + print "\n$file identifiers:\n"; + foreach $word (sort keys %identifiers) { + print "$word $identifiers{$word}\n"; + } - print "\n$file headers:\n"; - foreach $word (sort keys %headers) { - print "$word $headers{$word}\n"; - } + print "\n$file headers:\n"; + foreach $word (sort keys %headers) { + print "$word $headers{$word}\n"; } + } } sub scan_makefile { - local($file) = @_; - - open(MFILE, "<$file") || die "$0: cannot open $file: $!\n"; - while () { - # Strip out comments and variable references. - s/#.*//; - s/\$\([^\)]*\)//g; - s/\${[^\}]*}//g; - s/@[^@]*@//g; - - # Variable assignments. - while (s/\W([a-zA-Z_]\w*)\s*=/ /) { - $makevars{$1}++; - } - # Libraries. - while (s/\W-l([a-zA-Z_]\w*)\W/ /) { - $libraries{$1}++; - } - # Tokens in the code. - while (s/\W([a-zA-Z_]\w*)\W/ /) { - $programs{$1}++; - } + local($file) = @_; + + open(MFILE, "<$file") || die "$me: cannot open $file: $!\n"; + while () { + # Strip out comments and variable references. + s/#.*//; + s/\$\([^\)]*\)//g; + s/\${[^\}]*}//g; + s/@[^@]*@//g; + + # Variable assignments. + while (s/\W([a-zA-Z_]\w*)\s*=/ /) { + $makevars{$1}++; + } + # Libraries. + while (s/\W-l([a-zA-Z_]\w*)\W/ /) { + $libraries{$1}++; } - close(MFILE); + # Tokens in the code. + while (s/\W([a-zA-Z_]\w*)\W/ /) { + $programs{$1}++; + } + } + close(MFILE); - if ($verbose) { - local($word); + if ($verbose) { + local($word); - print "\n$file makevars:\n"; - foreach $word (sort keys %makevars) { - print "$word $makevars{$word}\n"; - } + print "\n$file makevars:\n"; + foreach $word (sort keys %makevars) { + print "$word $makevars{$word}\n"; + } - print "\n$file libraries:\n"; - foreach $word (sort keys %libraries) { - print "$word $libraries{$word}\n"; - } + print "\n$file libraries:\n"; + foreach $word (sort keys %libraries) { + print "$word $libraries{$word}\n"; + } - print "\n$file programs:\n"; - foreach $word (sort keys %programs) { - print "$word $programs{$word}\n"; - } + print "\n$file programs:\n"; + foreach $word (sort keys %programs) { + print "$word $programs{$word}\n"; } + } } sub scan_sh_file { - local($file) = @_; - - open(MFILE, "<$file") || die "$0: cannot open $file: $!\n"; - while () { - # Strip out comments and variable references. - s/#.*//; - s/\${[^\}]*}//g; - s/@[^@]*@//g; - - # Tokens in the code. - while (s/\W([a-zA-Z_]\w*)\W/ /) { - $programs{$1}++; - } + local($file) = @_; + + open(MFILE, "<$file") || die "$me: cannot open $file: $!\n"; + while () { + # Strip out comments and variable references. + s/#.*//; + s/\${[^\}]*}//g; + s/@[^@]*@//g; + + # Tokens in the code. + while (s/\W([a-zA-Z_]\w*)\W/ /) { + $programs{$1}++; } - close(MFILE); + } + close(MFILE); - if ($verbose) { - local($word); + if ($verbose) { + local($word); - print "\n$file programs:\n"; - foreach $word (sort keys %programs) { - print "$word $programs{$word}\n"; - } + print "\n$file programs:\n"; + foreach $word (sort keys %programs) { + print "$word $programs{$word}\n"; } + } } # Print a configure.in. sub output { - local (%unique_makefiles); + local (%unique_makefiles); - print CONF "dnl Process this file with autoconf to produce a configure script.\n"; - print CONF "AC_INIT($initfile)\n"; + print CONF "# Process this file with autoconf to produce a configure script.\n"; + print CONF "AC_INIT($initfile)\n"; - &output_programs; - &output_headers; - &output_identifiers; - &output_functions; + &output_programs; + &output_headers; + &output_identifiers; + &output_functions; - # Change DIR/Makefile.in to DIR/Makefile. - foreach $_ (@makefiles) { - s/\.in$//; - $unique_makefiles{$_}++; - } - print CONF "\nAC_OUTPUT(", join(" ", keys(%unique_makefiles)), ")\n"; + # Change DIR/Makefile.in to DIR/Makefile. + foreach $_ (@makefiles) { + s/\.in$//; + $unique_makefiles{$_}++; + } + print CONF "\nAC_OUTPUT(", join(" ", keys(%unique_makefiles)), ")\n"; - close CONF; + close CONF; } # Print Autoconf macro $1 if it's not undef and hasn't been printed already. sub print_unique { - local($macro) = @_; + local($macro) = @_; - if (defined($macro) && !defined($printed{$macro})) { - print CONF "$macro\n"; - $printed{$macro} = 1; - } + if (defined($macro) && !defined($printed{$macro})) { + print CONF "$macro\n"; + $printed{$macro} = 1; + } } sub output_programs { - local ($word); - - print CONF "\ndnl Checks for programs.\n"; - foreach $word (sort keys %programs) { - &print_unique($programs_macros{$word}); - } - foreach $word (sort keys %makevars) { - &print_unique($makevars_macros{$word}); - } - print CONF "\ndnl Checks for libraries.\n"; - foreach $word (sort keys %libraries) { - print CONF "dnl Replace `\main\' with a function in -l$word:\n"; - print CONF "AC_CHECK_LIB($word, main)\n"; - } + local ($word); + + print CONF "\n# Checks for programs.\n"; + foreach $word (sort keys %programs) { + &print_unique($programs_macros{$word}); + } + foreach $word (sort keys %makevars) { + &print_unique($makevars_macros{$word}); + } + print CONF "\n# Checks for libraries.\n"; + foreach $word (sort keys %libraries) { + print CONF "# Replace `\main\' with a function in -l$word:\n"; + print CONF "AC_CHECK_LIB($word, main)\n"; + } } sub output_headers { - local ($word); - - print CONF "\ndnl Checks for header files.\n"; - foreach $word (sort keys %headers) { - if (defined($headers_macros{$word}) && - $headers_macros{$word} eq 'AC_CHECK_HEADERS') { - push(@have_headers, $word); - } else { - &print_unique($headers_macros{$word}); - } + local ($word); + + print CONF "\n# Checks for header files.\n"; + foreach $word (sort keys %headers) { + if (defined($headers_macros{$word}) && + $headers_macros{$word} eq 'AC_CHECK_HEADERS') { + push(@have_headers, $word); + } else { + &print_unique($headers_macros{$word}); } - print CONF "AC_CHECK_HEADERS(" . join(' ', sort(@have_headers)) . ")\n" - if defined(@have_headers); + } + print CONF "AC_CHECK_HEADERS(" . join(' ', sort(@have_headers)) . ")\n" + if defined(@have_headers); } sub output_identifiers { - local ($word); + local ($word); - print CONF "\ndnl Checks for typedefs, structures, and compiler characteristics.\n"; - foreach $word (sort keys %identifiers) { - &print_unique($identifiers_macros{$word}); - } + print CONF "\n# Checks for typedefs, structures, and compiler characteristics.\n"; + foreach $word (sort keys %identifiers) { + &print_unique($identifiers_macros{$word}); + } } sub output_functions { - local ($word); - - print CONF "\ndnl Checks for library functions.\n"; - foreach $word (sort keys %functions) { - if (defined($functions_macros{$word}) && - $functions_macros{$word} eq 'AC_CHECK_FUNCS') { - push(@have_funcs, $word); - } else { - &print_unique($functions_macros{$word}); - } + local ($word); + + print CONF "\n# Checks for library functions.\n"; + foreach $word (sort keys %functions) { + if (defined($functions_macros{$word}) && + $functions_macros{$word} eq 'AC_CHECK_FUNCS') { + push(@have_funcs, $word); + } else { + &print_unique($functions_macros{$word}); } - print CONF "AC_CHECK_FUNCS(" . join(' ', sort(@have_funcs)) . ")\n" - if defined(@have_funcs); + } + print CONF "AC_CHECK_FUNCS(" . join(' ', sort(@have_funcs)) . ")\n" + if defined(@have_funcs); } diff --git a/bin/autoscan.in b/bin/autoscan.in index f40e0c9cb..6ac9d6470 100644 --- a/bin/autoscan.in +++ b/bin/autoscan.in @@ -22,7 +22,9 @@ require "find.pl"; $datadir = $ENV{"AC_MACRODIR"} || "@datadir@"; +($me = $0) =~ s,.*/,,; $verbose = 0; + # Reference these variables to pacify perl -w. undef %identifiers_macros; undef %makevars_macros; @@ -39,23 +41,25 @@ exit 0; # Process any command line arguments. sub parse_args { - local ($usage) = <<'EOD'; -Usage: autoscan [OPTION] ... [SRCDIR] + # There are a couple of useless `\' below. They are used to have + # Emacs fontify properly. + local ($usage) = <. +Report bugs to . EOD - local ($version) = <<'EOD'; + local ($version) = <<'EOD'; autoscan (GNU @PACKAGE@) @VERSION@ Written by David J. MacKenzie. @@ -64,353 +68,355 @@ This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. EOD - local $need_datadir = 0; - - foreach $_ (@ARGV) { - if (/^--m[a-z]*=(.*)/) { - $datadir = $1; - } elsif (/^-m$/) { - $need_datadir = 1; - } elsif (/^--h/ || /^-h$/) { - print "$usage"; - exit 0; - } elsif (/^--verb/ || /^-v$/) { - $verbose = 1; - } elsif (/^--vers/ || /^-V$/) { - print "$version"; - exit 0; - } elsif (/^[^-]/) { - if ($need_datadir) { - $datadir = $_; - $need_datadir = 0; - } else { - die "$usage" if defined($srcdir); - # Top level directory of the package being autoscanned. - $srcdir = $_; - } - } else { - die "$usage"; - } + local ($help) = "Try \`$me --help' for more information."; + + local $need_datadir = 0; + + foreach $_ (@ARGV) { + if (/^--m[a-z]*=(.*)/) { + $datadir = $1; + } elsif (/^-m$/) { + $need_datadir = 1; + } elsif (/^--h/ || /^-h$/) { + print "$usage"; + exit 0; + } elsif (/^--verb/ || /^-v$/) { + $verbose = 1; + } elsif (/^--vers/ || /^-V$/) { + print "$version"; + exit 0; + } elsif (/^[^-]/) { + if ($need_datadir) { + $datadir = $_; + $need_datadir = 0; + } else { + die "$me: too many arguments\n$help" if defined($srcdir); + # Top level directory of the package being autoscanned. + $srcdir = $_; + } + } else { + die "$me: invalid option $_\n$help"; } + } - die $usage if $need_datadir; + die "$me: missing argument to -m\n$help" if $need_datadir; - $srcdir="." if !defined($srcdir); + $srcdir="." if !defined($srcdir); - print "srcdir=$srcdir\n" if $verbose; - chdir $srcdir || die "$0: cannot cd to $srcdir: $!\n"; + print "srcdir=$srcdir\n" if $verbose; + chdir $srcdir || die "$me: cannot cd to $srcdir: $!\n"; - open(CONF, ">configure.scan") || - die "$0: cannot create configure.scan: $!\n"; + open(CONF, ">configure.scan") || + die "$me: cannot create configure.scan: $!\n"; } # Put values in the tables of what to do with each token. sub init_tables { - local($kind, $word, $macro); - - # Initialize a table of C keywords (to ignore). - # Taken from K&R 1st edition p. 180. - # ANSI C, GNU C, and C++ keywords can introduce portability problems, - # so don't ignore them. - foreach $word ('int', 'char', 'float', 'double', 'struct', 'union', - 'long', 'short', 'unsigned', 'auto', 'extern', 'register', - 'typedef', 'static', 'goto', 'return', 'sizeof', 'break', - 'continue', 'if', 'else', 'for', 'do', 'while', 'switch', - 'case', 'default') { - $c_keywords{$word} = 0; - } - - # The data file format supports only one line of macros per function. - # If more than that is required for a common portability problem, - # a new Autoconf macro should probably be written for that case, - # instead of duplicating the code in lots of configure.in files. - - foreach $kind ('functions', 'headers', 'identifiers', 'programs', - 'makevars') { - open(TABLE, "<$datadir/ac$kind") || - die "$0: cannot open $datadir/ac$kind: $!\n"; - while (
) { - next if /^\s*$/ || /^\s*#/; # Ignore blank lines and comments. - ($word, $macro) = split; - eval "\$$kind" . "_macros{\$word} = \$macro"; - } - close(TABLE); + local($kind, $word, $macro); + + # Initialize a table of C keywords (to ignore). + # Taken from K&R 1st edition p. 180. + # ANSI C, GNU C, and C++ keywords can introduce portability problems, + # so don't ignore them. + foreach $word ('int', 'char', 'float', 'double', 'struct', 'union', + 'long', 'short', 'unsigned', 'auto', 'extern', 'register', + 'typedef', 'static', 'goto', 'return', 'sizeof', 'break', + 'continue', 'if', 'else', 'for', 'do', 'while', 'switch', + 'case', 'default') { + $c_keywords{$word} = 0; + } + + # The data file format supports only one line of macros per function. + # If more than that is required for a common portability problem, + # a new Autoconf macro should probably be written for that case, + # instead of duplicating the code in lots of configure.in files. + + foreach $kind ('functions', 'headers', 'identifiers', 'programs', + 'makevars') { + open(TABLE, "<$datadir/ac$kind") || + die "$me: cannot open $datadir/ac$kind: $!\n"; + while (
) { + next if /^\s*$/ || /^\s*#/; # Ignore blank lines and comments. + ($word, $macro) = split; + eval "\$$kind" . "_macros{\$word} = \$macro"; } + close(TABLE); + } } # Collect names of various kinds of files in the package. # Called by &find on each file. sub wanted { - if (/^.*\.[chlymC]$/ || /^.*\.cc$/) { - $name =~ s?^\./??; push(@cfiles, $name); - } - elsif (/^[Mm]akefile$/ || /^[Mm]akefile\.in$/ || /^GNUmakefile$/) { - $name =~ s?^\./??; push(@makefiles, $name); - } - elsif (/^.*\.sh$/) { - $name =~ s?^\./??; push(@shfiles, $name); - } + if (/^.*\.[chlymC]$/ || /^.*\.cc$/) { + $name =~ s?^\./??; push(@cfiles, $name); + } + elsif (/^[Mm]akefile$/ || /^[Mm]akefile\.in$/ || /^GNUmakefile$/) { + $name =~ s?^\./??; push(@makefiles, $name); + } + elsif (/^.*\.sh$/) { + $name =~ s?^\./??; push(@shfiles, $name); + } } # Read through the files and collect lists of tokens in them # that might create nonportabilities. sub scan_files { - $initfile = $cfiles[0]; # Pick one at random. + $initfile = $cfiles[0]; # Pick one at random. + + if ($verbose) { + print "cfiles:", join(" ", @cfiles), "\n"; + print "makefiles:", join(" ", @makefiles), "\n"; + print "shfiles:", join(" ", @shfiles), "\n"; + } + + foreach $file (@cfiles) { + $programs{"cc"}++; + &scan_c_file($file); + } + + foreach $file (@makefiles) { + &scan_makefile($file); + } + + foreach $file (@shfiles) { + &scan_sh_file($file); + } +} - if ($verbose) { - print "cfiles:", join(" ", @cfiles), "\n"; - print "makefiles:", join(" ", @makefiles), "\n"; - print "shfiles:", join(" ", @shfiles), "\n"; +sub scan_c_file +{ + local($file) = @_; + local($in_comment) = 0; # Nonzero if in a multiline comment. + + open(CFILE, "<$file") || die "$me: cannot open $file: $!\n"; + while () { + # Strip out comments, approximately. + # Ending on this line. + if ($in_comment && m,\*/,) { + s,.*\*/,,; + $in_comment = 0; } - - foreach $file (@cfiles) { - $programs{"cc"}++; - &scan_c_file($file); + # All on one line. + s,/\*.*\*/,,g; + # Starting on this line. + if (m,/\*,) { + $in_comment = 1; } + # Continuing on this line. + next if $in_comment; - foreach $file (@makefiles) { - &scan_makefile($file); + # Preprocessor directives. + if (/^\s*\#\s*include\s*<([^>]*)>/) { + $headers{$1}++; } + # Ignore other preprocessor directives. + next if /^\s*\#/; - foreach $file (@shfiles) { - &scan_sh_file($file); - } -} + # Remove string and character constants. + s,\"[^\"]*\",,g; + s,\'[^\']*\',,g; -sub scan_c_file -{ - local($file) = @_; - local($in_comment) = 0; # Nonzero if in a multiline comment. - - open(CFILE, "<$file") || die "$0: cannot open $file: $!\n"; - while () { - # Strip out comments, approximately. - # Ending on this line. - if ($in_comment && m,\*/,) { - s,.*\*/,,; - $in_comment = 0; - } - # All on one line. - s,/\*.*\*/,,g; - # Starting on this line. - if (m,/\*,) { - $in_comment = 1; - } - # Continuing on this line. - next if $in_comment; - - # Preprocessor directives. - if (/^\s*#\s*include\s*<([^>]*)>/) { - $headers{$1}++; - } - # Ignore other preprocessor directives. - next if /^\s*#/; - - # Remove string and character constants. - s,\"[^\"]*\",,g; - s,\'[^\']*\',,g; - - # Tokens in the code. - # Maybe we should ignore function definitions (in column 0)? - while (s/\W([a-zA-Z_]\w*)\s*\(/ /) { - $functions{$1}++ if !defined($c_keywords{$1}); - } - while (s/\W([a-zA-Z_]\w*)\W/ /) { - $identifiers{$1}++ if !defined($c_keywords{$1}); - } + # Tokens in the code. + # Maybe we should ignore function definitions (in column 0)? + while (s/\W([a-zA-Z_]\w*)\s*\(/ /) { + $functions{$1}++ if !defined($c_keywords{$1}); + } + while (s/\W([a-zA-Z_]\w*)\W/ /) { + $identifiers{$1}++ if !defined($c_keywords{$1}); } - close(CFILE); + } + close(CFILE); - if ($verbose) { - local($word); + if ($verbose) { + local($word); - print "\n$file functions:\n"; - foreach $word (sort keys %functions) { - print "$word $functions{$word}\n"; - } + print "\n$file functions:\n"; + foreach $word (sort keys %functions) { + print "$word $functions{$word}\n"; + } - print "\n$file identifiers:\n"; - foreach $word (sort keys %identifiers) { - print "$word $identifiers{$word}\n"; - } + print "\n$file identifiers:\n"; + foreach $word (sort keys %identifiers) { + print "$word $identifiers{$word}\n"; + } - print "\n$file headers:\n"; - foreach $word (sort keys %headers) { - print "$word $headers{$word}\n"; - } + print "\n$file headers:\n"; + foreach $word (sort keys %headers) { + print "$word $headers{$word}\n"; } + } } sub scan_makefile { - local($file) = @_; - - open(MFILE, "<$file") || die "$0: cannot open $file: $!\n"; - while () { - # Strip out comments and variable references. - s/#.*//; - s/\$\([^\)]*\)//g; - s/\${[^\}]*}//g; - s/@[^@]*@//g; - - # Variable assignments. - while (s/\W([a-zA-Z_]\w*)\s*=/ /) { - $makevars{$1}++; - } - # Libraries. - while (s/\W-l([a-zA-Z_]\w*)\W/ /) { - $libraries{$1}++; - } - # Tokens in the code. - while (s/\W([a-zA-Z_]\w*)\W/ /) { - $programs{$1}++; - } + local($file) = @_; + + open(MFILE, "<$file") || die "$me: cannot open $file: $!\n"; + while () { + # Strip out comments and variable references. + s/#.*//; + s/\$\([^\)]*\)//g; + s/\${[^\}]*}//g; + s/@[^@]*@//g; + + # Variable assignments. + while (s/\W([a-zA-Z_]\w*)\s*=/ /) { + $makevars{$1}++; + } + # Libraries. + while (s/\W-l([a-zA-Z_]\w*)\W/ /) { + $libraries{$1}++; } - close(MFILE); + # Tokens in the code. + while (s/\W([a-zA-Z_]\w*)\W/ /) { + $programs{$1}++; + } + } + close(MFILE); - if ($verbose) { - local($word); + if ($verbose) { + local($word); - print "\n$file makevars:\n"; - foreach $word (sort keys %makevars) { - print "$word $makevars{$word}\n"; - } + print "\n$file makevars:\n"; + foreach $word (sort keys %makevars) { + print "$word $makevars{$word}\n"; + } - print "\n$file libraries:\n"; - foreach $word (sort keys %libraries) { - print "$word $libraries{$word}\n"; - } + print "\n$file libraries:\n"; + foreach $word (sort keys %libraries) { + print "$word $libraries{$word}\n"; + } - print "\n$file programs:\n"; - foreach $word (sort keys %programs) { - print "$word $programs{$word}\n"; - } + print "\n$file programs:\n"; + foreach $word (sort keys %programs) { + print "$word $programs{$word}\n"; } + } } sub scan_sh_file { - local($file) = @_; - - open(MFILE, "<$file") || die "$0: cannot open $file: $!\n"; - while () { - # Strip out comments and variable references. - s/#.*//; - s/\${[^\}]*}//g; - s/@[^@]*@//g; - - # Tokens in the code. - while (s/\W([a-zA-Z_]\w*)\W/ /) { - $programs{$1}++; - } + local($file) = @_; + + open(MFILE, "<$file") || die "$me: cannot open $file: $!\n"; + while () { + # Strip out comments and variable references. + s/#.*//; + s/\${[^\}]*}//g; + s/@[^@]*@//g; + + # Tokens in the code. + while (s/\W([a-zA-Z_]\w*)\W/ /) { + $programs{$1}++; } - close(MFILE); + } + close(MFILE); - if ($verbose) { - local($word); + if ($verbose) { + local($word); - print "\n$file programs:\n"; - foreach $word (sort keys %programs) { - print "$word $programs{$word}\n"; - } + print "\n$file programs:\n"; + foreach $word (sort keys %programs) { + print "$word $programs{$word}\n"; } + } } # Print a configure.in. sub output { - local (%unique_makefiles); + local (%unique_makefiles); - print CONF "dnl Process this file with autoconf to produce a configure script.\n"; - print CONF "AC_INIT($initfile)\n"; + print CONF "# Process this file with autoconf to produce a configure script.\n"; + print CONF "AC_INIT($initfile)\n"; - &output_programs; - &output_headers; - &output_identifiers; - &output_functions; + &output_programs; + &output_headers; + &output_identifiers; + &output_functions; - # Change DIR/Makefile.in to DIR/Makefile. - foreach $_ (@makefiles) { - s/\.in$//; - $unique_makefiles{$_}++; - } - print CONF "\nAC_OUTPUT(", join(" ", keys(%unique_makefiles)), ")\n"; + # Change DIR/Makefile.in to DIR/Makefile. + foreach $_ (@makefiles) { + s/\.in$//; + $unique_makefiles{$_}++; + } + print CONF "\nAC_OUTPUT(", join(" ", keys(%unique_makefiles)), ")\n"; - close CONF; + close CONF; } # Print Autoconf macro $1 if it's not undef and hasn't been printed already. sub print_unique { - local($macro) = @_; + local($macro) = @_; - if (defined($macro) && !defined($printed{$macro})) { - print CONF "$macro\n"; - $printed{$macro} = 1; - } + if (defined($macro) && !defined($printed{$macro})) { + print CONF "$macro\n"; + $printed{$macro} = 1; + } } sub output_programs { - local ($word); - - print CONF "\ndnl Checks for programs.\n"; - foreach $word (sort keys %programs) { - &print_unique($programs_macros{$word}); - } - foreach $word (sort keys %makevars) { - &print_unique($makevars_macros{$word}); - } - print CONF "\ndnl Checks for libraries.\n"; - foreach $word (sort keys %libraries) { - print CONF "dnl Replace `\main\' with a function in -l$word:\n"; - print CONF "AC_CHECK_LIB($word, main)\n"; - } + local ($word); + + print CONF "\n# Checks for programs.\n"; + foreach $word (sort keys %programs) { + &print_unique($programs_macros{$word}); + } + foreach $word (sort keys %makevars) { + &print_unique($makevars_macros{$word}); + } + print CONF "\n# Checks for libraries.\n"; + foreach $word (sort keys %libraries) { + print CONF "# Replace `\main\' with a function in -l$word:\n"; + print CONF "AC_CHECK_LIB($word, main)\n"; + } } sub output_headers { - local ($word); - - print CONF "\ndnl Checks for header files.\n"; - foreach $word (sort keys %headers) { - if (defined($headers_macros{$word}) && - $headers_macros{$word} eq 'AC_CHECK_HEADERS') { - push(@have_headers, $word); - } else { - &print_unique($headers_macros{$word}); - } + local ($word); + + print CONF "\n# Checks for header files.\n"; + foreach $word (sort keys %headers) { + if (defined($headers_macros{$word}) && + $headers_macros{$word} eq 'AC_CHECK_HEADERS') { + push(@have_headers, $word); + } else { + &print_unique($headers_macros{$word}); } - print CONF "AC_CHECK_HEADERS(" . join(' ', sort(@have_headers)) . ")\n" - if defined(@have_headers); + } + print CONF "AC_CHECK_HEADERS(" . join(' ', sort(@have_headers)) . ")\n" + if defined(@have_headers); } sub output_identifiers { - local ($word); + local ($word); - print CONF "\ndnl Checks for typedefs, structures, and compiler characteristics.\n"; - foreach $word (sort keys %identifiers) { - &print_unique($identifiers_macros{$word}); - } + print CONF "\n# Checks for typedefs, structures, and compiler characteristics.\n"; + foreach $word (sort keys %identifiers) { + &print_unique($identifiers_macros{$word}); + } } sub output_functions { - local ($word); - - print CONF "\ndnl Checks for library functions.\n"; - foreach $word (sort keys %functions) { - if (defined($functions_macros{$word}) && - $functions_macros{$word} eq 'AC_CHECK_FUNCS') { - push(@have_funcs, $word); - } else { - &print_unique($functions_macros{$word}); - } + local ($word); + + print CONF "\n# Checks for library functions.\n"; + foreach $word (sort keys %functions) { + if (defined($functions_macros{$word}) && + $functions_macros{$word} eq 'AC_CHECK_FUNCS') { + push(@have_funcs, $word); + } else { + &print_unique($functions_macros{$word}); } - print CONF "AC_CHECK_FUNCS(" . join(' ', sort(@have_funcs)) . ")\n" - if defined(@have_funcs); + } + print CONF "AC_CHECK_FUNCS(" . join(' ', sort(@have_funcs)) . ")\n" + if defined(@have_funcs); } diff --git a/man/autoscan.1 b/man/autoscan.1 index cbe58404f..806115340 100644 --- a/man/autoscan.1 +++ b/man/autoscan.1 @@ -1,5 +1,5 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.020. -.TH AUTOSCAN "1" "March 2000" "GNU autoconf 2.14a" FSF +.TH AUTOSCAN "1" "April 2000" "GNU autoconf 2.14a" FSF .SH NAME autoscan \- Generate a preliminary configure.in .SH SYNOPSIS @@ -17,11 +17,11 @@ print this help, then exit \fB\-V\fR, \fB\-\-version\fR print version number, then exit .TP -\fB\-m\fR, \fB\-\-macrodir\fR=\fIDIR\fR -directory storing data files -.TP \fB\-v\fR, \fB\-\-verbose\fR verbosely report processing +.TP +\fB\-m\fR, \fB\-\-macrodir\fR=\fIDIR\fR +directory storing data files .SH AUTHOR Written by David J. MacKenzie. .SH "REPORTING BUGS"