⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 autoscan.in

📁 autoconf 2.59版,可用于redhat系统.用于编译原码,编写makefile文件.
💻 IN
📖 第 1 页 / 共 2 页
字号:
	  # Tokens in the code.	  # We allow some additional characters, e.g., `+', since	  # autoscan/programs includes `c++'.	  if ($word =~ /^[a-zA-Z_][\w+]*$/)	    {	      used ('program', $word);	    }	}    }  $file->close;}# scan_sh_file($SHELL-SCRIPT-NAME)# --------------------------------sub scan_sh_file ($){  my ($filename) = @_;  push @shfiles, $File::Find::name;  my $file = new Autom4te::XFile "<$filename";  while ($_ = $file->getline)    {      # Strip out comments and variable references.      s/#.*//;      s/\${[^\}]*}//g;      s/@[^@]*@//g;      # Tokens in the code.      while (s/\b([a-zA-Z_]\w*)\b/ /)	{	  used ('program', $1);	}    }  $file->close;}# scan_file ()# ------------# Called by &find on each file.  $_ contains the current filename with# the current directory of the walk through.sub scan_file (){  # Wanted only if there is no corresponding FILE.in.  return    if -f "$_.in";  # Save $_ as Find::File requires it to be preserved.  local $_ = $_;  # Strip a useless leading `./'.  $File::Find::name =~ s,^\./,,;  if (/\.[chlym](\.in)?$/)    {      used 'program', 'cc', $File::Find::name;      scan_c_file ($_);    }  elsif (/\.(cc|cpp|cxx|CC|C|hh|hpp|hxx|HH|H|yy|ypp|ll|lpp)(\.in)?$/)    {      used 'program', 'c++', $File::Find::name;      scan_c_file ($_);    }  elsif ((/^((?:GNUm|M|m)akefile)(\.in)?$/ && ! -f "$1.am")	 || /^(?:GNUm|M|m)akefile(\.am)?$/)    {      scan_makefile ($_);    }  elsif (/\.sh(\.in)?$/)    {      scan_sh_file ($_);    }}# scan_files ()# -------------# Read through the files and collect lists of tokens in them# that might create nonportabilities.sub scan_files (){  find (\&scan_file, '.');  if ($verbose)    {      print "cfiles: @cfiles\n";      print "makefiles: @makefiles\n";      print "shfiles: @shfiles\n";      foreach my $kind (@kinds)	{	  print "\n$kind:\n";	  foreach my $word (sort keys %{$used{$kind}})	    {	      print "$word: @{$used{$kind}{$word}}\n";	    }	}    }}## ----------------------- #### Output configure.scan.  #### ----------------------- ### output_kind ($FILE, $KIND)# --------------------------sub output_kind ($$){  my ($file, $kind) = @_;  # Lists of words to be checked with the generic macro.  my @have;  print $file "\n# $kind_comment{$kind}\n"    if exists $kind_comment{$kind};  foreach my $word (sort keys %{$used{$kind}})    {      # Output the needed macro invocations in $configure_scan if not      # already printed, and remember these macros are needed.      foreach my $macro (@{$macro{$kind}{$word}})	{	  if ($macro =~ /^warn:\s+(.*)/)	    {	      my $message = $1;	      foreach my $location (@{$used{$kind}{$word}})		{		  warn "$location: warning: $message\n";		}	    }	  elsif (exists $generic_macro{$kind}	      && $macro eq $generic_macro{$kind})	    {	      push (@have, $word);	      push (@{$needed_macros{"$generic_macro{$kind}([$word])"}},		    @{$used{$kind}{$word}});	    }	  else	    {	      if (! $printed{$macro})		{		  print $file "$macro\n";		  $printed{$macro} = 1;		}	      push (@{$needed_macros{$macro}},		    @{$used{$kind}{$word}});	    }	}    }  print $file "$generic_macro{$kind}([" . join(' ', sort(@have)) . "])\n"    if @have;}# output_libraries ($FILE)# ------------------------sub output_libraries ($){  my ($file) = @_;  print $file "\n# Checks for libraries.\n";  foreach my $word (sort keys %{$used{'library'}})    {      print $file "# FIXME: Replace `main' with a function in `-l$word':\n";      print $file "AC_CHECK_LIB([$word], [main])\n";    }}# output ($CONFIGURE_SCAN)# ------------------------# Print a proto configure.ac.sub output ($){  my $configure_scan = shift;  my %unique_makefiles;  my $file = new Autom4te::XFile ">$configure_scan";  print $file    ("#                                               -*- Autoconf -*-\n" .     "# Process this file with autoconf to produce a configure script.\n" .     "\n" .     "AC_PREREQ(@VERSION@)\n" .     "AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)\n");  if (defined $cfiles[0])    {      print $file "AC_CONFIG_SRCDIR([$cfiles[0]])\n";      print $file "AC_CONFIG_HEADER([config.h])\n";    }  output_kind ($file, 'program');  output_kind ($file, 'makevar');  output_libraries ($file);  output_kind ($file, 'header');  output_kind ($file, 'identifier');  output_kind ($file, 'function');  if (@makefiles)    {      # Change DIR/Makefile.in to DIR/Makefile.      foreach my $m (@makefiles)	{	  $m =~ s/\.(?:in|am)$//;	  $unique_makefiles{$m}++;	}      print $file ("\nAC_CONFIG_FILES([",		   join ("\n                 ",			 sort keys %unique_makefiles), "])\n");    }  print $file "AC_OUTPUT\n";  $file->close;}## --------------------------------------- #### Checking the accuracy of configure.ac.  #### --------------------------------------- ### &check_configure_ac ($CONFIGURE_AC)# -----------------------------------# Use autoconf to check if all the suggested macros are included# in CONFIGURE_AC.sub check_configure_ac ($){  my ($configure_ac) = @_;  # Find what needed macros are invoked in CONFIGURE_AC.  # I'd be very happy if someone could explain to me why sort (uniq ...)  # doesn't work properly: I need `uniq (sort ...)'.  --akim  my $trace_option =    join (' --trace=', '',	  uniq (sort (map { s/\(.*//; $_ } keys %needed_macros)));  verb "running: $autoconf $trace_option $configure_ac";  my $traces =    new Autom4te::XFile "$autoconf $trace_option $configure_ac|";  while ($_ = $traces->getline)    {      chomp;      my ($file, $line, $macro, @args) = split (/:/, $_);      if ($macro =~ /^AC_CHECK_(HEADER|FUNC|TYPE|MEMBER)S$/)	{	  # To be rigorous, we should distinguish between space and comma	  # separated macros.  But there is no point.	  foreach my $word (split (/\s|,/, $args[0]))	    {	      # AC_CHECK_MEMBERS wants `struct' or `union'.	      if ($macro eq "AC_CHECK_MEMBERS"		  && $word =~ /^stat.st_/)		{		  $word = "struct " . $word;		}	      delete $needed_macros{"$macro([$word])"};	    }	}      else	{	  delete $needed_macros{$macro};	}    }  $traces->close;  # Report the missing macros.  foreach my $macro (sort keys %needed_macros)    {      warn ("$configure_ac: warning: missing $macro wanted by: "	    . (${$needed_macros{$macro}}[0])	    . "\n");      print $log "$me: warning: missing $macro wanted by: \n";      foreach my $need (@{$needed_macros{$macro}})	{	  print $log "\t$need\n";	}    }}## -------------- #### Main program.  #### -------------- ##parse_args;$autoconf .= " --debug" if $debug;$autoconf .= " --verbose" if $verbose;$autoconf .= join (' --include=', '', @include);$autoconf .= join (' --prepend-include=', '', @prepend_include);my $configure_ac = find_configure_ac;init_tables;scan_files;output ('configure.scan');if ($configure_ac)  {    check_configure_ac ($configure_ac);  }# This close is really needed.  For some reason, probably best named# a bug, it seems that the dtor of $LOG is not called automatically# at END.  It results in a truncated file.$log->close;exit 0;### Setup "GNU" style for perl-mode and cperl-mode.## Local Variables:## perl-indent-level: 2## perl-continued-statement-offset: 2## perl-continued-brace-offset: 0## perl-brace-offset: 0## perl-brace-imaginary-offset: 0## perl-label-offset: -2## cperl-indent-level: 2## cperl-brace-offset: 0## cperl-continued-brace-offset: 0## cperl-label-offset: -2## cperl-extra-newline-before-brace: t## cperl-merge-trailing-else: nil## cperl-continued-statement-offset: 2## End:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -