#! /usr/bin/perl
# -*- Perl -*-
# Generated from autoheader.in; do not edit by hand.

eval 'case $# in 0) exec /usr/bin/perl -S "$0";; *) exec /usr/bin/perl -S "$0" "$@";; esac'
    if 0;

# autoheader -- create `config.h.in' from `configure.ac'

# Copyright (C) 1992, 1993, 1994, 1996, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
# Foundation, Inc.

# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

# Written by Roland McGrath.
# Rewritten in Perl by Akim Demaille.

BEGIN
{
  my $pkgdatadir = $ENV{'autom4te_perllibdir'} || '//share/autoconf';
  unshift @INC, "$pkgdatadir";

  # Override SHELL.  On DJGPP SHELL may not be set to a shell
  # that can handle redirection and quote arguments correctly,
  # e.g.: COMMAND.COM.  For DJGPP always use the shell that configure
  # has detected.
  $ENV{'SHELL'} = '/bin/sh' if ($^O eq 'dos');
}

use Autom4te::ChannelDefs;
use Autom4te::Channels;
use Autom4te::Configure_ac;
use Autom4te::FileUtils;
use Autom4te::General;
use Autom4te::XFile;
use strict;

# Using `do FILE', we need `local' vars.
use vars qw ($config_h %verbatim %symbol);

# Lib files.
my $autom4te = $ENV{'AUTOM4TE'} || '/i686-pc-cygwin/bin/autom4te';
local $config_h;
my $config_h_in;
my @prepend_include;
my @include;


# $HELP
# -----
$help = "Usage: $0 [OPTION]... [TEMPLATE-FILE]

Create a template file of C \`\#define\' statements for \`configure\' to
use.  To this end, scan TEMPLATE-FILE, or \`configure.ac\' if present,
or else \`configure.in\'.

  -h, --help               print this help, then exit
  -V, --version            print version number, then exit
  -v, --verbose            verbosely report processing
  -d, --debug              don\'t remove temporary files
  -f, --force              consider all files obsolete
  -W, --warnings=CATEGORY  report the warnings falling in CATEGORY

" . Autom4te::ChannelDefs::usage () . "

Library directories:
  -B, --prepend-include=DIR  prepend directory DIR to search path
  -I, --include=DIR          append directory DIR to search path

Report bugs to <bug-autoconf\@gnu.org>.
GNU Autoconf home page: <http://www.gnu.org/software/autoconf/>.
General help using GNU software: <http://www.gnu.org/gethelp/>.
";


# $VERSION
# --------
$version = "autoheader (GNU Autoconf) 2.68
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+/Autoconf: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>, <http://gnu.org/licenses/exceptions.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Roland McGrath and Akim Demaille.
";


## ---------- ##
## Routines.  ##
## ---------- ##


# parse_args ()
# -------------
# Process any command line arguments.
sub parse_args ()
{
  my $srcdir;

  parse_WARNINGS;
  getopt ('I|include=s'         => \@include,
	  'B|prepend-include=s' => \@prepend_include,
	  'W|warnings=s'        => \&parse_warnings);

  if (! @ARGV)
    {
      my $configure_ac = require_configure_ac;
      push @ARGV, $configure_ac;
    }
}


## -------------- ##
## Main program.  ##
## -------------- ##

mktmpdir ('ah');
switch_warning 'obsolete';
parse_args;

# Preach.
my $config_h_top = find_file ("config.h.top?",
			      reverse (@prepend_include), @include);
my $config_h_bot = find_file ("config.h.bot?",
			      reverse (@prepend_include), @include);
my $acconfig_h = find_file ("acconfig.h?",
			    reverse (@prepend_include), @include);
if ($config_h_top || $config_h_bot || $acconfig_h)
  {
    my $msg = << "END";
    Using auxiliary files such as \`acconfig.h\', \`config.h.bot\'
    and \`config.h.top\', to define templates for \`config.h.in\'
    is deprecated and discouraged.

    Using the third argument of \`AC_DEFINE\' and
    \`AC_DEFINE_UNQUOTED\' allows one to define a template without
    \`acconfig.h\':

      AC_DEFINE([NEED_FUNC_MAIN], 1,
		[Define if a function \`main\' is needed.])

    More sophisticated templates can also be produced, see the
    documentation.
END
    $msg =~ s/^    /WARNING: /gm;
    msg 'obsolete', $msg;
  }

# Set up autoconf.
my $autoconf = "'$autom4te' --language=autoconf ";
$autoconf .= join (' --include=', '', map { shell_quote ($_) } @include);
$autoconf .= join (' --prepend-include=', '', map { shell_quote ($_) } @prepend_include);
$autoconf .= ' --debug' if $debug;
$autoconf .= ' --force' if $force;
$autoconf .= ' --verbose' if $verbose;

# ----------------------- #
# Real work starts here.  #
# ----------------------- #

# Source what the traces are trying to tell us.
verb "$me: running $autoconf to trace from $ARGV[0]";
my $quoted_tmp = shell_quote ($tmp);
xsystem ("$autoconf"
	 # If you change this list, update the
	 # `Autoheader-preselections' section of autom4te.in.
	 . ' --trace AC_CONFIG_HEADERS:\'$$config_h ||= \'"\'"\'$1\'"\'"\';\''
	 . ' --trace AH_OUTPUT:\'$$verbatim{\'"\'"\'$1\'"\'"\'} = \'"\'"\'$2\'"\'"\';\''
	 . ' --trace AC_DEFINE_TRACE_LITERAL:\'$$symbol{\'"\'"\'$1\'"\'"\'} = 1;\''
	 . " " . shell_quote ($ARGV[0]) . " >$quoted_tmp/traces.pl");

local (%verbatim, %symbol);
debug "$me: \`do'ing $tmp/traces.pl:\n" . `sed 's/^/| /' $quoted_tmp/traces.pl`;
do "$tmp/traces.pl";
warn "couldn't parse $tmp/traces.pl: $@" if $@;
unless ($config_h)
  {
    error "error: AC_CONFIG_HEADERS not found in $ARGV[0]";
    exit 1;
  }

# We template only the first CONFIG_HEADER.
$config_h =~ s/ .*//;
# Support "outfile[:infile]", defaulting infile="outfile.in".
($config_h, $config_h_in) = split (':', $config_h, 2);
$config_h_in ||= "$config_h.in";

# %SYMBOL might contain things like `F77_FUNC(name,NAME)', but we keep
# only the name of the macro.
%symbol = map { s/\(.*//; $_ => 1 } keys %symbol;

my $out = new Autom4te::XFile ("> " . open_quote ("$tmp/config.hin"));

# Don't write "do not edit" -- it will get copied into the
# config.h, which it's ok to edit.
print $out "/* $config_h_in.  Generated from $ARGV[0] by autoheader.  */\n";

# Dump the top.
if ($config_h_top)
  {
    my $in = new Autom4te::XFile ("< " . open_quote ($config_h_top));
    while ($_ = $in->getline)
      {
	print $out $_;
      }
  }

# Dump `acconfig.h', except for its bottom portion.
if ($acconfig_h)
  {
    my $in = new Autom4te::XFile ("< " . open_quote ($acconfig_h));
    while ($_ = $in->getline)
      {
	last if /\@BOTTOM\@/;
	next if /\@TOP\@/;
	print $out $_;
      }
  }

# Dump the templates from `configure.ac'.
foreach (sort keys %verbatim)
  {
    print $out "\n$verbatim{$_}\n";
  }

# Dump bottom portion of `acconfig.h'.
if ($acconfig_h)
  {
    my $in = new Autom4te::XFile ("< " . open_quote ($acconfig_h));
    my $dump = 0;
    while ($_ = $in->getline)
      {
	print $out $_ if $dump;
	$dump = 1  if /\@BOTTOM\@/;
      }
  }

# Dump the bottom.
if ($config_h_bot)
  {
    my $in = new Autom4te::XFile ("< " . open_quote ($config_h_bot));
    while ($_ = $in->getline)
      {
	print $out $_;
      }
  }

$out->close;

# Check that all the symbols have a template.
{
  my $in = new Autom4te::XFile ("< " . open_quote ("$tmp/config.hin"));
  my $suggest_ac_define = 1;
  while ($_ = $in->getline)
    {
      my ($symbol) = /^\#\s*\w+\s+(\w+)/
	or next;
      delete $symbol{$symbol};
    }
  foreach (sort keys %symbol)
    {
      msg 'syntax', "warning: missing template: $_";
      if ($suggest_ac_define)
	{
	  msg 'syntax',  "Use AC_DEFINE([$_], [], [Description])";
	  $suggest_ac_define = 0;
	}

    }
  exit 1
    if keys %symbol;
}

update_file ("$tmp/config.hin", "$config_h_in", $force);

### 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:
