From b132fd0fe7297a2f4b0e213880468bed0379adf8 Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Wed, 26 Dec 2007 00:41:48 +0100 Subject: [PATCH] Resurrect autoconf from the 'full' branch Signed-off-by: Johannes Schindelin --- bin/aclocal | 1072 ++ bin/aclocal-1.10 | 1072 ++ bin/autoconf | 582 + bin/autogen.exe | Bin 0 -> 681984 bytes bin/autoheader | 301 + bin/autom4te | 1053 ++ bin/automake | 7859 ++++++++++ bin/automake-1.10 | 7859 ++++++++++ bin/autoopts-config | 104 + bin/autoreconf | 698 + bin/autoscan | 677 + bin/autoupdate | 1060 ++ bin/libtool | 6967 +++++++++ bin/libtoolize | 353 + bin/m4.exe | Bin 0 -> 118148 bytes share/aclocal-1.10/amversion.m4 | 35 + share/aclocal-1.10/as.m4 | 21 + share/aclocal-1.10/auxdir.m4 | 52 + share/aclocal-1.10/ccstdc.m4 | 26 + share/aclocal-1.10/cond.m4 | 34 + share/aclocal-1.10/depend.m4 | 158 + share/aclocal-1.10/depout.m4 | 68 + share/aclocal-1.10/dmalloc.m4 | 31 + share/aclocal-1.10/gcj.m4 | 18 + share/aclocal-1.10/header.m4 | 12 + share/aclocal-1.10/init.m4 | 124 + share/aclocal-1.10/install-sh.m4 | 14 + share/aclocal-1.10/lead-dot.m4 | 21 + share/aclocal-1.10/lex.m4 | 22 + share/aclocal-1.10/lispdir.m4 | 55 + share/aclocal-1.10/maintainer.m4 | 28 + share/aclocal-1.10/make.m4 | 51 + share/aclocal-1.10/minuso.m4 | 34 + share/aclocal-1.10/missing.m4 | 35 + share/aclocal-1.10/mkdirp.m4 | 26 + share/aclocal-1.10/multi.m4 | 65 + share/aclocal-1.10/obsol-gt.m4 | 12 + share/aclocal-1.10/obsol-lt.m4 | 12 + share/aclocal-1.10/obsolete.m4 | 37 + share/aclocal-1.10/options.m4 | 32 + share/aclocal-1.10/protos.m4 | 29 + share/aclocal-1.10/python.m4 | 168 + share/aclocal-1.10/regex.m4 | 53 + share/aclocal-1.10/runlog.m4 | 17 + share/aclocal-1.10/sanity.m4 | 51 + share/aclocal-1.10/strip.m4 | 28 + share/aclocal-1.10/substnot.m4 | 12 + share/aclocal-1.10/tar.m4 | 95 + share/aclocal-1.10/upc.m4 | 20 + share/autoconf/Autom4te/C4che.pm | 244 + share/autoconf/Autom4te/ChannelDefs.pm | 390 + share/autoconf/Autom4te/Channels.pm | 709 + share/autoconf/Autom4te/Configure_ac.pm | 108 + share/autoconf/Autom4te/FileUtils.pm | 384 + share/autoconf/Autom4te/General.pm | 421 + share/autoconf/Autom4te/Request.pm | 116 + share/autoconf/Autom4te/Struct.pm | 630 + share/autoconf/Autom4te/XFile.pm | 291 + share/autoconf/INSTALL | 234 + share/autoconf/autoconf/autoconf.m4 | 116 + share/autoconf/autoconf/autoconf.m4f | 12002 +++++++++++++++ share/autoconf/autoconf/autoheader.m4 | 101 + share/autoconf/autoconf/autoscan.m4 | 72 + share/autoconf/autoconf/autotest.m4 | 89 + share/autoconf/autoconf/autoupdate.m4 | 130 + share/autoconf/autoconf/c.m4 | 1737 +++ share/autoconf/autoconf/erlang.m4 | 306 + share/autoconf/autoconf/fortran.m4 | 1234 ++ share/autoconf/autoconf/functions.m4 | 2046 +++ share/autoconf/autoconf/general.m4 | 2730 ++++ share/autoconf/autoconf/headers.m4 | 873 ++ share/autoconf/autoconf/lang.m4 | 671 + share/autoconf/autoconf/libs.m4 | 496 + share/autoconf/autoconf/oldnames.m4 | 113 + share/autoconf/autoconf/programs.m4 | 888 ++ share/autoconf/autoconf/specific.m4 | 514 + share/autoconf/autoconf/status.m4 | 1536 ++ share/autoconf/autoconf/types.m4 | 991 ++ share/autoconf/autom4te.cfg | 156 + share/autoconf/autoscan/autoscan.list | 316 + share/autoconf/autotest/autotest.m4 | 47 + share/autoconf/autotest/autotest.m4f | 2550 ++++ share/autoconf/autotest/general.m4 | 1523 ++ share/autoconf/m4sugar/m4sh.m4 | 1529 ++ share/autoconf/m4sugar/m4sh.m4f | 1412 ++ share/autoconf/m4sugar/m4sugar.m4 | 1785 +++ share/autoconf/m4sugar/m4sugar.m4f | 542 + share/autoconf/m4sugar/version.m4 | 10 + share/automake-1.10/Automake/ChannelDefs.pm | 384 + share/automake-1.10/Automake/Channels.pm | 709 + share/automake-1.10/Automake/Condition.pm | 650 + share/automake-1.10/Automake/Config.pm | 52 + share/automake-1.10/Automake/Configure_ac.pm | 108 + share/automake-1.10/Automake/DisjConditions.pm | 538 + share/automake-1.10/Automake/FileUtils.pm | 384 + share/automake-1.10/Automake/General.pm | 89 + share/automake-1.10/Automake/Item.pm | 207 + share/automake-1.10/Automake/ItemDef.pm | 113 + share/automake-1.10/Automake/Location.pm | 177 + share/automake-1.10/Automake/Options.pm | 384 + share/automake-1.10/Automake/Rule.pm | 847 ++ share/automake-1.10/Automake/RuleDef.pm | 102 + share/automake-1.10/Automake/Struct.pm | 630 + share/automake-1.10/Automake/VarDef.pm | 356 + share/automake-1.10/Automake/Variable.pm | 1677 +++ share/automake-1.10/Automake/Version.pm | 159 + share/automake-1.10/Automake/Wrap.pm | 167 + share/automake-1.10/Automake/XFile.pm | 291 + share/automake-1.10/COPYING | 340 + share/automake-1.10/INSTALL | 234 + share/automake-1.10/acinstall | 52 + share/automake-1.10/am/ansi2knr.am | 78 + share/automake-1.10/am/check.am | 101 + share/automake-1.10/am/clean-hdr.am | 23 + share/automake-1.10/am/clean.am | 64 + share/automake-1.10/am/compile.am | 32 + share/automake-1.10/am/configure.am | 152 + share/automake-1.10/am/data.am | 87 + share/automake-1.10/am/dejagnu.am | 111 + share/automake-1.10/am/depend.am | 28 + share/automake-1.10/am/depend2.am | 135 + share/automake-1.10/am/distdir.am | 419 + share/automake-1.10/am/footer.am | 20 + share/automake-1.10/am/header-vars.am | 56 + share/automake-1.10/am/header.am | 21 + share/automake-1.10/am/inst-vars.am | 30 + share/automake-1.10/am/install.am | 95 + share/automake-1.10/am/java.am | 92 + share/automake-1.10/am/lang-compile.am | 41 + share/automake-1.10/am/lex.am | 31 + share/automake-1.10/am/library.am | 21 + share/automake-1.10/am/libs.am | 89 + share/automake-1.10/am/libtool.am | 31 + share/automake-1.10/am/lisp.am | 150 + share/automake-1.10/am/ltlib.am | 92 + share/automake-1.10/am/ltlibrary.am | 19 + share/automake-1.10/am/mans-vars.am | 22 + share/automake-1.10/am/mans.am | 99 + share/automake-1.10/am/multilib.am | 62 + share/automake-1.10/am/program.am | 26 + share/automake-1.10/am/progs.am | 130 + share/automake-1.10/am/python.am | 100 + share/automake-1.10/am/remake-hdr.am | 78 + share/automake-1.10/am/scripts.am | 120 + share/automake-1.10/am/subdirs.am | 109 + share/automake-1.10/am/tags.am | 133 + share/automake-1.10/am/texi-vers.am | 61 + share/automake-1.10/am/texibuild.am | 119 + share/automake-1.10/am/texinfos.am | 386 + share/automake-1.10/am/yacc.am | 49 + share/automake-1.10/ansi2knr.1 | 36 + share/automake-1.10/ansi2knr.c | 739 + share/automake-1.10/compile | 142 + share/automake-1.10/config-ml.in | 911 ++ share/automake-1.10/config.guess | 1500 ++ share/automake-1.10/config.sub | 1616 ++ share/automake-1.10/depcomp | 584 + share/automake-1.10/elisp-comp | 89 + share/automake-1.10/install-sh | 507 + share/automake-1.10/mdate-sh | 201 + share/automake-1.10/missing | 367 + share/automake-1.10/mkinstalldirs | 161 + share/automake-1.10/py-compile | 146 + share/automake-1.10/symlink-tree | 78 + share/automake-1.10/texinfo.tex | 7482 +++++++++ share/automake-1.10/ylwrap | 223 + share/doc/automake/amhello-1.0.tar.gz | Bin 0 -> 66375 bytes share/info/autoconf.info | 18431 +++++++++++++++++++++++ share/info/automake.info | 195 + share/info/automake.info-1 | 7323 +++++++++ share/info/automake.info-2 | 4547 ++++++ share/info/dir | 42 + share/info/standards.info | 5499 +++++++ share/man/man1/autoconf.1 | 107 + share/man/man1/autoheader.1 | 103 + share/man/man1/autom4te.1 | 156 + share/man/man1/autoreconf.1 | 128 + share/man/man1/autoscan.1 | 65 + share/man/man1/autoupdate.1 | 67 + share/man/man1/config.guess.1 | 57 + share/man/man1/config.sub.1 | 41 + share/man/man1/ifnames.1 | 52 + 182 files changed, 134952 insertions(+) create mode 100644 bin/aclocal create mode 100644 bin/aclocal-1.10 create mode 100644 bin/autoconf create mode 100644 bin/autogen.exe create mode 100644 bin/autoheader create mode 100644 bin/autom4te create mode 100644 bin/automake create mode 100644 bin/automake-1.10 create mode 100644 bin/autoopts-config create mode 100644 bin/autoreconf create mode 100644 bin/autoscan create mode 100644 bin/autoupdate create mode 100644 bin/libtool create mode 100644 bin/libtoolize create mode 100644 bin/m4.exe create mode 100644 share/aclocal-1.10/amversion.m4 create mode 100644 share/aclocal-1.10/as.m4 create mode 100644 share/aclocal-1.10/auxdir.m4 create mode 100644 share/aclocal-1.10/ccstdc.m4 create mode 100644 share/aclocal-1.10/cond.m4 create mode 100644 share/aclocal-1.10/depend.m4 create mode 100644 share/aclocal-1.10/depout.m4 create mode 100644 share/aclocal-1.10/dmalloc.m4 create mode 100644 share/aclocal-1.10/gcj.m4 create mode 100644 share/aclocal-1.10/header.m4 create mode 100644 share/aclocal-1.10/init.m4 create mode 100644 share/aclocal-1.10/install-sh.m4 create mode 100644 share/aclocal-1.10/lead-dot.m4 create mode 100644 share/aclocal-1.10/lex.m4 create mode 100644 share/aclocal-1.10/lispdir.m4 create mode 100644 share/aclocal-1.10/maintainer.m4 create mode 100644 share/aclocal-1.10/make.m4 create mode 100644 share/aclocal-1.10/minuso.m4 create mode 100644 share/aclocal-1.10/missing.m4 create mode 100644 share/aclocal-1.10/mkdirp.m4 create mode 100644 share/aclocal-1.10/multi.m4 create mode 100644 share/aclocal-1.10/obsol-gt.m4 create mode 100644 share/aclocal-1.10/obsol-lt.m4 create mode 100644 share/aclocal-1.10/obsolete.m4 create mode 100644 share/aclocal-1.10/options.m4 create mode 100644 share/aclocal-1.10/protos.m4 create mode 100644 share/aclocal-1.10/python.m4 create mode 100644 share/aclocal-1.10/regex.m4 create mode 100644 share/aclocal-1.10/runlog.m4 create mode 100644 share/aclocal-1.10/sanity.m4 create mode 100644 share/aclocal-1.10/strip.m4 create mode 100644 share/aclocal-1.10/substnot.m4 create mode 100644 share/aclocal-1.10/tar.m4 create mode 100644 share/aclocal-1.10/upc.m4 create mode 100644 share/autoconf/Autom4te/C4che.pm create mode 100644 share/autoconf/Autom4te/ChannelDefs.pm create mode 100644 share/autoconf/Autom4te/Channels.pm create mode 100644 share/autoconf/Autom4te/Configure_ac.pm create mode 100644 share/autoconf/Autom4te/FileUtils.pm create mode 100644 share/autoconf/Autom4te/General.pm create mode 100644 share/autoconf/Autom4te/Request.pm create mode 100644 share/autoconf/Autom4te/Struct.pm create mode 100644 share/autoconf/Autom4te/XFile.pm create mode 100644 share/autoconf/INSTALL create mode 100644 share/autoconf/autoconf/autoconf.m4 create mode 100644 share/autoconf/autoconf/autoconf.m4f create mode 100644 share/autoconf/autoconf/autoheader.m4 create mode 100644 share/autoconf/autoconf/autoscan.m4 create mode 100644 share/autoconf/autoconf/autotest.m4 create mode 100644 share/autoconf/autoconf/autoupdate.m4 create mode 100644 share/autoconf/autoconf/c.m4 create mode 100644 share/autoconf/autoconf/erlang.m4 create mode 100644 share/autoconf/autoconf/fortran.m4 create mode 100644 share/autoconf/autoconf/functions.m4 create mode 100644 share/autoconf/autoconf/general.m4 create mode 100644 share/autoconf/autoconf/headers.m4 create mode 100644 share/autoconf/autoconf/lang.m4 create mode 100644 share/autoconf/autoconf/libs.m4 create mode 100644 share/autoconf/autoconf/oldnames.m4 create mode 100644 share/autoconf/autoconf/programs.m4 create mode 100644 share/autoconf/autoconf/specific.m4 create mode 100644 share/autoconf/autoconf/status.m4 create mode 100644 share/autoconf/autoconf/types.m4 create mode 100644 share/autoconf/autom4te.cfg create mode 100644 share/autoconf/autoscan/autoscan.list create mode 100644 share/autoconf/autotest/autotest.m4 create mode 100644 share/autoconf/autotest/autotest.m4f create mode 100644 share/autoconf/autotest/general.m4 create mode 100644 share/autoconf/m4sugar/m4sh.m4 create mode 100644 share/autoconf/m4sugar/m4sh.m4f create mode 100644 share/autoconf/m4sugar/m4sugar.m4 create mode 100644 share/autoconf/m4sugar/m4sugar.m4f create mode 100644 share/autoconf/m4sugar/version.m4 create mode 100644 share/automake-1.10/Automake/ChannelDefs.pm create mode 100644 share/automake-1.10/Automake/Channels.pm create mode 100644 share/automake-1.10/Automake/Condition.pm create mode 100644 share/automake-1.10/Automake/Config.pm create mode 100644 share/automake-1.10/Automake/Configure_ac.pm create mode 100644 share/automake-1.10/Automake/DisjConditions.pm create mode 100644 share/automake-1.10/Automake/FileUtils.pm create mode 100644 share/automake-1.10/Automake/General.pm create mode 100644 share/automake-1.10/Automake/Item.pm create mode 100644 share/automake-1.10/Automake/ItemDef.pm create mode 100644 share/automake-1.10/Automake/Location.pm create mode 100644 share/automake-1.10/Automake/Options.pm create mode 100644 share/automake-1.10/Automake/Rule.pm create mode 100644 share/automake-1.10/Automake/RuleDef.pm create mode 100644 share/automake-1.10/Automake/Struct.pm create mode 100644 share/automake-1.10/Automake/VarDef.pm create mode 100644 share/automake-1.10/Automake/Variable.pm create mode 100644 share/automake-1.10/Automake/Version.pm create mode 100644 share/automake-1.10/Automake/Wrap.pm create mode 100644 share/automake-1.10/Automake/XFile.pm create mode 100644 share/automake-1.10/COPYING create mode 100644 share/automake-1.10/INSTALL create mode 100644 share/automake-1.10/acinstall create mode 100644 share/automake-1.10/am/ansi2knr.am create mode 100644 share/automake-1.10/am/check.am create mode 100644 share/automake-1.10/am/clean-hdr.am create mode 100644 share/automake-1.10/am/clean.am create mode 100644 share/automake-1.10/am/compile.am create mode 100644 share/automake-1.10/am/configure.am create mode 100644 share/automake-1.10/am/data.am create mode 100644 share/automake-1.10/am/dejagnu.am create mode 100644 share/automake-1.10/am/depend.am create mode 100644 share/automake-1.10/am/depend2.am create mode 100644 share/automake-1.10/am/distdir.am create mode 100644 share/automake-1.10/am/footer.am create mode 100644 share/automake-1.10/am/header-vars.am create mode 100644 share/automake-1.10/am/header.am create mode 100644 share/automake-1.10/am/inst-vars.am create mode 100644 share/automake-1.10/am/install.am create mode 100644 share/automake-1.10/am/java.am create mode 100644 share/automake-1.10/am/lang-compile.am create mode 100644 share/automake-1.10/am/lex.am create mode 100644 share/automake-1.10/am/library.am create mode 100644 share/automake-1.10/am/libs.am create mode 100644 share/automake-1.10/am/libtool.am create mode 100644 share/automake-1.10/am/lisp.am create mode 100644 share/automake-1.10/am/ltlib.am create mode 100644 share/automake-1.10/am/ltlibrary.am create mode 100644 share/automake-1.10/am/mans-vars.am create mode 100644 share/automake-1.10/am/mans.am create mode 100644 share/automake-1.10/am/multilib.am create mode 100644 share/automake-1.10/am/program.am create mode 100644 share/automake-1.10/am/progs.am create mode 100644 share/automake-1.10/am/python.am create mode 100644 share/automake-1.10/am/remake-hdr.am create mode 100644 share/automake-1.10/am/scripts.am create mode 100644 share/automake-1.10/am/subdirs.am create mode 100644 share/automake-1.10/am/tags.am create mode 100644 share/automake-1.10/am/texi-vers.am create mode 100644 share/automake-1.10/am/texibuild.am create mode 100644 share/automake-1.10/am/texinfos.am create mode 100644 share/automake-1.10/am/yacc.am create mode 100644 share/automake-1.10/ansi2knr.1 create mode 100644 share/automake-1.10/ansi2knr.c create mode 100644 share/automake-1.10/compile create mode 100644 share/automake-1.10/config-ml.in create mode 100644 share/automake-1.10/config.guess create mode 100644 share/automake-1.10/config.sub create mode 100644 share/automake-1.10/depcomp create mode 100644 share/automake-1.10/elisp-comp create mode 100644 share/automake-1.10/install-sh create mode 100644 share/automake-1.10/mdate-sh create mode 100644 share/automake-1.10/missing create mode 100644 share/automake-1.10/mkinstalldirs create mode 100644 share/automake-1.10/py-compile create mode 100644 share/automake-1.10/symlink-tree create mode 100644 share/automake-1.10/texinfo.tex create mode 100644 share/automake-1.10/ylwrap create mode 100644 share/doc/automake/amhello-1.0.tar.gz create mode 100644 share/info/autoconf.info create mode 100644 share/info/automake.info create mode 100644 share/info/automake.info-1 create mode 100644 share/info/automake.info-2 create mode 100644 share/info/dir create mode 100644 share/info/standards.info create mode 100644 share/man/man1/autoconf.1 create mode 100644 share/man/man1/autoheader.1 create mode 100644 share/man/man1/autom4te.1 create mode 100644 share/man/man1/autoreconf.1 create mode 100644 share/man/man1/autoscan.1 create mode 100644 share/man/man1/autoupdate.1 create mode 100644 share/man/man1/config.guess.1 create mode 100644 share/man/man1/config.sub.1 create mode 100644 share/man/man1/ifnames.1 diff --git a/bin/aclocal b/bin/aclocal new file mode 100644 index 00000000..e728ee45 --- /dev/null +++ b/bin/aclocal @@ -0,0 +1,1072 @@ +#!/bin/perl -w +# -*- perl -*- +# Generated from aclocal.in; do not edit by hand. + +eval 'case $# in 0) exec /bin/perl -S "$0";; *) exec /bin/perl -S "$0" "$@";; esac' + if 0; + +# aclocal - create aclocal.m4 by scanning configure.ac + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006 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 2, 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, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + +# Written by Tom Tromey , and +# Alexandre Duret-Lutz . + +BEGIN +{ + my $perllibdir = $ENV{'perllibdir'} || '/usr/share/automake-1.10'; + unshift @INC, (split ':', $perllibdir); +} + +use strict; + +use Automake::Config; +use Automake::General; +use Automake::Configure_ac; +use Automake::Channels; +use Automake::ChannelDefs; +use Automake::XFile; +use Automake::FileUtils; +use File::Basename; +use File::stat; +use Cwd; + +# Some globals. + +# Include paths for searching macros. We search macros in this order: +# user-supplied directories first, then the directory containing the +# automake macros, and finally the system-wide directories for +# third-party macro. @user_includes can be augmented with -I. +# @system_includes can be augmented with the `dirlist' file. Also +# --acdir will reset both @automake_includes and @system_includes. +my @user_includes = (); +my @automake_includes = ("/usr/share/aclocal-$APIVERSION"); +my @system_includes = ('/usr/share/aclocal'); + +# Whether we should copy M4 file in $user_includes[0]. +my $install = 0; + +# --diff +my @diff_command; + +# --dry-run +my $dry_run = 0; + +# configure.ac or configure.in. +my $configure_ac; + +# Output file name. +my $output_file = 'aclocal.m4'; + +# Option --force. +my $force_output = 0; + +# Modification time of the youngest dependency. +my $greatest_mtime = 0; + +# Which macros have been seen. +my %macro_seen = (); + +# Remember the order into which we scanned the files. +# It's important to output the contents of aclocal.m4 in the opposite order. +# (Definitions in first files we have scanned should override those from +# later files. So they must appear last in the output.) +my @file_order = (); + +# Map macro names to file names. +my %map = (); + +# Ditto, but records the last definition of each macro as returned by --trace. +my %map_traced_defs = (); + +# Map basenames to macro names. +my %invmap = (); + +# Map file names to file contents. +my %file_contents = (); + +# Map file names to file types. +my %file_type = (); +use constant FT_USER => 1; +use constant FT_AUTOMAKE => 2; +use constant FT_SYSTEM => 3; + +# Map file names to included files (transitively closed). +my %file_includes = (); + +# Files which have already been added. +my %file_added = (); + +# Files that have already been scanned. +my %scanned_configure_dep = (); + +# Serial numbers, for files that have one. +# The key is the basename of the file, +# the value is the serial number represented as a list. +my %serial = (); + +# Matches a macro definition. +# AC_DEFUN([macroname], ...) +# or +# AC_DEFUN(macroname, ...) +# When macroname is `['-quoted , we accept any character in the name, +# except `]'. Otherwise macroname stops on the first `]', `,', `)', +# or `\n' encountered. +my $ac_defun_rx = + "(?:AU_ALIAS|A[CU]_DEFUN|AC_DEFUN_ONCE)\\((?:\\[([^]]+)\\]|([^],)\n]+))"; + +# Matches an AC_REQUIRE line. +my $ac_require_rx = "AC_REQUIRE\\((?:\\[([^]]+)\\]|([^],)\n]+))\\)"; + +# Matches an m4_include line. +my $m4_include_rx = "(m4_|m4_s|s)include\\((?:\\[([^]]+)\\]|([^],)\n]+))\\)"; + +# Match a serial number. +my $serial_line_rx = '^#\s*serial\s+(\S*)'; +my $serial_number_rx = '^\d+(?:\.\d+)*$'; + +# Autoconf version +# Set by trace_used_macros. +my $ac_version; + +# If set, names a temporary file that must be erased on abnormal exit. +my $erase_me; + +################################################################ + +# Erase temporary file ERASE_ME. +sub unlink_tmp +{ + if (defined $erase_me && -e $erase_me && !unlink ($erase_me)) + { + fatal "could not remove `$erase_me': $!"; + } + undef $erase_me; +} + +$SIG{'INT'} = $SIG{'TERM'} = $SIG{'QUIT'} = $SIG{'HUP'} = 'unlink_tmp'; +END { unlink_tmp } + +# Check macros in acinclude.m4. If one is not used, warn. +sub check_acinclude () +{ + foreach my $key (keys %map) + { + # FIXME: should print line number of acinclude.m4. + msg ('syntax', "warning: macro `$key' defined in " + . "acinclude.m4 but never used") + if $map{$key} eq 'acinclude.m4' && ! exists $macro_seen{$key}; + } +} + +sub reset_maps () +{ + $greatest_mtime = 0; + %macro_seen = (); + @file_order = (); + %map = (); + %map_traced_defs = (); + %file_contents = (); + %file_type = (); + %file_includes = (); + %file_added = (); + %scanned_configure_dep = (); + %invmap = (); + %serial = (); + undef &search; +} + +# install_file ($SRC, $DEST) +sub install_file ($$) +{ + my ($src, $dest) = @_; + my $diff_dest; + + if ($force_output + || !exists $file_contents{$dest} + || $file_contents{$src} ne $file_contents{$dest}) + { + if (-e $dest) + { + msg 'note', "overwriting `$dest' with `$src'"; + $diff_dest = $dest; + } + else + { + msg 'note', "installing `$dest' from `$src'"; + } + + if (@diff_command) + { + if (! defined $diff_dest) + { + # $dest does not exist. We create an empty one just to + # run diff, and we erase it afterward. Using the real + # the destination file (rather than a temporary file) is + # good when diff is run with options that display the + # file name. + # + # If creating $dest fails, fall back to /dev/null. At + # least one diff implementation (Tru64's) cannot deal + # with /dev/null. However working around this is not + # worth the trouble since nobody run aclocal on a + # read-only tree anyway. + $erase_me = $dest; + my $f = new IO::File "> $dest"; + if (! defined $f) + { + undef $erase_me; + $diff_dest = '/dev/null'; + } + else + { + $diff_dest = $dest; + $f->close; + } + } + my @cmd = (@diff_command, $diff_dest, $src); + $! = 0; + verb "running: @cmd"; + my $res = system (@cmd); + Automake::FileUtils::handle_exec_errors "@cmd", 1 + if $res; + unlink_tmp; + } + elsif (!$dry_run) + { + xsystem ('cp', $src, $dest); + } + } +} + +# Compare two lists of numbers. +sub list_compare (\@\@) +{ + my @l = @{$_[0]}; + my @r = @{$_[1]}; + while (1) + { + if (0 == @l) + { + return (0 == @r) ? 0 : -1; + } + elsif (0 == @r) + { + return 1; + } + elsif ($l[0] < $r[0]) + { + return -1; + } + elsif ($l[0] > $r[0]) + { + return 1; + } + shift @l; + shift @r; + } +} + +################################################################ + +# scan_m4_dirs($TYPE, @DIRS) +# -------------------------- +# Scan all M4 files installed in @DIRS for new macro definitions. +# Register each file as of type $TYPE (one of the FT_* constants). +sub scan_m4_dirs ($@) +{ + my ($type, @dirlist) = @_; + + foreach my $m4dir (@dirlist) + { + if (! opendir (DIR, $m4dir)) + { + fatal "couldn't open directory `$m4dir': $!"; + } + + # We reverse the directory contents so that foo2.m4 gets + # used in preference to foo1.m4. + foreach my $file (reverse sort grep (! /^\./, readdir (DIR))) + { + # Only examine .m4 files. + next unless $file =~ /\.m4$/; + + # Skip some files when running out of srcdir. + next if $file eq 'aclocal.m4'; + + my $fullfile = File::Spec->canonpath ("$m4dir/$file"); + &scan_file ($type, $fullfile, 'aclocal'); + } + closedir (DIR); + } +} + +# Scan all the installed m4 files and construct a map. +sub scan_m4_files () +{ + # First, scan configure.ac. It may contain macro definitions, + # or may include other files that define macros. + &scan_file (FT_USER, $configure_ac, 'aclocal'); + + # Then, scan acinclude.m4 if it exists. + if (-f 'acinclude.m4') + { + &scan_file (FT_USER, 'acinclude.m4', 'aclocal'); + } + + # Finally, scan all files in our search paths. + scan_m4_dirs (FT_USER, @user_includes); + scan_m4_dirs (FT_AUTOMAKE, @automake_includes); + scan_m4_dirs (FT_SYSTEM, @system_includes); + + # Construct a new function that does the searching. We use a + # function (instead of just evaluating $search in the loop) so that + # "die" is correctly and easily propagated if run. + my $search = "sub search {\nmy \$found = 0;\n"; + foreach my $key (reverse sort keys %map) + { + $search .= ('if (/\b\Q' . $key . '\E(?!\w)/) { & add_macro ("' . $key + . '"); $found = 1; }' . "\n"); + } + $search .= "return \$found;\n};\n"; + eval $search; + prog_error "$@\n search is $search" if $@; +} + +################################################################ + +# Add a macro to the output. +sub add_macro ($) +{ + my ($macro) = @_; + + # Ignore unknown required macros. Either they are not really + # needed (e.g., a conditional AC_REQUIRE), in which case aclocal + # should be quiet, or they are needed and Autoconf itself will + # complain when we trace for macro usage later. + return unless defined $map{$macro}; + + verb "saw macro $macro"; + $macro_seen{$macro} = 1; + &add_file ($map{$macro}); +} + +# scan_configure_dep ($file) +# -------------------------- +# Scan a configure dependency (configure.ac, or separate m4 files) +# for uses of known macros and AC_REQUIREs of possibly unknown macros. +# Recursively scan m4_included files. +sub scan_configure_dep ($) +{ + my ($file) = @_; + # Do not scan a file twice. + return () + if exists $scanned_configure_dep{$file}; + $scanned_configure_dep{$file} = 1; + + my $mtime = mtime $file; + $greatest_mtime = $mtime if $greatest_mtime < $mtime; + + my $contents = exists $file_contents{$file} ? + $file_contents{$file} : contents $file; + + my $line = 0; + my @rlist = (); + my @ilist = (); + foreach (split ("\n", $contents)) + { + ++$line; + # Remove comments from current line. + s/\bdnl\b.*$//; + s/\#.*$//; + # Avoid running all the following regexes on white lines. + next if /^\s*$/; + + while (/$m4_include_rx/go) + { + my $ifile = $2 || $3; + # Skip missing `sinclude'd files. + next if $1 ne 'm4_' && ! -f $ifile; + push @ilist, $ifile; + } + + while (/$ac_require_rx/go) + { + push (@rlist, $1 || $2); + } + + # The search function is constructed dynamically by + # scan_m4_files. The last parenthetical match makes sure we + # don't match things that look like macro assignments or + # AC_SUBSTs. + if (! &search && /(^|\s+)(AM_[A-Z0-9_]+)($|[^\]\)=A-Z0-9_])/) + { + # Macro not found, but AM_ prefix found. + # Make this just a warning, because we do not know whether + # the macro is actually used (it could be called conditionally). + msg ('unsupported', "$file:$line", + "warning: macro `$2' not found in library"); + } + } + + add_macro ($_) foreach (@rlist); + &scan_configure_dep ($_) foreach @ilist; +} + +# add_file ($FILE) +# ---------------- +# Add $FILE to output. +sub add_file ($) +{ + my ($file) = @_; + + # Only add a file once. + return if ($file_added{$file}); + $file_added{$file} = 1; + + scan_configure_dep $file; +} + +# Point to the documentation for underquoted AC_DEFUN only once. +my $underquoted_manual_once = 0; + +# scan_file ($TYPE, $FILE, $WHERE) +# -------------------------------- +# Scan a single M4 file ($FILE), and all files it includes. +# Return the list of included files. +# $TYPE is one of FT_USER, FT_AUTOMAKE, or FT_SYSTEM, depending +# on where the file comes from. +# $WHERE is the location to use in the diagnostic if the file +# does not exist. +sub scan_file ($$$) +{ + my ($type, $file, $where) = @_; + my $basename = basename $file; + + # Do not scan the same file twice. + return @{$file_includes{$file}} if exists $file_includes{$file}; + # Prevent potential infinite recursion (if two files include each other). + return () if exists $file_contents{$file}; + + unshift @file_order, $file; + + $file_type{$file} = $type; + + fatal "$where: file `$file' does not exist" if ! -e $file; + + my $fh = new Automake::XFile $file; + my $contents = ''; + my @inc_files = (); + my %inc_lines = (); + + my $defun_seen = 0; + my $serial_seen = 0; + my $serial_older = 0; + + while ($_ = $fh->getline) + { + # Ignore `##' lines. + next if /^##/; + + $contents .= $_; + my $line = $_; + + if ($line =~ /$serial_line_rx/go) + { + my $number = $1; + if ($number !~ /$serial_number_rx/go) + { + msg ('syntax', "$file:$.", + "warning: ill-formed serial number `$number', " + . "expecting a version string with only digits and dots"); + } + elsif ($defun_seen) + { + # aclocal removes all definitions from M4 file with the + # same basename if a greater serial number is found. + # Encountering a serial after some macros will undefine + # these macros... + msg ('syntax', "$file:$.", + 'the serial number must appear before any macro definition'); + } + # We really care about serials only for non-automake macros + # and when --install is used. But the above diagnostics are + # made regardless of this, because not using --install is + # not a reason not the fix macro files. + elsif ($install && $type != FT_AUTOMAKE) + { + $serial_seen = 1; + my @new = split (/\./, $number); + + verb "$file:$.: serial $number"; + + if (!exists $serial{$basename} + || list_compare (@new, @{$serial{$basename}}) > 0) + { + # Delete any definition we knew from the old macro. + foreach my $def (@{$invmap{$basename}}) + { + verb "$file:$.: ignoring previous definition of $def"; + delete $map{$def}; + } + $invmap{$basename} = []; + $serial{$basename} = \@new; + } + else + { + $serial_older = 1; + } + } + } + + # Remove comments from current line. + # Do not do it earlier, because the serial line is a comment. + $line =~ s/\bdnl\b.*$//; + $line =~ s/\#.*$//; + + while ($line =~ /$ac_defun_rx/go) + { + $defun_seen = 1; + if (! defined $1) + { + msg ('syntax', "$file:$.", "warning: underquoted definition of $2" + . "\n run info '(automake)Extending aclocal'\n" + . " or see http://sources.redhat.com/automake/" + . "automake.html#Extending-aclocal") + unless $underquoted_manual_once; + $underquoted_manual_once = 1; + } + + # If this macro does not have a serial and we have already + # seen a macro with the same basename earlier, we should + # ignore the macro (don't exit immediately so we can still + # diagnose later #serial numbers and underquoted macros). + $serial_older ||= ($type != FT_AUTOMAKE + && !$serial_seen && exists $serial{$basename}); + + my $macro = $1 || $2; + if (!$serial_older && !defined $map{$macro}) + { + verb "found macro $macro in $file: $."; + $map{$macro} = $file; + push @{$invmap{$basename}}, $macro; + } + else + { + # Note: we used to give an error here if we saw a + # duplicated macro. However, this turns out to be + # extremely unpopular. It causes actual problems which + # are hard to work around, especially when you must + # mix-and-match tool versions. + verb "ignoring macro $macro in $file: $."; + } + } + + while ($line =~ /$m4_include_rx/go) + { + my $ifile = $2 || $3; + # Skip missing `sinclude'd files. + next if $1 ne 'm4_' && ! -f $ifile; + push (@inc_files, $ifile); + $inc_lines{$ifile} = $.; + } + } + + # Ignore any file that has an old serial (or no serial if we know + # another one with a serial). + return () + if ($serial_older || + ($type != FT_AUTOMAKE && !$serial_seen && exists $serial{$basename})); + + $file_contents{$file} = $contents; + + # For some reason I don't understand, it does not work + # to do `map { scan_file ($_, ...) } @inc_files' below. + # With Perl 5.8.2 it undefines @inc_files. + my @copy = @inc_files; + my @all_inc_files = (@inc_files, + map { scan_file ($type, $_, + "$file:$inc_lines{$_}") } @copy); + $file_includes{$file} = \@all_inc_files; + return @all_inc_files; +} + +# strip_redundant_includes (%FILES) +# --------------------------------- +# Each key in %FILES is a file that must be present in the output. +# However some of these files might already include other files in %FILES, +# so there is no point in including them another time. +# This removes items of %FILES which are already included by another file. +sub strip_redundant_includes (%) +{ + my %files = @_; + + # Always include acinclude.m4, even if it does not appear to be used. + $files{'acinclude.m4'} = 1 if -f 'acinclude.m4'; + # File included by $configure_ac are redundant. + $files{$configure_ac} = 1; + + # Files at the end of @file_order should override those at the beginning, + # so it is important to preserve these trailing files. We can remove + # a file A if it is going to be output before a file B that includes + # file A, not the converse. + foreach my $file (reverse @file_order) + { + next unless exists $files{$file}; + foreach my $ifile (@{$file_includes{$file}}) + { + next unless exists $files{$ifile}; + delete $files{$ifile}; + verb "$ifile is already included by $file"; + } + } + + # configure.ac is implicitly included. + delete $files{$configure_ac}; + + return %files; +} + +sub trace_used_macros () +{ + my %files = map { $map{$_} => 1 } keys %macro_seen; + %files = strip_redundant_includes %files; + + my $traces = ($ENV{AUTOM4TE} || 'autom4te'); + $traces .= " --language Autoconf-without-aclocal-m4 "; + # All candidate files. + $traces .= join (' ', grep { exists $files{$_} } @file_order) . " "; + # All candidate macros. + $traces .= join (' ', + (map { "--trace='$_:\$f::\$n::\$1'" } + ('AC_DEFUN', + 'AC_DEFUN_ONCE', + 'AU_DEFUN', + '_AM_AUTOCONF_VERSION')), + # Do not trace $1 for all other macros as we do + # not need it and it might contains harmful + # characters (like newlines). + (map { "--trace='$_:\$f::\$n'" } (keys %macro_seen))); + + verb "running $traces $configure_ac"; + + my $tracefh = new Automake::XFile ("$traces $configure_ac |"); + + my %traced = (); + + while ($_ = $tracefh->getline) + { + chomp; + my ($file, $macro, $arg1) = split (/::/); + + $traced{$macro} = 1 if exists $macro_seen{$macro}; + + $map_traced_defs{$arg1} = $file + if ($macro eq 'AC_DEFUN' + || $macro eq 'AC_DEFUN_ONCE' + || $macro eq 'AU_DEFUN'); + + $ac_version = $arg1 if $macro eq '_AM_AUTOCONF_VERSION'; + } + + $tracefh->close; + + return %traced; +} + +sub scan_configure () +{ + # Make sure we include acinclude.m4 if it exists. + if (-f 'acinclude.m4') + { + add_file ('acinclude.m4'); + } + scan_configure_dep ($configure_ac); +} + +################################################################ + +# Write output. +# Return 0 iff some files were installed locally. +sub write_aclocal ($@) +{ + my ($output_file, @macros) = @_; + my $output = ''; + + my %files = (); + # Get the list of files containing definitions for the macros used. + # (Filter out unused macro definitions with $map_traced_defs. This + # can happen when an Autoconf macro is conditionally defined: + # aclocal sees the potential definition, but this definition is + # actually never processed and the Autoconf implementation is used + # instead.) + for my $m (@macros) + { + $files{$map{$m}} = 1 + if (exists $map_traced_defs{$m} + && $map{$m} eq $map_traced_defs{$m}); + } + # Do not explicitly include a file that is already indirectly included. + %files = strip_redundant_includes %files; + + my $installed = 0; + + for my $file (grep { exists $files{$_} } @file_order) + { + # Check the time stamp of this file, and of all files it includes. + for my $ifile ($file, @{$file_includes{$file}}) + { + my $mtime = mtime $ifile; + $greatest_mtime = $mtime if $greatest_mtime < $mtime; + } + + # If the file to add looks like outside the project, copy it + # to the output. The regex catches filenames starting with + # things like `/', `\', or `c:\'. + if ($file_type{$file} != FT_USER + || $file =~ m,^(?:\w:)?[\\/],) + { + if (!$install || $file_type{$file} != FT_SYSTEM) + { + # Copy the file into aclocal.m4. + $output .= $file_contents{$file} . "\n"; + } + else + { + # Install the file (and any file it includes). + my $dest; + for my $ifile (@{$file_includes{$file}}, $file) + { + $dest = "$user_includes[0]/" . basename $ifile; + verb "installing $ifile to $dest"; + install_file ($ifile, $dest); + } + $installed = 1; + } + } + else + { + # Otherwise, simply include the file. + $output .= "m4_include([$file])\n"; + } + } + + if ($installed) + { + verb "running aclocal anew, because some files were installed locally"; + return 0; + } + + # Nothing to output?! + # FIXME: Shouldn't we diagnose this? + return 1 if ! length ($output); + + if ($ac_version) + { + # Do not use "$output_file" here for the same reason we do not + # use it in the header below. autom4te will output the name of + # the file in the diagnostic anyway. + $output = "m4_if(m4_PACKAGE_VERSION, [$ac_version],, +[m4_fatal([this file was generated for autoconf $ac_version. +You have another version of autoconf. If you want to use that, +you should regenerate the build system entirely.], [63])]) + +$output"; + } + + # We used to print `# $output_file generated automatically etc.' But + # this creates spurious differences when using autoreconf. Autoreconf + # creates aclocal.m4t and then rename it to aclocal.m4, but the + # rebuild rules generated by Automake create aclocal.m4 directly -- + # this would gives two ways to get the same file, with a different + # name in the header. + $output = "# generated automatically by aclocal $VERSION -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +$output"; + + # We try not to update $output_file unless necessary, because + # doing so invalidate Autom4te's cache and therefore slows down + # tools called after aclocal. + # + # We need to overwrite $output_file in the following situations. + # * The --force option is in use. + # * One of the dependencies is younger. + # (Not updating $output_file in this situation would cause + # make to call aclocal in loop.) + # * The contents of the current file are different from what + # we have computed. + if (!$force_output + && $greatest_mtime < mtime ($output_file) + && $output eq contents ($output_file)) + { + verb "$output_file unchanged"; + return 1; + } + + verb "writing $output_file"; + + if (!$dry_run) + { + if (-e $output_file && !unlink $output_file) + { + fatal "could not remove `$output_file': $!"; + } + my $out = new Automake::XFile "> $output_file"; + print $out $output; + } + return 1; +} + +################################################################ + +# Print usage and exit. +sub usage ($) +{ + my ($status) = @_; + + print "Usage: aclocal [OPTIONS] ... + +Generate `aclocal.m4' by scanning `configure.ac' or `configure.in' + +Options: + --acdir=DIR directory holding config files (for debugging) + --diff[=COMMAND] run COMMAND [diff -u] on M4 files that would be + changed (implies --install and --dry-run) + --dry-run pretend to, but do not actually update any file + --force always update output file + --help print this help, then exit + -I DIR add directory to search list for .m4 files + --install copy third-party files to the first -I directory + --output=FILE put output in FILE (default aclocal.m4) + --print-ac-dir print name of directory holding m4 files, then exit + --verbose don't be silent + --version print version number, then exit + -W, --warnings=CATEGORY report the warnings falling in CATEGORY + +Warning categories include: + `syntax' dubious syntactic constructs (default) + `unsupported' unknown macros (default) + `all' all the warnings (default) + `no-CATEGORY' turn off warnings in CATEGORY + `none' turn off all the warnings + `error' treat warnings as errors + +Report bugs to .\n"; + + exit $status; +} + +# Print version and exit. +sub version() +{ + print < + and Alexandre Duret-Lutz . + +Copyright (C) 2006 Free Software Foundation, Inc. +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +EOF + exit 0; +} + +# Parse command line. +sub parse_arguments () +{ + my $print_and_exit = 0; + my $diff_command; + + my %cli_options = + ( + 'acdir=s' => sub # Setting --acdir overrides both the + { # automake (versioned) directory and the + # public (unversioned) system directory. + @automake_includes = (); + @system_includes = ($_[1]) + }, + 'diff:s' => \$diff_command, + 'dry-run' => \$dry_run, + 'force' => \$force_output, + 'I=s' => \@user_includes, + 'install' => \$install, + 'output=s' => \$output_file, + 'print-ac-dir' => \$print_and_exit, + 'verbose' => sub { setup_channel 'verb', silent => 0; }, + 'W|warnings=s' => \&parse_warnings, + ); + use Getopt::Long; + Getopt::Long::config ("bundling", "pass_through"); + + # See if --version or --help is used. We want to process these before + # anything else because the GNU Coding Standards require us to + # `exit 0' after processing these options, and we can't guarantee this + # if we treat other options first. (Handling other options first + # could produce error diagnostics, and in this condition it is + # confusing if aclocal does `exit 0'.) + my %cli_options_1st_pass = + ( + 'version' => \&version, + 'help' => sub { usage(0); }, + # Recognize all other options (and their arguments) but do nothing. + map { $_ => sub {} } (keys %cli_options) + ); + my @ARGV_backup = @ARGV; + Getopt::Long::GetOptions %cli_options_1st_pass + or exit 1; + @ARGV = @ARGV_backup; + + # Now *really* process the options. This time we know that --help + # and --version are not present, but we specify them nonetheless so + # that ambiguous abbreviation are diagnosed. + Getopt::Long::GetOptions %cli_options, 'version' => sub {}, 'help' => sub {} + or exit 1; + + if (@ARGV) + { + my %argopts; + for my $k (keys %cli_options) + { + if ($k =~ /(.*)=s$/) + { + map { $argopts{(length ($_) == 1) + ? "-$_" : "--$_" } = 1; } (split (/\|/, $1)); + } + } + if (exists $argopts{$ARGV[0]}) + { + fatal ("option `$ARGV[0]' requires an argument\n" + . "Try `$0 --help' for more information."); + } + else + { + fatal ("unrecognized option `$ARGV[0]'\n" + . "Try `$0 --help' for more information."); + } + } + + if ($print_and_exit) + { + print "@system_includes\n"; + exit 0; + } + + if (defined $diff_command) + { + $diff_command = 'diff -u' if $diff_command eq ''; + @diff_command = split (' ', $diff_command); + $install = 1; + $dry_run = 1; + } + + if ($install && !@user_includes) + { + fatal ("--install should copy macros in the directory indicated by the" + . "\nfirst -I option, but no -I was supplied."); + } + + if (! -d $system_includes[0]) + { + # By default $(datadir)/aclocal doesn't exist. We don't want to + # get an error in the case where we are searching the default + # directory and it hasn't been created. (We know + # @system_includes has its default value if @automake_includes + # is not empty, because --acdir is the only way to change this.) + @system_includes = () if @automake_includes; + } + else + { + # Finally, adds any directory listed in the `dirlist' file. + if (open (DIRLIST, "$system_includes[0]/dirlist")) + { + while () + { + # Ignore '#' lines. + next if /^#/; + # strip off newlines and end-of-line comments + s/\s*\#.*$//; + chomp; + foreach my $dir (glob) + { + push (@system_includes, $dir) if -d $dir; + } + } + close (DIRLIST); + } + } +} + +################################################################ + +parse_WARNINGS; # Parse the WARNINGS environment variable. +parse_arguments; +$configure_ac = require_configure_ac; + +# We may have to rerun aclocal if some file have been installed, but +# it should not happen more than once. The reason we must run again +# is that once the file has been moved from /usr/share/aclocal/ to the +# local m4/ directory it appears at a new place in the search path, +# hence it should be output at a different position in aclocal.m4. If +# we did not rerun aclocal, the next run of aclocal would produce a +# different aclocal.m4. +my $loop = 0; +while (1) + { + ++$loop; + prog_error "Too many loops." if $loop > 2; + + reset_maps; + scan_m4_files; + scan_configure; + last if $exit_code; + my %macro_traced = trace_used_macros; + last if write_aclocal ($output_file, keys %macro_traced); + last if $dry_run; + } +check_acinclude; + +exit $exit_code; + +### 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: diff --git a/bin/aclocal-1.10 b/bin/aclocal-1.10 new file mode 100644 index 00000000..e728ee45 --- /dev/null +++ b/bin/aclocal-1.10 @@ -0,0 +1,1072 @@ +#!/bin/perl -w +# -*- perl -*- +# Generated from aclocal.in; do not edit by hand. + +eval 'case $# in 0) exec /bin/perl -S "$0";; *) exec /bin/perl -S "$0" "$@";; esac' + if 0; + +# aclocal - create aclocal.m4 by scanning configure.ac + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006 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 2, 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, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + +# Written by Tom Tromey , and +# Alexandre Duret-Lutz . + +BEGIN +{ + my $perllibdir = $ENV{'perllibdir'} || '/usr/share/automake-1.10'; + unshift @INC, (split ':', $perllibdir); +} + +use strict; + +use Automake::Config; +use Automake::General; +use Automake::Configure_ac; +use Automake::Channels; +use Automake::ChannelDefs; +use Automake::XFile; +use Automake::FileUtils; +use File::Basename; +use File::stat; +use Cwd; + +# Some globals. + +# Include paths for searching macros. We search macros in this order: +# user-supplied directories first, then the directory containing the +# automake macros, and finally the system-wide directories for +# third-party macro. @user_includes can be augmented with -I. +# @system_includes can be augmented with the `dirlist' file. Also +# --acdir will reset both @automake_includes and @system_includes. +my @user_includes = (); +my @automake_includes = ("/usr/share/aclocal-$APIVERSION"); +my @system_includes = ('/usr/share/aclocal'); + +# Whether we should copy M4 file in $user_includes[0]. +my $install = 0; + +# --diff +my @diff_command; + +# --dry-run +my $dry_run = 0; + +# configure.ac or configure.in. +my $configure_ac; + +# Output file name. +my $output_file = 'aclocal.m4'; + +# Option --force. +my $force_output = 0; + +# Modification time of the youngest dependency. +my $greatest_mtime = 0; + +# Which macros have been seen. +my %macro_seen = (); + +# Remember the order into which we scanned the files. +# It's important to output the contents of aclocal.m4 in the opposite order. +# (Definitions in first files we have scanned should override those from +# later files. So they must appear last in the output.) +my @file_order = (); + +# Map macro names to file names. +my %map = (); + +# Ditto, but records the last definition of each macro as returned by --trace. +my %map_traced_defs = (); + +# Map basenames to macro names. +my %invmap = (); + +# Map file names to file contents. +my %file_contents = (); + +# Map file names to file types. +my %file_type = (); +use constant FT_USER => 1; +use constant FT_AUTOMAKE => 2; +use constant FT_SYSTEM => 3; + +# Map file names to included files (transitively closed). +my %file_includes = (); + +# Files which have already been added. +my %file_added = (); + +# Files that have already been scanned. +my %scanned_configure_dep = (); + +# Serial numbers, for files that have one. +# The key is the basename of the file, +# the value is the serial number represented as a list. +my %serial = (); + +# Matches a macro definition. +# AC_DEFUN([macroname], ...) +# or +# AC_DEFUN(macroname, ...) +# When macroname is `['-quoted , we accept any character in the name, +# except `]'. Otherwise macroname stops on the first `]', `,', `)', +# or `\n' encountered. +my $ac_defun_rx = + "(?:AU_ALIAS|A[CU]_DEFUN|AC_DEFUN_ONCE)\\((?:\\[([^]]+)\\]|([^],)\n]+))"; + +# Matches an AC_REQUIRE line. +my $ac_require_rx = "AC_REQUIRE\\((?:\\[([^]]+)\\]|([^],)\n]+))\\)"; + +# Matches an m4_include line. +my $m4_include_rx = "(m4_|m4_s|s)include\\((?:\\[([^]]+)\\]|([^],)\n]+))\\)"; + +# Match a serial number. +my $serial_line_rx = '^#\s*serial\s+(\S*)'; +my $serial_number_rx = '^\d+(?:\.\d+)*$'; + +# Autoconf version +# Set by trace_used_macros. +my $ac_version; + +# If set, names a temporary file that must be erased on abnormal exit. +my $erase_me; + +################################################################ + +# Erase temporary file ERASE_ME. +sub unlink_tmp +{ + if (defined $erase_me && -e $erase_me && !unlink ($erase_me)) + { + fatal "could not remove `$erase_me': $!"; + } + undef $erase_me; +} + +$SIG{'INT'} = $SIG{'TERM'} = $SIG{'QUIT'} = $SIG{'HUP'} = 'unlink_tmp'; +END { unlink_tmp } + +# Check macros in acinclude.m4. If one is not used, warn. +sub check_acinclude () +{ + foreach my $key (keys %map) + { + # FIXME: should print line number of acinclude.m4. + msg ('syntax', "warning: macro `$key' defined in " + . "acinclude.m4 but never used") + if $map{$key} eq 'acinclude.m4' && ! exists $macro_seen{$key}; + } +} + +sub reset_maps () +{ + $greatest_mtime = 0; + %macro_seen = (); + @file_order = (); + %map = (); + %map_traced_defs = (); + %file_contents = (); + %file_type = (); + %file_includes = (); + %file_added = (); + %scanned_configure_dep = (); + %invmap = (); + %serial = (); + undef &search; +} + +# install_file ($SRC, $DEST) +sub install_file ($$) +{ + my ($src, $dest) = @_; + my $diff_dest; + + if ($force_output + || !exists $file_contents{$dest} + || $file_contents{$src} ne $file_contents{$dest}) + { + if (-e $dest) + { + msg 'note', "overwriting `$dest' with `$src'"; + $diff_dest = $dest; + } + else + { + msg 'note', "installing `$dest' from `$src'"; + } + + if (@diff_command) + { + if (! defined $diff_dest) + { + # $dest does not exist. We create an empty one just to + # run diff, and we erase it afterward. Using the real + # the destination file (rather than a temporary file) is + # good when diff is run with options that display the + # file name. + # + # If creating $dest fails, fall back to /dev/null. At + # least one diff implementation (Tru64's) cannot deal + # with /dev/null. However working around this is not + # worth the trouble since nobody run aclocal on a + # read-only tree anyway. + $erase_me = $dest; + my $f = new IO::File "> $dest"; + if (! defined $f) + { + undef $erase_me; + $diff_dest = '/dev/null'; + } + else + { + $diff_dest = $dest; + $f->close; + } + } + my @cmd = (@diff_command, $diff_dest, $src); + $! = 0; + verb "running: @cmd"; + my $res = system (@cmd); + Automake::FileUtils::handle_exec_errors "@cmd", 1 + if $res; + unlink_tmp; + } + elsif (!$dry_run) + { + xsystem ('cp', $src, $dest); + } + } +} + +# Compare two lists of numbers. +sub list_compare (\@\@) +{ + my @l = @{$_[0]}; + my @r = @{$_[1]}; + while (1) + { + if (0 == @l) + { + return (0 == @r) ? 0 : -1; + } + elsif (0 == @r) + { + return 1; + } + elsif ($l[0] < $r[0]) + { + return -1; + } + elsif ($l[0] > $r[0]) + { + return 1; + } + shift @l; + shift @r; + } +} + +################################################################ + +# scan_m4_dirs($TYPE, @DIRS) +# -------------------------- +# Scan all M4 files installed in @DIRS for new macro definitions. +# Register each file as of type $TYPE (one of the FT_* constants). +sub scan_m4_dirs ($@) +{ + my ($type, @dirlist) = @_; + + foreach my $m4dir (@dirlist) + { + if (! opendir (DIR, $m4dir)) + { + fatal "couldn't open directory `$m4dir': $!"; + } + + # We reverse the directory contents so that foo2.m4 gets + # used in preference to foo1.m4. + foreach my $file (reverse sort grep (! /^\./, readdir (DIR))) + { + # Only examine .m4 files. + next unless $file =~ /\.m4$/; + + # Skip some files when running out of srcdir. + next if $file eq 'aclocal.m4'; + + my $fullfile = File::Spec->canonpath ("$m4dir/$file"); + &scan_file ($type, $fullfile, 'aclocal'); + } + closedir (DIR); + } +} + +# Scan all the installed m4 files and construct a map. +sub scan_m4_files () +{ + # First, scan configure.ac. It may contain macro definitions, + # or may include other files that define macros. + &scan_file (FT_USER, $configure_ac, 'aclocal'); + + # Then, scan acinclude.m4 if it exists. + if (-f 'acinclude.m4') + { + &scan_file (FT_USER, 'acinclude.m4', 'aclocal'); + } + + # Finally, scan all files in our search paths. + scan_m4_dirs (FT_USER, @user_includes); + scan_m4_dirs (FT_AUTOMAKE, @automake_includes); + scan_m4_dirs (FT_SYSTEM, @system_includes); + + # Construct a new function that does the searching. We use a + # function (instead of just evaluating $search in the loop) so that + # "die" is correctly and easily propagated if run. + my $search = "sub search {\nmy \$found = 0;\n"; + foreach my $key (reverse sort keys %map) + { + $search .= ('if (/\b\Q' . $key . '\E(?!\w)/) { & add_macro ("' . $key + . '"); $found = 1; }' . "\n"); + } + $search .= "return \$found;\n};\n"; + eval $search; + prog_error "$@\n search is $search" if $@; +} + +################################################################ + +# Add a macro to the output. +sub add_macro ($) +{ + my ($macro) = @_; + + # Ignore unknown required macros. Either they are not really + # needed (e.g., a conditional AC_REQUIRE), in which case aclocal + # should be quiet, or they are needed and Autoconf itself will + # complain when we trace for macro usage later. + return unless defined $map{$macro}; + + verb "saw macro $macro"; + $macro_seen{$macro} = 1; + &add_file ($map{$macro}); +} + +# scan_configure_dep ($file) +# -------------------------- +# Scan a configure dependency (configure.ac, or separate m4 files) +# for uses of known macros and AC_REQUIREs of possibly unknown macros. +# Recursively scan m4_included files. +sub scan_configure_dep ($) +{ + my ($file) = @_; + # Do not scan a file twice. + return () + if exists $scanned_configure_dep{$file}; + $scanned_configure_dep{$file} = 1; + + my $mtime = mtime $file; + $greatest_mtime = $mtime if $greatest_mtime < $mtime; + + my $contents = exists $file_contents{$file} ? + $file_contents{$file} : contents $file; + + my $line = 0; + my @rlist = (); + my @ilist = (); + foreach (split ("\n", $contents)) + { + ++$line; + # Remove comments from current line. + s/\bdnl\b.*$//; + s/\#.*$//; + # Avoid running all the following regexes on white lines. + next if /^\s*$/; + + while (/$m4_include_rx/go) + { + my $ifile = $2 || $3; + # Skip missing `sinclude'd files. + next if $1 ne 'm4_' && ! -f $ifile; + push @ilist, $ifile; + } + + while (/$ac_require_rx/go) + { + push (@rlist, $1 || $2); + } + + # The search function is constructed dynamically by + # scan_m4_files. The last parenthetical match makes sure we + # don't match things that look like macro assignments or + # AC_SUBSTs. + if (! &search && /(^|\s+)(AM_[A-Z0-9_]+)($|[^\]\)=A-Z0-9_])/) + { + # Macro not found, but AM_ prefix found. + # Make this just a warning, because we do not know whether + # the macro is actually used (it could be called conditionally). + msg ('unsupported', "$file:$line", + "warning: macro `$2' not found in library"); + } + } + + add_macro ($_) foreach (@rlist); + &scan_configure_dep ($_) foreach @ilist; +} + +# add_file ($FILE) +# ---------------- +# Add $FILE to output. +sub add_file ($) +{ + my ($file) = @_; + + # Only add a file once. + return if ($file_added{$file}); + $file_added{$file} = 1; + + scan_configure_dep $file; +} + +# Point to the documentation for underquoted AC_DEFUN only once. +my $underquoted_manual_once = 0; + +# scan_file ($TYPE, $FILE, $WHERE) +# -------------------------------- +# Scan a single M4 file ($FILE), and all files it includes. +# Return the list of included files. +# $TYPE is one of FT_USER, FT_AUTOMAKE, or FT_SYSTEM, depending +# on where the file comes from. +# $WHERE is the location to use in the diagnostic if the file +# does not exist. +sub scan_file ($$$) +{ + my ($type, $file, $where) = @_; + my $basename = basename $file; + + # Do not scan the same file twice. + return @{$file_includes{$file}} if exists $file_includes{$file}; + # Prevent potential infinite recursion (if two files include each other). + return () if exists $file_contents{$file}; + + unshift @file_order, $file; + + $file_type{$file} = $type; + + fatal "$where: file `$file' does not exist" if ! -e $file; + + my $fh = new Automake::XFile $file; + my $contents = ''; + my @inc_files = (); + my %inc_lines = (); + + my $defun_seen = 0; + my $serial_seen = 0; + my $serial_older = 0; + + while ($_ = $fh->getline) + { + # Ignore `##' lines. + next if /^##/; + + $contents .= $_; + my $line = $_; + + if ($line =~ /$serial_line_rx/go) + { + my $number = $1; + if ($number !~ /$serial_number_rx/go) + { + msg ('syntax', "$file:$.", + "warning: ill-formed serial number `$number', " + . "expecting a version string with only digits and dots"); + } + elsif ($defun_seen) + { + # aclocal removes all definitions from M4 file with the + # same basename if a greater serial number is found. + # Encountering a serial after some macros will undefine + # these macros... + msg ('syntax', "$file:$.", + 'the serial number must appear before any macro definition'); + } + # We really care about serials only for non-automake macros + # and when --install is used. But the above diagnostics are + # made regardless of this, because not using --install is + # not a reason not the fix macro files. + elsif ($install && $type != FT_AUTOMAKE) + { + $serial_seen = 1; + my @new = split (/\./, $number); + + verb "$file:$.: serial $number"; + + if (!exists $serial{$basename} + || list_compare (@new, @{$serial{$basename}}) > 0) + { + # Delete any definition we knew from the old macro. + foreach my $def (@{$invmap{$basename}}) + { + verb "$file:$.: ignoring previous definition of $def"; + delete $map{$def}; + } + $invmap{$basename} = []; + $serial{$basename} = \@new; + } + else + { + $serial_older = 1; + } + } + } + + # Remove comments from current line. + # Do not do it earlier, because the serial line is a comment. + $line =~ s/\bdnl\b.*$//; + $line =~ s/\#.*$//; + + while ($line =~ /$ac_defun_rx/go) + { + $defun_seen = 1; + if (! defined $1) + { + msg ('syntax', "$file:$.", "warning: underquoted definition of $2" + . "\n run info '(automake)Extending aclocal'\n" + . " or see http://sources.redhat.com/automake/" + . "automake.html#Extending-aclocal") + unless $underquoted_manual_once; + $underquoted_manual_once = 1; + } + + # If this macro does not have a serial and we have already + # seen a macro with the same basename earlier, we should + # ignore the macro (don't exit immediately so we can still + # diagnose later #serial numbers and underquoted macros). + $serial_older ||= ($type != FT_AUTOMAKE + && !$serial_seen && exists $serial{$basename}); + + my $macro = $1 || $2; + if (!$serial_older && !defined $map{$macro}) + { + verb "found macro $macro in $file: $."; + $map{$macro} = $file; + push @{$invmap{$basename}}, $macro; + } + else + { + # Note: we used to give an error here if we saw a + # duplicated macro. However, this turns out to be + # extremely unpopular. It causes actual problems which + # are hard to work around, especially when you must + # mix-and-match tool versions. + verb "ignoring macro $macro in $file: $."; + } + } + + while ($line =~ /$m4_include_rx/go) + { + my $ifile = $2 || $3; + # Skip missing `sinclude'd files. + next if $1 ne 'm4_' && ! -f $ifile; + push (@inc_files, $ifile); + $inc_lines{$ifile} = $.; + } + } + + # Ignore any file that has an old serial (or no serial if we know + # another one with a serial). + return () + if ($serial_older || + ($type != FT_AUTOMAKE && !$serial_seen && exists $serial{$basename})); + + $file_contents{$file} = $contents; + + # For some reason I don't understand, it does not work + # to do `map { scan_file ($_, ...) } @inc_files' below. + # With Perl 5.8.2 it undefines @inc_files. + my @copy = @inc_files; + my @all_inc_files = (@inc_files, + map { scan_file ($type, $_, + "$file:$inc_lines{$_}") } @copy); + $file_includes{$file} = \@all_inc_files; + return @all_inc_files; +} + +# strip_redundant_includes (%FILES) +# --------------------------------- +# Each key in %FILES is a file that must be present in the output. +# However some of these files might already include other files in %FILES, +# so there is no point in including them another time. +# This removes items of %FILES which are already included by another file. +sub strip_redundant_includes (%) +{ + my %files = @_; + + # Always include acinclude.m4, even if it does not appear to be used. + $files{'acinclude.m4'} = 1 if -f 'acinclude.m4'; + # File included by $configure_ac are redundant. + $files{$configure_ac} = 1; + + # Files at the end of @file_order should override those at the beginning, + # so it is important to preserve these trailing files. We can remove + # a file A if it is going to be output before a file B that includes + # file A, not the converse. + foreach my $file (reverse @file_order) + { + next unless exists $files{$file}; + foreach my $ifile (@{$file_includes{$file}}) + { + next unless exists $files{$ifile}; + delete $files{$ifile}; + verb "$ifile is already included by $file"; + } + } + + # configure.ac is implicitly included. + delete $files{$configure_ac}; + + return %files; +} + +sub trace_used_macros () +{ + my %files = map { $map{$_} => 1 } keys %macro_seen; + %files = strip_redundant_includes %files; + + my $traces = ($ENV{AUTOM4TE} || 'autom4te'); + $traces .= " --language Autoconf-without-aclocal-m4 "; + # All candidate files. + $traces .= join (' ', grep { exists $files{$_} } @file_order) . " "; + # All candidate macros. + $traces .= join (' ', + (map { "--trace='$_:\$f::\$n::\$1'" } + ('AC_DEFUN', + 'AC_DEFUN_ONCE', + 'AU_DEFUN', + '_AM_AUTOCONF_VERSION')), + # Do not trace $1 for all other macros as we do + # not need it and it might contains harmful + # characters (like newlines). + (map { "--trace='$_:\$f::\$n'" } (keys %macro_seen))); + + verb "running $traces $configure_ac"; + + my $tracefh = new Automake::XFile ("$traces $configure_ac |"); + + my %traced = (); + + while ($_ = $tracefh->getline) + { + chomp; + my ($file, $macro, $arg1) = split (/::/); + + $traced{$macro} = 1 if exists $macro_seen{$macro}; + + $map_traced_defs{$arg1} = $file + if ($macro eq 'AC_DEFUN' + || $macro eq 'AC_DEFUN_ONCE' + || $macro eq 'AU_DEFUN'); + + $ac_version = $arg1 if $macro eq '_AM_AUTOCONF_VERSION'; + } + + $tracefh->close; + + return %traced; +} + +sub scan_configure () +{ + # Make sure we include acinclude.m4 if it exists. + if (-f 'acinclude.m4') + { + add_file ('acinclude.m4'); + } + scan_configure_dep ($configure_ac); +} + +################################################################ + +# Write output. +# Return 0 iff some files were installed locally. +sub write_aclocal ($@) +{ + my ($output_file, @macros) = @_; + my $output = ''; + + my %files = (); + # Get the list of files containing definitions for the macros used. + # (Filter out unused macro definitions with $map_traced_defs. This + # can happen when an Autoconf macro is conditionally defined: + # aclocal sees the potential definition, but this definition is + # actually never processed and the Autoconf implementation is used + # instead.) + for my $m (@macros) + { + $files{$map{$m}} = 1 + if (exists $map_traced_defs{$m} + && $map{$m} eq $map_traced_defs{$m}); + } + # Do not explicitly include a file that is already indirectly included. + %files = strip_redundant_includes %files; + + my $installed = 0; + + for my $file (grep { exists $files{$_} } @file_order) + { + # Check the time stamp of this file, and of all files it includes. + for my $ifile ($file, @{$file_includes{$file}}) + { + my $mtime = mtime $ifile; + $greatest_mtime = $mtime if $greatest_mtime < $mtime; + } + + # If the file to add looks like outside the project, copy it + # to the output. The regex catches filenames starting with + # things like `/', `\', or `c:\'. + if ($file_type{$file} != FT_USER + || $file =~ m,^(?:\w:)?[\\/],) + { + if (!$install || $file_type{$file} != FT_SYSTEM) + { + # Copy the file into aclocal.m4. + $output .= $file_contents{$file} . "\n"; + } + else + { + # Install the file (and any file it includes). + my $dest; + for my $ifile (@{$file_includes{$file}}, $file) + { + $dest = "$user_includes[0]/" . basename $ifile; + verb "installing $ifile to $dest"; + install_file ($ifile, $dest); + } + $installed = 1; + } + } + else + { + # Otherwise, simply include the file. + $output .= "m4_include([$file])\n"; + } + } + + if ($installed) + { + verb "running aclocal anew, because some files were installed locally"; + return 0; + } + + # Nothing to output?! + # FIXME: Shouldn't we diagnose this? + return 1 if ! length ($output); + + if ($ac_version) + { + # Do not use "$output_file" here for the same reason we do not + # use it in the header below. autom4te will output the name of + # the file in the diagnostic anyway. + $output = "m4_if(m4_PACKAGE_VERSION, [$ac_version],, +[m4_fatal([this file was generated for autoconf $ac_version. +You have another version of autoconf. If you want to use that, +you should regenerate the build system entirely.], [63])]) + +$output"; + } + + # We used to print `# $output_file generated automatically etc.' But + # this creates spurious differences when using autoreconf. Autoreconf + # creates aclocal.m4t and then rename it to aclocal.m4, but the + # rebuild rules generated by Automake create aclocal.m4 directly -- + # this would gives two ways to get the same file, with a different + # name in the header. + $output = "# generated automatically by aclocal $VERSION -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +$output"; + + # We try not to update $output_file unless necessary, because + # doing so invalidate Autom4te's cache and therefore slows down + # tools called after aclocal. + # + # We need to overwrite $output_file in the following situations. + # * The --force option is in use. + # * One of the dependencies is younger. + # (Not updating $output_file in this situation would cause + # make to call aclocal in loop.) + # * The contents of the current file are different from what + # we have computed. + if (!$force_output + && $greatest_mtime < mtime ($output_file) + && $output eq contents ($output_file)) + { + verb "$output_file unchanged"; + return 1; + } + + verb "writing $output_file"; + + if (!$dry_run) + { + if (-e $output_file && !unlink $output_file) + { + fatal "could not remove `$output_file': $!"; + } + my $out = new Automake::XFile "> $output_file"; + print $out $output; + } + return 1; +} + +################################################################ + +# Print usage and exit. +sub usage ($) +{ + my ($status) = @_; + + print "Usage: aclocal [OPTIONS] ... + +Generate `aclocal.m4' by scanning `configure.ac' or `configure.in' + +Options: + --acdir=DIR directory holding config files (for debugging) + --diff[=COMMAND] run COMMAND [diff -u] on M4 files that would be + changed (implies --install and --dry-run) + --dry-run pretend to, but do not actually update any file + --force always update output file + --help print this help, then exit + -I DIR add directory to search list for .m4 files + --install copy third-party files to the first -I directory + --output=FILE put output in FILE (default aclocal.m4) + --print-ac-dir print name of directory holding m4 files, then exit + --verbose don't be silent + --version print version number, then exit + -W, --warnings=CATEGORY report the warnings falling in CATEGORY + +Warning categories include: + `syntax' dubious syntactic constructs (default) + `unsupported' unknown macros (default) + `all' all the warnings (default) + `no-CATEGORY' turn off warnings in CATEGORY + `none' turn off all the warnings + `error' treat warnings as errors + +Report bugs to .\n"; + + exit $status; +} + +# Print version and exit. +sub version() +{ + print < + and Alexandre Duret-Lutz . + +Copyright (C) 2006 Free Software Foundation, Inc. +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +EOF + exit 0; +} + +# Parse command line. +sub parse_arguments () +{ + my $print_and_exit = 0; + my $diff_command; + + my %cli_options = + ( + 'acdir=s' => sub # Setting --acdir overrides both the + { # automake (versioned) directory and the + # public (unversioned) system directory. + @automake_includes = (); + @system_includes = ($_[1]) + }, + 'diff:s' => \$diff_command, + 'dry-run' => \$dry_run, + 'force' => \$force_output, + 'I=s' => \@user_includes, + 'install' => \$install, + 'output=s' => \$output_file, + 'print-ac-dir' => \$print_and_exit, + 'verbose' => sub { setup_channel 'verb', silent => 0; }, + 'W|warnings=s' => \&parse_warnings, + ); + use Getopt::Long; + Getopt::Long::config ("bundling", "pass_through"); + + # See if --version or --help is used. We want to process these before + # anything else because the GNU Coding Standards require us to + # `exit 0' after processing these options, and we can't guarantee this + # if we treat other options first. (Handling other options first + # could produce error diagnostics, and in this condition it is + # confusing if aclocal does `exit 0'.) + my %cli_options_1st_pass = + ( + 'version' => \&version, + 'help' => sub { usage(0); }, + # Recognize all other options (and their arguments) but do nothing. + map { $_ => sub {} } (keys %cli_options) + ); + my @ARGV_backup = @ARGV; + Getopt::Long::GetOptions %cli_options_1st_pass + or exit 1; + @ARGV = @ARGV_backup; + + # Now *really* process the options. This time we know that --help + # and --version are not present, but we specify them nonetheless so + # that ambiguous abbreviation are diagnosed. + Getopt::Long::GetOptions %cli_options, 'version' => sub {}, 'help' => sub {} + or exit 1; + + if (@ARGV) + { + my %argopts; + for my $k (keys %cli_options) + { + if ($k =~ /(.*)=s$/) + { + map { $argopts{(length ($_) == 1) + ? "-$_" : "--$_" } = 1; } (split (/\|/, $1)); + } + } + if (exists $argopts{$ARGV[0]}) + { + fatal ("option `$ARGV[0]' requires an argument\n" + . "Try `$0 --help' for more information."); + } + else + { + fatal ("unrecognized option `$ARGV[0]'\n" + . "Try `$0 --help' for more information."); + } + } + + if ($print_and_exit) + { + print "@system_includes\n"; + exit 0; + } + + if (defined $diff_command) + { + $diff_command = 'diff -u' if $diff_command eq ''; + @diff_command = split (' ', $diff_command); + $install = 1; + $dry_run = 1; + } + + if ($install && !@user_includes) + { + fatal ("--install should copy macros in the directory indicated by the" + . "\nfirst -I option, but no -I was supplied."); + } + + if (! -d $system_includes[0]) + { + # By default $(datadir)/aclocal doesn't exist. We don't want to + # get an error in the case where we are searching the default + # directory and it hasn't been created. (We know + # @system_includes has its default value if @automake_includes + # is not empty, because --acdir is the only way to change this.) + @system_includes = () if @automake_includes; + } + else + { + # Finally, adds any directory listed in the `dirlist' file. + if (open (DIRLIST, "$system_includes[0]/dirlist")) + { + while () + { + # Ignore '#' lines. + next if /^#/; + # strip off newlines and end-of-line comments + s/\s*\#.*$//; + chomp; + foreach my $dir (glob) + { + push (@system_includes, $dir) if -d $dir; + } + } + close (DIRLIST); + } + } +} + +################################################################ + +parse_WARNINGS; # Parse the WARNINGS environment variable. +parse_arguments; +$configure_ac = require_configure_ac; + +# We may have to rerun aclocal if some file have been installed, but +# it should not happen more than once. The reason we must run again +# is that once the file has been moved from /usr/share/aclocal/ to the +# local m4/ directory it appears at a new place in the search path, +# hence it should be output at a different position in aclocal.m4. If +# we did not rerun aclocal, the next run of aclocal would produce a +# different aclocal.m4. +my $loop = 0; +while (1) + { + ++$loop; + prog_error "Too many loops." if $loop > 2; + + reset_maps; + scan_m4_files; + scan_configure; + last if $exit_code; + my %macro_traced = trace_used_macros; + last if write_aclocal ($output_file, keys %macro_traced); + last if $dry_run; + } +check_acinclude; + +exit $exit_code; + +### 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: diff --git a/bin/autoconf b/bin/autoconf new file mode 100644 index 00000000..e8d91fa4 --- /dev/null +++ b/bin/autoconf @@ -0,0 +1,582 @@ +#! /bin/sh +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + + + +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +as_nl=' +' +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + { (exit 1); exit 1; } +fi + +# Work around bugs in pre-3.0 UWIN ksh. +for as_var in ENV MAIL MAILPATH +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# CDPATH. +$as_unset CDPATH + + +if test "x$CONFIG_SHELL" = x; then + if (eval ":") 2>/dev/null; then + as_have_required=yes +else + as_have_required=no +fi + + if test $as_have_required = yes && (eval ": +(as_func_return () { + (exit \$1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test \$exitcode = 0) || { (exit 1); exit 1; } +") 2> /dev/null; then + : +else + as_candidate_shells= + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + case $as_dir in + /*) + for as_base in sh bash ksh sh5; do + as_candidate_shells="$as_candidate_shells $as_dir/$as_base" + done;; + esac +done +IFS=$as_save_IFS + + + for as_shell in $as_candidate_shells $SHELL; do + # Try only shells that exist, to save several forks. + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { ("$as_shell") 2> /dev/null <<\_ASEOF +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + +: +_ASEOF +}; then + CONFIG_SHELL=$as_shell + as_have_required=yes + if { "$as_shell" 2> /dev/null <<\_ASEOF +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + +: +(as_func_return () { + (exit $1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = "$1" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test $exitcode = 0) || { (exit 1); exit 1; } + +_ASEOF +}; then + break +fi + +fi + + done + + if test "x$CONFIG_SHELL" != x; then + for as_var in BASH_ENV ENV + do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + done + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + + if test $as_have_required = no; then + echo This script requires a shell more modern than all the + echo shells that I found on your system. Please install a + echo modern shell, or manually run the script under such a + echo shell if you do have one. + { (exit 1); exit 1; } +fi + + +fi + +fi + + + +(eval "as_func_return () { + (exit \$1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test \$exitcode = 0") || { + echo No shell found that supports shell functions. + echo Please tell autoconf@gnu.org about your system, + echo including any error possibly output before this + echo message +} + +# autoconf -- create `configure' using m4 macros + +# Copyright (C) 1992, 1993, 1994, 1996, 1999, 2000, 2001, 2002, 2003, +# 2004, 2005, 2006 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 2, 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, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + +usage="\ +Usage: $0 [OPTION] ... [TEMPLATE-FILE] + +Generate a configuration script from a TEMPLATE-FILE if given, or +\`configure.ac' if present, or else \`configure.in'. Output is sent +to the standard output if TEMPLATE-FILE is given, else into +\`configure'. + +Operation modes: + -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 + -o, --output=FILE save output in FILE (stdout is the default) + -W, --warnings=CATEGORY report the warnings falling in CATEGORY [syntax] + +Warning categories include: + \`cross' cross compilation issues + \`obsolete' obsolete constructs + \`syntax' dubious syntactic constructs + \`all' all the warnings + \`no-CATEGORY' turn off the warnings on CATEGORY + \`none' turn off all the warnings + \`error' warnings are error + +The environment variables \`M4' and \`WARNINGS' are honored. + +Library directories: + -B, --prepend-include=DIR prepend directory DIR to search path + -I, --include=DIR append directory DIR to search path + +Tracing: + -t, --trace=MACRO report the list of calls to MACRO + -i, --initialization also trace Autoconf's initialization process + +In tracing mode, no configuration script is created. + +Report bugs to ." + +version="\ +autoconf (GNU Autoconf) 2.61 +Copyright (C) 2006 Free Software Foundation, Inc. +This is free software. You may redistribute copies of it under the terms of +the GNU General Public License . +There is NO WARRANTY, to the extent permitted by law. + +Written by David J. MacKenzie and Akim Demaille." + +help="\ +Try \`$as_me --help' for more information." + +exit_missing_arg="\ +echo \"$as_me: option \\\`\$1' requires an argument\" >&2 +echo \"\$help\" >&2 +exit 1" + +# Variables. +: ${AUTOM4TE='/usr/bin/autom4te'} +autom4te_options= +outfile= +verbose=: + +# Parse command line. +while test $# -gt 0 ; do + option=`expr "x$1" : 'x\(--[^=]*\)' \| \ + "x$1" : 'x\(-.\)'` + optarg=`expr "x$1" : 'x--[^=]*=\(.*\)' \| \ + "x$1" : 'x-.\(.*\)'` + case $1 in + --version | -V ) + echo "$version" ; exit ;; + --help | -h ) + echo "$usage"; exit ;; + + --verbose | -v ) + verbose=echo + autom4te_options="$autom4te_options $1"; shift ;; + + # Arguments passed as is to autom4te. + --debug | -d | \ + --force | -f | \ + --include=* | -I?* | \ + --prepend-include=* | -B?* | \ + --warnings=* | -W?* ) + autom4te_options="$autom4te_options '$1'"; shift ;; + + # Options with separated arg passed as is to autom4te. + --include | -I | \ + --prepend-include | -B | \ + --warnings | -W ) + test $# = 1 && eval "$exit_missing_arg" + autom4te_options="$autom4te_options $option '$2'" + shift; shift ;; + + --trace=* | -t?* ) + traces="$traces --trace='"`echo "$optarg" | sed "s/'/'\\\\\\\\''/g"`"'" + shift ;; + --trace | -t ) + test $# = 1 && eval "$exit_missing_arg" + traces="$traces --trace='"`echo "$2" | sed "s/'/'\\\\\\\\''/g"`"'" + shift; shift ;; + --initialization | -i ) + autom4te_options="$autom4te_options --melt" + shift;; + + --output=* | -o?* ) + outfile=$optarg + shift ;; + --output | -o ) + test $# = 1 && eval "$exit_missing_arg" + outfile=$2 + shift; shift ;; + + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + exec >&2 + echo "$as_me: invalid option $1" + echo "$help" + exit 1 ;; + * ) + break ;; + esac +done + +# Find the input file. +case $# in + 0) + if test -f configure.ac; then + if test -f configure.in; then + echo "$as_me: warning: both \`configure.ac' and \`configure.in' are present." >&2 + echo "$as_me: warning: proceeding with \`configure.ac'." >&2 + fi + infile=configure.ac + elif test -f configure.in; then + infile=configure.in + else + echo "$as_me: no input file" >&2 + exit 1 + fi + test -z "$traces" && test -z "$outfile" && outfile=configure;; + 1) # autom4te doesn't like `-'. + test "x$1" != "x-" && infile=$1 ;; + *) exec >&2 + echo "$as_me: invalid number of arguments." + echo "$help" + (exit 1); exit 1 ;; +esac + +# Unless specified, the output is stdout. +test -z "$outfile" && outfile=- + +# Run autom4te with expansion. +eval set x $autom4te_options \ + --language=autoconf --output=\$outfile "$traces" \$infile +shift +$verbose "$as_me: running $AUTOM4TE $*" >&2 +exec "$AUTOM4TE" "$@" diff --git a/bin/autogen.exe b/bin/autogen.exe new file mode 100644 index 0000000000000000000000000000000000000000..eac9e8dcba9dab26321e6a04b0cdc234f9f2fe28 GIT binary patch literal 681984 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 *>F9BlCj$ZnN&1K}GS1Z%5Y(dx18{a)j$-!kM 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. +"; + + +# $VERSION +# -------- +$version = "autoheader (GNU Autoconf) 2.61 +Copyright (C) 2006 Free Software Foundation, Inc. +This is free software. You may redistribute copies of it under the terms of +the GNU General Public License . +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 (' ', map { "--include='$_'" } @include); +$autoconf .= join (' ', map { "--prepend-include='$_'" } @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]"; +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;\'' + . " $ARGV[0] >$tmp/traces.pl"); + +local (%verbatim, %symbol); +debug "$me: \`do'ing $tmp/traces.pl:\n" . `sed 's/^/| /' $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 (">$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 ($config_h_top); + while ($_ = $in->getline) + { + print $out $_; + } + } + +# Dump `acconfig.h', except for its bottom portion. +if ($acconfig_h) + { + my $in = new Autom4te::XFile ($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 ($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 ($config_h_bot); + while ($_ = $in->getline) + { + print $out $_; + } + } + +$out->close; + +# Check that all the symbols have a template. +{ + my $in = new Autom4te::XFile ("$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: diff --git a/bin/autom4te b/bin/autom4te new file mode 100644 index 00000000..65c3b169 --- /dev/null +++ b/bin/autom4te @@ -0,0 +1,1053 @@ +#! /bin/perl -w +# -*- perl -*- +# Generated from autom4te.in; do not edit by hand. + +eval 'case $# in 0) exec /bin/perl -S "$0";; *) exec /bin/perl -S "$0" "$@";; esac' + if 0; + +# autom4te - Wrapper around M4 libraries. +# Copyright (C) 2001, 2002, 2003, 2005, 2006 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 2, 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, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + + +BEGIN +{ + my $datadir = $ENV{'autom4te_perllibdir'} || '/usr/share/autoconf'; + unshift @INC, $datadir; + + # 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::C4che; +use Autom4te::ChannelDefs; +use Autom4te::Channels; +use Autom4te::FileUtils; +use Autom4te::General; +use Autom4te::XFile; +use File::Basename; +use strict; + +# Data directory. +my $datadir = $ENV{'AC_MACRODIR'} || '/usr/share/autoconf'; + +# $LANGUAGE{LANGUAGE} -- Automatic options for LANGUAGE. +my %language; + +my $output = '-'; + +# Mode of the output file except for traces. +my $mode = "0666"; + +# If melt, don't use frozen files. +my $melt = 0; + +# Names of the cache directory, cache directory index, trace cache +# prefix, and output cache prefix. And the IO objet for the index. +my $cache; +my $icache; +my $tcache; +my $ocache; +my $icache_file; + +# The macros to trace mapped to their format, as specified by the +# user. +my %trace; + +# The macros the user will want to trace in the future. +# We need `include' to get the included file, `m4_pattern_forbid' and +# `m4_pattern_allow' to check the output. +# +# FIXME: What about `sinclude'? +my @preselect = ('include', + 'm4_pattern_allow', 'm4_pattern_forbid', + '_m4_warn'); + +# M4 include path. +my @include; + +# Do we freeze? +my $freeze = 0; + +# $M4. +my $m4 = $ENV{"M4"} || '/bin/m4'; +# Some non-GNU m4's don't reject the --help option, so give them /dev/null. +fatal "need GNU m4 1.4 or later: $m4" + if system "$m4 --help &1 | grep reload-state >/dev/null"; + +# Set some high recursion limit as the default limit, 250, has already +# been hit with AC_OUTPUT. Don't override the user's choice. +$m4 .= ' --nesting-limit=1024' + if " $m4 " !~ / (--nesting-limit(=[0-9]+)?|-L[0-9]*) /; + + +# @M4_BUILTIN -- M4 builtins and a useful comment. +my @m4_builtin = `echo dumpdef | $m4 2>&1 >/dev/null`; +map { s/:.*//;s/\W// } @m4_builtin; + + +# %M4_BUILTIN_ALTERNATE_NAME +# -------------------------- +# The builtins are renamed, e.g., `define' is renamed `m4_define'. +# So map `define' to `m4_define' and conversely. +# Some macros don't follow this scheme: be sure to properly map to their +# alternate name too. +# +# This is because GNU M4 1.4's tracing of builtins is buggy. When run on +# this input: +# +# | divert(-1) +# | changequote([, ]) +# | define([m4_eval], defn([eval])) +# | eval(1) +# | m4_eval(2) +# | undefine([eval]) +# | m4_eval(3) +# +# it behaves this way: +# +# | % m4 input.m4 -da -t eval +# | m4trace: -1- eval(1) +# | m4trace: -1- m4_eval(2) +# | m4trace: -1- m4_eval(3) +# | % +# +# Conversely: +# +# | % m4 input.m4 -da -t m4_eval +# | % +# +# So we will merge them, i.e. tracing `BUILTIN' or tracing +# `m4_BUILTIN' will be the same: tracing both, but honoring the +# *last* trace specification. +# +# FIXME: This is not enough: in the output `$0' will be `BUILTIN' +# sometimes and `m4_BUILTIN' at others. We should return a unique name, +# the one specified by the user. +# +# FIXME: To be absolutely rigorous, I would say that given that we +# _redefine_ divert (instead of _copying_ it), divert and the like +# should not be part of this list. +my %m4_builtin_alternate_name; +@m4_builtin_alternate_name{"$_", "m4_$_"} = ("m4_$_", "$_") + foreach (grep { !/m4wrap|m4exit|dnl|ifelse|__.*__/ } @m4_builtin); +@m4_builtin_alternate_name{"ifelse", "m4_if"} = ("m4_if", "ifelse"); +@m4_builtin_alternate_name{"m4exit", "m4_exit"} = ("m4_exit", "m4exit"); +@m4_builtin_alternate_name{"m4wrap", "m4_wrap"} = ("m4_wrap", "m4wrap"); + + +# $HELP +# ----- +$help = "Usage: $0 [OPTION] ... [FILES] + +Run GNU M4 on the FILES, avoiding useless runs. Output the traces if tracing, +the frozen file if freezing, otherwise the expansion of the FILES. + +If some of the FILES are named \`FILE.m4f\' they are considered to be M4 +frozen files of all the previous files (which are therefore not loaded). +If \`FILE.m4f\' is not found, then \`FILE.m4\' will be used, together with +all the previous files. + +Some files may be optional, i.e., will only be processed if found in the +include path, but then must end in \`.m4?\'; the question mark is not part of +the actual file name. + +Operation modes: + -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 + -o, --output=FILE save output in FILE (defaults to \`-\', stdout) + -f, --force don\'t rely on cached values + -W, --warnings=CATEGORY report the warnings falling in CATEGORY + -l, --language=LANG specify the set of M4 macros to use + -C, --cache=DIRECTORY preserve results for future runs in DIRECTORY + --no-cache disable the cache + -m, --mode=OCTAL change the non trace output file mode (0666) + -M, --melt don\'t use M4 frozen files + +Languages include: + \`Autoconf\' create Autoconf configure scripts + \`Autotest\' create Autotest test suites + \`M4sh\' create M4sh shell scripts + \`M4sugar\' create M4sugar output + +" . Autom4te::ChannelDefs::usage . " + +The environment variables \`M4\' and \`WARNINGS\' are honored. + +Library directories: + -B, --prepend-include=DIR prepend directory DIR to search path + -I, --include=DIR append directory DIR to search path + +Tracing: + -t, --trace=MACRO report the MACRO invocations + -p, --preselect=MACRO prepare to trace MACRO in a future run + +Freezing: + -F, --freeze produce an M4 frozen state file for FILES + +Report bugs to . +"; + +# $VERSION +# -------- +$version = <<"EOF"; +autom4te (GNU Autoconf) 2.61 +Copyright (C) 2006 Free Software Foundation, Inc. +This is free software. You may redistribute copies of it under the terms of +the GNU General Public License . +There is NO WARRANTY, to the extent permitted by law. + +Written by Akim Demaille. +EOF + + +## ---------- ## +## Routines. ## +## ---------- ## + + +# $OPTION +# files_to_options (@FILE) +# ------------------------ +# Transform Autom4te conventions (e.g., using foo.m4f to designate a frozen +# file) into a suitable command line for M4 (e.g., using --reload-state). +sub files_to_options (@) +{ + my (@file) = @_; + my @res; + foreach my $file (@file) + { + if ($file =~ /\.m4f$/) + { + push @res, "--reload-state=$file"; + } + else + { + push @res, $file; + } + } + return join ' ', @res; +} + + +# load_configuration ($FILE) +# -------------------------- +# Load the configuration $FILE. +sub load_configuration ($) +{ + my ($file) = @_; + use Text::ParseWords; + + my $cfg = new Autom4te::XFile ($file); + my $lang; + while ($_ = $cfg->getline) + { + chomp; + # Comments. + next + if /^\s*(\#.*)?$/; + + my @words = shellwords ($_); + my $type = shift @words; + if ($type eq 'begin-language:') + { + fatal "$file:$.: end-language missing for: $lang" + if defined $lang; + $lang = lc $words[0]; + } + elsif ($type eq 'end-language:') + { + error "$file:$.: end-language mismatch: $lang" + if $lang ne lc $words[0]; + $lang = undef; + } + elsif ($type eq 'args:') + { + fatal "$file:$.: no current language" + unless defined $lang; + push @{$language{$lang}}, @words; + } + else + { + error "$file:$.: unknown directive: $type"; + } + } +} + + +# parse_args () +# ------------- +# Process any command line arguments. +sub parse_args () +{ + # We want to look for the early options, which should not be found + # in the configuration file. Prepend to the user arguments. + # Perform this repeatedly so that we can use --language in language + # definitions. Beware that there can be several --language + # invocations. + my @language; + do { + @language = (); + use Getopt::Long; + Getopt::Long::Configure ("pass_through", "permute"); + GetOptions ("l|language=s" => \@language); + + foreach (@language) + { + error "unknown language: $_" + unless exists $language{lc $_}; + unshift @ARGV, @{$language{lc $_}}; + } + } while @language; + + # --debug is useless: it is parsed below. + if (exists $ENV{'AUTOM4TE_DEBUG'}) + { + print STDERR "$me: concrete arguments:\n"; + foreach my $arg (@ARGV) + { + print STDERR "| $arg\n"; + } + } + + # Process the arguments for real this time. + my @trace; + my @prepend_include; + parse_WARNINGS; + getopt + ( + # Operation modes: + "o|output=s" => \$output, + "W|warnings=s" => \&parse_warnings, + "m|mode=s" => \$mode, + "M|melt" => \$melt, + + # Library directories: + "B|prepend-include=s" => \@prepend_include, + "I|include=s" => \@include, + + # Tracing: + # Using a hash for traces is seducing. Unfortunately, upon `-t FOO', + # instead of mapping `FOO' to undef, Getopt maps it to `1', preventing + # us from distinguishing `-t FOO' from `-t FOO=1'. So let's do it + # by hand. + "t|trace=s" => \@trace, + "p|preselect=s" => \@preselect, + + # Freezing. + "F|freeze" => \$freeze, + + # Caching. + "C|cache=s" => \$cache, + "no-cache" => sub { $cache = undef; }, + ); + + fatal "too few arguments +Try `$me --help' for more information." + unless @ARGV; + + # Freezing: + # We cannot trace at the same time (well, we can, but it sounds insane). + # And it implies melting: there is risk not to update properly using + # old frozen files, and worse yet: we could load a frozen file and + # refreeze it! A sort of caching :) + fatal "cannot freeze and trace" + if $freeze && @trace; + $melt = 1 + if $freeze; + + # Names of the cache directory, cache directory index, trace cache + # prefix, and output cache prefix. If the cache is not to be + # preserved, default to a temporary directory (automatically removed + # on exit). + $cache = $tmp + unless $cache; + $icache = "$cache/requests"; + $tcache = "$cache/traces."; + $ocache = "$cache/output."; + + # Normalize the includes: the first occurrence is enough, several is + # a pain since it introduces a useless difference in the path which + # invalidates the cache. And strip `.' which is implicit and always + # first. + @include = grep { !/^\.$/ } uniq (reverse(@prepend_include), @include); + + # Convert @trace to %trace, and work around the M4 builtins tracing + # problem. + # The default format is `$f:$l:$n:$%'. + foreach (@trace) + { + /^([^:]+)(?::(.*))?$/ms; + $trace{$1} = defined $2 ? $2 : '$f:$l:$n:$%'; + $trace{$m4_builtin_alternate_name{$1}} = $trace{$1} + if exists $m4_builtin_alternate_name{$1}; + } + + # Work around the M4 builtins tracing problem for @PRESELECT. + push (@preselect, + map { $m4_builtin_alternate_name{$_} } + grep { exists $m4_builtin_alternate_name{$_} } @preselect); + + # If we find frozen files, then all the files before it are + # discarded: the frozen file is supposed to include them all. + # + # We don't want to depend upon m4's --include to find the top level + # files, so we use `find_file' here. Try to get a canonical name, + # as it's part of the key for caching. And some files are optional + # (also handled by `find_file'). + my @argv; + foreach (@ARGV) + { + if (/\.m4f$/) + { + # Frozen files are optional => pass a `?' to `find_file'. + my $file = find_file ("$_?", @include); + if (!$melt && $file) + { + @argv = ($file); + } + else + { + s/\.m4f$/.m4/; + push @argv, find_file ($_, @include); + } + } + else + { + my $file = find_file ($_, @include); + push @argv, $file + if $file; + } + } + @ARGV = @argv; +} + + +# handle_m4 ($REQ, @MACRO) +# ------------------------ +# Run m4 on the input files, and save the traces on the @MACRO. +sub handle_m4 ($@) +{ + my ($req, @macro) = @_; + + # GNU m4 appends when using --debugfile/--error-output. + unlink ($tcache . $req->id . "t"); + + # Run m4. + # + # We don't output directly to the cache files, to avoid problems + # when we are interrupted (that leaves corrupted files). + xsystem ("$m4" + . join (' --include=', '', @include) + . ' --debug=aflq' + . (!exists $ENV{'AUTOM4TE_NO_FATAL'} ? ' --fatal-warning' : '') + . " --error-output=$tcache" . $req->id . "t" + . join (' --trace=', '', sort @macro) + . " " . files_to_options (@ARGV) + . " >$ocache" . $req->id . "t"); + + # Everything went ok: preserve the outputs. + foreach my $file (map { $_ . $req->id } ($tcache, $ocache)) + { + use File::Copy; + move ("${file}t", "$file") + or fatal "cannot rename ${file}t as $file: $!"; + } +} + + +# warn_forbidden ($WHERE, $WORD, %FORBIDDEN) +# ------------------------------------------ +# $WORD is forbidden. Warn with a dedicated error message if in +# %FORBIDDEN, otherwise, a simple `error: possibly undefined macro' +# will do. +my $first_warn_forbidden = 1; +sub warn_forbidden ($$%) +{ + my ($where, $word, %forbidden) = @_; + my $message; + + for my $re (sort keys %forbidden) + { + if ($word =~ $re) + { + $message = $forbidden{$re}; + last; + } + } + $message ||= "possibly undefined macro: $word"; + warn "$where: error: $message\n"; + if ($first_warn_forbidden) + { + warn < 'forbid:$1:$2', + 'm4_pattern_allow' => 'allow:$1')); + my @patterns = new Autom4te::XFile ("$tmp/patterns")->getlines; + chomp @patterns; + my %forbidden = + map { /^forbid:([^:]+):.+$/ => /^forbid:[^:]+:(.+)$/ } @patterns; + my $forbidden = join ('|', map { /^forbid:([^:]+)/ } @patterns) || "^\$"; + my $allowed = join ('|', map { /^allow:([^:]+)/ } @patterns) || "^\$"; + + verb "forbidden tokens: $forbidden"; + verb "forbidden token : $_ => $forbidden{$_}" + foreach (sort keys %forbidden); + verb "allowed tokens: $allowed"; + + # Read the (cached) raw M4 output, produce the actual result. We + # have to use the 2nd arg to have Autom4te::XFile honor the third, but then + # stdout is to be handled by hand :(. Don't use fdopen as it means + # we will close STDOUT, which we already do in END. + my $out = new Autom4te::XFile; + if ($output eq '-') + { + $out->open (">$output"); + } + else + { + $out->open($output, O_CREAT | O_WRONLY | O_TRUNC, oct ($mode)); + } + fatal "cannot create $output: $!" + unless $out; + my $in = new Autom4te::XFile ($ocache . $req->id); + + my %prohibited; + my $res; + while ($_ = $in->getline) + { + s/\s+$//; + s/__oline__/$./g; + s/\@<:\@/[/g; + s/\@:>\@/]/g; + s/\@S\|\@/\$/g; + s/\@%:\@/#/g; + + $res = $_; + + # Don't complain in comments. Well, until we have something + # better, don't consider `#include' etc. are comments. + s/\#.*// + unless /^\#\s*(if|include|endif|ifdef|ifndef|define)\b/; + foreach (split (/\W+/)) + { + $prohibited{$_} = $. + if !/^$/ && /$forbidden/o && !/$allowed/o && ! exists $prohibited{$_}; + } + + # Performed *last*: the empty quadrigraph. + $res =~ s/\@&t\@//g; + + print $out "$res\n"; + } + + # If no forbidden words, we're done. + return + if ! %prohibited; + + # Locate the forbidden words in the last input file. + # This is unsatisfying but... + my $prohibited = '\b(' . join ('|', keys %prohibited) . ')\b'; + my $file = new Autom4te::XFile ($ARGV[$#ARGV]); + $exit_code = 1; + + while ($_ = $file->getline) + { + # Don't complain in comments. Well, until we have something + # better, don't consider `#include' etc. are comments. + s/\#.*// + unless /^\#(if|include|endif|ifdef|ifndef|define)\b/; + + # Complain once per word, but possibly several times per line. + while (/$prohibited/) + { + my $word = $1; + warn_forbidden ("$ARGV[$#ARGV]:$.", $word, %forbidden); + delete $prohibited{$word}; + # If we're done, exit. + return + if ! %prohibited; + $prohibited = '\b(' . join ('|', keys %prohibited) . ')\b'; + } + } + warn_forbidden ("$output:$prohibited{$_}", $_, %forbidden) + foreach (sort { $prohibited{$a} <=> $prohibited{$b} } keys %prohibited); +} + + +## --------------------- ## +## Handling the traces. ## +## --------------------- ## + + +# $M4_MACRO +# trace_format_to_m4 ($FORMAT) +# ---------------------------- +# Convert a trace $FORMAT into a M4 trace processing macro's body. +sub trace_format_to_m4 ($) +{ + my ($format) = @_; + my $underscore = $_; + my %escape = (# File name. + 'f' => '$1', + # Line number. + 'l' => '$2', + # Depth. + 'd' => '$3', + # Name (also available as $0). + 'n' => '$4', + # Escaped dollar. + '$' => '$'); + + my $res = ''; + $_ = $format; + while ($_) + { + # $n -> $(n + 4) + if (s/^\$(\d+)//) + { + $res .= "\$" . ($1 + 4); + } + # $x, no separator given. + elsif (s/^\$([fldn\$])//) + { + $res .= $escape{$1}; + } + # $.x or ${sep}x. + elsif (s/^\$\{([^}]*)\}([@*%])// + || s/^\$(.?)([@*%])//) + { + # $@, list of quoted effective arguments. + if ($2 eq '@') + { + $res .= ']at_at([' . ($1 ? $1 : ',') . '], $@)['; + } + # $*, list of unquoted effective arguments. + elsif ($2 eq '*') + { + $res .= ']at_star([' . ($1 ? $1 : ',') . '], $@)['; + } + # $%, list of flattened unquoted effective arguments. + elsif ($2 eq '%') + { + $res .= ']at_percent([' . ($1 ? $1 : ':') . '], $@)['; + } + } + elsif (/^(\$.)/) + { + error "invalid escape: $1"; + } + else + { + s/^([^\$]+)//; + $res .= $1; + } + } + + $_ = $underscore; + return '[[' . $res . ']]'; +} + + +# handle_traces($REQ, $OUTPUT, %TRACE) +# ------------------------------------ +# We use M4 itself to process the traces. But to avoid name clashes when +# processing the traces, the builtins are disabled, and moved into `at_'. +# Actually, all the low level processing macros are in `at_' (and `_at_'). +# To avoid clashes between user macros and `at_' macros, the macros which +# implement tracing are in `AT_'. +# +# Having $REQ is needed to neutralize the macros which have been traced, +# but are not wanted now. +sub handle_traces ($$%) +{ + my ($req, $output, %trace) = @_; + + verb "formatting traces for `$output': " . join (', ', sort keys %trace); + + # Processing the traces. + my $trace_m4 = new Autom4te::XFile (">$tmp/traces.m4"); + + $_ = <<'EOF'; + divert(-1) + changequote([, ]) + # _at_MODE(SEPARATOR, ELT1, ELT2...) + # ---------------------------------- + # List the elements, separating then with SEPARATOR. + # MODE can be: + # `at' -- the elements are enclosed in brackets. + # `star' -- the elements are listed as are. + # `percent' -- the elements are `flattened': spaces are singled out, + # and no new line remains. + define([_at_at], + [at_ifelse([$#], [1], [], + [$#], [2], [[[$2]]], + [[[$2]][$1]$0([$1], at_shift(at_shift($@)))])]) + + define([_at_percent], + [at_ifelse([$#], [1], [], + [$#], [2], [at_flatten([$2])], + [at_flatten([$2])[$1]$0([$1], at_shift(at_shift($@)))])]) + + define([_at_star], + [at_ifelse([$#], [1], [], + [$#], [2], [[$2]], + [[$2][$1]$0([$1], at_shift(at_shift($@)))])]) + + # FLATTEN quotes its result. + # Note that the second pattern is `newline, tab or space'. Don't lose + # the tab! + define([at_flatten], + [at_patsubst(at_patsubst(at_patsubst(at_patsubst([[[[$1]]]], [\\\n]), + [[\n\t ]+], [ ]), + [ *\(.\)$], [\1]), + [^ *\(.*\)], [[\1]])]) + + define([at_args], [at_shift(at_shift(at_shift(at_shift(at_shift($@)))))]) + define([at_at], [_$0([$1], at_args($@))]) + define([at_percent], [_$0([$1], at_args($@))]) + define([at_star], [_$0([$1], at_args($@))]) + +EOF + s/^ //mg;s/\\t/\t/mg;s/\\n/\n/mg; + print $trace_m4 $_; + + # If you trace `define', then on `define([m4_exit], defn([m4exit])' you + # will produce + # + # AT_define([m4sugar.m4], [115], [1], [define], [m4_exit], ) + # + # Since `' is not quoted, the outer m4, when processing + # `trace.m4' will exit prematurely. Hence, move all the builtins to + # the `at_' name space. + + print $trace_m4 "# Copy the builtins.\n"; + map { print $trace_m4 "define([at_$_], defn([$_]))\n" } @m4_builtin; + print $trace_m4 "\n"; + + print $trace_m4 "# Disable them.\n"; + map { print $trace_m4 "at_undefine([$_])\n" } @m4_builtin; + print $trace_m4 "\n"; + + + # Neutralize traces: we don't want traces of cached requests (%REQUEST). + print $trace_m4 + "## -------------------------------------- ##\n", + "## By default neutralize all the traces. ##\n", + "## -------------------------------------- ##\n", + "\n"; + print $trace_m4 "at_define([AT_$_], [at_dnl])\n" + foreach (sort keys %{$req->macro}); + print $trace_m4 "\n"; + + # Implement traces for current requests (%TRACE). + print $trace_m4 + "## ------------------------- ##\n", + "## Trace processing macros. ##\n", + "## ------------------------- ##\n", + "\n"; + foreach (sort keys %trace) + { + # Trace request can be embed \n. + (my $comment = "Trace $_:$trace{$_}") =~ s/^/\# /; + print $trace_m4 "$comment\n"; + print $trace_m4 "at_define([AT_$_],\n"; + print $trace_m4 trace_format_to_m4 ($trace{$_}) . ")\n\n"; + } + print $trace_m4 "\n"; + + # Reenable output. + print $trace_m4 "at_divert(0)at_dnl\n"; + + # Transform the traces from m4 into an m4 input file. + # Typically, transform: + # + # | m4trace:configure.ac:3: -1- AC_SUBST([exec_prefix], [NONE]) + # + # into + # + # | AT_AC_SUBST([configure.ac], [3], [1], [AC_SUBST], [exec_prefix], [NONE]) + # + # Pay attention that the file name might include colons, if under DOS + # for instance, so we don't use `[^:]+'. + my $traces = new Autom4te::XFile ($tcache . $req->id); + while ($_ = $traces->getline) + { + # Trace with arguments, as the example above. We don't try + # to match the trailing parenthesis as it might be on a + # separate line. + s{^m4trace:(.+):(\d+): -(\d+)- ([^(]+)\((.*)$} + {AT_$4([$1], [$2], [$3], [$4], $5}; + # Traces without arguments, always on a single line. + s{^m4trace:(.+):(\d+): -(\d+)- ([^)]*)\n$} + {AT_$4([$1], [$2], [$3], [$4])\n}; + print $trace_m4 "$_"; + } + $trace_m4->close; + + my $in = new Autom4te::XFile ("$m4 $tmp/traces.m4 |"); + my $out = new Autom4te::XFile (">$output"); + + # This is dubious: should we really transform the quadrigraphs in + # traces? It might break balanced [ ] etc. in the output. The + # consensus seeems to be that traces are more useful this way. + while ($_ = $in->getline) + { + # It makes no sense to try to transform __oline__. + s/\@<:\@/[/g; + s/\@:>\@/]/g; + s/\@S\|\@/\$/g; + s/\@%:\@/#/g; + s/\@&t\@//g; + print $out $_; + } +} + + +# $BOOL +# up_to_date ($REQ) +# ----------------- +# Are the cache files of $REQ up to date? +# $REQ is `valid' if it corresponds to the request and exists, which +# does not mean it is up to date. It is up to date if, in addition, +# its files are younger than its dependencies. +sub up_to_date ($) +{ + my ($req) = @_; + + return 0 + if ! $req->valid; + + my $tfile = $tcache . $req->id; + my $ofile = $ocache . $req->id; + + # We can't answer properly if the traces are not computed since we + # need to know what other files were included. Actually, if any of + # the cache files is missing, we are not up to date. + return 0 + if ! -f $tfile || ! -f $ofile; + + # The youngest of the cache files must be older than the oldest of + # the dependencies. + my $tmtime = mtime ($tfile); + my $omtime = mtime ($ofile); + my ($file, $mtime) = ($tmtime < $omtime + ? ($ofile, $omtime) : ($tfile, $tmtime)); + + # We depend at least upon the arguments. + my @dep = @ARGV; + + # Files may include others. We can use traces since we just checked + # if they are available. + handle_traces ($req, "$tmp/dependencies", + ('include' => '$1', + 'm4_include' => '$1')); + my $deps = new Autom4te::XFile ("$tmp/dependencies"); + while ($_ = $deps->getline) + { + chomp; + my $file = find_file ("$_?", @include); + # If a file which used to be included is no longer there, then + # don't say it's missing (it might no longer be included). But + # of course, that cause the output to be outdated (as if the + # time stamp of that missing file was newer). + return 0 + if ! $file; + push @dep, $file; + } + + # If $FILE is younger than one of its dependencies, it is outdated. + return up_to_date_p ($file, @dep); +} + + +## ---------- ## +## Freezing. ## +## ---------- ## + +# freeze ($OUTPUT) +# ---------------- +sub freeze ($) +{ + my ($output) = @_; + + # When processing the file with diversion disabled, there must be no + # output but comments and empty lines. + my $result = xqx ("$m4" + . ' --fatal-warning' + . join (' --include=', '', @include) + . ' --define=divert' + . " " . files_to_options (@ARGV) + . ' lock (LOCK_EX); + +# Read the cache index if available and older than autom4te itself. +# If autom4te is younger, then some structures such as C4che, might +# have changed, which would corrupt its processing. +Autom4te::C4che->load ($icache_file) + if -f $icache && mtime ($icache) > mtime ($0); + +# Add the new trace requests. +my $req = Autom4te::C4che->request ('input' => \@ARGV, + 'path' => \@include, + 'macro' => [keys %trace, @preselect]); + +# If $REQ's cache files are not up to date, or simply if the user +# discarded them (-f), declare it invalid. +$req->valid (0) + if $force || ! up_to_date ($req); + +# We now know whether we can trust the Request object. Say it. +verb "the trace request object is:\n" . $req->marshall; + +# We need to run M4 if (i) the user wants it (--force), (ii) $REQ is +# invalid. +handle_m4 ($req, keys %{$req->macro}) + if $force || ! $req->valid; + +# Issue the warnings each time autom4te was run. +my $separator = "\n" . ('-' x 25) . " END OF WARNING " . ('-' x 25) . "\n\n"; +handle_traces ($req, "$tmp/warnings", + ('_m4_warn' => "\$1::\$f:\$l::\$2::\$3$separator")); +# Swallow excessive newlines. +for (split (/\n*$separator\n*/o, contents ("$tmp/warnings"))) +{ + # The message looks like: + # | syntax::input.as:5::ouch + # | ::input.as:4: baz is expanded from... + # | input.as:2: bar is expanded from... + # | input.as:3: foo is expanded from... + # | input.as:5: the top level + my ($cat, $loc, $msg, $stacktrace) = split ('::', $_, 4); + msg $cat, $loc, "warning: $msg"; + for (split /\n/, $stacktrace) + { + my ($loc, $trace) = split (': ', $_, 2); + msg $cat, $loc, $trace; + } +} + +# Now output... +if (%trace) + { + # Always produce traces, since even if the output is young enough, + # there is no guarantee that the traces use the same *format* + # (e.g., `-t FOO:foo' and `-t FOO:bar' are both using the same M4 + # traces, hence the M4 traces cache is usable, but its formatting + # will yield different results). + handle_traces ($req, $output, %trace); + } +else + { + # Actual M4 expansion, if the user wants it, or if $output is old + # (STDOUT is pretty old). + handle_output ($req, $output) + if $force || mtime ($output) < mtime ($ocache . $req->id); + } + +# If we ran up to here, the cache is valid. +$req->valid (1); +Autom4te::C4che->save ($icache_file); + +exit $exit_code; + +### 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: diff --git a/bin/automake b/bin/automake new file mode 100644 index 00000000..8538ba83 --- /dev/null +++ b/bin/automake @@ -0,0 +1,7859 @@ +#!/bin/perl -w +# -*- perl -*- +# Generated from automake.in; do not edit by hand. + +eval 'case $# in 0) exec /bin/perl -S "$0";; *) exec /bin/perl -S "$0" "$@";; esac' + if 0; + +# automake - create Makefile.in from Makefile.am +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006 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 2, 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, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + +# Originally written by David Mackenzie . +# Perl reimplementation by Tom Tromey , and +# Alexandre Duret-Lutz . + +package Language; + +BEGIN +{ + my $perllibdir = $ENV{'perllibdir'} || '/usr/share/automake-1.10'; + unshift @INC, (split ':', $perllibdir); + + # Override SHELL. This is required on DJGPP so that system() uses + # bash, not COMMAND.COM which doesn't quote arguments properly. + # Other systems aren't expected to use $SHELL when Automake + # runs, but it should be safe to drop the `if DJGPP' guard if + # it turns up other systems need the same thing. After all, + # if SHELL is used, ./configure's SHELL is always better than + # the user's SHELL (which may be something like tcsh). + $ENV{'SHELL'} = '/bin/sh' if exists $ENV{'DJGPP'}; +} + +use Automake::Struct; +struct (# Short name of the language (c, f77...). + 'name' => "\$", + # Nice name of the language (C, Fortran 77...). + 'Name' => "\$", + + # List of configure variables which must be defined. + 'config_vars' => '@', + + 'ansi' => "\$", + # `pure' is `1' or `'. A `pure' language is one where, if + # all the files in a directory are of that language, then we + # do not require the C compiler or any code to call it. + 'pure' => "\$", + + 'autodep' => "\$", + + # Name of the compiling variable (COMPILE). + 'compiler' => "\$", + # Content of the compiling variable. + 'compile' => "\$", + # Flag to require compilation without linking (-c). + 'compile_flag' => "\$", + 'extensions' => '@', + # A subroutine to compute a list of possible extensions of + # the product given the input extensions. + # (defaults to a subroutine which returns ('.$(OBJEXT)', '.lo')) + 'output_extensions' => "\$", + # A list of flag variables used in 'compile'. + # (defaults to []) + 'flags' => "@", + + # Any tag to pass to libtool while compiling. + 'libtool_tag' => "\$", + + # The file to use when generating rules for this language. + # The default is 'depend2'. + 'rule_file' => "\$", + + # Name of the linking variable (LINK). + 'linker' => "\$", + # Content of the linking variable. + 'link' => "\$", + + # Name of the linker variable (LD). + 'lder' => "\$", + # Content of the linker variable ($(CC)). + 'ld' => "\$", + + # Flag to specify the output file (-o). + 'output_flag' => "\$", + '_finish' => "\$", + + # This is a subroutine which is called whenever we finally + # determine the context in which a source file will be + # compiled. + '_target_hook' => "\$", + + # If TRUE, nodist_ sources will be compiled using specific rules + # (i.e. not inference rules). The default is FALSE. + 'nodist_specific' => "\$"); + + +sub finish ($) +{ + my ($self) = @_; + if (defined $self->_finish) + { + &{$self->_finish} (); + } +} + +sub target_hook ($$$$%) +{ + my ($self) = @_; + if (defined $self->_target_hook) + { + &{$self->_target_hook} (@_); + } +} + +package Automake; + +use strict; +use Automake::Config; +use Automake::General; +use Automake::XFile; +use Automake::Channels; +use Automake::ChannelDefs; +use Automake::Configure_ac; +use Automake::FileUtils; +use Automake::Location; +use Automake::Condition qw/TRUE FALSE/; +use Automake::DisjConditions; +use Automake::Options; +use Automake::Version; +use Automake::Variable; +use Automake::VarDef; +use Automake::Rule; +use Automake::RuleDef; +use Automake::Wrap 'makefile_wrap'; +use File::Basename; +use File::Spec; +use Carp; + +## ----------- ## +## Constants. ## +## ----------- ## + +# Some regular expressions. One reason to put them here is that it +# makes indentation work better in Emacs. + +# Writing singled-quoted-$-terminated regexes is a pain because +# perl-mode thinks of $' as the ${'} variable (instead of a $ followed +# by a closing quote. Letting perl-mode think the quote is not closed +# leads to all sort of misindentations. On the other hand, defining +# regexes as double-quoted strings is far less readable. So usually +# we will write: +# +# $REGEX = '^regex_value' . "\$"; + +my $IGNORE_PATTERN = '^\s*##([^#\n].*)?\n'; +my $WHITE_PATTERN = '^\s*' . "\$"; +my $COMMENT_PATTERN = '^#'; +my $TARGET_PATTERN='[$a-zA-Z_.@%][-.a-zA-Z0-9_(){}/$+@%]*'; +# A rule has three parts: a list of targets, a list of dependencies, +# and optionally actions. +my $RULE_PATTERN = + "^($TARGET_PATTERN(?:(?:\\\\\n|\\s)+$TARGET_PATTERN)*) *:([^=].*|)\$"; + +# Only recognize leading spaces, not leading tabs. If we recognize +# leading tabs here then we need to make the reader smarter, because +# otherwise it will think rules like `foo=bar; \' are errors. +my $ASSIGNMENT_PATTERN = '^ *([^ \t=:+]*)\s*([:+]?)=\s*(.*)' . "\$"; +# This pattern recognizes a Gnits version id and sets $1 if the +# release is an alpha release. We also allow a suffix which can be +# used to extend the version number with a "fork" identifier. +my $GNITS_VERSION_PATTERN = '\d+\.\d+([a-z]|\.\d+)?(-[A-Za-z0-9]+)?'; + +my $IF_PATTERN = '^if\s+(!?)\s*([A-Za-z][A-Za-z0-9_]*)\s*(?:#.*)?' . "\$"; +my $ELSE_PATTERN = + '^else(?:\s+(!?)\s*([A-Za-z][A-Za-z0-9_]*))?\s*(?:#.*)?' . "\$"; +my $ENDIF_PATTERN = + '^endif(?:\s+(!?)\s*([A-Za-z][A-Za-z0-9_]*))?\s*(?:#.*)?' . "\$"; +my $PATH_PATTERN = '(\w|[+/.-])+'; +# This will pass through anything not of the prescribed form. +my $INCLUDE_PATTERN = ('^include\s+' + . '((\$\(top_srcdir\)/' . $PATH_PATTERN . ')' + . '|(\$\(srcdir\)/' . $PATH_PATTERN . ')' + . '|([^/\$]' . $PATH_PATTERN . '))\s*(#.*)?' . "\$"); + +# Match `-d' as a command-line argument in a string. +my $DASH_D_PATTERN = "(^|\\s)-d(\\s|\$)"; +# Directories installed during 'install-exec' phase. +my $EXEC_DIR_PATTERN = + '^(?:bin|sbin|libexec|sysconf|localstate|lib|pkglib|.*exec.*)' . "\$"; + +# Values for AC_CANONICAL_* +use constant AC_CANONICAL_BUILD => 1; +use constant AC_CANONICAL_HOST => 2; +use constant AC_CANONICAL_TARGET => 3; + +# Values indicating when something should be cleaned. +use constant MOSTLY_CLEAN => 0; +use constant CLEAN => 1; +use constant DIST_CLEAN => 2; +use constant MAINTAINER_CLEAN => 3; + +# Libtool files. +my @libtool_files = qw(ltmain.sh config.guess config.sub); +# ltconfig appears here for compatibility with old versions of libtool. +my @libtool_sometimes = qw(ltconfig ltcf-c.sh ltcf-cxx.sh ltcf-gcj.sh); + +# Commonly found files we look for and automatically include in +# DISTFILES. +my @common_files = + (qw(ABOUT-GNU ABOUT-NLS AUTHORS BACKLOG COPYING COPYING.DOC COPYING.LIB + COPYING.LESSER ChangeLog INSTALL NEWS README THANKS TODO + ansi2knr.1 ansi2knr.c compile config.guess config.rpath config.sub + depcomp elisp-comp install-sh libversion.in mdate-sh missing + mkinstalldirs py-compile texinfo.tex ylwrap), + @libtool_files, @libtool_sometimes); + +# Commonly used files we auto-include, but only sometimes. This list +# is used for the --help output only. +my @common_sometimes = + qw(aclocal.m4 acconfig.h config.h.top config.h.bot configure + configure.ac configure.in stamp-vti); + +# Standard directories from the GNU Coding Standards, and additional +# pkg* directories from Automake. Stored in a hash for fast member check. +my %standard_prefix = + map { $_ => 1 } (qw(bin data dataroot dvi exec html include info + lib libexec lisp localstate man man1 man2 man3 + man4 man5 man6 man7 man8 man9 oldinclude pdf + pkgdatadir pkgincludedir pkglibdir ps sbin + sharedstate sysconf)); + +# Copyright on generated Makefile.ins. +my $gen_copyright = "\ +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. +"; + +# These constants are returned by the lang_*_rewrite functions. +# LANG_SUBDIR means that the resulting object file should be in a +# subdir if the source file is. In this case the file name cannot +# have `..' components. +use constant LANG_IGNORE => 0; +use constant LANG_PROCESS => 1; +use constant LANG_SUBDIR => 2; + +# These are used when keeping track of whether an object can be built +# by two different paths. +use constant COMPILE_LIBTOOL => 1; +use constant COMPILE_ORDINARY => 2; + +# We can't always associate a location to a variable or a rule, +# when it's defined by Automake. We use INTERNAL in this case. +use constant INTERNAL => new Automake::Location; + + +## ---------------------------------- ## +## Variables related to the options. ## +## ---------------------------------- ## + +# TRUE if we should always generate Makefile.in. +my $force_generation = 1; + +# From the Perl manual. +my $symlink_exists = (eval 'symlink ("", "");', $@ eq ''); + +# TRUE if missing standard files should be installed. +my $add_missing = 0; + +# TRUE if we should copy missing files; otherwise symlink if possible. +my $copy_missing = 0; + +# TRUE if we should always update files that we know about. +my $force_missing = 0; + + +## ---------------------------------------- ## +## Variables filled during files scanning. ## +## ---------------------------------------- ## + +# Name of the configure.ac file. +my $configure_ac; + +# Files found by scanning configure.ac for LIBOBJS. +my %libsources = (); + +# Names used in AC_CONFIG_HEADER call. +my @config_headers = (); + +# Names used in AC_CONFIG_LINKS call. +my @config_links = (); + +# Directory where output files go. Actually, output files are +# relative to this directory. +my $output_directory; + +# List of Makefile.am's to process, and their corresponding outputs. +my @input_files = (); +my %output_files = (); + +# Complete list of Makefile.am's that exist. +my @configure_input_files = (); + +# List of files in AC_CONFIG_FILES/AC_OUTPUT without Makefile.am's, +# and their outputs. +my @other_input_files = (); +# Where each AC_CONFIG_FILES/AC_OUTPUT/AC_CONFIG_LINK/AC_CONFIG_HEADER appears. +# The keys are the files created by these macros. +my %ac_config_files_location = (); + +# Directory to search for configure-required files. This +# will be computed by &locate_aux_dir and can be set using +# AC_CONFIG_AUX_DIR in configure.ac. +# $CONFIG_AUX_DIR is the `raw' directory, valid only in the source-tree. +my $config_aux_dir = ''; +my $config_aux_dir_set_in_configure_ac = 0; +# $AM_CONFIG_AUX_DIR is prefixed with $(top_srcdir), so it can be used +# in Makefiles. +my $am_config_aux_dir = ''; + +# Directory to search for AC_LIBSOURCE files, as set by AC_CONFIG_LIBOBJ_DIR +# in configure.ac. +my $config_libobj_dir = ''; + +# Whether AM_GNU_GETTEXT has been seen in configure.ac. +my $seen_gettext = 0; +# Whether AM_GNU_GETTEXT([external]) is used. +my $seen_gettext_external = 0; +# Where AM_GNU_GETTEXT appears. +my $ac_gettext_location; +# Whether AM_GNU_GETTEXT_INTL_SUBDIR has been seen. +my $seen_gettext_intl = 0; + +# Lists of tags supported by Libtool. +my %libtool_tags = (); +# 1 if Libtool uses LT_SUPPORTED_TAG. If it does, then it also +# uses AC_REQUIRE_AUX_FILE. +my $libtool_new_api = 0; + +# Most important AC_CANONICAL_* macro seen so far. +my $seen_canonical = 0; +# Location of that macro. +my $canonical_location; + +# Where AM_MAINTAINER_MODE appears. +my $seen_maint_mode; + +# Actual version we've seen. +my $package_version = ''; + +# Where version is defined. +my $package_version_location; + +# TRUE if we've seen AC_ENABLE_MULTILIB. +my $seen_multilib = 0; + +# TRUE if we've seen AM_PROG_CC_C_O +my $seen_cc_c_o = 0; + +# Location of AC_REQUIRE_AUX_FILE calls, indexed by their argument. +my %required_aux_file = (); + +# Where AM_INIT_AUTOMAKE is called; +my $seen_init_automake = 0; + +# TRUE if we've seen AM_AUTOMAKE_VERSION. +my $seen_automake_version = 0; + +# Hash table of discovered configure substitutions. Keys are names, +# values are `FILE:LINE' strings which are used by error message +# generation. +my %configure_vars = (); + +# Ignored configure substitutions (i.e., variables not to be output in +# Makefile.in) +my %ignored_configure_vars = (); + +# Files included by $configure_ac. +my @configure_deps = (); + +# Greatest timestamp of configure's dependencies. +my $configure_deps_greatest_timestamp = 0; + +# Hash table of AM_CONDITIONAL variables seen in configure. +my %configure_cond = (); + +# This maps extensions onto language names. +my %extension_map = (); + +# List of the DIST_COMMON files we discovered while reading +# configure.in +my $configure_dist_common = ''; + +# This maps languages names onto objects. +my %languages = (); +# Maps each linker variable onto a language object. +my %link_languages = (); + +# List of targets we must always output. +# FIXME: Complete, and remove falsely required targets. +my %required_targets = + ( + 'all' => 1, + 'dvi' => 1, + 'pdf' => 1, + 'ps' => 1, + 'info' => 1, + 'install-info' => 1, + 'install' => 1, + 'install-data' => 1, + 'install-exec' => 1, + 'uninstall' => 1, + + # FIXME: Not required, temporary hacks. + # Well, actually they are sort of required: the -recursive + # targets will run them anyway... + 'dvi-am' => 1, + 'pdf-am' => 1, + 'ps-am' => 1, + 'info-am' => 1, + 'install-data-am' => 1, + 'install-exec-am' => 1, + 'installcheck-am' => 1, + 'uninstall-am' => 1, + + 'install-man' => 1, + ); + +# Set to 1 if this run will create the Makefile.in that distribute +# the files in config_aux_dir. +my $automake_will_process_aux_dir = 0; + +# The name of the Makefile currently being processed. +my $am_file = 'BUG'; + + +################################################################ + +## ------------------------------------------ ## +## Variables reset by &initialize_per_input. ## +## ------------------------------------------ ## + +# Basename and relative dir of the input file. +my $am_file_name; +my $am_relative_dir; + +# Same but wrt Makefile.in. +my $in_file_name; +my $relative_dir; + +# Relative path to the top directory. +my $topsrcdir; + +# Greatest timestamp of the output's dependencies (excluding +# configure's dependencies). +my $output_deps_greatest_timestamp; + +# These two variables are used when generating each Makefile.in. +# They hold the Makefile.in until it is ready to be printed. +my $output_rules; +my $output_vars; +my $output_trailer; +my $output_all; +my $output_header; + +# This is the conditional stack, updated on if/else/endif, and +# used to build Condition objects. +my @cond_stack; + +# This holds the set of included files. +my @include_stack; + +# List of dependencies for the obvious targets. +my @all; +my @check; +my @check_tests; + +# Keys in this hash table are files to delete. The associated +# value tells when this should happen (MOSTLY_CLEAN, DIST_CLEAN, etc.) +my %clean_files; + +# Keys in this hash table are object files or other files in +# subdirectories which need to be removed. This only holds files +# which are created by compilations. The value in the hash indicates +# when the file should be removed. +my %compile_clean_files; + +# Keys in this hash table are directories where we expect to build a +# libtool object. We use this information to decide what directories +# to delete. +my %libtool_clean_directories; + +# Value of `$(SOURCES)', used by tags.am. +my @sources; +# Sources which go in the distribution. +my @dist_sources; + +# This hash maps object file names onto their corresponding source +# file names. This is used to ensure that each object is created +# by a single source file. +my %object_map; + +# This hash maps object file names onto an integer value representing +# whether this object has been built via ordinary compilation or +# libtool compilation (the COMPILE_* constants). +my %object_compilation_map; + + +# This keeps track of the directories for which we've already +# created dirstamp code. Keys are directories, values are stamp files. +# Several keys can share the same stamp files if they are equivalent +# (as are `.//foo' and `foo'). +my %directory_map; + +# All .P files. +my %dep_files; + +# This is a list of all targets to run during "make dist". +my @dist_targets; + +# Keep track of all programs declared in this Makefile, without +# $(EXEEXT). @substitution@ are not listed. +my %known_programs; + +# Keys in this hash are the basenames of files which must depend on +# ansi2knr. Values are either the empty string, or the directory in +# which the ANSI source file appears; the directory must have a +# trailing `/'. +my %de_ansi_files; + +# This is the name of the redirect `all' target to use. +my $all_target; + +# This keeps track of which extensions we've seen (that we care +# about). +my %extension_seen; + +# This is random scratch space for the language finish functions. +# Don't randomly overwrite it; examine other uses of keys first. +my %language_scratch; + +# We keep track of which objects need special (per-executable) +# handling on a per-language basis. +my %lang_specific_files; + +# This is set when `handle_dist' has finished. Once this happens, +# we should no longer push on dist_common. +my $handle_dist_run; + +# Used to store a set of linkers needed to generate the sources currently +# under consideration. +my %linkers_used; + +# True if we need `LINK' defined. This is a hack. +my $need_link; + +# Was get_object_extension run? +# FIXME: This is a hack. a better switch should be found. +my $get_object_extension_was_run; + +# Record each file processed by make_paragraphs. +my %transformed_files; + +# Cache each file processed by make_paragraphs. +# (This is different from %transformed_files because +# %transformed_files is reset for each file while %am_file_cache +# it global to the run.) +my %am_file_cache; + +################################################################ + +# var_SUFFIXES_trigger ($TYPE, $VALUE) +# ------------------------------------ +# This is called by Automake::Variable::define() when SUFFIXES +# is defined ($TYPE eq '') or appended ($TYPE eq '+'). +# The work here needs to be performed as a side-effect of the +# macro_define() call because SUFFIXES definitions impact +# on $KNOWN_EXTENSIONS_PATTERN which is used used when parsing +# the input am file. +sub var_SUFFIXES_trigger ($$) +{ + my ($type, $value) = @_; + accept_extensions (split (' ', $value)); +} +Automake::Variable::hook ('SUFFIXES', \&var_SUFFIXES_trigger); + +################################################################ + +## --------------------------------- ## +## Forward subroutine declarations. ## +## --------------------------------- ## +sub register_language (%); +sub file_contents_internal ($$$%); +sub define_files_variable ($\@$$); + + +# &initialize_per_input () +# ------------------------ +# (Re)-Initialize per-Makefile.am variables. +sub initialize_per_input () +{ + reset_local_duplicates (); + + $am_file_name = ''; + $am_relative_dir = ''; + + $in_file_name = ''; + $relative_dir = ''; + + $output_deps_greatest_timestamp = 0; + + $output_rules = ''; + $output_vars = ''; + $output_trailer = ''; + $output_all = ''; + $output_header = ''; + + Automake::Options::reset; + Automake::Variable::reset; + Automake::Rule::reset; + + @cond_stack = (); + + @include_stack = (); + + @all = (); + @check = (); + @check_tests = (); + + %clean_files = (); + + @sources = (); + @dist_sources = (); + + %object_map = (); + %object_compilation_map = (); + + %directory_map = (); + + %dep_files = (); + + @dist_targets = (); + + %known_programs = (); + + %de_ansi_files = (); + + $all_target = ''; + + %extension_seen = (); + + %language_scratch = (); + + %lang_specific_files = (); + + $handle_dist_run = 0; + + $need_link = 0; + + $get_object_extension_was_run = 0; + + %compile_clean_files = (); + + # We always include `.'. This isn't strictly correct. + %libtool_clean_directories = ('.' => 1); + + %transformed_files = (); +} + + +################################################################ + +# Initialize our list of languages that are internally supported. + +# C. +register_language ('name' => 'c', + 'Name' => 'C', + 'config_vars' => ['CC'], + 'ansi' => 1, + 'autodep' => '', + 'flags' => ['CFLAGS', 'CPPFLAGS'], + 'compiler' => 'COMPILE', + 'compile' => '$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)', + 'lder' => 'CCLD', + 'ld' => '$(CC)', + 'linker' => 'LINK', + 'link' => '$(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@', + 'compile_flag' => '-c', + 'libtool_tag' => 'CC', + 'extensions' => ['.c'], + '_finish' => \&lang_c_finish); + +# C++. +register_language ('name' => 'cxx', + 'Name' => 'C++', + 'config_vars' => ['CXX'], + 'linker' => 'CXXLINK', + 'link' => '$(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@', + 'autodep' => 'CXX', + 'flags' => ['CXXFLAGS', 'CPPFLAGS'], + 'compile' => '$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)', + 'compiler' => 'CXXCOMPILE', + 'compile_flag' => '-c', + 'output_flag' => '-o', + 'libtool_tag' => 'CXX', + 'lder' => 'CXXLD', + 'ld' => '$(CXX)', + 'pure' => 1, + 'extensions' => ['.c++', '.cc', '.cpp', '.cxx', '.C']); + +# Objective C. +register_language ('name' => 'objc', + 'Name' => 'Objective C', + 'config_vars' => ['OBJC'], + 'linker' => 'OBJCLINK', + 'link' => '$(OBJCLD) $(AM_OBJCFLAGS) $(OBJCFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@', + 'autodep' => 'OBJC', + 'flags' => ['OBJCFLAGS', 'CPPFLAGS'], + 'compile' => '$(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS)', + 'compiler' => 'OBJCCOMPILE', + 'compile_flag' => '-c', + 'output_flag' => '-o', + 'lder' => 'OBJCLD', + 'ld' => '$(OBJC)', + 'pure' => 1, + 'extensions' => ['.m']); + +# Unified Parallel C. +register_language ('name' => 'upc', + 'Name' => 'Unified Parallel C', + 'config_vars' => ['UPC'], + 'linker' => 'UPCLINK', + 'link' => '$(UPCLD) $(AM_UPCFLAGS) $(UPCFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@', + 'autodep' => 'UPC', + 'flags' => ['UPCFLAGS', 'CPPFLAGS'], + 'compile' => '$(UPC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_UPCFLAGS) $(UPCFLAGS)', + 'compiler' => 'UPCCOMPILE', + 'compile_flag' => '-c', + 'output_flag' => '-o', + 'lder' => 'UPCLD', + 'ld' => '$(UPC)', + 'pure' => 1, + 'extensions' => ['.upc']); + +# Headers. +register_language ('name' => 'header', + 'Name' => 'Header', + 'extensions' => ['.h', '.H', '.hxx', '.h++', '.hh', + '.hpp', '.inc'], + # No output. + 'output_extensions' => sub { return () }, + # Nothing to do. + '_finish' => sub { }); + +# Yacc (C & C++). +register_language ('name' => 'yacc', + 'Name' => 'Yacc', + 'config_vars' => ['YACC'], + 'flags' => ['YFLAGS'], + 'compile' => '$(YACC) $(YFLAGS) $(AM_YFLAGS)', + 'compiler' => 'YACCCOMPILE', + 'extensions' => ['.y'], + 'output_extensions' => sub { (my $ext = $_[0]) =~ tr/y/c/; + return ($ext,) }, + 'rule_file' => 'yacc', + '_finish' => \&lang_yacc_finish, + '_target_hook' => \&lang_yacc_target_hook, + 'nodist_specific' => 1); +register_language ('name' => 'yaccxx', + 'Name' => 'Yacc (C++)', + 'config_vars' => ['YACC'], + 'rule_file' => 'yacc', + 'flags' => ['YFLAGS'], + 'compiler' => 'YACCCOMPILE', + 'compile' => '$(YACC) $(YFLAGS) $(AM_YFLAGS)', + 'extensions' => ['.y++', '.yy', '.yxx', '.ypp'], + 'output_extensions' => sub { (my $ext = $_[0]) =~ tr/y/c/; + return ($ext,) }, + '_finish' => \&lang_yacc_finish, + '_target_hook' => \&lang_yacc_target_hook, + 'nodist_specific' => 1); + +# Lex (C & C++). +register_language ('name' => 'lex', + 'Name' => 'Lex', + 'config_vars' => ['LEX'], + 'rule_file' => 'lex', + 'flags' => ['LFLAGS'], + 'compile' => '$(LEX) $(LFLAGS) $(AM_LFLAGS)', + 'compiler' => 'LEXCOMPILE', + 'extensions' => ['.l'], + 'output_extensions' => sub { (my $ext = $_[0]) =~ tr/l/c/; + return ($ext,) }, + '_finish' => \&lang_lex_finish, + '_target_hook' => \&lang_lex_target_hook, + 'nodist_specific' => 1); +register_language ('name' => 'lexxx', + 'Name' => 'Lex (C++)', + 'config_vars' => ['LEX'], + 'rule_file' => 'lex', + 'flags' => ['LFLAGS'], + 'compile' => '$(LEX) $(LFLAGS) $(AM_LFLAGS)', + 'compiler' => 'LEXCOMPILE', + 'extensions' => ['.l++', '.ll', '.lxx', '.lpp'], + 'output_extensions' => sub { (my $ext = $_[0]) =~ tr/l/c/; + return ($ext,) }, + '_finish' => \&lang_lex_finish, + '_target_hook' => \&lang_lex_target_hook, + 'nodist_specific' => 1); + +# Assembler. +register_language ('name' => 'asm', + 'Name' => 'Assembler', + 'config_vars' => ['CCAS', 'CCASFLAGS'], + + 'flags' => ['CCASFLAGS'], + # Users can set AM_CCASFLAGS to include DEFS, INCLUDES, + # or anything else required. They can also set CCAS. + # Or simply use Preprocessed Assembler. + 'compile' => '$(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS)', + 'compiler' => 'CCASCOMPILE', + 'compile_flag' => '-c', + 'output_flag' => '-o', + 'extensions' => ['.s'], + + # With assembly we still use the C linker. + '_finish' => \&lang_c_finish); + +# Preprocessed Assembler. +register_language ('name' => 'cppasm', + 'Name' => 'Preprocessed Assembler', + 'config_vars' => ['CCAS', 'CCASFLAGS'], + + 'autodep' => 'CCAS', + 'flags' => ['CCASFLAGS', 'CPPFLAGS'], + 'compile' => '$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS)', + 'compiler' => 'CPPASCOMPILE', + 'compile_flag' => '-c', + 'output_flag' => '-o', + 'extensions' => ['.S'], + + # With assembly we still use the C linker. + '_finish' => \&lang_c_finish); + +# Fortran 77 +register_language ('name' => 'f77', + 'Name' => 'Fortran 77', + 'config_vars' => ['F77'], + 'linker' => 'F77LINK', + 'link' => '$(F77LD) $(AM_FFLAGS) $(FFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@', + 'flags' => ['FFLAGS'], + 'compile' => '$(F77) $(AM_FFLAGS) $(FFLAGS)', + 'compiler' => 'F77COMPILE', + 'compile_flag' => '-c', + 'output_flag' => '-o', + 'libtool_tag' => 'F77', + 'lder' => 'F77LD', + 'ld' => '$(F77)', + 'pure' => 1, + 'extensions' => ['.f', '.for']); + +# Fortran +register_language ('name' => 'fc', + 'Name' => 'Fortran', + 'config_vars' => ['FC'], + 'linker' => 'FCLINK', + 'link' => '$(FCLD) $(AM_FCFLAGS) $(FCFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@', + 'flags' => ['FCFLAGS'], + 'compile' => '$(FC) $(AM_FCFLAGS) $(FCFLAGS)', + 'compiler' => 'FCCOMPILE', + 'compile_flag' => '-c', + 'output_flag' => '-o', + 'lder' => 'FCLD', + 'ld' => '$(FC)', + 'pure' => 1, + 'extensions' => ['.f90', '.f95']); + +# Preprocessed Fortran +register_language ('name' => 'ppfc', + 'Name' => 'Preprocessed Fortran', + 'config_vars' => ['FC'], + 'linker' => 'FCLINK', + 'link' => '$(FCLD) $(AM_FCFLAGS) $(FCFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@', + 'lder' => 'FCLD', + 'ld' => '$(FC)', + 'flags' => ['FCFLAGS', 'CPPFLAGS'], + 'compiler' => 'PPFCCOMPILE', + 'compile' => '$(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS)', + 'compile_flag' => '-c', + 'output_flag' => '-o', + 'libtool_tag' => 'FC', + 'pure' => 1, + 'extensions' => ['.F90','.F95']); + +# Preprocessed Fortran 77 +# +# The current support for preprocessing Fortran 77 just involves +# passing `$(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) +# $(CPPFLAGS)' as additional flags to the Fortran 77 compiler, since +# this is how GNU Make does it; see the `GNU Make Manual, Edition 0.51 +# for `make' Version 3.76 Beta' (specifically, from info file +# `(make)Catalogue of Rules'). +# +# A better approach would be to write an Autoconf test +# (i.e. AC_PROG_FPP) for a Fortran 77 preprocessor, because not all +# Fortran 77 compilers know how to do preprocessing. The Autoconf +# macro AC_PROG_FPP should test the Fortran 77 compiler first for +# preprocessing capabilities, and then fall back on cpp (if cpp were +# available). +register_language ('name' => 'ppf77', + 'Name' => 'Preprocessed Fortran 77', + 'config_vars' => ['F77'], + 'linker' => 'F77LINK', + 'link' => '$(F77LD) $(AM_FFLAGS) $(FFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@', + 'lder' => 'F77LD', + 'ld' => '$(F77)', + 'flags' => ['FFLAGS', 'CPPFLAGS'], + 'compiler' => 'PPF77COMPILE', + 'compile' => '$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS)', + 'compile_flag' => '-c', + 'output_flag' => '-o', + 'libtool_tag' => 'F77', + 'pure' => 1, + 'extensions' => ['.F']); + +# Ratfor. +register_language ('name' => 'ratfor', + 'Name' => 'Ratfor', + 'config_vars' => ['F77'], + 'linker' => 'F77LINK', + 'link' => '$(F77LD) $(AM_FFLAGS) $(FFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@', + 'lder' => 'F77LD', + 'ld' => '$(F77)', + 'flags' => ['RFLAGS', 'FFLAGS'], + # FIXME also FFLAGS. + 'compile' => '$(F77) $(AM_FFLAGS) $(FFLAGS) $(AM_RFLAGS) $(RFLAGS)', + 'compiler' => 'RCOMPILE', + 'compile_flag' => '-c', + 'output_flag' => '-o', + 'libtool_tag' => 'F77', + 'pure' => 1, + 'extensions' => ['.r']); + +# Java via gcj. +register_language ('name' => 'java', + 'Name' => 'Java', + 'config_vars' => ['GCJ'], + 'linker' => 'GCJLINK', + 'link' => '$(GCJLD) $(AM_GCJFLAGS) $(GCJFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@', + 'autodep' => 'GCJ', + 'flags' => ['GCJFLAGS'], + 'compile' => '$(GCJ) $(AM_GCJFLAGS) $(GCJFLAGS)', + 'compiler' => 'GCJCOMPILE', + 'compile_flag' => '-c', + 'output_flag' => '-o', + 'libtool_tag' => 'GCJ', + 'lder' => 'GCJLD', + 'ld' => '$(GCJ)', + 'pure' => 1, + 'extensions' => ['.java', '.class', '.zip', '.jar']); + +################################################################ + +# Error reporting functions. + +# err_am ($MESSAGE, [%OPTIONS]) +# ----------------------------- +# Uncategorized errors about the current Makefile.am. +sub err_am ($;%) +{ + msg_am ('error', @_); +} + +# err_ac ($MESSAGE, [%OPTIONS]) +# ----------------------------- +# Uncategorized errors about configure.ac. +sub err_ac ($;%) +{ + msg_ac ('error', @_); +} + +# msg_am ($CHANNEL, $MESSAGE, [%OPTIONS]) +# --------------------------------------- +# Messages about about the current Makefile.am. +sub msg_am ($$;%) +{ + my ($channel, $msg, %opts) = @_; + msg $channel, "${am_file}.am", $msg, %opts; +} + +# msg_ac ($CHANNEL, $MESSAGE, [%OPTIONS]) +# --------------------------------------- +# Messages about about configure.ac. +sub msg_ac ($$;%) +{ + my ($channel, $msg, %opts) = @_; + msg $channel, $configure_ac, $msg, %opts; +} + +################################################################ + +# subst ($TEXT) +# ------------- +# Return a configure-style substitution using the indicated text. +# We do this to avoid having the substitutions directly in automake.in; +# when we do that they are sometimes removed and this causes confusion +# and bugs. +sub subst ($) +{ + my ($text) = @_; + return '@' . $text . '@'; +} + +################################################################ + + +# $BACKPATH +# &backname ($REL-DIR) +# -------------------- +# If I `cd $REL-DIR', then to come back, I should `cd $BACKPATH'. +# For instance `src/foo' => `../..'. +# Works with non strictly increasing paths, i.e., `src/../lib' => `..'. +sub backname ($) +{ + my ($file) = @_; + my @res; + foreach (split (/\//, $file)) + { + next if $_ eq '.' || $_ eq ''; + if ($_ eq '..') + { + pop @res; + } + else + { + push (@res, '..'); + } + } + return join ('/', @res) || '.'; +} + +################################################################ + + +# Handle AUTOMAKE_OPTIONS variable. Return 1 on error, 0 otherwise. +sub handle_options +{ + my $var = var ('AUTOMAKE_OPTIONS'); + if ($var) + { + if ($var->has_conditional_contents) + { + msg_var ('unsupported', $var, + "`AUTOMAKE_OPTIONS' cannot have conditional contents"); + } + foreach my $locvals ($var->value_as_list_recursive (cond_filter => TRUE, + location => 1)) + { + my ($loc, $value) = @$locvals; + return 1 if (process_option_list ($loc, $value)) + } + } + + if ($strictness == GNITS) + { + set_option ('readme-alpha', INTERNAL); + set_option ('std-options', INTERNAL); + set_option ('check-news', INTERNAL); + } + + return 0; +} + +# shadow_unconditionally ($varname, $where) +# ----------------------------------------- +# Return a $(variable) that contains all possible values +# $varname can take. +# If the VAR wasn't defined conditionally, return $(VAR). +# Otherwise we create a am__VAR_DIST variable which contains +# all possible values, and return $(am__VAR_DIST). +sub shadow_unconditionally ($$) +{ + my ($varname, $where) = @_; + my $var = var $varname; + if ($var->has_conditional_contents) + { + $varname = "am__${varname}_DIST"; + my @files = uniq ($var->value_as_list_recursive); + define_pretty_variable ($varname, TRUE, $where, @files); + } + return "\$($varname)" +} + +# get_object_extension ($EXTENSION) +# --------------------------------- +# Prefix $EXTENSION with $U if ansi2knr is in use. +sub get_object_extension ($) +{ + my ($extension) = @_; + + # Check for automatic de-ANSI-fication. + $extension = '$U' . $extension + if option 'ansi2knr'; + + $get_object_extension_was_run = 1; + + return $extension; +} + +# check_user_variables (@LIST) +# ---------------------------- +# Make sure each variable VAR in @LIST does not exist, suggest using AM_VAR +# otherwise. +sub check_user_variables (@) +{ + my @dont_override = @_; + foreach my $flag (@dont_override) + { + my $var = var $flag; + if ($var) + { + for my $cond ($var->conditions->conds) + { + if ($var->rdef ($cond)->owner == VAR_MAKEFILE) + { + msg_cond_var ('gnu', $cond, $flag, + "`$flag' is a user variable, " + . "you should not override it;\n" + . "use `AM_$flag' instead."); + } + } + } + } +} + +# Call finish function for each language that was used. +sub handle_languages +{ + if (! option 'no-dependencies') + { + # Include auto-dep code. Don't include it if DEP_FILES would + # be empty. + if (&saw_sources_p (0) && keys %dep_files) + { + # Set location of depcomp. + &define_variable ('depcomp', + "\$(SHELL) $am_config_aux_dir/depcomp", + INTERNAL); + &define_variable ('am__depfiles_maybe', 'depfiles', INTERNAL); + + require_conf_file ("$am_file.am", FOREIGN, 'depcomp'); + + my @deplist = sort keys %dep_files; + # Generate each `include' individually. Irix 6 make will + # not properly include several files resulting from a + # variable expansion; generating many separate includes + # seems safest. + $output_rules .= "\n"; + foreach my $iter (@deplist) + { + $output_rules .= (subst ('AMDEP_TRUE') + . subst ('am__include') + . ' ' + . subst ('am__quote') + . $iter + . subst ('am__quote') + . "\n"); + } + + # Compute the set of directories to remove in distclean-depend. + my @depdirs = uniq (map { dirname ($_) } @deplist); + $output_rules .= &file_contents ('depend', + new Automake::Location, + DEPDIRS => "@depdirs"); + } + } + else + { + &define_variable ('depcomp', '', INTERNAL); + &define_variable ('am__depfiles_maybe', '', INTERNAL); + } + + my %done; + + # Is the c linker needed? + my $needs_c = 0; + foreach my $ext (sort keys %extension_seen) + { + next unless $extension_map{$ext}; + + my $lang = $languages{$extension_map{$ext}}; + + my $rule_file = $lang->rule_file || 'depend2'; + + # Get information on $LANG. + my $pfx = $lang->autodep; + my $fpfx = ($pfx eq '') ? 'CC' : $pfx; + + my ($AMDEP, $FASTDEP) = + (option 'no-dependencies' || $lang->autodep eq 'no') + ? ('FALSE', 'FALSE') : ('AMDEP', "am__fastdep$fpfx"); + + my %transform = ('EXT' => $ext, + 'PFX' => $pfx, + 'FPFX' => $fpfx, + 'AMDEP' => $AMDEP, + 'FASTDEP' => $FASTDEP, + '-c' => $lang->compile_flag || '', + # These are not used, but they need to be defined + # so &transform do not complain. + SUBDIROBJ => 0, + 'DERIVED-EXT' => 'BUG', + DIST_SOURCE => 1, + ); + + # Generate the appropriate rules for this extension. + if (((! option 'no-dependencies') && $lang->autodep ne 'no') + || defined $lang->compile) + { + # Some C compilers don't support -c -o. Use it only if really + # needed. + my $output_flag = $lang->output_flag || ''; + $output_flag = '-o' + if (! $output_flag + && $lang->name eq 'c' + && option 'subdir-objects'); + + # Compute a possible derived extension. + # This is not used by depend2.am. + my $der_ext = (&{$lang->output_extensions} ($ext))[0]; + + # When we output an inference rule like `.c.o:' we + # have two cases to consider: either subdir-objects + # is used, or it is not. + # + # In the latter case the rule is used to build objects + # in the current directory, and dependencies always + # go into `./$(DEPDIR)/'. We can hard-code this value. + # + # In the former case the rule can be used to build + # objects in sub-directories too. Dependencies should + # go into the appropriate sub-directories, e.g., + # `sub/$(DEPDIR)/'. The value of this directory + # needs to be computed on-the-fly. + # + # DEPBASE holds the name of this directory, plus the + # basename part of the object file (extensions Po, TPo, + # Plo, TPlo will be added later as appropriate). It is + # either hardcoded, or a shell variable (`$depbase') that + # will be computed by the rule. + my $depbase = + option ('subdir-objects') ? '$$depbase' : '$(DEPDIR)/$*'; + $output_rules .= + file_contents ($rule_file, + new Automake::Location, + %transform, + GENERIC => 1, + + 'DERIVED-EXT' => $der_ext, + + DEPBASE => $depbase, + BASE => '$*', + SOURCE => '$<', + OBJ => '$@', + OBJOBJ => '$@', + LTOBJ => '$@', + + COMPILE => '$(' . $lang->compiler . ')', + LTCOMPILE => '$(LT' . $lang->compiler . ')', + -o => $output_flag, + SUBDIROBJ => !! option 'subdir-objects'); + } + + # Now include code for each specially handled object with this + # language. + my %seen_files = (); + foreach my $file (@{$lang_specific_files{$lang->name}}) + { + my ($derived, $source, $obj, $myext, %file_transform) = @$file; + + # We might see a given object twice, for instance if it is + # used under different conditions. + next if defined $seen_files{$obj}; + $seen_files{$obj} = 1; + + prog_error ("found " . $lang->name . + " in handle_languages, but compiler not defined") + unless defined $lang->compile; + + my $obj_compile = $lang->compile; + + # Rewrite each occurrence of `AM_$flag' in the compile + # rule into `${derived}_$flag' if it exists. + for my $flag (@{$lang->flags}) + { + my $val = "${derived}_$flag"; + $obj_compile =~ s/\(AM_$flag\)/\($val\)/ + if set_seen ($val); + } + + my $libtool_tag = ''; + if ($lang->libtool_tag && exists $libtool_tags{$lang->libtool_tag}) + { + $libtool_tag = '--tag=' . $lang->libtool_tag . ' ' + } + + my $ptltflags = "${derived}_LIBTOOLFLAGS"; + $ptltflags = 'AM_LIBTOOLFLAGS' unless set_seen $ptltflags; + + my $obj_ltcompile = + "\$(LIBTOOL) $libtool_tag\$($ptltflags) \$(LIBTOOLFLAGS) " + . "--mode=compile $obj_compile"; + + # We _need_ `-o' for per object rules. + my $output_flag = $lang->output_flag || '-o'; + + my $depbase = dirname ($obj); + $depbase = '' + if $depbase eq '.'; + $depbase .= '/' + unless $depbase eq ''; + $depbase .= '$(DEPDIR)/' . basename ($obj); + + # Support for deansified files in subdirectories is ugly + # enough to deserve an explanation. + # + # A Note about normal ansi2knr processing first. On + # + # AUTOMAKE_OPTIONS = ansi2knr + # bin_PROGRAMS = foo + # foo_SOURCES = foo.c + # + # we generate rules similar to: + # + # foo: foo$U.o; link ... + # foo$U.o: foo$U.c; compile ... + # foo_.c: foo.c; ansi2knr ... + # + # this is fairly compact, and will call ansi2knr depending + # on the value of $U (`' or `_'). + # + # It's harder with subdir sources. On + # + # AUTOMAKE_OPTIONS = ansi2knr + # bin_PROGRAMS = foo + # foo_SOURCES = sub/foo.c + # + # we have to create foo_.c in the current directory. + # (Unless the user asks 'subdir-objects'.) This is important + # in case the same file (`foo.c') is compiled from other + # directories with different cpp options: foo_.c would + # be preprocessed for only one set of options if it were + # put in the subdirectory. + # + # Because foo$U.o must be built from either foo_.c or + # sub/foo.c we can't be as concise as in the first example. + # Instead we output + # + # foo: foo$U.o; link ... + # foo_.o: foo_.c; compile ... + # foo.o: sub/foo.c; compile ... + # foo_.c: foo.c; ansi2knr ... + # + # This is why we'll now transform $rule_file twice + # if we detect this case. + # A first time we output the compile rule with `$U' + # replaced by `_' and the source directory removed, + # and another time we simply remove `$U'. + # + # Note that at this point $source (as computed by + # &handle_single_transform) is `sub/foo$U.c'. + # This can be confusing: it can be used as-is when + # subdir-objects is set, otherwise you have to know + # it really means `foo_.c' or `sub/foo.c'. + my $objdir = dirname ($obj); + my $srcdir = dirname ($source); + if ($lang->ansi && $obj =~ /\$U/) + { + prog_error "`$obj' contains \$U, but `$source' doesn't." + if $source !~ /\$U/; + + (my $source_ = $source) =~ s/\$U/_/g; + # Output an additional rule if _.c and .c are not in + # the same directory. (_.c is always in $objdir.) + if ($objdir ne $srcdir) + { + (my $obj_ = $obj) =~ s/\$U/_/g; + (my $depbase_ = $depbase) =~ s/\$U/_/g; + $source_ = basename ($source_); + + $output_rules .= + file_contents ($rule_file, + new Automake::Location, + %transform, + GENERIC => 0, + + DEPBASE => $depbase_, + BASE => $obj_, + SOURCE => $source_, + OBJ => "$obj_$myext", + OBJOBJ => "$obj_.obj", + LTOBJ => "$obj_.lo", + + COMPILE => $obj_compile, + LTCOMPILE => $obj_ltcompile, + -o => $output_flag, + %file_transform); + $obj =~ s/\$U//g; + $depbase =~ s/\$U//g; + $source =~ s/\$U//g; + } + } + + $output_rules .= + file_contents ($rule_file, + new Automake::Location, + %transform, + GENERIC => 0, + + DEPBASE => $depbase, + BASE => $obj, + SOURCE => $source, + # Use $myext and not `.o' here, in case + # we are actually building a new source + # file -- e.g. via yacc. + OBJ => "$obj$myext", + OBJOBJ => "$obj.obj", + LTOBJ => "$obj.lo", + + COMPILE => $obj_compile, + LTCOMPILE => $obj_ltcompile, + -o => $output_flag, + %file_transform); + } + + # The rest of the loop is done once per language. + next if defined $done{$lang}; + $done{$lang} = 1; + + # Load the language dependent Makefile chunks. + my %lang = map { uc ($_) => 0 } keys %languages; + $lang{uc ($lang->name)} = 1; + $output_rules .= file_contents ('lang-compile', + new Automake::Location, + %transform, %lang); + + # If the source to a program consists entirely of code from a + # `pure' language, for instance C++ or Fortran 77, then we + # don't need the C compiler code. However if we run into + # something unusual then we do generate the C code. There are + # probably corner cases here that do not work properly. + # People linking Java code to Fortran code deserve pain. + $needs_c ||= ! $lang->pure; + + define_compiler_variable ($lang) + if ($lang->compile); + + define_linker_variable ($lang) + if ($lang->link); + + require_variables ("$am_file.am", $lang->Name . " source seen", + TRUE, @{$lang->config_vars}); + + # Call the finisher. + $lang->finish; + + # Flags listed in `->flags' are user variables (per GNU Standards), + # they should not be overridden in the Makefile... + my @dont_override = @{$lang->flags}; + # ... and so is LDFLAGS. + push @dont_override, 'LDFLAGS' if $lang->link; + + check_user_variables @dont_override; + } + + # If the project is entirely C++ or entirely Fortran 77 (i.e., 1 + # suffix rule was learned), don't bother with the C stuff. But if + # anything else creeps in, then use it. + $needs_c = 1 + if $need_link || suffix_rules_count > 1; + + if ($needs_c) + { + &define_compiler_variable ($languages{'c'}) + unless defined $done{$languages{'c'}}; + define_linker_variable ($languages{'c'}); + } +} + + +# append_exeext { PREDICATE } $MACRO +# ---------------------------------- +# Append $(EXEEXT) to each filename in $F appearing in the Makefile +# variable $MACRO if &PREDICATE($F) is true. @substitutions@ are +# ignored. +# +# This is typically used on all filenames of *_PROGRAMS, and filenames +# of TESTS that are programs. +sub append_exeext (&$) +{ + my ($pred, $macro) = @_; + + transform_variable_recursively + ($macro, $macro, 'am__EXEEXT', 0, INTERNAL, + sub { + my ($subvar, $val, $cond, $full_cond) = @_; + # Append $(EXEEXT) unless the user did it already, or it's a + # @substitution@. + $val .= '$(EXEEXT)' + if $val !~ /(?:\$\(EXEEXT\)$|^[@]\w+[@]$)/ && &$pred ($val); + return $val; + }); +} + + +# Check to make sure a source defined in LIBOBJS is not explicitly +# mentioned. This is a separate function (as opposed to being inlined +# in handle_source_transform) because it isn't always appropriate to +# do this check. +sub check_libobjs_sources +{ + my ($one_file, $unxformed) = @_; + + foreach my $prefix ('', 'EXTRA_', 'dist_', 'nodist_', + 'dist_EXTRA_', 'nodist_EXTRA_') + { + my @files; + my $varname = $prefix . $one_file . '_SOURCES'; + my $var = var ($varname); + if ($var) + { + @files = $var->value_as_list_recursive; + } + elsif ($prefix eq '') + { + @files = ($unxformed . '.c'); + } + else + { + next; + } + + foreach my $file (@files) + { + err_var ($prefix . $one_file . '_SOURCES', + "automatically discovered file `$file' should not" . + " be explicitly mentioned") + if defined $libsources{$file}; + } + } +} + + +# @OBJECTS +# handle_single_transform ($VAR, $TOPPARENT, $DERIVED, $OBJ, $FILE, %TRANSFORM) +# ----------------------------------------------------------------------------- +# Does much of the actual work for handle_source_transform. +# Arguments are: +# $VAR is the name of the variable that the source filenames come from +# $TOPPARENT is the name of the _SOURCES variable which is being processed +# $DERIVED is the name of resulting executable or library +# $OBJ is the object extension (e.g., `$U.lo') +# $FILE the source file to transform +# %TRANSFORM contains extras arguments to pass to file_contents +# when producing explicit rules +# Result is a list of the names of objects +# %linkers_used will be updated with any linkers needed +sub handle_single_transform ($$$$$%) +{ + my ($var, $topparent, $derived, $obj, $_file, %transform) = @_; + my @files = ($_file); + my @result = (); + my $nonansi_obj = $obj; + $nonansi_obj =~ s/\$U//g; + + # Turn sources into objects. We use a while loop like this + # because we might add to @files in the loop. + while (scalar @files > 0) + { + $_ = shift @files; + + # Configure substitutions in _SOURCES variables are errors. + if (/^\@.*\@$/) + { + my $parent_msg = ''; + $parent_msg = "\nand is referred to from `$topparent'" + if $topparent ne $var->name; + err_var ($var, + "`" . $var->name . "' includes configure substitution `$_'" + . $parent_msg . ";\nconfigure " . + "substitutions are not allowed in _SOURCES variables"); + next; + } + + # If the source file is in a subdirectory then the `.o' is put + # into the current directory, unless the subdir-objects option + # is in effect. + + # Split file name into base and extension. + next if ! /^(?:(.*)\/)?([^\/]*)($KNOWN_EXTENSIONS_PATTERN)$/; + my $full = $_; + my $directory = $1 || ''; + my $base = $2; + my $extension = $3; + + # We must generate a rule for the object if it requires its own flags. + my $renamed = 0; + my ($linker, $object); + + # This records whether we've seen a derived source file (e.g. + # yacc output). + my $derived_source = 0; + + # This holds the `aggregate context' of the file we are + # currently examining. If the file is compiled with + # per-object flags, then it will be the name of the object. + # Otherwise it will be `AM'. This is used by the target hook + # language function. + my $aggregate = 'AM'; + + $extension = &derive_suffix ($extension, $nonansi_obj); + my $lang; + if ($extension_map{$extension} && + ($lang = $languages{$extension_map{$extension}})) + { + # Found the language, so see what it says. + &saw_extension ($extension); + + # Do we have per-executable flags for this executable? + my $have_per_exec_flags = 0; + my @peflags = @{$lang->flags}; + push @peflags, 'LIBTOOLFLAGS' if $nonansi_obj eq '.lo'; + foreach my $flag (@peflags) + { + if (set_seen ("${derived}_$flag")) + { + $have_per_exec_flags = 1; + last; + } + } + + # Note: computed subr call. The language rewrite function + # should return one of the LANG_* constants. It could + # also return a list whose first value is such a constant + # and whose second value is a new source extension which + # should be applied. This means this particular language + # generates another source file which we must then process + # further. + my $subr = \&{'lang_' . $lang->name . '_rewrite'}; + my ($r, $source_extension) + = &$subr ($directory, $base, $extension, + $nonansi_obj, $have_per_exec_flags, $var); + # Skip this entry if we were asked not to process it. + next if $r == LANG_IGNORE; + + # Now extract linker and other info. + $linker = $lang->linker; + + my $this_obj_ext; + if (defined $source_extension) + { + $this_obj_ext = $source_extension; + $derived_source = 1; + } + elsif ($lang->ansi) + { + $this_obj_ext = $obj; + } + else + { + $this_obj_ext = $nonansi_obj; + } + $object = $base . $this_obj_ext; + + if ($have_per_exec_flags) + { + # We have a per-executable flag in effect for this + # object. In this case we rewrite the object's + # name to ensure it is unique. + + # We choose the name `DERIVED_OBJECT' to ensure + # (1) uniqueness, and (2) continuity between + # invocations. However, this will result in a + # name that is too long for losing systems, in + # some situations. So we provide _SHORTNAME to + # override. + + my $dname = $derived; + my $var = var ($derived . '_SHORTNAME'); + if ($var) + { + # FIXME: should use the same Condition as + # the _SOURCES variable. But this is really + # silly overkill -- nobody should have + # conditional shortnames. + $dname = $var->variable_value; + } + $object = $dname . '-' . $object; + + prog_error ($lang->name . " flags defined without compiler") + if ! defined $lang->compile; + + $renamed = 1; + } + + # If rewrite said it was ok, put the object into a + # subdir. + if ($r == LANG_SUBDIR && $directory ne '') + { + $object = $directory . '/' . $object; + } + + # If the object file has been renamed (because per-target + # flags are used) we cannot compile the file with an + # inference rule: we need an explicit rule. + # + # If the source is in a subdirectory and the object is in + # the current directory, we also need an explicit rule. + # + # If both source and object files are in a subdirectory + # (this happens when the subdir-objects option is used), + # then the inference will work. + # + # The latter case deserves a historical note. When the + # subdir-objects option was added on 1999-04-11 it was + # thought that inferences rules would work for + # subdirectory objects too. Later, on 1999-11-22, + # automake was changed to output explicit rules even for + # subdir-objects. Nobody remembers why, but this occurred + # soon after the merge of the user-dep-gen-branch so it + # might be related. In late 2003 people complained about + # the size of the generated Makefile.ins (libgcj, with + # 2200+ subdir objects was reported to have a 9MB + # Makefile), so we now rely on inference rules again. + # Maybe we'll run across the same issue as in the past, + # but at least this time we can document it. However since + # dependency tracking has evolved it is possible that + # our old problem no longer exists. + # Using inference rules for subdir-objects has been tested + # with GNU make, Solaris make, Ultrix make, BSD make, + # HP-UX make, and OSF1 make successfully. + if ($renamed + || ($directory ne '' && ! option 'subdir-objects') + # We must also use specific rules for a nodist_ source + # if its language requests it. + || ($lang->nodist_specific && ! $transform{'DIST_SOURCE'})) + { + my $obj_sans_ext = substr ($object, 0, + - length ($this_obj_ext)); + my $full_ansi = $full; + if ($lang->ansi && option 'ansi2knr') + { + $full_ansi =~ s/$KNOWN_EXTENSIONS_PATTERN$/\$U$&/; + $obj_sans_ext .= '$U'; + } + + my @specifics = ($full_ansi, $obj_sans_ext, + # Only use $this_obj_ext in the derived + # source case because in the other case we + # *don't* want $(OBJEXT) to appear here. + ($derived_source ? $this_obj_ext : '.o')); + + # If we renamed the object then we want to use the + # per-executable flag name. But if this is simply a + # subdir build then we still want to use the AM_ flag + # name. + if ($renamed) + { + unshift @specifics, $derived; + $aggregate = $derived; + } + else + { + unshift @specifics, 'AM'; + } + + # Each item on this list is a reference to a list consisting + # of four values followed by additional transform flags for + # file_contents. The four values are the derived flag prefix + # (e.g. for `foo_CFLAGS', it is `foo'), the name of the + # source file, the base name of the output file, and + # the extension for the object file. + push (@{$lang_specific_files{$lang->name}}, + [@specifics, %transform]); + } + } + elsif ($extension eq $nonansi_obj) + { + # This is probably the result of a direct suffix rule. + # In this case we just accept the rewrite. + $object = "$base$extension"; + $object = "$directory/$object" if $directory ne ''; + $linker = ''; + } + else + { + # No error message here. Used to have one, but it was + # very unpopular. + # FIXME: we could potentially do more processing here, + # perhaps treating the new extension as though it were a + # new source extension (as above). This would require + # more restructuring than is appropriate right now. + next; + } + + err_am "object `$object' created by `$full' and `$object_map{$object}'" + if (defined $object_map{$object} + && $object_map{$object} ne $full); + + my $comp_val = (($object =~ /\.lo$/) + ? COMPILE_LIBTOOL : COMPILE_ORDINARY); + (my $comp_obj = $object) =~ s/\.lo$/.\$(OBJEXT)/; + if (defined $object_compilation_map{$comp_obj} + && $object_compilation_map{$comp_obj} != 0 + # Only see the error once. + && ($object_compilation_map{$comp_obj} + != (COMPILE_LIBTOOL | COMPILE_ORDINARY)) + && $object_compilation_map{$comp_obj} != $comp_val) + { + err_am "object `$comp_obj' created both with libtool and without"; + } + $object_compilation_map{$comp_obj} |= $comp_val; + + if (defined $lang) + { + # Let the language do some special magic if required. + $lang->target_hook ($aggregate, $object, $full, %transform); + } + + if ($derived_source) + { + prog_error ($lang->name . " has automatic dependency tracking") + if $lang->autodep ne 'no'; + # Make sure this new source file is handled next. That will + # make it appear to be at the right place in the list. + unshift (@files, $object); + # Distribute derived sources unless the source they are + # derived from is not. + &push_dist_common ($object) + unless ($topparent =~ /^(?:nobase_)?nodist_/); + next; + } + + $linkers_used{$linker} = 1; + + push (@result, $object); + + if (! defined $object_map{$object}) + { + my @dep_list = (); + $object_map{$object} = $full; + + # If resulting object is in subdir, we need to make + # sure the subdir exists at build time. + if ($object =~ /\//) + { + # FIXME: check that $DIRECTORY is somewhere in the + # project + + # For Java, the way we're handling it right now, a + # `..' component doesn't make sense. + if ($lang && $lang->name eq 'java' && $object =~ /(\/|^)\.\.\//) + { + err_am "`$full' should not contain a `..' component"; + } + + # Make sure object is removed by `make mostlyclean'. + $compile_clean_files{$object} = MOSTLY_CLEAN; + # If we have a libtool object then we also must remove + # the ordinary .o. + if ($object =~ /\.lo$/) + { + (my $xobj = $object) =~ s,lo$,\$(OBJEXT),; + $compile_clean_files{$xobj} = MOSTLY_CLEAN; + + # Remove any libtool object in this directory. + $libtool_clean_directories{$directory} = 1; + } + + push (@dep_list, require_build_directory ($directory)); + + # If we're generating dependencies, we also want + # to make sure that the appropriate subdir of the + # .deps directory is created. + push (@dep_list, + require_build_directory ($directory . '/$(DEPDIR)')) + unless option 'no-dependencies'; + } + + &pretty_print_rule ($object . ':', "\t", @dep_list) + if scalar @dep_list > 0; + } + + # Transform .o or $o file into .P file (for automatic + # dependency code). + if ($lang && $lang->autodep ne 'no') + { + my $depfile = $object; + $depfile =~ s/\.([^.]*)$/.P$1/; + $depfile =~ s/\$\(OBJEXT\)$/o/; + $dep_files{dirname ($depfile) . '/$(DEPDIR)/' + . basename ($depfile)} = 1; + } + } + + return @result; +} + + +# $LINKER +# define_objects_from_sources ($VAR, $OBJVAR, $NODEFINE, $ONE_FILE, +# $OBJ, $PARENT, $TOPPARENT, $WHERE, %TRANSFORM) +# --------------------------------------------------------------------------- +# Define an _OBJECTS variable for a _SOURCES variable (or subvariable) +# +# Arguments are: +# $VAR is the name of the _SOURCES variable +# $OBJVAR is the name of the _OBJECTS variable if known (otherwise +# it will be generated and returned). +# $NODEFINE is a boolean: if true, $OBJVAR will not be defined (but +# work done to determine the linker will be). +# $ONE_FILE is the canonical (transformed) name of object to build +# $OBJ is the object extension (i.e. either `.o' or `.lo'). +# $TOPPARENT is the _SOURCES variable being processed. +# $WHERE context into which this definition is done +# %TRANSFORM extra arguments to pass to file_contents when producing +# rules +# +# Result is a pair ($LINKER, $OBJVAR): +# $LINKER is a boolean, true if a linker is needed to deal with the objects +sub define_objects_from_sources ($$$$$$$%) +{ + my ($var, $objvar, $nodefine, $one_file, + $obj, $topparent, $where, %transform) = @_; + + my $needlinker = ""; + + transform_variable_recursively + ($var, $objvar, 'am__objects', $nodefine, $where, + # The transform code to run on each filename. + sub { + my ($subvar, $val, $cond, $full_cond) = @_; + my @trans = handle_single_transform ($subvar, $topparent, + $one_file, $obj, $val, + %transform); + $needlinker = "true" if @trans; + return @trans; + }); + + return $needlinker; +} + + +# handle_source_transform ($CANON_TARGET, $TARGET, $OBJEXT, $WHERE, %TRANSFORM) +# ----------------------------------------------------------------------------- +# Handle SOURCE->OBJECT transform for one program or library. +# Arguments are: +# canonical (transformed) name of target to build +# actual target of object to build +# object extension (i.e., either `.o' or `$o') +# location of the source variable +# extra arguments to pass to file_contents when producing rules +# Return the name of the linker variable that must be used. +# Empty return means just use `LINK'. +sub handle_source_transform ($$$$%) +{ + # one_file is canonical name. unxformed is given name. obj is + # object extension. + my ($one_file, $unxformed, $obj, $where, %transform) = @_; + + my $linker = ''; + + # No point in continuing if _OBJECTS is defined. + return if reject_var ($one_file . '_OBJECTS', + $one_file . '_OBJECTS should not be defined'); + + my %used_pfx = (); + my $needlinker; + %linkers_used = (); + foreach my $prefix ('', 'EXTRA_', 'dist_', 'nodist_', + 'dist_EXTRA_', 'nodist_EXTRA_') + { + my $varname = $prefix . $one_file . "_SOURCES"; + my $var = var $varname; + next unless $var; + + # We are going to define _OBJECTS variables using the prefix. + # Then we glom them all together. So we can't use the null + # prefix here as we need it later. + my $xpfx = ($prefix eq '') ? 'am_' : $prefix; + + # Keep track of which prefixes we saw. + $used_pfx{$xpfx} = 1 + unless $prefix =~ /EXTRA_/; + + push @sources, "\$($varname)"; + push @dist_sources, shadow_unconditionally ($varname, $where) + unless (option ('no-dist') || $prefix =~ /^nodist_/); + + $needlinker |= + define_objects_from_sources ($varname, + $xpfx . $one_file . '_OBJECTS', + $prefix =~ /EXTRA_/, + $one_file, $obj, $varname, $where, + DIST_SOURCE => ($prefix !~ /^nodist_/), + %transform); + } + if ($needlinker) + { + $linker ||= &resolve_linker (%linkers_used); + } + + my @keys = sort keys %used_pfx; + if (scalar @keys == 0) + { + # The default source for libfoo.la is libfoo.c, but for + # backward compatibility we first look at libfoo_la.c + my $old_default_source = "$one_file.c"; + (my $default_source = $unxformed) =~ s,(\.[^./\\]*)?$,.c,; + if ($old_default_source ne $default_source + && (rule $old_default_source + || rule '$(srcdir)/' . $old_default_source + || rule '${srcdir}/' . $old_default_source + || -f $old_default_source)) + { + my $loc = $where->clone; + $loc->pop_context; + msg ('obsolete', $loc, + "the default source for `$unxformed' has been changed " + . "to `$default_source'.\n(Using `$old_default_source' for " + . "backward compatibility.)"); + $default_source = $old_default_source; + } + # If a rule exists to build this source with a $(srcdir) + # prefix, use that prefix in our variables too. This is for + # the sake of BSD Make. + if (rule '$(srcdir)/' . $default_source + || rule '${srcdir}/' . $default_source) + { + $default_source = '$(srcdir)/' . $default_source; + } + + &define_variable ($one_file . "_SOURCES", $default_source, $where); + push (@sources, $default_source); + push (@dist_sources, $default_source); + + %linkers_used = (); + my (@result) = + handle_single_transform ($one_file . '_SOURCES', + $one_file . '_SOURCES', + $one_file, $obj, + $default_source, %transform); + $linker ||= &resolve_linker (%linkers_used); + define_pretty_variable ($one_file . '_OBJECTS', TRUE, $where, @result); + } + else + { + @keys = map { '$(' . $_ . $one_file . '_OBJECTS)' } @keys; + define_pretty_variable ($one_file . '_OBJECTS', TRUE, $where, @keys); + } + + # If we want to use `LINK' we must make sure it is defined. + if ($linker eq '') + { + $need_link = 1; + } + + return $linker; +} + + +# handle_lib_objects ($XNAME, $VAR) +# --------------------------------- +# Special-case ALLOCA and LIBOBJS substitutions in _LDADD or _LIBADD variables. +# Also, generate _DEPENDENCIES variable if appropriate. +# Arguments are: +# transformed name of object being built, or empty string if no object +# name of _LDADD/_LIBADD-type variable to examine +# Returns 1 if LIBOBJS seen, 0 otherwise. +sub handle_lib_objects +{ + my ($xname, $varname) = @_; + + my $var = var ($varname); + prog_error "handle_lib_objects: `$varname' undefined" + unless $var; + prog_error "handle_lib_objects: unexpected variable name `$varname'" + unless $varname =~ /^(.*)(?:LIB|LD)ADD$/; + my $prefix = $1 || 'AM_'; + + my $seen_libobjs = 0; + my $flagvar = 0; + + transform_variable_recursively + ($varname, $xname . '_DEPENDENCIES', 'am__DEPENDENCIES', + ! $xname, INTERNAL, + # Transformation function, run on each filename. + sub { + my ($subvar, $val, $cond, $full_cond) = @_; + + if ($val =~ /^-/) + { + # Skip -lfoo and -Ldir silently; these are explicitly allowed. + if ($val !~ /^-[lL]/ && + # Skip -dlopen and -dlpreopen; these are explicitly allowed + # for Libtool libraries or programs. (Actually we are a bit + # laxe here since this code also applies to non-libtool + # libraries or programs, for which -dlopen and -dlopreopen + # are pure nonsense. Diagnosing this doesn't seems very + # important: the developer will quickly get complaints from + # the linker.) + $val !~ /^-dl(?:pre)?open$/ && + # Only get this error once. + ! $flagvar) + { + $flagvar = 1; + # FIXME: should display a stack of nested variables + # as context when $var != $subvar. + err_var ($var, "linker flags such as `$val' belong in " + . "`${prefix}LDFLAGS"); + } + return (); + } + elsif ($val !~ /^\@.*\@$/) + { + # Assume we have a file of some sort, and output it into the + # dependency variable. Autoconf substitutions are not output; + # rarely is a new dependency substituted into e.g. foo_LDADD + # -- but bad things (e.g. -lX11) are routinely substituted. + # Note that LIBOBJS and ALLOCA are exceptions to this rule, + # and handled specially below. + return $val; + } + elsif ($val =~ /^\@(LT)?LIBOBJS\@$/) + { + handle_LIBOBJS ($subvar, $cond, $1); + $seen_libobjs = 1; + return $val; + } + elsif ($val =~ /^\@(LT)?ALLOCA\@$/) + { + handle_ALLOCA ($subvar, $cond, $1); + return $val; + } + else + { + return (); + } + }); + + return $seen_libobjs; +} + +# handle_LIBOBJS_or_ALLOCA ($VAR) +# ------------------------------- +# Definitions common to LIBOBJS and ALLOCA. +# VAR should be one of LIBOBJS, LTLIBOBJS, ALLOCA, or LTALLOCA. +sub handle_LIBOBJS_or_ALLOCA ($) +{ + my ($var) = @_; + + my $dir = ''; + + # If LIBOBJS files must be built in another directory we have + # to define LIBOBJDIR and ensure the files get cleaned. + # Otherwise LIBOBJDIR can be left undefined, and the cleaning + # is achieved by `rm -f *.$(OBJEXT)' in compile.am. + if ($config_libobj_dir + && $relative_dir ne $config_libobj_dir) + { + if (option 'subdir-objects') + { + # In the top-level Makefile we do not use $(top_builddir), because + # we are already there, and since the targets are built without + # a $(top_builddir), it helps BSD Make to match them with + # dependencies. + $dir = "$config_libobj_dir/" if $config_libobj_dir ne '.'; + $dir = "$topsrcdir/$dir" if $relative_dir ne '.'; + define_variable ('LIBOBJDIR', "$dir", INTERNAL); + $clean_files{"\$($var)"} = MOSTLY_CLEAN; + # If LTLIBOBJS is used, we must also clear LIBOBJS (which might + # be created by libtool as a side-effect of creating LTLIBOBJS). + $clean_files{"\$($var)"} = MOSTLY_CLEAN if $var =~ s/^LT//; + + } + else + { + error ("`\$($var)' cannot be used outside `$dir' if" + . " `subdir-objects' is not set"); + } + } + + return $dir; +} + +sub handle_LIBOBJS ($$$) +{ + my ($var, $cond, $lt) = @_; + my $myobjext = $lt ? 'lo' : 'o'; + $lt ||= ''; + + $var->requires_variables ("\@${lt}LIBOBJS\@ used", $lt . 'LIBOBJS') + if ! keys %libsources; + + my $dir = handle_LIBOBJS_or_ALLOCA "${lt}LIBOBJS"; + + foreach my $iter (keys %libsources) + { + if ($iter =~ /\.[cly]$/) + { + &saw_extension ($&); + &saw_extension ('.c'); + } + + if ($iter =~ /\.h$/) + { + require_libsource_with_macro ($cond, $var, FOREIGN, $iter); + } + elsif ($iter ne 'alloca.c') + { + my $rewrite = $iter; + $rewrite =~ s/\.c$/.P$myobjext/; + $dep_files{$dir . '$(DEPDIR)/' . $rewrite} = 1; + $rewrite = "^" . quotemeta ($iter) . "\$"; + # Only require the file if it is not a built source. + my $bs = var ('BUILT_SOURCES'); + if (! $bs || ! grep (/$rewrite/, $bs->value_as_list_recursive)) + { + require_libsource_with_macro ($cond, $var, FOREIGN, $iter); + } + } + } +} + +sub handle_ALLOCA ($$$) +{ + my ($var, $cond, $lt) = @_; + my $myobjext = $lt ? 'lo' : 'o'; + $lt ||= ''; + my $dir = handle_LIBOBJS_or_ALLOCA "${lt}ALLOCA"; + + $var->requires_variables ("\@${lt}ALLOCA\@ used", $lt . 'ALLOCA'); + $dep_files{$dir . '$(DEPDIR)/alloca.P' . $myobjext} = 1; + require_libsource_with_macro ($cond, $var, FOREIGN, 'alloca.c'); + &saw_extension ('.c'); +} + +# Canonicalize the input parameter +sub canonicalize +{ + my ($string) = @_; + $string =~ tr/A-Za-z0-9_\@/_/c; + return $string; +} + +# Canonicalize a name, and check to make sure the non-canonical name +# is never used. Returns canonical name. Arguments are name and a +# list of suffixes to check for. +sub check_canonical_spelling +{ + my ($name, @suffixes) = @_; + + my $xname = &canonicalize ($name); + if ($xname ne $name) + { + foreach my $xt (@suffixes) + { + reject_var ("$name$xt", "use `$xname$xt', not `$name$xt'"); + } + } + + return $xname; +} + + +# handle_compile () +# ----------------- +# Set up the compile suite. +sub handle_compile () +{ + return + unless $get_object_extension_was_run; + + # Boilerplate. + my $default_includes = ''; + if (! option 'nostdinc') + { + my @incs = ('-I.'); + + my $var = var 'CONFIG_HEADER'; + if ($var) + { + foreach my $hdr (split (' ', $var->variable_value)) + { + push @incs, '-I' . dirname ($hdr); + } + } + # We want `-I. -I$(srcdir)', but the latter -I is redundant + # and unaesthetic in non-VPATH builds. We use `-I.@am__isrc@` + # instead. It will be replaced by '-I.' or '-I. -I$(srcdir)'. + # Items in CONFIG_HEADER are never in $(srcdir) so it is safe + # to just append @am__isrc@. + $default_includes = ' ' . uniq (@incs) . subst ('am__isrc'); + } + + my (@mostly_rms, @dist_rms); + foreach my $item (sort keys %compile_clean_files) + { + if ($compile_clean_files{$item} == MOSTLY_CLEAN) + { + push (@mostly_rms, "\t-rm -f $item"); + } + elsif ($compile_clean_files{$item} == DIST_CLEAN) + { + push (@dist_rms, "\t-rm -f $item"); + } + else + { + prog_error 'invalid entry in %compile_clean_files'; + } + } + + my ($coms, $vars, $rules) = + &file_contents_internal (1, "$libdir/am/compile.am", + new Automake::Location, + ('DEFAULT_INCLUDES' => $default_includes, + 'MOSTLYRMS' => join ("\n", @mostly_rms), + 'DISTRMS' => join ("\n", @dist_rms))); + $output_vars .= $vars; + $output_rules .= "$coms$rules"; + + # Check for automatic de-ANSI-fication. + if (option 'ansi2knr') + { + my ($ansi2knr_filename, $ansi2knr_where) = @{option 'ansi2knr'}; + my $ansi2knr_dir = ''; + + require_variables ($ansi2knr_where, "option `ansi2knr' is used", + TRUE, "ANSI2KNR", "U"); + + # topdir is where ansi2knr should be. + if ($ansi2knr_filename eq 'ansi2knr') + { + # Only require ansi2knr files if they should appear in + # this directory. + require_file ($ansi2knr_where, FOREIGN, + 'ansi2knr.c', 'ansi2knr.1'); + + # ansi2knr needs to be built before subdirs, so unshift it. + unshift (@all, '$(ANSI2KNR)'); + } + else + { + $ansi2knr_dir = dirname ($ansi2knr_filename); + } + + $output_rules .= &file_contents ('ansi2knr', + new Automake::Location, + 'ANSI2KNR-DIR' => $ansi2knr_dir); + + } +} + +# handle_libtool () +# ----------------- +# Handle libtool rules. +sub handle_libtool +{ + return unless var ('LIBTOOL'); + + # Libtool requires some files, but only at top level. + # (Starting with Libtool 2.0 we do not have to bother. These + # requirements are done with AC_REQUIRE_AUX_FILE.) + require_conf_file_with_macro (TRUE, 'LIBTOOL', FOREIGN, @libtool_files) + if $relative_dir eq '.' && ! $libtool_new_api; + + my @libtool_rms; + foreach my $item (sort keys %libtool_clean_directories) + { + my $dir = ($item eq '.') ? '' : "$item/"; + # .libs is for Unix, _libs for DOS. + push (@libtool_rms, "\t-rm -rf ${dir}.libs ${dir}_libs"); + } + + check_user_variables 'LIBTOOLFLAGS'; + + # Output the libtool compilation rules. + $output_rules .= &file_contents ('libtool', + new Automake::Location, + LTRMS => join ("\n", @libtool_rms)); +} + +# handle_programs () +# ------------------ +# Handle C programs. +sub handle_programs +{ + my @proglist = &am_install_var ('progs', 'PROGRAMS', + 'bin', 'sbin', 'libexec', 'pkglib', + 'noinst', 'check'); + return if ! @proglist; + + my $seen_global_libobjs = + var ('LDADD') && &handle_lib_objects ('', 'LDADD'); + + foreach my $pair (@proglist) + { + my ($where, $one_file) = @$pair; + + my $seen_libobjs = 0; + my $obj = get_object_extension '.$(OBJEXT)'; + + # Strip any $(EXEEXT) suffix the user might have added, or this + # will confuse &handle_source_transform and &check_canonical_spelling. + # We'll add $(EXEEXT) back later anyway. + $one_file =~ s/\$\(EXEEXT\)$//; + + $known_programs{$one_file} = $where; + + # Canonicalize names and check for misspellings. + my $xname = &check_canonical_spelling ($one_file, '_LDADD', '_LDFLAGS', + '_SOURCES', '_OBJECTS', + '_DEPENDENCIES'); + + $where->push_context ("while processing program `$one_file'"); + $where->set (INTERNAL->get); + + my $linker = &handle_source_transform ($xname, $one_file, $obj, $where, + NONLIBTOOL => 1, LIBTOOL => 0); + + if (var ($xname . "_LDADD")) + { + $seen_libobjs = &handle_lib_objects ($xname, $xname . '_LDADD'); + } + else + { + # User didn't define prog_LDADD override. So do it. + &define_variable ($xname . '_LDADD', '$(LDADD)', $where); + + # This does a bit too much work. But we need it to + # generate _DEPENDENCIES when appropriate. + if (var ('LDADD')) + { + $seen_libobjs = &handle_lib_objects ($xname, 'LDADD'); + } + } + + reject_var ($xname . '_LIBADD', + "use `${xname}_LDADD', not `${xname}_LIBADD'"); + + set_seen ($xname . '_DEPENDENCIES'); + set_seen ($xname . '_LDFLAGS'); + + # Determine program to use for link. + my $xlink = &define_per_target_linker_variable ($linker, $xname); + + # If the resulting program lies into a subdirectory, + # make sure this directory will exist. + my $dirstamp = require_build_directory_maybe ($one_file); + + $output_rules .= &file_contents ('program', + $where, + PROGRAM => $one_file, + XPROGRAM => $xname, + XLINK => $xlink, + DIRSTAMP => $dirstamp, + EXEEXT => '$(EXEEXT)'); + + if ($seen_libobjs || $seen_global_libobjs) + { + if (var ($xname . '_LDADD')) + { + &check_libobjs_sources ($xname, $xname . '_LDADD'); + } + elsif (var ('LDADD')) + { + &check_libobjs_sources ($xname, 'LDADD'); + } + } + } +} + + +# handle_libraries () +# ------------------- +# Handle libraries. +sub handle_libraries +{ + my @liblist = &am_install_var ('libs', 'LIBRARIES', + 'lib', 'pkglib', 'noinst', 'check'); + return if ! @liblist; + + my @prefix = am_primary_prefixes ('LIBRARIES', 0, 'lib', 'pkglib', + 'noinst', 'check'); + + if (@prefix) + { + my $var = rvar ($prefix[0] . '_LIBRARIES'); + $var->requires_variables ('library used', 'RANLIB'); + } + + &define_variable ('AR', 'ar', INTERNAL); + &define_variable ('ARFLAGS', 'cru', INTERNAL); + + foreach my $pair (@liblist) + { + my ($where, $onelib) = @$pair; + + my $seen_libobjs = 0; + # Check that the library fits the standard naming convention. + my $bn = basename ($onelib); + if ($bn !~ /^lib.*\.a$/) + { + $bn =~ s/^(?:lib)?(.*?)(?:\.[^.]*)?$/lib$1.a/; + my $suggestion = dirname ($onelib) . "/$bn"; + $suggestion =~ s|^\./||g; + msg ('error-gnu/warn', $where, + "`$onelib' is not a standard library name\n" + . "did you mean `$suggestion'?") + } + + $where->push_context ("while processing library `$onelib'"); + $where->set (INTERNAL->get); + + my $obj = get_object_extension '.$(OBJEXT)'; + + # Canonicalize names and check for misspellings. + my $xlib = &check_canonical_spelling ($onelib, '_LIBADD', '_SOURCES', + '_OBJECTS', '_DEPENDENCIES', + '_AR'); + + if (! var ($xlib . '_AR')) + { + &define_variable ($xlib . '_AR', '$(AR) $(ARFLAGS)', $where); + } + + # Generate support for conditional object inclusion in + # libraries. + if (var ($xlib . '_LIBADD')) + { + if (&handle_lib_objects ($xlib, $xlib . '_LIBADD')) + { + $seen_libobjs = 1; + } + } + else + { + &define_variable ($xlib . "_LIBADD", '', $where); + } + + reject_var ($xlib . '_LDADD', + "use `${xlib}_LIBADD', not `${xlib}_LDADD'"); + + # Make sure we at look at this. + set_seen ($xlib . '_DEPENDENCIES'); + + &handle_source_transform ($xlib, $onelib, $obj, $where, + NONLIBTOOL => 1, LIBTOOL => 0); + + # If the resulting library lies into a subdirectory, + # make sure this directory will exist. + my $dirstamp = require_build_directory_maybe ($onelib); + + $output_rules .= &file_contents ('library', + $where, + LIBRARY => $onelib, + XLIBRARY => $xlib, + DIRSTAMP => $dirstamp); + + if ($seen_libobjs) + { + if (var ($xlib . '_LIBADD')) + { + &check_libobjs_sources ($xlib, $xlib . '_LIBADD'); + } + } + } +} + + +# handle_ltlibraries () +# --------------------- +# Handle shared libraries. +sub handle_ltlibraries +{ + my @liblist = &am_install_var ('ltlib', 'LTLIBRARIES', + 'noinst', 'lib', 'pkglib', 'check'); + return if ! @liblist; + + my @prefix = am_primary_prefixes ('LTLIBRARIES', 0, 'lib', 'pkglib', + 'noinst', 'check'); + + if (@prefix) + { + my $var = rvar ($prefix[0] . '_LTLIBRARIES'); + $var->requires_variables ('Libtool library used', 'LIBTOOL'); + } + + my %instdirs = (); + my %instconds = (); + my %liblocations = (); # Location (in Makefile.am) of each library. + + foreach my $key (@prefix) + { + # Get the installation directory of each library. + (my $dir = $key) =~ s/^nobase_//; + my $var = rvar ($key . '_LTLIBRARIES'); + + # We reject libraries which are installed in several places + # in the same condition, because we can only specify one + # `-rpath' option. + $var->traverse_recursively + (sub + { + my ($var, $val, $cond, $full_cond) = @_; + my $hcond = $full_cond->human; + my $where = $var->rdef ($cond)->location; + # A library cannot be installed in different directory + # in overlapping conditions. + if (exists $instconds{$val}) + { + my ($msg, $acond) = + $instconds{$val}->ambiguous_p ($val, $full_cond); + + if ($msg) + { + error ($where, $msg, partial => 1); + + my $dirtxt = "installed in `$dir'"; + $dirtxt = "built for `$dir'" + if $dir eq 'EXTRA' || $dir eq 'noinst' || $dir eq 'check'; + my $dircond = + $full_cond->true ? "" : " in condition $hcond"; + + error ($where, "`$val' should be $dirtxt$dircond ...", + partial => 1); + + my $hacond = $acond->human; + my $adir = $instdirs{$val}{$acond}; + my $adirtxt = "installed in `$adir'"; + $adirtxt = "built for `$adir'" + if ($adir eq 'EXTRA' || $adir eq 'noinst' + || $adir eq 'check'); + my $adircond = $acond->true ? "" : " in condition $hacond"; + + my $onlyone = ($dir ne $adir) ? + ("\nLibtool libraries can be built for only one " + . "destination.") : ""; + + error ($liblocations{$val}{$acond}, + "... and should also be $adirtxt$adircond.$onlyone"); + return; + } + } + else + { + $instconds{$val} = new Automake::DisjConditions; + } + $instdirs{$val}{$full_cond} = $dir; + $liblocations{$val}{$full_cond} = $where; + $instconds{$val} = $instconds{$val}->merge ($full_cond); + }, + sub + { + return (); + }, + skip_ac_subst => 1); + } + + foreach my $pair (@liblist) + { + my ($where, $onelib) = @$pair; + + my $seen_libobjs = 0; + my $obj = get_object_extension '.lo'; + + # Canonicalize names and check for misspellings. + my $xlib = &check_canonical_spelling ($onelib, '_LIBADD', '_LDFLAGS', + '_SOURCES', '_OBJECTS', + '_DEPENDENCIES'); + + # Check that the library fits the standard naming convention. + my $libname_rx = '^lib.*\.la'; + my $ldvar = var ("${xlib}_LDFLAGS") || var ('AM_LDFLAGS'); + my $ldvar2 = var ('LDFLAGS'); + if (($ldvar && grep (/-module/, $ldvar->value_as_list_recursive)) + || ($ldvar2 && grep (/-module/, $ldvar2->value_as_list_recursive))) + { + # Relax name checking for libtool modules. + $libname_rx = '\.la'; + } + + my $bn = basename ($onelib); + if ($bn !~ /$libname_rx$/) + { + my $type = 'library'; + if ($libname_rx eq '\.la') + { + $bn =~ s/^(lib|)(.*?)(?:\.[^.]*)?$/$1$2.la/; + $type = 'module'; + } + else + { + $bn =~ s/^(?:lib)?(.*?)(?:\.[^.]*)?$/lib$1.la/; + } + my $suggestion = dirname ($onelib) . "/$bn"; + $suggestion =~ s|^\./||g; + msg ('error-gnu/warn', $where, + "`$onelib' is not a standard libtool $type name\n" + . "did you mean `$suggestion'?") + } + + $where->push_context ("while processing Libtool library `$onelib'"); + $where->set (INTERNAL->get); + + # Make sure we look at these. + set_seen ($xlib . '_LDFLAGS'); + set_seen ($xlib . '_DEPENDENCIES'); + + # Generate support for conditional object inclusion in + # libraries. + if (var ($xlib . '_LIBADD')) + { + if (&handle_lib_objects ($xlib, $xlib . '_LIBADD')) + { + $seen_libobjs = 1; + } + } + else + { + &define_variable ($xlib . "_LIBADD", '', $where); + } + + reject_var ("${xlib}_LDADD", + "use `${xlib}_LIBADD', not `${xlib}_LDADD'"); + + + my $linker = &handle_source_transform ($xlib, $onelib, $obj, $where, + NONLIBTOOL => 0, LIBTOOL => 1); + + # Determine program to use for link. + my $xlink = &define_per_target_linker_variable ($linker, $xlib); + + my $rpathvar = "am_${xlib}_rpath"; + my $rpath = "\$($rpathvar)"; + foreach my $rcond ($instconds{$onelib}->conds) + { + my $val; + if ($instdirs{$onelib}{$rcond} eq 'EXTRA' + || $instdirs{$onelib}{$rcond} eq 'noinst' + || $instdirs{$onelib}{$rcond} eq 'check') + { + # It's an EXTRA_ library, so we can't specify -rpath, + # because we don't know where the library will end up. + # The user probably knows, but generally speaking automake + # doesn't -- and in fact configure could decide + # dynamically between two different locations. + $val = ''; + } + else + { + $val = ('-rpath $(' . $instdirs{$onelib}{$rcond} . 'dir)'); + } + if ($rcond->true) + { + # If $rcond is true there is only one condition and + # there is no point defining an helper variable. + $rpath = $val; + } + else + { + define_pretty_variable ($rpathvar, $rcond, INTERNAL, $val); + } + } + + # If the resulting library lies into a subdirectory, + # make sure this directory will exist. + my $dirstamp = require_build_directory_maybe ($onelib); + + # Remember to cleanup .libs/ in this directory. + my $dirname = dirname $onelib; + $libtool_clean_directories{$dirname} = 1; + + $output_rules .= &file_contents ('ltlibrary', + $where, + LTLIBRARY => $onelib, + XLTLIBRARY => $xlib, + RPATH => $rpath, + XLINK => $xlink, + DIRSTAMP => $dirstamp); + if ($seen_libobjs) + { + if (var ($xlib . '_LIBADD')) + { + &check_libobjs_sources ($xlib, $xlib . '_LIBADD'); + } + } + } +} + +# See if any _SOURCES variable were misspelled. +sub check_typos () +{ + # It is ok if the user sets this particular variable. + set_seen 'AM_LDFLAGS'; + + foreach my $primary ('SOURCES', 'LIBADD', 'LDADD', 'LDFLAGS', 'DEPENDENCIES') + { + foreach my $var (variables $primary) + { + my $varname = $var->name; + # A configure variable is always legitimate. + next if exists $configure_vars{$varname}; + + for my $cond ($var->conditions->conds) + { + $varname =~ /^(?:nobase_)?(?:dist_|nodist_)?(.*)_[[:alnum:]]+$/; + msg_var ('syntax', $var, "variable `$varname' is defined but no" + . " program or\nlibrary has `$1' as canonic name" + . " (possible typo)") + unless $var->rdef ($cond)->seen; + } + } + } +} + + +# Handle scripts. +sub handle_scripts +{ + # NOTE we no longer automatically clean SCRIPTS, because it is + # useful to sometimes distribute scripts verbatim. This happens + # e.g. in Automake itself. + &am_install_var ('-candist', 'scripts', 'SCRIPTS', + 'bin', 'sbin', 'libexec', 'pkgdata', + 'noinst', 'check'); +} + + + + +## ------------------------ ## +## Handling Texinfo files. ## +## ------------------------ ## + +# ($OUTFILE, $VFILE, @CLEAN_FILES) +# &scan_texinfo_file ($FILENAME) +# ------------------------------ +# $OUTFILE - name of the info file produced by $FILENAME. +# $VFILE - name of the version.texi file used (undef if none). +# @CLEAN_FILES - list of byproducts (indexes etc.) +sub scan_texinfo_file ($) +{ + my ($filename) = @_; + + # Some of the following extensions are always created, no matter + # whether indexes are used or not. Other (like cps, fns, ... pgs) + # are only created when they are used. We used to scan $FILENAME + # for their use, but that is not enough: they could be used in + # included files. We can't scan included files because we don't + # know the include path. Therefore we always erase these files, no + # matter whether they are used or not. + # + # (tmp is only created if an @macro is used and a certain e-TeX + # feature is not available.) + my %clean_suffixes = + map { $_ => 1 } (qw(aux log toc tmp + cp cps + fn fns + ky kys + vr vrs + tp tps + pg pgs)); # grep 'new.*index' texinfo.tex + + my $texi = new Automake::XFile "< $filename"; + verb "reading $filename"; + + my ($outfile, $vfile); + while ($_ = $texi->getline) + { + if (/^\@setfilename +(\S+)/) + { + # Honor only the first @setfilename. (It's possible to have + # more occurrences later if the manual shows examples of how + # to use @setfilename...) + next if $outfile; + + $outfile = $1; + if ($outfile =~ /\.([^.]+)$/ && $1 ne 'info') + { + error ("$filename:$.", + "output `$outfile' has unrecognized extension"); + return; + } + } + # A "version.texi" file is actually any file whose name matches + # "vers*.texi". + elsif (/^\@include\s+(vers[^.]*\.texi)\s*$/) + { + $vfile = $1; + } + + # Try to find new or unused indexes. + + # Creating a new category of index. + elsif (/^\@def(code)?index (\w+)/) + { + $clean_suffixes{$2} = 1; + $clean_suffixes{"$2s"} = 1; + } + + # Merging an index into an another. + elsif (/^\@syn(code)?index (\w+) (\w+)/) + { + delete $clean_suffixes{"$2s"}; + $clean_suffixes{"$3s"} = 1; + } + + } + + if (! $outfile) + { + err_am "`$filename' missing \@setfilename"; + return; + } + + my $infobase = basename ($filename); + $infobase =~ s/\.te?xi(nfo)?$//; + return ($outfile, $vfile, + map { "$infobase.$_" } (sort keys %clean_suffixes)); +} + + +# ($DIRSTAMP, @CLEAN_FILES) +# output_texinfo_build_rules ($SOURCE, $DEST, $INSRC, @DEPENDENCIES) +# ------------------------------------------------------------------ +# SOURCE - the source Texinfo file +# DEST - the destination Info file +# INSRC - wether DEST should be built in the source tree +# DEPENDENCIES - known dependencies +sub output_texinfo_build_rules ($$$@) +{ + my ($source, $dest, $insrc, @deps) = @_; + + # Split `a.texi' into `a' and `.texi'. + my ($spfx, $ssfx) = ($source =~ /^(.*?)(\.[^.]*)?$/); + my ($dpfx, $dsfx) = ($dest =~ /^(.*?)(\.[^.]*)?$/); + + $ssfx ||= ""; + $dsfx ||= ""; + + # We can output two kinds of rules: the "generic" rules use Make + # suffix rules and are appropriate when $source and $dest do not lie + # in a sub-directory; the "specific" rules are needed in the other + # case. + # + # The former are output only once (this is not really apparent here, + # but just remember that some logic deeper in Automake will not + # output the same rule twice); while the later need to be output for + # each Texinfo source. + my $generic; + my $makeinfoflags; + my $sdir = dirname $source; + if ($sdir eq '.' && dirname ($dest) eq '.') + { + $generic = 1; + $makeinfoflags = '-I $(srcdir)'; + } + else + { + $generic = 0; + $makeinfoflags = "-I $sdir -I \$(srcdir)/$sdir"; + } + + # A directory can contain two kinds of info files: some built in the + # source tree, and some built in the build tree. The rules are + # different in each case. However we cannot output two different + # set of generic rules. Because in-source builds are more usual, we + # use generic rules in this case and fall back to "specific" rules + # for build-dir builds. (It should not be a problem to invert this + # if needed.) + $generic = 0 unless $insrc; + + # We cannot use a suffix rule to build info files with an empty + # extension. Otherwise we would output a single suffix inference + # rule, with separate dependencies, as in + # + # .texi: + # $(MAKEINFO) ... + # foo.info: foo.texi + # + # which confuse Solaris make. (See the Autoconf manual for + # details.) Therefore we use a specific rule in this case. This + # applies to info files only (dvi and pdf files always have an + # extension). + my $generic_info = ($generic && $dsfx) ? 1 : 0; + + # If the resulting file lie into a subdirectory, + # make sure this directory will exist. + my $dirstamp = require_build_directory_maybe ($dest); + + my $dipfx = ($insrc ? '$(srcdir)/' : '') . $dpfx; + + $output_rules .= file_contents ('texibuild', + new Automake::Location, + DEPS => "@deps", + DEST_PREFIX => $dpfx, + DEST_INFO_PREFIX => $dipfx, + DEST_SUFFIX => $dsfx, + DIRSTAMP => $dirstamp, + GENERIC => $generic, + GENERIC_INFO => $generic_info, + INSRC => $insrc, + MAKEINFOFLAGS => $makeinfoflags, + SOURCE => ($generic + ? '$<' : $source), + SOURCE_INFO => ($generic_info + ? '$<' : $source), + SOURCE_REAL => $source, + SOURCE_SUFFIX => $ssfx, + ); + return ($dirstamp, "$dpfx.dvi", "$dpfx.pdf", "$dpfx.ps", "$dpfx.html"); +} + + +# $TEXICLEANS +# handle_texinfo_helper ($info_texinfos) +# -------------------------------------- +# Handle all Texinfo source; helper for handle_texinfo. +sub handle_texinfo_helper ($) +{ + my ($info_texinfos) = @_; + my (@infobase, @info_deps_list, @texi_deps); + my %versions; + my $done = 0; + my @texi_cleans; + + # Build a regex matching user-cleaned files. + my $d = var 'DISTCLEANFILES'; + my $c = var 'CLEANFILES'; + my @f = (); + push @f, $d->value_as_list_recursive (inner_expand => 1) if $d; + push @f, $c->value_as_list_recursive (inner_expand => 1) if $c; + @f = map { s|[^A-Za-z_0-9*\[\]\-]|\\$&|g; s|\*|[^/]*|g; $_; } @f; + my $user_cleaned_files = '^(?:' . join ('|', @f) . ')$'; + + foreach my $texi + ($info_texinfos->value_as_list_recursive (inner_expand => 1)) + { + my $infobase = $texi; + $infobase =~ s/\.(txi|texinfo|texi)$//; + + if ($infobase eq $texi) + { + # FIXME: report line number. + err_am "texinfo file `$texi' has unrecognized extension"; + next; + } + + push @infobase, $infobase; + + # If 'version.texi' is referenced by input file, then include + # automatic versioning capability. + my ($out_file, $vtexi, @clean_files) = + scan_texinfo_file ("$relative_dir/$texi") + or next; + push (@texi_cleans, @clean_files); + + # If the Texinfo source is in a subdirectory, create the + # resulting info in this subdirectory. If it is in the current + # directory, try hard to not prefix "./" because it breaks the + # generic rules. + my $outdir = dirname ($texi) . '/'; + $outdir = "" if $outdir eq './'; + $out_file = $outdir . $out_file; + + # Until Automake 1.6.3, .info files were built in the + # source tree. This was an obstacle to the support of + # non-distributed .info files, and non-distributed .texi + # files. + # + # * Non-distributed .texi files is important in some packages + # where .texi files are built at make time, probably using + # other binaries built in the package itself, maybe using + # tools or information found on the build host. Because + # these files are not distributed they are always rebuilt + # at make time; they should therefore not lie in the source + # directory. One plan was to support this using + # nodist_info_TEXINFOS or something similar. (Doing this + # requires some sanity checks. For instance Automake should + # not allow: + # dist_info_TEXINFO = foo.texi + # nodist_foo_TEXINFO = included.texi + # because a distributed file should never depend on a + # non-distributed file.) + # + # * If .texi files are not distributed, then .info files should + # not be distributed either. There are also cases where one + # want to distribute .texi files, but do not want to + # distribute the .info files. For instance the Texinfo package + # distributes the tool used to build these files; it would + # be a waste of space to distribute them. It's not clear + # which syntax we should use to indicate that .info files should + # not be distributed. Akim Demaille suggested that eventually + # we switch to a new syntax: + # | Maybe we should take some inspiration from what's already + # | done in the rest of Automake. Maybe there is too much + # | syntactic sugar here, and you want + # | nodist_INFO = bar.info + # | dist_bar_info_SOURCES = bar.texi + # | bar_texi_DEPENDENCIES = foo.texi + # | with a bit of magic to have bar.info represent the whole + # | bar*info set. That's a lot more verbose that the current + # | situation, but it is # not new, hence the user has less + # | to learn. + # | + # | But there is still too much room for meaningless specs: + # | nodist_INFO = bar.info + # | dist_bar_info_SOURCES = bar.texi + # | dist_PS = bar.ps something-written-by-hand.ps + # | nodist_bar_ps_SOURCES = bar.texi + # | bar_texi_DEPENDENCIES = foo.texi + # | here bar.texi is dist_ in line 2, and nodist_ in 4. + # + # Back to the point, it should be clear that in order to support + # non-distributed .info files, we need to build them in the + # build tree, not in the source tree (non-distributed .texi + # files are less of a problem, because we do not output build + # rules for them). In Automake 1.7 .info build rules have been + # largely cleaned up so that .info files get always build in the + # build tree, even when distributed. The idea was that + # (1) if during a VPATH build the .info file was found to be + # absent or out-of-date (in the source tree or in the + # build tree), Make would rebuild it in the build tree. + # If an up-to-date source-tree of the .info file existed, + # make would not rebuild it in the build tree. + # (2) having two copies of .info files, one in the source tree + # and one (newer) in the build tree is not a problem + # because `make dist' always pick files in the build tree + # first. + # However it turned out the be a bad idea for several reasons: + # * Tru64, OpenBSD, and FreeBSD (not NetBSD) Make do not behave + # like GNU Make on point (1) above. These implementations + # of Make would always rebuild .info files in the build + # tree, even if such files were up to date in the source + # tree. Consequently, it was impossible to perform a VPATH + # build of a package containing Texinfo files using these + # Make implementations. + # (Refer to the Autoconf Manual, section "Limitation of + # Make", paragraph "VPATH", item "target lookup", for + # an account of the differences between these + # implementations.) + # * The GNU Coding Standards require these files to be built + # in the source-tree (when they are distributed, that is). + # * Keeping a fresher copy of distributed files in the + # build tree can be annoying during development because + # - if the files is kept under CVS, you really want it + # to be updated in the source tree + # - it is confusing that `make distclean' does not erase + # all files in the build tree. + # + # Consequently, starting with Automake 1.8, .info files are + # built in the source tree again. Because we still plan to + # support non-distributed .info files at some point, we + # have a single variable ($INSRC) that controls whether + # the current .info file must be built in the source tree + # or in the build tree. Actually this variable is switched + # off for .info files that appear to be cleaned; this is + # for backward compatibility with package such as Texinfo, + # which do things like + # info_TEXINFOS = texinfo.txi info-stnd.texi info.texi + # DISTCLEANFILES = texinfo texinfo-* info*.info* + # # Do not create info files for distribution. + # dist-info: + # in order not to distribute .info files. + my $insrc = ($out_file =~ $user_cleaned_files) ? 0 : 1; + + my $soutdir = '$(srcdir)/' . $outdir; + $outdir = $soutdir if $insrc; + + # If user specified file_TEXINFOS, then use that as explicit + # dependency list. + @texi_deps = (); + push (@texi_deps, "$soutdir$vtexi") if $vtexi; + + my $canonical = canonicalize ($infobase); + if (var ($canonical . "_TEXINFOS")) + { + push (@texi_deps, '$(' . $canonical . '_TEXINFOS)'); + push_dist_common ('$(' . $canonical . '_TEXINFOS)'); + } + + my ($dirstamp, @cfiles) = + output_texinfo_build_rules ($texi, $out_file, $insrc, @texi_deps); + push (@texi_cleans, @cfiles); + + push (@info_deps_list, $out_file); + + # If a vers*.texi file is needed, emit the rule. + if ($vtexi) + { + err_am ("`$vtexi', included in `$texi', " + . "also included in `$versions{$vtexi}'") + if defined $versions{$vtexi}; + $versions{$vtexi} = $texi; + + # We number the stamp-vti files. This is doable since the + # actual names don't matter much. We only number starting + # with the second one, so that the common case looks nice. + my $vti = ($done ? $done : 'vti'); + ++$done; + + # This is ugly, but it is our historical practice. + if ($config_aux_dir_set_in_configure_ac) + { + require_conf_file_with_macro (TRUE, 'info_TEXINFOS', FOREIGN, + 'mdate-sh'); + } + else + { + require_file_with_macro (TRUE, 'info_TEXINFOS', + FOREIGN, 'mdate-sh'); + } + + my $conf_dir; + if ($config_aux_dir_set_in_configure_ac) + { + $conf_dir = "$am_config_aux_dir/"; + } + else + { + $conf_dir = '$(srcdir)/'; + } + $output_rules .= file_contents ('texi-vers', + new Automake::Location, + TEXI => $texi, + VTI => $vti, + STAMPVTI => "${soutdir}stamp-$vti", + VTEXI => "$soutdir$vtexi", + MDDIR => $conf_dir, + DIRSTAMP => $dirstamp); + } + } + + # Handle location of texinfo.tex. + my $need_texi_file = 0; + my $texinfodir; + if (var ('TEXINFO_TEX')) + { + # The user defined TEXINFO_TEX so assume he knows what he is + # doing. + $texinfodir = ('$(srcdir)/' + . dirname (variable_value ('TEXINFO_TEX'))); + } + elsif (option 'cygnus') + { + $texinfodir = '$(top_srcdir)/../texinfo'; + define_variable ('TEXINFO_TEX', "$texinfodir/texinfo.tex", INTERNAL); + } + elsif ($config_aux_dir_set_in_configure_ac) + { + $texinfodir = $am_config_aux_dir; + define_variable ('TEXINFO_TEX', "$texinfodir/texinfo.tex", INTERNAL); + $need_texi_file = 2; # so that we require_conf_file later + } + else + { + $texinfodir = '$(srcdir)'; + $need_texi_file = 1; + } + define_variable ('am__TEXINFO_TEX_DIR', $texinfodir, INTERNAL); + + push (@dist_targets, 'dist-info'); + + if (! option 'no-installinfo') + { + # Make sure documentation is made and installed first. Use + # $(INFO_DEPS), not 'info', because otherwise recursive makes + # get run twice during "make all". + unshift (@all, '$(INFO_DEPS)'); + } + + define_files_variable ("DVIS", @infobase, 'dvi', INTERNAL); + define_files_variable ("PDFS", @infobase, 'pdf', INTERNAL); + define_files_variable ("PSS", @infobase, 'ps', INTERNAL); + define_files_variable ("HTMLS", @infobase, 'html', INTERNAL); + + # This next isn't strictly needed now -- the places that look here + # could easily be changed to look in info_TEXINFOS. But this is + # probably better, in case noinst_TEXINFOS is ever supported. + define_variable ("TEXINFOS", variable_value ('info_TEXINFOS'), INTERNAL); + + # Do some error checking. Note that this file is not required + # when in Cygnus mode; instead we defined TEXINFO_TEX explicitly + # up above. + if ($need_texi_file && ! option 'no-texinfo.tex') + { + if ($need_texi_file > 1) + { + require_conf_file_with_macro (TRUE, 'info_TEXINFOS', FOREIGN, + 'texinfo.tex'); + } + else + { + require_file_with_macro (TRUE, 'info_TEXINFOS', FOREIGN, + 'texinfo.tex'); + } + } + + return makefile_wrap ("", "\t ", @texi_cleans); +} + + +# handle_texinfo () +# ----------------- +# Handle all Texinfo source. +sub handle_texinfo () +{ + reject_var 'TEXINFOS', "`TEXINFOS' is an anachronism; use `info_TEXINFOS'"; + # FIXME: I think this is an obsolete future feature name. + reject_var 'html_TEXINFOS', "HTML generation not yet supported"; + + my $info_texinfos = var ('info_TEXINFOS'); + my $texiclean = ""; + if ($info_texinfos) + { + $texiclean = handle_texinfo_helper ($info_texinfos); + } + $output_rules .= file_contents ('texinfos', + new Automake::Location, + TEXICLEAN => $texiclean, + 'LOCAL-TEXIS' => !!$info_texinfos); +} + + +# Handle any man pages. +sub handle_man_pages +{ + reject_var 'MANS', "`MANS' is an anachronism; use `man_MANS'"; + + # Find all the sections in use. We do this by first looking for + # "standard" sections, and then looking for any additional + # sections used in man_MANS. + my (%sections, %vlist); + # We handle nodist_ for uniformity. man pages aren't distributed + # by default so it isn't actually very important. + foreach my $pfx ('', 'dist_', 'nodist_') + { + # Add more sections as needed. + foreach my $section ('0'..'9', 'n', 'l') + { + my $varname = $pfx . 'man' . $section . '_MANS'; + if (var ($varname)) + { + $sections{$section} = 1; + $varname = '$(' . $varname . ')'; + $vlist{$varname} = 1; + + &push_dist_common ($varname) + if $pfx eq 'dist_'; + } + } + + my $varname = $pfx . 'man_MANS'; + my $var = var ($varname); + if ($var) + { + foreach ($var->value_as_list_recursive) + { + # A page like `foo.1c' goes into man1dir. + if (/\.([0-9a-z])([a-z]*)$/) + { + $sections{$1} = 1; + } + } + + $varname = '$(' . $varname . ')'; + $vlist{$varname} = 1; + &push_dist_common ($varname) + if $pfx eq 'dist_'; + } + } + + return unless %sections; + + # Now for each section, generate an install and uninstall rule. + # Sort sections so output is deterministic. + foreach my $section (sort keys %sections) + { + $output_rules .= &file_contents ('mans', + new Automake::Location, + SECTION => $section); + } + + my @mans = sort keys %vlist; + $output_vars .= file_contents ('mans-vars', + new Automake::Location, + MANS => "@mans"); + + push (@all, '$(MANS)') + unless option 'no-installman'; +} + +# Handle DATA variables. +sub handle_data +{ + &am_install_var ('-noextra', '-candist', 'data', 'DATA', + 'data', 'dataroot', 'dvi', 'html', 'pdf', 'ps', + 'sysconf', 'sharedstate', 'localstate', + 'pkgdata', 'lisp', 'noinst', 'check'); +} + +# Handle TAGS. +sub handle_tags +{ + my @tag_deps = (); + my @ctag_deps = (); + if (var ('SUBDIRS')) + { + $output_rules .= ("tags-recursive:\n" + . "\tlist=\'\$(SUBDIRS)\'; for subdir in \$\$list; do \\\n" + # Never fail here if a subdir fails; it + # isn't important. + . "\t test \"\$\$subdir\" = . || (cd \$\$subdir" + . " && \$(MAKE) \$(AM_MAKEFLAGS) tags); \\\n" + . "\tdone\n"); + push (@tag_deps, 'tags-recursive'); + &depend ('.PHONY', 'tags-recursive'); + + $output_rules .= ("ctags-recursive:\n" + . "\tlist=\'\$(SUBDIRS)\'; for subdir in \$\$list; do \\\n" + # Never fail here if a subdir fails; it + # isn't important. + . "\t test \"\$\$subdir\" = . || (cd \$\$subdir" + . " && \$(MAKE) \$(AM_MAKEFLAGS) ctags); \\\n" + . "\tdone\n"); + push (@ctag_deps, 'ctags-recursive'); + &depend ('.PHONY', 'ctags-recursive'); + } + + if (&saw_sources_p (1) + || var ('ETAGS_ARGS') + || @tag_deps) + { + my @config; + foreach my $spec (@config_headers) + { + my ($out, @ins) = split_config_file_spec ($spec); + foreach my $in (@ins) + { + # If the config header source is in this directory, + # require it. + push @config, basename ($in) + if $relative_dir eq dirname ($in); + } + } + $output_rules .= &file_contents ('tags', + new Automake::Location, + CONFIG => "@config", + TAGSDIRS => "@tag_deps", + CTAGSDIRS => "@ctag_deps"); + + set_seen 'TAGS_DEPENDENCIES'; + } + elsif (reject_var ('TAGS_DEPENDENCIES', + "doesn't make sense to define `TAGS_DEPENDENCIES'" + . "without\nsources or `ETAGS_ARGS'")) + { + } + else + { + # Every Makefile must define some sort of TAGS rule. + # Otherwise, it would be possible for a top-level "make TAGS" + # to fail because some subdirectory failed. + $output_rules .= "tags: TAGS\nTAGS:\n\n"; + # Ditto ctags. + $output_rules .= "ctags: CTAGS\nCTAGS:\n\n"; + } +} + +# Handle multilib support. +sub handle_multilib +{ + if ($seen_multilib && $relative_dir eq '.') + { + $output_rules .= &file_contents ('multilib', new Automake::Location); + push (@all, 'all-multi'); + } +} + + +# user_phony_rule ($NAME) +# ----------------------- +# Return false if rule $NAME does not exist. Otherwise, +# declare it as phony, complete its definition (in case it is +# conditional), and return its Automake::Rule instance. +sub user_phony_rule ($) +{ + my ($name) = @_; + my $rule = rule $name; + if ($rule) + { + depend ('.PHONY', $name); + # Define $NAME in all condition where it is not already defined, + # so that it is always OK to depend on $NAME. + for my $c ($rule->not_always_defined_in_cond (TRUE)->conds) + { + Automake::Rule::define ($name, 'internal', RULE_AUTOMAKE, + $c, INTERNAL); + $output_rules .= $c->subst_string . "$name:\n"; + } + } + return $rule; +} + + +# $BOOLEAN +# &for_dist_common ($A, $B) +# ------------------------- +# Subroutine for &handle_dist: sort files to dist. +# +# We put README first because it then becomes easier to make a +# Usenet-compliant shar file (in these, README must be first). +# +# FIXME: do more ordering of files here. +sub for_dist_common +{ + return 0 + if $a eq $b; + return -1 + if $a eq 'README'; + return 1 + if $b eq 'README'; + return $a cmp $b; +} + +# handle_dist +# ----------- +# Handle 'dist' target. +sub handle_dist () +{ + # Substitutions for distdir.am + my %transform; + + # Define DIST_SUBDIRS. This must always be done, regardless of the + # no-dist setting: target like `distclean' or `maintainer-clean' use it. + my $subdirs = var ('SUBDIRS'); + if ($subdirs) + { + # If SUBDIRS is conditionally defined, then set DIST_SUBDIRS + # to all possible directories, and use it. If DIST_SUBDIRS is + # defined, just use it. + + # Note that we check DIST_SUBDIRS first on purpose, so that + # we don't call has_conditional_contents for now reason. + # (In the past one project used so many conditional subdirectories + # that calling has_conditional_contents on SUBDIRS caused + # automake to grow to 150Mb -- this should not happen with + # the current implementation of has_conditional_contents, + # but it's more efficient to avoid the call anyway.) + if (var ('DIST_SUBDIRS')) + { + } + elsif ($subdirs->has_conditional_contents) + { + define_pretty_variable + ('DIST_SUBDIRS', TRUE, INTERNAL, + uniq ($subdirs->value_as_list_recursive)); + } + else + { + # We always define this because that is what `distclean' + # wants. + define_pretty_variable ('DIST_SUBDIRS', TRUE, INTERNAL, + '$(SUBDIRS)'); + } + } + + # The remaining definitions are only required when a dist target is used. + return if option 'no-dist'; + + # At least one of the archive formats must be enabled. + if ($relative_dir eq '.') + { + my $archive_defined = option 'no-dist-gzip' ? 0 : 1; + $archive_defined ||= + grep { option "dist-$_" } ('shar', 'zip', 'tarZ', 'bzip2'); + error (option 'no-dist-gzip', + "no-dist-gzip specified but no dist-* specified, " + . "at least one archive format must be enabled") + unless $archive_defined; + } + + # Look for common files that should be included in distribution. + # If the aux dir is set, and it does not have a Makefile.am, then + # we check for these files there as well. + my $check_aux = 0; + if ($relative_dir eq '.' + && $config_aux_dir_set_in_configure_ac) + { + if (! &is_make_dir ($config_aux_dir)) + { + $check_aux = 1; + } + } + foreach my $cfile (@common_files) + { + if (dir_has_case_matching_file ($relative_dir, $cfile) + # The file might be absent, but if it can be built it's ok. + || rule $cfile) + { + &push_dist_common ($cfile); + } + + # Don't use `elsif' here because a file might meaningfully + # appear in both directories. + if ($check_aux && dir_has_case_matching_file ($config_aux_dir, $cfile)) + { + &push_dist_common ("$config_aux_dir/$cfile") + } + } + + # We might copy elements from $configure_dist_common to + # %dist_common if we think we need to. If the file appears in our + # directory, we would have discovered it already, so we don't + # check that. But if the file is in a subdir without a Makefile, + # we want to distribute it here if we are doing `.'. Ugly! + if ($relative_dir eq '.') + { + foreach my $file (split (' ' , $configure_dist_common)) + { + push_dist_common ($file) + unless is_make_dir (dirname ($file)); + } + } + + # Files to distributed. Don't use ->value_as_list_recursive + # as it recursively expands `$(dist_pkgdata_DATA)' etc. + my @dist_common = split (' ', rvar ('DIST_COMMON')->variable_value); + @dist_common = uniq (sort for_dist_common (@dist_common)); + variable_delete 'DIST_COMMON'; + define_pretty_variable ('DIST_COMMON', TRUE, INTERNAL, @dist_common); + + # Now that we've processed DIST_COMMON, disallow further attempts + # to set it. + $handle_dist_run = 1; + + # Scan EXTRA_DIST to see if we need to distribute anything from a + # subdir. If so, add it to the list. I didn't want to do this + # originally, but there were so many requests that I finally + # relented. + my $extra_dist = var ('EXTRA_DIST'); + + $transform{'DISTCHECK-HOOK'} = !! rule 'distcheck-hook'; + $transform{'GETTEXT'} = $seen_gettext && !$seen_gettext_external; + + # If the target `dist-hook' exists, make sure it is run. This + # allows users to do random weird things to the distribution + # before it is packaged up. + push (@dist_targets, 'dist-hook') + if user_phony_rule 'dist-hook'; + $transform{'DIST-TARGETS'} = join (' ', @dist_targets); + + my $flm = option ('filename-length-max'); + my $filename_filter = $flm ? '.' x $flm->[1] : ''; + + $output_rules .= &file_contents ('distdir', + new Automake::Location, + %transform, + FILENAME_FILTER => $filename_filter); +} + + +# check_directory ($NAME, $WHERE) +# ------------------------------- +# Ensure $NAME is a directory, and that it uses sane name. +# Use $WHERE as a location in the diagnostic, if any. +sub check_directory ($$) +{ + my ($dir, $where) = @_; + + error $where, "required directory $relative_dir/$dir does not exist" + unless -d "$relative_dir/$dir"; + + # If an `obj/' directory exists, BSD make will enter it before + # reading `Makefile'. Hence the `Makefile' in the current directory + # will not be read. + # + # % cat Makefile + # all: + # echo Hello + # % cat obj/Makefile + # all: + # echo World + # % make # GNU make + # echo Hello + # Hello + # % pmake # BSD make + # echo World + # World + msg ('portability', $where, + "naming a subdirectory `obj' causes troubles with BSD make") + if $dir eq 'obj'; + + # `aux' is probably the most important of the following forbidden name, + # since it's tempting to use it as an AC_CONFIG_AUX_DIR. + msg ('portability', $where, + "name `$dir' is reserved on W32 and DOS platforms") + if grep (/^\Q$dir\E$/i, qw/aux lpt1 lpt2 lpt3 com1 com2 com3 com4 con prn/); +} + +# check_directories_in_var ($VARIABLE) +# ------------------------------------ +# Recursively check all items in variables $VARIABLE as directories +sub check_directories_in_var ($) +{ + my ($var) = @_; + $var->traverse_recursively + (sub + { + my ($var, $val, $cond, $full_cond) = @_; + check_directory ($val, $var->rdef ($cond)->location); + return (); + }, + undef, + skip_ac_subst => 1); +} + +# &handle_subdirs () +# ------------------ +# Handle subdirectories. +sub handle_subdirs () +{ + my $subdirs = var ('SUBDIRS'); + return + unless $subdirs; + + check_directories_in_var $subdirs; + + my $dsubdirs = var ('DIST_SUBDIRS'); + check_directories_in_var $dsubdirs + if $dsubdirs; + + $output_rules .= &file_contents ('subdirs', new Automake::Location); + rvar ('RECURSIVE_TARGETS')->rdef (TRUE)->{'pretty'} = VAR_SORTED; # Gross! +} + + +# ($REGEN, @DEPENDENCIES) +# &scan_aclocal_m4 +# ---------------- +# If aclocal.m4 creation is automated, return the list of its dependencies. +sub scan_aclocal_m4 () +{ + my $regen_aclocal = 0; + + set_seen 'CONFIG_STATUS_DEPENDENCIES'; + set_seen 'CONFIGURE_DEPENDENCIES'; + + if (-f 'aclocal.m4') + { + &define_variable ("ACLOCAL_M4", '$(top_srcdir)/aclocal.m4', INTERNAL); + + my $aclocal = new Automake::XFile "< aclocal.m4"; + my $line = $aclocal->getline; + $regen_aclocal = $line =~ 'generated automatically by aclocal'; + } + + my @ac_deps = (); + + if (set_seen ('ACLOCAL_M4_SOURCES')) + { + push (@ac_deps, '$(ACLOCAL_M4_SOURCES)'); + msg_var ('obsolete', 'ACLOCAL_M4_SOURCES', + "`ACLOCAL_M4_SOURCES' is obsolete.\n" + . "It should be safe to simply remove it."); + } + + # Note that it might be possible that aclocal.m4 doesn't exist but + # should be auto-generated. This case probably isn't very + # important. + + return ($regen_aclocal, @ac_deps); +} + + +# Helper function for substitute_ac_subst_variables. +sub substitute_ac_subst_variables_worker($) +{ + my ($token) = @_; + return "\@$token\@" if var $token; + return "\${$token\}"; +} + +# substitute_ac_subst_variables ($TEXT) +# ------------------------------------- +# Replace any occurrence of ${FOO} in $TEXT by @FOO@ if FOO is an AC_SUBST +# variable. +sub substitute_ac_subst_variables ($) +{ + my ($text) = @_; + $text =~ s/\${([^ \t=:+{}]+)}/&substitute_ac_subst_variables_worker ($1)/ge; + return $text; +} + +# @DEPENDENCIES +# &prepend_srcdir (@INPUTS) +# ------------------------- +# Prepend $(srcdir) or $(top_srcdir) to all @INPUTS. The idea is that +# if an input file has a directory part the same as the current +# directory, then the directory part is simply replaced by $(srcdir). +# But if the directory part is different, then $(top_srcdir) is +# prepended. +sub prepend_srcdir (@) +{ + my (@inputs) = @_; + my @newinputs; + + foreach my $single (@inputs) + { + if (dirname ($single) eq $relative_dir) + { + push (@newinputs, '$(srcdir)/' . basename ($single)); + } + else + { + push (@newinputs, '$(top_srcdir)/' . $single); + } + } + return @newinputs; +} + +# @DEPENDENCIES +# rewrite_inputs_into_dependencies ($OUTPUT, @INPUTS) +# --------------------------------------------------- +# Compute a list of dependencies appropriate for the rebuild +# rule of +# AC_CONFIG_FILES($OUTPUT:$INPUT[0]:$INPUTS[1]:...) +# Also distribute $INPUTs which are not build by another AC_CONFIG_FILES. +sub rewrite_inputs_into_dependencies ($@) +{ + my ($file, @inputs) = @_; + my @res = (); + + for my $i (@inputs) + { + # We cannot create dependencies on shell variables. + next if (substitute_ac_subst_variables $i) =~ /\$/; + + if (exists $ac_config_files_location{$i}) + { + my $di = dirname $i; + if ($di eq $relative_dir) + { + $i = basename $i; + } + # In the top-level Makefile we do not use $(top_builddir), because + # we are already there, and since the targets are built without + # a $(top_builddir), it helps BSD Make to match them with + # dependencies. + elsif ($relative_dir ne '.') + { + $i = '$(top_builddir)/' . $i; + } + } + else + { + msg ('error', $ac_config_files_location{$file}, + "required file `$i' not found") + unless $i =~ /\$/ || exists $output_files{$i} || -f $i; + ($i) = prepend_srcdir ($i); + push_dist_common ($i); + } + push @res, $i; + } + return @res; +} + + + +# &handle_configure ($MAKEFILE_AM, $MAKEFILE_IN, $MAKEFILE, @INPUTS) +# ------------------------------------------------------------------ +# Handle remaking and configure stuff. +# We need the name of the input file, to do proper remaking rules. +sub handle_configure ($$$@) +{ + my ($makefile_am, $makefile_in, $makefile, @inputs) = @_; + + prog_error 'empty @inputs' + unless @inputs; + + my ($rel_makefile_am, $rel_makefile_in) = prepend_srcdir ($makefile_am, + $makefile_in); + my $rel_makefile = basename $makefile; + + my $colon_infile = ':' . join (':', @inputs); + $colon_infile = '' if $colon_infile eq ":$makefile.in"; + my @rewritten = rewrite_inputs_into_dependencies ($makefile, @inputs); + my ($regen_aclocal_m4, @aclocal_m4_deps) = scan_aclocal_m4; + define_pretty_variable ('am__aclocal_m4_deps', TRUE, INTERNAL, + @configure_deps, @aclocal_m4_deps, + '$(top_srcdir)/' . $configure_ac); + my @configuredeps = ('$(am__aclocal_m4_deps)', '$(CONFIGURE_DEPENDENCIES)'); + push @configuredeps, '$(ACLOCAL_M4)' if -f 'aclocal.m4'; + define_pretty_variable ('am__configure_deps', TRUE, INTERNAL, + @configuredeps); + + $output_rules .= file_contents + ('configure', + new Automake::Location, + MAKEFILE => $rel_makefile, + 'MAKEFILE-DEPS' => "@rewritten", + 'CONFIG-MAKEFILE' => ($relative_dir eq '.') ? '$@' : '$(subdir)/$@', + 'MAKEFILE-IN' => $rel_makefile_in, + 'MAKEFILE-IN-DEPS' => "@include_stack", + 'MAKEFILE-AM' => $rel_makefile_am, + STRICTNESS => global_option 'cygnus' + ? 'cygnus' : $strictness_name, + 'USE-DEPS' => global_option 'no-dependencies' + ? ' --ignore-deps' : '', + 'MAKEFILE-AM-SOURCES' => "$makefile$colon_infile", + 'REGEN-ACLOCAL-M4' => $regen_aclocal_m4); + + if ($relative_dir eq '.') + { + &push_dist_common ('acconfig.h') + if -f 'acconfig.h'; + } + + # If we have a configure header, require it. + my $hdr_index = 0; + my @distclean_config; + foreach my $spec (@config_headers) + { + $hdr_index += 1; + # $CONFIG_H_PATH: config.h from top level. + my ($config_h_path, @ins) = split_config_file_spec ($spec); + my $config_h_dir = dirname ($config_h_path); + + # If the header is in the current directory we want to build + # the header here. Otherwise, if we're at the topmost + # directory and the header's directory doesn't have a + # Makefile, then we also want to build the header. + if ($relative_dir eq $config_h_dir + || ($relative_dir eq '.' && ! &is_make_dir ($config_h_dir))) + { + my ($cn_sans_dir, $stamp_dir); + if ($relative_dir eq $config_h_dir) + { + $cn_sans_dir = basename ($config_h_path); + $stamp_dir = ''; + } + else + { + $cn_sans_dir = $config_h_path; + if ($config_h_dir eq '.') + { + $stamp_dir = ''; + } + else + { + $stamp_dir = $config_h_dir . '/'; + } + } + + # This will also distribute all inputs. + @ins = rewrite_inputs_into_dependencies ($config_h_path, @ins); + + # Cannot define rebuild rules for filenames with shell variables. + next if (substitute_ac_subst_variables $config_h_path) =~ /\$/; + + # Header defined in this directory. + my @files; + if (-f $config_h_path . '.top') + { + push (@files, "$cn_sans_dir.top"); + } + if (-f $config_h_path . '.bot') + { + push (@files, "$cn_sans_dir.bot"); + } + + push_dist_common (@files); + + # For now, acconfig.h can only appear in the top srcdir. + if (-f 'acconfig.h') + { + push (@files, '$(top_srcdir)/acconfig.h'); + } + + my $stamp = "${stamp_dir}stamp-h${hdr_index}"; + $output_rules .= + file_contents ('remake-hdr', + new Automake::Location, + FILES => "@files", + CONFIG_H => $cn_sans_dir, + CONFIG_HIN => $ins[0], + CONFIG_H_DEPS => "@ins", + CONFIG_H_PATH => $config_h_path, + STAMP => "$stamp"); + + push @distclean_config, $cn_sans_dir, $stamp; + } + } + + $output_rules .= file_contents ('clean-hdr', + new Automake::Location, + FILES => "@distclean_config") + if @distclean_config; + + # Distribute and define mkinstalldirs only if it is already present + # in the package, for backward compatibility (some people may still + # use $(mkinstalldirs)). + my $mkidpath = "$config_aux_dir/mkinstalldirs"; + if (-f $mkidpath) + { + # Use require_file so that any existing script gets updated + # by --force-missing. + require_conf_file ($mkidpath, FOREIGN, 'mkinstalldirs'); + define_variable ('mkinstalldirs', + "\$(SHELL) $am_config_aux_dir/mkinstalldirs", INTERNAL); + } + else + { + # Use $(install_sh), not $(MKDIR_P) because the latter requires + # at least one argument, and $(mkinstalldirs) used to work + # even without arguments (e.g. $(mkinstalldirs) $(conditional_dir)). + define_variable ('mkinstalldirs', '$(install_sh) -d', INTERNAL); + } + + reject_var ('CONFIG_HEADER', + "`CONFIG_HEADER' is an anachronism; now determined " + . "automatically\nfrom `$configure_ac'"); + + my @config_h; + foreach my $spec (@config_headers) + { + my ($out, @ins) = split_config_file_spec ($spec); + # Generate CONFIG_HEADER define. + if ($relative_dir eq dirname ($out)) + { + push @config_h, basename ($out); + } + else + { + push @config_h, "\$(top_builddir)/$out"; + } + } + define_variable ("CONFIG_HEADER", "@config_h", INTERNAL) + if @config_h; + + # Now look for other files in this directory which must be remade + # by config.status, and generate rules for them. + my @actual_other_files = (); + foreach my $lfile (@other_input_files) + { + my $file; + my @inputs; + if ($lfile =~ /^([^:]*):(.*)$/) + { + # This is the ":" syntax of AC_OUTPUT. + $file = $1; + @inputs = split (':', $2); + } + else + { + # Normal usage. + $file = $lfile; + @inputs = $file . '.in'; + } + + # Automake files should not be stored in here, but in %MAKE_LIST. + prog_error ("$lfile in \@other_input_files\n" + . "\@other_input_files = (@other_input_files)") + if -f $file . '.am'; + + my $local = basename ($file); + + # We skip files that aren't in this directory. However, if + # the file's directory does not have a Makefile, and we are + # currently doing `.', then we create a rule to rebuild the + # file in the subdir. + my $fd = dirname ($file); + if ($fd ne $relative_dir) + { + if ($relative_dir eq '.' && ! &is_make_dir ($fd)) + { + $local = $file; + } + else + { + next; + } + } + + my @rewritten_inputs = rewrite_inputs_into_dependencies ($file, @inputs); + + # Cannot output rules for shell variables. + next if (substitute_ac_subst_variables $local) =~ /\$/; + + $output_rules .= ($local . ': ' + . '$(top_builddir)/config.status ' + . "@rewritten_inputs\n" + . "\t" + . 'cd $(top_builddir) && ' + . '$(SHELL) ./config.status ' + . ($relative_dir eq '.' ? '' : '$(subdir)/') + . '$@' + . "\n"); + push (@actual_other_files, $local); + } + + # For links we should clean destinations and distribute sources. + foreach my $spec (@config_links) + { + my ($link, $file) = split /:/, $spec; + # Some people do AC_CONFIG_LINKS($computed). We only handle + # the DEST:SRC form. + next unless $file; + my $where = $ac_config_files_location{$link}; + + # Skip destinations that contain shell variables. + if ((substitute_ac_subst_variables $link) !~ /\$/) + { + # We skip links that aren't in this directory. However, if + # the link's directory does not have a Makefile, and we are + # currently doing `.', then we add the link to CONFIG_CLEAN_FILES + # in `.'s Makefile.in. + my $local = basename ($link); + my $fd = dirname ($link); + if ($fd ne $relative_dir) + { + if ($relative_dir eq '.' && ! &is_make_dir ($fd)) + { + $local = $link; + } + else + { + $local = undef; + } + } + push @actual_other_files, $local if $local; + } + + # Do not process sources that contain shell variables. + if ((substitute_ac_subst_variables $file) !~ /\$/) + { + my $fd = dirname ($file); + + # We distribute files that are in this directory. + # At the top-level (`.') we also distribute files whose + # directory does not have a Makefile. + if (($fd eq $relative_dir) + || ($relative_dir eq '.' && ! &is_make_dir ($fd))) + { + # The following will distribute $file as a side-effect when + # it is appropriate (i.e., when $file is not already an output). + # We do not need the result, just the side-effect. + rewrite_inputs_into_dependencies ($link, $file); + } + } + } + + # These files get removed by "make distclean". + define_pretty_variable ('CONFIG_CLEAN_FILES', TRUE, INTERNAL, + @actual_other_files); +} + +# Handle C headers. +sub handle_headers +{ + my @r = &am_install_var ('-defaultdist', 'header', 'HEADERS', 'include', + 'oldinclude', 'pkginclude', + 'noinst', 'check'); + foreach (@r) + { + next unless $_->[1] =~ /\..*$/; + &saw_extension ($&); + } +} + +sub handle_gettext +{ + return if ! $seen_gettext || $relative_dir ne '.'; + + my $subdirs = var 'SUBDIRS'; + + if (! $subdirs) + { + err_ac "AM_GNU_GETTEXT used but SUBDIRS not defined"; + return; + } + + # Perform some sanity checks to help users get the right setup. + # We disable these tests when po/ doesn't exist in order not to disallow + # unusual gettext setups. + # + # Bruno Haible: + # | The idea is: + # | + # | 1) If a package doesn't have a directory po/ at top level, it + # | will likely have multiple po/ directories in subpackages. + # | + # | 2) It is useful to warn for the absence of intl/ if AM_GNU_GETTEXT + # | is used without 'external'. It is also useful to warn for the + # | presence of intl/ if AM_GNU_GETTEXT([external]) is used. Both + # | warnings apply only to the usual layout of packages, therefore + # | they should both be disabled if no po/ directory is found at + # | top level. + + if (-d 'po') + { + my @subdirs = $subdirs->value_as_list_recursive; + + msg_var ('syntax', $subdirs, + "AM_GNU_GETTEXT used but `po' not in SUBDIRS") + if ! grep ($_ eq 'po', @subdirs); + + # intl/ is not required when AM_GNU_GETTEXT is called with the + # `external' option and AM_GNU_GETTEXT_INTL_SUBDIR is not called. + msg_var ('syntax', $subdirs, + "AM_GNU_GETTEXT used but `intl' not in SUBDIRS") + if (! ($seen_gettext_external && ! $seen_gettext_intl) + && ! grep ($_ eq 'intl', @subdirs)); + + # intl/ should not be used with AM_GNU_GETTEXT([external]), except + # if AM_GNU_GETTEXT_INTL_SUBDIR is called. + msg_var ('syntax', $subdirs, + "`intl' should not be in SUBDIRS when " + . "AM_GNU_GETTEXT([external]) is used") + if ($seen_gettext_external && ! $seen_gettext_intl + && grep ($_ eq 'intl', @subdirs)); + } + + require_file ($ac_gettext_location, GNU, 'ABOUT-NLS'); +} + +# Handle footer elements. +sub handle_footer +{ + reject_rule ('.SUFFIXES', + "use variable `SUFFIXES', not target `.SUFFIXES'"); + + # Note: AIX 4.1 /bin/make will fail if any suffix rule appears + # before .SUFFIXES. So we make sure that .SUFFIXES appears before + # anything else, by sticking it right after the default: target. + $output_header .= ".SUFFIXES:\n"; + my $suffixes = var 'SUFFIXES'; + my @suffixes = Automake::Rule::suffixes; + if (@suffixes || $suffixes) + { + # Make sure SUFFIXES has unique elements. Sort them to ensure + # the output remains consistent. However, $(SUFFIXES) is + # always at the start of the list, unsorted. This is done + # because make will choose rules depending on the ordering of + # suffixes, and this lets the user have some control. Push + # actual suffixes, and not $(SUFFIXES). Some versions of make + # do not like variable substitutions on the .SUFFIXES line. + my @user_suffixes = ($suffixes + ? $suffixes->value_as_list_recursive : ()); + + my %suffixes = map { $_ => 1 } @suffixes; + delete @suffixes{@user_suffixes}; + + $output_header .= (".SUFFIXES: " + . join (' ', @user_suffixes, sort keys %suffixes) + . "\n"); + } + + $output_trailer .= file_contents ('footer', new Automake::Location); +} + + +# Generate `make install' rules. +sub handle_install () +{ + $output_rules .= &file_contents + ('install', + new Automake::Location, + maybe_BUILT_SOURCES => (set_seen ('BUILT_SOURCES') + ? (" \$(BUILT_SOURCES)\n" + . "\t\$(MAKE) \$(AM_MAKEFLAGS)") + : ''), + 'installdirs-local' => (user_phony_rule 'installdirs-local' + ? ' installdirs-local' : ''), + am__installdirs => variable_value ('am__installdirs') || ''); +} + + +# Deal with all and all-am. +sub handle_all ($) +{ + my ($makefile) = @_; + + # Output `all-am'. + + # Put this at the beginning for the sake of non-GNU makes. This + # is still wrong if these makes can run parallel jobs. But it is + # right enough. + unshift (@all, basename ($makefile)); + + foreach my $spec (@config_headers) + { + my ($out, @ins) = split_config_file_spec ($spec); + push (@all, basename ($out)) + if dirname ($out) eq $relative_dir; + } + + # Install `all' hooks. + push (@all, "all-local") + if user_phony_rule "all-local"; + + &pretty_print_rule ("all-am:", "\t\t", @all); + &depend ('.PHONY', 'all-am', 'all'); + + + # Output `all'. + + my @local_headers = (); + push @local_headers, '$(BUILT_SOURCES)' + if var ('BUILT_SOURCES'); + foreach my $spec (@config_headers) + { + my ($out, @ins) = split_config_file_spec ($spec); + push @local_headers, basename ($out) + if dirname ($out) eq $relative_dir; + } + + if (@local_headers) + { + # We need to make sure config.h is built before we recurse. + # We also want to make sure that built sources are built + # before any ordinary `all' targets are run. We can't do this + # by changing the order of dependencies to the "all" because + # that breaks when using parallel makes. Instead we handle + # things explicitly. + $output_all .= ("all: @local_headers" + . "\n\t" + . '$(MAKE) $(AM_MAKEFLAGS) ' + . (var ('SUBDIRS') ? 'all-recursive' : 'all-am') + . "\n\n"); + } + else + { + $output_all .= "all: " . (var ('SUBDIRS') + ? 'all-recursive' : 'all-am') . "\n\n"; + } +} + + +# &do_check_merge_target () +# ------------------------- +# Handle check merge target specially. +sub do_check_merge_target () +{ + # Include user-defined local form of target. + push @check_tests, 'check-local' + if user_phony_rule 'check-local'; + + # In --cygnus mode, check doesn't depend on all. + if (option 'cygnus') + { + # Just run the local check rules. + pretty_print_rule ('check-am:', "\t\t", @check); + } + else + { + # The check target must depend on the local equivalent of + # `all', to ensure all the primary targets are built. Then it + # must build the local check rules. + $output_rules .= "check-am: all-am\n"; + pretty_print_rule ("\t\$(MAKE) \$(AM_MAKEFLAGS)", "\t ", + @check) + if @check; + } + pretty_print_rule ("\t\$(MAKE) \$(AM_MAKEFLAGS)", "\t ", + @check_tests) + if @check_tests; + + depend '.PHONY', 'check', 'check-am'; + # Handle recursion. We have to honor BUILT_SOURCES like for `all:'. + $output_rules .= ("check: " + . (var ('BUILT_SOURCES') + ? "\$(BUILT_SOURCES)\n\t\$(MAKE) \$(AM_MAKEFLAGS) " + : '') + . (var ('SUBDIRS') ? 'check-recursive' : 'check-am') + . "\n"); +} + +# handle_clean ($MAKEFILE) +# ------------------------ +# Handle all 'clean' targets. +sub handle_clean ($) +{ + my ($makefile) = @_; + + # Clean the files listed in user variables if they exist. + $clean_files{'$(MOSTLYCLEANFILES)'} = MOSTLY_CLEAN + if var ('MOSTLYCLEANFILES'); + $clean_files{'$(CLEANFILES)'} = CLEAN + if var ('CLEANFILES'); + $clean_files{'$(DISTCLEANFILES)'} = DIST_CLEAN + if var ('DISTCLEANFILES'); + $clean_files{'$(MAINTAINERCLEANFILES)'} = MAINTAINER_CLEAN + if var ('MAINTAINERCLEANFILES'); + + # Built sources are automatically removed by maintainer-clean. + $clean_files{'$(BUILT_SOURCES)'} = MAINTAINER_CLEAN + if var ('BUILT_SOURCES'); + + # Compute a list of "rm"s to run for each target. + my %rms = (MOSTLY_CLEAN, [], + CLEAN, [], + DIST_CLEAN, [], + MAINTAINER_CLEAN, []); + + foreach my $file (keys %clean_files) + { + my $when = $clean_files{$file}; + prog_error 'invalid entry in %clean_files' + unless exists $rms{$when}; + + my $rm = "rm -f $file"; + # If file is a variable, make sure when don't call `rm -f' without args. + $rm ="test -z \"$file\" || $rm" + if ($file =~ /^\s*\$(\(.*\)|\{.*\})\s*$/); + + push @{$rms{$when}}, "\t-$rm\n"; + } + + $output_rules .= &file_contents + ('clean', + new Automake::Location, + MOSTLYCLEAN_RMS => join ('', sort @{$rms{&MOSTLY_CLEAN}}), + CLEAN_RMS => join ('', sort @{$rms{&CLEAN}}), + DISTCLEAN_RMS => join ('', sort @{$rms{&DIST_CLEAN}}), + MAINTAINER_CLEAN_RMS => join ('', sort @{$rms{&MAINTAINER_CLEAN}}), + MAKEFILE => basename $makefile, + ); +} + + +# &target_cmp ($A, $B) +# -------------------- +# Subroutine for &handle_factored_dependencies to let `.PHONY' and +# other `.TARGETS' be last. +sub target_cmp +{ + return 0 if $a eq $b; + + my $a1 = substr ($a, 0, 1); + my $b1 = substr ($b, 0, 1); + if ($a1 ne $b1) + { + return -1 if $b1 eq '.'; + return 1 if $a1 eq '.'; + } + return $a cmp $b; +} + + +# &handle_factored_dependencies () +# -------------------------------- +# Handle everything related to gathered targets. +sub handle_factored_dependencies +{ + # Reject bad hooks. + foreach my $utarg ('uninstall-data-local', 'uninstall-data-hook', + 'uninstall-exec-local', 'uninstall-exec-hook', + 'uninstall-dvi-local', + 'uninstall-html-local', + 'uninstall-info-local', + 'uninstall-pdf-local', + 'uninstall-ps-local') + { + my $x = $utarg; + $x =~ s/-.*-/-/; + reject_rule ($utarg, "use `$x', not `$utarg'"); + } + + reject_rule ('install-local', + "use `install-data-local' or `install-exec-local', " + . "not `install-local'"); + + reject_rule ('install-hook', + "use `install-data-hook' or `install-exec-hook', " + . "not `install-hook'"); + + # Install the -local hooks. + foreach (keys %dependencies) + { + # Hooks are installed on the -am targets. + s/-am$// or next; + depend ("$_-am", "$_-local") + if user_phony_rule "$_-local"; + } + + # Install the -hook hooks. + # FIXME: Why not be as liberal as we are with -local hooks? + foreach ('install-exec', 'install-data', 'uninstall') + { + if (user_phony_rule "$_-hook") + { + $actions{"$_-am"} .= + ("\t\@\$(NORMAL_INSTALL)\n" + . "\t" . '$(MAKE) $(AM_MAKEFLAGS) ' . "$_-hook\n"); + depend ('.MAKE', "$_-am"); + } + } + + # All the required targets are phony. + depend ('.PHONY', keys %required_targets); + + # Actually output gathered targets. + foreach (sort target_cmp keys %dependencies) + { + # If there is nothing about this guy, skip it. + next + unless (@{$dependencies{$_}} + || $actions{$_} + || $required_targets{$_}); + + # Define gathered targets in undefined conditions. + # FIXME: Right now we must handle .PHONY as an exception, + # because people write things like + # .PHONY: myphonytarget + # to append dependencies. This would not work if Automake + # refrained from defining its own .PHONY target as it does + # with other overridden targets. + # Likewise for `.MAKE'. + my @undefined_conds = (TRUE,); + if ($_ ne '.PHONY' && $_ ne '.MAKE') + { + @undefined_conds = + Automake::Rule::define ($_, 'internal', + RULE_AUTOMAKE, TRUE, INTERNAL); + } + my @uniq_deps = uniq (sort @{$dependencies{$_}}); + foreach my $cond (@undefined_conds) + { + my $condstr = $cond->subst_string; + &pretty_print_rule ("$condstr$_:", "$condstr\t", @uniq_deps); + $output_rules .= $actions{$_} if defined $actions{$_}; + $output_rules .= "\n"; + } + } +} + + +# &handle_tests_dejagnu () +# ------------------------ +sub handle_tests_dejagnu +{ + push (@check_tests, 'check-DEJAGNU'); + $output_rules .= file_contents ('dejagnu', new Automake::Location); +} + + +# Handle TESTS variable and other checks. +sub handle_tests +{ + if (option 'dejagnu') + { + &handle_tests_dejagnu; + } + else + { + foreach my $c ('DEJATOOL', 'RUNTEST', 'RUNTESTFLAGS') + { + reject_var ($c, "`$c' defined but `dejagnu' not in " + . "`AUTOMAKE_OPTIONS'"); + } + } + + if (var ('TESTS')) + { + push (@check_tests, 'check-TESTS'); + $output_rules .= &file_contents ('check', new Automake::Location); + + # Tests that are known programs should have $(EXEEXT) appended. + append_exeext { exists $known_programs{$_[0]} } 'TESTS'; + } +} + +# Handle Emacs Lisp. +sub handle_emacs_lisp +{ + my @elfiles = &am_install_var ('-candist', 'lisp', 'LISP', + 'lisp', 'noinst'); + + return if ! @elfiles; + + define_pretty_variable ('am__ELFILES', TRUE, INTERNAL, + map { $_->[1] } @elfiles); + define_pretty_variable ('am__ELCFILES', TRUE, INTERNAL, + '$(am__ELFILES:.el=.elc)'); + # This one can be overridden by users. + define_pretty_variable ('ELCFILES', TRUE, INTERNAL, '$(LISP:.el=.elc)'); + + push @all, '$(ELCFILES)'; + + require_variables ($elfiles[0][0], "Emacs Lisp sources seen", TRUE, + 'EMACS', 'lispdir'); + require_conf_file ($elfiles[0][0], FOREIGN, 'elisp-comp'); + &define_variable ('elisp_comp', "$am_config_aux_dir/elisp-comp", INTERNAL); +} + +# Handle Python +sub handle_python +{ + my @pyfiles = &am_install_var ('-defaultdist', 'python', 'PYTHON', + 'noinst'); + return if ! @pyfiles; + + require_variables ($pyfiles[0][0], "Python sources seen", TRUE, 'PYTHON'); + require_conf_file ($pyfiles[0][0], FOREIGN, 'py-compile'); + &define_variable ('py_compile', "$am_config_aux_dir/py-compile", INTERNAL); +} + +# Handle Java. +sub handle_java +{ + my @sourcelist = &am_install_var ('-candist', + 'java', 'JAVA', + 'java', 'noinst', 'check'); + return if ! @sourcelist; + + my @prefix = am_primary_prefixes ('JAVA', 1, + 'java', 'noinst', 'check'); + + my $dir; + foreach my $curs (@prefix) + { + next + if $curs eq 'EXTRA'; + + err_var "${curs}_JAVA", "multiple _JAVA primaries in use" + if defined $dir; + $dir = $curs; + } + + + push (@all, 'class' . $dir . '.stamp'); +} + + +# Handle some of the minor options. +sub handle_minor_options +{ + if (option 'readme-alpha') + { + if ($relative_dir eq '.') + { + if ($package_version !~ /^$GNITS_VERSION_PATTERN$/) + { + msg ('error-gnits', $package_version_location, + "version `$package_version' doesn't follow " . + "Gnits standards"); + } + if (defined $1 && -f 'README-alpha') + { + # This means we have an alpha release. See + # GNITS_VERSION_PATTERN for details. + push_dist_common ('README-alpha'); + } + } + } +} + +################################################################ + +# ($OUTPUT, @INPUTS) +# &split_config_file_spec ($SPEC) +# ------------------------------- +# Decode the Autoconf syntax for config files (files, headers, links +# etc.). +sub split_config_file_spec ($) +{ + my ($spec) = @_; + my ($output, @inputs) = split (/:/, $spec); + + push @inputs, "$output.in" + unless @inputs; + + return ($output, @inputs); +} + +# $input +# locate_am (@POSSIBLE_SOURCES) +# ----------------------------- +# AC_CONFIG_FILES allow specifications such as Makefile:top.in:mid.in:bot.in +# This functions returns the first *.in file for which a *.am exists. +# It returns undef otherwise. +sub locate_am (@) +{ + my (@rest) = @_; + my $input; + foreach my $file (@rest) + { + if (($file =~ /^(.*)\.in$/) && -f "$1.am") + { + $input = $file; + last; + } + } + return $input; +} + +my %make_list; + +# &scan_autoconf_config_files ($WHERE, $CONFIG-FILES) +# --------------------------------------------------- +# Study $CONFIG-FILES which is the first argument to AC_CONFIG_FILES +# (or AC_OUTPUT). +sub scan_autoconf_config_files ($$) +{ + my ($where, $config_files) = @_; + + # Look at potential Makefile.am's. + foreach (split ' ', $config_files) + { + # Must skip empty string for Perl 4. + next if $_ eq "\\" || $_ eq ''; + + # Handle $local:$input syntax. + my ($local, @rest) = split (/:/); + @rest = ("$local.in",) unless @rest; + my $input = locate_am @rest; + if ($input) + { + # We have a file that automake should generate. + $make_list{$input} = join (':', ($local, @rest)); + } + else + { + # We have a file that automake should cause to be + # rebuilt, but shouldn't generate itself. + push (@other_input_files, $_); + } + $ac_config_files_location{$local} = $where; + } +} + + +# &scan_autoconf_traces ($FILENAME) +# --------------------------------- +sub scan_autoconf_traces ($) +{ + my ($filename) = @_; + + # Macros to trace, with their minimal number of arguments. + # + # IMPORTANT: If you add a macro here, you should also add this macro + # ========= to Automake-preselection in autoconf/lib/autom4te.in. + my %traced = ( + AC_CANONICAL_BUILD => 0, + AC_CANONICAL_HOST => 0, + AC_CANONICAL_TARGET => 0, + AC_CONFIG_AUX_DIR => 1, + AC_CONFIG_FILES => 1, + AC_CONFIG_HEADERS => 1, + AC_CONFIG_LIBOBJ_DIR => 1, + AC_CONFIG_LINKS => 1, + AC_INIT => 0, + AC_LIBSOURCE => 1, + AC_REQUIRE_AUX_FILE => 1, + AC_SUBST_TRACE => 1, + AM_AUTOMAKE_VERSION => 1, + AM_CONDITIONAL => 2, + AM_ENABLE_MULTILIB => 0, + AM_GNU_GETTEXT => 0, + AM_GNU_GETTEXT_INTL_SUBDIR => 0, + AM_INIT_AUTOMAKE => 0, + AM_MAINTAINER_MODE => 0, + AM_PROG_CC_C_O => 0, + _AM_SUBST_NOTMAKE => 1, + LT_SUPPORTED_TAG => 1, + _LT_AC_TAGCONFIG => 0, + m4_include => 1, + m4_sinclude => 1, + sinclude => 1, + ); + + my $traces = ($ENV{AUTOCONF} || 'autoconf') . " "; + + # Use a separator unlikely to be used, not `:', the default, which + # has a precise meaning for AC_CONFIG_FILES and so on. + $traces .= join (' ', + map { "--trace=$_" . ':\$f:\$l::\$n::\${::}%' } + (keys %traced)); + + my $tracefh = new Automake::XFile ("$traces $filename |"); + verb "reading $traces"; + + while ($_ = $tracefh->getline) + { + chomp; + my ($here, @args) = split (/::/); + my $where = new Automake::Location $here; + my $macro = $args[0]; + + prog_error ("unrequested trace `$macro'") + unless exists $traced{$macro}; + + # Skip and diagnose malformed calls. + if ($#args < $traced{$macro}) + { + msg ('syntax', $where, "not enough arguments for $macro"); + next; + } + + # Alphabetical ordering please. + if ($macro eq 'AC_CANONICAL_BUILD') + { + if ($seen_canonical <= AC_CANONICAL_BUILD) + { + $seen_canonical = AC_CANONICAL_BUILD; + $canonical_location = $where; + } + } + elsif ($macro eq 'AC_CANONICAL_HOST') + { + if ($seen_canonical <= AC_CANONICAL_HOST) + { + $seen_canonical = AC_CANONICAL_HOST; + $canonical_location = $where; + } + } + elsif ($macro eq 'AC_CANONICAL_TARGET') + { + $seen_canonical = AC_CANONICAL_TARGET; + $canonical_location = $where; + } + elsif ($macro eq 'AC_CONFIG_AUX_DIR') + { + if ($seen_init_automake) + { + error ($where, "AC_CONFIG_AUX_DIR must be called before " + . "AM_INIT_AUTOMAKE...", partial => 1); + error ($seen_init_automake, "... AM_INIT_AUTOMAKE called here"); + } + $config_aux_dir = $args[1]; + $config_aux_dir_set_in_configure_ac = 1; + $relative_dir = '.'; + check_directory ($config_aux_dir, $where); + } + elsif ($macro eq 'AC_CONFIG_FILES') + { + # Look at potential Makefile.am's. + scan_autoconf_config_files ($where, $args[1]); + } + elsif ($macro eq 'AC_CONFIG_HEADERS') + { + foreach my $spec (split (' ', $args[1])) + { + my ($dest, @src) = split (':', $spec); + $ac_config_files_location{$dest} = $where; + push @config_headers, $spec; + } + } + elsif ($macro eq 'AC_CONFIG_LIBOBJ_DIR') + { + $config_libobj_dir = $args[1]; + $relative_dir = '.'; + check_directory ($config_libobj_dir, $where); + } + elsif ($macro eq 'AC_CONFIG_LINKS') + { + foreach my $spec (split (' ', $args[1])) + { + my ($dest, $src) = split (':', $spec); + $ac_config_files_location{$dest} = $where; + push @config_links, $spec; + } + } + elsif ($macro eq 'AC_INIT') + { + if (defined $args[2]) + { + $package_version = $args[2]; + $package_version_location = $where; + } + } + elsif ($macro eq 'AC_LIBSOURCE') + { + $libsources{$args[1]} = $here; + } + elsif ($macro eq 'AC_REQUIRE_AUX_FILE') + { + # Only remember the first time a file is required. + $required_aux_file{$args[1]} = $where + unless exists $required_aux_file{$args[1]}; + } + elsif ($macro eq 'AC_SUBST_TRACE') + { + # Just check for alphanumeric in AC_SUBST_TRACE. If you do + # AC_SUBST(5), then too bad. + $configure_vars{$args[1]} = $where + if $args[1] =~ /^\w+$/; + } + elsif ($macro eq 'AM_AUTOMAKE_VERSION') + { + error ($where, + "version mismatch. This is Automake $VERSION,\n" . + "but the definition used by this AM_INIT_AUTOMAKE\n" . + "comes from Automake $args[1]. You should recreate\n" . + "aclocal.m4 with aclocal and run automake again.\n", + # $? = 63 is used to indicate version mismatch to missing. + exit_code => 63) + if $VERSION ne $args[1]; + + $seen_automake_version = 1; + } + elsif ($macro eq 'AM_CONDITIONAL') + { + $configure_cond{$args[1]} = $where; + } + elsif ($macro eq 'AM_ENABLE_MULTILIB') + { + $seen_multilib = $where; + } + elsif ($macro eq 'AM_GNU_GETTEXT') + { + $seen_gettext = $where; + $ac_gettext_location = $where; + $seen_gettext_external = grep ($_ eq 'external', @args); + } + elsif ($macro eq 'AM_GNU_GETTEXT_INTL_SUBDIR') + { + $seen_gettext_intl = $where; + } + elsif ($macro eq 'AM_INIT_AUTOMAKE') + { + $seen_init_automake = $where; + if (defined $args[2]) + { + $package_version = $args[2]; + $package_version_location = $where; + } + elsif (defined $args[1]) + { + exit $exit_code + if (process_global_option_list ($where, + split (' ', $args[1]))); + } + } + elsif ($macro eq 'AM_MAINTAINER_MODE') + { + $seen_maint_mode = $where; + } + elsif ($macro eq 'AM_PROG_CC_C_O') + { + $seen_cc_c_o = $where; + } + elsif ($macro eq '_AM_SUBST_NOTMAKE') + { + $ignored_configure_vars{$args[1]} = $where; + } + elsif ($macro eq 'm4_include' + || $macro eq 'm4_sinclude' + || $macro eq 'sinclude') + { + # Skip missing `sinclude'd files. + next if $macro ne 'm4_include' && ! -f $args[1]; + + # Some modified versions of Autoconf don't use + # frozen files. Consequently it's possible that we see all + # m4_include's performed during Autoconf's startup. + # Obviously we don't want to distribute Autoconf's files + # so we skip absolute filenames here. + push @configure_deps, '$(top_srcdir)/' . $args[1] + unless $here =~ m,^(?:\w:)?[\\/],; + # Keep track of the greatest timestamp. + if (-e $args[1]) + { + my $mtime = mtime $args[1]; + $configure_deps_greatest_timestamp = $mtime + if $mtime > $configure_deps_greatest_timestamp; + } + } + elsif ($macro eq 'LT_SUPPORTED_TAG') + { + $libtool_tags{$args[1]} = 1; + $libtool_new_api = 1; + } + elsif ($macro eq '_LT_AC_TAGCONFIG') + { + # _LT_AC_TAGCONFIG is an old macro present in Libtool 1.5. + # We use it to detect whether tags are supported. Our + # preferred interface is LT_SUPPORTED_TAG, but it was + # introduced in Libtool 1.6. + if (0 == keys %libtool_tags) + { + # Hardcode the tags supported by Libtool 1.5. + %libtool_tags = (CC => 1, CXX => 1, GCJ => 1, F77 => 1); + } + } + } + + $tracefh->close; +} + + +# &scan_autoconf_files () +# ----------------------- +# Check whether we use `configure.ac' or `configure.in'. +# Scan it (and possibly `aclocal.m4') for interesting things. +# We must scan aclocal.m4 because there might be AC_SUBSTs and such there. +sub scan_autoconf_files () +{ + # Reinitialize libsources here. This isn't really necessary, + # since we currently assume there is only one configure.ac. But + # that won't always be the case. + %libsources = (); + + # Keep track of the youngest configure dependency. + $configure_deps_greatest_timestamp = mtime $configure_ac; + if (-e 'aclocal.m4') + { + my $mtime = mtime 'aclocal.m4'; + $configure_deps_greatest_timestamp = $mtime + if $mtime > $configure_deps_greatest_timestamp; + } + + scan_autoconf_traces ($configure_ac); + + @configure_input_files = sort keys %make_list; + # Set input and output files if not specified by user. + if (! @input_files) + { + @input_files = @configure_input_files; + %output_files = %make_list; + } + + + if (! $seen_init_automake) + { + err_ac ("no proper invocation of AM_INIT_AUTOMAKE was found.\nYou " + . "should verify that $configure_ac invokes AM_INIT_AUTOMAKE," + . "\nthat aclocal.m4 is present in the top-level directory,\n" + . "and that aclocal.m4 was recently regenerated " + . "(using aclocal)."); + } + else + { + if (! $seen_automake_version) + { + if (-f 'aclocal.m4') + { + error ($seen_init_automake, + "your implementation of AM_INIT_AUTOMAKE comes from " . + "an\nold Automake version. You should recreate " . + "aclocal.m4\nwith aclocal and run automake again.\n", + # $? = 63 is used to indicate version mismatch to missing. + exit_code => 63); + } + else + { + error ($seen_init_automake, + "no proper implementation of AM_INIT_AUTOMAKE was " . + "found,\nprobably because aclocal.m4 is missing...\n" . + "You should run aclocal to create this file, then\n" . + "run automake again.\n"); + } + } + } + + locate_aux_dir (); + + # Reorder @input_files so that the Makefile that distributes aux + # files is processed last. This is important because each directory + # can require auxiliary scripts and we should wait until they have + # been installed before distributing them. + + # The Makefile.in that distribute the aux files is the one in + # $config_aux_dir or the top-level Makefile. + my $auxdirdist = is_make_dir ($config_aux_dir) ? $config_aux_dir : '.'; + my @new_input_files = (); + while (@input_files) + { + my $in = pop @input_files; + my @ins = split (/:/, $output_files{$in}); + if (dirname ($ins[0]) eq $auxdirdist) + { + push @new_input_files, $in; + $automake_will_process_aux_dir = 1; + } + else + { + unshift @new_input_files, $in; + } + } + @input_files = @new_input_files; + + # If neither the auxdir/Makefile nor the ./Makefile are generated + # by Automake, we won't distribute the aux files anyway. Assume + # the user know what (s)he does, and pretend we will distribute + # them to disable the error in require_file_internal. + $automake_will_process_aux_dir = 1 if ! is_make_dir ($auxdirdist); + + # Look for some files we need. Always check for these. This + # check must be done for every run, even those where we are only + # looking at a subdir Makefile. We must set relative_dir for + # maybe_push_required_file to work. + $relative_dir = '.'; + foreach my $file (keys %required_aux_file) + { + require_conf_file ($required_aux_file{$file}->get, FOREIGN, $file) + } + err_am "`install.sh' is an anachronism; use `install-sh' instead" + if -f $config_aux_dir . '/install.sh'; + + # Preserve dist_common for later. + $configure_dist_common = variable_value ('DIST_COMMON') || ''; + +} + +################################################################ + +# Set up for Cygnus mode. +sub check_cygnus +{ + my $cygnus = option 'cygnus'; + return unless $cygnus; + + set_strictness ('foreign'); + set_option ('no-installinfo', $cygnus); + set_option ('no-dependencies', $cygnus); + set_option ('no-dist', $cygnus); + + err_ac "`AM_MAINTAINER_MODE' required when --cygnus specified" + if !$seen_maint_mode; +} + +# Do any extra checking for GNU standards. +sub check_gnu_standards +{ + if ($relative_dir eq '.') + { + # In top level (or only) directory. + require_file ("$am_file.am", GNU, + qw/INSTALL NEWS README AUTHORS ChangeLog/); + + # Accept one of these three licenses; default to COPYING. + # Make sure we do not overwrite an existing license. + my $license; + foreach (qw /COPYING COPYING.LIB COPYING.LESSER/) + { + if (-f $_) + { + $license = $_; + last; + } + } + require_file ("$am_file.am", GNU, 'COPYING') + unless $license; + } + + for my $opt ('no-installman', 'no-installinfo') + { + msg ('error-gnu', option $opt, + "option `$opt' disallowed by GNU standards") + if option $opt; + } +} + +# Do any extra checking for GNITS standards. +sub check_gnits_standards +{ + if ($relative_dir eq '.') + { + # In top level (or only) directory. + require_file ("$am_file.am", GNITS, 'THANKS'); + } +} + +################################################################ +# +# Functions to handle files of each language. + +# Each `lang_X_rewrite($DIRECTORY, $BASE, $EXT)' function follows a +# simple formula: Return value is LANG_SUBDIR if the resulting object +# file should be in a subdir if the source file is, LANG_PROCESS if +# file is to be dealt with, LANG_IGNORE otherwise. + +# Much of the actual processing is handled in +# handle_single_transform. These functions exist so that +# auxiliary information can be recorded for a later cleanup pass. +# Note that the calls to these functions are computed, so don't bother +# searching for their precise names in the source. + +# This is just a convenience function that can be used to determine +# when a subdir object should be used. +sub lang_sub_obj +{ + return option 'subdir-objects' ? LANG_SUBDIR : LANG_PROCESS; +} + +# Rewrite a single C source file. +sub lang_c_rewrite +{ + my ($directory, $base, $ext, $nonansi_obj, $have_per_exec_flags, $var) = @_; + + if (option 'ansi2knr' && $base =~ /_$/) + { + # FIXME: include line number in error. + err_am "C source file `$base.c' would be deleted by ansi2knr rules"; + } + + my $r = LANG_PROCESS; + if (option 'subdir-objects') + { + $r = LANG_SUBDIR; + if ($directory && $directory ne '.') + { + $base = $directory . '/' . $base; + + # libtool is always able to put the object at the proper place, + # so we do not have to require AM_PROG_CC_C_O when building .lo files. + msg_var ('portability', $var, + "compiling `$base.c' in subdir requires " + . "`AM_PROG_CC_C_O' in `$configure_ac'", + uniq_scope => US_GLOBAL, + uniq_part => 'AM_PROG_CC_C_O subdir') + unless $seen_cc_c_o || $nonansi_obj eq '.lo'; + } + + # In this case we already have the directory information, so + # don't add it again. + $de_ansi_files{$base} = ''; + } + else + { + $de_ansi_files{$base} = (($directory eq '.' || $directory eq '') + ? '' + : "$directory/"); + } + + if (! $seen_cc_c_o + && $have_per_exec_flags + && ! option 'subdir-objects' + && $nonansi_obj ne '.lo') + { + msg_var ('portability', + $var, "compiling `$base.c' with per-target flags requires " + . "`AM_PROG_CC_C_O' in `$configure_ac'", + uniq_scope => US_GLOBAL, + uniq_part => 'AM_PROG_CC_C_O per-target') + } + + return $r; +} + +# Rewrite a single C++ source file. +sub lang_cxx_rewrite +{ + return &lang_sub_obj; +} + +# Rewrite a single header file. +sub lang_header_rewrite +{ + # Header files are simply ignored. + return LANG_IGNORE; +} + +# Rewrite a single yacc file. +sub lang_yacc_rewrite +{ + my ($directory, $base, $ext) = @_; + + my $r = &lang_sub_obj; + (my $newext = $ext) =~ tr/y/c/; + return ($r, $newext); +} + +# Rewrite a single yacc++ file. +sub lang_yaccxx_rewrite +{ + my ($directory, $base, $ext) = @_; + + my $r = &lang_sub_obj; + (my $newext = $ext) =~ tr/y/c/; + return ($r, $newext); +} + +# Rewrite a single lex file. +sub lang_lex_rewrite +{ + my ($directory, $base, $ext) = @_; + + my $r = &lang_sub_obj; + (my $newext = $ext) =~ tr/l/c/; + return ($r, $newext); +} + +# Rewrite a single lex++ file. +sub lang_lexxx_rewrite +{ + my ($directory, $base, $ext) = @_; + + my $r = &lang_sub_obj; + (my $newext = $ext) =~ tr/l/c/; + return ($r, $newext); +} + +# Rewrite a single assembly file. +sub lang_asm_rewrite +{ + return &lang_sub_obj; +} + +# Rewrite a single preprocessed assembly file. +sub lang_cppasm_rewrite +{ + return &lang_sub_obj; +} + +# Rewrite a single Fortran 77 file. +sub lang_f77_rewrite +{ + return LANG_PROCESS; +} + +# Rewrite a single Fortran file. +sub lang_fc_rewrite +{ + return LANG_PROCESS; +} + +# Rewrite a single preprocessed Fortran file. +sub lang_ppfc_rewrite +{ + return LANG_PROCESS; +} + +# Rewrite a single preprocessed Fortran 77 file. +sub lang_ppf77_rewrite +{ + return LANG_PROCESS; +} + +# Rewrite a single ratfor file. +sub lang_ratfor_rewrite +{ + return LANG_PROCESS; +} + +# Rewrite a single Objective C file. +sub lang_objc_rewrite +{ + return &lang_sub_obj; +} + +# Rewrite a single Unified Parallel C file. +sub lang_upc_rewrite +{ + return &lang_sub_obj; +} + +# Rewrite a single Java file. +sub lang_java_rewrite +{ + return LANG_SUBDIR; +} + +# The lang_X_finish functions are called after all source file +# processing is done. Each should handle defining rules for the +# language, etc. A finish function is only called if a source file of +# the appropriate type has been seen. + +sub lang_c_finish +{ + # Push all libobjs files onto de_ansi_files. We actually only + # push files which exist in the current directory, and which are + # genuine source files. + foreach my $file (keys %libsources) + { + if ($file =~ /^(.*)\.[cly]$/ && -f "$relative_dir/$file") + { + $de_ansi_files{$1} = '' + } + } + + if (option 'ansi2knr' && keys %de_ansi_files) + { + # Make all _.c files depend on their corresponding .c files. + my @objects; + foreach my $base (sort keys %de_ansi_files) + { + # Each _.c file must depend on ansi2knr; otherwise it + # might be used in a parallel build before it is built. + # We need to support files in the srcdir and in the build + # dir (because these files might be auto-generated. But + # we can't use $< -- some makes only define $< during a + # suffix rule. + my $ansfile = $de_ansi_files{$base} . $base . '.c'; + $output_rules .= ($base . "_.c: $ansfile \$(ANSI2KNR)\n\t" + . '$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) ' + . '`if test -f $(srcdir)/' . $ansfile + . '; then echo $(srcdir)/' . $ansfile + . '; else echo ' . $ansfile . '; fi` ' + . "| sed 's/^# \\([0-9]\\)/#line \\1/' " + . '| $(ANSI2KNR) > $@' + # If ansi2knr fails then we shouldn't + # create the _.c file + . " || rm -f \$\@\n"); + push (@objects, $base . '_.$(OBJEXT)'); + push (@objects, $base . '_.lo') + if var ('LIBTOOL'); + + # Explicitly clean the _.c files if they are in a + # subdirectory. (In the current directory they get erased + # by a `rm -f *_.c' rule.) + $clean_files{$base . '_.c'} = MOSTLY_CLEAN + if dirname ($base) ne '.'; + } + + # Make all _.o (and _.lo) files depend on ansi2knr. + # Use a sneaky little hack to make it print nicely. + &pretty_print_rule ('', '', @objects, ':', '$(ANSI2KNR)'); + } +} + +# This is a yacc helper which is called whenever we have decided to +# compile a yacc file. +sub lang_yacc_target_hook +{ + my ($self, $aggregate, $output, $input, %transform) = @_; + + my $flag = $aggregate . "_YFLAGS"; + my $flagvar = var $flag; + my $YFLAGSvar = var 'YFLAGS'; + if (($flagvar && $flagvar->variable_value =~ /$DASH_D_PATTERN/o) + || ($YFLAGSvar && $YFLAGSvar->variable_value =~ /$DASH_D_PATTERN/o)) + { + (my $output_base = $output) =~ s/$KNOWN_EXTENSIONS_PATTERN$//; + my $header = $output_base . '.h'; + + # Found a `-d' that applies to the compilation of this file. + # Add a dependency for the generated header file, and arrange + # for that file to be included in the distribution. + foreach my $cond (Automake::Rule::define (${header}, 'internal', + RULE_AUTOMAKE, TRUE, + INTERNAL)) + { + my $condstr = $cond->subst_string; + $output_rules .= + "$condstr${header}: $output\n" + # Recover from removal of $header + . "$condstr\t\@if test ! -f \$@; then \\\n" + . "$condstr\t rm -f $output; \\\n" + . "$condstr\t \$(MAKE) \$(AM_MAKEFLAGS) $output; \\\n" + . "$condstr\telse :; fi\n"; + } + # Distribute the generated file, unless its .y source was + # listed in a nodist_ variable. (&handle_source_transform + # will set DIST_SOURCE.) + &push_dist_common ($header) + if $transform{'DIST_SOURCE'}; + + # If the files are built in the build directory, then we want + # to remove them with `make clean'. If they are in srcdir + # they shouldn't be touched. However, we can't determine this + # statically, and the GNU rules say that yacc/lex output files + # should be removed by maintainer-clean. So that's what we + # do. + $clean_files{$header} = MAINTAINER_CLEAN; + } + # Erase $OUTPUT on `make maintainer-clean' (by GNU standards). + # See the comment above for $HEADER. + $clean_files{$output} = MAINTAINER_CLEAN; +} + +# This is a lex helper which is called whenever we have decided to +# compile a lex file. +sub lang_lex_target_hook +{ + my ($self, $aggregate, $output, $input) = @_; + # If the files are built in the build directory, then we want to + # remove them with `make clean'. If they are in srcdir they + # shouldn't be touched. However, we can't determine this + # statically, and the GNU rules say that yacc/lex output files + # should be removed by maintainer-clean. So that's what we do. + $clean_files{$output} = MAINTAINER_CLEAN; +} + +# This is a helper for both lex and yacc. +sub yacc_lex_finish_helper +{ + return if defined $language_scratch{'lex-yacc-done'}; + $language_scratch{'lex-yacc-done'} = 1; + + # FIXME: for now, no line number. + require_conf_file ($configure_ac, FOREIGN, 'ylwrap'); + &define_variable ('YLWRAP', "$am_config_aux_dir/ylwrap", INTERNAL); +} + +sub lang_yacc_finish +{ + return if defined $language_scratch{'yacc-done'}; + $language_scratch{'yacc-done'} = 1; + + reject_var 'YACCFLAGS', "`YACCFLAGS' obsolete; use `YFLAGS' instead"; + + yacc_lex_finish_helper; +} + + +sub lang_lex_finish +{ + return if defined $language_scratch{'lex-done'}; + $language_scratch{'lex-done'} = 1; + + yacc_lex_finish_helper; +} + + +# Given a hash table of linker names, pick the name that has the most +# precedence. This is lame, but something has to have global +# knowledge in order to eliminate the conflict. Add more linkers as +# required. +sub resolve_linker +{ + my (%linkers) = @_; + + foreach my $l (qw(GCJLINK CXXLINK F77LINK FCLINK OBJCLINK UPCLINK)) + { + return $l if defined $linkers{$l}; + } + return 'LINK'; +} + +# Called to indicate that an extension was used. +sub saw_extension +{ + my ($ext) = @_; + if (! defined $extension_seen{$ext}) + { + $extension_seen{$ext} = 1; + } + else + { + ++$extension_seen{$ext}; + } +} + +# Return the number of files seen for a given language. Knows about +# special cases we care about. FIXME: this is hideous. We need +# something that involves real language objects. For instance yacc +# and yaccxx could both derive from a common yacc class which would +# know about the strange ylwrap requirement. (Or better yet we could +# just not support legacy yacc!) +sub count_files_for_language +{ + my ($name) = @_; + + my @names; + if ($name eq 'yacc' || $name eq 'yaccxx') + { + @names = ('yacc', 'yaccxx'); + } + elsif ($name eq 'lex' || $name eq 'lexxx') + { + @names = ('lex', 'lexxx'); + } + else + { + @names = ($name); + } + + my $r = 0; + foreach $name (@names) + { + my $lang = $languages{$name}; + foreach my $ext (@{$lang->extensions}) + { + $r += $extension_seen{$ext} + if defined $extension_seen{$ext}; + } + } + + return $r +} + +# Called to ask whether source files have been seen . If HEADERS is 1, +# headers can be included. +sub saw_sources_p +{ + my ($headers) = @_; + + # count all the sources + my $count = 0; + foreach my $val (values %extension_seen) + { + $count += $val; + } + + if (!$headers) + { + $count -= count_files_for_language ('header'); + } + + return $count > 0; +} + + +# register_language (%ATTRIBUTE) +# ------------------------------ +# Register a single language. +# Each %ATTRIBUTE is of the form ATTRIBUTE => VALUE. +sub register_language (%) +{ + my (%option) = @_; + + # Set the defaults. + $option{'ansi'} = 0 + unless defined $option{'ansi'}; + $option{'autodep'} = 'no' + unless defined $option{'autodep'}; + $option{'linker'} = '' + unless defined $option{'linker'}; + $option{'flags'} = [] + unless defined $option{'flags'}; + $option{'output_extensions'} = sub { return ( '.$(OBJEXT)', '.lo' ) } + unless defined $option{'output_extensions'}; + $option{'nodist_specific'} = 0 + unless defined $option{'nodist_specific'}; + + my $lang = new Language (%option); + + # Fill indexes. + $extension_map{$_} = $lang->name foreach @{$lang->extensions}; + $languages{$lang->name} = $lang; + my $link = $lang->linker; + if ($link) + { + if (exists $link_languages{$link}) + { + prog_error ("`$link' has different definitions in " + . $lang->name . " and " . $link_languages{$link}->name) + if $lang->link ne $link_languages{$link}->link; + } + else + { + $link_languages{$link} = $lang; + } + } + + # Update the pattern of known extensions. + accept_extensions (@{$lang->extensions}); + + # Upate the $suffix_rule map. + foreach my $suffix (@{$lang->extensions}) + { + foreach my $dest (&{$lang->output_extensions} ($suffix)) + { + register_suffix_rule (INTERNAL, $suffix, $dest); + } + } +} + +# derive_suffix ($EXT, $OBJ) +# -------------------------- +# This function is used to find a path from a user-specified suffix $EXT +# to $OBJ or to some other suffix we recognize internally, e.g. `cc'. +sub derive_suffix ($$) +{ + my ($source_ext, $obj) = @_; + + while (! $extension_map{$source_ext} + && $source_ext ne $obj + && exists $suffix_rules->{$source_ext} + && exists $suffix_rules->{$source_ext}{$obj}) + { + $source_ext = $suffix_rules->{$source_ext}{$obj}[0]; + } + + return $source_ext; +} + + +################################################################ + +# Pretty-print something and append to output_rules. +sub pretty_print_rule +{ + $output_rules .= &makefile_wrap (@_); +} + + +################################################################ + + +## -------------------------------- ## +## Handling the conditional stack. ## +## -------------------------------- ## + + +# $STRING +# make_conditional_string ($NEGATE, $COND) +# ---------------------------------------- +sub make_conditional_string ($$) +{ + my ($negate, $cond) = @_; + $cond = "${cond}_TRUE" + unless $cond =~ /^TRUE|FALSE$/; + $cond = Automake::Condition::conditional_negate ($cond) + if $negate; + return $cond; +} + + +my %_am_macro_for_cond = + ( + AMDEP => "one of the compiler tests\n" + . " AC_PROG_CC, AC_PROG_CXX, AC_PROG_CXX, AC_PROG_OBJC,\n" + . " AM_PROG_AS, AM_PROG_GCJ, AM_PROG_UPC", + am__fastdepCC => 'AC_PROG_CC', + am__fastdepCCAS => 'AM_PROG_AS', + am__fastdepCXX => 'AC_PROG_CXX', + am__fastdepGCJ => 'AM_PROG_GCJ', + am__fastdepOBJC => 'AC_PROG_OBJC', + am__fastdepUPC => 'AM_PROG_UPC' + ); + +# $COND +# cond_stack_if ($NEGATE, $COND, $WHERE) +# -------------------------------------- +sub cond_stack_if ($$$) +{ + my ($negate, $cond, $where) = @_; + + if (! $configure_cond{$cond} && $cond !~ /^TRUE|FALSE$/) + { + my $text = "$cond does not appear in AM_CONDITIONAL"; + my $scope = US_LOCAL; + if (exists $_am_macro_for_cond{$cond}) + { + my $mac = $_am_macro_for_cond{$cond}; + $text .= "\n The usual way to define `$cond' is to add "; + $text .= ($mac =~ / /) ? $mac : "`$mac'"; + $text .= "\n to `$configure_ac' and run `aclocal' and `autoconf' again."; + # These warnings appear in Automake files (depend2.am), + # so there is no need to display them more than once: + $scope = US_GLOBAL; + } + error $where, $text, uniq_scope => $scope; + } + + push (@cond_stack, make_conditional_string ($negate, $cond)); + + return new Automake::Condition (@cond_stack); +} + + +# $COND +# cond_stack_else ($NEGATE, $COND, $WHERE) +# ---------------------------------------- +sub cond_stack_else ($$$) +{ + my ($negate, $cond, $where) = @_; + + if (! @cond_stack) + { + error $where, "else without if"; + return FALSE; + } + + $cond_stack[$#cond_stack] = + Automake::Condition::conditional_negate ($cond_stack[$#cond_stack]); + + # If $COND is given, check against it. + if (defined $cond) + { + $cond = make_conditional_string ($negate, $cond); + + error ($where, "else reminder ($negate$cond) incompatible with " + . "current conditional: $cond_stack[$#cond_stack]") + if $cond_stack[$#cond_stack] ne $cond; + } + + return new Automake::Condition (@cond_stack); +} + + +# $COND +# cond_stack_endif ($NEGATE, $COND, $WHERE) +# ----------------------------------------- +sub cond_stack_endif ($$$) +{ + my ($negate, $cond, $where) = @_; + my $old_cond; + + if (! @cond_stack) + { + error $where, "endif without if"; + return TRUE; + } + + # If $COND is given, check against it. + if (defined $cond) + { + $cond = make_conditional_string ($negate, $cond); + + error ($where, "endif reminder ($negate$cond) incompatible with " + . "current conditional: $cond_stack[$#cond_stack]") + if $cond_stack[$#cond_stack] ne $cond; + } + + pop @cond_stack; + + return new Automake::Condition (@cond_stack); +} + + + + + +## ------------------------ ## +## Handling the variables. ## +## ------------------------ ## + + +# &define_pretty_variable ($VAR, $COND, $WHERE, @VALUE) +# ----------------------------------------------------- +# Like define_variable, but the value is a list, and the variable may +# be defined conditionally. The second argument is the Condition +# under which the value should be defined; this should be the empty +# string to define the variable unconditionally. The third argument +# is a list holding the values to use for the variable. The value is +# pretty printed in the output file. +sub define_pretty_variable ($$$@) +{ + my ($var, $cond, $where, @value) = @_; + + if (! vardef ($var, $cond)) + { + Automake::Variable::define ($var, VAR_AUTOMAKE, '', $cond, "@value", + '', $where, VAR_PRETTY); + rvar ($var)->rdef ($cond)->set_seen; + } +} + + +# define_variable ($VAR, $VALUE, $WHERE) +# -------------------------------------- +# Define a new Automake Makefile variable VAR to VALUE, but only if +# not already defined. +sub define_variable ($$$) +{ + my ($var, $value, $where) = @_; + define_pretty_variable ($var, TRUE, $where, $value); +} + + +# define_files_variable ($VAR, \@BASENAME, $EXTENSION, $WHERE) +# ----------------------------------------------------------- +# Define the $VAR which content is the list of file names composed of +# a @BASENAME and the $EXTENSION. +sub define_files_variable ($\@$$) +{ + my ($var, $basename, $extension, $where) = @_; + define_variable ($var, + join (' ', map { "$_.$extension" } @$basename), + $where); +} + + +# Like define_variable, but define a variable to be the configure +# substitution by the same name. +sub define_configure_variable ($) +{ + my ($var) = @_; + + my $pretty = VAR_ASIS; + my $owner = VAR_CONFIGURE; + + # Some variables we do not want to output. For instance it + # would be a bad idea to output `U = @U@` when `@U@` can be + # substituted as `\`. + $pretty = VAR_SILENT if exists $ignored_configure_vars{$var}; + + # ANSI2KNR is a variable that Automake wants to redefine, so + # it must be owned by Automake. (It is also used as a proof + # that AM_C_PROTOTYPES has been run, that's why we do not simply + # omit the AC_SUBST.) + $owner = VAR_AUTOMAKE if $var eq 'ANSI2KNR'; + + Automake::Variable::define ($var, $owner, '', TRUE, subst $var, + '', $configure_vars{$var}, $pretty); +} + + +# define_compiler_variable ($LANG) +# -------------------------------- +# Define a compiler variable. We also handle defining the `LT' +# version of the command when using libtool. +sub define_compiler_variable ($) +{ + my ($lang) = @_; + + my ($var, $value) = ($lang->compiler, $lang->compile); + my $libtool_tag = ''; + $libtool_tag = '--tag=' . $lang->libtool_tag . ' ' + if $lang->libtool_tag && exists $libtool_tags{$lang->libtool_tag}; + &define_variable ($var, $value, INTERNAL); + &define_variable ("LT$var", + "\$(LIBTOOL) $libtool_tag\$(AM_LIBTOOLFLAGS) " + . "\$(LIBTOOLFLAGS) --mode=compile $value", + INTERNAL) + if var ('LIBTOOL'); +} + + +# define_linker_variable ($LANG) +# ------------------------------ +# Define linker variables. +sub define_linker_variable ($) +{ + my ($lang) = @_; + + my $libtool_tag = ''; + $libtool_tag = '--tag=' . $lang->libtool_tag . ' ' + if $lang->libtool_tag && exists $libtool_tags{$lang->libtool_tag}; + # CCLD = $(CC). + &define_variable ($lang->lder, $lang->ld, INTERNAL); + # CCLINK = $(CCLD) blah blah... + &define_variable ($lang->linker, + ((var ('LIBTOOL') ? + "\$(LIBTOOL) $libtool_tag\$(AM_LIBTOOLFLAGS) " + . "\$(LIBTOOLFLAGS) --mode=link " : '') + . $lang->link), + INTERNAL); +} + +sub define_per_target_linker_variable ($$) +{ + my ($linker, $target) = @_; + + # If the user wrote a custom link command, we don't define ours. + return "${target}_LINK" + if set_seen "${target}_LINK"; + + my $xlink = $linker ? $linker : 'LINK'; + + my $lang = $link_languages{$xlink}; + prog_error "Unknown language for linker variable `$xlink'" + unless $lang; + + my $link_command = $lang->link; + if (var 'LIBTOOL') + { + my $libtool_tag = ''; + $libtool_tag = '--tag=' . $lang->libtool_tag . ' ' + if $lang->libtool_tag && exists $libtool_tags{$lang->libtool_tag}; + + $link_command = + "\$(LIBTOOL) $libtool_tag\$(AM_LIBTOOLFLAGS) \$(LIBTOOLFLAGS) " + . "--mode=link " . $link_command; + } + + # Rewrite each occurrence of `AM_$flag' in the link + # command into `${derived}_$flag' if it exists. + my $orig_command = $link_command; + my @flags = (@{$lang->flags}, 'LDFLAGS'); + push @flags, 'LIBTOOLFLAGS' if var 'LIBTOOL'; + for my $flag (@flags) + { + my $val = "${target}_$flag"; + $link_command =~ s/\(AM_$flag\)/\($val\)/ + if set_seen ($val); + } + + # If the computed command is the same as the generic command, use + # the command linker variable. + return $lang->linker + if $link_command eq $orig_command; + + &define_variable ("${target}_LINK", $link_command, INTERNAL); + return "${target}_LINK"; +} + +################################################################ + +# &check_trailing_slash ($WHERE, $LINE) +# -------------------------------------- +# Return 1 iff $LINE ends with a slash. +# Might modify $LINE. +sub check_trailing_slash ($\$) +{ + my ($where, $line) = @_; + + # Ignore `##' lines. + return 0 if $$line =~ /$IGNORE_PATTERN/o; + + # Catch and fix a common error. + msg "syntax", $where, "whitespace following trailing backslash" + if $$line =~ s/\\\s+\n$/\\\n/; + + return $$line =~ /\\$/; +} + + +# &read_am_file ($AMFILE, $WHERE) +# ------------------------------- +# Read Makefile.am and set up %contents. Simultaneously copy lines +# from Makefile.am into $output_trailer, or define variables as +# appropriate. NOTE we put rules in the trailer section. We want +# user rules to come after our generated stuff. +sub read_am_file ($$) +{ + my ($amfile, $where) = @_; + + my $am_file = new Automake::XFile ("< $amfile"); + verb "reading $amfile"; + + # Keep track of the youngest output dependency. + my $mtime = mtime $amfile; + $output_deps_greatest_timestamp = $mtime + if $mtime > $output_deps_greatest_timestamp; + + my $spacing = ''; + my $comment = ''; + my $blank = 0; + my $saw_bk = 0; + my $var_look = VAR_ASIS; + + use constant IN_VAR_DEF => 0; + use constant IN_RULE_DEF => 1; + use constant IN_COMMENT => 2; + my $prev_state = IN_RULE_DEF; + + while ($_ = $am_file->getline) + { + $where->set ("$amfile:$."); + if (/$IGNORE_PATTERN/o) + { + # Merely delete comments beginning with two hashes. + } + elsif (/$WHITE_PATTERN/o) + { + error $where, "blank line following trailing backslash" + if $saw_bk; + # Stick a single white line before the incoming macro or rule. + $spacing = "\n"; + $blank = 1; + # Flush all comments seen so far. + if ($comment ne '') + { + $output_vars .= $comment; + $comment = ''; + } + } + elsif (/$COMMENT_PATTERN/o) + { + # Stick comments before the incoming macro or rule. Make + # sure a blank line precedes the first block of comments. + $spacing = "\n" unless $blank; + $blank = 1; + $comment .= $spacing . $_; + $spacing = ''; + $prev_state = IN_COMMENT; + } + else + { + last; + } + $saw_bk = check_trailing_slash ($where, $_); + } + + # We save the conditional stack on entry, and then check to make + # sure it is the same on exit. This lets us conditionally include + # other files. + my @saved_cond_stack = @cond_stack; + my $cond = new Automake::Condition (@cond_stack); + + my $last_var_name = ''; + my $last_var_type = ''; + my $last_var_value = ''; + my $last_where; + # FIXME: shouldn't use $_ in this loop; it is too big. + while ($_) + { + $where->set ("$amfile:$."); + + # Make sure the line is \n-terminated. + chomp; + $_ .= "\n"; + + # Don't look at MAINTAINER_MODE_TRUE here. That shouldn't be + # used by users. @MAINT@ is an anachronism now. + $_ =~ s/\@MAINT\@//g + unless $seen_maint_mode; + + my $new_saw_bk = check_trailing_slash ($where, $_); + + if (/$IGNORE_PATTERN/o) + { + # Merely delete comments beginning with two hashes. + + # Keep any backslash from the previous line. + $new_saw_bk = $saw_bk; + } + elsif (/$WHITE_PATTERN/o) + { + # Stick a single white line before the incoming macro or rule. + $spacing = "\n"; + error $where, "blank line following trailing backslash" + if $saw_bk; + } + elsif (/$COMMENT_PATTERN/o) + { + error $where, "comment following trailing backslash" + if $saw_bk && $comment eq ''; + + # Stick comments before the incoming macro or rule. + $comment .= $spacing . $_; + $spacing = ''; + $prev_state = IN_COMMENT; + } + elsif ($saw_bk) + { + if ($prev_state == IN_RULE_DEF) + { + my $cond = new Automake::Condition @cond_stack; + $output_trailer .= $cond->subst_string; + $output_trailer .= $_; + } + elsif ($prev_state == IN_COMMENT) + { + # If the line doesn't start with a `#', add it. + # We do this because a continued comment like + # # A = foo \ + # bar \ + # baz + # is not portable. BSD make doesn't honor + # escaped newlines in comments. + s/^#?/#/; + $comment .= $spacing . $_; + } + else # $prev_state == IN_VAR_DEF + { + $last_var_value .= ' ' + unless $last_var_value =~ /\s$/; + $last_var_value .= $_; + + if (!/\\$/) + { + Automake::Variable::define ($last_var_name, VAR_MAKEFILE, + $last_var_type, $cond, + $last_var_value, $comment, + $last_where, VAR_ASIS) + if $cond != FALSE; + $comment = $spacing = ''; + } + } + } + + elsif (/$IF_PATTERN/o) + { + $cond = cond_stack_if ($1, $2, $where); + } + elsif (/$ELSE_PATTERN/o) + { + $cond = cond_stack_else ($1, $2, $where); + } + elsif (/$ENDIF_PATTERN/o) + { + $cond = cond_stack_endif ($1, $2, $where); + } + + elsif (/$RULE_PATTERN/o) + { + # Found a rule. + $prev_state = IN_RULE_DEF; + + # For now we have to output all definitions of user rules + # and can't diagnose duplicates (see the comment in + # Automake::Rule::define). So we go on and ignore the return value. + Automake::Rule::define ($1, $amfile, RULE_USER, $cond, $where); + + check_variable_expansions ($_, $where); + + $output_trailer .= $comment . $spacing; + my $cond = new Automake::Condition @cond_stack; + $output_trailer .= $cond->subst_string; + $output_trailer .= $_; + $comment = $spacing = ''; + } + elsif (/$ASSIGNMENT_PATTERN/o) + { + # Found a macro definition. + $prev_state = IN_VAR_DEF; + $last_var_name = $1; + $last_var_type = $2; + $last_var_value = $3; + $last_where = $where->clone; + if ($3 ne '' && substr ($3, -1) eq "\\") + { + # We preserve the `\' because otherwise the long lines + # that are generated will be truncated by broken + # `sed's. + $last_var_value = $3 . "\n"; + } + # Normally we try to output variable definitions in the + # same format they were input. However, POSIX compliant + # systems are not required to support lines longer than + # 2048 bytes (most notably, some sed implementation are + # limited to 4000 bytes, and sed is used by config.status + # to rewrite Makefile.in into Makefile). Moreover nobody + # would really write such long lines by hand since it is + # hardly maintainable. So if a line is longer that 1000 + # bytes (an arbitrary limit), assume it has been + # automatically generated by some tools, and flatten the + # variable definition. Otherwise, keep the variable as it + # as been input. + $var_look = VAR_PRETTY if length ($last_var_value) >= 1000; + + if (!/\\$/) + { + Automake::Variable::define ($last_var_name, VAR_MAKEFILE, + $last_var_type, $cond, + $last_var_value, $comment, + $last_where, $var_look) + if $cond != FALSE; + $comment = $spacing = ''; + $var_look = VAR_ASIS; + } + } + elsif (/$INCLUDE_PATTERN/o) + { + my $path = $1; + + if ($path =~ s/^\$\(top_srcdir\)\///) + { + push (@include_stack, "\$\(top_srcdir\)/$path"); + # Distribute any included file. + + # Always use the $(top_srcdir) prefix in DIST_COMMON, + # otherwise OSF make will implicitly copy the included + # file in the build tree during `make distdir' to satisfy + # the dependency. + # (subdircond2.test and subdircond3.test will fail.) + push_dist_common ("\$\(top_srcdir\)/$path"); + } + else + { + $path =~ s/\$\(srcdir\)\///; + push (@include_stack, "\$\(srcdir\)/$path"); + # Always use the $(srcdir) prefix in DIST_COMMON, + # otherwise OSF make will implicitly copy the included + # file in the build tree during `make distdir' to satisfy + # the dependency. + # (subdircond2.test and subdircond3.test will fail.) + push_dist_common ("\$\(srcdir\)/$path"); + $path = $relative_dir . "/" . $path if $relative_dir ne '.'; + } + $where->push_context ("`$path' included from here"); + &read_am_file ($path, $where); + $where->pop_context; + } + else + { + # This isn't an error; it is probably a continued rule. + # In fact, this is what we assume. + $prev_state = IN_RULE_DEF; + check_variable_expansions ($_, $where); + $output_trailer .= $comment . $spacing; + my $cond = new Automake::Condition @cond_stack; + $output_trailer .= $cond->subst_string; + $output_trailer .= $_; + $comment = $spacing = ''; + error $where, "`#' comment at start of rule is unportable" + if $_ =~ /^\t\s*\#/; + } + + $saw_bk = $new_saw_bk; + $_ = $am_file->getline; + } + + $output_trailer .= $comment; + + error ($where, "trailing backslash on last line") + if $saw_bk; + + error ($where, (@cond_stack ? "unterminated conditionals: @cond_stack" + : "too many conditionals closed in include file")) + if "@saved_cond_stack" ne "@cond_stack"; +} + + +# define_standard_variables () +# ---------------------------- +# A helper for read_main_am_file which initializes configure variables +# and variables from header-vars.am. +sub define_standard_variables +{ + my $saved_output_vars = $output_vars; + my ($comments, undef, $rules) = + file_contents_internal (1, "$libdir/am/header-vars.am", + new Automake::Location); + + foreach my $var (sort keys %configure_vars) + { + &define_configure_variable ($var); + } + + $output_vars .= $comments . $rules; +} + +# Read main am file. +sub read_main_am_file +{ + my ($amfile) = @_; + + # This supports the strange variable tricks we are about to play. + prog_error (macros_dump () . "variable defined before read_main_am_file") + if (scalar (variables) > 0); + + # Generate copyright header for generated Makefile.in. + # We do discard the output of predefined variables, handled below. + $output_vars = ("# $in_file_name generated by automake " + . $VERSION . " from $am_file_name.\n"); + $output_vars .= '# ' . subst ('configure_input') . "\n"; + $output_vars .= $gen_copyright; + + # We want to predefine as many variables as possible. This lets + # the user set them with `+=' in Makefile.am. + &define_standard_variables; + + # Read user file, which might override some of our values. + &read_am_file ($amfile, new Automake::Location); +} + + + +################################################################ + +# $FLATTENED +# &flatten ($STRING) +# ------------------ +# Flatten the $STRING and return the result. +sub flatten +{ + $_ = shift; + + s/\\\n//somg; + s/\s+/ /g; + s/^ //; + s/ $//; + + return $_; +} + +# transform($TOKEN, \%PAIRS) +# ========================== +# If ($TOKEN, $VAL) is in %PAIRS: +# - replaces %$TOKEN% with $VAL, +# - enables/disables ?$TOKEN? and ?!$TOKEN?, +# - replaces %?$TOKEN% with TRUE or FALSE. +sub transform($$) +{ + my ($token, $transform) = @_; + + if (substr ($token, 0, 1) eq '%') + { + my $cond = (substr ($token, 1, 1) eq '?') ? 1 : 0; + $token = substr ($token, 1 + $cond, -1); + my $val = $transform->{$token}; + prog_error "Unknown %token% `$token'" unless defined $val; + if ($cond) + { + return $val ? 'TRUE' : 'FALSE'; + } + else + { + return $val; + } + } + # Now $token is '?xxx?' or '?!xxx?'. + my $neg = (substr ($token, 1, 1) eq '!') ? 1 : 0; + $token = substr ($token, 1 + $neg, -1); + my $val = $transform->{$token}; + prog_error "Unknown ?token? `$token' (neg = $neg)" unless defined $val; + return (!!$val == $neg) ? '##%' : ''; +} + +# @PARAGRAPHS +# &make_paragraphs ($MAKEFILE, [%TRANSFORM]) +# ------------------------------------------ +# Load a $MAKEFILE, apply the %TRANSFORM, and return it as a list of +# paragraphs. +sub make_paragraphs ($%) +{ + my ($file, %transform) = @_; + + # Complete %transform with global options. + # Note that %transform goes last, so it overrides global options. + %transform = ('CYGNUS' => !! option 'cygnus', + 'MAINTAINER-MODE' + => $seen_maint_mode ? subst ('MAINTAINER_MODE_TRUE') : '', + + 'BZIP2' => !! option 'dist-bzip2', + 'COMPRESS' => !! option 'dist-tarZ', + 'GZIP' => ! option 'no-dist-gzip', + 'SHAR' => !! option 'dist-shar', + 'ZIP' => !! option 'dist-zip', + + 'INSTALL-INFO' => ! option 'no-installinfo', + 'INSTALL-MAN' => ! option 'no-installman', + 'CK-NEWS' => !! option 'check-news', + + 'SUBDIRS' => !! var ('SUBDIRS'), + 'TOPDIR_P' => $relative_dir eq '.', + + 'BUILD' => ($seen_canonical >= AC_CANONICAL_BUILD), + 'HOST' => ($seen_canonical >= AC_CANONICAL_HOST), + 'TARGET' => ($seen_canonical >= AC_CANONICAL_TARGET), + + 'LIBTOOL' => !! var ('LIBTOOL'), + 'NONLIBTOOL' => 1, + 'FIRST' => ! $transformed_files{$file}, + %transform); + + $transformed_files{$file} = 1; + $_ = $am_file_cache{$file}; + + if (! defined $_) + { + verb "reading $file"; + # Swallow the whole file. + my $fc_file = new Automake::XFile "< $file"; + my $saved_dollar_slash = $/; + undef $/; + $_ = $fc_file->getline; + $/ = $saved_dollar_slash; + $fc_file->close; + + # Remove ##-comments. + # Besides we don't need more than two consecutive new-lines. + s/(?:$IGNORE_PATTERN|(?<=\n\n)\n+)//gom; + + $am_file_cache{$file} = $_; + } + + # Substitute Automake template tokens. + s/(?:%\??[\w\-]+%|\?!?[\w\-]+\?)/transform($&, \%transform)/ge; + # transform() may have added some ##%-comments to strip. + # (we use `##%' instead of `##' so we can distinguish ##%##%##% from + # ####### and do not remove the latter.) + s/^[ \t]*(?:##%)+.*\n//gm; + + # Split at unescaped new lines. + my @lines = split (/(?set ($file); + + my $result_vars = ''; + my $result_rules = ''; + my $comment = ''; + my $spacing = ''; + + # The following flags are used to track rules spanning across + # multiple paragraphs. + my $is_rule = 0; # 1 if we are processing a rule. + my $discard_rule = 0; # 1 if the current rule should not be output. + + # We save the conditional stack on entry, and then check to make + # sure it is the same on exit. This lets us conditionally include + # other files. + my @saved_cond_stack = @cond_stack; + my $cond = new Automake::Condition (@cond_stack); + + foreach (make_paragraphs ($file, %transform)) + { + # FIXME: no line number available. + $where->set ($file); + + # Sanity checks. + error $where, "blank line following trailing backslash:\n$_" + if /\\$/; + error $where, "comment following trailing backslash:\n$_" + if /\\#/; + + if (/^$/) + { + $is_rule = 0; + # Stick empty line before the incoming macro or rule. + $spacing = "\n"; + } + elsif (/$COMMENT_PATTERN/mso) + { + $is_rule = 0; + # Stick comments before the incoming macro or rule. + $comment = "$_\n"; + } + + # Handle inclusion of other files. + elsif (/$INCLUDE_PATTERN/o) + { + if ($cond != FALSE) + { + my $file = ($is_am ? "$libdir/am/" : '') . $1; + $where->push_context ("`$file' included from here"); + # N-ary `.=' fails. + my ($com, $vars, $rules) + = file_contents_internal ($is_am, $file, $where, %transform); + $where->pop_context; + $comment .= $com; + $result_vars .= $vars; + $result_rules .= $rules; + } + } + + # Handling the conditionals. + elsif (/$IF_PATTERN/o) + { + $cond = cond_stack_if ($1, $2, $file); + } + elsif (/$ELSE_PATTERN/o) + { + $cond = cond_stack_else ($1, $2, $file); + } + elsif (/$ENDIF_PATTERN/o) + { + $cond = cond_stack_endif ($1, $2, $file); + } + + # Handling rules. + elsif (/$RULE_PATTERN/mso) + { + $is_rule = 1; + $discard_rule = 0; + # Separate relationship from optional actions: the first + # `new-line tab" not preceded by backslash (continuation + # line). + my $paragraph = $_; + /^(.*?)(?:(?subst_string/gme; + $result_rules .= "$spacing$comment$condparagraph\n"; + } + if (scalar @undefined_conds == 0) + { + # Remember to discard next paragraphs + # if they belong to this rule. + # (but see also FIXME: #2 above.) + $discard_rule = 1; + } + $comment = $spacing = ''; + last; + } + } + } + + elsif (/$ASSIGNMENT_PATTERN/mso) + { + my ($var, $type, $val) = ($1, $2, $3); + error $where, "variable `$var' with trailing backslash" + if /\\$/; + + $is_rule = 0; + + Automake::Variable::define ($var, + $is_am ? VAR_AUTOMAKE : VAR_MAKEFILE, + $type, $cond, $val, $comment, $where, + VAR_ASIS) + if $cond != FALSE; + + $comment = $spacing = ''; + } + else + { + # This isn't an error; it is probably some tokens which + # configure is supposed to replace, such as `@SET-MAKE@', + # or some part of a rule cut by an if/endif. + if (! $cond->false && ! ($is_rule && $discard_rule)) + { + s/^/$cond->subst_string/gme; + $result_rules .= "$spacing$comment$_\n"; + } + $comment = $spacing = ''; + } + } + + error ($where, @cond_stack ? + "unterminated conditionals: @cond_stack" : + "too many conditionals closed in include file") + if "@saved_cond_stack" ne "@cond_stack"; + + return ($comment, $result_vars, $result_rules); +} + + +# $CONTENTS +# &file_contents ($BASENAME, $WHERE, [%TRANSFORM]) +# ------------------------------------------------ +# Return contents of a file from $libdir/am, automatically skipping +# macros or rules which are already known. +sub file_contents ($$%) +{ + my ($basename, $where, %transform) = @_; + my ($comments, $variables, $rules) = + file_contents_internal (1, "$libdir/am/$basename.am", $where, + %transform); + return "$comments$variables$rules"; +} + + +# @PREFIX +# &am_primary_prefixes ($PRIMARY, $CAN_DIST, @PREFIXES) +# ----------------------------------------------------- +# Find all variable prefixes that are used for install directories. A +# prefix `zar' qualifies iff: +# +# * `zardir' is a variable. +# * `zar_PRIMARY' is a variable. +# +# As a side effect, it looks for misspellings. It is an error to have +# a variable ending in a "reserved" suffix whose prefix is unknown, e.g. +# "bin_PROGRAMS". However, unusual prefixes are allowed if a variable +# of the same name (with "dir" appended) exists. For instance, if the +# variable "zardir" is defined, then "zar_PROGRAMS" becomes valid. +# This is to provide a little extra flexibility in those cases which +# need it. +sub am_primary_prefixes ($$@) +{ + my ($primary, $can_dist, @prefixes) = @_; + + local $_; + my %valid = map { $_ => 0 } @prefixes; + $valid{'EXTRA'} = 0; + foreach my $var (variables $primary) + { + # Automake is allowed to define variables that look like primaries + # but which aren't. E.g. INSTALL_sh_DATA. + # Autoconf can also define variables like INSTALL_DATA, so + # ignore all configure variables (at least those which are not + # redefined in Makefile.am). + # FIXME: We should make sure that these variables are not + # conditionally defined (or else adjust the condition below). + my $def = $var->def (TRUE); + next if $def && $def->owner != VAR_MAKEFILE; + + my $varname = $var->name; + + if ($varname =~ /^(nobase_)?(dist_|nodist_)?(.*)_[[:alnum:]]+$/) + { + my ($base, $dist, $X) = ($1 || '', $2 || '', $3 || ''); + if ($dist ne '' && ! $can_dist) + { + err_var ($var, + "invalid variable `$varname': `dist' is forbidden"); + } + # Standard directories must be explicitly allowed. + elsif (! defined $valid{$X} && exists $standard_prefix{$X}) + { + err_var ($var, + "`${X}dir' is not a legitimate directory " . + "for `$primary'"); + } + # A not explicitly valid directory is allowed if Xdir is defined. + elsif (! defined $valid{$X} && + $var->requires_variables ("`$varname' is used", "${X}dir")) + { + # Nothing to do. Any error message has been output + # by $var->requires_variables. + } + else + { + # Ensure all extended prefixes are actually used. + $valid{"$base$dist$X"} = 1; + } + } + else + { + prog_error "unexpected variable name: $varname"; + } + } + + # Return only those which are actually defined. + return sort grep { var ($_ . '_' . $primary) } keys %valid; +} + + +# Handle `where_HOW' variable magic. Does all lookups, generates +# install code, and possibly generates code to define the primary +# variable. The first argument is the name of the .am file to munge, +# the second argument is the primary variable (e.g. HEADERS), and all +# subsequent arguments are possible installation locations. +# +# Returns list of [$location, $value] pairs, where +# $value's are the values in all where_HOW variable, and $location +# there associated location (the place here their parent variables were +# defined). +# +# FIXME: this should be rewritten to be cleaner. It should be broken +# up into multiple functions. +# +# Usage is: am_install_var (OPTION..., file, HOW, where...) +sub am_install_var +{ + my (@args) = @_; + + my $do_require = 1; + my $can_dist = 0; + my $default_dist = 0; + while (@args) + { + if ($args[0] eq '-noextra') + { + $do_require = 0; + } + elsif ($args[0] eq '-candist') + { + $can_dist = 1; + } + elsif ($args[0] eq '-defaultdist') + { + $default_dist = 1; + $can_dist = 1; + } + elsif ($args[0] !~ /^-/) + { + last; + } + shift (@args); + } + + my ($file, $primary, @prefix) = @args; + + # Now that configure substitutions are allowed in where_HOW + # variables, it is an error to actually define the primary. We + # allow `JAVA', as it is customarily used to mean the Java + # interpreter. This is but one of several Java hacks. Similarly, + # `PYTHON' is customarily used to mean the Python interpreter. + reject_var $primary, "`$primary' is an anachronism" + unless $primary eq 'JAVA' || $primary eq 'PYTHON'; + + # Get the prefixes which are valid and actually used. + @prefix = am_primary_prefixes ($primary, $can_dist, @prefix); + + # If a primary includes a configure substitution, then the EXTRA_ + # form is required. Otherwise we can't properly do our job. + my $require_extra; + + my @used = (); + my @result = (); + + foreach my $X (@prefix) + { + my $nodir_name = $X; + my $one_name = $X . '_' . $primary; + my $one_var = var $one_name; + + my $strip_subdir = 1; + # If subdir prefix should be preserved, do so. + if ($nodir_name =~ /^nobase_/) + { + $strip_subdir = 0; + $nodir_name =~ s/^nobase_//; + } + + # If files should be distributed, do so. + my $dist_p = 0; + if ($can_dist) + { + $dist_p = (($default_dist && $nodir_name !~ /^nodist_/) + || (! $default_dist && $nodir_name =~ /^dist_/)); + $nodir_name =~ s/^(dist|nodist)_//; + } + + + # Use the location of the currently processed variable. + # We are not processing a particular condition, so pick the first + # available. + my $tmpcond = $one_var->conditions->one_cond; + my $where = $one_var->rdef ($tmpcond)->location->clone; + + # Append actual contents of where_PRIMARY variable to + # @result, skipping @substitutions@. + foreach my $locvals ($one_var->value_as_list_recursive (location => 1)) + { + my ($loc, $value) = @$locvals; + # Skip configure substitutions. + if ($value =~ /^\@.*\@$/) + { + if ($nodir_name eq 'EXTRA') + { + error ($where, + "`$one_name' contains configure substitution, " + . "but shouldn't"); + } + # Check here to make sure variables defined in + # configure.ac do not imply that EXTRA_PRIMARY + # must be defined. + elsif (! defined $configure_vars{$one_name}) + { + $require_extra = $one_name + if $do_require; + } + } + else + { + push (@result, $locvals); + } + } + # A blatant hack: we rewrite each _PROGRAMS primary to include + # EXEEXT. + append_exeext { 1 } $one_name + if $primary eq 'PROGRAMS'; + # "EXTRA" shouldn't be used when generating clean targets, + # all, or install targets. We used to warn if EXTRA_FOO was + # defined uselessly, but this was annoying. + next + if $nodir_name eq 'EXTRA'; + + if ($nodir_name eq 'check') + { + push (@check, '$(' . $one_name . ')'); + } + else + { + push (@used, '$(' . $one_name . ')'); + } + + # Is this to be installed? + my $install_p = $nodir_name ne 'noinst' && $nodir_name ne 'check'; + + # If so, with install-exec? (or install-data?). + my $exec_p = ($nodir_name =~ /$EXEC_DIR_PATTERN/o); + + my $check_options_p = $install_p && !! option 'std-options'; + + # Use the location of the currently processed variable as context. + $where->push_context ("while processing `$one_name'"); + + # The variable containing all file to distribute. + my $distvar = "\$($one_name)"; + $distvar = shadow_unconditionally ($one_name, $where) + if ($dist_p && $one_var->has_conditional_contents); + + # Singular form of $PRIMARY. + (my $one_primary = $primary) =~ s/S$//; + $output_rules .= &file_contents ($file, $where, + PRIMARY => $primary, + ONE_PRIMARY => $one_primary, + DIR => $X, + NDIR => $nodir_name, + BASE => $strip_subdir, + + EXEC => $exec_p, + INSTALL => $install_p, + DIST => $dist_p, + DISTVAR => $distvar, + 'CK-OPTS' => $check_options_p); + } + + # The JAVA variable is used as the name of the Java interpreter. + # The PYTHON variable is used as the name of the Python interpreter. + if (@used && $primary ne 'JAVA' && $primary ne 'PYTHON') + { + # Define it. + define_pretty_variable ($primary, TRUE, INTERNAL, @used); + $output_vars .= "\n"; + } + + err_var ($require_extra, + "`$require_extra' contains configure substitution,\n" + . "but `EXTRA_$primary' not defined") + if ($require_extra && ! var ('EXTRA_' . $primary)); + + # Push here because PRIMARY might be configure time determined. + push (@all, '$(' . $primary . ')') + if @used && $primary ne 'JAVA' && $primary ne 'PYTHON'; + + # Make the result unique. This lets the user use conditionals in + # a natural way, but still lets us program lazily -- we don't have + # to worry about handling a particular object more than once. + # We will keep only one location per object. + my %result = (); + for my $pair (@result) + { + my ($loc, $val) = @$pair; + $result{$val} = $loc; + } + my @l = sort keys %result; + return map { [$result{$_}->clone, $_] } @l; +} + + +################################################################ + +# Each key in this hash is the name of a directory holding a +# Makefile.in. These variables are local to `is_make_dir'. +my %make_dirs = (); +my $make_dirs_set = 0; + +sub is_make_dir +{ + my ($dir) = @_; + if (! $make_dirs_set) + { + foreach my $iter (@configure_input_files) + { + $make_dirs{dirname ($iter)} = 1; + } + # We also want to notice Makefile.in's. + foreach my $iter (@other_input_files) + { + if ($iter =~ /Makefile\.in$/) + { + $make_dirs{dirname ($iter)} = 1; + } + } + $make_dirs_set = 1; + } + return defined $make_dirs{$dir}; +} + +################################################################ + +# Find the aux dir. This should match the algorithm used by +# ./configure. (See the Autoconf documentation for for +# AC_CONFIG_AUX_DIR.) +sub locate_aux_dir () +{ + if (! $config_aux_dir_set_in_configure_ac) + { + # The default auxiliary directory is the first + # of ., .., or ../.. that contains install-sh. + # Assume . if install-sh doesn't exist yet. + for my $dir (qw (. .. ../..)) + { + if (-f "$dir/install-sh") + { + $config_aux_dir = $dir; + last; + } + } + $config_aux_dir = '.' unless $config_aux_dir; + } + # Avoid unsightly '/.'s. + $am_config_aux_dir = + '$(top_srcdir)' . ($config_aux_dir eq '.' ? "" : "/$config_aux_dir"); + $am_config_aux_dir =~ s,/*$,,; +} + + +# &maybe_push_required_file ($DIR, $FILE, $FULLFILE) +# -------------------------------------------------- +# See if we want to push this file onto dist_common. This function +# encodes the rules for deciding when to do so. +sub maybe_push_required_file +{ + my ($dir, $file, $fullfile) = @_; + + if ($dir eq $relative_dir) + { + push_dist_common ($file); + return 1; + } + elsif ($relative_dir eq '.' && ! &is_make_dir ($dir)) + { + # If we are doing the topmost directory, and the file is in a + # subdir which does not have a Makefile, then we distribute it + # here. + + # If a required file is above the source tree, it is important + # to prefix it with `$(srcdir)' so that no VPATH search is + # performed. Otherwise problems occur with Make implementations + # that rewrite and simplify rules whose dependencies are found in a + # VPATH location. Here is an example with OSF1/Tru64 Make. + # + # % cat Makefile + # VPATH = sub + # distdir: ../a + # echo ../a + # % ls + # Makefile a + # % make + # echo a + # a + # + # Dependency `../a' was found in `sub/../a', but this make + # implementation simplified it as `a'. (Note that the sub/ + # directory does not even exist.) + # + # This kind of VPATH rewriting seems hard to cancel. The + # distdir.am hack against VPATH rewriting works only when no + # simplification is done, i.e., for dependencies which are in + # subdirectories, not in enclosing directories. Hence, in + # the latter case we use a full path to make sure no VPATH + # search occurs. + $fullfile = '$(srcdir)/' . $fullfile + if $dir =~ m,^\.\.(?:$|/),; + + push_dist_common ($fullfile); + return 1; + } + return 0; +} + + +# If a file name appears as a key in this hash, then it has already +# been checked for. This allows us not to report the same error more +# than once. +my %required_file_not_found = (); + +# &require_file_internal ($WHERE, $MYSTRICT, $DIRECTORY, @FILES) +# -------------------------------------------------------------- +# Verify that the file must exist in $DIRECTORY, or install it. +# $MYSTRICT is the strictness level at which this file becomes required. +sub require_file_internal ($$$@) +{ + my ($where, $mystrict, $dir, @files) = @_; + + foreach my $file (@files) + { + my $fullfile = "$dir/$file"; + my $found_it = 0; + my $dangling_sym = 0; + + if (-l $fullfile && ! -f $fullfile) + { + $dangling_sym = 1; + } + elsif (dir_has_case_matching_file ($dir, $file)) + { + $found_it = 1; + maybe_push_required_file ($dir, $file, $fullfile); + } + + # `--force-missing' only has an effect if `--add-missing' is + # specified. + if ($found_it && (! $add_missing || ! $force_missing)) + { + next; + } + else + { + # If we've already looked for it, we're done. You might + # wonder why we don't do this before searching for the + # file. If we do that, then something like + # AC_OUTPUT(subdir/foo foo) will fail to put foo.in into + # DIST_COMMON. + if (! $found_it) + { + next if defined $required_file_not_found{$fullfile}; + $required_file_not_found{$fullfile} = 1; + } + + if ($strictness >= $mystrict) + { + if ($dangling_sym && $add_missing) + { + unlink ($fullfile); + } + + my $trailer = ''; + my $suppress = 0; + + # Only install missing files according to our desired + # strictness level. + my $message = "required file `$fullfile' not found"; + if ($add_missing) + { + if (-f "$libdir/$file") + { + $suppress = 1; + + # Install the missing file. Symlink if we + # can, copy if we must. Note: delete the file + # first, in case it is a dangling symlink. + $message = "installing `$fullfile'"; + # Windows Perl will hang if we try to delete a + # file that doesn't exist. + unlink ($fullfile) if -f $fullfile; + if ($symlink_exists && ! $copy_missing) + { + if (! symlink ("$libdir/$file", $fullfile)) + { + $suppress = 0; + $trailer = "; error while making link: $!"; + } + } + elsif (system ('cp', "$libdir/$file", $fullfile)) + { + $suppress = 0; + $trailer = "\n error while copying"; + } + reset_dir_cache ($dir); + } + + if (! maybe_push_required_file (dirname ($fullfile), + $file, $fullfile)) + { + if (! $found_it && ! $automake_will_process_aux_dir) + { + # We have added the file but could not push it + # into DIST_COMMON, probably because this is + # an auxiliary file and we are not processing + # the top level Makefile. Furthermore Automake + # hasn't been asked to create the Makefile.in + # that distribute the aux dir files. + error ($where, 'Please make a full run of automake' + . " so $fullfile gets distributed."); + } + } + } + else + { + $trailer = "\n `automake --add-missing' can install `$file'" + if -f "$libdir/$file"; + } + + # If --force-missing was specified, and we have + # actually found the file, then do nothing. + next + if $found_it && $force_missing; + + # If we couldn't install the file, but it is a target in + # the Makefile, don't print anything. This allows files + # like README, AUTHORS, or THANKS to be generated. + next + if !$suppress && rule $file; + + msg ($suppress ? 'note' : 'error', $where, "$message$trailer"); + } + } + } +} + +# &require_file ($WHERE, $MYSTRICT, @FILES) +# ----------------------------------------- +sub require_file ($$@) +{ + my ($where, $mystrict, @files) = @_; + require_file_internal ($where, $mystrict, $relative_dir, @files); +} + +# &require_file_with_macro ($COND, $MACRO, $MYSTRICT, @FILES) +# ----------------------------------------------------------- +sub require_file_with_macro ($$$@) +{ + my ($cond, $macro, $mystrict, @files) = @_; + $macro = rvar ($macro) unless ref $macro; + require_file ($macro->rdef ($cond)->location, $mystrict, @files); +} + +# &require_libsource_with_macro ($COND, $MACRO, $MYSTRICT, @FILES) +# ---------------------------------------------------------------- +# Require an AC_LIBSOURCEd file. If AC_CONFIG_LIBOBJ_DIR was called, it +# must be in that directory. Otherwise expect it in the current directory. +sub require_libsource_with_macro ($$$@) +{ + my ($cond, $macro, $mystrict, @files) = @_; + $macro = rvar ($macro) unless ref $macro; + if ($config_libobj_dir) + { + require_file_internal ($macro->rdef ($cond)->location, $mystrict, + $config_libobj_dir, @files); + } + else + { + require_file ($macro->rdef ($cond)->location, $mystrict, @files); + } +} + +# &require_conf_file ($WHERE, $MYSTRICT, @FILES) +# ---------------------------------------------- +# Looks in configuration path, as specified by AC_CONFIG_AUX_DIR. +sub require_conf_file ($$@) +{ + my ($where, $mystrict, @files) = @_; + require_file_internal ($where, $mystrict, $config_aux_dir, @files); +} + + +# &require_conf_file_with_macro ($COND, $MACRO, $MYSTRICT, @FILES) +# ---------------------------------------------------------------- +sub require_conf_file_with_macro ($$$@) +{ + my ($cond, $macro, $mystrict, @files) = @_; + require_conf_file (rvar ($macro)->rdef ($cond)->location, + $mystrict, @files); +} + +################################################################ + +# &require_build_directory ($DIRECTORY) +# ------------------------------------ +# Emit rules to create $DIRECTORY if needed, and return +# the file that any target requiring this directory should be made +# dependent upon. +# We don't want to emit the rule twice, and want to reuse it +# for directories with equivalent names (e.g., `foo/bar' and `./foo//bar'). +sub require_build_directory ($) +{ + my $directory = shift; + + return $directory_map{$directory} if exists $directory_map{$directory}; + + my $cdir = File::Spec->canonpath ($directory); + + if (exists $directory_map{$cdir}) + { + my $stamp = $directory_map{$cdir}; + $directory_map{$directory} = $stamp; + return $stamp; + } + + my $dirstamp = "$cdir/\$(am__dirstamp)"; + + $directory_map{$directory} = $dirstamp; + $directory_map{$cdir} = $dirstamp; + + # Set a variable for the dirstamp basename. + define_pretty_variable ('am__dirstamp', TRUE, INTERNAL, + '$(am__leading_dot)dirstamp'); + + # Directory must be removed by `make distclean'. + $clean_files{$dirstamp} = DIST_CLEAN; + + $output_rules .= ("$dirstamp:\n" + . "\t\@\$(MKDIR_P) $directory\n" + . "\t\@: > $dirstamp\n"); + + return $dirstamp; +} + +# &require_build_directory_maybe ($FILE) +# -------------------------------------- +# If $FILE lies in a subdirectory, emit a rule to create this +# directory and return the file that $FILE should be made +# dependent upon. Otherwise, just return the empty string. +sub require_build_directory_maybe ($) +{ + my $file = shift; + my $directory = dirname ($file); + + if ($directory ne '.') + { + return require_build_directory ($directory); + } + else + { + return ''; + } +} + +################################################################ + +# Push a list of files onto dist_common. +sub push_dist_common +{ + prog_error "push_dist_common run after handle_dist" + if $handle_dist_run; + Automake::Variable::define ('DIST_COMMON', VAR_AUTOMAKE, '+', TRUE, "@_", + '', INTERNAL, VAR_PRETTY); +} + + +################################################################ + +# generate_makefile ($MAKEFILE_AM, $MAKEFILE_IN) +# ---------------------------------------------- +# Generate a Makefile.in given the name of the corresponding Makefile and +# the name of the file output by config.status. +sub generate_makefile ($$) +{ + my ($makefile_am, $makefile_in) = @_; + + # Reset all the Makefile.am related variables. + initialize_per_input; + + # AUTOMAKE_OPTIONS can contains -W flags to disable or enable + # warnings for this file. So hold any warning issued before + # we have processed AUTOMAKE_OPTIONS. + buffer_messages ('warning'); + + # Name of input file ("Makefile.am") and output file + # ("Makefile.in"). These have no directory components. + $am_file_name = basename ($makefile_am); + $in_file_name = basename ($makefile_in); + + # $OUTPUT is encoded. If it contains a ":" then the first element + # is the real output file, and all remaining elements are input + # files. We don't scan or otherwise deal with these input files, + # other than to mark them as dependencies. See + # &scan_autoconf_files for details. + my ($makefile, @inputs) = split (/:/, $output_files{$makefile_in}); + + $relative_dir = dirname ($makefile); + $am_relative_dir = dirname ($makefile_am); + $topsrcdir = backname ($relative_dir); + + read_main_am_file ($makefile_am); + if (handle_options) + { + # Process buffered warnings. + flush_messages; + # Fatal error. Just return, so we can continue with next file. + return; + } + # Process buffered warnings. + flush_messages; + + # There are a few install-related variables that you should not define. + foreach my $var ('PRE_INSTALL', 'POST_INSTALL', 'NORMAL_INSTALL') + { + my $v = var $var; + if ($v) + { + my $def = $v->def (TRUE); + prog_error "$var not defined in condition TRUE" + unless $def; + reject_var $var, "`$var' should not be defined" + if $def->owner != VAR_AUTOMAKE; + } + } + + # Catch some obsolete variables. + msg_var ('obsolete', 'INCLUDES', + "`INCLUDES' is the old name for `AM_CPPFLAGS' (or `*_CPPFLAGS')") + if var ('INCLUDES'); + + # Must do this after reading .am file. + define_variable ('subdir', $relative_dir, INTERNAL); + + # If DIST_SUBDIRS is defined, make sure SUBDIRS is, so that + # recursive rules are enabled. + define_pretty_variable ('SUBDIRS', TRUE, INTERNAL, '') + if var 'DIST_SUBDIRS' && ! var 'SUBDIRS'; + + # Check first, because we might modify some state. + check_cygnus; + check_gnu_standards; + check_gnits_standards; + + handle_configure ($makefile_am, $makefile_in, $makefile, @inputs); + handle_gettext; + handle_libraries; + handle_ltlibraries; + handle_programs; + handle_scripts; + + # These must be run after all the sources are scanned. They + # use variables defined by &handle_libraries, &handle_ltlibraries, + # or &handle_programs. + handle_compile; + handle_languages; + handle_libtool; + + # Variables used by distdir.am and tags.am. + define_pretty_variable ('SOURCES', TRUE, INTERNAL, @sources); + if (! option 'no-dist') + { + define_pretty_variable ('DIST_SOURCES', TRUE, INTERNAL, @dist_sources); + } + + handle_multilib; + handle_texinfo; + handle_emacs_lisp; + handle_python; + handle_java; + handle_man_pages; + handle_data; + handle_headers; + handle_subdirs; + handle_tags; + handle_minor_options; + # Must come after handle_programs so that %known_programs is up-to-date. + handle_tests; + + # This must come after most other rules. + handle_dist; + + handle_footer; + do_check_merge_target; + handle_all ($makefile); + + # FIXME: Gross! + if (var ('lib_LTLIBRARIES') && var ('bin_PROGRAMS')) + { + $output_rules .= "install-binPROGRAMS: install-libLTLIBRARIES\n\n"; + } + + handle_install; + handle_clean ($makefile); + handle_factored_dependencies; + + # Comes last, because all the above procedures may have + # defined or overridden variables. + $output_vars .= output_variables; + + check_typos; + + my ($out_file) = $output_directory . '/' . $makefile_in; + + if ($exit_code != 0) + { + verb "not writing $out_file because of earlier errors"; + return; + } + + if (! -d ($output_directory . '/' . $am_relative_dir)) + { + mkdir ($output_directory . '/' . $am_relative_dir, 0755); + } + + # We make sure that `all:' is the first target. + my $output = + "$output_vars$output_all$output_header$output_rules$output_trailer"; + + # Decide whether we must update the output file or not. + # We have to update in the following situations. + # * $force_generation is set. + # * any of the output dependencies is younger than the output + # * the contents of the output is different (this can happen + # if the project has been populated with a file listed in + # @common_files since the last run). + # Output's dependencies are split in two sets: + # * dependencies which are also configure dependencies + # These do not change between each Makefile.am + # * other dependencies, specific to the Makefile.am being processed + # (such as the Makefile.am itself, or any Makefile fragment + # it includes). + my $timestamp = mtime $out_file; + if (! $force_generation + && $configure_deps_greatest_timestamp < $timestamp + && $output_deps_greatest_timestamp < $timestamp + && $output eq contents ($out_file)) + { + verb "$out_file unchanged"; + # No need to update. + return; + } + + if (-e $out_file) + { + unlink ($out_file) + or fatal "cannot remove $out_file: $!\n"; + } + + my $gm_file = new Automake::XFile "> $out_file"; + verb "creating $out_file"; + print $gm_file $output; +} + +################################################################ + + + + +################################################################ + +# Print usage information. +sub usage () +{ + print "Usage: $0 [OPTION] ... [Makefile]... + +Generate Makefile.in for configure from Makefile.am. + +Operation modes: + --help print this help, then exit + --version print version number, then exit + -v, --verbose verbosely list files processed + --no-force only update Makefile.in's that are out of date + -W, --warnings=CATEGORY report the warnings falling in CATEGORY + +Dependency tracking: + -i, --ignore-deps disable dependency tracking code + --include-deps enable dependency tracking code + +Flavors: + --cygnus assume program is part of Cygnus-style tree + --foreign set strictness to foreign + --gnits set strictness to gnits + --gnu set strictness to gnu + +Library files: + -a, --add-missing add missing standard files to package + --libdir=DIR directory storing library files + -c, --copy with -a, copy missing files (default is symlink) + -f, --force-missing force update of standard files + +"; + Automake::ChannelDefs::usage; + + my ($last, @lcomm); + $last = ''; + foreach my $iter (sort ((@common_files, @common_sometimes))) + { + push (@lcomm, $iter) unless $iter eq $last; + $last = $iter; + } + + my @four; + print "\nFiles which are automatically distributed, if found:\n"; + format USAGE_FORMAT = + @<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<< + $four[0], $four[1], $four[2], $four[3] +. + $~ = "USAGE_FORMAT"; + + my $cols = 4; + my $rows = int(@lcomm / $cols); + my $rest = @lcomm % $cols; + + if ($rest) + { + $rows++; + } + else + { + $rest = $cols; + } + + for (my $y = 0; $y < $rows; $y++) + { + @four = ("", "", "", ""); + for (my $x = 0; $x < $cols; $x++) + { + last if $y + 1 == $rows && $x == $rest; + + my $idx = (($x > $rest) + ? ($rows * $rest + ($rows - 1) * ($x - $rest)) + : ($rows * $x)); + + $idx += $y; + $four[$x] = $lcomm[$idx]; + } + write; + } + + print "\nReport bugs to .\n"; + + # --help always returns 0 per GNU standards. + exit 0; +} + + +# &version () +# ----------- +# Print version information +sub version () +{ + print < + and Alexandre Duret-Lutz . + +Copyright 2006 Free Software Foundation, Inc. +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +EOF + # --version always returns 0 per GNU standards. + exit 0; +} + +################################################################ + +# Parse command line. +sub parse_arguments () +{ + # Start off as gnu. + set_strictness ('gnu'); + + my $cli_where = new Automake::Location; + my %cli_options = + ( + 'libdir=s' => \$libdir, + 'gnu' => sub { set_strictness ('gnu'); }, + 'gnits' => sub { set_strictness ('gnits'); }, + 'cygnus' => sub { set_global_option ('cygnus', $cli_where); }, + 'foreign' => sub { set_strictness ('foreign'); }, + 'include-deps' => sub { unset_global_option ('no-dependencies'); }, + 'i|ignore-deps' => sub { set_global_option ('no-dependencies', + $cli_where); }, + 'no-force' => sub { $force_generation = 0; }, + 'f|force-missing' => \$force_missing, + 'o|output-dir=s' => \$output_directory, + 'a|add-missing' => \$add_missing, + 'c|copy' => \$copy_missing, + 'v|verbose' => sub { setup_channel 'verb', silent => 0; }, + 'W|warnings=s' => \&parse_warnings, + # These long options (--Werror and --Wno-error) for backward + # compatibility. Use -Werror and -Wno-error today. + 'Werror' => sub { parse_warnings 'W', 'error'; }, + 'Wno-error' => sub { parse_warnings 'W', 'no-error'; }, + ); + use Getopt::Long; + Getopt::Long::config ("bundling", "pass_through"); + + # See if --version or --help is used. We want to process these before + # anything else because the GNU Coding Standards require us to + # `exit 0' after processing these options, and we can't guarantee this + # if we treat other options first. (Handling other options first + # could produce error diagnostics, and in this condition it is + # confusing if Automake does `exit 0'.) + my %cli_options_1st_pass = + ( + 'version' => \&version, + 'help' => \&usage, + # Recognize all other options (and their arguments) but do nothing. + map { $_ => sub {} } (keys %cli_options) + ); + my @ARGV_backup = @ARGV; + Getopt::Long::GetOptions %cli_options_1st_pass + or exit 1; + @ARGV = @ARGV_backup; + + # Now *really* process the options. This time we know that --help + # and --version are not present, but we specify them nonetheless so + # that ambiguous abbreviation are diagnosed. + Getopt::Long::GetOptions %cli_options, 'version' => sub {}, 'help' => sub {} + or exit 1; + + if (defined $output_directory) + { + msg 'obsolete', "`--output-dir' is deprecated\n"; + } + else + { + # In the next release we'll remove this entirely. + $output_directory = '.'; + } + + return unless @ARGV; + + if ($ARGV[0] =~ /^-./) + { + my %argopts; + for my $k (keys %cli_options) + { + if ($k =~ /(.*)=s$/) + { + map { $argopts{(length ($_) == 1) + ? "-$_" : "--$_" } = 1; } (split (/\|/, $1)); + } + } + if ($ARGV[0] eq '--') + { + shift @ARGV; + } + elsif (exists $argopts{$ARGV[0]}) + { + fatal ("option `$ARGV[0]' requires an argument\n" + . "Try `$0 --help' for more information."); + } + else + { + fatal ("unrecognized option `$ARGV[0]'.\n" + . "Try `$0 --help' for more information."); + } + } + + my $errspec = 0; + foreach my $arg (@ARGV) + { + fatal ("empty argument\nTry `$0 --help' for more information.") + if ($arg eq ''); + + # Handle $local:$input syntax. + my ($local, @rest) = split (/:/, $arg); + @rest = ("$local.in",) unless @rest; + my $input = locate_am @rest; + if ($input) + { + push @input_files, $input; + $output_files{$input} = join (':', ($local, @rest)); + } + else + { + error "no Automake input file found for `$arg'"; + $errspec = 1; + } + } + fatal "no input file found among supplied arguments" + if $errspec && ! @input_files; +} + +################################################################ + +# Parse the WARNINGS environment variable. +parse_WARNINGS; + +# Parse command line. +parse_arguments; + +$configure_ac = require_configure_ac; + +# Do configure.ac scan only once. +scan_autoconf_files; + +if (! @input_files) + { + my $msg = ''; + $msg = "\nDid you forget AC_CONFIG_FILES([Makefile]) in $configure_ac?" + if -f 'Makefile.am'; + fatal ("no `Makefile.am' found for any configure output$msg"); + } + +# Now do all the work on each file. +foreach my $file (@input_files) + { + ($am_file = $file) =~ s/\.in$//; + if (! -f ($am_file . '.am')) + { + error "`$am_file.am' does not exist"; + } + else + { + # Any warning setting now local to this Makefile.am. + dup_channel_setup; + + generate_makefile ($am_file . '.am', $file); + + # Back out any warning setting. + drop_channel_setup; + } + } + +exit $exit_code; + + +### 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: diff --git a/bin/automake-1.10 b/bin/automake-1.10 new file mode 100644 index 00000000..8538ba83 --- /dev/null +++ b/bin/automake-1.10 @@ -0,0 +1,7859 @@ +#!/bin/perl -w +# -*- perl -*- +# Generated from automake.in; do not edit by hand. + +eval 'case $# in 0) exec /bin/perl -S "$0";; *) exec /bin/perl -S "$0" "$@";; esac' + if 0; + +# automake - create Makefile.in from Makefile.am +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006 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 2, 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, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + +# Originally written by David Mackenzie . +# Perl reimplementation by Tom Tromey , and +# Alexandre Duret-Lutz . + +package Language; + +BEGIN +{ + my $perllibdir = $ENV{'perllibdir'} || '/usr/share/automake-1.10'; + unshift @INC, (split ':', $perllibdir); + + # Override SHELL. This is required on DJGPP so that system() uses + # bash, not COMMAND.COM which doesn't quote arguments properly. + # Other systems aren't expected to use $SHELL when Automake + # runs, but it should be safe to drop the `if DJGPP' guard if + # it turns up other systems need the same thing. After all, + # if SHELL is used, ./configure's SHELL is always better than + # the user's SHELL (which may be something like tcsh). + $ENV{'SHELL'} = '/bin/sh' if exists $ENV{'DJGPP'}; +} + +use Automake::Struct; +struct (# Short name of the language (c, f77...). + 'name' => "\$", + # Nice name of the language (C, Fortran 77...). + 'Name' => "\$", + + # List of configure variables which must be defined. + 'config_vars' => '@', + + 'ansi' => "\$", + # `pure' is `1' or `'. A `pure' language is one where, if + # all the files in a directory are of that language, then we + # do not require the C compiler or any code to call it. + 'pure' => "\$", + + 'autodep' => "\$", + + # Name of the compiling variable (COMPILE). + 'compiler' => "\$", + # Content of the compiling variable. + 'compile' => "\$", + # Flag to require compilation without linking (-c). + 'compile_flag' => "\$", + 'extensions' => '@', + # A subroutine to compute a list of possible extensions of + # the product given the input extensions. + # (defaults to a subroutine which returns ('.$(OBJEXT)', '.lo')) + 'output_extensions' => "\$", + # A list of flag variables used in 'compile'. + # (defaults to []) + 'flags' => "@", + + # Any tag to pass to libtool while compiling. + 'libtool_tag' => "\$", + + # The file to use when generating rules for this language. + # The default is 'depend2'. + 'rule_file' => "\$", + + # Name of the linking variable (LINK). + 'linker' => "\$", + # Content of the linking variable. + 'link' => "\$", + + # Name of the linker variable (LD). + 'lder' => "\$", + # Content of the linker variable ($(CC)). + 'ld' => "\$", + + # Flag to specify the output file (-o). + 'output_flag' => "\$", + '_finish' => "\$", + + # This is a subroutine which is called whenever we finally + # determine the context in which a source file will be + # compiled. + '_target_hook' => "\$", + + # If TRUE, nodist_ sources will be compiled using specific rules + # (i.e. not inference rules). The default is FALSE. + 'nodist_specific' => "\$"); + + +sub finish ($) +{ + my ($self) = @_; + if (defined $self->_finish) + { + &{$self->_finish} (); + } +} + +sub target_hook ($$$$%) +{ + my ($self) = @_; + if (defined $self->_target_hook) + { + &{$self->_target_hook} (@_); + } +} + +package Automake; + +use strict; +use Automake::Config; +use Automake::General; +use Automake::XFile; +use Automake::Channels; +use Automake::ChannelDefs; +use Automake::Configure_ac; +use Automake::FileUtils; +use Automake::Location; +use Automake::Condition qw/TRUE FALSE/; +use Automake::DisjConditions; +use Automake::Options; +use Automake::Version; +use Automake::Variable; +use Automake::VarDef; +use Automake::Rule; +use Automake::RuleDef; +use Automake::Wrap 'makefile_wrap'; +use File::Basename; +use File::Spec; +use Carp; + +## ----------- ## +## Constants. ## +## ----------- ## + +# Some regular expressions. One reason to put them here is that it +# makes indentation work better in Emacs. + +# Writing singled-quoted-$-terminated regexes is a pain because +# perl-mode thinks of $' as the ${'} variable (instead of a $ followed +# by a closing quote. Letting perl-mode think the quote is not closed +# leads to all sort of misindentations. On the other hand, defining +# regexes as double-quoted strings is far less readable. So usually +# we will write: +# +# $REGEX = '^regex_value' . "\$"; + +my $IGNORE_PATTERN = '^\s*##([^#\n].*)?\n'; +my $WHITE_PATTERN = '^\s*' . "\$"; +my $COMMENT_PATTERN = '^#'; +my $TARGET_PATTERN='[$a-zA-Z_.@%][-.a-zA-Z0-9_(){}/$+@%]*'; +# A rule has three parts: a list of targets, a list of dependencies, +# and optionally actions. +my $RULE_PATTERN = + "^($TARGET_PATTERN(?:(?:\\\\\n|\\s)+$TARGET_PATTERN)*) *:([^=].*|)\$"; + +# Only recognize leading spaces, not leading tabs. If we recognize +# leading tabs here then we need to make the reader smarter, because +# otherwise it will think rules like `foo=bar; \' are errors. +my $ASSIGNMENT_PATTERN = '^ *([^ \t=:+]*)\s*([:+]?)=\s*(.*)' . "\$"; +# This pattern recognizes a Gnits version id and sets $1 if the +# release is an alpha release. We also allow a suffix which can be +# used to extend the version number with a "fork" identifier. +my $GNITS_VERSION_PATTERN = '\d+\.\d+([a-z]|\.\d+)?(-[A-Za-z0-9]+)?'; + +my $IF_PATTERN = '^if\s+(!?)\s*([A-Za-z][A-Za-z0-9_]*)\s*(?:#.*)?' . "\$"; +my $ELSE_PATTERN = + '^else(?:\s+(!?)\s*([A-Za-z][A-Za-z0-9_]*))?\s*(?:#.*)?' . "\$"; +my $ENDIF_PATTERN = + '^endif(?:\s+(!?)\s*([A-Za-z][A-Za-z0-9_]*))?\s*(?:#.*)?' . "\$"; +my $PATH_PATTERN = '(\w|[+/.-])+'; +# This will pass through anything not of the prescribed form. +my $INCLUDE_PATTERN = ('^include\s+' + . '((\$\(top_srcdir\)/' . $PATH_PATTERN . ')' + . '|(\$\(srcdir\)/' . $PATH_PATTERN . ')' + . '|([^/\$]' . $PATH_PATTERN . '))\s*(#.*)?' . "\$"); + +# Match `-d' as a command-line argument in a string. +my $DASH_D_PATTERN = "(^|\\s)-d(\\s|\$)"; +# Directories installed during 'install-exec' phase. +my $EXEC_DIR_PATTERN = + '^(?:bin|sbin|libexec|sysconf|localstate|lib|pkglib|.*exec.*)' . "\$"; + +# Values for AC_CANONICAL_* +use constant AC_CANONICAL_BUILD => 1; +use constant AC_CANONICAL_HOST => 2; +use constant AC_CANONICAL_TARGET => 3; + +# Values indicating when something should be cleaned. +use constant MOSTLY_CLEAN => 0; +use constant CLEAN => 1; +use constant DIST_CLEAN => 2; +use constant MAINTAINER_CLEAN => 3; + +# Libtool files. +my @libtool_files = qw(ltmain.sh config.guess config.sub); +# ltconfig appears here for compatibility with old versions of libtool. +my @libtool_sometimes = qw(ltconfig ltcf-c.sh ltcf-cxx.sh ltcf-gcj.sh); + +# Commonly found files we look for and automatically include in +# DISTFILES. +my @common_files = + (qw(ABOUT-GNU ABOUT-NLS AUTHORS BACKLOG COPYING COPYING.DOC COPYING.LIB + COPYING.LESSER ChangeLog INSTALL NEWS README THANKS TODO + ansi2knr.1 ansi2knr.c compile config.guess config.rpath config.sub + depcomp elisp-comp install-sh libversion.in mdate-sh missing + mkinstalldirs py-compile texinfo.tex ylwrap), + @libtool_files, @libtool_sometimes); + +# Commonly used files we auto-include, but only sometimes. This list +# is used for the --help output only. +my @common_sometimes = + qw(aclocal.m4 acconfig.h config.h.top config.h.bot configure + configure.ac configure.in stamp-vti); + +# Standard directories from the GNU Coding Standards, and additional +# pkg* directories from Automake. Stored in a hash for fast member check. +my %standard_prefix = + map { $_ => 1 } (qw(bin data dataroot dvi exec html include info + lib libexec lisp localstate man man1 man2 man3 + man4 man5 man6 man7 man8 man9 oldinclude pdf + pkgdatadir pkgincludedir pkglibdir ps sbin + sharedstate sysconf)); + +# Copyright on generated Makefile.ins. +my $gen_copyright = "\ +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. +"; + +# These constants are returned by the lang_*_rewrite functions. +# LANG_SUBDIR means that the resulting object file should be in a +# subdir if the source file is. In this case the file name cannot +# have `..' components. +use constant LANG_IGNORE => 0; +use constant LANG_PROCESS => 1; +use constant LANG_SUBDIR => 2; + +# These are used when keeping track of whether an object can be built +# by two different paths. +use constant COMPILE_LIBTOOL => 1; +use constant COMPILE_ORDINARY => 2; + +# We can't always associate a location to a variable or a rule, +# when it's defined by Automake. We use INTERNAL in this case. +use constant INTERNAL => new Automake::Location; + + +## ---------------------------------- ## +## Variables related to the options. ## +## ---------------------------------- ## + +# TRUE if we should always generate Makefile.in. +my $force_generation = 1; + +# From the Perl manual. +my $symlink_exists = (eval 'symlink ("", "");', $@ eq ''); + +# TRUE if missing standard files should be installed. +my $add_missing = 0; + +# TRUE if we should copy missing files; otherwise symlink if possible. +my $copy_missing = 0; + +# TRUE if we should always update files that we know about. +my $force_missing = 0; + + +## ---------------------------------------- ## +## Variables filled during files scanning. ## +## ---------------------------------------- ## + +# Name of the configure.ac file. +my $configure_ac; + +# Files found by scanning configure.ac for LIBOBJS. +my %libsources = (); + +# Names used in AC_CONFIG_HEADER call. +my @config_headers = (); + +# Names used in AC_CONFIG_LINKS call. +my @config_links = (); + +# Directory where output files go. Actually, output files are +# relative to this directory. +my $output_directory; + +# List of Makefile.am's to process, and their corresponding outputs. +my @input_files = (); +my %output_files = (); + +# Complete list of Makefile.am's that exist. +my @configure_input_files = (); + +# List of files in AC_CONFIG_FILES/AC_OUTPUT without Makefile.am's, +# and their outputs. +my @other_input_files = (); +# Where each AC_CONFIG_FILES/AC_OUTPUT/AC_CONFIG_LINK/AC_CONFIG_HEADER appears. +# The keys are the files created by these macros. +my %ac_config_files_location = (); + +# Directory to search for configure-required files. This +# will be computed by &locate_aux_dir and can be set using +# AC_CONFIG_AUX_DIR in configure.ac. +# $CONFIG_AUX_DIR is the `raw' directory, valid only in the source-tree. +my $config_aux_dir = ''; +my $config_aux_dir_set_in_configure_ac = 0; +# $AM_CONFIG_AUX_DIR is prefixed with $(top_srcdir), so it can be used +# in Makefiles. +my $am_config_aux_dir = ''; + +# Directory to search for AC_LIBSOURCE files, as set by AC_CONFIG_LIBOBJ_DIR +# in configure.ac. +my $config_libobj_dir = ''; + +# Whether AM_GNU_GETTEXT has been seen in configure.ac. +my $seen_gettext = 0; +# Whether AM_GNU_GETTEXT([external]) is used. +my $seen_gettext_external = 0; +# Where AM_GNU_GETTEXT appears. +my $ac_gettext_location; +# Whether AM_GNU_GETTEXT_INTL_SUBDIR has been seen. +my $seen_gettext_intl = 0; + +# Lists of tags supported by Libtool. +my %libtool_tags = (); +# 1 if Libtool uses LT_SUPPORTED_TAG. If it does, then it also +# uses AC_REQUIRE_AUX_FILE. +my $libtool_new_api = 0; + +# Most important AC_CANONICAL_* macro seen so far. +my $seen_canonical = 0; +# Location of that macro. +my $canonical_location; + +# Where AM_MAINTAINER_MODE appears. +my $seen_maint_mode; + +# Actual version we've seen. +my $package_version = ''; + +# Where version is defined. +my $package_version_location; + +# TRUE if we've seen AC_ENABLE_MULTILIB. +my $seen_multilib = 0; + +# TRUE if we've seen AM_PROG_CC_C_O +my $seen_cc_c_o = 0; + +# Location of AC_REQUIRE_AUX_FILE calls, indexed by their argument. +my %required_aux_file = (); + +# Where AM_INIT_AUTOMAKE is called; +my $seen_init_automake = 0; + +# TRUE if we've seen AM_AUTOMAKE_VERSION. +my $seen_automake_version = 0; + +# Hash table of discovered configure substitutions. Keys are names, +# values are `FILE:LINE' strings which are used by error message +# generation. +my %configure_vars = (); + +# Ignored configure substitutions (i.e., variables not to be output in +# Makefile.in) +my %ignored_configure_vars = (); + +# Files included by $configure_ac. +my @configure_deps = (); + +# Greatest timestamp of configure's dependencies. +my $configure_deps_greatest_timestamp = 0; + +# Hash table of AM_CONDITIONAL variables seen in configure. +my %configure_cond = (); + +# This maps extensions onto language names. +my %extension_map = (); + +# List of the DIST_COMMON files we discovered while reading +# configure.in +my $configure_dist_common = ''; + +# This maps languages names onto objects. +my %languages = (); +# Maps each linker variable onto a language object. +my %link_languages = (); + +# List of targets we must always output. +# FIXME: Complete, and remove falsely required targets. +my %required_targets = + ( + 'all' => 1, + 'dvi' => 1, + 'pdf' => 1, + 'ps' => 1, + 'info' => 1, + 'install-info' => 1, + 'install' => 1, + 'install-data' => 1, + 'install-exec' => 1, + 'uninstall' => 1, + + # FIXME: Not required, temporary hacks. + # Well, actually they are sort of required: the -recursive + # targets will run them anyway... + 'dvi-am' => 1, + 'pdf-am' => 1, + 'ps-am' => 1, + 'info-am' => 1, + 'install-data-am' => 1, + 'install-exec-am' => 1, + 'installcheck-am' => 1, + 'uninstall-am' => 1, + + 'install-man' => 1, + ); + +# Set to 1 if this run will create the Makefile.in that distribute +# the files in config_aux_dir. +my $automake_will_process_aux_dir = 0; + +# The name of the Makefile currently being processed. +my $am_file = 'BUG'; + + +################################################################ + +## ------------------------------------------ ## +## Variables reset by &initialize_per_input. ## +## ------------------------------------------ ## + +# Basename and relative dir of the input file. +my $am_file_name; +my $am_relative_dir; + +# Same but wrt Makefile.in. +my $in_file_name; +my $relative_dir; + +# Relative path to the top directory. +my $topsrcdir; + +# Greatest timestamp of the output's dependencies (excluding +# configure's dependencies). +my $output_deps_greatest_timestamp; + +# These two variables are used when generating each Makefile.in. +# They hold the Makefile.in until it is ready to be printed. +my $output_rules; +my $output_vars; +my $output_trailer; +my $output_all; +my $output_header; + +# This is the conditional stack, updated on if/else/endif, and +# used to build Condition objects. +my @cond_stack; + +# This holds the set of included files. +my @include_stack; + +# List of dependencies for the obvious targets. +my @all; +my @check; +my @check_tests; + +# Keys in this hash table are files to delete. The associated +# value tells when this should happen (MOSTLY_CLEAN, DIST_CLEAN, etc.) +my %clean_files; + +# Keys in this hash table are object files or other files in +# subdirectories which need to be removed. This only holds files +# which are created by compilations. The value in the hash indicates +# when the file should be removed. +my %compile_clean_files; + +# Keys in this hash table are directories where we expect to build a +# libtool object. We use this information to decide what directories +# to delete. +my %libtool_clean_directories; + +# Value of `$(SOURCES)', used by tags.am. +my @sources; +# Sources which go in the distribution. +my @dist_sources; + +# This hash maps object file names onto their corresponding source +# file names. This is used to ensure that each object is created +# by a single source file. +my %object_map; + +# This hash maps object file names onto an integer value representing +# whether this object has been built via ordinary compilation or +# libtool compilation (the COMPILE_* constants). +my %object_compilation_map; + + +# This keeps track of the directories for which we've already +# created dirstamp code. Keys are directories, values are stamp files. +# Several keys can share the same stamp files if they are equivalent +# (as are `.//foo' and `foo'). +my %directory_map; + +# All .P files. +my %dep_files; + +# This is a list of all targets to run during "make dist". +my @dist_targets; + +# Keep track of all programs declared in this Makefile, without +# $(EXEEXT). @substitution@ are not listed. +my %known_programs; + +# Keys in this hash are the basenames of files which must depend on +# ansi2knr. Values are either the empty string, or the directory in +# which the ANSI source file appears; the directory must have a +# trailing `/'. +my %de_ansi_files; + +# This is the name of the redirect `all' target to use. +my $all_target; + +# This keeps track of which extensions we've seen (that we care +# about). +my %extension_seen; + +# This is random scratch space for the language finish functions. +# Don't randomly overwrite it; examine other uses of keys first. +my %language_scratch; + +# We keep track of which objects need special (per-executable) +# handling on a per-language basis. +my %lang_specific_files; + +# This is set when `handle_dist' has finished. Once this happens, +# we should no longer push on dist_common. +my $handle_dist_run; + +# Used to store a set of linkers needed to generate the sources currently +# under consideration. +my %linkers_used; + +# True if we need `LINK' defined. This is a hack. +my $need_link; + +# Was get_object_extension run? +# FIXME: This is a hack. a better switch should be found. +my $get_object_extension_was_run; + +# Record each file processed by make_paragraphs. +my %transformed_files; + +# Cache each file processed by make_paragraphs. +# (This is different from %transformed_files because +# %transformed_files is reset for each file while %am_file_cache +# it global to the run.) +my %am_file_cache; + +################################################################ + +# var_SUFFIXES_trigger ($TYPE, $VALUE) +# ------------------------------------ +# This is called by Automake::Variable::define() when SUFFIXES +# is defined ($TYPE eq '') or appended ($TYPE eq '+'). +# The work here needs to be performed as a side-effect of the +# macro_define() call because SUFFIXES definitions impact +# on $KNOWN_EXTENSIONS_PATTERN which is used used when parsing +# the input am file. +sub var_SUFFIXES_trigger ($$) +{ + my ($type, $value) = @_; + accept_extensions (split (' ', $value)); +} +Automake::Variable::hook ('SUFFIXES', \&var_SUFFIXES_trigger); + +################################################################ + +## --------------------------------- ## +## Forward subroutine declarations. ## +## --------------------------------- ## +sub register_language (%); +sub file_contents_internal ($$$%); +sub define_files_variable ($\@$$); + + +# &initialize_per_input () +# ------------------------ +# (Re)-Initialize per-Makefile.am variables. +sub initialize_per_input () +{ + reset_local_duplicates (); + + $am_file_name = ''; + $am_relative_dir = ''; + + $in_file_name = ''; + $relative_dir = ''; + + $output_deps_greatest_timestamp = 0; + + $output_rules = ''; + $output_vars = ''; + $output_trailer = ''; + $output_all = ''; + $output_header = ''; + + Automake::Options::reset; + Automake::Variable::reset; + Automake::Rule::reset; + + @cond_stack = (); + + @include_stack = (); + + @all = (); + @check = (); + @check_tests = (); + + %clean_files = (); + + @sources = (); + @dist_sources = (); + + %object_map = (); + %object_compilation_map = (); + + %directory_map = (); + + %dep_files = (); + + @dist_targets = (); + + %known_programs = (); + + %de_ansi_files = (); + + $all_target = ''; + + %extension_seen = (); + + %language_scratch = (); + + %lang_specific_files = (); + + $handle_dist_run = 0; + + $need_link = 0; + + $get_object_extension_was_run = 0; + + %compile_clean_files = (); + + # We always include `.'. This isn't strictly correct. + %libtool_clean_directories = ('.' => 1); + + %transformed_files = (); +} + + +################################################################ + +# Initialize our list of languages that are internally supported. + +# C. +register_language ('name' => 'c', + 'Name' => 'C', + 'config_vars' => ['CC'], + 'ansi' => 1, + 'autodep' => '', + 'flags' => ['CFLAGS', 'CPPFLAGS'], + 'compiler' => 'COMPILE', + 'compile' => '$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)', + 'lder' => 'CCLD', + 'ld' => '$(CC)', + 'linker' => 'LINK', + 'link' => '$(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@', + 'compile_flag' => '-c', + 'libtool_tag' => 'CC', + 'extensions' => ['.c'], + '_finish' => \&lang_c_finish); + +# C++. +register_language ('name' => 'cxx', + 'Name' => 'C++', + 'config_vars' => ['CXX'], + 'linker' => 'CXXLINK', + 'link' => '$(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@', + 'autodep' => 'CXX', + 'flags' => ['CXXFLAGS', 'CPPFLAGS'], + 'compile' => '$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)', + 'compiler' => 'CXXCOMPILE', + 'compile_flag' => '-c', + 'output_flag' => '-o', + 'libtool_tag' => 'CXX', + 'lder' => 'CXXLD', + 'ld' => '$(CXX)', + 'pure' => 1, + 'extensions' => ['.c++', '.cc', '.cpp', '.cxx', '.C']); + +# Objective C. +register_language ('name' => 'objc', + 'Name' => 'Objective C', + 'config_vars' => ['OBJC'], + 'linker' => 'OBJCLINK', + 'link' => '$(OBJCLD) $(AM_OBJCFLAGS) $(OBJCFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@', + 'autodep' => 'OBJC', + 'flags' => ['OBJCFLAGS', 'CPPFLAGS'], + 'compile' => '$(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS)', + 'compiler' => 'OBJCCOMPILE', + 'compile_flag' => '-c', + 'output_flag' => '-o', + 'lder' => 'OBJCLD', + 'ld' => '$(OBJC)', + 'pure' => 1, + 'extensions' => ['.m']); + +# Unified Parallel C. +register_language ('name' => 'upc', + 'Name' => 'Unified Parallel C', + 'config_vars' => ['UPC'], + 'linker' => 'UPCLINK', + 'link' => '$(UPCLD) $(AM_UPCFLAGS) $(UPCFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@', + 'autodep' => 'UPC', + 'flags' => ['UPCFLAGS', 'CPPFLAGS'], + 'compile' => '$(UPC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_UPCFLAGS) $(UPCFLAGS)', + 'compiler' => 'UPCCOMPILE', + 'compile_flag' => '-c', + 'output_flag' => '-o', + 'lder' => 'UPCLD', + 'ld' => '$(UPC)', + 'pure' => 1, + 'extensions' => ['.upc']); + +# Headers. +register_language ('name' => 'header', + 'Name' => 'Header', + 'extensions' => ['.h', '.H', '.hxx', '.h++', '.hh', + '.hpp', '.inc'], + # No output. + 'output_extensions' => sub { return () }, + # Nothing to do. + '_finish' => sub { }); + +# Yacc (C & C++). +register_language ('name' => 'yacc', + 'Name' => 'Yacc', + 'config_vars' => ['YACC'], + 'flags' => ['YFLAGS'], + 'compile' => '$(YACC) $(YFLAGS) $(AM_YFLAGS)', + 'compiler' => 'YACCCOMPILE', + 'extensions' => ['.y'], + 'output_extensions' => sub { (my $ext = $_[0]) =~ tr/y/c/; + return ($ext,) }, + 'rule_file' => 'yacc', + '_finish' => \&lang_yacc_finish, + '_target_hook' => \&lang_yacc_target_hook, + 'nodist_specific' => 1); +register_language ('name' => 'yaccxx', + 'Name' => 'Yacc (C++)', + 'config_vars' => ['YACC'], + 'rule_file' => 'yacc', + 'flags' => ['YFLAGS'], + 'compiler' => 'YACCCOMPILE', + 'compile' => '$(YACC) $(YFLAGS) $(AM_YFLAGS)', + 'extensions' => ['.y++', '.yy', '.yxx', '.ypp'], + 'output_extensions' => sub { (my $ext = $_[0]) =~ tr/y/c/; + return ($ext,) }, + '_finish' => \&lang_yacc_finish, + '_target_hook' => \&lang_yacc_target_hook, + 'nodist_specific' => 1); + +# Lex (C & C++). +register_language ('name' => 'lex', + 'Name' => 'Lex', + 'config_vars' => ['LEX'], + 'rule_file' => 'lex', + 'flags' => ['LFLAGS'], + 'compile' => '$(LEX) $(LFLAGS) $(AM_LFLAGS)', + 'compiler' => 'LEXCOMPILE', + 'extensions' => ['.l'], + 'output_extensions' => sub { (my $ext = $_[0]) =~ tr/l/c/; + return ($ext,) }, + '_finish' => \&lang_lex_finish, + '_target_hook' => \&lang_lex_target_hook, + 'nodist_specific' => 1); +register_language ('name' => 'lexxx', + 'Name' => 'Lex (C++)', + 'config_vars' => ['LEX'], + 'rule_file' => 'lex', + 'flags' => ['LFLAGS'], + 'compile' => '$(LEX) $(LFLAGS) $(AM_LFLAGS)', + 'compiler' => 'LEXCOMPILE', + 'extensions' => ['.l++', '.ll', '.lxx', '.lpp'], + 'output_extensions' => sub { (my $ext = $_[0]) =~ tr/l/c/; + return ($ext,) }, + '_finish' => \&lang_lex_finish, + '_target_hook' => \&lang_lex_target_hook, + 'nodist_specific' => 1); + +# Assembler. +register_language ('name' => 'asm', + 'Name' => 'Assembler', + 'config_vars' => ['CCAS', 'CCASFLAGS'], + + 'flags' => ['CCASFLAGS'], + # Users can set AM_CCASFLAGS to include DEFS, INCLUDES, + # or anything else required. They can also set CCAS. + # Or simply use Preprocessed Assembler. + 'compile' => '$(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS)', + 'compiler' => 'CCASCOMPILE', + 'compile_flag' => '-c', + 'output_flag' => '-o', + 'extensions' => ['.s'], + + # With assembly we still use the C linker. + '_finish' => \&lang_c_finish); + +# Preprocessed Assembler. +register_language ('name' => 'cppasm', + 'Name' => 'Preprocessed Assembler', + 'config_vars' => ['CCAS', 'CCASFLAGS'], + + 'autodep' => 'CCAS', + 'flags' => ['CCASFLAGS', 'CPPFLAGS'], + 'compile' => '$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS)', + 'compiler' => 'CPPASCOMPILE', + 'compile_flag' => '-c', + 'output_flag' => '-o', + 'extensions' => ['.S'], + + # With assembly we still use the C linker. + '_finish' => \&lang_c_finish); + +# Fortran 77 +register_language ('name' => 'f77', + 'Name' => 'Fortran 77', + 'config_vars' => ['F77'], + 'linker' => 'F77LINK', + 'link' => '$(F77LD) $(AM_FFLAGS) $(FFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@', + 'flags' => ['FFLAGS'], + 'compile' => '$(F77) $(AM_FFLAGS) $(FFLAGS)', + 'compiler' => 'F77COMPILE', + 'compile_flag' => '-c', + 'output_flag' => '-o', + 'libtool_tag' => 'F77', + 'lder' => 'F77LD', + 'ld' => '$(F77)', + 'pure' => 1, + 'extensions' => ['.f', '.for']); + +# Fortran +register_language ('name' => 'fc', + 'Name' => 'Fortran', + 'config_vars' => ['FC'], + 'linker' => 'FCLINK', + 'link' => '$(FCLD) $(AM_FCFLAGS) $(FCFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@', + 'flags' => ['FCFLAGS'], + 'compile' => '$(FC) $(AM_FCFLAGS) $(FCFLAGS)', + 'compiler' => 'FCCOMPILE', + 'compile_flag' => '-c', + 'output_flag' => '-o', + 'lder' => 'FCLD', + 'ld' => '$(FC)', + 'pure' => 1, + 'extensions' => ['.f90', '.f95']); + +# Preprocessed Fortran +register_language ('name' => 'ppfc', + 'Name' => 'Preprocessed Fortran', + 'config_vars' => ['FC'], + 'linker' => 'FCLINK', + 'link' => '$(FCLD) $(AM_FCFLAGS) $(FCFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@', + 'lder' => 'FCLD', + 'ld' => '$(FC)', + 'flags' => ['FCFLAGS', 'CPPFLAGS'], + 'compiler' => 'PPFCCOMPILE', + 'compile' => '$(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS)', + 'compile_flag' => '-c', + 'output_flag' => '-o', + 'libtool_tag' => 'FC', + 'pure' => 1, + 'extensions' => ['.F90','.F95']); + +# Preprocessed Fortran 77 +# +# The current support for preprocessing Fortran 77 just involves +# passing `$(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) +# $(CPPFLAGS)' as additional flags to the Fortran 77 compiler, since +# this is how GNU Make does it; see the `GNU Make Manual, Edition 0.51 +# for `make' Version 3.76 Beta' (specifically, from info file +# `(make)Catalogue of Rules'). +# +# A better approach would be to write an Autoconf test +# (i.e. AC_PROG_FPP) for a Fortran 77 preprocessor, because not all +# Fortran 77 compilers know how to do preprocessing. The Autoconf +# macro AC_PROG_FPP should test the Fortran 77 compiler first for +# preprocessing capabilities, and then fall back on cpp (if cpp were +# available). +register_language ('name' => 'ppf77', + 'Name' => 'Preprocessed Fortran 77', + 'config_vars' => ['F77'], + 'linker' => 'F77LINK', + 'link' => '$(F77LD) $(AM_FFLAGS) $(FFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@', + 'lder' => 'F77LD', + 'ld' => '$(F77)', + 'flags' => ['FFLAGS', 'CPPFLAGS'], + 'compiler' => 'PPF77COMPILE', + 'compile' => '$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS)', + 'compile_flag' => '-c', + 'output_flag' => '-o', + 'libtool_tag' => 'F77', + 'pure' => 1, + 'extensions' => ['.F']); + +# Ratfor. +register_language ('name' => 'ratfor', + 'Name' => 'Ratfor', + 'config_vars' => ['F77'], + 'linker' => 'F77LINK', + 'link' => '$(F77LD) $(AM_FFLAGS) $(FFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@', + 'lder' => 'F77LD', + 'ld' => '$(F77)', + 'flags' => ['RFLAGS', 'FFLAGS'], + # FIXME also FFLAGS. + 'compile' => '$(F77) $(AM_FFLAGS) $(FFLAGS) $(AM_RFLAGS) $(RFLAGS)', + 'compiler' => 'RCOMPILE', + 'compile_flag' => '-c', + 'output_flag' => '-o', + 'libtool_tag' => 'F77', + 'pure' => 1, + 'extensions' => ['.r']); + +# Java via gcj. +register_language ('name' => 'java', + 'Name' => 'Java', + 'config_vars' => ['GCJ'], + 'linker' => 'GCJLINK', + 'link' => '$(GCJLD) $(AM_GCJFLAGS) $(GCJFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@', + 'autodep' => 'GCJ', + 'flags' => ['GCJFLAGS'], + 'compile' => '$(GCJ) $(AM_GCJFLAGS) $(GCJFLAGS)', + 'compiler' => 'GCJCOMPILE', + 'compile_flag' => '-c', + 'output_flag' => '-o', + 'libtool_tag' => 'GCJ', + 'lder' => 'GCJLD', + 'ld' => '$(GCJ)', + 'pure' => 1, + 'extensions' => ['.java', '.class', '.zip', '.jar']); + +################################################################ + +# Error reporting functions. + +# err_am ($MESSAGE, [%OPTIONS]) +# ----------------------------- +# Uncategorized errors about the current Makefile.am. +sub err_am ($;%) +{ + msg_am ('error', @_); +} + +# err_ac ($MESSAGE, [%OPTIONS]) +# ----------------------------- +# Uncategorized errors about configure.ac. +sub err_ac ($;%) +{ + msg_ac ('error', @_); +} + +# msg_am ($CHANNEL, $MESSAGE, [%OPTIONS]) +# --------------------------------------- +# Messages about about the current Makefile.am. +sub msg_am ($$;%) +{ + my ($channel, $msg, %opts) = @_; + msg $channel, "${am_file}.am", $msg, %opts; +} + +# msg_ac ($CHANNEL, $MESSAGE, [%OPTIONS]) +# --------------------------------------- +# Messages about about configure.ac. +sub msg_ac ($$;%) +{ + my ($channel, $msg, %opts) = @_; + msg $channel, $configure_ac, $msg, %opts; +} + +################################################################ + +# subst ($TEXT) +# ------------- +# Return a configure-style substitution using the indicated text. +# We do this to avoid having the substitutions directly in automake.in; +# when we do that they are sometimes removed and this causes confusion +# and bugs. +sub subst ($) +{ + my ($text) = @_; + return '@' . $text . '@'; +} + +################################################################ + + +# $BACKPATH +# &backname ($REL-DIR) +# -------------------- +# If I `cd $REL-DIR', then to come back, I should `cd $BACKPATH'. +# For instance `src/foo' => `../..'. +# Works with non strictly increasing paths, i.e., `src/../lib' => `..'. +sub backname ($) +{ + my ($file) = @_; + my @res; + foreach (split (/\//, $file)) + { + next if $_ eq '.' || $_ eq ''; + if ($_ eq '..') + { + pop @res; + } + else + { + push (@res, '..'); + } + } + return join ('/', @res) || '.'; +} + +################################################################ + + +# Handle AUTOMAKE_OPTIONS variable. Return 1 on error, 0 otherwise. +sub handle_options +{ + my $var = var ('AUTOMAKE_OPTIONS'); + if ($var) + { + if ($var->has_conditional_contents) + { + msg_var ('unsupported', $var, + "`AUTOMAKE_OPTIONS' cannot have conditional contents"); + } + foreach my $locvals ($var->value_as_list_recursive (cond_filter => TRUE, + location => 1)) + { + my ($loc, $value) = @$locvals; + return 1 if (process_option_list ($loc, $value)) + } + } + + if ($strictness == GNITS) + { + set_option ('readme-alpha', INTERNAL); + set_option ('std-options', INTERNAL); + set_option ('check-news', INTERNAL); + } + + return 0; +} + +# shadow_unconditionally ($varname, $where) +# ----------------------------------------- +# Return a $(variable) that contains all possible values +# $varname can take. +# If the VAR wasn't defined conditionally, return $(VAR). +# Otherwise we create a am__VAR_DIST variable which contains +# all possible values, and return $(am__VAR_DIST). +sub shadow_unconditionally ($$) +{ + my ($varname, $where) = @_; + my $var = var $varname; + if ($var->has_conditional_contents) + { + $varname = "am__${varname}_DIST"; + my @files = uniq ($var->value_as_list_recursive); + define_pretty_variable ($varname, TRUE, $where, @files); + } + return "\$($varname)" +} + +# get_object_extension ($EXTENSION) +# --------------------------------- +# Prefix $EXTENSION with $U if ansi2knr is in use. +sub get_object_extension ($) +{ + my ($extension) = @_; + + # Check for automatic de-ANSI-fication. + $extension = '$U' . $extension + if option 'ansi2knr'; + + $get_object_extension_was_run = 1; + + return $extension; +} + +# check_user_variables (@LIST) +# ---------------------------- +# Make sure each variable VAR in @LIST does not exist, suggest using AM_VAR +# otherwise. +sub check_user_variables (@) +{ + my @dont_override = @_; + foreach my $flag (@dont_override) + { + my $var = var $flag; + if ($var) + { + for my $cond ($var->conditions->conds) + { + if ($var->rdef ($cond)->owner == VAR_MAKEFILE) + { + msg_cond_var ('gnu', $cond, $flag, + "`$flag' is a user variable, " + . "you should not override it;\n" + . "use `AM_$flag' instead."); + } + } + } + } +} + +# Call finish function for each language that was used. +sub handle_languages +{ + if (! option 'no-dependencies') + { + # Include auto-dep code. Don't include it if DEP_FILES would + # be empty. + if (&saw_sources_p (0) && keys %dep_files) + { + # Set location of depcomp. + &define_variable ('depcomp', + "\$(SHELL) $am_config_aux_dir/depcomp", + INTERNAL); + &define_variable ('am__depfiles_maybe', 'depfiles', INTERNAL); + + require_conf_file ("$am_file.am", FOREIGN, 'depcomp'); + + my @deplist = sort keys %dep_files; + # Generate each `include' individually. Irix 6 make will + # not properly include several files resulting from a + # variable expansion; generating many separate includes + # seems safest. + $output_rules .= "\n"; + foreach my $iter (@deplist) + { + $output_rules .= (subst ('AMDEP_TRUE') + . subst ('am__include') + . ' ' + . subst ('am__quote') + . $iter + . subst ('am__quote') + . "\n"); + } + + # Compute the set of directories to remove in distclean-depend. + my @depdirs = uniq (map { dirname ($_) } @deplist); + $output_rules .= &file_contents ('depend', + new Automake::Location, + DEPDIRS => "@depdirs"); + } + } + else + { + &define_variable ('depcomp', '', INTERNAL); + &define_variable ('am__depfiles_maybe', '', INTERNAL); + } + + my %done; + + # Is the c linker needed? + my $needs_c = 0; + foreach my $ext (sort keys %extension_seen) + { + next unless $extension_map{$ext}; + + my $lang = $languages{$extension_map{$ext}}; + + my $rule_file = $lang->rule_file || 'depend2'; + + # Get information on $LANG. + my $pfx = $lang->autodep; + my $fpfx = ($pfx eq '') ? 'CC' : $pfx; + + my ($AMDEP, $FASTDEP) = + (option 'no-dependencies' || $lang->autodep eq 'no') + ? ('FALSE', 'FALSE') : ('AMDEP', "am__fastdep$fpfx"); + + my %transform = ('EXT' => $ext, + 'PFX' => $pfx, + 'FPFX' => $fpfx, + 'AMDEP' => $AMDEP, + 'FASTDEP' => $FASTDEP, + '-c' => $lang->compile_flag || '', + # These are not used, but they need to be defined + # so &transform do not complain. + SUBDIROBJ => 0, + 'DERIVED-EXT' => 'BUG', + DIST_SOURCE => 1, + ); + + # Generate the appropriate rules for this extension. + if (((! option 'no-dependencies') && $lang->autodep ne 'no') + || defined $lang->compile) + { + # Some C compilers don't support -c -o. Use it only if really + # needed. + my $output_flag = $lang->output_flag || ''; + $output_flag = '-o' + if (! $output_flag + && $lang->name eq 'c' + && option 'subdir-objects'); + + # Compute a possible derived extension. + # This is not used by depend2.am. + my $der_ext = (&{$lang->output_extensions} ($ext))[0]; + + # When we output an inference rule like `.c.o:' we + # have two cases to consider: either subdir-objects + # is used, or it is not. + # + # In the latter case the rule is used to build objects + # in the current directory, and dependencies always + # go into `./$(DEPDIR)/'. We can hard-code this value. + # + # In the former case the rule can be used to build + # objects in sub-directories too. Dependencies should + # go into the appropriate sub-directories, e.g., + # `sub/$(DEPDIR)/'. The value of this directory + # needs to be computed on-the-fly. + # + # DEPBASE holds the name of this directory, plus the + # basename part of the object file (extensions Po, TPo, + # Plo, TPlo will be added later as appropriate). It is + # either hardcoded, or a shell variable (`$depbase') that + # will be computed by the rule. + my $depbase = + option ('subdir-objects') ? '$$depbase' : '$(DEPDIR)/$*'; + $output_rules .= + file_contents ($rule_file, + new Automake::Location, + %transform, + GENERIC => 1, + + 'DERIVED-EXT' => $der_ext, + + DEPBASE => $depbase, + BASE => '$*', + SOURCE => '$<', + OBJ => '$@', + OBJOBJ => '$@', + LTOBJ => '$@', + + COMPILE => '$(' . $lang->compiler . ')', + LTCOMPILE => '$(LT' . $lang->compiler . ')', + -o => $output_flag, + SUBDIROBJ => !! option 'subdir-objects'); + } + + # Now include code for each specially handled object with this + # language. + my %seen_files = (); + foreach my $file (@{$lang_specific_files{$lang->name}}) + { + my ($derived, $source, $obj, $myext, %file_transform) = @$file; + + # We might see a given object twice, for instance if it is + # used under different conditions. + next if defined $seen_files{$obj}; + $seen_files{$obj} = 1; + + prog_error ("found " . $lang->name . + " in handle_languages, but compiler not defined") + unless defined $lang->compile; + + my $obj_compile = $lang->compile; + + # Rewrite each occurrence of `AM_$flag' in the compile + # rule into `${derived}_$flag' if it exists. + for my $flag (@{$lang->flags}) + { + my $val = "${derived}_$flag"; + $obj_compile =~ s/\(AM_$flag\)/\($val\)/ + if set_seen ($val); + } + + my $libtool_tag = ''; + if ($lang->libtool_tag && exists $libtool_tags{$lang->libtool_tag}) + { + $libtool_tag = '--tag=' . $lang->libtool_tag . ' ' + } + + my $ptltflags = "${derived}_LIBTOOLFLAGS"; + $ptltflags = 'AM_LIBTOOLFLAGS' unless set_seen $ptltflags; + + my $obj_ltcompile = + "\$(LIBTOOL) $libtool_tag\$($ptltflags) \$(LIBTOOLFLAGS) " + . "--mode=compile $obj_compile"; + + # We _need_ `-o' for per object rules. + my $output_flag = $lang->output_flag || '-o'; + + my $depbase = dirname ($obj); + $depbase = '' + if $depbase eq '.'; + $depbase .= '/' + unless $depbase eq ''; + $depbase .= '$(DEPDIR)/' . basename ($obj); + + # Support for deansified files in subdirectories is ugly + # enough to deserve an explanation. + # + # A Note about normal ansi2knr processing first. On + # + # AUTOMAKE_OPTIONS = ansi2knr + # bin_PROGRAMS = foo + # foo_SOURCES = foo.c + # + # we generate rules similar to: + # + # foo: foo$U.o; link ... + # foo$U.o: foo$U.c; compile ... + # foo_.c: foo.c; ansi2knr ... + # + # this is fairly compact, and will call ansi2knr depending + # on the value of $U (`' or `_'). + # + # It's harder with subdir sources. On + # + # AUTOMAKE_OPTIONS = ansi2knr + # bin_PROGRAMS = foo + # foo_SOURCES = sub/foo.c + # + # we have to create foo_.c in the current directory. + # (Unless the user asks 'subdir-objects'.) This is important + # in case the same file (`foo.c') is compiled from other + # directories with different cpp options: foo_.c would + # be preprocessed for only one set of options if it were + # put in the subdirectory. + # + # Because foo$U.o must be built from either foo_.c or + # sub/foo.c we can't be as concise as in the first example. + # Instead we output + # + # foo: foo$U.o; link ... + # foo_.o: foo_.c; compile ... + # foo.o: sub/foo.c; compile ... + # foo_.c: foo.c; ansi2knr ... + # + # This is why we'll now transform $rule_file twice + # if we detect this case. + # A first time we output the compile rule with `$U' + # replaced by `_' and the source directory removed, + # and another time we simply remove `$U'. + # + # Note that at this point $source (as computed by + # &handle_single_transform) is `sub/foo$U.c'. + # This can be confusing: it can be used as-is when + # subdir-objects is set, otherwise you have to know + # it really means `foo_.c' or `sub/foo.c'. + my $objdir = dirname ($obj); + my $srcdir = dirname ($source); + if ($lang->ansi && $obj =~ /\$U/) + { + prog_error "`$obj' contains \$U, but `$source' doesn't." + if $source !~ /\$U/; + + (my $source_ = $source) =~ s/\$U/_/g; + # Output an additional rule if _.c and .c are not in + # the same directory. (_.c is always in $objdir.) + if ($objdir ne $srcdir) + { + (my $obj_ = $obj) =~ s/\$U/_/g; + (my $depbase_ = $depbase) =~ s/\$U/_/g; + $source_ = basename ($source_); + + $output_rules .= + file_contents ($rule_file, + new Automake::Location, + %transform, + GENERIC => 0, + + DEPBASE => $depbase_, + BASE => $obj_, + SOURCE => $source_, + OBJ => "$obj_$myext", + OBJOBJ => "$obj_.obj", + LTOBJ => "$obj_.lo", + + COMPILE => $obj_compile, + LTCOMPILE => $obj_ltcompile, + -o => $output_flag, + %file_transform); + $obj =~ s/\$U//g; + $depbase =~ s/\$U//g; + $source =~ s/\$U//g; + } + } + + $output_rules .= + file_contents ($rule_file, + new Automake::Location, + %transform, + GENERIC => 0, + + DEPBASE => $depbase, + BASE => $obj, + SOURCE => $source, + # Use $myext and not `.o' here, in case + # we are actually building a new source + # file -- e.g. via yacc. + OBJ => "$obj$myext", + OBJOBJ => "$obj.obj", + LTOBJ => "$obj.lo", + + COMPILE => $obj_compile, + LTCOMPILE => $obj_ltcompile, + -o => $output_flag, + %file_transform); + } + + # The rest of the loop is done once per language. + next if defined $done{$lang}; + $done{$lang} = 1; + + # Load the language dependent Makefile chunks. + my %lang = map { uc ($_) => 0 } keys %languages; + $lang{uc ($lang->name)} = 1; + $output_rules .= file_contents ('lang-compile', + new Automake::Location, + %transform, %lang); + + # If the source to a program consists entirely of code from a + # `pure' language, for instance C++ or Fortran 77, then we + # don't need the C compiler code. However if we run into + # something unusual then we do generate the C code. There are + # probably corner cases here that do not work properly. + # People linking Java code to Fortran code deserve pain. + $needs_c ||= ! $lang->pure; + + define_compiler_variable ($lang) + if ($lang->compile); + + define_linker_variable ($lang) + if ($lang->link); + + require_variables ("$am_file.am", $lang->Name . " source seen", + TRUE, @{$lang->config_vars}); + + # Call the finisher. + $lang->finish; + + # Flags listed in `->flags' are user variables (per GNU Standards), + # they should not be overridden in the Makefile... + my @dont_override = @{$lang->flags}; + # ... and so is LDFLAGS. + push @dont_override, 'LDFLAGS' if $lang->link; + + check_user_variables @dont_override; + } + + # If the project is entirely C++ or entirely Fortran 77 (i.e., 1 + # suffix rule was learned), don't bother with the C stuff. But if + # anything else creeps in, then use it. + $needs_c = 1 + if $need_link || suffix_rules_count > 1; + + if ($needs_c) + { + &define_compiler_variable ($languages{'c'}) + unless defined $done{$languages{'c'}}; + define_linker_variable ($languages{'c'}); + } +} + + +# append_exeext { PREDICATE } $MACRO +# ---------------------------------- +# Append $(EXEEXT) to each filename in $F appearing in the Makefile +# variable $MACRO if &PREDICATE($F) is true. @substitutions@ are +# ignored. +# +# This is typically used on all filenames of *_PROGRAMS, and filenames +# of TESTS that are programs. +sub append_exeext (&$) +{ + my ($pred, $macro) = @_; + + transform_variable_recursively + ($macro, $macro, 'am__EXEEXT', 0, INTERNAL, + sub { + my ($subvar, $val, $cond, $full_cond) = @_; + # Append $(EXEEXT) unless the user did it already, or it's a + # @substitution@. + $val .= '$(EXEEXT)' + if $val !~ /(?:\$\(EXEEXT\)$|^[@]\w+[@]$)/ && &$pred ($val); + return $val; + }); +} + + +# Check to make sure a source defined in LIBOBJS is not explicitly +# mentioned. This is a separate function (as opposed to being inlined +# in handle_source_transform) because it isn't always appropriate to +# do this check. +sub check_libobjs_sources +{ + my ($one_file, $unxformed) = @_; + + foreach my $prefix ('', 'EXTRA_', 'dist_', 'nodist_', + 'dist_EXTRA_', 'nodist_EXTRA_') + { + my @files; + my $varname = $prefix . $one_file . '_SOURCES'; + my $var = var ($varname); + if ($var) + { + @files = $var->value_as_list_recursive; + } + elsif ($prefix eq '') + { + @files = ($unxformed . '.c'); + } + else + { + next; + } + + foreach my $file (@files) + { + err_var ($prefix . $one_file . '_SOURCES', + "automatically discovered file `$file' should not" . + " be explicitly mentioned") + if defined $libsources{$file}; + } + } +} + + +# @OBJECTS +# handle_single_transform ($VAR, $TOPPARENT, $DERIVED, $OBJ, $FILE, %TRANSFORM) +# ----------------------------------------------------------------------------- +# Does much of the actual work for handle_source_transform. +# Arguments are: +# $VAR is the name of the variable that the source filenames come from +# $TOPPARENT is the name of the _SOURCES variable which is being processed +# $DERIVED is the name of resulting executable or library +# $OBJ is the object extension (e.g., `$U.lo') +# $FILE the source file to transform +# %TRANSFORM contains extras arguments to pass to file_contents +# when producing explicit rules +# Result is a list of the names of objects +# %linkers_used will be updated with any linkers needed +sub handle_single_transform ($$$$$%) +{ + my ($var, $topparent, $derived, $obj, $_file, %transform) = @_; + my @files = ($_file); + my @result = (); + my $nonansi_obj = $obj; + $nonansi_obj =~ s/\$U//g; + + # Turn sources into objects. We use a while loop like this + # because we might add to @files in the loop. + while (scalar @files > 0) + { + $_ = shift @files; + + # Configure substitutions in _SOURCES variables are errors. + if (/^\@.*\@$/) + { + my $parent_msg = ''; + $parent_msg = "\nand is referred to from `$topparent'" + if $topparent ne $var->name; + err_var ($var, + "`" . $var->name . "' includes configure substitution `$_'" + . $parent_msg . ";\nconfigure " . + "substitutions are not allowed in _SOURCES variables"); + next; + } + + # If the source file is in a subdirectory then the `.o' is put + # into the current directory, unless the subdir-objects option + # is in effect. + + # Split file name into base and extension. + next if ! /^(?:(.*)\/)?([^\/]*)($KNOWN_EXTENSIONS_PATTERN)$/; + my $full = $_; + my $directory = $1 || ''; + my $base = $2; + my $extension = $3; + + # We must generate a rule for the object if it requires its own flags. + my $renamed = 0; + my ($linker, $object); + + # This records whether we've seen a derived source file (e.g. + # yacc output). + my $derived_source = 0; + + # This holds the `aggregate context' of the file we are + # currently examining. If the file is compiled with + # per-object flags, then it will be the name of the object. + # Otherwise it will be `AM'. This is used by the target hook + # language function. + my $aggregate = 'AM'; + + $extension = &derive_suffix ($extension, $nonansi_obj); + my $lang; + if ($extension_map{$extension} && + ($lang = $languages{$extension_map{$extension}})) + { + # Found the language, so see what it says. + &saw_extension ($extension); + + # Do we have per-executable flags for this executable? + my $have_per_exec_flags = 0; + my @peflags = @{$lang->flags}; + push @peflags, 'LIBTOOLFLAGS' if $nonansi_obj eq '.lo'; + foreach my $flag (@peflags) + { + if (set_seen ("${derived}_$flag")) + { + $have_per_exec_flags = 1; + last; + } + } + + # Note: computed subr call. The language rewrite function + # should return one of the LANG_* constants. It could + # also return a list whose first value is such a constant + # and whose second value is a new source extension which + # should be applied. This means this particular language + # generates another source file which we must then process + # further. + my $subr = \&{'lang_' . $lang->name . '_rewrite'}; + my ($r, $source_extension) + = &$subr ($directory, $base, $extension, + $nonansi_obj, $have_per_exec_flags, $var); + # Skip this entry if we were asked not to process it. + next if $r == LANG_IGNORE; + + # Now extract linker and other info. + $linker = $lang->linker; + + my $this_obj_ext; + if (defined $source_extension) + { + $this_obj_ext = $source_extension; + $derived_source = 1; + } + elsif ($lang->ansi) + { + $this_obj_ext = $obj; + } + else + { + $this_obj_ext = $nonansi_obj; + } + $object = $base . $this_obj_ext; + + if ($have_per_exec_flags) + { + # We have a per-executable flag in effect for this + # object. In this case we rewrite the object's + # name to ensure it is unique. + + # We choose the name `DERIVED_OBJECT' to ensure + # (1) uniqueness, and (2) continuity between + # invocations. However, this will result in a + # name that is too long for losing systems, in + # some situations. So we provide _SHORTNAME to + # override. + + my $dname = $derived; + my $var = var ($derived . '_SHORTNAME'); + if ($var) + { + # FIXME: should use the same Condition as + # the _SOURCES variable. But this is really + # silly overkill -- nobody should have + # conditional shortnames. + $dname = $var->variable_value; + } + $object = $dname . '-' . $object; + + prog_error ($lang->name . " flags defined without compiler") + if ! defined $lang->compile; + + $renamed = 1; + } + + # If rewrite said it was ok, put the object into a + # subdir. + if ($r == LANG_SUBDIR && $directory ne '') + { + $object = $directory . '/' . $object; + } + + # If the object file has been renamed (because per-target + # flags are used) we cannot compile the file with an + # inference rule: we need an explicit rule. + # + # If the source is in a subdirectory and the object is in + # the current directory, we also need an explicit rule. + # + # If both source and object files are in a subdirectory + # (this happens when the subdir-objects option is used), + # then the inference will work. + # + # The latter case deserves a historical note. When the + # subdir-objects option was added on 1999-04-11 it was + # thought that inferences rules would work for + # subdirectory objects too. Later, on 1999-11-22, + # automake was changed to output explicit rules even for + # subdir-objects. Nobody remembers why, but this occurred + # soon after the merge of the user-dep-gen-branch so it + # might be related. In late 2003 people complained about + # the size of the generated Makefile.ins (libgcj, with + # 2200+ subdir objects was reported to have a 9MB + # Makefile), so we now rely on inference rules again. + # Maybe we'll run across the same issue as in the past, + # but at least this time we can document it. However since + # dependency tracking has evolved it is possible that + # our old problem no longer exists. + # Using inference rules for subdir-objects has been tested + # with GNU make, Solaris make, Ultrix make, BSD make, + # HP-UX make, and OSF1 make successfully. + if ($renamed + || ($directory ne '' && ! option 'subdir-objects') + # We must also use specific rules for a nodist_ source + # if its language requests it. + || ($lang->nodist_specific && ! $transform{'DIST_SOURCE'})) + { + my $obj_sans_ext = substr ($object, 0, + - length ($this_obj_ext)); + my $full_ansi = $full; + if ($lang->ansi && option 'ansi2knr') + { + $full_ansi =~ s/$KNOWN_EXTENSIONS_PATTERN$/\$U$&/; + $obj_sans_ext .= '$U'; + } + + my @specifics = ($full_ansi, $obj_sans_ext, + # Only use $this_obj_ext in the derived + # source case because in the other case we + # *don't* want $(OBJEXT) to appear here. + ($derived_source ? $this_obj_ext : '.o')); + + # If we renamed the object then we want to use the + # per-executable flag name. But if this is simply a + # subdir build then we still want to use the AM_ flag + # name. + if ($renamed) + { + unshift @specifics, $derived; + $aggregate = $derived; + } + else + { + unshift @specifics, 'AM'; + } + + # Each item on this list is a reference to a list consisting + # of four values followed by additional transform flags for + # file_contents. The four values are the derived flag prefix + # (e.g. for `foo_CFLAGS', it is `foo'), the name of the + # source file, the base name of the output file, and + # the extension for the object file. + push (@{$lang_specific_files{$lang->name}}, + [@specifics, %transform]); + } + } + elsif ($extension eq $nonansi_obj) + { + # This is probably the result of a direct suffix rule. + # In this case we just accept the rewrite. + $object = "$base$extension"; + $object = "$directory/$object" if $directory ne ''; + $linker = ''; + } + else + { + # No error message here. Used to have one, but it was + # very unpopular. + # FIXME: we could potentially do more processing here, + # perhaps treating the new extension as though it were a + # new source extension (as above). This would require + # more restructuring than is appropriate right now. + next; + } + + err_am "object `$object' created by `$full' and `$object_map{$object}'" + if (defined $object_map{$object} + && $object_map{$object} ne $full); + + my $comp_val = (($object =~ /\.lo$/) + ? COMPILE_LIBTOOL : COMPILE_ORDINARY); + (my $comp_obj = $object) =~ s/\.lo$/.\$(OBJEXT)/; + if (defined $object_compilation_map{$comp_obj} + && $object_compilation_map{$comp_obj} != 0 + # Only see the error once. + && ($object_compilation_map{$comp_obj} + != (COMPILE_LIBTOOL | COMPILE_ORDINARY)) + && $object_compilation_map{$comp_obj} != $comp_val) + { + err_am "object `$comp_obj' created both with libtool and without"; + } + $object_compilation_map{$comp_obj} |= $comp_val; + + if (defined $lang) + { + # Let the language do some special magic if required. + $lang->target_hook ($aggregate, $object, $full, %transform); + } + + if ($derived_source) + { + prog_error ($lang->name . " has automatic dependency tracking") + if $lang->autodep ne 'no'; + # Make sure this new source file is handled next. That will + # make it appear to be at the right place in the list. + unshift (@files, $object); + # Distribute derived sources unless the source they are + # derived from is not. + &push_dist_common ($object) + unless ($topparent =~ /^(?:nobase_)?nodist_/); + next; + } + + $linkers_used{$linker} = 1; + + push (@result, $object); + + if (! defined $object_map{$object}) + { + my @dep_list = (); + $object_map{$object} = $full; + + # If resulting object is in subdir, we need to make + # sure the subdir exists at build time. + if ($object =~ /\//) + { + # FIXME: check that $DIRECTORY is somewhere in the + # project + + # For Java, the way we're handling it right now, a + # `..' component doesn't make sense. + if ($lang && $lang->name eq 'java' && $object =~ /(\/|^)\.\.\//) + { + err_am "`$full' should not contain a `..' component"; + } + + # Make sure object is removed by `make mostlyclean'. + $compile_clean_files{$object} = MOSTLY_CLEAN; + # If we have a libtool object then we also must remove + # the ordinary .o. + if ($object =~ /\.lo$/) + { + (my $xobj = $object) =~ s,lo$,\$(OBJEXT),; + $compile_clean_files{$xobj} = MOSTLY_CLEAN; + + # Remove any libtool object in this directory. + $libtool_clean_directories{$directory} = 1; + } + + push (@dep_list, require_build_directory ($directory)); + + # If we're generating dependencies, we also want + # to make sure that the appropriate subdir of the + # .deps directory is created. + push (@dep_list, + require_build_directory ($directory . '/$(DEPDIR)')) + unless option 'no-dependencies'; + } + + &pretty_print_rule ($object . ':', "\t", @dep_list) + if scalar @dep_list > 0; + } + + # Transform .o or $o file into .P file (for automatic + # dependency code). + if ($lang && $lang->autodep ne 'no') + { + my $depfile = $object; + $depfile =~ s/\.([^.]*)$/.P$1/; + $depfile =~ s/\$\(OBJEXT\)$/o/; + $dep_files{dirname ($depfile) . '/$(DEPDIR)/' + . basename ($depfile)} = 1; + } + } + + return @result; +} + + +# $LINKER +# define_objects_from_sources ($VAR, $OBJVAR, $NODEFINE, $ONE_FILE, +# $OBJ, $PARENT, $TOPPARENT, $WHERE, %TRANSFORM) +# --------------------------------------------------------------------------- +# Define an _OBJECTS variable for a _SOURCES variable (or subvariable) +# +# Arguments are: +# $VAR is the name of the _SOURCES variable +# $OBJVAR is the name of the _OBJECTS variable if known (otherwise +# it will be generated and returned). +# $NODEFINE is a boolean: if true, $OBJVAR will not be defined (but +# work done to determine the linker will be). +# $ONE_FILE is the canonical (transformed) name of object to build +# $OBJ is the object extension (i.e. either `.o' or `.lo'). +# $TOPPARENT is the _SOURCES variable being processed. +# $WHERE context into which this definition is done +# %TRANSFORM extra arguments to pass to file_contents when producing +# rules +# +# Result is a pair ($LINKER, $OBJVAR): +# $LINKER is a boolean, true if a linker is needed to deal with the objects +sub define_objects_from_sources ($$$$$$$%) +{ + my ($var, $objvar, $nodefine, $one_file, + $obj, $topparent, $where, %transform) = @_; + + my $needlinker = ""; + + transform_variable_recursively + ($var, $objvar, 'am__objects', $nodefine, $where, + # The transform code to run on each filename. + sub { + my ($subvar, $val, $cond, $full_cond) = @_; + my @trans = handle_single_transform ($subvar, $topparent, + $one_file, $obj, $val, + %transform); + $needlinker = "true" if @trans; + return @trans; + }); + + return $needlinker; +} + + +# handle_source_transform ($CANON_TARGET, $TARGET, $OBJEXT, $WHERE, %TRANSFORM) +# ----------------------------------------------------------------------------- +# Handle SOURCE->OBJECT transform for one program or library. +# Arguments are: +# canonical (transformed) name of target to build +# actual target of object to build +# object extension (i.e., either `.o' or `$o') +# location of the source variable +# extra arguments to pass to file_contents when producing rules +# Return the name of the linker variable that must be used. +# Empty return means just use `LINK'. +sub handle_source_transform ($$$$%) +{ + # one_file is canonical name. unxformed is given name. obj is + # object extension. + my ($one_file, $unxformed, $obj, $where, %transform) = @_; + + my $linker = ''; + + # No point in continuing if _OBJECTS is defined. + return if reject_var ($one_file . '_OBJECTS', + $one_file . '_OBJECTS should not be defined'); + + my %used_pfx = (); + my $needlinker; + %linkers_used = (); + foreach my $prefix ('', 'EXTRA_', 'dist_', 'nodist_', + 'dist_EXTRA_', 'nodist_EXTRA_') + { + my $varname = $prefix . $one_file . "_SOURCES"; + my $var = var $varname; + next unless $var; + + # We are going to define _OBJECTS variables using the prefix. + # Then we glom them all together. So we can't use the null + # prefix here as we need it later. + my $xpfx = ($prefix eq '') ? 'am_' : $prefix; + + # Keep track of which prefixes we saw. + $used_pfx{$xpfx} = 1 + unless $prefix =~ /EXTRA_/; + + push @sources, "\$($varname)"; + push @dist_sources, shadow_unconditionally ($varname, $where) + unless (option ('no-dist') || $prefix =~ /^nodist_/); + + $needlinker |= + define_objects_from_sources ($varname, + $xpfx . $one_file . '_OBJECTS', + $prefix =~ /EXTRA_/, + $one_file, $obj, $varname, $where, + DIST_SOURCE => ($prefix !~ /^nodist_/), + %transform); + } + if ($needlinker) + { + $linker ||= &resolve_linker (%linkers_used); + } + + my @keys = sort keys %used_pfx; + if (scalar @keys == 0) + { + # The default source for libfoo.la is libfoo.c, but for + # backward compatibility we first look at libfoo_la.c + my $old_default_source = "$one_file.c"; + (my $default_source = $unxformed) =~ s,(\.[^./\\]*)?$,.c,; + if ($old_default_source ne $default_source + && (rule $old_default_source + || rule '$(srcdir)/' . $old_default_source + || rule '${srcdir}/' . $old_default_source + || -f $old_default_source)) + { + my $loc = $where->clone; + $loc->pop_context; + msg ('obsolete', $loc, + "the default source for `$unxformed' has been changed " + . "to `$default_source'.\n(Using `$old_default_source' for " + . "backward compatibility.)"); + $default_source = $old_default_source; + } + # If a rule exists to build this source with a $(srcdir) + # prefix, use that prefix in our variables too. This is for + # the sake of BSD Make. + if (rule '$(srcdir)/' . $default_source + || rule '${srcdir}/' . $default_source) + { + $default_source = '$(srcdir)/' . $default_source; + } + + &define_variable ($one_file . "_SOURCES", $default_source, $where); + push (@sources, $default_source); + push (@dist_sources, $default_source); + + %linkers_used = (); + my (@result) = + handle_single_transform ($one_file . '_SOURCES', + $one_file . '_SOURCES', + $one_file, $obj, + $default_source, %transform); + $linker ||= &resolve_linker (%linkers_used); + define_pretty_variable ($one_file . '_OBJECTS', TRUE, $where, @result); + } + else + { + @keys = map { '$(' . $_ . $one_file . '_OBJECTS)' } @keys; + define_pretty_variable ($one_file . '_OBJECTS', TRUE, $where, @keys); + } + + # If we want to use `LINK' we must make sure it is defined. + if ($linker eq '') + { + $need_link = 1; + } + + return $linker; +} + + +# handle_lib_objects ($XNAME, $VAR) +# --------------------------------- +# Special-case ALLOCA and LIBOBJS substitutions in _LDADD or _LIBADD variables. +# Also, generate _DEPENDENCIES variable if appropriate. +# Arguments are: +# transformed name of object being built, or empty string if no object +# name of _LDADD/_LIBADD-type variable to examine +# Returns 1 if LIBOBJS seen, 0 otherwise. +sub handle_lib_objects +{ + my ($xname, $varname) = @_; + + my $var = var ($varname); + prog_error "handle_lib_objects: `$varname' undefined" + unless $var; + prog_error "handle_lib_objects: unexpected variable name `$varname'" + unless $varname =~ /^(.*)(?:LIB|LD)ADD$/; + my $prefix = $1 || 'AM_'; + + my $seen_libobjs = 0; + my $flagvar = 0; + + transform_variable_recursively + ($varname, $xname . '_DEPENDENCIES', 'am__DEPENDENCIES', + ! $xname, INTERNAL, + # Transformation function, run on each filename. + sub { + my ($subvar, $val, $cond, $full_cond) = @_; + + if ($val =~ /^-/) + { + # Skip -lfoo and -Ldir silently; these are explicitly allowed. + if ($val !~ /^-[lL]/ && + # Skip -dlopen and -dlpreopen; these are explicitly allowed + # for Libtool libraries or programs. (Actually we are a bit + # laxe here since this code also applies to non-libtool + # libraries or programs, for which -dlopen and -dlopreopen + # are pure nonsense. Diagnosing this doesn't seems very + # important: the developer will quickly get complaints from + # the linker.) + $val !~ /^-dl(?:pre)?open$/ && + # Only get this error once. + ! $flagvar) + { + $flagvar = 1; + # FIXME: should display a stack of nested variables + # as context when $var != $subvar. + err_var ($var, "linker flags such as `$val' belong in " + . "`${prefix}LDFLAGS"); + } + return (); + } + elsif ($val !~ /^\@.*\@$/) + { + # Assume we have a file of some sort, and output it into the + # dependency variable. Autoconf substitutions are not output; + # rarely is a new dependency substituted into e.g. foo_LDADD + # -- but bad things (e.g. -lX11) are routinely substituted. + # Note that LIBOBJS and ALLOCA are exceptions to this rule, + # and handled specially below. + return $val; + } + elsif ($val =~ /^\@(LT)?LIBOBJS\@$/) + { + handle_LIBOBJS ($subvar, $cond, $1); + $seen_libobjs = 1; + return $val; + } + elsif ($val =~ /^\@(LT)?ALLOCA\@$/) + { + handle_ALLOCA ($subvar, $cond, $1); + return $val; + } + else + { + return (); + } + }); + + return $seen_libobjs; +} + +# handle_LIBOBJS_or_ALLOCA ($VAR) +# ------------------------------- +# Definitions common to LIBOBJS and ALLOCA. +# VAR should be one of LIBOBJS, LTLIBOBJS, ALLOCA, or LTALLOCA. +sub handle_LIBOBJS_or_ALLOCA ($) +{ + my ($var) = @_; + + my $dir = ''; + + # If LIBOBJS files must be built in another directory we have + # to define LIBOBJDIR and ensure the files get cleaned. + # Otherwise LIBOBJDIR can be left undefined, and the cleaning + # is achieved by `rm -f *.$(OBJEXT)' in compile.am. + if ($config_libobj_dir + && $relative_dir ne $config_libobj_dir) + { + if (option 'subdir-objects') + { + # In the top-level Makefile we do not use $(top_builddir), because + # we are already there, and since the targets are built without + # a $(top_builddir), it helps BSD Make to match them with + # dependencies. + $dir = "$config_libobj_dir/" if $config_libobj_dir ne '.'; + $dir = "$topsrcdir/$dir" if $relative_dir ne '.'; + define_variable ('LIBOBJDIR', "$dir", INTERNAL); + $clean_files{"\$($var)"} = MOSTLY_CLEAN; + # If LTLIBOBJS is used, we must also clear LIBOBJS (which might + # be created by libtool as a side-effect of creating LTLIBOBJS). + $clean_files{"\$($var)"} = MOSTLY_CLEAN if $var =~ s/^LT//; + + } + else + { + error ("`\$($var)' cannot be used outside `$dir' if" + . " `subdir-objects' is not set"); + } + } + + return $dir; +} + +sub handle_LIBOBJS ($$$) +{ + my ($var, $cond, $lt) = @_; + my $myobjext = $lt ? 'lo' : 'o'; + $lt ||= ''; + + $var->requires_variables ("\@${lt}LIBOBJS\@ used", $lt . 'LIBOBJS') + if ! keys %libsources; + + my $dir = handle_LIBOBJS_or_ALLOCA "${lt}LIBOBJS"; + + foreach my $iter (keys %libsources) + { + if ($iter =~ /\.[cly]$/) + { + &saw_extension ($&); + &saw_extension ('.c'); + } + + if ($iter =~ /\.h$/) + { + require_libsource_with_macro ($cond, $var, FOREIGN, $iter); + } + elsif ($iter ne 'alloca.c') + { + my $rewrite = $iter; + $rewrite =~ s/\.c$/.P$myobjext/; + $dep_files{$dir . '$(DEPDIR)/' . $rewrite} = 1; + $rewrite = "^" . quotemeta ($iter) . "\$"; + # Only require the file if it is not a built source. + my $bs = var ('BUILT_SOURCES'); + if (! $bs || ! grep (/$rewrite/, $bs->value_as_list_recursive)) + { + require_libsource_with_macro ($cond, $var, FOREIGN, $iter); + } + } + } +} + +sub handle_ALLOCA ($$$) +{ + my ($var, $cond, $lt) = @_; + my $myobjext = $lt ? 'lo' : 'o'; + $lt ||= ''; + my $dir = handle_LIBOBJS_or_ALLOCA "${lt}ALLOCA"; + + $var->requires_variables ("\@${lt}ALLOCA\@ used", $lt . 'ALLOCA'); + $dep_files{$dir . '$(DEPDIR)/alloca.P' . $myobjext} = 1; + require_libsource_with_macro ($cond, $var, FOREIGN, 'alloca.c'); + &saw_extension ('.c'); +} + +# Canonicalize the input parameter +sub canonicalize +{ + my ($string) = @_; + $string =~ tr/A-Za-z0-9_\@/_/c; + return $string; +} + +# Canonicalize a name, and check to make sure the non-canonical name +# is never used. Returns canonical name. Arguments are name and a +# list of suffixes to check for. +sub check_canonical_spelling +{ + my ($name, @suffixes) = @_; + + my $xname = &canonicalize ($name); + if ($xname ne $name) + { + foreach my $xt (@suffixes) + { + reject_var ("$name$xt", "use `$xname$xt', not `$name$xt'"); + } + } + + return $xname; +} + + +# handle_compile () +# ----------------- +# Set up the compile suite. +sub handle_compile () +{ + return + unless $get_object_extension_was_run; + + # Boilerplate. + my $default_includes = ''; + if (! option 'nostdinc') + { + my @incs = ('-I.'); + + my $var = var 'CONFIG_HEADER'; + if ($var) + { + foreach my $hdr (split (' ', $var->variable_value)) + { + push @incs, '-I' . dirname ($hdr); + } + } + # We want `-I. -I$(srcdir)', but the latter -I is redundant + # and unaesthetic in non-VPATH builds. We use `-I.@am__isrc@` + # instead. It will be replaced by '-I.' or '-I. -I$(srcdir)'. + # Items in CONFIG_HEADER are never in $(srcdir) so it is safe + # to just append @am__isrc@. + $default_includes = ' ' . uniq (@incs) . subst ('am__isrc'); + } + + my (@mostly_rms, @dist_rms); + foreach my $item (sort keys %compile_clean_files) + { + if ($compile_clean_files{$item} == MOSTLY_CLEAN) + { + push (@mostly_rms, "\t-rm -f $item"); + } + elsif ($compile_clean_files{$item} == DIST_CLEAN) + { + push (@dist_rms, "\t-rm -f $item"); + } + else + { + prog_error 'invalid entry in %compile_clean_files'; + } + } + + my ($coms, $vars, $rules) = + &file_contents_internal (1, "$libdir/am/compile.am", + new Automake::Location, + ('DEFAULT_INCLUDES' => $default_includes, + 'MOSTLYRMS' => join ("\n", @mostly_rms), + 'DISTRMS' => join ("\n", @dist_rms))); + $output_vars .= $vars; + $output_rules .= "$coms$rules"; + + # Check for automatic de-ANSI-fication. + if (option 'ansi2knr') + { + my ($ansi2knr_filename, $ansi2knr_where) = @{option 'ansi2knr'}; + my $ansi2knr_dir = ''; + + require_variables ($ansi2knr_where, "option `ansi2knr' is used", + TRUE, "ANSI2KNR", "U"); + + # topdir is where ansi2knr should be. + if ($ansi2knr_filename eq 'ansi2knr') + { + # Only require ansi2knr files if they should appear in + # this directory. + require_file ($ansi2knr_where, FOREIGN, + 'ansi2knr.c', 'ansi2knr.1'); + + # ansi2knr needs to be built before subdirs, so unshift it. + unshift (@all, '$(ANSI2KNR)'); + } + else + { + $ansi2knr_dir = dirname ($ansi2knr_filename); + } + + $output_rules .= &file_contents ('ansi2knr', + new Automake::Location, + 'ANSI2KNR-DIR' => $ansi2knr_dir); + + } +} + +# handle_libtool () +# ----------------- +# Handle libtool rules. +sub handle_libtool +{ + return unless var ('LIBTOOL'); + + # Libtool requires some files, but only at top level. + # (Starting with Libtool 2.0 we do not have to bother. These + # requirements are done with AC_REQUIRE_AUX_FILE.) + require_conf_file_with_macro (TRUE, 'LIBTOOL', FOREIGN, @libtool_files) + if $relative_dir eq '.' && ! $libtool_new_api; + + my @libtool_rms; + foreach my $item (sort keys %libtool_clean_directories) + { + my $dir = ($item eq '.') ? '' : "$item/"; + # .libs is for Unix, _libs for DOS. + push (@libtool_rms, "\t-rm -rf ${dir}.libs ${dir}_libs"); + } + + check_user_variables 'LIBTOOLFLAGS'; + + # Output the libtool compilation rules. + $output_rules .= &file_contents ('libtool', + new Automake::Location, + LTRMS => join ("\n", @libtool_rms)); +} + +# handle_programs () +# ------------------ +# Handle C programs. +sub handle_programs +{ + my @proglist = &am_install_var ('progs', 'PROGRAMS', + 'bin', 'sbin', 'libexec', 'pkglib', + 'noinst', 'check'); + return if ! @proglist; + + my $seen_global_libobjs = + var ('LDADD') && &handle_lib_objects ('', 'LDADD'); + + foreach my $pair (@proglist) + { + my ($where, $one_file) = @$pair; + + my $seen_libobjs = 0; + my $obj = get_object_extension '.$(OBJEXT)'; + + # Strip any $(EXEEXT) suffix the user might have added, or this + # will confuse &handle_source_transform and &check_canonical_spelling. + # We'll add $(EXEEXT) back later anyway. + $one_file =~ s/\$\(EXEEXT\)$//; + + $known_programs{$one_file} = $where; + + # Canonicalize names and check for misspellings. + my $xname = &check_canonical_spelling ($one_file, '_LDADD', '_LDFLAGS', + '_SOURCES', '_OBJECTS', + '_DEPENDENCIES'); + + $where->push_context ("while processing program `$one_file'"); + $where->set (INTERNAL->get); + + my $linker = &handle_source_transform ($xname, $one_file, $obj, $where, + NONLIBTOOL => 1, LIBTOOL => 0); + + if (var ($xname . "_LDADD")) + { + $seen_libobjs = &handle_lib_objects ($xname, $xname . '_LDADD'); + } + else + { + # User didn't define prog_LDADD override. So do it. + &define_variable ($xname . '_LDADD', '$(LDADD)', $where); + + # This does a bit too much work. But we need it to + # generate _DEPENDENCIES when appropriate. + if (var ('LDADD')) + { + $seen_libobjs = &handle_lib_objects ($xname, 'LDADD'); + } + } + + reject_var ($xname . '_LIBADD', + "use `${xname}_LDADD', not `${xname}_LIBADD'"); + + set_seen ($xname . '_DEPENDENCIES'); + set_seen ($xname . '_LDFLAGS'); + + # Determine program to use for link. + my $xlink = &define_per_target_linker_variable ($linker, $xname); + + # If the resulting program lies into a subdirectory, + # make sure this directory will exist. + my $dirstamp = require_build_directory_maybe ($one_file); + + $output_rules .= &file_contents ('program', + $where, + PROGRAM => $one_file, + XPROGRAM => $xname, + XLINK => $xlink, + DIRSTAMP => $dirstamp, + EXEEXT => '$(EXEEXT)'); + + if ($seen_libobjs || $seen_global_libobjs) + { + if (var ($xname . '_LDADD')) + { + &check_libobjs_sources ($xname, $xname . '_LDADD'); + } + elsif (var ('LDADD')) + { + &check_libobjs_sources ($xname, 'LDADD'); + } + } + } +} + + +# handle_libraries () +# ------------------- +# Handle libraries. +sub handle_libraries +{ + my @liblist = &am_install_var ('libs', 'LIBRARIES', + 'lib', 'pkglib', 'noinst', 'check'); + return if ! @liblist; + + my @prefix = am_primary_prefixes ('LIBRARIES', 0, 'lib', 'pkglib', + 'noinst', 'check'); + + if (@prefix) + { + my $var = rvar ($prefix[0] . '_LIBRARIES'); + $var->requires_variables ('library used', 'RANLIB'); + } + + &define_variable ('AR', 'ar', INTERNAL); + &define_variable ('ARFLAGS', 'cru', INTERNAL); + + foreach my $pair (@liblist) + { + my ($where, $onelib) = @$pair; + + my $seen_libobjs = 0; + # Check that the library fits the standard naming convention. + my $bn = basename ($onelib); + if ($bn !~ /^lib.*\.a$/) + { + $bn =~ s/^(?:lib)?(.*?)(?:\.[^.]*)?$/lib$1.a/; + my $suggestion = dirname ($onelib) . "/$bn"; + $suggestion =~ s|^\./||g; + msg ('error-gnu/warn', $where, + "`$onelib' is not a standard library name\n" + . "did you mean `$suggestion'?") + } + + $where->push_context ("while processing library `$onelib'"); + $where->set (INTERNAL->get); + + my $obj = get_object_extension '.$(OBJEXT)'; + + # Canonicalize names and check for misspellings. + my $xlib = &check_canonical_spelling ($onelib, '_LIBADD', '_SOURCES', + '_OBJECTS', '_DEPENDENCIES', + '_AR'); + + if (! var ($xlib . '_AR')) + { + &define_variable ($xlib . '_AR', '$(AR) $(ARFLAGS)', $where); + } + + # Generate support for conditional object inclusion in + # libraries. + if (var ($xlib . '_LIBADD')) + { + if (&handle_lib_objects ($xlib, $xlib . '_LIBADD')) + { + $seen_libobjs = 1; + } + } + else + { + &define_variable ($xlib . "_LIBADD", '', $where); + } + + reject_var ($xlib . '_LDADD', + "use `${xlib}_LIBADD', not `${xlib}_LDADD'"); + + # Make sure we at look at this. + set_seen ($xlib . '_DEPENDENCIES'); + + &handle_source_transform ($xlib, $onelib, $obj, $where, + NONLIBTOOL => 1, LIBTOOL => 0); + + # If the resulting library lies into a subdirectory, + # make sure this directory will exist. + my $dirstamp = require_build_directory_maybe ($onelib); + + $output_rules .= &file_contents ('library', + $where, + LIBRARY => $onelib, + XLIBRARY => $xlib, + DIRSTAMP => $dirstamp); + + if ($seen_libobjs) + { + if (var ($xlib . '_LIBADD')) + { + &check_libobjs_sources ($xlib, $xlib . '_LIBADD'); + } + } + } +} + + +# handle_ltlibraries () +# --------------------- +# Handle shared libraries. +sub handle_ltlibraries +{ + my @liblist = &am_install_var ('ltlib', 'LTLIBRARIES', + 'noinst', 'lib', 'pkglib', 'check'); + return if ! @liblist; + + my @prefix = am_primary_prefixes ('LTLIBRARIES', 0, 'lib', 'pkglib', + 'noinst', 'check'); + + if (@prefix) + { + my $var = rvar ($prefix[0] . '_LTLIBRARIES'); + $var->requires_variables ('Libtool library used', 'LIBTOOL'); + } + + my %instdirs = (); + my %instconds = (); + my %liblocations = (); # Location (in Makefile.am) of each library. + + foreach my $key (@prefix) + { + # Get the installation directory of each library. + (my $dir = $key) =~ s/^nobase_//; + my $var = rvar ($key . '_LTLIBRARIES'); + + # We reject libraries which are installed in several places + # in the same condition, because we can only specify one + # `-rpath' option. + $var->traverse_recursively + (sub + { + my ($var, $val, $cond, $full_cond) = @_; + my $hcond = $full_cond->human; + my $where = $var->rdef ($cond)->location; + # A library cannot be installed in different directory + # in overlapping conditions. + if (exists $instconds{$val}) + { + my ($msg, $acond) = + $instconds{$val}->ambiguous_p ($val, $full_cond); + + if ($msg) + { + error ($where, $msg, partial => 1); + + my $dirtxt = "installed in `$dir'"; + $dirtxt = "built for `$dir'" + if $dir eq 'EXTRA' || $dir eq 'noinst' || $dir eq 'check'; + my $dircond = + $full_cond->true ? "" : " in condition $hcond"; + + error ($where, "`$val' should be $dirtxt$dircond ...", + partial => 1); + + my $hacond = $acond->human; + my $adir = $instdirs{$val}{$acond}; + my $adirtxt = "installed in `$adir'"; + $adirtxt = "built for `$adir'" + if ($adir eq 'EXTRA' || $adir eq 'noinst' + || $adir eq 'check'); + my $adircond = $acond->true ? "" : " in condition $hacond"; + + my $onlyone = ($dir ne $adir) ? + ("\nLibtool libraries can be built for only one " + . "destination.") : ""; + + error ($liblocations{$val}{$acond}, + "... and should also be $adirtxt$adircond.$onlyone"); + return; + } + } + else + { + $instconds{$val} = new Automake::DisjConditions; + } + $instdirs{$val}{$full_cond} = $dir; + $liblocations{$val}{$full_cond} = $where; + $instconds{$val} = $instconds{$val}->merge ($full_cond); + }, + sub + { + return (); + }, + skip_ac_subst => 1); + } + + foreach my $pair (@liblist) + { + my ($where, $onelib) = @$pair; + + my $seen_libobjs = 0; + my $obj = get_object_extension '.lo'; + + # Canonicalize names and check for misspellings. + my $xlib = &check_canonical_spelling ($onelib, '_LIBADD', '_LDFLAGS', + '_SOURCES', '_OBJECTS', + '_DEPENDENCIES'); + + # Check that the library fits the standard naming convention. + my $libname_rx = '^lib.*\.la'; + my $ldvar = var ("${xlib}_LDFLAGS") || var ('AM_LDFLAGS'); + my $ldvar2 = var ('LDFLAGS'); + if (($ldvar && grep (/-module/, $ldvar->value_as_list_recursive)) + || ($ldvar2 && grep (/-module/, $ldvar2->value_as_list_recursive))) + { + # Relax name checking for libtool modules. + $libname_rx = '\.la'; + } + + my $bn = basename ($onelib); + if ($bn !~ /$libname_rx$/) + { + my $type = 'library'; + if ($libname_rx eq '\.la') + { + $bn =~ s/^(lib|)(.*?)(?:\.[^.]*)?$/$1$2.la/; + $type = 'module'; + } + else + { + $bn =~ s/^(?:lib)?(.*?)(?:\.[^.]*)?$/lib$1.la/; + } + my $suggestion = dirname ($onelib) . "/$bn"; + $suggestion =~ s|^\./||g; + msg ('error-gnu/warn', $where, + "`$onelib' is not a standard libtool $type name\n" + . "did you mean `$suggestion'?") + } + + $where->push_context ("while processing Libtool library `$onelib'"); + $where->set (INTERNAL->get); + + # Make sure we look at these. + set_seen ($xlib . '_LDFLAGS'); + set_seen ($xlib . '_DEPENDENCIES'); + + # Generate support for conditional object inclusion in + # libraries. + if (var ($xlib . '_LIBADD')) + { + if (&handle_lib_objects ($xlib, $xlib . '_LIBADD')) + { + $seen_libobjs = 1; + } + } + else + { + &define_variable ($xlib . "_LIBADD", '', $where); + } + + reject_var ("${xlib}_LDADD", + "use `${xlib}_LIBADD', not `${xlib}_LDADD'"); + + + my $linker = &handle_source_transform ($xlib, $onelib, $obj, $where, + NONLIBTOOL => 0, LIBTOOL => 1); + + # Determine program to use for link. + my $xlink = &define_per_target_linker_variable ($linker, $xlib); + + my $rpathvar = "am_${xlib}_rpath"; + my $rpath = "\$($rpathvar)"; + foreach my $rcond ($instconds{$onelib}->conds) + { + my $val; + if ($instdirs{$onelib}{$rcond} eq 'EXTRA' + || $instdirs{$onelib}{$rcond} eq 'noinst' + || $instdirs{$onelib}{$rcond} eq 'check') + { + # It's an EXTRA_ library, so we can't specify -rpath, + # because we don't know where the library will end up. + # The user probably knows, but generally speaking automake + # doesn't -- and in fact configure could decide + # dynamically between two different locations. + $val = ''; + } + else + { + $val = ('-rpath $(' . $instdirs{$onelib}{$rcond} . 'dir)'); + } + if ($rcond->true) + { + # If $rcond is true there is only one condition and + # there is no point defining an helper variable. + $rpath = $val; + } + else + { + define_pretty_variable ($rpathvar, $rcond, INTERNAL, $val); + } + } + + # If the resulting library lies into a subdirectory, + # make sure this directory will exist. + my $dirstamp = require_build_directory_maybe ($onelib); + + # Remember to cleanup .libs/ in this directory. + my $dirname = dirname $onelib; + $libtool_clean_directories{$dirname} = 1; + + $output_rules .= &file_contents ('ltlibrary', + $where, + LTLIBRARY => $onelib, + XLTLIBRARY => $xlib, + RPATH => $rpath, + XLINK => $xlink, + DIRSTAMP => $dirstamp); + if ($seen_libobjs) + { + if (var ($xlib . '_LIBADD')) + { + &check_libobjs_sources ($xlib, $xlib . '_LIBADD'); + } + } + } +} + +# See if any _SOURCES variable were misspelled. +sub check_typos () +{ + # It is ok if the user sets this particular variable. + set_seen 'AM_LDFLAGS'; + + foreach my $primary ('SOURCES', 'LIBADD', 'LDADD', 'LDFLAGS', 'DEPENDENCIES') + { + foreach my $var (variables $primary) + { + my $varname = $var->name; + # A configure variable is always legitimate. + next if exists $configure_vars{$varname}; + + for my $cond ($var->conditions->conds) + { + $varname =~ /^(?:nobase_)?(?:dist_|nodist_)?(.*)_[[:alnum:]]+$/; + msg_var ('syntax', $var, "variable `$varname' is defined but no" + . " program or\nlibrary has `$1' as canonic name" + . " (possible typo)") + unless $var->rdef ($cond)->seen; + } + } + } +} + + +# Handle scripts. +sub handle_scripts +{ + # NOTE we no longer automatically clean SCRIPTS, because it is + # useful to sometimes distribute scripts verbatim. This happens + # e.g. in Automake itself. + &am_install_var ('-candist', 'scripts', 'SCRIPTS', + 'bin', 'sbin', 'libexec', 'pkgdata', + 'noinst', 'check'); +} + + + + +## ------------------------ ## +## Handling Texinfo files. ## +## ------------------------ ## + +# ($OUTFILE, $VFILE, @CLEAN_FILES) +# &scan_texinfo_file ($FILENAME) +# ------------------------------ +# $OUTFILE - name of the info file produced by $FILENAME. +# $VFILE - name of the version.texi file used (undef if none). +# @CLEAN_FILES - list of byproducts (indexes etc.) +sub scan_texinfo_file ($) +{ + my ($filename) = @_; + + # Some of the following extensions are always created, no matter + # whether indexes are used or not. Other (like cps, fns, ... pgs) + # are only created when they are used. We used to scan $FILENAME + # for their use, but that is not enough: they could be used in + # included files. We can't scan included files because we don't + # know the include path. Therefore we always erase these files, no + # matter whether they are used or not. + # + # (tmp is only created if an @macro is used and a certain e-TeX + # feature is not available.) + my %clean_suffixes = + map { $_ => 1 } (qw(aux log toc tmp + cp cps + fn fns + ky kys + vr vrs + tp tps + pg pgs)); # grep 'new.*index' texinfo.tex + + my $texi = new Automake::XFile "< $filename"; + verb "reading $filename"; + + my ($outfile, $vfile); + while ($_ = $texi->getline) + { + if (/^\@setfilename +(\S+)/) + { + # Honor only the first @setfilename. (It's possible to have + # more occurrences later if the manual shows examples of how + # to use @setfilename...) + next if $outfile; + + $outfile = $1; + if ($outfile =~ /\.([^.]+)$/ && $1 ne 'info') + { + error ("$filename:$.", + "output `$outfile' has unrecognized extension"); + return; + } + } + # A "version.texi" file is actually any file whose name matches + # "vers*.texi". + elsif (/^\@include\s+(vers[^.]*\.texi)\s*$/) + { + $vfile = $1; + } + + # Try to find new or unused indexes. + + # Creating a new category of index. + elsif (/^\@def(code)?index (\w+)/) + { + $clean_suffixes{$2} = 1; + $clean_suffixes{"$2s"} = 1; + } + + # Merging an index into an another. + elsif (/^\@syn(code)?index (\w+) (\w+)/) + { + delete $clean_suffixes{"$2s"}; + $clean_suffixes{"$3s"} = 1; + } + + } + + if (! $outfile) + { + err_am "`$filename' missing \@setfilename"; + return; + } + + my $infobase = basename ($filename); + $infobase =~ s/\.te?xi(nfo)?$//; + return ($outfile, $vfile, + map { "$infobase.$_" } (sort keys %clean_suffixes)); +} + + +# ($DIRSTAMP, @CLEAN_FILES) +# output_texinfo_build_rules ($SOURCE, $DEST, $INSRC, @DEPENDENCIES) +# ------------------------------------------------------------------ +# SOURCE - the source Texinfo file +# DEST - the destination Info file +# INSRC - wether DEST should be built in the source tree +# DEPENDENCIES - known dependencies +sub output_texinfo_build_rules ($$$@) +{ + my ($source, $dest, $insrc, @deps) = @_; + + # Split `a.texi' into `a' and `.texi'. + my ($spfx, $ssfx) = ($source =~ /^(.*?)(\.[^.]*)?$/); + my ($dpfx, $dsfx) = ($dest =~ /^(.*?)(\.[^.]*)?$/); + + $ssfx ||= ""; + $dsfx ||= ""; + + # We can output two kinds of rules: the "generic" rules use Make + # suffix rules and are appropriate when $source and $dest do not lie + # in a sub-directory; the "specific" rules are needed in the other + # case. + # + # The former are output only once (this is not really apparent here, + # but just remember that some logic deeper in Automake will not + # output the same rule twice); while the later need to be output for + # each Texinfo source. + my $generic; + my $makeinfoflags; + my $sdir = dirname $source; + if ($sdir eq '.' && dirname ($dest) eq '.') + { + $generic = 1; + $makeinfoflags = '-I $(srcdir)'; + } + else + { + $generic = 0; + $makeinfoflags = "-I $sdir -I \$(srcdir)/$sdir"; + } + + # A directory can contain two kinds of info files: some built in the + # source tree, and some built in the build tree. The rules are + # different in each case. However we cannot output two different + # set of generic rules. Because in-source builds are more usual, we + # use generic rules in this case and fall back to "specific" rules + # for build-dir builds. (It should not be a problem to invert this + # if needed.) + $generic = 0 unless $insrc; + + # We cannot use a suffix rule to build info files with an empty + # extension. Otherwise we would output a single suffix inference + # rule, with separate dependencies, as in + # + # .texi: + # $(MAKEINFO) ... + # foo.info: foo.texi + # + # which confuse Solaris make. (See the Autoconf manual for + # details.) Therefore we use a specific rule in this case. This + # applies to info files only (dvi and pdf files always have an + # extension). + my $generic_info = ($generic && $dsfx) ? 1 : 0; + + # If the resulting file lie into a subdirectory, + # make sure this directory will exist. + my $dirstamp = require_build_directory_maybe ($dest); + + my $dipfx = ($insrc ? '$(srcdir)/' : '') . $dpfx; + + $output_rules .= file_contents ('texibuild', + new Automake::Location, + DEPS => "@deps", + DEST_PREFIX => $dpfx, + DEST_INFO_PREFIX => $dipfx, + DEST_SUFFIX => $dsfx, + DIRSTAMP => $dirstamp, + GENERIC => $generic, + GENERIC_INFO => $generic_info, + INSRC => $insrc, + MAKEINFOFLAGS => $makeinfoflags, + SOURCE => ($generic + ? '$<' : $source), + SOURCE_INFO => ($generic_info + ? '$<' : $source), + SOURCE_REAL => $source, + SOURCE_SUFFIX => $ssfx, + ); + return ($dirstamp, "$dpfx.dvi", "$dpfx.pdf", "$dpfx.ps", "$dpfx.html"); +} + + +# $TEXICLEANS +# handle_texinfo_helper ($info_texinfos) +# -------------------------------------- +# Handle all Texinfo source; helper for handle_texinfo. +sub handle_texinfo_helper ($) +{ + my ($info_texinfos) = @_; + my (@infobase, @info_deps_list, @texi_deps); + my %versions; + my $done = 0; + my @texi_cleans; + + # Build a regex matching user-cleaned files. + my $d = var 'DISTCLEANFILES'; + my $c = var 'CLEANFILES'; + my @f = (); + push @f, $d->value_as_list_recursive (inner_expand => 1) if $d; + push @f, $c->value_as_list_recursive (inner_expand => 1) if $c; + @f = map { s|[^A-Za-z_0-9*\[\]\-]|\\$&|g; s|\*|[^/]*|g; $_; } @f; + my $user_cleaned_files = '^(?:' . join ('|', @f) . ')$'; + + foreach my $texi + ($info_texinfos->value_as_list_recursive (inner_expand => 1)) + { + my $infobase = $texi; + $infobase =~ s/\.(txi|texinfo|texi)$//; + + if ($infobase eq $texi) + { + # FIXME: report line number. + err_am "texinfo file `$texi' has unrecognized extension"; + next; + } + + push @infobase, $infobase; + + # If 'version.texi' is referenced by input file, then include + # automatic versioning capability. + my ($out_file, $vtexi, @clean_files) = + scan_texinfo_file ("$relative_dir/$texi") + or next; + push (@texi_cleans, @clean_files); + + # If the Texinfo source is in a subdirectory, create the + # resulting info in this subdirectory. If it is in the current + # directory, try hard to not prefix "./" because it breaks the + # generic rules. + my $outdir = dirname ($texi) . '/'; + $outdir = "" if $outdir eq './'; + $out_file = $outdir . $out_file; + + # Until Automake 1.6.3, .info files were built in the + # source tree. This was an obstacle to the support of + # non-distributed .info files, and non-distributed .texi + # files. + # + # * Non-distributed .texi files is important in some packages + # where .texi files are built at make time, probably using + # other binaries built in the package itself, maybe using + # tools or information found on the build host. Because + # these files are not distributed they are always rebuilt + # at make time; they should therefore not lie in the source + # directory. One plan was to support this using + # nodist_info_TEXINFOS or something similar. (Doing this + # requires some sanity checks. For instance Automake should + # not allow: + # dist_info_TEXINFO = foo.texi + # nodist_foo_TEXINFO = included.texi + # because a distributed file should never depend on a + # non-distributed file.) + # + # * If .texi files are not distributed, then .info files should + # not be distributed either. There are also cases where one + # want to distribute .texi files, but do not want to + # distribute the .info files. For instance the Texinfo package + # distributes the tool used to build these files; it would + # be a waste of space to distribute them. It's not clear + # which syntax we should use to indicate that .info files should + # not be distributed. Akim Demaille suggested that eventually + # we switch to a new syntax: + # | Maybe we should take some inspiration from what's already + # | done in the rest of Automake. Maybe there is too much + # | syntactic sugar here, and you want + # | nodist_INFO = bar.info + # | dist_bar_info_SOURCES = bar.texi + # | bar_texi_DEPENDENCIES = foo.texi + # | with a bit of magic to have bar.info represent the whole + # | bar*info set. That's a lot more verbose that the current + # | situation, but it is # not new, hence the user has less + # | to learn. + # | + # | But there is still too much room for meaningless specs: + # | nodist_INFO = bar.info + # | dist_bar_info_SOURCES = bar.texi + # | dist_PS = bar.ps something-written-by-hand.ps + # | nodist_bar_ps_SOURCES = bar.texi + # | bar_texi_DEPENDENCIES = foo.texi + # | here bar.texi is dist_ in line 2, and nodist_ in 4. + # + # Back to the point, it should be clear that in order to support + # non-distributed .info files, we need to build them in the + # build tree, not in the source tree (non-distributed .texi + # files are less of a problem, because we do not output build + # rules for them). In Automake 1.7 .info build rules have been + # largely cleaned up so that .info files get always build in the + # build tree, even when distributed. The idea was that + # (1) if during a VPATH build the .info file was found to be + # absent or out-of-date (in the source tree or in the + # build tree), Make would rebuild it in the build tree. + # If an up-to-date source-tree of the .info file existed, + # make would not rebuild it in the build tree. + # (2) having two copies of .info files, one in the source tree + # and one (newer) in the build tree is not a problem + # because `make dist' always pick files in the build tree + # first. + # However it turned out the be a bad idea for several reasons: + # * Tru64, OpenBSD, and FreeBSD (not NetBSD) Make do not behave + # like GNU Make on point (1) above. These implementations + # of Make would always rebuild .info files in the build + # tree, even if such files were up to date in the source + # tree. Consequently, it was impossible to perform a VPATH + # build of a package containing Texinfo files using these + # Make implementations. + # (Refer to the Autoconf Manual, section "Limitation of + # Make", paragraph "VPATH", item "target lookup", for + # an account of the differences between these + # implementations.) + # * The GNU Coding Standards require these files to be built + # in the source-tree (when they are distributed, that is). + # * Keeping a fresher copy of distributed files in the + # build tree can be annoying during development because + # - if the files is kept under CVS, you really want it + # to be updated in the source tree + # - it is confusing that `make distclean' does not erase + # all files in the build tree. + # + # Consequently, starting with Automake 1.8, .info files are + # built in the source tree again. Because we still plan to + # support non-distributed .info files at some point, we + # have a single variable ($INSRC) that controls whether + # the current .info file must be built in the source tree + # or in the build tree. Actually this variable is switched + # off for .info files that appear to be cleaned; this is + # for backward compatibility with package such as Texinfo, + # which do things like + # info_TEXINFOS = texinfo.txi info-stnd.texi info.texi + # DISTCLEANFILES = texinfo texinfo-* info*.info* + # # Do not create info files for distribution. + # dist-info: + # in order not to distribute .info files. + my $insrc = ($out_file =~ $user_cleaned_files) ? 0 : 1; + + my $soutdir = '$(srcdir)/' . $outdir; + $outdir = $soutdir if $insrc; + + # If user specified file_TEXINFOS, then use that as explicit + # dependency list. + @texi_deps = (); + push (@texi_deps, "$soutdir$vtexi") if $vtexi; + + my $canonical = canonicalize ($infobase); + if (var ($canonical . "_TEXINFOS")) + { + push (@texi_deps, '$(' . $canonical . '_TEXINFOS)'); + push_dist_common ('$(' . $canonical . '_TEXINFOS)'); + } + + my ($dirstamp, @cfiles) = + output_texinfo_build_rules ($texi, $out_file, $insrc, @texi_deps); + push (@texi_cleans, @cfiles); + + push (@info_deps_list, $out_file); + + # If a vers*.texi file is needed, emit the rule. + if ($vtexi) + { + err_am ("`$vtexi', included in `$texi', " + . "also included in `$versions{$vtexi}'") + if defined $versions{$vtexi}; + $versions{$vtexi} = $texi; + + # We number the stamp-vti files. This is doable since the + # actual names don't matter much. We only number starting + # with the second one, so that the common case looks nice. + my $vti = ($done ? $done : 'vti'); + ++$done; + + # This is ugly, but it is our historical practice. + if ($config_aux_dir_set_in_configure_ac) + { + require_conf_file_with_macro (TRUE, 'info_TEXINFOS', FOREIGN, + 'mdate-sh'); + } + else + { + require_file_with_macro (TRUE, 'info_TEXINFOS', + FOREIGN, 'mdate-sh'); + } + + my $conf_dir; + if ($config_aux_dir_set_in_configure_ac) + { + $conf_dir = "$am_config_aux_dir/"; + } + else + { + $conf_dir = '$(srcdir)/'; + } + $output_rules .= file_contents ('texi-vers', + new Automake::Location, + TEXI => $texi, + VTI => $vti, + STAMPVTI => "${soutdir}stamp-$vti", + VTEXI => "$soutdir$vtexi", + MDDIR => $conf_dir, + DIRSTAMP => $dirstamp); + } + } + + # Handle location of texinfo.tex. + my $need_texi_file = 0; + my $texinfodir; + if (var ('TEXINFO_TEX')) + { + # The user defined TEXINFO_TEX so assume he knows what he is + # doing. + $texinfodir = ('$(srcdir)/' + . dirname (variable_value ('TEXINFO_TEX'))); + } + elsif (option 'cygnus') + { + $texinfodir = '$(top_srcdir)/../texinfo'; + define_variable ('TEXINFO_TEX', "$texinfodir/texinfo.tex", INTERNAL); + } + elsif ($config_aux_dir_set_in_configure_ac) + { + $texinfodir = $am_config_aux_dir; + define_variable ('TEXINFO_TEX', "$texinfodir/texinfo.tex", INTERNAL); + $need_texi_file = 2; # so that we require_conf_file later + } + else + { + $texinfodir = '$(srcdir)'; + $need_texi_file = 1; + } + define_variable ('am__TEXINFO_TEX_DIR', $texinfodir, INTERNAL); + + push (@dist_targets, 'dist-info'); + + if (! option 'no-installinfo') + { + # Make sure documentation is made and installed first. Use + # $(INFO_DEPS), not 'info', because otherwise recursive makes + # get run twice during "make all". + unshift (@all, '$(INFO_DEPS)'); + } + + define_files_variable ("DVIS", @infobase, 'dvi', INTERNAL); + define_files_variable ("PDFS", @infobase, 'pdf', INTERNAL); + define_files_variable ("PSS", @infobase, 'ps', INTERNAL); + define_files_variable ("HTMLS", @infobase, 'html', INTERNAL); + + # This next isn't strictly needed now -- the places that look here + # could easily be changed to look in info_TEXINFOS. But this is + # probably better, in case noinst_TEXINFOS is ever supported. + define_variable ("TEXINFOS", variable_value ('info_TEXINFOS'), INTERNAL); + + # Do some error checking. Note that this file is not required + # when in Cygnus mode; instead we defined TEXINFO_TEX explicitly + # up above. + if ($need_texi_file && ! option 'no-texinfo.tex') + { + if ($need_texi_file > 1) + { + require_conf_file_with_macro (TRUE, 'info_TEXINFOS', FOREIGN, + 'texinfo.tex'); + } + else + { + require_file_with_macro (TRUE, 'info_TEXINFOS', FOREIGN, + 'texinfo.tex'); + } + } + + return makefile_wrap ("", "\t ", @texi_cleans); +} + + +# handle_texinfo () +# ----------------- +# Handle all Texinfo source. +sub handle_texinfo () +{ + reject_var 'TEXINFOS', "`TEXINFOS' is an anachronism; use `info_TEXINFOS'"; + # FIXME: I think this is an obsolete future feature name. + reject_var 'html_TEXINFOS', "HTML generation not yet supported"; + + my $info_texinfos = var ('info_TEXINFOS'); + my $texiclean = ""; + if ($info_texinfos) + { + $texiclean = handle_texinfo_helper ($info_texinfos); + } + $output_rules .= file_contents ('texinfos', + new Automake::Location, + TEXICLEAN => $texiclean, + 'LOCAL-TEXIS' => !!$info_texinfos); +} + + +# Handle any man pages. +sub handle_man_pages +{ + reject_var 'MANS', "`MANS' is an anachronism; use `man_MANS'"; + + # Find all the sections in use. We do this by first looking for + # "standard" sections, and then looking for any additional + # sections used in man_MANS. + my (%sections, %vlist); + # We handle nodist_ for uniformity. man pages aren't distributed + # by default so it isn't actually very important. + foreach my $pfx ('', 'dist_', 'nodist_') + { + # Add more sections as needed. + foreach my $section ('0'..'9', 'n', 'l') + { + my $varname = $pfx . 'man' . $section . '_MANS'; + if (var ($varname)) + { + $sections{$section} = 1; + $varname = '$(' . $varname . ')'; + $vlist{$varname} = 1; + + &push_dist_common ($varname) + if $pfx eq 'dist_'; + } + } + + my $varname = $pfx . 'man_MANS'; + my $var = var ($varname); + if ($var) + { + foreach ($var->value_as_list_recursive) + { + # A page like `foo.1c' goes into man1dir. + if (/\.([0-9a-z])([a-z]*)$/) + { + $sections{$1} = 1; + } + } + + $varname = '$(' . $varname . ')'; + $vlist{$varname} = 1; + &push_dist_common ($varname) + if $pfx eq 'dist_'; + } + } + + return unless %sections; + + # Now for each section, generate an install and uninstall rule. + # Sort sections so output is deterministic. + foreach my $section (sort keys %sections) + { + $output_rules .= &file_contents ('mans', + new Automake::Location, + SECTION => $section); + } + + my @mans = sort keys %vlist; + $output_vars .= file_contents ('mans-vars', + new Automake::Location, + MANS => "@mans"); + + push (@all, '$(MANS)') + unless option 'no-installman'; +} + +# Handle DATA variables. +sub handle_data +{ + &am_install_var ('-noextra', '-candist', 'data', 'DATA', + 'data', 'dataroot', 'dvi', 'html', 'pdf', 'ps', + 'sysconf', 'sharedstate', 'localstate', + 'pkgdata', 'lisp', 'noinst', 'check'); +} + +# Handle TAGS. +sub handle_tags +{ + my @tag_deps = (); + my @ctag_deps = (); + if (var ('SUBDIRS')) + { + $output_rules .= ("tags-recursive:\n" + . "\tlist=\'\$(SUBDIRS)\'; for subdir in \$\$list; do \\\n" + # Never fail here if a subdir fails; it + # isn't important. + . "\t test \"\$\$subdir\" = . || (cd \$\$subdir" + . " && \$(MAKE) \$(AM_MAKEFLAGS) tags); \\\n" + . "\tdone\n"); + push (@tag_deps, 'tags-recursive'); + &depend ('.PHONY', 'tags-recursive'); + + $output_rules .= ("ctags-recursive:\n" + . "\tlist=\'\$(SUBDIRS)\'; for subdir in \$\$list; do \\\n" + # Never fail here if a subdir fails; it + # isn't important. + . "\t test \"\$\$subdir\" = . || (cd \$\$subdir" + . " && \$(MAKE) \$(AM_MAKEFLAGS) ctags); \\\n" + . "\tdone\n"); + push (@ctag_deps, 'ctags-recursive'); + &depend ('.PHONY', 'ctags-recursive'); + } + + if (&saw_sources_p (1) + || var ('ETAGS_ARGS') + || @tag_deps) + { + my @config; + foreach my $spec (@config_headers) + { + my ($out, @ins) = split_config_file_spec ($spec); + foreach my $in (@ins) + { + # If the config header source is in this directory, + # require it. + push @config, basename ($in) + if $relative_dir eq dirname ($in); + } + } + $output_rules .= &file_contents ('tags', + new Automake::Location, + CONFIG => "@config", + TAGSDIRS => "@tag_deps", + CTAGSDIRS => "@ctag_deps"); + + set_seen 'TAGS_DEPENDENCIES'; + } + elsif (reject_var ('TAGS_DEPENDENCIES', + "doesn't make sense to define `TAGS_DEPENDENCIES'" + . "without\nsources or `ETAGS_ARGS'")) + { + } + else + { + # Every Makefile must define some sort of TAGS rule. + # Otherwise, it would be possible for a top-level "make TAGS" + # to fail because some subdirectory failed. + $output_rules .= "tags: TAGS\nTAGS:\n\n"; + # Ditto ctags. + $output_rules .= "ctags: CTAGS\nCTAGS:\n\n"; + } +} + +# Handle multilib support. +sub handle_multilib +{ + if ($seen_multilib && $relative_dir eq '.') + { + $output_rules .= &file_contents ('multilib', new Automake::Location); + push (@all, 'all-multi'); + } +} + + +# user_phony_rule ($NAME) +# ----------------------- +# Return false if rule $NAME does not exist. Otherwise, +# declare it as phony, complete its definition (in case it is +# conditional), and return its Automake::Rule instance. +sub user_phony_rule ($) +{ + my ($name) = @_; + my $rule = rule $name; + if ($rule) + { + depend ('.PHONY', $name); + # Define $NAME in all condition where it is not already defined, + # so that it is always OK to depend on $NAME. + for my $c ($rule->not_always_defined_in_cond (TRUE)->conds) + { + Automake::Rule::define ($name, 'internal', RULE_AUTOMAKE, + $c, INTERNAL); + $output_rules .= $c->subst_string . "$name:\n"; + } + } + return $rule; +} + + +# $BOOLEAN +# &for_dist_common ($A, $B) +# ------------------------- +# Subroutine for &handle_dist: sort files to dist. +# +# We put README first because it then becomes easier to make a +# Usenet-compliant shar file (in these, README must be first). +# +# FIXME: do more ordering of files here. +sub for_dist_common +{ + return 0 + if $a eq $b; + return -1 + if $a eq 'README'; + return 1 + if $b eq 'README'; + return $a cmp $b; +} + +# handle_dist +# ----------- +# Handle 'dist' target. +sub handle_dist () +{ + # Substitutions for distdir.am + my %transform; + + # Define DIST_SUBDIRS. This must always be done, regardless of the + # no-dist setting: target like `distclean' or `maintainer-clean' use it. + my $subdirs = var ('SUBDIRS'); + if ($subdirs) + { + # If SUBDIRS is conditionally defined, then set DIST_SUBDIRS + # to all possible directories, and use it. If DIST_SUBDIRS is + # defined, just use it. + + # Note that we check DIST_SUBDIRS first on purpose, so that + # we don't call has_conditional_contents for now reason. + # (In the past one project used so many conditional subdirectories + # that calling has_conditional_contents on SUBDIRS caused + # automake to grow to 150Mb -- this should not happen with + # the current implementation of has_conditional_contents, + # but it's more efficient to avoid the call anyway.) + if (var ('DIST_SUBDIRS')) + { + } + elsif ($subdirs->has_conditional_contents) + { + define_pretty_variable + ('DIST_SUBDIRS', TRUE, INTERNAL, + uniq ($subdirs->value_as_list_recursive)); + } + else + { + # We always define this because that is what `distclean' + # wants. + define_pretty_variable ('DIST_SUBDIRS', TRUE, INTERNAL, + '$(SUBDIRS)'); + } + } + + # The remaining definitions are only required when a dist target is used. + return if option 'no-dist'; + + # At least one of the archive formats must be enabled. + if ($relative_dir eq '.') + { + my $archive_defined = option 'no-dist-gzip' ? 0 : 1; + $archive_defined ||= + grep { option "dist-$_" } ('shar', 'zip', 'tarZ', 'bzip2'); + error (option 'no-dist-gzip', + "no-dist-gzip specified but no dist-* specified, " + . "at least one archive format must be enabled") + unless $archive_defined; + } + + # Look for common files that should be included in distribution. + # If the aux dir is set, and it does not have a Makefile.am, then + # we check for these files there as well. + my $check_aux = 0; + if ($relative_dir eq '.' + && $config_aux_dir_set_in_configure_ac) + { + if (! &is_make_dir ($config_aux_dir)) + { + $check_aux = 1; + } + } + foreach my $cfile (@common_files) + { + if (dir_has_case_matching_file ($relative_dir, $cfile) + # The file might be absent, but if it can be built it's ok. + || rule $cfile) + { + &push_dist_common ($cfile); + } + + # Don't use `elsif' here because a file might meaningfully + # appear in both directories. + if ($check_aux && dir_has_case_matching_file ($config_aux_dir, $cfile)) + { + &push_dist_common ("$config_aux_dir/$cfile") + } + } + + # We might copy elements from $configure_dist_common to + # %dist_common if we think we need to. If the file appears in our + # directory, we would have discovered it already, so we don't + # check that. But if the file is in a subdir without a Makefile, + # we want to distribute it here if we are doing `.'. Ugly! + if ($relative_dir eq '.') + { + foreach my $file (split (' ' , $configure_dist_common)) + { + push_dist_common ($file) + unless is_make_dir (dirname ($file)); + } + } + + # Files to distributed. Don't use ->value_as_list_recursive + # as it recursively expands `$(dist_pkgdata_DATA)' etc. + my @dist_common = split (' ', rvar ('DIST_COMMON')->variable_value); + @dist_common = uniq (sort for_dist_common (@dist_common)); + variable_delete 'DIST_COMMON'; + define_pretty_variable ('DIST_COMMON', TRUE, INTERNAL, @dist_common); + + # Now that we've processed DIST_COMMON, disallow further attempts + # to set it. + $handle_dist_run = 1; + + # Scan EXTRA_DIST to see if we need to distribute anything from a + # subdir. If so, add it to the list. I didn't want to do this + # originally, but there were so many requests that I finally + # relented. + my $extra_dist = var ('EXTRA_DIST'); + + $transform{'DISTCHECK-HOOK'} = !! rule 'distcheck-hook'; + $transform{'GETTEXT'} = $seen_gettext && !$seen_gettext_external; + + # If the target `dist-hook' exists, make sure it is run. This + # allows users to do random weird things to the distribution + # before it is packaged up. + push (@dist_targets, 'dist-hook') + if user_phony_rule 'dist-hook'; + $transform{'DIST-TARGETS'} = join (' ', @dist_targets); + + my $flm = option ('filename-length-max'); + my $filename_filter = $flm ? '.' x $flm->[1] : ''; + + $output_rules .= &file_contents ('distdir', + new Automake::Location, + %transform, + FILENAME_FILTER => $filename_filter); +} + + +# check_directory ($NAME, $WHERE) +# ------------------------------- +# Ensure $NAME is a directory, and that it uses sane name. +# Use $WHERE as a location in the diagnostic, if any. +sub check_directory ($$) +{ + my ($dir, $where) = @_; + + error $where, "required directory $relative_dir/$dir does not exist" + unless -d "$relative_dir/$dir"; + + # If an `obj/' directory exists, BSD make will enter it before + # reading `Makefile'. Hence the `Makefile' in the current directory + # will not be read. + # + # % cat Makefile + # all: + # echo Hello + # % cat obj/Makefile + # all: + # echo World + # % make # GNU make + # echo Hello + # Hello + # % pmake # BSD make + # echo World + # World + msg ('portability', $where, + "naming a subdirectory `obj' causes troubles with BSD make") + if $dir eq 'obj'; + + # `aux' is probably the most important of the following forbidden name, + # since it's tempting to use it as an AC_CONFIG_AUX_DIR. + msg ('portability', $where, + "name `$dir' is reserved on W32 and DOS platforms") + if grep (/^\Q$dir\E$/i, qw/aux lpt1 lpt2 lpt3 com1 com2 com3 com4 con prn/); +} + +# check_directories_in_var ($VARIABLE) +# ------------------------------------ +# Recursively check all items in variables $VARIABLE as directories +sub check_directories_in_var ($) +{ + my ($var) = @_; + $var->traverse_recursively + (sub + { + my ($var, $val, $cond, $full_cond) = @_; + check_directory ($val, $var->rdef ($cond)->location); + return (); + }, + undef, + skip_ac_subst => 1); +} + +# &handle_subdirs () +# ------------------ +# Handle subdirectories. +sub handle_subdirs () +{ + my $subdirs = var ('SUBDIRS'); + return + unless $subdirs; + + check_directories_in_var $subdirs; + + my $dsubdirs = var ('DIST_SUBDIRS'); + check_directories_in_var $dsubdirs + if $dsubdirs; + + $output_rules .= &file_contents ('subdirs', new Automake::Location); + rvar ('RECURSIVE_TARGETS')->rdef (TRUE)->{'pretty'} = VAR_SORTED; # Gross! +} + + +# ($REGEN, @DEPENDENCIES) +# &scan_aclocal_m4 +# ---------------- +# If aclocal.m4 creation is automated, return the list of its dependencies. +sub scan_aclocal_m4 () +{ + my $regen_aclocal = 0; + + set_seen 'CONFIG_STATUS_DEPENDENCIES'; + set_seen 'CONFIGURE_DEPENDENCIES'; + + if (-f 'aclocal.m4') + { + &define_variable ("ACLOCAL_M4", '$(top_srcdir)/aclocal.m4', INTERNAL); + + my $aclocal = new Automake::XFile "< aclocal.m4"; + my $line = $aclocal->getline; + $regen_aclocal = $line =~ 'generated automatically by aclocal'; + } + + my @ac_deps = (); + + if (set_seen ('ACLOCAL_M4_SOURCES')) + { + push (@ac_deps, '$(ACLOCAL_M4_SOURCES)'); + msg_var ('obsolete', 'ACLOCAL_M4_SOURCES', + "`ACLOCAL_M4_SOURCES' is obsolete.\n" + . "It should be safe to simply remove it."); + } + + # Note that it might be possible that aclocal.m4 doesn't exist but + # should be auto-generated. This case probably isn't very + # important. + + return ($regen_aclocal, @ac_deps); +} + + +# Helper function for substitute_ac_subst_variables. +sub substitute_ac_subst_variables_worker($) +{ + my ($token) = @_; + return "\@$token\@" if var $token; + return "\${$token\}"; +} + +# substitute_ac_subst_variables ($TEXT) +# ------------------------------------- +# Replace any occurrence of ${FOO} in $TEXT by @FOO@ if FOO is an AC_SUBST +# variable. +sub substitute_ac_subst_variables ($) +{ + my ($text) = @_; + $text =~ s/\${([^ \t=:+{}]+)}/&substitute_ac_subst_variables_worker ($1)/ge; + return $text; +} + +# @DEPENDENCIES +# &prepend_srcdir (@INPUTS) +# ------------------------- +# Prepend $(srcdir) or $(top_srcdir) to all @INPUTS. The idea is that +# if an input file has a directory part the same as the current +# directory, then the directory part is simply replaced by $(srcdir). +# But if the directory part is different, then $(top_srcdir) is +# prepended. +sub prepend_srcdir (@) +{ + my (@inputs) = @_; + my @newinputs; + + foreach my $single (@inputs) + { + if (dirname ($single) eq $relative_dir) + { + push (@newinputs, '$(srcdir)/' . basename ($single)); + } + else + { + push (@newinputs, '$(top_srcdir)/' . $single); + } + } + return @newinputs; +} + +# @DEPENDENCIES +# rewrite_inputs_into_dependencies ($OUTPUT, @INPUTS) +# --------------------------------------------------- +# Compute a list of dependencies appropriate for the rebuild +# rule of +# AC_CONFIG_FILES($OUTPUT:$INPUT[0]:$INPUTS[1]:...) +# Also distribute $INPUTs which are not build by another AC_CONFIG_FILES. +sub rewrite_inputs_into_dependencies ($@) +{ + my ($file, @inputs) = @_; + my @res = (); + + for my $i (@inputs) + { + # We cannot create dependencies on shell variables. + next if (substitute_ac_subst_variables $i) =~ /\$/; + + if (exists $ac_config_files_location{$i}) + { + my $di = dirname $i; + if ($di eq $relative_dir) + { + $i = basename $i; + } + # In the top-level Makefile we do not use $(top_builddir), because + # we are already there, and since the targets are built without + # a $(top_builddir), it helps BSD Make to match them with + # dependencies. + elsif ($relative_dir ne '.') + { + $i = '$(top_builddir)/' . $i; + } + } + else + { + msg ('error', $ac_config_files_location{$file}, + "required file `$i' not found") + unless $i =~ /\$/ || exists $output_files{$i} || -f $i; + ($i) = prepend_srcdir ($i); + push_dist_common ($i); + } + push @res, $i; + } + return @res; +} + + + +# &handle_configure ($MAKEFILE_AM, $MAKEFILE_IN, $MAKEFILE, @INPUTS) +# ------------------------------------------------------------------ +# Handle remaking and configure stuff. +# We need the name of the input file, to do proper remaking rules. +sub handle_configure ($$$@) +{ + my ($makefile_am, $makefile_in, $makefile, @inputs) = @_; + + prog_error 'empty @inputs' + unless @inputs; + + my ($rel_makefile_am, $rel_makefile_in) = prepend_srcdir ($makefile_am, + $makefile_in); + my $rel_makefile = basename $makefile; + + my $colon_infile = ':' . join (':', @inputs); + $colon_infile = '' if $colon_infile eq ":$makefile.in"; + my @rewritten = rewrite_inputs_into_dependencies ($makefile, @inputs); + my ($regen_aclocal_m4, @aclocal_m4_deps) = scan_aclocal_m4; + define_pretty_variable ('am__aclocal_m4_deps', TRUE, INTERNAL, + @configure_deps, @aclocal_m4_deps, + '$(top_srcdir)/' . $configure_ac); + my @configuredeps = ('$(am__aclocal_m4_deps)', '$(CONFIGURE_DEPENDENCIES)'); + push @configuredeps, '$(ACLOCAL_M4)' if -f 'aclocal.m4'; + define_pretty_variable ('am__configure_deps', TRUE, INTERNAL, + @configuredeps); + + $output_rules .= file_contents + ('configure', + new Automake::Location, + MAKEFILE => $rel_makefile, + 'MAKEFILE-DEPS' => "@rewritten", + 'CONFIG-MAKEFILE' => ($relative_dir eq '.') ? '$@' : '$(subdir)/$@', + 'MAKEFILE-IN' => $rel_makefile_in, + 'MAKEFILE-IN-DEPS' => "@include_stack", + 'MAKEFILE-AM' => $rel_makefile_am, + STRICTNESS => global_option 'cygnus' + ? 'cygnus' : $strictness_name, + 'USE-DEPS' => global_option 'no-dependencies' + ? ' --ignore-deps' : '', + 'MAKEFILE-AM-SOURCES' => "$makefile$colon_infile", + 'REGEN-ACLOCAL-M4' => $regen_aclocal_m4); + + if ($relative_dir eq '.') + { + &push_dist_common ('acconfig.h') + if -f 'acconfig.h'; + } + + # If we have a configure header, require it. + my $hdr_index = 0; + my @distclean_config; + foreach my $spec (@config_headers) + { + $hdr_index += 1; + # $CONFIG_H_PATH: config.h from top level. + my ($config_h_path, @ins) = split_config_file_spec ($spec); + my $config_h_dir = dirname ($config_h_path); + + # If the header is in the current directory we want to build + # the header here. Otherwise, if we're at the topmost + # directory and the header's directory doesn't have a + # Makefile, then we also want to build the header. + if ($relative_dir eq $config_h_dir + || ($relative_dir eq '.' && ! &is_make_dir ($config_h_dir))) + { + my ($cn_sans_dir, $stamp_dir); + if ($relative_dir eq $config_h_dir) + { + $cn_sans_dir = basename ($config_h_path); + $stamp_dir = ''; + } + else + { + $cn_sans_dir = $config_h_path; + if ($config_h_dir eq '.') + { + $stamp_dir = ''; + } + else + { + $stamp_dir = $config_h_dir . '/'; + } + } + + # This will also distribute all inputs. + @ins = rewrite_inputs_into_dependencies ($config_h_path, @ins); + + # Cannot define rebuild rules for filenames with shell variables. + next if (substitute_ac_subst_variables $config_h_path) =~ /\$/; + + # Header defined in this directory. + my @files; + if (-f $config_h_path . '.top') + { + push (@files, "$cn_sans_dir.top"); + } + if (-f $config_h_path . '.bot') + { + push (@files, "$cn_sans_dir.bot"); + } + + push_dist_common (@files); + + # For now, acconfig.h can only appear in the top srcdir. + if (-f 'acconfig.h') + { + push (@files, '$(top_srcdir)/acconfig.h'); + } + + my $stamp = "${stamp_dir}stamp-h${hdr_index}"; + $output_rules .= + file_contents ('remake-hdr', + new Automake::Location, + FILES => "@files", + CONFIG_H => $cn_sans_dir, + CONFIG_HIN => $ins[0], + CONFIG_H_DEPS => "@ins", + CONFIG_H_PATH => $config_h_path, + STAMP => "$stamp"); + + push @distclean_config, $cn_sans_dir, $stamp; + } + } + + $output_rules .= file_contents ('clean-hdr', + new Automake::Location, + FILES => "@distclean_config") + if @distclean_config; + + # Distribute and define mkinstalldirs only if it is already present + # in the package, for backward compatibility (some people may still + # use $(mkinstalldirs)). + my $mkidpath = "$config_aux_dir/mkinstalldirs"; + if (-f $mkidpath) + { + # Use require_file so that any existing script gets updated + # by --force-missing. + require_conf_file ($mkidpath, FOREIGN, 'mkinstalldirs'); + define_variable ('mkinstalldirs', + "\$(SHELL) $am_config_aux_dir/mkinstalldirs", INTERNAL); + } + else + { + # Use $(install_sh), not $(MKDIR_P) because the latter requires + # at least one argument, and $(mkinstalldirs) used to work + # even without arguments (e.g. $(mkinstalldirs) $(conditional_dir)). + define_variable ('mkinstalldirs', '$(install_sh) -d', INTERNAL); + } + + reject_var ('CONFIG_HEADER', + "`CONFIG_HEADER' is an anachronism; now determined " + . "automatically\nfrom `$configure_ac'"); + + my @config_h; + foreach my $spec (@config_headers) + { + my ($out, @ins) = split_config_file_spec ($spec); + # Generate CONFIG_HEADER define. + if ($relative_dir eq dirname ($out)) + { + push @config_h, basename ($out); + } + else + { + push @config_h, "\$(top_builddir)/$out"; + } + } + define_variable ("CONFIG_HEADER", "@config_h", INTERNAL) + if @config_h; + + # Now look for other files in this directory which must be remade + # by config.status, and generate rules for them. + my @actual_other_files = (); + foreach my $lfile (@other_input_files) + { + my $file; + my @inputs; + if ($lfile =~ /^([^:]*):(.*)$/) + { + # This is the ":" syntax of AC_OUTPUT. + $file = $1; + @inputs = split (':', $2); + } + else + { + # Normal usage. + $file = $lfile; + @inputs = $file . '.in'; + } + + # Automake files should not be stored in here, but in %MAKE_LIST. + prog_error ("$lfile in \@other_input_files\n" + . "\@other_input_files = (@other_input_files)") + if -f $file . '.am'; + + my $local = basename ($file); + + # We skip files that aren't in this directory. However, if + # the file's directory does not have a Makefile, and we are + # currently doing `.', then we create a rule to rebuild the + # file in the subdir. + my $fd = dirname ($file); + if ($fd ne $relative_dir) + { + if ($relative_dir eq '.' && ! &is_make_dir ($fd)) + { + $local = $file; + } + else + { + next; + } + } + + my @rewritten_inputs = rewrite_inputs_into_dependencies ($file, @inputs); + + # Cannot output rules for shell variables. + next if (substitute_ac_subst_variables $local) =~ /\$/; + + $output_rules .= ($local . ': ' + . '$(top_builddir)/config.status ' + . "@rewritten_inputs\n" + . "\t" + . 'cd $(top_builddir) && ' + . '$(SHELL) ./config.status ' + . ($relative_dir eq '.' ? '' : '$(subdir)/') + . '$@' + . "\n"); + push (@actual_other_files, $local); + } + + # For links we should clean destinations and distribute sources. + foreach my $spec (@config_links) + { + my ($link, $file) = split /:/, $spec; + # Some people do AC_CONFIG_LINKS($computed). We only handle + # the DEST:SRC form. + next unless $file; + my $where = $ac_config_files_location{$link}; + + # Skip destinations that contain shell variables. + if ((substitute_ac_subst_variables $link) !~ /\$/) + { + # We skip links that aren't in this directory. However, if + # the link's directory does not have a Makefile, and we are + # currently doing `.', then we add the link to CONFIG_CLEAN_FILES + # in `.'s Makefile.in. + my $local = basename ($link); + my $fd = dirname ($link); + if ($fd ne $relative_dir) + { + if ($relative_dir eq '.' && ! &is_make_dir ($fd)) + { + $local = $link; + } + else + { + $local = undef; + } + } + push @actual_other_files, $local if $local; + } + + # Do not process sources that contain shell variables. + if ((substitute_ac_subst_variables $file) !~ /\$/) + { + my $fd = dirname ($file); + + # We distribute files that are in this directory. + # At the top-level (`.') we also distribute files whose + # directory does not have a Makefile. + if (($fd eq $relative_dir) + || ($relative_dir eq '.' && ! &is_make_dir ($fd))) + { + # The following will distribute $file as a side-effect when + # it is appropriate (i.e., when $file is not already an output). + # We do not need the result, just the side-effect. + rewrite_inputs_into_dependencies ($link, $file); + } + } + } + + # These files get removed by "make distclean". + define_pretty_variable ('CONFIG_CLEAN_FILES', TRUE, INTERNAL, + @actual_other_files); +} + +# Handle C headers. +sub handle_headers +{ + my @r = &am_install_var ('-defaultdist', 'header', 'HEADERS', 'include', + 'oldinclude', 'pkginclude', + 'noinst', 'check'); + foreach (@r) + { + next unless $_->[1] =~ /\..*$/; + &saw_extension ($&); + } +} + +sub handle_gettext +{ + return if ! $seen_gettext || $relative_dir ne '.'; + + my $subdirs = var 'SUBDIRS'; + + if (! $subdirs) + { + err_ac "AM_GNU_GETTEXT used but SUBDIRS not defined"; + return; + } + + # Perform some sanity checks to help users get the right setup. + # We disable these tests when po/ doesn't exist in order not to disallow + # unusual gettext setups. + # + # Bruno Haible: + # | The idea is: + # | + # | 1) If a package doesn't have a directory po/ at top level, it + # | will likely have multiple po/ directories in subpackages. + # | + # | 2) It is useful to warn for the absence of intl/ if AM_GNU_GETTEXT + # | is used without 'external'. It is also useful to warn for the + # | presence of intl/ if AM_GNU_GETTEXT([external]) is used. Both + # | warnings apply only to the usual layout of packages, therefore + # | they should both be disabled if no po/ directory is found at + # | top level. + + if (-d 'po') + { + my @subdirs = $subdirs->value_as_list_recursive; + + msg_var ('syntax', $subdirs, + "AM_GNU_GETTEXT used but `po' not in SUBDIRS") + if ! grep ($_ eq 'po', @subdirs); + + # intl/ is not required when AM_GNU_GETTEXT is called with the + # `external' option and AM_GNU_GETTEXT_INTL_SUBDIR is not called. + msg_var ('syntax', $subdirs, + "AM_GNU_GETTEXT used but `intl' not in SUBDIRS") + if (! ($seen_gettext_external && ! $seen_gettext_intl) + && ! grep ($_ eq 'intl', @subdirs)); + + # intl/ should not be used with AM_GNU_GETTEXT([external]), except + # if AM_GNU_GETTEXT_INTL_SUBDIR is called. + msg_var ('syntax', $subdirs, + "`intl' should not be in SUBDIRS when " + . "AM_GNU_GETTEXT([external]) is used") + if ($seen_gettext_external && ! $seen_gettext_intl + && grep ($_ eq 'intl', @subdirs)); + } + + require_file ($ac_gettext_location, GNU, 'ABOUT-NLS'); +} + +# Handle footer elements. +sub handle_footer +{ + reject_rule ('.SUFFIXES', + "use variable `SUFFIXES', not target `.SUFFIXES'"); + + # Note: AIX 4.1 /bin/make will fail if any suffix rule appears + # before .SUFFIXES. So we make sure that .SUFFIXES appears before + # anything else, by sticking it right after the default: target. + $output_header .= ".SUFFIXES:\n"; + my $suffixes = var 'SUFFIXES'; + my @suffixes = Automake::Rule::suffixes; + if (@suffixes || $suffixes) + { + # Make sure SUFFIXES has unique elements. Sort them to ensure + # the output remains consistent. However, $(SUFFIXES) is + # always at the start of the list, unsorted. This is done + # because make will choose rules depending on the ordering of + # suffixes, and this lets the user have some control. Push + # actual suffixes, and not $(SUFFIXES). Some versions of make + # do not like variable substitutions on the .SUFFIXES line. + my @user_suffixes = ($suffixes + ? $suffixes->value_as_list_recursive : ()); + + my %suffixes = map { $_ => 1 } @suffixes; + delete @suffixes{@user_suffixes}; + + $output_header .= (".SUFFIXES: " + . join (' ', @user_suffixes, sort keys %suffixes) + . "\n"); + } + + $output_trailer .= file_contents ('footer', new Automake::Location); +} + + +# Generate `make install' rules. +sub handle_install () +{ + $output_rules .= &file_contents + ('install', + new Automake::Location, + maybe_BUILT_SOURCES => (set_seen ('BUILT_SOURCES') + ? (" \$(BUILT_SOURCES)\n" + . "\t\$(MAKE) \$(AM_MAKEFLAGS)") + : ''), + 'installdirs-local' => (user_phony_rule 'installdirs-local' + ? ' installdirs-local' : ''), + am__installdirs => variable_value ('am__installdirs') || ''); +} + + +# Deal with all and all-am. +sub handle_all ($) +{ + my ($makefile) = @_; + + # Output `all-am'. + + # Put this at the beginning for the sake of non-GNU makes. This + # is still wrong if these makes can run parallel jobs. But it is + # right enough. + unshift (@all, basename ($makefile)); + + foreach my $spec (@config_headers) + { + my ($out, @ins) = split_config_file_spec ($spec); + push (@all, basename ($out)) + if dirname ($out) eq $relative_dir; + } + + # Install `all' hooks. + push (@all, "all-local") + if user_phony_rule "all-local"; + + &pretty_print_rule ("all-am:", "\t\t", @all); + &depend ('.PHONY', 'all-am', 'all'); + + + # Output `all'. + + my @local_headers = (); + push @local_headers, '$(BUILT_SOURCES)' + if var ('BUILT_SOURCES'); + foreach my $spec (@config_headers) + { + my ($out, @ins) = split_config_file_spec ($spec); + push @local_headers, basename ($out) + if dirname ($out) eq $relative_dir; + } + + if (@local_headers) + { + # We need to make sure config.h is built before we recurse. + # We also want to make sure that built sources are built + # before any ordinary `all' targets are run. We can't do this + # by changing the order of dependencies to the "all" because + # that breaks when using parallel makes. Instead we handle + # things explicitly. + $output_all .= ("all: @local_headers" + . "\n\t" + . '$(MAKE) $(AM_MAKEFLAGS) ' + . (var ('SUBDIRS') ? 'all-recursive' : 'all-am') + . "\n\n"); + } + else + { + $output_all .= "all: " . (var ('SUBDIRS') + ? 'all-recursive' : 'all-am') . "\n\n"; + } +} + + +# &do_check_merge_target () +# ------------------------- +# Handle check merge target specially. +sub do_check_merge_target () +{ + # Include user-defined local form of target. + push @check_tests, 'check-local' + if user_phony_rule 'check-local'; + + # In --cygnus mode, check doesn't depend on all. + if (option 'cygnus') + { + # Just run the local check rules. + pretty_print_rule ('check-am:', "\t\t", @check); + } + else + { + # The check target must depend on the local equivalent of + # `all', to ensure all the primary targets are built. Then it + # must build the local check rules. + $output_rules .= "check-am: all-am\n"; + pretty_print_rule ("\t\$(MAKE) \$(AM_MAKEFLAGS)", "\t ", + @check) + if @check; + } + pretty_print_rule ("\t\$(MAKE) \$(AM_MAKEFLAGS)", "\t ", + @check_tests) + if @check_tests; + + depend '.PHONY', 'check', 'check-am'; + # Handle recursion. We have to honor BUILT_SOURCES like for `all:'. + $output_rules .= ("check: " + . (var ('BUILT_SOURCES') + ? "\$(BUILT_SOURCES)\n\t\$(MAKE) \$(AM_MAKEFLAGS) " + : '') + . (var ('SUBDIRS') ? 'check-recursive' : 'check-am') + . "\n"); +} + +# handle_clean ($MAKEFILE) +# ------------------------ +# Handle all 'clean' targets. +sub handle_clean ($) +{ + my ($makefile) = @_; + + # Clean the files listed in user variables if they exist. + $clean_files{'$(MOSTLYCLEANFILES)'} = MOSTLY_CLEAN + if var ('MOSTLYCLEANFILES'); + $clean_files{'$(CLEANFILES)'} = CLEAN + if var ('CLEANFILES'); + $clean_files{'$(DISTCLEANFILES)'} = DIST_CLEAN + if var ('DISTCLEANFILES'); + $clean_files{'$(MAINTAINERCLEANFILES)'} = MAINTAINER_CLEAN + if var ('MAINTAINERCLEANFILES'); + + # Built sources are automatically removed by maintainer-clean. + $clean_files{'$(BUILT_SOURCES)'} = MAINTAINER_CLEAN + if var ('BUILT_SOURCES'); + + # Compute a list of "rm"s to run for each target. + my %rms = (MOSTLY_CLEAN, [], + CLEAN, [], + DIST_CLEAN, [], + MAINTAINER_CLEAN, []); + + foreach my $file (keys %clean_files) + { + my $when = $clean_files{$file}; + prog_error 'invalid entry in %clean_files' + unless exists $rms{$when}; + + my $rm = "rm -f $file"; + # If file is a variable, make sure when don't call `rm -f' without args. + $rm ="test -z \"$file\" || $rm" + if ($file =~ /^\s*\$(\(.*\)|\{.*\})\s*$/); + + push @{$rms{$when}}, "\t-$rm\n"; + } + + $output_rules .= &file_contents + ('clean', + new Automake::Location, + MOSTLYCLEAN_RMS => join ('', sort @{$rms{&MOSTLY_CLEAN}}), + CLEAN_RMS => join ('', sort @{$rms{&CLEAN}}), + DISTCLEAN_RMS => join ('', sort @{$rms{&DIST_CLEAN}}), + MAINTAINER_CLEAN_RMS => join ('', sort @{$rms{&MAINTAINER_CLEAN}}), + MAKEFILE => basename $makefile, + ); +} + + +# &target_cmp ($A, $B) +# -------------------- +# Subroutine for &handle_factored_dependencies to let `.PHONY' and +# other `.TARGETS' be last. +sub target_cmp +{ + return 0 if $a eq $b; + + my $a1 = substr ($a, 0, 1); + my $b1 = substr ($b, 0, 1); + if ($a1 ne $b1) + { + return -1 if $b1 eq '.'; + return 1 if $a1 eq '.'; + } + return $a cmp $b; +} + + +# &handle_factored_dependencies () +# -------------------------------- +# Handle everything related to gathered targets. +sub handle_factored_dependencies +{ + # Reject bad hooks. + foreach my $utarg ('uninstall-data-local', 'uninstall-data-hook', + 'uninstall-exec-local', 'uninstall-exec-hook', + 'uninstall-dvi-local', + 'uninstall-html-local', + 'uninstall-info-local', + 'uninstall-pdf-local', + 'uninstall-ps-local') + { + my $x = $utarg; + $x =~ s/-.*-/-/; + reject_rule ($utarg, "use `$x', not `$utarg'"); + } + + reject_rule ('install-local', + "use `install-data-local' or `install-exec-local', " + . "not `install-local'"); + + reject_rule ('install-hook', + "use `install-data-hook' or `install-exec-hook', " + . "not `install-hook'"); + + # Install the -local hooks. + foreach (keys %dependencies) + { + # Hooks are installed on the -am targets. + s/-am$// or next; + depend ("$_-am", "$_-local") + if user_phony_rule "$_-local"; + } + + # Install the -hook hooks. + # FIXME: Why not be as liberal as we are with -local hooks? + foreach ('install-exec', 'install-data', 'uninstall') + { + if (user_phony_rule "$_-hook") + { + $actions{"$_-am"} .= + ("\t\@\$(NORMAL_INSTALL)\n" + . "\t" . '$(MAKE) $(AM_MAKEFLAGS) ' . "$_-hook\n"); + depend ('.MAKE', "$_-am"); + } + } + + # All the required targets are phony. + depend ('.PHONY', keys %required_targets); + + # Actually output gathered targets. + foreach (sort target_cmp keys %dependencies) + { + # If there is nothing about this guy, skip it. + next + unless (@{$dependencies{$_}} + || $actions{$_} + || $required_targets{$_}); + + # Define gathered targets in undefined conditions. + # FIXME: Right now we must handle .PHONY as an exception, + # because people write things like + # .PHONY: myphonytarget + # to append dependencies. This would not work if Automake + # refrained from defining its own .PHONY target as it does + # with other overridden targets. + # Likewise for `.MAKE'. + my @undefined_conds = (TRUE,); + if ($_ ne '.PHONY' && $_ ne '.MAKE') + { + @undefined_conds = + Automake::Rule::define ($_, 'internal', + RULE_AUTOMAKE, TRUE, INTERNAL); + } + my @uniq_deps = uniq (sort @{$dependencies{$_}}); + foreach my $cond (@undefined_conds) + { + my $condstr = $cond->subst_string; + &pretty_print_rule ("$condstr$_:", "$condstr\t", @uniq_deps); + $output_rules .= $actions{$_} if defined $actions{$_}; + $output_rules .= "\n"; + } + } +} + + +# &handle_tests_dejagnu () +# ------------------------ +sub handle_tests_dejagnu +{ + push (@check_tests, 'check-DEJAGNU'); + $output_rules .= file_contents ('dejagnu', new Automake::Location); +} + + +# Handle TESTS variable and other checks. +sub handle_tests +{ + if (option 'dejagnu') + { + &handle_tests_dejagnu; + } + else + { + foreach my $c ('DEJATOOL', 'RUNTEST', 'RUNTESTFLAGS') + { + reject_var ($c, "`$c' defined but `dejagnu' not in " + . "`AUTOMAKE_OPTIONS'"); + } + } + + if (var ('TESTS')) + { + push (@check_tests, 'check-TESTS'); + $output_rules .= &file_contents ('check', new Automake::Location); + + # Tests that are known programs should have $(EXEEXT) appended. + append_exeext { exists $known_programs{$_[0]} } 'TESTS'; + } +} + +# Handle Emacs Lisp. +sub handle_emacs_lisp +{ + my @elfiles = &am_install_var ('-candist', 'lisp', 'LISP', + 'lisp', 'noinst'); + + return if ! @elfiles; + + define_pretty_variable ('am__ELFILES', TRUE, INTERNAL, + map { $_->[1] } @elfiles); + define_pretty_variable ('am__ELCFILES', TRUE, INTERNAL, + '$(am__ELFILES:.el=.elc)'); + # This one can be overridden by users. + define_pretty_variable ('ELCFILES', TRUE, INTERNAL, '$(LISP:.el=.elc)'); + + push @all, '$(ELCFILES)'; + + require_variables ($elfiles[0][0], "Emacs Lisp sources seen", TRUE, + 'EMACS', 'lispdir'); + require_conf_file ($elfiles[0][0], FOREIGN, 'elisp-comp'); + &define_variable ('elisp_comp', "$am_config_aux_dir/elisp-comp", INTERNAL); +} + +# Handle Python +sub handle_python +{ + my @pyfiles = &am_install_var ('-defaultdist', 'python', 'PYTHON', + 'noinst'); + return if ! @pyfiles; + + require_variables ($pyfiles[0][0], "Python sources seen", TRUE, 'PYTHON'); + require_conf_file ($pyfiles[0][0], FOREIGN, 'py-compile'); + &define_variable ('py_compile', "$am_config_aux_dir/py-compile", INTERNAL); +} + +# Handle Java. +sub handle_java +{ + my @sourcelist = &am_install_var ('-candist', + 'java', 'JAVA', + 'java', 'noinst', 'check'); + return if ! @sourcelist; + + my @prefix = am_primary_prefixes ('JAVA', 1, + 'java', 'noinst', 'check'); + + my $dir; + foreach my $curs (@prefix) + { + next + if $curs eq 'EXTRA'; + + err_var "${curs}_JAVA", "multiple _JAVA primaries in use" + if defined $dir; + $dir = $curs; + } + + + push (@all, 'class' . $dir . '.stamp'); +} + + +# Handle some of the minor options. +sub handle_minor_options +{ + if (option 'readme-alpha') + { + if ($relative_dir eq '.') + { + if ($package_version !~ /^$GNITS_VERSION_PATTERN$/) + { + msg ('error-gnits', $package_version_location, + "version `$package_version' doesn't follow " . + "Gnits standards"); + } + if (defined $1 && -f 'README-alpha') + { + # This means we have an alpha release. See + # GNITS_VERSION_PATTERN for details. + push_dist_common ('README-alpha'); + } + } + } +} + +################################################################ + +# ($OUTPUT, @INPUTS) +# &split_config_file_spec ($SPEC) +# ------------------------------- +# Decode the Autoconf syntax for config files (files, headers, links +# etc.). +sub split_config_file_spec ($) +{ + my ($spec) = @_; + my ($output, @inputs) = split (/:/, $spec); + + push @inputs, "$output.in" + unless @inputs; + + return ($output, @inputs); +} + +# $input +# locate_am (@POSSIBLE_SOURCES) +# ----------------------------- +# AC_CONFIG_FILES allow specifications such as Makefile:top.in:mid.in:bot.in +# This functions returns the first *.in file for which a *.am exists. +# It returns undef otherwise. +sub locate_am (@) +{ + my (@rest) = @_; + my $input; + foreach my $file (@rest) + { + if (($file =~ /^(.*)\.in$/) && -f "$1.am") + { + $input = $file; + last; + } + } + return $input; +} + +my %make_list; + +# &scan_autoconf_config_files ($WHERE, $CONFIG-FILES) +# --------------------------------------------------- +# Study $CONFIG-FILES which is the first argument to AC_CONFIG_FILES +# (or AC_OUTPUT). +sub scan_autoconf_config_files ($$) +{ + my ($where, $config_files) = @_; + + # Look at potential Makefile.am's. + foreach (split ' ', $config_files) + { + # Must skip empty string for Perl 4. + next if $_ eq "\\" || $_ eq ''; + + # Handle $local:$input syntax. + my ($local, @rest) = split (/:/); + @rest = ("$local.in",) unless @rest; + my $input = locate_am @rest; + if ($input) + { + # We have a file that automake should generate. + $make_list{$input} = join (':', ($local, @rest)); + } + else + { + # We have a file that automake should cause to be + # rebuilt, but shouldn't generate itself. + push (@other_input_files, $_); + } + $ac_config_files_location{$local} = $where; + } +} + + +# &scan_autoconf_traces ($FILENAME) +# --------------------------------- +sub scan_autoconf_traces ($) +{ + my ($filename) = @_; + + # Macros to trace, with their minimal number of arguments. + # + # IMPORTANT: If you add a macro here, you should also add this macro + # ========= to Automake-preselection in autoconf/lib/autom4te.in. + my %traced = ( + AC_CANONICAL_BUILD => 0, + AC_CANONICAL_HOST => 0, + AC_CANONICAL_TARGET => 0, + AC_CONFIG_AUX_DIR => 1, + AC_CONFIG_FILES => 1, + AC_CONFIG_HEADERS => 1, + AC_CONFIG_LIBOBJ_DIR => 1, + AC_CONFIG_LINKS => 1, + AC_INIT => 0, + AC_LIBSOURCE => 1, + AC_REQUIRE_AUX_FILE => 1, + AC_SUBST_TRACE => 1, + AM_AUTOMAKE_VERSION => 1, + AM_CONDITIONAL => 2, + AM_ENABLE_MULTILIB => 0, + AM_GNU_GETTEXT => 0, + AM_GNU_GETTEXT_INTL_SUBDIR => 0, + AM_INIT_AUTOMAKE => 0, + AM_MAINTAINER_MODE => 0, + AM_PROG_CC_C_O => 0, + _AM_SUBST_NOTMAKE => 1, + LT_SUPPORTED_TAG => 1, + _LT_AC_TAGCONFIG => 0, + m4_include => 1, + m4_sinclude => 1, + sinclude => 1, + ); + + my $traces = ($ENV{AUTOCONF} || 'autoconf') . " "; + + # Use a separator unlikely to be used, not `:', the default, which + # has a precise meaning for AC_CONFIG_FILES and so on. + $traces .= join (' ', + map { "--trace=$_" . ':\$f:\$l::\$n::\${::}%' } + (keys %traced)); + + my $tracefh = new Automake::XFile ("$traces $filename |"); + verb "reading $traces"; + + while ($_ = $tracefh->getline) + { + chomp; + my ($here, @args) = split (/::/); + my $where = new Automake::Location $here; + my $macro = $args[0]; + + prog_error ("unrequested trace `$macro'") + unless exists $traced{$macro}; + + # Skip and diagnose malformed calls. + if ($#args < $traced{$macro}) + { + msg ('syntax', $where, "not enough arguments for $macro"); + next; + } + + # Alphabetical ordering please. + if ($macro eq 'AC_CANONICAL_BUILD') + { + if ($seen_canonical <= AC_CANONICAL_BUILD) + { + $seen_canonical = AC_CANONICAL_BUILD; + $canonical_location = $where; + } + } + elsif ($macro eq 'AC_CANONICAL_HOST') + { + if ($seen_canonical <= AC_CANONICAL_HOST) + { + $seen_canonical = AC_CANONICAL_HOST; + $canonical_location = $where; + } + } + elsif ($macro eq 'AC_CANONICAL_TARGET') + { + $seen_canonical = AC_CANONICAL_TARGET; + $canonical_location = $where; + } + elsif ($macro eq 'AC_CONFIG_AUX_DIR') + { + if ($seen_init_automake) + { + error ($where, "AC_CONFIG_AUX_DIR must be called before " + . "AM_INIT_AUTOMAKE...", partial => 1); + error ($seen_init_automake, "... AM_INIT_AUTOMAKE called here"); + } + $config_aux_dir = $args[1]; + $config_aux_dir_set_in_configure_ac = 1; + $relative_dir = '.'; + check_directory ($config_aux_dir, $where); + } + elsif ($macro eq 'AC_CONFIG_FILES') + { + # Look at potential Makefile.am's. + scan_autoconf_config_files ($where, $args[1]); + } + elsif ($macro eq 'AC_CONFIG_HEADERS') + { + foreach my $spec (split (' ', $args[1])) + { + my ($dest, @src) = split (':', $spec); + $ac_config_files_location{$dest} = $where; + push @config_headers, $spec; + } + } + elsif ($macro eq 'AC_CONFIG_LIBOBJ_DIR') + { + $config_libobj_dir = $args[1]; + $relative_dir = '.'; + check_directory ($config_libobj_dir, $where); + } + elsif ($macro eq 'AC_CONFIG_LINKS') + { + foreach my $spec (split (' ', $args[1])) + { + my ($dest, $src) = split (':', $spec); + $ac_config_files_location{$dest} = $where; + push @config_links, $spec; + } + } + elsif ($macro eq 'AC_INIT') + { + if (defined $args[2]) + { + $package_version = $args[2]; + $package_version_location = $where; + } + } + elsif ($macro eq 'AC_LIBSOURCE') + { + $libsources{$args[1]} = $here; + } + elsif ($macro eq 'AC_REQUIRE_AUX_FILE') + { + # Only remember the first time a file is required. + $required_aux_file{$args[1]} = $where + unless exists $required_aux_file{$args[1]}; + } + elsif ($macro eq 'AC_SUBST_TRACE') + { + # Just check for alphanumeric in AC_SUBST_TRACE. If you do + # AC_SUBST(5), then too bad. + $configure_vars{$args[1]} = $where + if $args[1] =~ /^\w+$/; + } + elsif ($macro eq 'AM_AUTOMAKE_VERSION') + { + error ($where, + "version mismatch. This is Automake $VERSION,\n" . + "but the definition used by this AM_INIT_AUTOMAKE\n" . + "comes from Automake $args[1]. You should recreate\n" . + "aclocal.m4 with aclocal and run automake again.\n", + # $? = 63 is used to indicate version mismatch to missing. + exit_code => 63) + if $VERSION ne $args[1]; + + $seen_automake_version = 1; + } + elsif ($macro eq 'AM_CONDITIONAL') + { + $configure_cond{$args[1]} = $where; + } + elsif ($macro eq 'AM_ENABLE_MULTILIB') + { + $seen_multilib = $where; + } + elsif ($macro eq 'AM_GNU_GETTEXT') + { + $seen_gettext = $where; + $ac_gettext_location = $where; + $seen_gettext_external = grep ($_ eq 'external', @args); + } + elsif ($macro eq 'AM_GNU_GETTEXT_INTL_SUBDIR') + { + $seen_gettext_intl = $where; + } + elsif ($macro eq 'AM_INIT_AUTOMAKE') + { + $seen_init_automake = $where; + if (defined $args[2]) + { + $package_version = $args[2]; + $package_version_location = $where; + } + elsif (defined $args[1]) + { + exit $exit_code + if (process_global_option_list ($where, + split (' ', $args[1]))); + } + } + elsif ($macro eq 'AM_MAINTAINER_MODE') + { + $seen_maint_mode = $where; + } + elsif ($macro eq 'AM_PROG_CC_C_O') + { + $seen_cc_c_o = $where; + } + elsif ($macro eq '_AM_SUBST_NOTMAKE') + { + $ignored_configure_vars{$args[1]} = $where; + } + elsif ($macro eq 'm4_include' + || $macro eq 'm4_sinclude' + || $macro eq 'sinclude') + { + # Skip missing `sinclude'd files. + next if $macro ne 'm4_include' && ! -f $args[1]; + + # Some modified versions of Autoconf don't use + # frozen files. Consequently it's possible that we see all + # m4_include's performed during Autoconf's startup. + # Obviously we don't want to distribute Autoconf's files + # so we skip absolute filenames here. + push @configure_deps, '$(top_srcdir)/' . $args[1] + unless $here =~ m,^(?:\w:)?[\\/],; + # Keep track of the greatest timestamp. + if (-e $args[1]) + { + my $mtime = mtime $args[1]; + $configure_deps_greatest_timestamp = $mtime + if $mtime > $configure_deps_greatest_timestamp; + } + } + elsif ($macro eq 'LT_SUPPORTED_TAG') + { + $libtool_tags{$args[1]} = 1; + $libtool_new_api = 1; + } + elsif ($macro eq '_LT_AC_TAGCONFIG') + { + # _LT_AC_TAGCONFIG is an old macro present in Libtool 1.5. + # We use it to detect whether tags are supported. Our + # preferred interface is LT_SUPPORTED_TAG, but it was + # introduced in Libtool 1.6. + if (0 == keys %libtool_tags) + { + # Hardcode the tags supported by Libtool 1.5. + %libtool_tags = (CC => 1, CXX => 1, GCJ => 1, F77 => 1); + } + } + } + + $tracefh->close; +} + + +# &scan_autoconf_files () +# ----------------------- +# Check whether we use `configure.ac' or `configure.in'. +# Scan it (and possibly `aclocal.m4') for interesting things. +# We must scan aclocal.m4 because there might be AC_SUBSTs and such there. +sub scan_autoconf_files () +{ + # Reinitialize libsources here. This isn't really necessary, + # since we currently assume there is only one configure.ac. But + # that won't always be the case. + %libsources = (); + + # Keep track of the youngest configure dependency. + $configure_deps_greatest_timestamp = mtime $configure_ac; + if (-e 'aclocal.m4') + { + my $mtime = mtime 'aclocal.m4'; + $configure_deps_greatest_timestamp = $mtime + if $mtime > $configure_deps_greatest_timestamp; + } + + scan_autoconf_traces ($configure_ac); + + @configure_input_files = sort keys %make_list; + # Set input and output files if not specified by user. + if (! @input_files) + { + @input_files = @configure_input_files; + %output_files = %make_list; + } + + + if (! $seen_init_automake) + { + err_ac ("no proper invocation of AM_INIT_AUTOMAKE was found.\nYou " + . "should verify that $configure_ac invokes AM_INIT_AUTOMAKE," + . "\nthat aclocal.m4 is present in the top-level directory,\n" + . "and that aclocal.m4 was recently regenerated " + . "(using aclocal)."); + } + else + { + if (! $seen_automake_version) + { + if (-f 'aclocal.m4') + { + error ($seen_init_automake, + "your implementation of AM_INIT_AUTOMAKE comes from " . + "an\nold Automake version. You should recreate " . + "aclocal.m4\nwith aclocal and run automake again.\n", + # $? = 63 is used to indicate version mismatch to missing. + exit_code => 63); + } + else + { + error ($seen_init_automake, + "no proper implementation of AM_INIT_AUTOMAKE was " . + "found,\nprobably because aclocal.m4 is missing...\n" . + "You should run aclocal to create this file, then\n" . + "run automake again.\n"); + } + } + } + + locate_aux_dir (); + + # Reorder @input_files so that the Makefile that distributes aux + # files is processed last. This is important because each directory + # can require auxiliary scripts and we should wait until they have + # been installed before distributing them. + + # The Makefile.in that distribute the aux files is the one in + # $config_aux_dir or the top-level Makefile. + my $auxdirdist = is_make_dir ($config_aux_dir) ? $config_aux_dir : '.'; + my @new_input_files = (); + while (@input_files) + { + my $in = pop @input_files; + my @ins = split (/:/, $output_files{$in}); + if (dirname ($ins[0]) eq $auxdirdist) + { + push @new_input_files, $in; + $automake_will_process_aux_dir = 1; + } + else + { + unshift @new_input_files, $in; + } + } + @input_files = @new_input_files; + + # If neither the auxdir/Makefile nor the ./Makefile are generated + # by Automake, we won't distribute the aux files anyway. Assume + # the user know what (s)he does, and pretend we will distribute + # them to disable the error in require_file_internal. + $automake_will_process_aux_dir = 1 if ! is_make_dir ($auxdirdist); + + # Look for some files we need. Always check for these. This + # check must be done for every run, even those where we are only + # looking at a subdir Makefile. We must set relative_dir for + # maybe_push_required_file to work. + $relative_dir = '.'; + foreach my $file (keys %required_aux_file) + { + require_conf_file ($required_aux_file{$file}->get, FOREIGN, $file) + } + err_am "`install.sh' is an anachronism; use `install-sh' instead" + if -f $config_aux_dir . '/install.sh'; + + # Preserve dist_common for later. + $configure_dist_common = variable_value ('DIST_COMMON') || ''; + +} + +################################################################ + +# Set up for Cygnus mode. +sub check_cygnus +{ + my $cygnus = option 'cygnus'; + return unless $cygnus; + + set_strictness ('foreign'); + set_option ('no-installinfo', $cygnus); + set_option ('no-dependencies', $cygnus); + set_option ('no-dist', $cygnus); + + err_ac "`AM_MAINTAINER_MODE' required when --cygnus specified" + if !$seen_maint_mode; +} + +# Do any extra checking for GNU standards. +sub check_gnu_standards +{ + if ($relative_dir eq '.') + { + # In top level (or only) directory. + require_file ("$am_file.am", GNU, + qw/INSTALL NEWS README AUTHORS ChangeLog/); + + # Accept one of these three licenses; default to COPYING. + # Make sure we do not overwrite an existing license. + my $license; + foreach (qw /COPYING COPYING.LIB COPYING.LESSER/) + { + if (-f $_) + { + $license = $_; + last; + } + } + require_file ("$am_file.am", GNU, 'COPYING') + unless $license; + } + + for my $opt ('no-installman', 'no-installinfo') + { + msg ('error-gnu', option $opt, + "option `$opt' disallowed by GNU standards") + if option $opt; + } +} + +# Do any extra checking for GNITS standards. +sub check_gnits_standards +{ + if ($relative_dir eq '.') + { + # In top level (or only) directory. + require_file ("$am_file.am", GNITS, 'THANKS'); + } +} + +################################################################ +# +# Functions to handle files of each language. + +# Each `lang_X_rewrite($DIRECTORY, $BASE, $EXT)' function follows a +# simple formula: Return value is LANG_SUBDIR if the resulting object +# file should be in a subdir if the source file is, LANG_PROCESS if +# file is to be dealt with, LANG_IGNORE otherwise. + +# Much of the actual processing is handled in +# handle_single_transform. These functions exist so that +# auxiliary information can be recorded for a later cleanup pass. +# Note that the calls to these functions are computed, so don't bother +# searching for their precise names in the source. + +# This is just a convenience function that can be used to determine +# when a subdir object should be used. +sub lang_sub_obj +{ + return option 'subdir-objects' ? LANG_SUBDIR : LANG_PROCESS; +} + +# Rewrite a single C source file. +sub lang_c_rewrite +{ + my ($directory, $base, $ext, $nonansi_obj, $have_per_exec_flags, $var) = @_; + + if (option 'ansi2knr' && $base =~ /_$/) + { + # FIXME: include line number in error. + err_am "C source file `$base.c' would be deleted by ansi2knr rules"; + } + + my $r = LANG_PROCESS; + if (option 'subdir-objects') + { + $r = LANG_SUBDIR; + if ($directory && $directory ne '.') + { + $base = $directory . '/' . $base; + + # libtool is always able to put the object at the proper place, + # so we do not have to require AM_PROG_CC_C_O when building .lo files. + msg_var ('portability', $var, + "compiling `$base.c' in subdir requires " + . "`AM_PROG_CC_C_O' in `$configure_ac'", + uniq_scope => US_GLOBAL, + uniq_part => 'AM_PROG_CC_C_O subdir') + unless $seen_cc_c_o || $nonansi_obj eq '.lo'; + } + + # In this case we already have the directory information, so + # don't add it again. + $de_ansi_files{$base} = ''; + } + else + { + $de_ansi_files{$base} = (($directory eq '.' || $directory eq '') + ? '' + : "$directory/"); + } + + if (! $seen_cc_c_o + && $have_per_exec_flags + && ! option 'subdir-objects' + && $nonansi_obj ne '.lo') + { + msg_var ('portability', + $var, "compiling `$base.c' with per-target flags requires " + . "`AM_PROG_CC_C_O' in `$configure_ac'", + uniq_scope => US_GLOBAL, + uniq_part => 'AM_PROG_CC_C_O per-target') + } + + return $r; +} + +# Rewrite a single C++ source file. +sub lang_cxx_rewrite +{ + return &lang_sub_obj; +} + +# Rewrite a single header file. +sub lang_header_rewrite +{ + # Header files are simply ignored. + return LANG_IGNORE; +} + +# Rewrite a single yacc file. +sub lang_yacc_rewrite +{ + my ($directory, $base, $ext) = @_; + + my $r = &lang_sub_obj; + (my $newext = $ext) =~ tr/y/c/; + return ($r, $newext); +} + +# Rewrite a single yacc++ file. +sub lang_yaccxx_rewrite +{ + my ($directory, $base, $ext) = @_; + + my $r = &lang_sub_obj; + (my $newext = $ext) =~ tr/y/c/; + return ($r, $newext); +} + +# Rewrite a single lex file. +sub lang_lex_rewrite +{ + my ($directory, $base, $ext) = @_; + + my $r = &lang_sub_obj; + (my $newext = $ext) =~ tr/l/c/; + return ($r, $newext); +} + +# Rewrite a single lex++ file. +sub lang_lexxx_rewrite +{ + my ($directory, $base, $ext) = @_; + + my $r = &lang_sub_obj; + (my $newext = $ext) =~ tr/l/c/; + return ($r, $newext); +} + +# Rewrite a single assembly file. +sub lang_asm_rewrite +{ + return &lang_sub_obj; +} + +# Rewrite a single preprocessed assembly file. +sub lang_cppasm_rewrite +{ + return &lang_sub_obj; +} + +# Rewrite a single Fortran 77 file. +sub lang_f77_rewrite +{ + return LANG_PROCESS; +} + +# Rewrite a single Fortran file. +sub lang_fc_rewrite +{ + return LANG_PROCESS; +} + +# Rewrite a single preprocessed Fortran file. +sub lang_ppfc_rewrite +{ + return LANG_PROCESS; +} + +# Rewrite a single preprocessed Fortran 77 file. +sub lang_ppf77_rewrite +{ + return LANG_PROCESS; +} + +# Rewrite a single ratfor file. +sub lang_ratfor_rewrite +{ + return LANG_PROCESS; +} + +# Rewrite a single Objective C file. +sub lang_objc_rewrite +{ + return &lang_sub_obj; +} + +# Rewrite a single Unified Parallel C file. +sub lang_upc_rewrite +{ + return &lang_sub_obj; +} + +# Rewrite a single Java file. +sub lang_java_rewrite +{ + return LANG_SUBDIR; +} + +# The lang_X_finish functions are called after all source file +# processing is done. Each should handle defining rules for the +# language, etc. A finish function is only called if a source file of +# the appropriate type has been seen. + +sub lang_c_finish +{ + # Push all libobjs files onto de_ansi_files. We actually only + # push files which exist in the current directory, and which are + # genuine source files. + foreach my $file (keys %libsources) + { + if ($file =~ /^(.*)\.[cly]$/ && -f "$relative_dir/$file") + { + $de_ansi_files{$1} = '' + } + } + + if (option 'ansi2knr' && keys %de_ansi_files) + { + # Make all _.c files depend on their corresponding .c files. + my @objects; + foreach my $base (sort keys %de_ansi_files) + { + # Each _.c file must depend on ansi2knr; otherwise it + # might be used in a parallel build before it is built. + # We need to support files in the srcdir and in the build + # dir (because these files might be auto-generated. But + # we can't use $< -- some makes only define $< during a + # suffix rule. + my $ansfile = $de_ansi_files{$base} . $base . '.c'; + $output_rules .= ($base . "_.c: $ansfile \$(ANSI2KNR)\n\t" + . '$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) ' + . '`if test -f $(srcdir)/' . $ansfile + . '; then echo $(srcdir)/' . $ansfile + . '; else echo ' . $ansfile . '; fi` ' + . "| sed 's/^# \\([0-9]\\)/#line \\1/' " + . '| $(ANSI2KNR) > $@' + # If ansi2knr fails then we shouldn't + # create the _.c file + . " || rm -f \$\@\n"); + push (@objects, $base . '_.$(OBJEXT)'); + push (@objects, $base . '_.lo') + if var ('LIBTOOL'); + + # Explicitly clean the _.c files if they are in a + # subdirectory. (In the current directory they get erased + # by a `rm -f *_.c' rule.) + $clean_files{$base . '_.c'} = MOSTLY_CLEAN + if dirname ($base) ne '.'; + } + + # Make all _.o (and _.lo) files depend on ansi2knr. + # Use a sneaky little hack to make it print nicely. + &pretty_print_rule ('', '', @objects, ':', '$(ANSI2KNR)'); + } +} + +# This is a yacc helper which is called whenever we have decided to +# compile a yacc file. +sub lang_yacc_target_hook +{ + my ($self, $aggregate, $output, $input, %transform) = @_; + + my $flag = $aggregate . "_YFLAGS"; + my $flagvar = var $flag; + my $YFLAGSvar = var 'YFLAGS'; + if (($flagvar && $flagvar->variable_value =~ /$DASH_D_PATTERN/o) + || ($YFLAGSvar && $YFLAGSvar->variable_value =~ /$DASH_D_PATTERN/o)) + { + (my $output_base = $output) =~ s/$KNOWN_EXTENSIONS_PATTERN$//; + my $header = $output_base . '.h'; + + # Found a `-d' that applies to the compilation of this file. + # Add a dependency for the generated header file, and arrange + # for that file to be included in the distribution. + foreach my $cond (Automake::Rule::define (${header}, 'internal', + RULE_AUTOMAKE, TRUE, + INTERNAL)) + { + my $condstr = $cond->subst_string; + $output_rules .= + "$condstr${header}: $output\n" + # Recover from removal of $header + . "$condstr\t\@if test ! -f \$@; then \\\n" + . "$condstr\t rm -f $output; \\\n" + . "$condstr\t \$(MAKE) \$(AM_MAKEFLAGS) $output; \\\n" + . "$condstr\telse :; fi\n"; + } + # Distribute the generated file, unless its .y source was + # listed in a nodist_ variable. (&handle_source_transform + # will set DIST_SOURCE.) + &push_dist_common ($header) + if $transform{'DIST_SOURCE'}; + + # If the files are built in the build directory, then we want + # to remove them with `make clean'. If they are in srcdir + # they shouldn't be touched. However, we can't determine this + # statically, and the GNU rules say that yacc/lex output files + # should be removed by maintainer-clean. So that's what we + # do. + $clean_files{$header} = MAINTAINER_CLEAN; + } + # Erase $OUTPUT on `make maintainer-clean' (by GNU standards). + # See the comment above for $HEADER. + $clean_files{$output} = MAINTAINER_CLEAN; +} + +# This is a lex helper which is called whenever we have decided to +# compile a lex file. +sub lang_lex_target_hook +{ + my ($self, $aggregate, $output, $input) = @_; + # If the files are built in the build directory, then we want to + # remove them with `make clean'. If they are in srcdir they + # shouldn't be touched. However, we can't determine this + # statically, and the GNU rules say that yacc/lex output files + # should be removed by maintainer-clean. So that's what we do. + $clean_files{$output} = MAINTAINER_CLEAN; +} + +# This is a helper for both lex and yacc. +sub yacc_lex_finish_helper +{ + return if defined $language_scratch{'lex-yacc-done'}; + $language_scratch{'lex-yacc-done'} = 1; + + # FIXME: for now, no line number. + require_conf_file ($configure_ac, FOREIGN, 'ylwrap'); + &define_variable ('YLWRAP', "$am_config_aux_dir/ylwrap", INTERNAL); +} + +sub lang_yacc_finish +{ + return if defined $language_scratch{'yacc-done'}; + $language_scratch{'yacc-done'} = 1; + + reject_var 'YACCFLAGS', "`YACCFLAGS' obsolete; use `YFLAGS' instead"; + + yacc_lex_finish_helper; +} + + +sub lang_lex_finish +{ + return if defined $language_scratch{'lex-done'}; + $language_scratch{'lex-done'} = 1; + + yacc_lex_finish_helper; +} + + +# Given a hash table of linker names, pick the name that has the most +# precedence. This is lame, but something has to have global +# knowledge in order to eliminate the conflict. Add more linkers as +# required. +sub resolve_linker +{ + my (%linkers) = @_; + + foreach my $l (qw(GCJLINK CXXLINK F77LINK FCLINK OBJCLINK UPCLINK)) + { + return $l if defined $linkers{$l}; + } + return 'LINK'; +} + +# Called to indicate that an extension was used. +sub saw_extension +{ + my ($ext) = @_; + if (! defined $extension_seen{$ext}) + { + $extension_seen{$ext} = 1; + } + else + { + ++$extension_seen{$ext}; + } +} + +# Return the number of files seen for a given language. Knows about +# special cases we care about. FIXME: this is hideous. We need +# something that involves real language objects. For instance yacc +# and yaccxx could both derive from a common yacc class which would +# know about the strange ylwrap requirement. (Or better yet we could +# just not support legacy yacc!) +sub count_files_for_language +{ + my ($name) = @_; + + my @names; + if ($name eq 'yacc' || $name eq 'yaccxx') + { + @names = ('yacc', 'yaccxx'); + } + elsif ($name eq 'lex' || $name eq 'lexxx') + { + @names = ('lex', 'lexxx'); + } + else + { + @names = ($name); + } + + my $r = 0; + foreach $name (@names) + { + my $lang = $languages{$name}; + foreach my $ext (@{$lang->extensions}) + { + $r += $extension_seen{$ext} + if defined $extension_seen{$ext}; + } + } + + return $r +} + +# Called to ask whether source files have been seen . If HEADERS is 1, +# headers can be included. +sub saw_sources_p +{ + my ($headers) = @_; + + # count all the sources + my $count = 0; + foreach my $val (values %extension_seen) + { + $count += $val; + } + + if (!$headers) + { + $count -= count_files_for_language ('header'); + } + + return $count > 0; +} + + +# register_language (%ATTRIBUTE) +# ------------------------------ +# Register a single language. +# Each %ATTRIBUTE is of the form ATTRIBUTE => VALUE. +sub register_language (%) +{ + my (%option) = @_; + + # Set the defaults. + $option{'ansi'} = 0 + unless defined $option{'ansi'}; + $option{'autodep'} = 'no' + unless defined $option{'autodep'}; + $option{'linker'} = '' + unless defined $option{'linker'}; + $option{'flags'} = [] + unless defined $option{'flags'}; + $option{'output_extensions'} = sub { return ( '.$(OBJEXT)', '.lo' ) } + unless defined $option{'output_extensions'}; + $option{'nodist_specific'} = 0 + unless defined $option{'nodist_specific'}; + + my $lang = new Language (%option); + + # Fill indexes. + $extension_map{$_} = $lang->name foreach @{$lang->extensions}; + $languages{$lang->name} = $lang; + my $link = $lang->linker; + if ($link) + { + if (exists $link_languages{$link}) + { + prog_error ("`$link' has different definitions in " + . $lang->name . " and " . $link_languages{$link}->name) + if $lang->link ne $link_languages{$link}->link; + } + else + { + $link_languages{$link} = $lang; + } + } + + # Update the pattern of known extensions. + accept_extensions (@{$lang->extensions}); + + # Upate the $suffix_rule map. + foreach my $suffix (@{$lang->extensions}) + { + foreach my $dest (&{$lang->output_extensions} ($suffix)) + { + register_suffix_rule (INTERNAL, $suffix, $dest); + } + } +} + +# derive_suffix ($EXT, $OBJ) +# -------------------------- +# This function is used to find a path from a user-specified suffix $EXT +# to $OBJ or to some other suffix we recognize internally, e.g. `cc'. +sub derive_suffix ($$) +{ + my ($source_ext, $obj) = @_; + + while (! $extension_map{$source_ext} + && $source_ext ne $obj + && exists $suffix_rules->{$source_ext} + && exists $suffix_rules->{$source_ext}{$obj}) + { + $source_ext = $suffix_rules->{$source_ext}{$obj}[0]; + } + + return $source_ext; +} + + +################################################################ + +# Pretty-print something and append to output_rules. +sub pretty_print_rule +{ + $output_rules .= &makefile_wrap (@_); +} + + +################################################################ + + +## -------------------------------- ## +## Handling the conditional stack. ## +## -------------------------------- ## + + +# $STRING +# make_conditional_string ($NEGATE, $COND) +# ---------------------------------------- +sub make_conditional_string ($$) +{ + my ($negate, $cond) = @_; + $cond = "${cond}_TRUE" + unless $cond =~ /^TRUE|FALSE$/; + $cond = Automake::Condition::conditional_negate ($cond) + if $negate; + return $cond; +} + + +my %_am_macro_for_cond = + ( + AMDEP => "one of the compiler tests\n" + . " AC_PROG_CC, AC_PROG_CXX, AC_PROG_CXX, AC_PROG_OBJC,\n" + . " AM_PROG_AS, AM_PROG_GCJ, AM_PROG_UPC", + am__fastdepCC => 'AC_PROG_CC', + am__fastdepCCAS => 'AM_PROG_AS', + am__fastdepCXX => 'AC_PROG_CXX', + am__fastdepGCJ => 'AM_PROG_GCJ', + am__fastdepOBJC => 'AC_PROG_OBJC', + am__fastdepUPC => 'AM_PROG_UPC' + ); + +# $COND +# cond_stack_if ($NEGATE, $COND, $WHERE) +# -------------------------------------- +sub cond_stack_if ($$$) +{ + my ($negate, $cond, $where) = @_; + + if (! $configure_cond{$cond} && $cond !~ /^TRUE|FALSE$/) + { + my $text = "$cond does not appear in AM_CONDITIONAL"; + my $scope = US_LOCAL; + if (exists $_am_macro_for_cond{$cond}) + { + my $mac = $_am_macro_for_cond{$cond}; + $text .= "\n The usual way to define `$cond' is to add "; + $text .= ($mac =~ / /) ? $mac : "`$mac'"; + $text .= "\n to `$configure_ac' and run `aclocal' and `autoconf' again."; + # These warnings appear in Automake files (depend2.am), + # so there is no need to display them more than once: + $scope = US_GLOBAL; + } + error $where, $text, uniq_scope => $scope; + } + + push (@cond_stack, make_conditional_string ($negate, $cond)); + + return new Automake::Condition (@cond_stack); +} + + +# $COND +# cond_stack_else ($NEGATE, $COND, $WHERE) +# ---------------------------------------- +sub cond_stack_else ($$$) +{ + my ($negate, $cond, $where) = @_; + + if (! @cond_stack) + { + error $where, "else without if"; + return FALSE; + } + + $cond_stack[$#cond_stack] = + Automake::Condition::conditional_negate ($cond_stack[$#cond_stack]); + + # If $COND is given, check against it. + if (defined $cond) + { + $cond = make_conditional_string ($negate, $cond); + + error ($where, "else reminder ($negate$cond) incompatible with " + . "current conditional: $cond_stack[$#cond_stack]") + if $cond_stack[$#cond_stack] ne $cond; + } + + return new Automake::Condition (@cond_stack); +} + + +# $COND +# cond_stack_endif ($NEGATE, $COND, $WHERE) +# ----------------------------------------- +sub cond_stack_endif ($$$) +{ + my ($negate, $cond, $where) = @_; + my $old_cond; + + if (! @cond_stack) + { + error $where, "endif without if"; + return TRUE; + } + + # If $COND is given, check against it. + if (defined $cond) + { + $cond = make_conditional_string ($negate, $cond); + + error ($where, "endif reminder ($negate$cond) incompatible with " + . "current conditional: $cond_stack[$#cond_stack]") + if $cond_stack[$#cond_stack] ne $cond; + } + + pop @cond_stack; + + return new Automake::Condition (@cond_stack); +} + + + + + +## ------------------------ ## +## Handling the variables. ## +## ------------------------ ## + + +# &define_pretty_variable ($VAR, $COND, $WHERE, @VALUE) +# ----------------------------------------------------- +# Like define_variable, but the value is a list, and the variable may +# be defined conditionally. The second argument is the Condition +# under which the value should be defined; this should be the empty +# string to define the variable unconditionally. The third argument +# is a list holding the values to use for the variable. The value is +# pretty printed in the output file. +sub define_pretty_variable ($$$@) +{ + my ($var, $cond, $where, @value) = @_; + + if (! vardef ($var, $cond)) + { + Automake::Variable::define ($var, VAR_AUTOMAKE, '', $cond, "@value", + '', $where, VAR_PRETTY); + rvar ($var)->rdef ($cond)->set_seen; + } +} + + +# define_variable ($VAR, $VALUE, $WHERE) +# -------------------------------------- +# Define a new Automake Makefile variable VAR to VALUE, but only if +# not already defined. +sub define_variable ($$$) +{ + my ($var, $value, $where) = @_; + define_pretty_variable ($var, TRUE, $where, $value); +} + + +# define_files_variable ($VAR, \@BASENAME, $EXTENSION, $WHERE) +# ----------------------------------------------------------- +# Define the $VAR which content is the list of file names composed of +# a @BASENAME and the $EXTENSION. +sub define_files_variable ($\@$$) +{ + my ($var, $basename, $extension, $where) = @_; + define_variable ($var, + join (' ', map { "$_.$extension" } @$basename), + $where); +} + + +# Like define_variable, but define a variable to be the configure +# substitution by the same name. +sub define_configure_variable ($) +{ + my ($var) = @_; + + my $pretty = VAR_ASIS; + my $owner = VAR_CONFIGURE; + + # Some variables we do not want to output. For instance it + # would be a bad idea to output `U = @U@` when `@U@` can be + # substituted as `\`. + $pretty = VAR_SILENT if exists $ignored_configure_vars{$var}; + + # ANSI2KNR is a variable that Automake wants to redefine, so + # it must be owned by Automake. (It is also used as a proof + # that AM_C_PROTOTYPES has been run, that's why we do not simply + # omit the AC_SUBST.) + $owner = VAR_AUTOMAKE if $var eq 'ANSI2KNR'; + + Automake::Variable::define ($var, $owner, '', TRUE, subst $var, + '', $configure_vars{$var}, $pretty); +} + + +# define_compiler_variable ($LANG) +# -------------------------------- +# Define a compiler variable. We also handle defining the `LT' +# version of the command when using libtool. +sub define_compiler_variable ($) +{ + my ($lang) = @_; + + my ($var, $value) = ($lang->compiler, $lang->compile); + my $libtool_tag = ''; + $libtool_tag = '--tag=' . $lang->libtool_tag . ' ' + if $lang->libtool_tag && exists $libtool_tags{$lang->libtool_tag}; + &define_variable ($var, $value, INTERNAL); + &define_variable ("LT$var", + "\$(LIBTOOL) $libtool_tag\$(AM_LIBTOOLFLAGS) " + . "\$(LIBTOOLFLAGS) --mode=compile $value", + INTERNAL) + if var ('LIBTOOL'); +} + + +# define_linker_variable ($LANG) +# ------------------------------ +# Define linker variables. +sub define_linker_variable ($) +{ + my ($lang) = @_; + + my $libtool_tag = ''; + $libtool_tag = '--tag=' . $lang->libtool_tag . ' ' + if $lang->libtool_tag && exists $libtool_tags{$lang->libtool_tag}; + # CCLD = $(CC). + &define_variable ($lang->lder, $lang->ld, INTERNAL); + # CCLINK = $(CCLD) blah blah... + &define_variable ($lang->linker, + ((var ('LIBTOOL') ? + "\$(LIBTOOL) $libtool_tag\$(AM_LIBTOOLFLAGS) " + . "\$(LIBTOOLFLAGS) --mode=link " : '') + . $lang->link), + INTERNAL); +} + +sub define_per_target_linker_variable ($$) +{ + my ($linker, $target) = @_; + + # If the user wrote a custom link command, we don't define ours. + return "${target}_LINK" + if set_seen "${target}_LINK"; + + my $xlink = $linker ? $linker : 'LINK'; + + my $lang = $link_languages{$xlink}; + prog_error "Unknown language for linker variable `$xlink'" + unless $lang; + + my $link_command = $lang->link; + if (var 'LIBTOOL') + { + my $libtool_tag = ''; + $libtool_tag = '--tag=' . $lang->libtool_tag . ' ' + if $lang->libtool_tag && exists $libtool_tags{$lang->libtool_tag}; + + $link_command = + "\$(LIBTOOL) $libtool_tag\$(AM_LIBTOOLFLAGS) \$(LIBTOOLFLAGS) " + . "--mode=link " . $link_command; + } + + # Rewrite each occurrence of `AM_$flag' in the link + # command into `${derived}_$flag' if it exists. + my $orig_command = $link_command; + my @flags = (@{$lang->flags}, 'LDFLAGS'); + push @flags, 'LIBTOOLFLAGS' if var 'LIBTOOL'; + for my $flag (@flags) + { + my $val = "${target}_$flag"; + $link_command =~ s/\(AM_$flag\)/\($val\)/ + if set_seen ($val); + } + + # If the computed command is the same as the generic command, use + # the command linker variable. + return $lang->linker + if $link_command eq $orig_command; + + &define_variable ("${target}_LINK", $link_command, INTERNAL); + return "${target}_LINK"; +} + +################################################################ + +# &check_trailing_slash ($WHERE, $LINE) +# -------------------------------------- +# Return 1 iff $LINE ends with a slash. +# Might modify $LINE. +sub check_trailing_slash ($\$) +{ + my ($where, $line) = @_; + + # Ignore `##' lines. + return 0 if $$line =~ /$IGNORE_PATTERN/o; + + # Catch and fix a common error. + msg "syntax", $where, "whitespace following trailing backslash" + if $$line =~ s/\\\s+\n$/\\\n/; + + return $$line =~ /\\$/; +} + + +# &read_am_file ($AMFILE, $WHERE) +# ------------------------------- +# Read Makefile.am and set up %contents. Simultaneously copy lines +# from Makefile.am into $output_trailer, or define variables as +# appropriate. NOTE we put rules in the trailer section. We want +# user rules to come after our generated stuff. +sub read_am_file ($$) +{ + my ($amfile, $where) = @_; + + my $am_file = new Automake::XFile ("< $amfile"); + verb "reading $amfile"; + + # Keep track of the youngest output dependency. + my $mtime = mtime $amfile; + $output_deps_greatest_timestamp = $mtime + if $mtime > $output_deps_greatest_timestamp; + + my $spacing = ''; + my $comment = ''; + my $blank = 0; + my $saw_bk = 0; + my $var_look = VAR_ASIS; + + use constant IN_VAR_DEF => 0; + use constant IN_RULE_DEF => 1; + use constant IN_COMMENT => 2; + my $prev_state = IN_RULE_DEF; + + while ($_ = $am_file->getline) + { + $where->set ("$amfile:$."); + if (/$IGNORE_PATTERN/o) + { + # Merely delete comments beginning with two hashes. + } + elsif (/$WHITE_PATTERN/o) + { + error $where, "blank line following trailing backslash" + if $saw_bk; + # Stick a single white line before the incoming macro or rule. + $spacing = "\n"; + $blank = 1; + # Flush all comments seen so far. + if ($comment ne '') + { + $output_vars .= $comment; + $comment = ''; + } + } + elsif (/$COMMENT_PATTERN/o) + { + # Stick comments before the incoming macro or rule. Make + # sure a blank line precedes the first block of comments. + $spacing = "\n" unless $blank; + $blank = 1; + $comment .= $spacing . $_; + $spacing = ''; + $prev_state = IN_COMMENT; + } + else + { + last; + } + $saw_bk = check_trailing_slash ($where, $_); + } + + # We save the conditional stack on entry, and then check to make + # sure it is the same on exit. This lets us conditionally include + # other files. + my @saved_cond_stack = @cond_stack; + my $cond = new Automake::Condition (@cond_stack); + + my $last_var_name = ''; + my $last_var_type = ''; + my $last_var_value = ''; + my $last_where; + # FIXME: shouldn't use $_ in this loop; it is too big. + while ($_) + { + $where->set ("$amfile:$."); + + # Make sure the line is \n-terminated. + chomp; + $_ .= "\n"; + + # Don't look at MAINTAINER_MODE_TRUE here. That shouldn't be + # used by users. @MAINT@ is an anachronism now. + $_ =~ s/\@MAINT\@//g + unless $seen_maint_mode; + + my $new_saw_bk = check_trailing_slash ($where, $_); + + if (/$IGNORE_PATTERN/o) + { + # Merely delete comments beginning with two hashes. + + # Keep any backslash from the previous line. + $new_saw_bk = $saw_bk; + } + elsif (/$WHITE_PATTERN/o) + { + # Stick a single white line before the incoming macro or rule. + $spacing = "\n"; + error $where, "blank line following trailing backslash" + if $saw_bk; + } + elsif (/$COMMENT_PATTERN/o) + { + error $where, "comment following trailing backslash" + if $saw_bk && $comment eq ''; + + # Stick comments before the incoming macro or rule. + $comment .= $spacing . $_; + $spacing = ''; + $prev_state = IN_COMMENT; + } + elsif ($saw_bk) + { + if ($prev_state == IN_RULE_DEF) + { + my $cond = new Automake::Condition @cond_stack; + $output_trailer .= $cond->subst_string; + $output_trailer .= $_; + } + elsif ($prev_state == IN_COMMENT) + { + # If the line doesn't start with a `#', add it. + # We do this because a continued comment like + # # A = foo \ + # bar \ + # baz + # is not portable. BSD make doesn't honor + # escaped newlines in comments. + s/^#?/#/; + $comment .= $spacing . $_; + } + else # $prev_state == IN_VAR_DEF + { + $last_var_value .= ' ' + unless $last_var_value =~ /\s$/; + $last_var_value .= $_; + + if (!/\\$/) + { + Automake::Variable::define ($last_var_name, VAR_MAKEFILE, + $last_var_type, $cond, + $last_var_value, $comment, + $last_where, VAR_ASIS) + if $cond != FALSE; + $comment = $spacing = ''; + } + } + } + + elsif (/$IF_PATTERN/o) + { + $cond = cond_stack_if ($1, $2, $where); + } + elsif (/$ELSE_PATTERN/o) + { + $cond = cond_stack_else ($1, $2, $where); + } + elsif (/$ENDIF_PATTERN/o) + { + $cond = cond_stack_endif ($1, $2, $where); + } + + elsif (/$RULE_PATTERN/o) + { + # Found a rule. + $prev_state = IN_RULE_DEF; + + # For now we have to output all definitions of user rules + # and can't diagnose duplicates (see the comment in + # Automake::Rule::define). So we go on and ignore the return value. + Automake::Rule::define ($1, $amfile, RULE_USER, $cond, $where); + + check_variable_expansions ($_, $where); + + $output_trailer .= $comment . $spacing; + my $cond = new Automake::Condition @cond_stack; + $output_trailer .= $cond->subst_string; + $output_trailer .= $_; + $comment = $spacing = ''; + } + elsif (/$ASSIGNMENT_PATTERN/o) + { + # Found a macro definition. + $prev_state = IN_VAR_DEF; + $last_var_name = $1; + $last_var_type = $2; + $last_var_value = $3; + $last_where = $where->clone; + if ($3 ne '' && substr ($3, -1) eq "\\") + { + # We preserve the `\' because otherwise the long lines + # that are generated will be truncated by broken + # `sed's. + $last_var_value = $3 . "\n"; + } + # Normally we try to output variable definitions in the + # same format they were input. However, POSIX compliant + # systems are not required to support lines longer than + # 2048 bytes (most notably, some sed implementation are + # limited to 4000 bytes, and sed is used by config.status + # to rewrite Makefile.in into Makefile). Moreover nobody + # would really write such long lines by hand since it is + # hardly maintainable. So if a line is longer that 1000 + # bytes (an arbitrary limit), assume it has been + # automatically generated by some tools, and flatten the + # variable definition. Otherwise, keep the variable as it + # as been input. + $var_look = VAR_PRETTY if length ($last_var_value) >= 1000; + + if (!/\\$/) + { + Automake::Variable::define ($last_var_name, VAR_MAKEFILE, + $last_var_type, $cond, + $last_var_value, $comment, + $last_where, $var_look) + if $cond != FALSE; + $comment = $spacing = ''; + $var_look = VAR_ASIS; + } + } + elsif (/$INCLUDE_PATTERN/o) + { + my $path = $1; + + if ($path =~ s/^\$\(top_srcdir\)\///) + { + push (@include_stack, "\$\(top_srcdir\)/$path"); + # Distribute any included file. + + # Always use the $(top_srcdir) prefix in DIST_COMMON, + # otherwise OSF make will implicitly copy the included + # file in the build tree during `make distdir' to satisfy + # the dependency. + # (subdircond2.test and subdircond3.test will fail.) + push_dist_common ("\$\(top_srcdir\)/$path"); + } + else + { + $path =~ s/\$\(srcdir\)\///; + push (@include_stack, "\$\(srcdir\)/$path"); + # Always use the $(srcdir) prefix in DIST_COMMON, + # otherwise OSF make will implicitly copy the included + # file in the build tree during `make distdir' to satisfy + # the dependency. + # (subdircond2.test and subdircond3.test will fail.) + push_dist_common ("\$\(srcdir\)/$path"); + $path = $relative_dir . "/" . $path if $relative_dir ne '.'; + } + $where->push_context ("`$path' included from here"); + &read_am_file ($path, $where); + $where->pop_context; + } + else + { + # This isn't an error; it is probably a continued rule. + # In fact, this is what we assume. + $prev_state = IN_RULE_DEF; + check_variable_expansions ($_, $where); + $output_trailer .= $comment . $spacing; + my $cond = new Automake::Condition @cond_stack; + $output_trailer .= $cond->subst_string; + $output_trailer .= $_; + $comment = $spacing = ''; + error $where, "`#' comment at start of rule is unportable" + if $_ =~ /^\t\s*\#/; + } + + $saw_bk = $new_saw_bk; + $_ = $am_file->getline; + } + + $output_trailer .= $comment; + + error ($where, "trailing backslash on last line") + if $saw_bk; + + error ($where, (@cond_stack ? "unterminated conditionals: @cond_stack" + : "too many conditionals closed in include file")) + if "@saved_cond_stack" ne "@cond_stack"; +} + + +# define_standard_variables () +# ---------------------------- +# A helper for read_main_am_file which initializes configure variables +# and variables from header-vars.am. +sub define_standard_variables +{ + my $saved_output_vars = $output_vars; + my ($comments, undef, $rules) = + file_contents_internal (1, "$libdir/am/header-vars.am", + new Automake::Location); + + foreach my $var (sort keys %configure_vars) + { + &define_configure_variable ($var); + } + + $output_vars .= $comments . $rules; +} + +# Read main am file. +sub read_main_am_file +{ + my ($amfile) = @_; + + # This supports the strange variable tricks we are about to play. + prog_error (macros_dump () . "variable defined before read_main_am_file") + if (scalar (variables) > 0); + + # Generate copyright header for generated Makefile.in. + # We do discard the output of predefined variables, handled below. + $output_vars = ("# $in_file_name generated by automake " + . $VERSION . " from $am_file_name.\n"); + $output_vars .= '# ' . subst ('configure_input') . "\n"; + $output_vars .= $gen_copyright; + + # We want to predefine as many variables as possible. This lets + # the user set them with `+=' in Makefile.am. + &define_standard_variables; + + # Read user file, which might override some of our values. + &read_am_file ($amfile, new Automake::Location); +} + + + +################################################################ + +# $FLATTENED +# &flatten ($STRING) +# ------------------ +# Flatten the $STRING and return the result. +sub flatten +{ + $_ = shift; + + s/\\\n//somg; + s/\s+/ /g; + s/^ //; + s/ $//; + + return $_; +} + +# transform($TOKEN, \%PAIRS) +# ========================== +# If ($TOKEN, $VAL) is in %PAIRS: +# - replaces %$TOKEN% with $VAL, +# - enables/disables ?$TOKEN? and ?!$TOKEN?, +# - replaces %?$TOKEN% with TRUE or FALSE. +sub transform($$) +{ + my ($token, $transform) = @_; + + if (substr ($token, 0, 1) eq '%') + { + my $cond = (substr ($token, 1, 1) eq '?') ? 1 : 0; + $token = substr ($token, 1 + $cond, -1); + my $val = $transform->{$token}; + prog_error "Unknown %token% `$token'" unless defined $val; + if ($cond) + { + return $val ? 'TRUE' : 'FALSE'; + } + else + { + return $val; + } + } + # Now $token is '?xxx?' or '?!xxx?'. + my $neg = (substr ($token, 1, 1) eq '!') ? 1 : 0; + $token = substr ($token, 1 + $neg, -1); + my $val = $transform->{$token}; + prog_error "Unknown ?token? `$token' (neg = $neg)" unless defined $val; + return (!!$val == $neg) ? '##%' : ''; +} + +# @PARAGRAPHS +# &make_paragraphs ($MAKEFILE, [%TRANSFORM]) +# ------------------------------------------ +# Load a $MAKEFILE, apply the %TRANSFORM, and return it as a list of +# paragraphs. +sub make_paragraphs ($%) +{ + my ($file, %transform) = @_; + + # Complete %transform with global options. + # Note that %transform goes last, so it overrides global options. + %transform = ('CYGNUS' => !! option 'cygnus', + 'MAINTAINER-MODE' + => $seen_maint_mode ? subst ('MAINTAINER_MODE_TRUE') : '', + + 'BZIP2' => !! option 'dist-bzip2', + 'COMPRESS' => !! option 'dist-tarZ', + 'GZIP' => ! option 'no-dist-gzip', + 'SHAR' => !! option 'dist-shar', + 'ZIP' => !! option 'dist-zip', + + 'INSTALL-INFO' => ! option 'no-installinfo', + 'INSTALL-MAN' => ! option 'no-installman', + 'CK-NEWS' => !! option 'check-news', + + 'SUBDIRS' => !! var ('SUBDIRS'), + 'TOPDIR_P' => $relative_dir eq '.', + + 'BUILD' => ($seen_canonical >= AC_CANONICAL_BUILD), + 'HOST' => ($seen_canonical >= AC_CANONICAL_HOST), + 'TARGET' => ($seen_canonical >= AC_CANONICAL_TARGET), + + 'LIBTOOL' => !! var ('LIBTOOL'), + 'NONLIBTOOL' => 1, + 'FIRST' => ! $transformed_files{$file}, + %transform); + + $transformed_files{$file} = 1; + $_ = $am_file_cache{$file}; + + if (! defined $_) + { + verb "reading $file"; + # Swallow the whole file. + my $fc_file = new Automake::XFile "< $file"; + my $saved_dollar_slash = $/; + undef $/; + $_ = $fc_file->getline; + $/ = $saved_dollar_slash; + $fc_file->close; + + # Remove ##-comments. + # Besides we don't need more than two consecutive new-lines. + s/(?:$IGNORE_PATTERN|(?<=\n\n)\n+)//gom; + + $am_file_cache{$file} = $_; + } + + # Substitute Automake template tokens. + s/(?:%\??[\w\-]+%|\?!?[\w\-]+\?)/transform($&, \%transform)/ge; + # transform() may have added some ##%-comments to strip. + # (we use `##%' instead of `##' so we can distinguish ##%##%##% from + # ####### and do not remove the latter.) + s/^[ \t]*(?:##%)+.*\n//gm; + + # Split at unescaped new lines. + my @lines = split (/(?set ($file); + + my $result_vars = ''; + my $result_rules = ''; + my $comment = ''; + my $spacing = ''; + + # The following flags are used to track rules spanning across + # multiple paragraphs. + my $is_rule = 0; # 1 if we are processing a rule. + my $discard_rule = 0; # 1 if the current rule should not be output. + + # We save the conditional stack on entry, and then check to make + # sure it is the same on exit. This lets us conditionally include + # other files. + my @saved_cond_stack = @cond_stack; + my $cond = new Automake::Condition (@cond_stack); + + foreach (make_paragraphs ($file, %transform)) + { + # FIXME: no line number available. + $where->set ($file); + + # Sanity checks. + error $where, "blank line following trailing backslash:\n$_" + if /\\$/; + error $where, "comment following trailing backslash:\n$_" + if /\\#/; + + if (/^$/) + { + $is_rule = 0; + # Stick empty line before the incoming macro or rule. + $spacing = "\n"; + } + elsif (/$COMMENT_PATTERN/mso) + { + $is_rule = 0; + # Stick comments before the incoming macro or rule. + $comment = "$_\n"; + } + + # Handle inclusion of other files. + elsif (/$INCLUDE_PATTERN/o) + { + if ($cond != FALSE) + { + my $file = ($is_am ? "$libdir/am/" : '') . $1; + $where->push_context ("`$file' included from here"); + # N-ary `.=' fails. + my ($com, $vars, $rules) + = file_contents_internal ($is_am, $file, $where, %transform); + $where->pop_context; + $comment .= $com; + $result_vars .= $vars; + $result_rules .= $rules; + } + } + + # Handling the conditionals. + elsif (/$IF_PATTERN/o) + { + $cond = cond_stack_if ($1, $2, $file); + } + elsif (/$ELSE_PATTERN/o) + { + $cond = cond_stack_else ($1, $2, $file); + } + elsif (/$ENDIF_PATTERN/o) + { + $cond = cond_stack_endif ($1, $2, $file); + } + + # Handling rules. + elsif (/$RULE_PATTERN/mso) + { + $is_rule = 1; + $discard_rule = 0; + # Separate relationship from optional actions: the first + # `new-line tab" not preceded by backslash (continuation + # line). + my $paragraph = $_; + /^(.*?)(?:(?subst_string/gme; + $result_rules .= "$spacing$comment$condparagraph\n"; + } + if (scalar @undefined_conds == 0) + { + # Remember to discard next paragraphs + # if they belong to this rule. + # (but see also FIXME: #2 above.) + $discard_rule = 1; + } + $comment = $spacing = ''; + last; + } + } + } + + elsif (/$ASSIGNMENT_PATTERN/mso) + { + my ($var, $type, $val) = ($1, $2, $3); + error $where, "variable `$var' with trailing backslash" + if /\\$/; + + $is_rule = 0; + + Automake::Variable::define ($var, + $is_am ? VAR_AUTOMAKE : VAR_MAKEFILE, + $type, $cond, $val, $comment, $where, + VAR_ASIS) + if $cond != FALSE; + + $comment = $spacing = ''; + } + else + { + # This isn't an error; it is probably some tokens which + # configure is supposed to replace, such as `@SET-MAKE@', + # or some part of a rule cut by an if/endif. + if (! $cond->false && ! ($is_rule && $discard_rule)) + { + s/^/$cond->subst_string/gme; + $result_rules .= "$spacing$comment$_\n"; + } + $comment = $spacing = ''; + } + } + + error ($where, @cond_stack ? + "unterminated conditionals: @cond_stack" : + "too many conditionals closed in include file") + if "@saved_cond_stack" ne "@cond_stack"; + + return ($comment, $result_vars, $result_rules); +} + + +# $CONTENTS +# &file_contents ($BASENAME, $WHERE, [%TRANSFORM]) +# ------------------------------------------------ +# Return contents of a file from $libdir/am, automatically skipping +# macros or rules which are already known. +sub file_contents ($$%) +{ + my ($basename, $where, %transform) = @_; + my ($comments, $variables, $rules) = + file_contents_internal (1, "$libdir/am/$basename.am", $where, + %transform); + return "$comments$variables$rules"; +} + + +# @PREFIX +# &am_primary_prefixes ($PRIMARY, $CAN_DIST, @PREFIXES) +# ----------------------------------------------------- +# Find all variable prefixes that are used for install directories. A +# prefix `zar' qualifies iff: +# +# * `zardir' is a variable. +# * `zar_PRIMARY' is a variable. +# +# As a side effect, it looks for misspellings. It is an error to have +# a variable ending in a "reserved" suffix whose prefix is unknown, e.g. +# "bin_PROGRAMS". However, unusual prefixes are allowed if a variable +# of the same name (with "dir" appended) exists. For instance, if the +# variable "zardir" is defined, then "zar_PROGRAMS" becomes valid. +# This is to provide a little extra flexibility in those cases which +# need it. +sub am_primary_prefixes ($$@) +{ + my ($primary, $can_dist, @prefixes) = @_; + + local $_; + my %valid = map { $_ => 0 } @prefixes; + $valid{'EXTRA'} = 0; + foreach my $var (variables $primary) + { + # Automake is allowed to define variables that look like primaries + # but which aren't. E.g. INSTALL_sh_DATA. + # Autoconf can also define variables like INSTALL_DATA, so + # ignore all configure variables (at least those which are not + # redefined in Makefile.am). + # FIXME: We should make sure that these variables are not + # conditionally defined (or else adjust the condition below). + my $def = $var->def (TRUE); + next if $def && $def->owner != VAR_MAKEFILE; + + my $varname = $var->name; + + if ($varname =~ /^(nobase_)?(dist_|nodist_)?(.*)_[[:alnum:]]+$/) + { + my ($base, $dist, $X) = ($1 || '', $2 || '', $3 || ''); + if ($dist ne '' && ! $can_dist) + { + err_var ($var, + "invalid variable `$varname': `dist' is forbidden"); + } + # Standard directories must be explicitly allowed. + elsif (! defined $valid{$X} && exists $standard_prefix{$X}) + { + err_var ($var, + "`${X}dir' is not a legitimate directory " . + "for `$primary'"); + } + # A not explicitly valid directory is allowed if Xdir is defined. + elsif (! defined $valid{$X} && + $var->requires_variables ("`$varname' is used", "${X}dir")) + { + # Nothing to do. Any error message has been output + # by $var->requires_variables. + } + else + { + # Ensure all extended prefixes are actually used. + $valid{"$base$dist$X"} = 1; + } + } + else + { + prog_error "unexpected variable name: $varname"; + } + } + + # Return only those which are actually defined. + return sort grep { var ($_ . '_' . $primary) } keys %valid; +} + + +# Handle `where_HOW' variable magic. Does all lookups, generates +# install code, and possibly generates code to define the primary +# variable. The first argument is the name of the .am file to munge, +# the second argument is the primary variable (e.g. HEADERS), and all +# subsequent arguments are possible installation locations. +# +# Returns list of [$location, $value] pairs, where +# $value's are the values in all where_HOW variable, and $location +# there associated location (the place here their parent variables were +# defined). +# +# FIXME: this should be rewritten to be cleaner. It should be broken +# up into multiple functions. +# +# Usage is: am_install_var (OPTION..., file, HOW, where...) +sub am_install_var +{ + my (@args) = @_; + + my $do_require = 1; + my $can_dist = 0; + my $default_dist = 0; + while (@args) + { + if ($args[0] eq '-noextra') + { + $do_require = 0; + } + elsif ($args[0] eq '-candist') + { + $can_dist = 1; + } + elsif ($args[0] eq '-defaultdist') + { + $default_dist = 1; + $can_dist = 1; + } + elsif ($args[0] !~ /^-/) + { + last; + } + shift (@args); + } + + my ($file, $primary, @prefix) = @args; + + # Now that configure substitutions are allowed in where_HOW + # variables, it is an error to actually define the primary. We + # allow `JAVA', as it is customarily used to mean the Java + # interpreter. This is but one of several Java hacks. Similarly, + # `PYTHON' is customarily used to mean the Python interpreter. + reject_var $primary, "`$primary' is an anachronism" + unless $primary eq 'JAVA' || $primary eq 'PYTHON'; + + # Get the prefixes which are valid and actually used. + @prefix = am_primary_prefixes ($primary, $can_dist, @prefix); + + # If a primary includes a configure substitution, then the EXTRA_ + # form is required. Otherwise we can't properly do our job. + my $require_extra; + + my @used = (); + my @result = (); + + foreach my $X (@prefix) + { + my $nodir_name = $X; + my $one_name = $X . '_' . $primary; + my $one_var = var $one_name; + + my $strip_subdir = 1; + # If subdir prefix should be preserved, do so. + if ($nodir_name =~ /^nobase_/) + { + $strip_subdir = 0; + $nodir_name =~ s/^nobase_//; + } + + # If files should be distributed, do so. + my $dist_p = 0; + if ($can_dist) + { + $dist_p = (($default_dist && $nodir_name !~ /^nodist_/) + || (! $default_dist && $nodir_name =~ /^dist_/)); + $nodir_name =~ s/^(dist|nodist)_//; + } + + + # Use the location of the currently processed variable. + # We are not processing a particular condition, so pick the first + # available. + my $tmpcond = $one_var->conditions->one_cond; + my $where = $one_var->rdef ($tmpcond)->location->clone; + + # Append actual contents of where_PRIMARY variable to + # @result, skipping @substitutions@. + foreach my $locvals ($one_var->value_as_list_recursive (location => 1)) + { + my ($loc, $value) = @$locvals; + # Skip configure substitutions. + if ($value =~ /^\@.*\@$/) + { + if ($nodir_name eq 'EXTRA') + { + error ($where, + "`$one_name' contains configure substitution, " + . "but shouldn't"); + } + # Check here to make sure variables defined in + # configure.ac do not imply that EXTRA_PRIMARY + # must be defined. + elsif (! defined $configure_vars{$one_name}) + { + $require_extra = $one_name + if $do_require; + } + } + else + { + push (@result, $locvals); + } + } + # A blatant hack: we rewrite each _PROGRAMS primary to include + # EXEEXT. + append_exeext { 1 } $one_name + if $primary eq 'PROGRAMS'; + # "EXTRA" shouldn't be used when generating clean targets, + # all, or install targets. We used to warn if EXTRA_FOO was + # defined uselessly, but this was annoying. + next + if $nodir_name eq 'EXTRA'; + + if ($nodir_name eq 'check') + { + push (@check, '$(' . $one_name . ')'); + } + else + { + push (@used, '$(' . $one_name . ')'); + } + + # Is this to be installed? + my $install_p = $nodir_name ne 'noinst' && $nodir_name ne 'check'; + + # If so, with install-exec? (or install-data?). + my $exec_p = ($nodir_name =~ /$EXEC_DIR_PATTERN/o); + + my $check_options_p = $install_p && !! option 'std-options'; + + # Use the location of the currently processed variable as context. + $where->push_context ("while processing `$one_name'"); + + # The variable containing all file to distribute. + my $distvar = "\$($one_name)"; + $distvar = shadow_unconditionally ($one_name, $where) + if ($dist_p && $one_var->has_conditional_contents); + + # Singular form of $PRIMARY. + (my $one_primary = $primary) =~ s/S$//; + $output_rules .= &file_contents ($file, $where, + PRIMARY => $primary, + ONE_PRIMARY => $one_primary, + DIR => $X, + NDIR => $nodir_name, + BASE => $strip_subdir, + + EXEC => $exec_p, + INSTALL => $install_p, + DIST => $dist_p, + DISTVAR => $distvar, + 'CK-OPTS' => $check_options_p); + } + + # The JAVA variable is used as the name of the Java interpreter. + # The PYTHON variable is used as the name of the Python interpreter. + if (@used && $primary ne 'JAVA' && $primary ne 'PYTHON') + { + # Define it. + define_pretty_variable ($primary, TRUE, INTERNAL, @used); + $output_vars .= "\n"; + } + + err_var ($require_extra, + "`$require_extra' contains configure substitution,\n" + . "but `EXTRA_$primary' not defined") + if ($require_extra && ! var ('EXTRA_' . $primary)); + + # Push here because PRIMARY might be configure time determined. + push (@all, '$(' . $primary . ')') + if @used && $primary ne 'JAVA' && $primary ne 'PYTHON'; + + # Make the result unique. This lets the user use conditionals in + # a natural way, but still lets us program lazily -- we don't have + # to worry about handling a particular object more than once. + # We will keep only one location per object. + my %result = (); + for my $pair (@result) + { + my ($loc, $val) = @$pair; + $result{$val} = $loc; + } + my @l = sort keys %result; + return map { [$result{$_}->clone, $_] } @l; +} + + +################################################################ + +# Each key in this hash is the name of a directory holding a +# Makefile.in. These variables are local to `is_make_dir'. +my %make_dirs = (); +my $make_dirs_set = 0; + +sub is_make_dir +{ + my ($dir) = @_; + if (! $make_dirs_set) + { + foreach my $iter (@configure_input_files) + { + $make_dirs{dirname ($iter)} = 1; + } + # We also want to notice Makefile.in's. + foreach my $iter (@other_input_files) + { + if ($iter =~ /Makefile\.in$/) + { + $make_dirs{dirname ($iter)} = 1; + } + } + $make_dirs_set = 1; + } + return defined $make_dirs{$dir}; +} + +################################################################ + +# Find the aux dir. This should match the algorithm used by +# ./configure. (See the Autoconf documentation for for +# AC_CONFIG_AUX_DIR.) +sub locate_aux_dir () +{ + if (! $config_aux_dir_set_in_configure_ac) + { + # The default auxiliary directory is the first + # of ., .., or ../.. that contains install-sh. + # Assume . if install-sh doesn't exist yet. + for my $dir (qw (. .. ../..)) + { + if (-f "$dir/install-sh") + { + $config_aux_dir = $dir; + last; + } + } + $config_aux_dir = '.' unless $config_aux_dir; + } + # Avoid unsightly '/.'s. + $am_config_aux_dir = + '$(top_srcdir)' . ($config_aux_dir eq '.' ? "" : "/$config_aux_dir"); + $am_config_aux_dir =~ s,/*$,,; +} + + +# &maybe_push_required_file ($DIR, $FILE, $FULLFILE) +# -------------------------------------------------- +# See if we want to push this file onto dist_common. This function +# encodes the rules for deciding when to do so. +sub maybe_push_required_file +{ + my ($dir, $file, $fullfile) = @_; + + if ($dir eq $relative_dir) + { + push_dist_common ($file); + return 1; + } + elsif ($relative_dir eq '.' && ! &is_make_dir ($dir)) + { + # If we are doing the topmost directory, and the file is in a + # subdir which does not have a Makefile, then we distribute it + # here. + + # If a required file is above the source tree, it is important + # to prefix it with `$(srcdir)' so that no VPATH search is + # performed. Otherwise problems occur with Make implementations + # that rewrite and simplify rules whose dependencies are found in a + # VPATH location. Here is an example with OSF1/Tru64 Make. + # + # % cat Makefile + # VPATH = sub + # distdir: ../a + # echo ../a + # % ls + # Makefile a + # % make + # echo a + # a + # + # Dependency `../a' was found in `sub/../a', but this make + # implementation simplified it as `a'. (Note that the sub/ + # directory does not even exist.) + # + # This kind of VPATH rewriting seems hard to cancel. The + # distdir.am hack against VPATH rewriting works only when no + # simplification is done, i.e., for dependencies which are in + # subdirectories, not in enclosing directories. Hence, in + # the latter case we use a full path to make sure no VPATH + # search occurs. + $fullfile = '$(srcdir)/' . $fullfile + if $dir =~ m,^\.\.(?:$|/),; + + push_dist_common ($fullfile); + return 1; + } + return 0; +} + + +# If a file name appears as a key in this hash, then it has already +# been checked for. This allows us not to report the same error more +# than once. +my %required_file_not_found = (); + +# &require_file_internal ($WHERE, $MYSTRICT, $DIRECTORY, @FILES) +# -------------------------------------------------------------- +# Verify that the file must exist in $DIRECTORY, or install it. +# $MYSTRICT is the strictness level at which this file becomes required. +sub require_file_internal ($$$@) +{ + my ($where, $mystrict, $dir, @files) = @_; + + foreach my $file (@files) + { + my $fullfile = "$dir/$file"; + my $found_it = 0; + my $dangling_sym = 0; + + if (-l $fullfile && ! -f $fullfile) + { + $dangling_sym = 1; + } + elsif (dir_has_case_matching_file ($dir, $file)) + { + $found_it = 1; + maybe_push_required_file ($dir, $file, $fullfile); + } + + # `--force-missing' only has an effect if `--add-missing' is + # specified. + if ($found_it && (! $add_missing || ! $force_missing)) + { + next; + } + else + { + # If we've already looked for it, we're done. You might + # wonder why we don't do this before searching for the + # file. If we do that, then something like + # AC_OUTPUT(subdir/foo foo) will fail to put foo.in into + # DIST_COMMON. + if (! $found_it) + { + next if defined $required_file_not_found{$fullfile}; + $required_file_not_found{$fullfile} = 1; + } + + if ($strictness >= $mystrict) + { + if ($dangling_sym && $add_missing) + { + unlink ($fullfile); + } + + my $trailer = ''; + my $suppress = 0; + + # Only install missing files according to our desired + # strictness level. + my $message = "required file `$fullfile' not found"; + if ($add_missing) + { + if (-f "$libdir/$file") + { + $suppress = 1; + + # Install the missing file. Symlink if we + # can, copy if we must. Note: delete the file + # first, in case it is a dangling symlink. + $message = "installing `$fullfile'"; + # Windows Perl will hang if we try to delete a + # file that doesn't exist. + unlink ($fullfile) if -f $fullfile; + if ($symlink_exists && ! $copy_missing) + { + if (! symlink ("$libdir/$file", $fullfile)) + { + $suppress = 0; + $trailer = "; error while making link: $!"; + } + } + elsif (system ('cp', "$libdir/$file", $fullfile)) + { + $suppress = 0; + $trailer = "\n error while copying"; + } + reset_dir_cache ($dir); + } + + if (! maybe_push_required_file (dirname ($fullfile), + $file, $fullfile)) + { + if (! $found_it && ! $automake_will_process_aux_dir) + { + # We have added the file but could not push it + # into DIST_COMMON, probably because this is + # an auxiliary file and we are not processing + # the top level Makefile. Furthermore Automake + # hasn't been asked to create the Makefile.in + # that distribute the aux dir files. + error ($where, 'Please make a full run of automake' + . " so $fullfile gets distributed."); + } + } + } + else + { + $trailer = "\n `automake --add-missing' can install `$file'" + if -f "$libdir/$file"; + } + + # If --force-missing was specified, and we have + # actually found the file, then do nothing. + next + if $found_it && $force_missing; + + # If we couldn't install the file, but it is a target in + # the Makefile, don't print anything. This allows files + # like README, AUTHORS, or THANKS to be generated. + next + if !$suppress && rule $file; + + msg ($suppress ? 'note' : 'error', $where, "$message$trailer"); + } + } + } +} + +# &require_file ($WHERE, $MYSTRICT, @FILES) +# ----------------------------------------- +sub require_file ($$@) +{ + my ($where, $mystrict, @files) = @_; + require_file_internal ($where, $mystrict, $relative_dir, @files); +} + +# &require_file_with_macro ($COND, $MACRO, $MYSTRICT, @FILES) +# ----------------------------------------------------------- +sub require_file_with_macro ($$$@) +{ + my ($cond, $macro, $mystrict, @files) = @_; + $macro = rvar ($macro) unless ref $macro; + require_file ($macro->rdef ($cond)->location, $mystrict, @files); +} + +# &require_libsource_with_macro ($COND, $MACRO, $MYSTRICT, @FILES) +# ---------------------------------------------------------------- +# Require an AC_LIBSOURCEd file. If AC_CONFIG_LIBOBJ_DIR was called, it +# must be in that directory. Otherwise expect it in the current directory. +sub require_libsource_with_macro ($$$@) +{ + my ($cond, $macro, $mystrict, @files) = @_; + $macro = rvar ($macro) unless ref $macro; + if ($config_libobj_dir) + { + require_file_internal ($macro->rdef ($cond)->location, $mystrict, + $config_libobj_dir, @files); + } + else + { + require_file ($macro->rdef ($cond)->location, $mystrict, @files); + } +} + +# &require_conf_file ($WHERE, $MYSTRICT, @FILES) +# ---------------------------------------------- +# Looks in configuration path, as specified by AC_CONFIG_AUX_DIR. +sub require_conf_file ($$@) +{ + my ($where, $mystrict, @files) = @_; + require_file_internal ($where, $mystrict, $config_aux_dir, @files); +} + + +# &require_conf_file_with_macro ($COND, $MACRO, $MYSTRICT, @FILES) +# ---------------------------------------------------------------- +sub require_conf_file_with_macro ($$$@) +{ + my ($cond, $macro, $mystrict, @files) = @_; + require_conf_file (rvar ($macro)->rdef ($cond)->location, + $mystrict, @files); +} + +################################################################ + +# &require_build_directory ($DIRECTORY) +# ------------------------------------ +# Emit rules to create $DIRECTORY if needed, and return +# the file that any target requiring this directory should be made +# dependent upon. +# We don't want to emit the rule twice, and want to reuse it +# for directories with equivalent names (e.g., `foo/bar' and `./foo//bar'). +sub require_build_directory ($) +{ + my $directory = shift; + + return $directory_map{$directory} if exists $directory_map{$directory}; + + my $cdir = File::Spec->canonpath ($directory); + + if (exists $directory_map{$cdir}) + { + my $stamp = $directory_map{$cdir}; + $directory_map{$directory} = $stamp; + return $stamp; + } + + my $dirstamp = "$cdir/\$(am__dirstamp)"; + + $directory_map{$directory} = $dirstamp; + $directory_map{$cdir} = $dirstamp; + + # Set a variable for the dirstamp basename. + define_pretty_variable ('am__dirstamp', TRUE, INTERNAL, + '$(am__leading_dot)dirstamp'); + + # Directory must be removed by `make distclean'. + $clean_files{$dirstamp} = DIST_CLEAN; + + $output_rules .= ("$dirstamp:\n" + . "\t\@\$(MKDIR_P) $directory\n" + . "\t\@: > $dirstamp\n"); + + return $dirstamp; +} + +# &require_build_directory_maybe ($FILE) +# -------------------------------------- +# If $FILE lies in a subdirectory, emit a rule to create this +# directory and return the file that $FILE should be made +# dependent upon. Otherwise, just return the empty string. +sub require_build_directory_maybe ($) +{ + my $file = shift; + my $directory = dirname ($file); + + if ($directory ne '.') + { + return require_build_directory ($directory); + } + else + { + return ''; + } +} + +################################################################ + +# Push a list of files onto dist_common. +sub push_dist_common +{ + prog_error "push_dist_common run after handle_dist" + if $handle_dist_run; + Automake::Variable::define ('DIST_COMMON', VAR_AUTOMAKE, '+', TRUE, "@_", + '', INTERNAL, VAR_PRETTY); +} + + +################################################################ + +# generate_makefile ($MAKEFILE_AM, $MAKEFILE_IN) +# ---------------------------------------------- +# Generate a Makefile.in given the name of the corresponding Makefile and +# the name of the file output by config.status. +sub generate_makefile ($$) +{ + my ($makefile_am, $makefile_in) = @_; + + # Reset all the Makefile.am related variables. + initialize_per_input; + + # AUTOMAKE_OPTIONS can contains -W flags to disable or enable + # warnings for this file. So hold any warning issued before + # we have processed AUTOMAKE_OPTIONS. + buffer_messages ('warning'); + + # Name of input file ("Makefile.am") and output file + # ("Makefile.in"). These have no directory components. + $am_file_name = basename ($makefile_am); + $in_file_name = basename ($makefile_in); + + # $OUTPUT is encoded. If it contains a ":" then the first element + # is the real output file, and all remaining elements are input + # files. We don't scan or otherwise deal with these input files, + # other than to mark them as dependencies. See + # &scan_autoconf_files for details. + my ($makefile, @inputs) = split (/:/, $output_files{$makefile_in}); + + $relative_dir = dirname ($makefile); + $am_relative_dir = dirname ($makefile_am); + $topsrcdir = backname ($relative_dir); + + read_main_am_file ($makefile_am); + if (handle_options) + { + # Process buffered warnings. + flush_messages; + # Fatal error. Just return, so we can continue with next file. + return; + } + # Process buffered warnings. + flush_messages; + + # There are a few install-related variables that you should not define. + foreach my $var ('PRE_INSTALL', 'POST_INSTALL', 'NORMAL_INSTALL') + { + my $v = var $var; + if ($v) + { + my $def = $v->def (TRUE); + prog_error "$var not defined in condition TRUE" + unless $def; + reject_var $var, "`$var' should not be defined" + if $def->owner != VAR_AUTOMAKE; + } + } + + # Catch some obsolete variables. + msg_var ('obsolete', 'INCLUDES', + "`INCLUDES' is the old name for `AM_CPPFLAGS' (or `*_CPPFLAGS')") + if var ('INCLUDES'); + + # Must do this after reading .am file. + define_variable ('subdir', $relative_dir, INTERNAL); + + # If DIST_SUBDIRS is defined, make sure SUBDIRS is, so that + # recursive rules are enabled. + define_pretty_variable ('SUBDIRS', TRUE, INTERNAL, '') + if var 'DIST_SUBDIRS' && ! var 'SUBDIRS'; + + # Check first, because we might modify some state. + check_cygnus; + check_gnu_standards; + check_gnits_standards; + + handle_configure ($makefile_am, $makefile_in, $makefile, @inputs); + handle_gettext; + handle_libraries; + handle_ltlibraries; + handle_programs; + handle_scripts; + + # These must be run after all the sources are scanned. They + # use variables defined by &handle_libraries, &handle_ltlibraries, + # or &handle_programs. + handle_compile; + handle_languages; + handle_libtool; + + # Variables used by distdir.am and tags.am. + define_pretty_variable ('SOURCES', TRUE, INTERNAL, @sources); + if (! option 'no-dist') + { + define_pretty_variable ('DIST_SOURCES', TRUE, INTERNAL, @dist_sources); + } + + handle_multilib; + handle_texinfo; + handle_emacs_lisp; + handle_python; + handle_java; + handle_man_pages; + handle_data; + handle_headers; + handle_subdirs; + handle_tags; + handle_minor_options; + # Must come after handle_programs so that %known_programs is up-to-date. + handle_tests; + + # This must come after most other rules. + handle_dist; + + handle_footer; + do_check_merge_target; + handle_all ($makefile); + + # FIXME: Gross! + if (var ('lib_LTLIBRARIES') && var ('bin_PROGRAMS')) + { + $output_rules .= "install-binPROGRAMS: install-libLTLIBRARIES\n\n"; + } + + handle_install; + handle_clean ($makefile); + handle_factored_dependencies; + + # Comes last, because all the above procedures may have + # defined or overridden variables. + $output_vars .= output_variables; + + check_typos; + + my ($out_file) = $output_directory . '/' . $makefile_in; + + if ($exit_code != 0) + { + verb "not writing $out_file because of earlier errors"; + return; + } + + if (! -d ($output_directory . '/' . $am_relative_dir)) + { + mkdir ($output_directory . '/' . $am_relative_dir, 0755); + } + + # We make sure that `all:' is the first target. + my $output = + "$output_vars$output_all$output_header$output_rules$output_trailer"; + + # Decide whether we must update the output file or not. + # We have to update in the following situations. + # * $force_generation is set. + # * any of the output dependencies is younger than the output + # * the contents of the output is different (this can happen + # if the project has been populated with a file listed in + # @common_files since the last run). + # Output's dependencies are split in two sets: + # * dependencies which are also configure dependencies + # These do not change between each Makefile.am + # * other dependencies, specific to the Makefile.am being processed + # (such as the Makefile.am itself, or any Makefile fragment + # it includes). + my $timestamp = mtime $out_file; + if (! $force_generation + && $configure_deps_greatest_timestamp < $timestamp + && $output_deps_greatest_timestamp < $timestamp + && $output eq contents ($out_file)) + { + verb "$out_file unchanged"; + # No need to update. + return; + } + + if (-e $out_file) + { + unlink ($out_file) + or fatal "cannot remove $out_file: $!\n"; + } + + my $gm_file = new Automake::XFile "> $out_file"; + verb "creating $out_file"; + print $gm_file $output; +} + +################################################################ + + + + +################################################################ + +# Print usage information. +sub usage () +{ + print "Usage: $0 [OPTION] ... [Makefile]... + +Generate Makefile.in for configure from Makefile.am. + +Operation modes: + --help print this help, then exit + --version print version number, then exit + -v, --verbose verbosely list files processed + --no-force only update Makefile.in's that are out of date + -W, --warnings=CATEGORY report the warnings falling in CATEGORY + +Dependency tracking: + -i, --ignore-deps disable dependency tracking code + --include-deps enable dependency tracking code + +Flavors: + --cygnus assume program is part of Cygnus-style tree + --foreign set strictness to foreign + --gnits set strictness to gnits + --gnu set strictness to gnu + +Library files: + -a, --add-missing add missing standard files to package + --libdir=DIR directory storing library files + -c, --copy with -a, copy missing files (default is symlink) + -f, --force-missing force update of standard files + +"; + Automake::ChannelDefs::usage; + + my ($last, @lcomm); + $last = ''; + foreach my $iter (sort ((@common_files, @common_sometimes))) + { + push (@lcomm, $iter) unless $iter eq $last; + $last = $iter; + } + + my @four; + print "\nFiles which are automatically distributed, if found:\n"; + format USAGE_FORMAT = + @<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<< + $four[0], $four[1], $four[2], $four[3] +. + $~ = "USAGE_FORMAT"; + + my $cols = 4; + my $rows = int(@lcomm / $cols); + my $rest = @lcomm % $cols; + + if ($rest) + { + $rows++; + } + else + { + $rest = $cols; + } + + for (my $y = 0; $y < $rows; $y++) + { + @four = ("", "", "", ""); + for (my $x = 0; $x < $cols; $x++) + { + last if $y + 1 == $rows && $x == $rest; + + my $idx = (($x > $rest) + ? ($rows * $rest + ($rows - 1) * ($x - $rest)) + : ($rows * $x)); + + $idx += $y; + $four[$x] = $lcomm[$idx]; + } + write; + } + + print "\nReport bugs to .\n"; + + # --help always returns 0 per GNU standards. + exit 0; +} + + +# &version () +# ----------- +# Print version information +sub version () +{ + print < + and Alexandre Duret-Lutz . + +Copyright 2006 Free Software Foundation, Inc. +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +EOF + # --version always returns 0 per GNU standards. + exit 0; +} + +################################################################ + +# Parse command line. +sub parse_arguments () +{ + # Start off as gnu. + set_strictness ('gnu'); + + my $cli_where = new Automake::Location; + my %cli_options = + ( + 'libdir=s' => \$libdir, + 'gnu' => sub { set_strictness ('gnu'); }, + 'gnits' => sub { set_strictness ('gnits'); }, + 'cygnus' => sub { set_global_option ('cygnus', $cli_where); }, + 'foreign' => sub { set_strictness ('foreign'); }, + 'include-deps' => sub { unset_global_option ('no-dependencies'); }, + 'i|ignore-deps' => sub { set_global_option ('no-dependencies', + $cli_where); }, + 'no-force' => sub { $force_generation = 0; }, + 'f|force-missing' => \$force_missing, + 'o|output-dir=s' => \$output_directory, + 'a|add-missing' => \$add_missing, + 'c|copy' => \$copy_missing, + 'v|verbose' => sub { setup_channel 'verb', silent => 0; }, + 'W|warnings=s' => \&parse_warnings, + # These long options (--Werror and --Wno-error) for backward + # compatibility. Use -Werror and -Wno-error today. + 'Werror' => sub { parse_warnings 'W', 'error'; }, + 'Wno-error' => sub { parse_warnings 'W', 'no-error'; }, + ); + use Getopt::Long; + Getopt::Long::config ("bundling", "pass_through"); + + # See if --version or --help is used. We want to process these before + # anything else because the GNU Coding Standards require us to + # `exit 0' after processing these options, and we can't guarantee this + # if we treat other options first. (Handling other options first + # could produce error diagnostics, and in this condition it is + # confusing if Automake does `exit 0'.) + my %cli_options_1st_pass = + ( + 'version' => \&version, + 'help' => \&usage, + # Recognize all other options (and their arguments) but do nothing. + map { $_ => sub {} } (keys %cli_options) + ); + my @ARGV_backup = @ARGV; + Getopt::Long::GetOptions %cli_options_1st_pass + or exit 1; + @ARGV = @ARGV_backup; + + # Now *really* process the options. This time we know that --help + # and --version are not present, but we specify them nonetheless so + # that ambiguous abbreviation are diagnosed. + Getopt::Long::GetOptions %cli_options, 'version' => sub {}, 'help' => sub {} + or exit 1; + + if (defined $output_directory) + { + msg 'obsolete', "`--output-dir' is deprecated\n"; + } + else + { + # In the next release we'll remove this entirely. + $output_directory = '.'; + } + + return unless @ARGV; + + if ($ARGV[0] =~ /^-./) + { + my %argopts; + for my $k (keys %cli_options) + { + if ($k =~ /(.*)=s$/) + { + map { $argopts{(length ($_) == 1) + ? "-$_" : "--$_" } = 1; } (split (/\|/, $1)); + } + } + if ($ARGV[0] eq '--') + { + shift @ARGV; + } + elsif (exists $argopts{$ARGV[0]}) + { + fatal ("option `$ARGV[0]' requires an argument\n" + . "Try `$0 --help' for more information."); + } + else + { + fatal ("unrecognized option `$ARGV[0]'.\n" + . "Try `$0 --help' for more information."); + } + } + + my $errspec = 0; + foreach my $arg (@ARGV) + { + fatal ("empty argument\nTry `$0 --help' for more information.") + if ($arg eq ''); + + # Handle $local:$input syntax. + my ($local, @rest) = split (/:/, $arg); + @rest = ("$local.in",) unless @rest; + my $input = locate_am @rest; + if ($input) + { + push @input_files, $input; + $output_files{$input} = join (':', ($local, @rest)); + } + else + { + error "no Automake input file found for `$arg'"; + $errspec = 1; + } + } + fatal "no input file found among supplied arguments" + if $errspec && ! @input_files; +} + +################################################################ + +# Parse the WARNINGS environment variable. +parse_WARNINGS; + +# Parse command line. +parse_arguments; + +$configure_ac = require_configure_ac; + +# Do configure.ac scan only once. +scan_autoconf_files; + +if (! @input_files) + { + my $msg = ''; + $msg = "\nDid you forget AC_CONFIG_FILES([Makefile]) in $configure_ac?" + if -f 'Makefile.am'; + fatal ("no `Makefile.am' found for any configure output$msg"); + } + +# Now do all the work on each file. +foreach my $file (@input_files) + { + ($am_file = $file) =~ s/\.in$//; + if (! -f ($am_file . '.am')) + { + error "`$am_file.am' does not exist"; + } + else + { + # Any warning setting now local to this Makefile.am. + dup_channel_setup; + + generate_makefile ($am_file . '.am', $file); + + # Back out any warning setting. + drop_channel_setup; + } + } + +exit $exit_code; + + +### 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: diff --git a/bin/autoopts-config b/bin/autoopts-config new file mode 100644 index 00000000..a5b0ff70 --- /dev/null +++ b/bin/autoopts-config @@ -0,0 +1,104 @@ +#!/bin/sh +## --------------------------------------------------------------------- +## autoopts-config.in -- Tell a client where to find installed autoopts +## +## Autoopts copyright 1992-2002 Bruce Korb +## +## Time-stamp: "2002-09-14 11:28:43 bkorb" +## Author: Bruce Korb +## Maintainer: Bruce Korb +## Created: Mon Jun 30 15:35:12 1997 +## by: bkorb +## --------------------------------------------------------------------- +## $Id: autoopts-config.in,v 2.14 2002/09/14 18:36:27 bkorb Exp $ +## --------------------------------------------------------------------- +## Code: + +# Configured values: +# + prefix=/usr + datadir=${prefix}/share + includedir=${prefix}/include +exec_prefix=${prefix} + bindir=${exec_prefix}/bin + libdir=${exec_prefix}/lib + exeext=.exe + package=autogen + version=18:4:9 + +# Derived values: +# + tag=libopts-`echo ${version} | sed 's,:,.,g'` + autogen="${bindir}/autogen${exeext}" + ldflags="-L${libdir} -lopts" + libs="${ldflags}" + pkgdatadir="${datadir}/${package}" + libsrc="${pkgdatadir}/${tag}.tar.gz" +static_libs="${libdir}/libopts.a" + everything="NOT FOR DISPLAY" + +[ "${includedir}" = "/usr/include" ] && cflags="" || cflags="-I${includedir}" + +# Displayable values: +# +optlist="autogen bindir cflags exec_prefix ldflags libs libsrc package + pkgdatadir prefix static_libs version everything" + +for o in $optlist +do eval echo_${o}=false ; done + +usage() +{ + cat <> [ ... ] +Options may be one or more of: +EOF + for o in $optlist + do + echo " ${o}" + done | sed 's,_,-,g' + echo '"everything" will print out the list of names and values.' + exit $1 +} + +if test $# -eq 0; then + usage 1 1>&2 +fi + +# Figure out what's wanted +# +while test $# -gt 0; do + o=`echo $1 | sed 's,^-*,,;s/-/_/g'` + + case $o in + everything | \ + \*) for o in $optlist + do eval echo_${o}=true + done ;; + + help | h | \? ) usage 0 ;; + + *) eval "f=\$echo_${o}" || usage 1 2>&1 + [ -n "$f" ] || usage 1 2>&1 + eval echo_${o}=true || usage 1 2>&1 + ;; + esac + shift +done + +if ${echo_everything} +then + echo_everything=false + for o in $optlist + do if eval \${echo_${o}} + then eval printf \""%-12s --> %s\\n"\" ${o} \"\${${o}}\" ; fi + done +else + for o in $optlist + do if eval \${echo_${o}} + then eval echo \${${o}} ; fi + done +fi + +exit 0 +## end autoopts-config.in diff --git a/bin/autoreconf b/bin/autoreconf new file mode 100644 index 00000000..f1dfef26 --- /dev/null +++ b/bin/autoreconf @@ -0,0 +1,698 @@ +#! /bin/perl -w +# -*- perl -*- +# Generated from autoreconf.in; do not edit by hand. + +eval 'case $# in 0) exec /bin/perl -S "$0";; *) exec /bin/perl -S "$0" "$@";; esac' + if 0; + +# autoreconf - install the GNU Build System in a directory tree +# Copyright (C) 1994, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 +# 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 2, 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, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + +# Written by David J. MacKenzie. +# Extended and rewritten in Perl by Akim Demaille. + +BEGIN +{ + my $datadir = $ENV{'autom4te_perllibdir'} || '/usr/share/autoconf'; + unshift @INC, $datadir; + + # 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; +# Do not use Cwd::chdir, since it might hang. +use Cwd 'cwd'; +use strict; + +## ----------- ## +## Variables. ## +## ----------- ## + +# $HELP +# ----- +$help = "Usage: $0 [OPTION] ... [DIRECTORY] ... + +Run `autoconf' (and `autoheader', `aclocal', `automake', `autopoint' +(formerly `gettextize'), and `libtoolize' where appropriate) +repeatedly to remake the GNU Build System files in specified +DIRECTORIES and their subdirectories (defaulting to `.'). + +By default, it only remakes those files that are older than their +sources. If you install new versions of the GNU Build System, +you can make `autoreconf' remake all of the files by giving it the +`--force' option. + +Operation modes: + -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 + -i, --install copy missing auxiliary files + --no-recursive don't rebuild sub-packages + -s, --symlink with -i, install symbolic links instead of copies + -m, --make when applicable, re-run ./configure && make + -W, --warnings=CATEGORY report the warnings falling in CATEGORY [syntax] + +" . Autom4te::ChannelDefs::usage . " + +The environment variable \`WARNINGS\' is honored. Some subtools might +support other warning types, using \`all' is encouraged. + +Library directories: + -B, --prepend-include=DIR prepend directory DIR to search path + -I, --include=DIR append directory DIR to search path + +The environment variables AUTOCONF, AUTOHEADER, AUTOMAKE, ACLOCAL, +AUTOPOINT, LIBTOOLIZE, M4 are honored. + +Report bugs to . +"; + +# $VERSION +# -------- +$version = "autoreconf (GNU Autoconf) 2.61 +Copyright (C) 2006 Free Software Foundation, Inc. +This is free software. You may redistribute copies of it under the terms of +the GNU General Public License . +There is NO WARRANTY, to the extent permitted by law. + +Written by David J. MacKenzie and Akim Demaille. +"; + +# Lib files. +my $autoconf = $ENV{'AUTOCONF'} || '/usr/bin/autoconf'; +my $autoheader = $ENV{'AUTOHEADER'} || '/usr/bin/autoheader'; +my $automake = $ENV{'AUTOMAKE'} || 'automake'; +my $aclocal = $ENV{'ACLOCAL'} || 'aclocal'; +my $libtoolize = $ENV{'LIBTOOLIZE'} || 'libtoolize'; +my $autopoint = $ENV{'AUTOPOINT'} || 'autopoint'; + +# --install -- as --add-missing in other tools. +my $install = 0; +# symlink -- when --install, use symlinks instead. +my $symlink = 0; +# Does aclocal support --force? +my $aclocal_supports_force = 0; +# Does automake support --force-missing? +my $automake_supports_force_missing = 0; + +my @prepend_include; +my @include; + +# List of command line warning requests. +my @warning; + +# Rerun `./configure && make'? +my $make = 0; + +# Recurse into subpackages +my $recursive = 1; + +## ---------- ## +## Routines. ## +## ---------- ## + + +# parse_args () +# ------------- +# Process any command line arguments. +sub parse_args () +{ + my $srcdir; + + getopt ("W|warnings=s" => \@warning, + 'I|include=s' => \@include, + 'B|prepend-include=s' => \@prepend_include, + 'i|install' => \$install, + 's|symlink' => \$symlink, + 'm|make' => \$make, + 'recursive!' => \$recursive); + + # Split the warnings as a list of elements instead of a list of + # lists. + @warning = map { split /,/ } @warning; + parse_WARNINGS; + parse_warnings '--warnings', @warning; + + # Even if the user specified a configure.ac, trim to get the + # directory, and look for configure.ac again. Because (i) the code + # is simpler, and (ii) we are still able to diagnose simultaneous + # presence of configure.ac and configure.in. + @ARGV = map { /configure\.(ac|in)$/ ? dirname ($_) : $_ } @ARGV; + push @ARGV, '.' unless @ARGV; + + if ($verbose && $debug) + { + for my $prog ($autoconf, $autoheader, + $automake, $aclocal, + $autopoint, + $libtoolize) + { + xsystem ("$prog --version | sed 1q >&2"); + print STDERR "\n"; + } + } + + $aclocal_supports_force = `$aclocal --help` =~ /--force/; + $automake_supports_force_missing = `$automake --help` =~ /--force-missing/; + + # Dispatch autoreconf's option to the tools. + # --include; + $autoconf .= join (' --include=', '', @include); + $autoconf .= join (' --prepend-include=', '', @prepend_include); + $autoheader .= join (' --include=', '', @include); + $autoheader .= join (' --prepend-include=', '', @prepend_include); + + # --install and --symlink; + if ($install) + { + $automake .= ' --add-missing'; + $automake .= ' --copy' unless $symlink; + $libtoolize .= ' --copy' unless $symlink; + } + # --force; + if ($force) + { + $aclocal .= ' --force' + if $aclocal_supports_force; + $autoconf .= ' --force'; + $autoheader .= ' --force'; + $automake .= ' --force-missing' + if $automake_supports_force_missing; + $autopoint .= ' --force'; + $libtoolize .= ' --force'; + } + else + { + # The implementation of --no-force is bogus in all implementations + # of Automake up to 1.8, so we avoid it in these cases. (Automake + # 1.8 is the first version where aclocal supports force, hence + # the condition.) + $automake .= ' --no-force' + if $aclocal_supports_force; + } + # --verbose --verbose or --debug; + if ($verbose > 1 || $debug) + { + $autoconf .= ' --verbose'; + $autoheader .= ' --verbose'; + $automake .= ' --verbose'; + $aclocal .= ' --verbose'; + } + if ($debug) + { + $autoconf .= ' --debug'; + $autoheader .= ' --debug'; + $libtoolize .= ' --debug'; + } + # --warnings; + if (@warning) + { + my $warn = ' --warnings=' . join (',', @warning); + $autoconf .= $warn; + $autoheader .= $warn; + $automake .= $warn + if `$automake --help` =~ /--warnings/; + } +} + + +# &run_aclocal ($ACLOCAL, $FLAGS) +# ------------------------------- +# Update aclocal.m4 as lazily as possible, as aclocal pre-1.8 always +# overwrites aclocal.m4, hence triggers autoconf, autoheader, automake +# etc. uselessly. aclocal 1.8+ does not need this. +sub run_aclocal ($$) +{ + my ($aclocal, $flags) = @_; + + # aclocal 1.8+ does all this for free. It can be recognized by its + # --force support. + if ($aclocal_supports_force) + { + xsystem ("$aclocal $flags"); + } + else + { + xsystem ("$aclocal $flags --output=aclocal.m4t"); + # aclocal may produce no output. + if (-f 'aclocal.m4t') + { + update_file ('aclocal.m4t', 'aclocal.m4'); + # Make sure that the local m4 files are older than + # aclocal.m4. + # + # Why is not always the case? Because we already run + # aclocal at first (before tracing), which, for instance, + # can find Gettext's macros in .../share/aclocal, so we may + # have had the right aclocal.m4 already. Then autopoint is + # run, and installs locally these M4 files. Then + # autoreconf, via update_file, sees it is the _same_ + # aclocal.m4, and doesn't change its timestamp. But later, + # Automake's Makefile expresses that aclocal.m4 depends on + # these local files, which are newer, so it triggers aclocal + # again. + # + # To make sure aclocal.m4 is no older, we change the + # modification times of the local M4 files to be not newer + # than it. + # + # First, where are the local files? + my $aclocal_local_dir = '.'; + if ($flags =~ /-I\s+(\S+)/) + { + $aclocal_local_dir = $1; + } + # All the local files newer than aclocal.m4 are to be + # made not newer than it. + my $aclocal_m4_mtime = mtime ('aclocal.m4'); + for my $file (glob ("$aclocal_local_dir/*.m4"), 'acinclude.m4') + { + if ($aclocal_m4_mtime < mtime ($file)) + { + debug "aging $file to be not newer than aclocal.m4"; + utime $aclocal_m4_mtime, $aclocal_m4_mtime, $file; + } + } + } + } +} + +# &autoreconf_current_directory +# ----------------------------- +sub autoreconf_current_directory () +{ + my $configure_ac = find_configure_ac; + + # ---------------------- # + # Is it using Autoconf? # + # ---------------------- # + + my $uses_autoconf; + my $uses_gettext; + if (-f $configure_ac) + { + my $configure_ac_file = new Autom4te::XFile $configure_ac; + while ($_ = $configure_ac_file->getline) + { + s/#.*//; + s/dnl.*//; + $uses_autoconf = 1 if /AC_INIT/; + # See below for why we look for gettext here. + $uses_gettext = 1 if /^AM_GNU_GETTEXT_VERSION/; + } + } + if (!$uses_autoconf) + { + verb "$configure_ac: not using Autoconf"; + return; + } + + + # ------------------- # + # Running autopoint. # + # ------------------- # + + # Gettext is a bit of a problem: its macros are not necessarily + # visible to aclocal, so if we start with a completely striped down + # package (think of a fresh CVS checkout), running `aclocal' first + # will fail: the Gettext macros are missing. + # + # Therefore, we can't use the traces to decide if we use Gettext or + # not. I guess that once Gettext move to 2.5x we will be able to, + # but in the meanwhile forget it. + # + # We can only grep for AM_GNU_GETTEXT_VERSION in configure.ac. You + # might think this approach is naive, and indeed it is, as it + # prevents one to embed AM_GNU_GETTEXT_VERSION in another *.m4, but + # anyway we don't limit the generality, since... that's what + # autopoint does. Actually, it is even more restrictive, as it + # greps for `^AM_GNU_GETTEXT_VERSION('. We did this above, while + # scanning configure.ac. + if (!$uses_gettext) + { + verb "$configure_ac: not using Gettext"; + } + elsif (!$install) + { + verb "$configure_ac: not running autopoint: --install not given"; + } + else + { + xsystem "$autopoint"; + } + + + # ----------------- # + # Running aclocal. # + # ----------------- # + + # Run it first: it might discover new macros to add, e.g., + # AC_PROG_LIBTOOL, which we will trace later to see if Libtool is + # used. + # + # Always run it. Tracking its sources for up-to-dateness is too + # complex and too error prone. The best we can do is avoiding + # nuking the time stamp. + my $uses_aclocal = 1; + + # Nevertheless, if aclocal.m4 exists and is not made by aclocal, + # don't run aclocal. + + if (-f 'aclocal.m4') + { + my $aclocal_m4 = new Autom4te::XFile 'aclocal.m4'; + $_ = $aclocal_m4->getline; + $uses_aclocal = 0 + unless defined ($_) && /generated.*by aclocal/; + } + + # If there are flags for aclocal in Makefile.am, use them. + my $aclocal_flags = ''; + if ($uses_aclocal && -f 'Makefile.am') + { + my $makefile = new Autom4te::XFile 'Makefile.am'; + while ($_ = $makefile->getline) + { + if (/^ACLOCAL_[A-Z_]*FLAGS\s*=\s*(.*)/) + { + $aclocal_flags = $1; + last; + } + } + } + + if (!$uses_aclocal) + { + verb "$configure_ac: not using aclocal"; + } + else + { + # Some file systems have sub-second time stamps, and if so we may + # run into trouble later, after we rerun autoconf and set the + # time stamps of input files to be no greater than aclocal.m4, + # because the time-stamp-setting operation (utime) has a + # resolution of only 1 second. Work around the problem by + # ensuring that there is at least a one-second window before the + # time stamp of aclocal.m4t in which no file time stamps can + # fall. + sleep 1; + + run_aclocal ($aclocal, $aclocal_flags); + } + + # We might have to rerun aclocal if Libtool (or others) imports new + # macros. + my $rerun_aclocal = 0; + + + + # ------------------------------- # + # See what tools will be needed. # + # ------------------------------- # + + # Perform a single trace reading to avoid --force forcing a rerun + # between two --trace, that's useless. If there is no AC_INIT, then + # we are not interested: it looks like a Cygnus thingy. + my $aux_dir; + my $uses_gettext_via_traces; + my $uses_libtool; + my $uses_libltdl; + my $uses_autoheader; + my $uses_automake; + my @subdir; + verb "$configure_ac: tracing"; + my $traces = new Autom4te::XFile + ("$autoconf" + . join (' --trace=', '', + # If you change this list, update the + # `Autoreconf-preselections' section of autom4te.in. + 'AC_CONFIG_AUX_DIR:AC_CONFIG_AUX_DIR:\$1', + 'AC_CONFIG_HEADERS', + 'AC_CONFIG_SUBDIRS:AC_CONFIG_SUBDIRS:\$1', + 'AC_INIT', + 'AC_PROG_LIBTOOL', + 'LT_INIT', + 'LT_CONFIG_LTDL_DIR', + 'AM_GNU_GETTEXT', + 'AM_INIT_AUTOMAKE', + ) + . ' |'); + while ($_ = $traces->getline) + { + $aux_dir = $1 if /AC_CONFIG_AUX_DIR:(.*)/; + $uses_autoconf = 1 if /AC_INIT/; + $uses_gettext_via_traces = 1 if /AM_GNU_GETTEXT/; + $uses_libtool = 1 if /(AC_PROG_LIBTOOL|LT_INIT)/; + $uses_libltdl = 1 if /LT_CONFIG_LTDL_DIR/; + $uses_autoheader = 1 if /AC_CONFIG_HEADERS/; + $uses_automake = 1 if /AM_INIT_AUTOMAKE/; + push @subdir, split (' ', $1) if /AC_CONFIG_SUBDIRS:(.*)/ && $recursive; + } + + # The subdirs are *optional*, they may not exist. + foreach (@subdir) + { + if (-d) + { + verb "$configure_ac: adding subdirectory $_ to autoreconf"; + autoreconf ($_); + } + else + { + verb "$configure_ac: subdirectory $_ not present"; + } + } + + # Gettext consistency checks... + error "$configure_ac: AM_GNU_GETTEXT is used, but not AM_GNU_GETTEXT_VERSION" + if $uses_gettext_via_traces && ! $uses_gettext; + error "$configure_ac: AM_GNU_GETTEXT_VERSION is used, but not AM_GNU_GETTEXT" + if $uses_gettext && ! $uses_gettext_via_traces; + + + # ---------------------------- # + # Setting up the source tree. # + # ---------------------------- # + + # libtoolize, automake --add-missing etc. will drop files in the + # $AUX_DIR. But these tools fail to install these files if the + # directory itself does not exist, which valid: just imagine a CVS + # repository with hand written code only (there is not even a need + # for a Makefile.am!). + + if (defined $aux_dir && ! -d $aux_dir) + { + verb "$configure_ac: creating directory $aux_dir"; + mkdir $aux_dir, 0755 + or error "cannot create $aux_dir: $!"; + } + + + # -------------------- # + # Running libtoolize. # + # -------------------- # + + if (!$uses_libtool) + { + verb "$configure_ac: not using Libtool"; + } + elsif ($install) + { + if ($uses_libltdl) + { + $libtoolize .= " --ltdl"; + } + xsystem ($libtoolize); + $rerun_aclocal = 1; + } + else + { + verb "$configure_ac: not running libtoolize: --install not given"; + } + + + + # ------------------- # + # Rerunning aclocal. # + # ------------------- # + + # If we re-installed Libtool or Gettext, the macros might have changed. + # Automake also needs an up-to-date aclocal.m4. + if ($rerun_aclocal) + { + if (!$uses_aclocal) + { + verb "$configure_ac: not using aclocal"; + } + else + { + run_aclocal ($aclocal, $aclocal_flags); + } + } + + + # ------------------ # + # Running autoconf. # + # ------------------ # + + # Don't try to be smarter than `autoconf', which does its own up to + # date checks. + # + # We prefer running autoconf before autoheader, because (i) the + # latter runs the former, and (ii) autoconf is stricter than + # autoheader. So all in all, autoconf should give better error + # messages. + xsystem ($autoconf); + + + # -------------------- # + # Running autoheader. # + # -------------------- # + + # We now consider that if AC_CONFIG_HEADERS is used, then autoheader + # is used too. + # + # Just as for autoconf, up to date ness is performed by the tool + # itself. + # + # Run it before automake, since the latter checks the presence of + # config.h.in when it sees an AC_CONFIG_HEADERS. + if (!$uses_autoheader) + { + verb "$configure_ac: not using Autoheader"; + } + else + { + xsystem ($autoheader); + } + + + # ------------------ # + # Running automake. # + # ------------------ # + + if (!$uses_automake) + { + verb "$configure_ac: not using Automake"; + } + else + { + # We should always run automake, and let it decide whether it shall + # update the file or not. In fact, the effect of `$force' is already + # included in `$automake' via `--no-force'. + xsystem ($automake); + } + + + # -------------- # + # Running make. # + # -------------- # + + if ($make) + { + if (!-f "config.status") + { + verb "no config.status: cannot re-make"; + } + else + { + xsystem ("./config.status --recheck"); + xsystem ("./config.status"); + if (!-f "Makefile") + { + verb "no Makefile: cannot re-make"; + } + else + { + xsystem ("make"); + } + } + } +} + + +# &autoreconf ($DIRECTORY) +# ------------------------ +# Reconf the $DIRECTORY. +sub autoreconf ($) +{ + my ($directory) = @_; + my $cwd = cwd; + + # The format for this message is not free: taken from Emacs, itself + # using GNU Make's format. + verb "Entering directory `$directory'"; + chdir $directory + or error "cannot chdir to $directory: $!"; + + autoreconf_current_directory; + + # The format is not free: taken from Emacs, itself using GNU Make's + # format. + verb "Leaving directory `$directory'"; + chdir $cwd + or error "cannot chdir to $cwd: $!"; +} + + +## ------ ## +## Main. ## +## ------ ## + +# When debugging, it is convenient that all the related temporary +# files be at the same place. +mktmpdir ('ar'); +$ENV{'TMPDIR'} = $tmp; +parse_args; + +# Autoreconf all the given configure.ac. Unless `--no-recursive' is passed, +# AC_CONFIG_SUBDIRS will be traversed in &autoreconf_current_directory. +for my $directory (@ARGV) + { + require_configure_ac ($directory); + autoreconf ($directory); + } + +### 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: diff --git a/bin/autoscan b/bin/autoscan new file mode 100644 index 00000000..32b9c9d9 --- /dev/null +++ b/bin/autoscan @@ -0,0 +1,677 @@ +#! /bin/perl -w +# -*- perl -*- +# Generated from autoscan.in; do not edit by hand. + +# autoscan - Create configure.scan (a preliminary configure.ac) for a package. +# Copyright (C) 1994, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 +# 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 2, 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, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + +# Written by David MacKenzie . + +eval 'case $# in 0) exec /bin/perl -S "$0";; *) exec /bin/perl -S "$0" "$@";; esac' + if 0; + +BEGIN +{ + my $datadir = $ENV{'autom4te_perllibdir'} || '/usr/share/autoconf'; + unshift @INC, $datadir; + + # 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::Configure_ac; +use Autom4te::General; +use Autom4te::FileUtils; +use Autom4te::XFile; +use File::Basename; +use File::Find; +use strict; + +use vars qw(@cfiles @makefiles @shfiles @subdirs %printed); + +# The kind of the words we are looking for. +my @kinds = qw (function header identifier program + makevar librarie); + +# For each kind, the default macro. +my %generic_macro = + ( + 'function' => 'AC_CHECK_FUNCS', + 'header' => 'AC_CHECK_HEADERS', + 'identifier' => 'AC_CHECK_TYPES', + 'program' => 'AC_CHECK_PROGS', + 'library' => 'AC_CHECK_LIB' + ); + +my %kind_comment = + ( + 'function' => 'Checks for library functions.', + 'header' => 'Checks for header files.', + 'identifier' => 'Checks for typedefs, structures, and compiler characteristics.', + 'program' => 'Checks for programs.', + ); + +# $USED{KIND}{ITEM} is the list of locations where the ITEM (of KIND) was used +# in the user package. +# For instance $USED{function}{alloca} is the list of `file:line' where +# `alloca (...)' appears. +my %used = (); + +# $MACRO{KIND}{ITEM} is the list of macros to use to test ITEM. +# Initialized from lib/autoscan/*. E.g., $MACRO{function}{alloca} contains +# the singleton AC_FUNC_ALLOCA. Some require several checks. +my %macro = (); + +# $NEEDED_MACROS{MACRO} is an array of locations requiring MACRO. +# E.g., $NEEDED_MACROS{AC_FUNC_ALLOC} the list of `file:line' containing +# `alloca (...)'. +my %needed_macros = + ( + 'AC_PREREQ' => [$me], + ); + +my $configure_scan = 'configure.scan'; +my $log; + +# Autoconf and lib files. +my $autom4te = $ENV{'AUTOM4TE'} || '/usr/bin/autom4te'; +my $autoconf = "$autom4te --language=autoconf"; +my @prepend_include; +my @include = ('/usr/share/autoconf'); + +# $help +# ----- +$help = "Usage: $0 [OPTION] ... [SRCDIR] + +Examine source files in the directory tree rooted at SRCDIR, or the +current directory if none is given. Search the source files for +common portability problems, check for incompleteness of +`configure.ac', and create a file `$configure_scan' which is a +preliminary `configure.ac' for that package. + + -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 + +Library directories: + -B, --prepend-include=DIR prepend directory DIR to search path + -I, --include=DIR append directory DIR to search path + +Report bugs to .\n"; + +# $version +# -------- +$version = "autoscan (GNU Autoconf) 2.61 +Copyright (C) 2006 Free Software Foundation, Inc. +This is free software. You may redistribute copies of it under the terms of +the GNU General Public License . +There is NO WARRANTY, to the extent permitted by law. + +Written by David J. MacKenzie and Akim Demaille. +"; + + + + +## ------------------------ ## +## Command line interface. ## +## ------------------------ ## + +# parse_args () +# ------------- +# Process any command line arguments. +sub parse_args () +{ + getopt ('I|include=s' => \@include, + 'B|prepend-include=s' => \@prepend_include); + + die "$me: too many arguments +Try `$me --help' for more information.\n" + if @ARGV > 1; + + my $srcdir = $ARGV[0] || "."; + + verb "srcdir = $srcdir"; + chdir $srcdir || error "cannot cd to $srcdir: $!"; +} + + +# init_tables () +# -------------- +# Put values in the tables of what to do with each token. +sub init_tables () +{ + # 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.ac files. + my $file = find_file ("autoscan/autoscan.list", + reverse (@prepend_include), @include); + my $table = new Autom4te::XFile $file; + my $tables_are_consistent = 1; + + while ($_ = $table->getline) + { + # Ignore blank lines and comments. + next + if /^\s*$/ || /^\s*\#/; + + # ': ' or... + # ': warn: '. + if (/^(\S+):\s+(\S+)\s+(\S.*)$/) + { + my ($kind, $word, $macro) = ($1, $2, $3); + error "$file:$.: invalid kind: $_" + unless grep { $_ eq $kind } @kinds; + push @{$macro{$kind}{$word}}, $macro; + } + else + { + error "$file:$.: invalid definition: $_"; + } + } + + if ($debug) + { + foreach my $kind (@kinds) + { + foreach my $word (sort keys %{$macro{$kind}}) + { + print "$kind: $word: @{$macro{$kind}{$word}}\n"; + } + } + + } +} + + +# used ($KIND, $WORD, [$WHERE]) +# ----------------------------- +# $WORD is used as a $KIND. +sub used ($$;$) +{ + my ($kind, $word, $where) = @_; + $where ||= "$File::Find::name:$."; + if ( + # Check for all the libraries. But `-links' is certainly a + # `find' argument, and `-le', a `test' argument. + ($kind eq 'library' && $word !~ /^(e|inks)$/) + # Other than libraries are to be checked only if listed in + # the Autoscan library files. + || defined $macro{$kind}{$word} + ) + { + push (@{$used{$kind}{$word}}, $where); + } +} + + + +## ----------------------- ## +## Scanning source files. ## +## ----------------------- ## + + +# scan_c_file ($FILE-NAME) +# ------------------------ +sub scan_c_file ($) +{ + my ($file_name) = @_; + push @cfiles, $File::Find::name; + + # Nonzero if in a multiline comment. + my $in_comment = 0; + + my $file = new Autom4te::XFile "<$file_name"; + + while ($_ = $file->getline) + { + # Strip out comments. + if ($in_comment && s,^.*?\*/,,) + { + $in_comment = 0; + } + # The whole line is inside a commment. + next if $in_comment; + # All on one line. + s,/\*.*?\*/,,g; + + # Starting on this line. + if (s,/\*.*$,,) + { + $in_comment = 1; + } + + # Preprocessor directives. + if (s/^\s*\#\s*//) + { + if (/^include\s*<([^>]*)>/) + { + used ('header', $1); + } + if (s/^(if|ifdef|ifndef|elif)\s+//) + { + foreach my $word (split (/\W+/)) + { + used ('identifier', $word) + unless $word eq 'defined' || $word !~ /^[a-zA-Z_]/; + } + } + # Ignore other preprocessor directives. + next; + } + + # Remove string and character constants. + s,\"[^\"]*\",,g; + s,\'[^\']*\',,g; + + # Tokens in the code. + # Maybe we should ignore function definitions (in column 0)? + while (s/\b([a-zA-Z_]\w*)\s*\(/ /) + { + used ('function', $1); + } + while (s/\b([a-zA-Z_]\w*)\b/ /) + { + used ('identifier', $1); + } + } + + $file->close; +} + + +# scan_makefile($MAKEFILE-NAME) +# ----------------------------- +sub scan_makefile ($) +{ + my ($file_name) = @_; + push @makefiles, $File::Find::name; + + my $file = new Autom4te::XFile "<$file_name"; + + while ($_ = $file->getline) + { + # Strip out comments. + s/#.*//; + + # Variable assignments. + while (s/\b([a-zA-Z_]\w*)\s*=/ /) + { + used ('makevar', $1); + } + # Be sure to catch a whole word. For instance `lex$U.$(OBJEXT)' + # is a single token. Otherwise we might believe `lex' is needed. + foreach my $word (split (/\s+/)) + { + # Libraries. + if ($word =~ /^-l([a-zA-Z_]\w*)$/) + { + used ('library', $1); + } + # 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 ($file_name) = @_; + push @shfiles, $File::Find::name; + + my $file = new Autom4te::XFile "<$file_name"; + + 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 file name 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 ($_ ne '.' and -d $_ and + -f "$_/configure.in" || + -f "$_/configure.ac" || + -f "$_/configure.gnu" || + -f "$_/configure") + { + $File::Find::prune = 1; + push @subdirs, $File::Find::name; + } + 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(2.61)\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'); + + print $file "\n"; + if (@makefiles) + { + # Change DIR/Makefile.in to DIR/Makefile. + foreach my $m (@makefiles) + { + $m =~ s/\.(?:in|am)$//; + $unique_makefiles{$m}++; + } + print $file ("AC_CONFIG_FILES([", + join ("\n ", + sort keys %unique_makefiles), "])\n"); + } + if (@subdirs) + { + print $file ("AC_CONFIG_SUBDIRS([", + join ("\n ", + sort @subdirs), "])\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; +$log = new Autom4te::XFile ">$me.log"; + +$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 (-f $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: diff --git a/bin/autoupdate b/bin/autoupdate new file mode 100644 index 00000000..74bd6e00 --- /dev/null +++ b/bin/autoupdate @@ -0,0 +1,1060 @@ +#! /bin/perl -w +# -*- perl -*- +# Generated from autoupdate.in; do not edit by hand. + +# autoupdate - modernize an Autoconf file. +# Copyright (C) 1994, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 +# 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 2, 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, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + +# Originally written by David MacKenzie . +# Rewritten by Akim Demaille . + +eval 'case $# in 0) exec /bin/perl -S "$0";; *) exec /bin/perl -S "$0" "$@";; esac' + if 0; + +BEGIN +{ + my $datadir = $ENV{'autom4te_perllibdir'} || '/usr/share/autoconf'; + unshift @INC, $datadir; + + # 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 File::Basename; +use strict; + +# Lib files. +my $autom4te = $ENV{'AUTOM4TE'} || '/usr/bin/autom4te'; +my $autoconf = "$autom4te --language=autoconf"; +# We need to find m4sugar. +my @prepend_include; +my @include = ('/usr/share/autoconf'); +my $force = 0; +# m4. +my $m4 = $ENV{"M4"} || '/bin/m4'; + + +# $HELP +# ----- +$help = "Usage: $0 [OPTION] ... [TEMPLATE-FILE...] + +Update the TEMPLATE-FILE... if given, or `configure.ac' if present, +or else `configure.in', to the syntax of the current version of +Autoconf. The original files are backed up. + +Operation modes: + -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 + +Library directories: + -B, --prepend-include=DIR prepend directory DIR to search path + -I, --include=DIR append directory DIR to search path + +Report bugs to . +"; + +# $VERSION +# -------- +$version = "autoupdate (GNU Autoconf) 2.61 +Copyright (C) 2006 Free Software Foundation, Inc. +This is free software. You may redistribute copies of it under the terms of +the GNU General Public License . +There is NO WARRANTY, to the extent permitted by law. + +Written by David J. MacKenzie and Akim Demaille. +"; + +## ---------- ## +## Routines. ## +## ---------- ## + + +# parse_args () +# ------------- +# Process any command line arguments. +sub parse_args () +{ + my $srcdir; + + getopt ('I|include=s' => \@include, + 'B|prepend-include=s' => \@prepend_include, + 'f|force' => \$force); + + if (! @ARGV) + { + my $configure_ac = require_configure_ac; + push @ARGV, $configure_ac; + } +} + + + +# ----------------- # +# Autoconf macros. # +# ----------------- # + +my (%ac_macros, %au_macros, %m4_builtins); + +# HANDLE_AUTOCONF_MACROS () +# ------------------------- +# @M4_BUILTINS -- M4 builtins and a useful comment. +sub handle_autoconf_macros () +{ + # Get the builtins. + xsystem ("echo dumpdef | $m4 2>$tmp/m4.defs >/dev/null"); + my $m4_defs = new Autom4te::XFile "$tmp/m4.defs"; + while ($_ = $m4_defs->getline) + { + $m4_builtins{$1} = 1 + if /^(\w+):/; + } + $m4_defs->close; + + my $macros = new Autom4te::XFile ("$autoconf" + . " --trace AU_DEFINE:'AU:\$f:\$1'" + . " --trace define:'AC:\$f:\$1'" + . " --melt /dev/null |"); + while ($_ = $macros->getline) + { + chomp; + my ($domain, $file, $macro) = /^(AC|AU):(.*):([^:]*)$/ or next; + if ($domain eq "AU") + { + $au_macros{$macro} = 1; + } + elsif ($file =~ /(^|\/)m4sugar\/(m4sugar|version)\.m4$/) + { + # Add the m4sugar macros to m4_builtins. + $m4_builtins{$macro} = 1; + } + else + { + # Autoconf, aclocal, and m4sh macros. + $ac_macros{$macro} = 1; + } + } + $macros->close; + + + # Don't keep AU macros in @AC_MACROS. + delete $ac_macros{$_} + foreach (keys %au_macros); + # Don't keep M4sugar macros which are redefined by Autoconf, + # such as `builtin', `changequote' etc. See autoconf/autoconf.m4. + delete $ac_macros{$_} + foreach (keys %m4_builtins); + error "no current Autoconf macros found" + unless keys %ac_macros; + error "no obsolete Autoconf macros found" + unless keys %au_macros; + + if ($debug) + { + print STDERR "Current Autoconf macros:\n"; + print STDERR join (' ', sort keys %ac_macros) . "\n\n"; + print STDERR "Obsolete Autoconf macros:\n"; + print STDERR join (' ', sort keys %au_macros) . "\n\n"; + } + + # ac.m4 -- autoquoting definitions of the AC macros (M4sugar excluded). + # unac.m4 -- undefine the AC macros. + my $ac_m4 = new Autom4te::XFile ">$tmp/ac.m4"; + print $ac_m4 "# ac.m4 -- autoquoting definitions of the AC macros.\n"; + my $unac_m4 = new Autom4te::XFile ">$tmp/unac.m4"; + print $unac_m4 "# unac.m4 -- undefine the AC macros.\n"; + foreach (sort keys %ac_macros) + { + print $ac_m4 "_au_m4_define([$_], [m4_if(\$#, 0, [[\$0]], [[\$0(\$\@)]])])\n"; + print $unac_m4 "_au_m4_undefine([$_])\n"; + } + + # m4save.m4 -- save the m4 builtins. + # unm4.m4 -- disable the m4 builtins. + # m4.m4 -- enable the m4 builtins. + my $m4save_m4 = new Autom4te::XFile ">$tmp/m4save.m4"; + print $m4save_m4 "# m4save.m4 -- save the m4 builtins.\n"; + my $unm4_m4 = new Autom4te::XFile ">$tmp/unm4.m4"; + print $unm4_m4 "# unm4.m4 -- disable the m4 builtins.\n"; + my $m4_m4 = new Autom4te::XFile ">$tmp/m4.m4"; + print $m4_m4 "# m4.m4 -- enable the m4 builtins.\n"; + foreach (sort keys %m4_builtins) + { + print $m4save_m4 "_au__save([$_])\n"; + print $unm4_m4 "_au__undefine([$_])\n"; + print $m4_m4 "_au__restore([$_])\n"; + } +} + + +## -------------- ## +## Main program. ## +## -------------- ## + +parse_args; +$autoconf .= " --debug" if $debug; +$autoconf .= " --force" if $force; +$autoconf .= " --verbose" if $verbose; +$autoconf .= join (' --include=', '', @include); +$autoconf .= join (' --prepend-include=', '', @prepend_include); + +mktmpdir ('au'); +handle_autoconf_macros; + +# $au_changequote -- enable the quote `[', `]' right before any AU macro. +my $au_changequote = + 's/\b(' . join ('|', keys %au_macros) . ')\b/_au_m4_changequote([,])$1/g'; + +# au.m4 -- definitions the AU macros. +xsystem ("$autoconf --trace AU_DEFINE:'_au_defun(\@<:\@\$1\@:>\@, +\@<:\@\$2\@:>\@)' --melt /dev/null " + . ">$tmp/au.m4"); + + + +## ------------------- ## +## Process the files. ## +## ------------------- ## + +foreach my $file (@ARGV) + { + # We need an actual file. + if ($file eq '-') + { + $file = "$tmp/stdin"; + system "cat >$file"; + } + elsif (! -r "$file") + { + die "$me: $file: No such file or directory"; + } + + # input.m4 -- m4 program to produce the updated file. + # Load the values, the dispatcher, neutralize m4, and the prepared + # input file. + my $input_m4 = <<\EOF; + divert(-1) -*- Autoconf -*- + changequote([,]) + + # Define our special macros: + define([_au__defn], defn([defn])) + define([_au__divert], defn([divert])) + define([_au__include], defn([include])) + define([_au__undefine], defn([undefine])) + define([_au__save], [m4_ifdef([$1], [m4_copy([$1], [_au_$1])])]) + define([_au__restore], + [_au_m4_ifdef([_au_$1], + [_au_m4_define([$1], _au__defn([_au_$1]))])]) + + # Set up m4sugar. + include(m4sugar/m4sugar.m4) + + # Redefine __file__ to make warnings nicer; $file is replaced below. + m4_define([__file__], [$file]) + + # Redefine m4_location to fix the line number. + m4_define([m4_location], [__file__:m4_eval(__line__ - _au__first_line)]) + + # Move all the builtins into the `_au_' pseudo namespace + m4_include([m4save.m4]) + + # _au_defun(NAME, BODY) + # --------------------- + # Define NAME to BODY, plus AU activation/deactivation. + _au_m4_define([_au_defun], + [_au_m4_define([$1], + [_au_enable()dnl + $2[]dnl + _au_disable()])]) + + # Import the definition of the obsolete macros. + _au__include([au.m4]) + + + ## ------------------------ ## + ## _au_enable/_au_disable. ## + ## ------------------------ ## + + # They work by pair: each time an AU macro is activated, it runs + # _au_enable, and at its end its runs _au_disable (see _au_defun + # above). AU macros might use AU macros, which should + # enable/disable only for the outer AU macros. + # + # `_au_enabled' is used to this end, determining whether we really + # enable/disable. + + + # __au_enable + # ----------- + # Reenable the builtins, m4sugar, and the autoquoting AC macros. + _au_m4_define([__au_enable], + [_au__divert(-1) + # Enable special characters. + _au_m4_changecom([#]) + + _au__include([m4.m4]) + _au__include([ac.m4]) + + _au__divert(0)]) + + # _au_enable + # ---------- + # Called at the beginning of all the obsolete macros. If this is the + # outermost level, call __au_enable. + _au_m4_define([_au_enable], + [_au_m4_ifdef([_au_enabled], + [], + [__au_enable()])_au_dnl + _au_m4_pushdef([_au_enabled])]) + + + # __au_disable + # ------------ + # Disable the AC autoquoting macros, m4sugar, and m4. + _au_m4_define([__au_disable], + [_au__divert(-1) + _au__include([unac.m4]) + _au__include([unm4.m4]) + + # Disable special characters. + _au_m4_changequote() + _au_m4_changecom() + + _au__divert(0)]) + + # _au_disable + # ----------- + # Called at the end of all the obsolete macros. If we are at the + # outermost level, call __au_disable. + _au_m4_define([_au_disable], + [_au_m4_popdef([_au_enabled])_au_dnl + _au_m4_ifdef([_au_enabled], + [], + [__au_disable()])]) + + + ## ------------------------------- ## + ## Disable, and process the file. ## + ## ------------------------------- ## + # The AC autoquoting macros are not loaded yet, hence invoking + # `_au_disable' would be wrong. + _au__include([unm4.m4]) + + # Disable special characters, and set the first line number. + _au_m4_changequote() + _au_m4_changecom() + + _au_m4_define(_au__first_line, _au___line__)_au__divert(0)_au_dnl +EOF + + $input_m4 =~ s/^ //mg; + $input_m4 =~ s/\$file/$file/g; + + # prepared input -- input, but reenables the quote before each AU macro. + open INPUT_M4, ">$tmp/input.m4" + or error "cannot open: $!"; + open FILE, "<$file" + or error "cannot open: $!"; + print INPUT_M4 "$input_m4"; + while () + { + eval $au_changequote; + print INPUT_M4; + } + close FILE + or error "cannot close $file: $!"; + close INPUT_M4 + or error "cannot close $tmp/input.m4: $!"; + + # Now ask m4 to perform the update. + xsystem ("$m4 --include=$tmp" + . join (' --include=', '', reverse (@prepend_include)) + . join (' --include=', '', @include) + . " $tmp/input.m4 >$tmp/updated"); + update_file ("$tmp/updated", + "$file" eq "$tmp/stdin" ? '-' : "$file"); + } +exit 0; + + +# ## ---------------------------- ## +# ## How `autoupdate' functions. ## +# ## ---------------------------- ## +# +# The task of `autoupdate' is not trivial: the biggest difficulty being +# that you must limit the changes to the parts that really need to be +# updated. Finding a satisfying implementation proved to be quite hard, +# as this is the fifth implementation of `autoupdate'. +# +# Below, we will use a simple example of obsolete macro: +# +# AU_DEFUN([OLD], [NEW([$1, $2], m4_eval([$1 + $2]))]) +# AC_DEFUN([NEW], [echo "sum($1) = $2"]) +# +# the input file contains +# +# dnl The Unbelievable Truth +# OLD(1, 2) +# NEW([0, 0], [0]) +# +# Of course the expected output is +# +# dnl The Unbelievable Truth +# NEW([1, 2], [3]) +# NEW([0, 0], [0]) +# +# +# # First implementation: sed +# # ========================= +# +# The first implementation was only able to change the name of obsolete +# macros. +# +# The file `acoldnames.m4' defined the old names based on the new names. +# It was simple then to produce a sed script such as: +# +# s/OLD/NEW/g +# +# Updating merely consisted in running this script on the file to +# update. +# +# This scheme suffers an obvious limitation: that `autoupdate' was +# unable to cope with new macros that just swap some of its arguments +# compared to the old macro. Fortunately, that was enough to upgrade +# from Autoconf 1 to Autoconf 2. (But I have no idea whether the +# changes in Autoconf 2 were precisely limited by this constraint.) +# +# +# # Second implementation: hooks +# # ============================ +# +# The version 2.15 of Autoconf brought a vast number of changes compared +# to 2.13, so a solution was needed. One could think to extend the +# `sed' scripts with specialized code for complex macros. But this +# approach is of course full of flaws: +# +# a. the Autoconf maintainers have to write these snippets, which we +# just don't want to, +# +# b. I really don't think you'll ever manage to handle the quoting of +# m4 from sed. +# +# To satisfy a., let's remark that the code which implements the old +# features in term of the new feature is exactly the code which should +# replace the old code. +# +# To answer point b, as usual in the history of Autoconf, the answer, at +# least on the paper, is simple: m4 is the best tool to parse m4, so +# let's use m4. +# +# Therefore the specification is: +# +# I want to be able to tell Autoconf, well, m4, that the macro I +# am currently defining is an obsolete macro (so that the user is +# warned), which code is the code to use when running autoconf, +# but that the very same code has to be used when running +# autoupdate. To summarize, the interface I want is +# `AU_DEFUN(OLD-NAME, NEW-CODE)'. +# +# +# Now for the technical details. +# +# When running autoconf, except for the warning, AU_DEFUN is basically +# AC_DEFUN. +# +# When running autoupdate, we want *only* OLD-NAMEs to be expanded. +# This obviously means that acgeneral.m4 and acspecific.m4 must not be +# loaded. Nonetheless, because we want to use a rich set of m4 +# features, m4sugar.m4 is needed. Please note that the fact that +# Autoconf's macros are not loaded is positive on two points: +# +# - we do get an updated `configure.ac', not a `configure'! +# +# - the old macros are replaced by *calls* to the new-macros, not the +# body of the new macros, since their body is not defined!!! +# (Whoa, that's really beautiful!). +# +# Additionally we need to disable the quotes when reading the input for +# two reasons: first because otherwise `m4' will swallow the quotes of +# other macros: +# +# NEW([1, 2], 3) +# => NEW(1, 2, 3) +# +# and second, because we want to update the macro calls which are +# quoted, i.e., we want +# +# FOO([OLD(1, 2)]) +# => FOO([NEW([1, 2], [3])]) +# +# If we don't disable the quotes, only the macros called at the top +# level would be updated. +# +# So, let's disable the quotes. +# +# Well, not quite: m4sugar.m4 still needs to use quotes for some macros. +# Well, in this case, when running in autoupdate code, each macro first +# reestablishes the quotes, expands itself, and disables the quotes. +# +# Thinking a bit more, you realize that in fact, people may use `define' +# `ifelse' etc. in their files, and you certainly don't want to process +# them. Another example is `dnl': you don't want to remove the +# comments. You then realize you don't want exactly to import m4sugar: +# you want to specify when it is enabled (macros active), and disabled. +# m4sugar provides m4_disable/m4_enable to this end. +# +# You're getting close to it. Now remains one task: how to handle +# twofold definitions? +# +# Remember that the same AU_DEFUN must be understood in two different +# ways, the AC way, and the AU way. +# +# One first solution is to check whether acgeneral.m4 was loaded. But +# that's definitely not cute. Another is simply to install `hooks', +# that is to say, to keep in some place m4 knows, late `define' to be +# triggered *only* in AU mode. +# +# You first think to design AU_DEFUN like this: +# +# 1. AC_DEFUN(OLD-NAME, +# [Warn the user OLD-NAME is obsolete. +# NEW-CODE]) +# +# 2. Store for late AU binding([define(OLD_NAME, +# [Reestablish the quotes. +# NEW-CODE +# Disable the quotes.])]) +# +# but this will not work: NEW-CODE has probably $1, $2 etc. and these +# guys will be replaced with the argument of `Store for late AU binding' +# when you call it. +# +# I don't think there is a means to avoid this using this technology +# (remember that $1 etc. are *always* expanded in m4). You may also try +# to replace them with $[1] to preserve them for a later evaluation, but +# if `Store for late AU binding' is properly written, it will remain +# quoted till the end... +# +# You have to change technology. Since the problem is that `$1' +# etc. should be `consumed' right away, one solution is to define now a +# second macro, `AU_OLD-NAME', and to install a hook than binds OLD-NAME +# to AU_OLD-NAME. Then, autoupdate.m4 just need to run the hooks. By +# the way, the same method was used in autoheader. +# +# +# # Third implementation: m4 namespaces by m4sugar +# # ============================================== +# +# Actually, this implementation was just a clean up of the previous +# implementation: instead of defining hooks by hand, m4sugar was equipped +# with `namespaces'. What are they? +# +# Sometimes we want to disable some *set* of macros, and restore them +# later. We provide support for this via namespaces. +# +# There are basically three characters playing this scene: defining a +# macro in a namespace, disabling a namespace, and restoring a namespace +# (i.e., all the definitions it holds). +# +# Technically, to define a MACRO in NAMESPACE means to define the macro +# named `NAMESPACE::MACRO' to the VALUE. At the same time, we append +# `undefine(NAME)' in the macro named `m4_disable(NAMESPACE)', and +# similarly a binding of NAME to the value of `NAMESPACE::MACRO' in +# `m4_enable(NAMESPACE)'. These mechanisms allow to bind the macro of +# NAMESPACE and to unbind them at will. +# +# Of course this implementation is really inefficient: m4 has to grow +# strings which can become quickly huge, which slows it significantly. +# +# In particular one should avoid as much as possible to use `define' for +# temporaries. Now that `define' has quite a complex meaning, it is an +# expensive operations that should be limited to macros. Use +# `m4_define' for temporaries. +# +# Private copies of the macros we used in entering / exiting the m4sugar +# namespace. It is much more convenient than fighting with the renamed +# version of define etc. +# +# +# +# Those two implementations suffered from serious problems: +# +# - namespaces were really expensive, and incurred a major performance +# loss on `autoconf' itself, not only `autoupdate'. One solution +# would have been the limit the use of namespaces to `autoupdate', but +# that's again some complications on m4sugar, which really doesn't need +# this. So we wanted to get rid of the namespaces. +# +# - since the quotes were disabled, autoupdate was sometimes making +# wrong guesses, for instance on: +# +# foo([1, 2]) +# +# m4 saw 2 arguments: `[1'and `2]'. A simple solution, somewhat +# fragile, is to reestablish the quotes right before all the obsolete +# macros, i.e., to use sed so that the previous text becomes +# +# changequote([, ])foo([1, 2]) +# +# To this end, one wants to trace the definition of obsolete macros. +# +# It was there that the limitations of the namespace approach became +# painful: because it was a complex machinery playing a lot with the +# builtins of m4 (hence, quite fragile), tracing was almost impossible. +# +# +# So this approach was dropped. +# +# +# # The fourth implementation: two steps +# # ==================================== +# +# If you drop the uses of namespaces, you no longer can compute the +# updated value, and replace the old call with it simultaneously. +# +# Obviously you will use m4 to compute the updated values, but you may +# use some other tool to achieve the replacement. Personally, I trust +# nobody but m4 to parse m4, so below, m4 will perform the two tasks. +# +# How can m4 be used to replace *some* macros calls with newer values. +# Well, that's dead simple: m4 should learn the definitions of obsolete +# macros, forget its builtins, disable the quotes, and then run on the +# input file, which amounts to doing this: +# +# divert(-1)dnl +# changequote([, ]) +# define([OLD], [NEW([$1, $2], m4_eval([$1 + $2]))changequote()]) +# undefine([dnl]) +# undefine([m4_eval]) +# # Some more undefines... +# changequote() +# divert(0)dnl +# dnl The Unbelievable Truth +# changequote([, ])OLD(1, 2) +# NEW([0, 0], +# 0) +# +# which will result in +# +# dnl The Unbelievable Truth +# NEW(1, 2, m4_eval(1 + 2)) +# NEW([0, 0], +# 0) +# +# Grpmh. Two problems. A minor problem: it would have been much better +# to have the `m4_eval' computed, and a major problem: you lost the +# quotation in the result. +# +# Let's address the big problem first. One solution is to define any +# modern macro to rewrite its calls with the proper quotation, thanks to +# `$@'. Again, tracing the `define's makes it possible to know which +# are these macros, so you input is: +# +# divert(-1)dnl +# changequote([, ]) +# define([OLD], [NEW([$1, $2], m4_eval([$1 + $2]))changequote()]) +# define([NEW], [[NEW($@)]changequote()]) +# undefine([dnl]) +# undefine([m4_eval]) +# # Some more undefines... +# changequote() +# divert(0)dnl +# dnl The Unbelievable Truth +# changequote([, ])OLD(1, 2) +# changequote([, ])NEW([0, 0], +# 0) +# +# which results in +# +# dnl The Unbelievable Truth +# NEW([1, 2],[m4_eval(1 + 2)]) +# NEW([0, 0],[0]) +# +# Our problem is solved, i.e., the first call to `NEW' is properly +# quoted, but introduced another problem: we changed the layout of the +# second calls, which can be a drama in the case of huge macro calls +# (think of `AC_TRY_RUN' for instance). This example didn't show it, +# but we also introduced parens to macros which did not have some: +# +# AC_INIT +# => AC_INIT() +# +# No big deal for the semantics (unless the macro depends upon $#, which +# is bad), but the users would not be happy. +# +# Additionally, we introduced quotes that were not there before, which is +# OK in most cases, but could change the semantics of the file. +# +# Cruel dilemma: we do want the auto-quoting definition of `NEW' when +# evaluating `OLD', but we don't when we evaluate the second `NEW'. +# Back to namespaces? +# +# No. +# +# +# # Second step: replacement +# # ------------------------ +# +# No, as announced above, we will work in two steps: in a first step we +# compute the updated values, and in a second step we replace them. Our +# goal is something like this: +# +# divert(-1)dnl +# changequote([, ]) +# define([OLD], [NEW([1, 2], [3])changequote()]) +# undefine([dnl]) +# undefine([m4_eval]) +# # Some more undefines... +# changequote() +# divert(0)dnl +# dnl The Unbelievable Truth +# changequote([, ])OLD(1, 2) +# NEW([0, 0], +# 0) +# +# i.e., the new value of `OLD' is precomputed using the auto-quoting +# definition of `NEW' and the m4 builtins. We'll see how afterwards, +# let's finish with the replacement. +# +# Of course the solution above is wrong: if there were other calls to +# `OLD' with different values, we would smash them to the same value. +# But it is quite easy to generalize the scheme above: +# +# divert(-1)dnl +# changequote([, ]) +# define([OLD([1],[2])], [NEW([1, 2], [3])]) +# define([OLD], [defn([OLD($@)])changequote()]) +# undefine([dnl]) +# undefine([m4_eval]) +# # Some more undefines... +# changequote() +# divert(0)dnl +# dnl The Unbelievable Truth +# changequote([, ])OLD(1, 2) +# NEW([0, 0], +# 0) +# +# i.e., for each call to obsolete macros, we build an array `call => +# value', and use a macro to dispatch these values. This results in: +# +# dnl The Unbelievable Truth +# NEW([1, 2], [3]) +# NEW([0, 0], +# 0) +# +# In French, we say `Youpi !', which you might roughly translate as +# `Yippee!'. +# +# +# # First step: computation +# # ----------------------- +# +# Let's study the anatomy of the file, and name its sections: +# +# prologue +# divert(-1)dnl +# changequote([, ]) +# values +# define([OLD([1],[2])], [NEW([1, 2], [3])]) +# dispatcher +# define([OLD], [defn([OLD($@)])changequote()]) +# disabler +# undefine([dnl]) +# undefine([m4_eval]) +# # Some more undefines... +# changequote() +# divert(0)dnl +# input +# dnl The Unbelievable Truth +# changequote([, ])OLD(1, 2) +# NEW([0, 0], +# 0) +# +# +# # Computing the `values' section +# # .............................. +# +# First we need to get the list of all the AU macro uses. To this end, +# first get the list of all the AU macros names by tracing `AU_DEFUN' in +# the initialization of autoconf. This list is computed in the file +# `au.txt' below. +# +# Then use this list to trace all the AU macro uses in the input. The +# goal is obtain in the case of our example: +# +# [define([OLD([1],[2])],]@<<@OLD([1],[2])@>>@[)] +# +# This is the file `values.in' below. +# +# We want to evaluate this with only the builtins (in fact m4sugar), the +# auto-quoting definitions of the new macros (`new.m4'), and the +# definition of the old macros (`old.m4'). Computing these last two +# files is easy: it's just a matter of using the right `--trace' option. +# +# So the content of `values.in' is: +# +# include($autoconf_dir/m4sugar.m4) +# m4_include(new.m4) +# m4_include(old.m4) +# divert(0)dnl +# [define([OLD([1],[2])],]@<<@OLD([1],[2])@>>@[)] +# +# We run m4 on it, which yields: +# +# define([OLD([1],[2])],@<<@NEW([1, 2], [3])@>>@) +# +# Transform `@<<@' and `@>>@' into quotes and we get +# +# define([OLD([1],[2])],[NEW([1, 2], [3])]) +# +# This is `values.m4'. +# +# +# # Computing the `dispatcher' section +# # .................................. +# +# The `prologue', and the `disabler' are simple and need no commenting. +# +# To compute the `dispatcher' (`dispatch.m4'), again, it is a simple +# matter of using the right `--trace'. +# +# Finally, the input is not exactly the input file, rather it is the +# input file with the added `changequote'. To this end, we build +# `quote.sed'. +# +# +# # Putting it all together +# # ....................... +# +# We build the file `input.m4' which contains: +# +# divert(-1)dnl +# changequote([, ]) +# include(values.m4) +# include(dispatch.m4) +# undefine([dnl]) +# undefine([eval]) +# # Some more undefines... +# changequote() +# divert(0)dnl +# dnl The Unbelievable Truth +# changequote([, ])OLD(1, 2) +# NEW([0, 0], +# 0) +# +# And we just run m4 on it. Et voila`, Monsieur ! Mais oui, mais oui. +# +# Well, there are a few additional technicalities. For instance, we +# rely on `changequote', `ifelse' and `defn', but we don't want to +# interpret the changequotes of the user, so we simply use another name: +# `_au_changequote' etc. +# +# +# # Failure of the fourth approach +# # ------------------------------ +# +# This approach is heavily based on traces, but then there is an obvious +# problem: non expanded code will never be seen. In particular, the body +# of a `define' definition is not seen, so on the input +# +# define([idem], [OLD(0, [$1])]) +# +# autoupdate would never see the `OLD', and wouldn't have updated it. +# Worse yet, if `idem(0)' was used later, then autoupdate sees that +# `OLD' is used, computes the result for `OLD(0, 0)' and sets up a +# dispatcher for `OLD'. Since there was no computed value for `OLD(0, +# [$1])', the dispatcher would have replaced with... nothing, leading +# to +# +# define([idem], []) +# +# With some more thinking, you see that the two step approach is wrong, +# the namespace approach was much saner. +# +# But you learned a lot, in particular you realized that using traces +# can make it possible to simulate namespaces! +# +# +# +# # The fifth implementation: m4 namespaces by files +# # ================================================ +# +# The fourth implementation demonstrated something unsurprising: you +# cannot precompute, i.e., the namespace approach was the right one. +# Still, we no longer want them, they're too expensive. Let's have a +# look at the way it worked. +# +# When updating +# +# dnl The Unbelievable Truth +# OLD(1, 2) +# NEW([0, 0], [0]) +# +# you evaluate `input.m4': +# +# divert(-1) +# changequote([, ]) +# define([OLD], +# [m4_enable()NEW([$1, $2], m4_eval([$1 + $2]))m4_disable()]) +# ... +# m4_disable() +# dnl The Unbelievable Truth +# OLD(1, 2) +# NEW([0, 0], [0]) +# +# where `m4_disable' undefines the m4 and m4sugar, and disables the quotes +# and comments: +# +# define([m4_disable], +# [undefine([__file__]) +# ... +# changecom(#) +# changequote()]) +# +# `m4_enable' does the converse: reestablish quotes and comments +# --easy--, reestablish m4sugar --easy: just load `m4sugar.m4' again-- and +# reenable the builtins. This later task requires that you first save +# the builtins. And BTW, the definition above of `m4_disable' cannot +# work: you undefined `changequote' before using it! So you need to use +# your privates copies of the builtins. Let's introduce three files for +# this: +# +# `m4save.m4' +# moves the m4 builtins into the `_au_' pseudo namespace, +# `unm4.m4' +# undefines the builtins, +# `m4.m4' +# restores them. +# +# So `input.m4' is: +# +# divert(-1) +# changequote([, ]) +# +# include([m4save.m4]) +# +# # Import AU. +# define([OLD], +# [m4_enable()NEW([$1, $2], m4_eval([$1 + $2]))m4_disable()]) +# +# define([_au_enable], +# [_au_changecom([#]) +# _au_include([m4.m4]) +# _au_include(m4sugar.m4)]) +# +# define([_au_disable], +# [# Disable m4sugar. +# # Disable the m4 builtins. +# _au_include([unm4.m4]) +# # 1. Disable special characters. +# _au_changequote() +# _au_changecom()]) +# +# m4_disable() +# dnl The Unbelievable Truth +# OLD(1, 2) +# NEW([0, 0], [0]) +# +# Based on what we learned in the fourth implementation we know that we +# have to enable the quotes *before* any AU macro, and we know we need +# to build autoquoting versions of the AC macros. But the autoquoting +# AC definitions must be disabled in the rest of the file, and enabled +# inside AU macros. +# +# Using `autoconf --trace' it is easy to build the files +# +# `ac.m4' +# define the autoquoting AC fake macros +# `disable.m4' +# undefine the m4sugar and AC autoquoting macros. +# `au.m4' +# definitions of the AU macros (such as `OLD' above). +# +# Now, `input.m4' is: +# +# divert(-1) +# changequote([, ]) +# +# include([m4save.m4]) +# # Import AU. +# include([au.m4]) +# +# define([_au_enable], +# [_au_changecom([#]) +# _au_include([m4.m4]) +# _au_include(m4sugar.m4) +# _au_include(ac.m4)]) +# +# define([_au_disable], +# [_au_include([disable.m4]) +# _au_include([unm4.m4]) +# # 1. Disable special characters. +# _au_changequote() +# _au_changecom()]) +# +# m4_disable() +# dnl The Unbelievable Truth +# _au_changequote([, ])OLD(1, 2) +# NEW([0, 0], [0]) +# +# Finally, version V is ready. +# +# Well... almost. +# +# There is a slight problem that remains: if an AU macro OUTER includes +# an AU macro INNER, then _au_enable will be run when entering OUTER +# and when entering INNER (not good, but not too bad yet). But when +# getting out of INNER, _au_disable will disable everything while we +# were still in OUTER. Badaboom. +# +# Therefore _au_enable and _au_disable have to be written to work by +# pairs: each _au_enable pushdef's _au_enabled, and each _au_disable +# popdef's _au_enabled. And of course _au_enable and _au_disable are +# effective when _au_enabled is *not* defined. +# +# Finally, version V' is ready. And there is much rejoicing. (And I +# have free time again. I think. Yeah, right.) + +### 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: diff --git a/bin/libtool b/bin/libtool new file mode 100644 index 00000000..07a0f914 --- /dev/null +++ b/bin/libtool @@ -0,0 +1,6967 @@ +#! /bin/sh + +# libtoolT - Provide generalized library-building support services. +# Generated automatically by (GNU libtool 1.4e (1.1162 2002/11/22 22:36:25)) +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 +# Free Software Foundation, Inc. +# +# This file is part of GNU Libtool: +# Originally by Gordon Matzigkeit , 1996 +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="sed -e s/^X//" + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi + +# The names of the tagged configurations supported by this script. +available_tags=" CXX F77 GCJ" + +# ### BEGIN LIBTOOL CONFIG + +# Libtool was configured on host du216771: + +# Shell to use when invoking shell scripts. +SHELL="/bin/sh" + +# Whether or not to build shared libraries. +build_libtool_libs=no + +# Whether or not to build static libraries. +build_old_libs=yes + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=yes + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=no + +# Whether or not to optimize for fast installation. +fast_install=yes + +# The host system. +host_alias= +host=i686-pc-msys + +# An echo program that does not interpret backslashes. +echo="echo" + +# The archiver. +AR="ar" +AR_FLAGS="cru" + +# A C compiler. +LTCC="gcc" + +# A language-specific compiler. +CC="gcc" + +# Is the compiler the GNU C compiler? +with_gcc=yes + +# An ERE matcher. +EGREP="grep -E" + +# The linker used to build libraries. +LD="/usr/msys/bin/ld.exe" + +# Whether we need hard or soft links. +LN_S="ln -s" + +# A BSD-compatible nm program. +NM="/bin/nm -B" + +# A sed program that does not truncate output. +SED="/bin/sed" + +# A symbol stripping program +STRIP=strip + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=file + +# Used on cygwin: DLL creation program. +DLLTOOL="dlltool" + +# Used on cygwin: object dumper. +OBJDUMP="objdump" + +# Used on cygwin: assembler. +AS="as" + +# The name of the directory that contains temporary libtool files. +objdir=.libs + +# How to create reloadable object files. +reload_flag=" -r" +reload_cmds="\$LD\$reload_flag -o \$output\$reload_objs" + +# How to pass a linker flag through the compiler. +wl="-Wl," + +# Object file suffix (normally "o"). +objext="o" + +# Old archive suffix (normally "a"). +libext="a" + +# Executable file suffix (normally ""). +exeext="" + +# Additional compiler flags for building library objects. +pic_flag=" -DPIC" +pic_mode=default + +# What is the maximum length of a command? +max_cmd_len=262144 + +# Does compiler simultaneously support -c and -o options? +compiler_c_o="yes" + +# Must we lock files when doing compilation ? +need_locks="no" + +# Do we need the lib prefix for modules? +need_lib_prefix=unknown + +# Do we need a version for libraries? +need_version=unknown + +# Whether dlopen is supported. +dlopen_support=yes + +# Whether dlopen of programs is supported. +dlopen_self=no + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=unknown + +# Compiler flag to prevent dynamic linking. +link_static_flag="-static" + +# Compiler flag to turn off builtin functions. +no_builtin_flag=" -fno-builtin -fno-rtti -fno-exceptions" + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec="\${wl}--export-dynamic" + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec="\${wl}--whole-archive\$convenience \${wl}--no-whole-archive" + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec="" + +# Library versioning type. +version_type=none + +# Format of library name prefix. +libname_spec="lib\$name" + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec="" + +# The coded name of the library, if different from the real name. +soname_spec="" + +# Commands used to build and install an old-style archive. +RANLIB="ranlib" +old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs\$old_deplibs~\$RANLIB \$oldlib" +old_postinstall_cmds="\$RANLIB \$oldlib~chmod 644 \$oldlib" +old_postuninstall_cmds="" + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds="" + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds="" + +# Commands used to build and install a shared archive. +archive_cmds="\$CC -shared \$libobjs \$deplibs \$compiler_flags \${wl}-soname \$wl\$soname -o \$lib" +archive_expsym_cmds="\$CC -shared \$libobjs \$deplibs \$compiler_flags \${wl}-soname \$wl\$soname \${wl}-retain-symbols-file \$wl\$export_symbols -o \$lib" +postinstall_cmds="" +postuninstall_cmds="" + +# Commands to strip libraries. +old_striplib="strip --strip-debug" +striplib="strip --strip-unneeded" + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects="" + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects="" + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps="" + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps="" + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path="" + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method="unknown" + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd="\$MAGIC_CMD" + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag="" + +# Flag that forces no undefined symbols. +no_undefined_flag="" + +# Commands used to finish a libtool library installation in a directory. +finish_cmds="" + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval="" + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe="sed -n -e 's/^.*[ ]\\([ABCDGISTW][ABCDGISTW]*\\)[ ][ ]*\\(_\\)\\([_A-Za-z][_A-Za-z0-9]*\\)\$/\\1 \\2\\3 \\3/p'" + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl="sed -n -e 's/^. .* \\(.*\\)\$/extern int \\1;/p'" + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address="sed -n -e 's/^: \\([^ ]*\\) \$/ {\\\"\\1\\\", (lt_ptr) 0},/p' -e 's/^[BCDEGRST] \\([^ ]*\\) \\([^ ]*\\)\$/ {\"\\2\", (lt_ptr) \\&\\2},/p'" + +# This is the shared library runtime path variable. +runpath_var=LD_RUN_PATH + +# This is the shared library path variable. +shlibpath_var= + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=unknown + +# How to hardcode a shared library path into an executable. +hardcode_action=immediate + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=no + +# Flag to hardcode $libdir into a binary during linking. +# This must work even if $libdir does not exist. +hardcode_libdir_flag_spec="\${wl}--rpath \${wl}\$libdir" + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator="" + +# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=no + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=no + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=unsupported + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="PATH LD_RUN_PATH GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=unknown + +# Compile-time system search path for libraries +sys_lib_search_path_spec=" /bin/../lib/gcc-lib/msys/2.95.3-1/ /bin/../lib/gcc-lib/ /usr/lib/gcc-lib/msys/2.95.3-1/ /usr/lib/gcc/msys/2.95.3-1/ /bin/../lib/gcc-lib/msys/2.95.3-1/../../../../msys/lib/msys/2.95.3-1/ /bin/../lib/gcc-lib/msys/2.95.3-1/../../../../msys/lib/ /usr/lib/gcc-lib/msys/2.95.3-1/../../../../msys/lib/msys/2.95.3-1/ /usr/lib/gcc-lib/msys/2.95.3-1/../../../../msys/lib/" + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec="/lib /usr/lib" + +# Fix the shell variable $srcfile for the compiler. +fix_srcfile_path="" + +# Set to yes if exported symbols are required. +always_export_symbols=no + +# The commands to list exported symbols. +export_symbols_cmds="\$NM \$libobjs \$convenience | \$global_symbol_pipe | sed 's/.* //' | sort | uniq > \$export_symbols" + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds="" + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms="_GLOBAL_OFFSET_TABLE_" + +# Symbols that must always be exported. +include_expsyms="" + +# ### END LIBTOOL CONFIG + +# ltmain.sh - Provide generalized library-building support services. +# NOTE: Changing this file will not affect anything until you rerun configure. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 +# Free Software Foundation, Inc. +# Originally by Gordon Matzigkeit , 1996 +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Check that we have a working $echo. +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then + # Yippee, $echo works! + : +else + # Restart under the correct shell, and then maybe $echo will work. + exec $SHELL "$0" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat <&2 + echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit 1 +fi + +# Global variables. +mode=$default_mode +nonopt= +prev= +prevopt= +run= +show="$echo" +show_help= +execute_dlfiles= +lo2o="s/\\.lo\$/.${objext}/" +o2lo="s/\\.${objext}\$/.lo/" + +##################################### +# Shell function definitions: +# This seems to be the best place for them + +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +win32_libid () { + win32_libid_type="unknown" + if eval $OBJDUMP -f $1 2>/dev/null | \ + grep -E 'file format pei+-i386(.*architecture: i386)?' >/dev/null ; then + win32_libid_type="x86 DLL" + else + if eval $OBJDUMP -f $1 2>/dev/null | \ + grep -E 'file format pei*-i386(.*architecture: i386)?' >/dev/null ; then + win32_libid_type="x86" + if eval file $1 2>/dev/null | \ + grep -E 'ar archive' >/dev/null; then + win32_libid_type="$win32_libid_type archive" + if eval $NM -f posix -A $1 | awk '{print $3}' | grep "I" >/dev/null ; then + win32_libid_type="$win32_libid_type import" + else + win32_libid_type="$win32_libid_type static" + fi + fi + fi + fi + echo $win32_libid_type +} + +# End of Shell function definitions +##################################### + + +# Parse our command line options once, thoroughly. +while test "$#" -gt 0 +do + arg="$1" + shift + + case $arg in + -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; + *) optarg= ;; + esac + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + execute_dlfiles) + execute_dlfiles="$execute_dlfiles $arg" + ;; + tag) + tagname="$arg" + + # Check whether tagname contains only valid characters + case $tagname in + *[!-_A-Za-z0-9,/]*) + echo "$progname: invalid tag name: $tagname" 1>&2 + exit 1 + ;; + esac + + case $tagname in + CC) + # Don't test for the "default" C tag, as we know, it's there, but + # not specially marked. + ;; + *) + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$0" > /dev/null; then + taglist="$taglist $tagname" + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $0`" + else + echo "$progname: ignoring unknown tag $tagname" 1>&2 + fi + ;; + esac + ;; + *) + eval "$prev=\$arg" + ;; + esac + + prev= + prevopt= + continue + fi + + # Have we seen a non-optional argument yet? + case $arg in + --help) + show_help=yes + ;; + + --version) + echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" + echo + echo "Copyright 1996, 1997, 1998, 1999, 2000, 2001" + echo "Free Software Foundation, Inc." + echo "This is free software; see the source for copying conditions. There is NO" + echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + exit 0 + ;; + + --config) + ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $0 + # Now print the configurations for the tags. + for tagname in $taglist; do + ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$0" + done + exit 0 + ;; + + --debug) + echo "$progname: enabling shell trace mode" + set -x + ;; + + --dry-run | -n) + run=: + ;; + + --features) + echo "host: $host" + if test "$build_libtool_libs" = yes; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test "$build_old_libs" = yes; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + exit 0 + ;; + + --finish) mode="finish" ;; + + --mode) prevopt="--mode" prev=mode ;; + --mode=*) mode="$optarg" ;; + + --preserve-dup-deps) duplicate_deps="yes" ;; + + --quiet | --silent) + show=: + ;; + + --tag) prevopt="--tag" prev=tag ;; + --tag=*) + set tag "$optarg" ${1+"$@"} + shift + prev=tag + ;; + + -dlopen) + prevopt="-dlopen" + prev=execute_dlfiles + ;; + + -*) + $echo "$modename: unrecognized option \`$arg'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + + *) + nonopt="$arg" + break + ;; + esac +done + +if test -n "$prevopt"; then + $echo "$modename: option \`$prevopt' requires an argument" 1>&2 + $echo "$help" 1>&2 + exit 1 +fi + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + +if test -z "$show_help"; then + + # Infer the operation mode. + if test -z "$mode"; then + $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 + $echo "*** Future versions of Libtool will require -mode=MODE be specified." 1>&2 + case $nonopt in + *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) + mode=link + for arg + do + case $arg in + -c) + mode=compile + break + ;; + esac + done + ;; + *db | *dbx | *strace | *truss) + mode=execute + ;; + *install*|cp|mv) + mode=install + ;; + *rm) + mode=uninstall + ;; + *) + # If we have no mode, but dlfiles were specified, then do execute mode. + test -n "$execute_dlfiles" && mode=execute + + # Just use the default operation mode. + if test -z "$mode"; then + if test -n "$nonopt"; then + $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 + else + $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 + fi + fi + ;; + esac + fi + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$execute_dlfiles" && test "$mode" != execute; then + $echo "$modename: unrecognized option \`-dlopen'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$modename --help --mode=$mode' for more information." + + # These modes are in order of execution frequency so that they run quickly. + case $mode in + # libtool compile mode + compile) + modename="$modename: compile" + # Get the compilation command and the source file. + base_compile= + srcfile="$nonopt" # always keep a non-empty value in "srcfile" + suppress_output= + arg_mode=normal + libobj= + + for arg + do + case "$arg_mode" in + arg ) + # do not "continue". Instead, add this to base_compile + lastarg="$arg" + arg_mode=normal + ;; + + target ) + libobj="$arg" + arg_mode=normal + continue + ;; + + normal ) + # Accept any command-line options. + case $arg in + -o) + if test -n "$libobj" ; then + $echo "$modename: you cannot specify \`-o' more than once" 1>&2 + exit 1 + fi + arg_mode=target + continue + ;; + + -static) + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + + -Xcompiler) + arg_mode=arg # the next one goes into the "base_compile" arg list + continue # The current "srcfile" will either be retained or + ;; # replaced later. I would guess that would be a bug. + + -Wc,*) + args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` + lastarg= + save_ifs="$IFS"; IFS=',' + for arg in $args; do + IFS="$save_ifs" + + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + lastarg="$lastarg $arg" + done + IFS="$save_ifs" + lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` + + # Add the arguments to base_compile. + base_compile="$base_compile $lastarg" + continue + ;; + + * ) + # Accept the current argument as the source file. + # The previous "srcfile" becomes the current argument. + # + lastarg="$srcfile" + srcfile="$arg" + ;; + esac # case $arg + ;; + esac # case $arg_mode + + # Aesthetically quote the previous argument. + lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` + + case $lastarg in + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + lastarg="\"$lastarg\"" + ;; + esac + + base_compile="$base_compile $lastarg" + done # for arg + + case $arg_mode in + arg) + $echo "$modename: you must specify an argument for -Xcompile" + exit 1 + ;; + target) + $echo "$modename: you must specify a target with \`-o'" 1>&2 + exit 1 + ;; + *) + # Get the name of the library object. + [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + xform='[cCFSifmso]' + case $libobj in + *.ada) xform=ada ;; + *.adb) xform=adb ;; + *.ads) xform=ads ;; + *.asm) xform=asm ;; + *.c++) xform=c++ ;; + *.cc) xform=cc ;; + *.ii) xform=ii ;; + *.class) xform=class ;; + *.cpp) xform=cpp ;; + *.cxx) xform=cxx ;; + *.f90) xform=f90 ;; + *.for) xform=for ;; + *.java) xform=java ;; + esac + + libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` + + case $libobj in + *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; + *) + $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 + exit 1 + ;; + esac + + # Infer tagged configuration to use if any are available and + # if one wasn't chosen via the "--tag" command line option. + # Only attempt this if the compiler in the base compile + # command doesn't match the default compiler. + if test -n "$available_tags" && test -z "$tagname"; then + case $base_compile in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$0" > /dev/null; then + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $0`" + case "$base_compile " in + "$CC "* | " $CC "* | "`$echo $CC` "* | " `$echo $CC` "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + echo "$modename: unable to infer tagged configuration" + echo "$modename: specify a tag with \`--tag'" 1>&2 + exit 1 +# else +# echo "$modename: using $tagname tagged configuration" + fi + ;; + esac + fi + + objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` + xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$obj"; then + xdir= + else + xdir=$xdir/ + fi + lobj=${xdir}$objdir/$objname + + if test -z "$base_compile"; then + $echo "$modename: you must specify a compilation command" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + $run $rm $removelist + trap "$run $rm $removelist; exit 1" 1 2 15 + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2*) + pic_mode=default + ;; + esac + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} + lockfile="$output_obj.lock" + removelist="$removelist $output_obj $lockfile" + trap "$run $rm $removelist; exit 1" 1 2 15 + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until $run ln "$0" "$lockfile" 2>/dev/null; do + $show "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + echo "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit 1 + fi + echo $srcfile > "$lockfile" + fi + + if test -n "$fix_srcfile_path"; then + eval srcfile=\"$fix_srcfile_path\" + fi + + $run $rm "$libobj" "${libobj}T" + + # Create a libtool object file (analogous to a ".la" file), + # but don't create it if we're doing a dry run. + test -z "$run" && cat > ${libobj}T </dev/null`" != "X$srcfile"; then + echo "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit 1 + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + $show "$mv $output_obj $lobj" + if $run $mv $output_obj $lobj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # Append the name of the PIC object to the libtool object file. + test -z "$run" && cat >> ${libobj}T <> ${libobj}T </dev/null`" != "X$srcfile"; then + echo "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit 1 + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + $show "$mv $output_obj $obj" + if $run $mv $output_obj $obj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # Append the name of the non-PIC object the libtool object file. + # Only append if the libtool object file exists. + test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + else + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + fi + build_libtool_libs=no + build_old_libs=yes + prefer_static_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg="$1" + base_compile="$base_compile $arg" + shift + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test + ;; + *) qarg=$arg ;; + esac + libtool_args="$libtool_args $qarg" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + compile_command="$compile_command @OUTPUT@" + finalize_command="$finalize_command @OUTPUT@" + ;; + esac + + case $prev in + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + compile_command="$compile_command @SYMFILE@" + finalize_command="$finalize_command @SYMFILE@" + preload=yes + fi + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + else + dlprefiles="$dlprefiles $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols="$arg" + if test ! -f "$arg"; then + $echo "$modename: symbol file \`$arg' does not exist" + exit 1 + fi + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat $save_arg` + do +# moreargs="$moreargs $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + pic_object= + non_pic_object= + + # Read the .lo file + # If there is no directory component, then add one. + case $arg in + */* | *\\*) . $arg ;; + *) . ./$arg ;; + esac + + if test -z "$pic_object" || \ + test -z "$non_pic_object" || + test "$pic_object" = none && \ + test "$non_pic_object" = none; then + $echo "$modename: cannot find name of object for \`$arg'" 1>&2 + exit 1 + fi + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + libobjs="$libobjs $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + non_pic_objects="$non_pic_objects $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + fi + else + # Only an error if not doing a dry-run. + if test -z "$run"; then + $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 + exit 1 + else + # Dry-run case. + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` + non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` + libobjs="$libobjs $pic_object" + non_pic_objects="$non_pic_objects $non_pic_object" + fi + fi + done + else + $echo "$modename: link input file \`$save_arg' does not exist" + exit 1 + fi + arg=$save_arg + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + $echo "$modename: only absolute run-paths are allowed" 1>&2 + exit 1 + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) rpath="$rpath $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) xrpath="$xrpath $arg" ;; + esac + fi + prev= + continue + ;; + xcompiler) + compiler_flags="$compiler_flags $qarg" + prev= + compile_command="$compile_command $qarg" + finalize_command="$finalize_command $qarg" + continue + ;; + xlinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $wl$qarg" + prev= + compile_command="$compile_command $wl$qarg" + finalize_command="$finalize_command $wl$qarg" + continue + ;; + xcclinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $qarg" + prev= + compile_command="$compile_command $qarg" + finalize_command="$finalize_command $qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg="$arg" + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + compile_command="$compile_command $link_static_flag" + finalize_command="$finalize_command $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 + continue + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + $echo "$modename: more than one -exported-symbols argument is not allowed" + exit 1 + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + ;; + esac + continue + ;; + + -L*) + dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 + exit 1 + fi + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "*) ;; + *) + deplibs="$deplibs -L$dir" + lib_search_path="$lib_search_path $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + case :$dllsearchpath: in + *":$dir:"*) ;; + *) dllsearchpath="$dllsearchpath:$dir";; + esac + ;; + esac + continue + ;; + + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-pw32* | *-*-beos*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-mingw* | *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + deplibs="$deplibs -framework System" + continue + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + deplibs="$deplibs $arg" + continue + ;; + + -module) + module=yes + continue + ;; + + # gcc -m* arguments should be passed to the linker via $compiler_flags + # in order to pass architecture information to the linker + # (e.g. 32 vs 64-bit). This may also be accomplished via -Wl,-mfoo + # but this is not reliable with gcc because gcc may use -mfoo to + # select a different linker, different libraries, etc, while + # -Wl,-mfoo simply passes -mfoo to the linker. + -m*) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + if test "$with_gcc" = "yes" ; then + compiler_flags="$compiler_flags $arg" + fi + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + # The PATH hackery in wrapper scripts is required on Windows + # in order for the loader to find any dlls it needs. + $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 + $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -o) prev=output ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + $echo "$modename: only absolute run-paths are allowed" 1>&2 + exit 1 + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + continue + ;; + + -static) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -Wc,*) + args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + case $flag in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + flag="\"$flag\"" + ;; + esac + arg="$arg $wl$flag" + compiler_flags="$compiler_flags $flag" + done + IFS="$save_ifs" + arg=`$echo "X$arg" | $Xsed -e "s/^ //"` + ;; + + -Wl,*) + args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + case $flag in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + flag="\"$flag\"" + ;; + esac + arg="$arg $wl$flag" + compiler_flags="$compiler_flags $wl$flag" + linker_flags="$linker_flags $flag" + done + IFS="$save_ifs" + arg=`$echo "X$arg" | $Xsed -e "s/^ //"` + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # Some other compiler flag. + -* | +*) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + ;; + + *.$objext) + # A standard object. + objs="$objs $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + pic_object= + non_pic_object= + + # Read the .lo file + # If there is no directory component, then add one. + case $arg in + */* | *\\*) . $arg ;; + *) . ./$arg ;; + esac + + if test -z "$pic_object" || \ + test -z "$non_pic_object" || + test "$pic_object" = none && \ + test "$non_pic_object" = none; then + $echo "$modename: cannot find name of object for \`$arg'" 1>&2 + exit 1 + fi + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + libobjs="$libobjs $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + non_pic_objects="$non_pic_objects $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + fi + else + # Only an error if not doing a dry-run. + if test -z "$run"; then + $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 + exit 1 + else + # Dry-run case. + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` + non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` + libobjs="$libobjs $pic_object" + non_pic_objects="$non_pic_objects $non_pic_object" + fi + fi + ;; + + *.$libext) + # An archive. + deplibs="$deplibs $arg" + old_deplibs="$old_deplibs $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + dlfiles="$dlfiles $arg" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + dlprefiles="$dlprefiles $arg" + prev= + else + deplibs="$deplibs $arg" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + done # argument parsing loop + + if test -n "$prev"; then + $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Infer tagged configuration to use if any are available and + # if one wasn't chosen via the "--tag" command line option. + # Only attempt this if the compiler in the base link + # command doesn't match the default compiler. + if test -n "$available_tags" && test -z "$tagname"; then + case $base_compile in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + "$CC "* | " $CC "* | "`$echo $CC` "* | " `$echo $CC` "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$0" > /dev/null; then + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $0`" + case $base_compile in + "$CC "* | " $CC "* | "`$echo $CC` "* | " `$echo $CC` "*) + # The compiler in $compile_command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + echo "$modename: unable to infer tagged configuration" + echo "$modename: specify a tag with \`--tag'" 1>&2 + exit 1 +# else +# echo "$modename: using $tagname tagged configuration" + fi + ;; + esac + fi + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` + if test "X$output_objdir" = "X$output"; then + output_objdir="$objdir" + else + output_objdir="$output_objdir/$objdir" + fi + # Create the object directory. + if test ! -d "$output_objdir"; then + $show "$mkdir $output_objdir" + $run $mkdir $output_objdir + status=$? + if test "$status" -ne 0 && test ! -d "$output_objdir"; then + exit $status + fi + fi + + # Determine the type of output + case $output in + "") + $echo "$modename: you must specify an output file" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + case $host in + *cygwin* | *mingw* | *pw32*) + # don't eliminate duplcations in $postdeps and $predeps + duplicate_compiler_generated_deps=yes + ;; + *) + duplicate_compiler_generated_deps=$duplicate_deps + ;; + esac + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if test "X$duplicate_deps" = "Xyes" ; then + case "$libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + libs="$libs $deplib" + done + + if test "$linkmode" = lib; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; + esac + pre_post_deps="$pre_post_deps $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + case $linkmode in + lib) + passes="conv link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 + exit 1 + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=no + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + for pass in $passes; do + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan"; then + libs="$deplibs" + deplibs= + fi + if test "$linkmode" = prog; then + case $pass in + dlopen) libs="$dlfiles" ;; + dlpreopen) libs="$dlprefiles" ;; + link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; + esac + fi + if test "$pass" = dlopen; then + # Collect dlpreopened libraries + save_deplibs="$deplibs" + deplibs= + fi + for deplib in $libs; do + lib= + found=no + case $deplib in + -l*) + if test "$linkmode" != lib && test "$linkmode" != prog; then + $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 + continue + fi + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` + for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do + # Search the libtool library + lib="$searchdir/lib${name}.la" + if test -f "$lib"; then + found=yes + break + fi + done + if test "$found" != yes; then + # deplib doesn't seem to be a libtool library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + else # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $deplib "*) + if (${SED} -e '2q' $lib | + grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + library_names= + old_library= + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + for l in $old_library $library_names; do + ll="$l" + done + if test "X$ll" = "X$old_library" ; then # only static version available + found=no + ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` + test "X$ladir" = "X$lib" && ladir="." + lib=$ladir/$old_library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + fi + ;; # -l + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test "$pass" = conv && continue + newdependency_libs="$deplib $newdependency_libs" + newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` + ;; + prog) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test "$pass" = scan; then + deplibs="$deplib $deplibs" + newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + ;; + *) + $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test "$pass" = link; then + dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) lib="$deplib" ;; + *.$libext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + if test "$deplibs_check_method" != pass_all; then + echo + echo "*** Warning: Trying to link with static lib archive $deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because the file extensions .$libext of this argument makes me believe" + echo "*** that it is just a static archive that I should not used here." + else + echo + echo "*** Warning: Linking the shared library $output against the" + echo "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + continue + ;; + prog) + if test "$pass" != link; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + elif test "$linkmode" = prog; then + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + newdlprefiles="$newdlprefiles $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + newdlfiles="$newdlfiles $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + if test "$found" = yes || test -f "$lib"; then : + else + $echo "$modename: cannot find the library \`$lib'" 1>&2 + exit 1 + fi + + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit 1 + fi + + ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` + test "X$ladir" = "X$lib" && ladir="." + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + # If the library was installed with an old release of libtool, + # it will not redefine variable installed. + installed=yes + + # Read the .la file + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test "$linkmode" != prog && test "$linkmode" != lib; }; then + test -n "$dlopen" && dlfiles="$dlfiles $dlopen" + test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" + fi + + if test "$pass" = conv; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 + exit 1 + fi + # It is a libtool convenience library, so add in its objects. + convenience="$convenience $ladir/$objdir/$old_library" + old_convenience="$old_convenience $ladir/$objdir/$old_library" + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + elif test "$linkmode" != prog && test "$linkmode" != lib; then + $echo "$modename: \`$lib' is not a convenience library" 1>&2 + exit 1 + fi + continue + fi # $pass = conv + + # Get the name of the library we link against. + linklib= + for l in $old_library $library_names; do + linklib="$l" + done + if test -z "$linklib"; then + $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 + exit 1 + fi + + # This library was specified with -dlopen. + if test "$pass" = dlopen; then + if test -z "$libdir"; then + $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 + exit 1 + fi + if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + dlprefiles="$dlprefiles $lib $dependency_libs" + else + newdlfiles="$newdlfiles $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 + $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 + abs_ladir="$ladir" + fi + ;; + esac + laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + $echo "$modename: warning: library \`$lib' was moved." 1>&2 + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$libdir" + absdir="$libdir" + fi + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + fi # $installed = yes + name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + + # This library was specified with -dlpreopen. + if test "$pass" = dlpreopen; then + if test -z "$libdir"; then + $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 + exit 1 + fi + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + newdlprefiles="$newdlprefiles $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + newdlprefiles="$newdlprefiles $dir/$dlname" + else + newdlprefiles="$newdlprefiles $dir/$linklib" + fi + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test "$linkmode" = lib; then + deplibs="$dir/$old_library $deplibs" + elif test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + if test "$linkmode" = prog && test "$pass" != link; then + newlib_search_path="$newlib_search_path $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=no + if test "$link_all_deplibs" != no || test -z "$library_names" || + test "$build_libtool_libs" = no; then + linkalldeplibs=yes + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test + esac + # Need to link against all dependency_libs? + if test "$linkalldeplibs" = yes; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test "$linkmode,$pass" = "prog,link"; then + if test -n "$library_names" && + { test "$prefer_static_libs" = no || test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var"; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath " in + *" $dir "*) ;; + *" $absdir "*) ;; + *) temp_rpath="$temp_rpath $dir" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + if test -n "$library_names" && + { test "$prefer_static_libs" = no || test -z "$old_library"; }; then + if test "$installed" = no; then + notinst_deplibs="$notinst_deplibs $lib" + need_relink=yes + fi + # This is a shared library + if test "$linkmode" = lib && + test "$hardcode_into_libs" = yes; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + realname="$2" + shift; shift + libname=`eval \\$echo \"$libname_spec\"` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname="$dlname" + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw*) + major=`expr $current - $age` + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + soname=`echo $soroot | ${SED} -e 's/^.*\///'` + newlib="libimp-`echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + $show "extracting exported symbol list from \`$soname'" + save_ifs="$IFS"; IFS='~' + eval cmds=\"$extract_expsyms_cmds\" + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + $show "generating import library for \`$soname'" + save_ifs="$IFS"; IFS='~' + eval cmds=\"$old_archive_from_expsyms_cmds\" + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test "$linkmode" = prog || test "$mode" != relink; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test "$hardcode_direct" = no; then + case $host in + *-*-sco3.2v5* ) add_dir="-L$dir" ;; + esac + add="$dir/$linklib" + elif test "$hardcode_minus_L" = no; then + case $host in + *-*-sunos*) add_shlibpath="$dir" ;; + esac + add_dir="-L$dir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = no; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + relink) + if test "$hardcode_direct" = yes; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$dir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case "$libdir" in + [\\/]*) + add_dir="-L$inst_prefix_dir$libdir $add_dir" + ;; + esac + fi + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test "$lib_linked" != yes; then + $echo "$modename: configuration error: unsupported hardcode properties" + exit 1 + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; + esac + fi + if test "$linkmode" = prog; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test "$hardcode_direct" != yes && \ + test "$hardcode_minus_L" != yes && \ + test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + fi + fi + fi + + if test "$linkmode" = prog || test "$mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes; then + add="$libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$libdir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + add="-l$name" + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir="-L$libdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case "$libdir" in + [\\/]*) + add_dir="-L$inst_prefix_dir$libdir $add_dir" + ;; + esac + fi + add="-l$name" + fi + + if test "$linkmode" = prog; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test "$linkmode" = prog; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test "$build_libtool_libs" = yes; then + # Not a shared library + if test "$deplibs_check_method" != pass_all; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + echo + echo "*** Warning: This system can not link to static lib archive $lib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + if test "$module" = yes; then + echo "*** But as you try to build a module library, libtool will still create " + echo "*** a static module, that should work as long as the dlopening application" + echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + convenience="$convenience $dir/$old_library" + old_convenience="$old_convenience $dir/$old_library" + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test "$linkmode" = lib; then + if test -n "$dependency_libs" && + { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || + test "$link_static" = yes; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) xrpath="$xrpath $temp_xrpath";; + esac;; + *) temp_deplibs="$temp_deplibs $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + newlib_search_path="$newlib_search_path $absdir" + # Link against this library + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + + if test "$link_all_deplibs" != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + case $deplib in + -L*) path="$deplib" ;; + *.la) + dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$deplib" && dir="." + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 + absdir="$dir" + fi + ;; + esac + if grep "^installed=no" $deplib > /dev/null; then + path="-L$absdir/$objdir" + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + if test -z "$libdir"; then + $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 + exit 1 + fi + if test "$absdir" != "$libdir"; then + $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 + fi + path="-L$absdir" + fi + ;; + *) continue ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$deplibs $path" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + dependency_libs="$newdependency_libs" + if test "$pass" = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test "$pass" != dlopen; then + if test "$pass" != conv; then + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) lib_search_path="$lib_search_path $dir" ;; + esac + done + newlib_search_path= + fi + + if test "$linkmode,$pass" != "prog,link"; then + vars="deplibs" + else + vars="compile_deplibs finalize_deplibs" + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + # Last step: remove runtime libs from dependency_libs (they stay in deplibs) + tmp_libs= + for i in $dependency_libs ; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i="" + ;; + esac + if test -n "$i" ; then + tmp_libs="$tmp_libs $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test "$linkmode" = prog; then + dlfiles="$newdlfiles" + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + if test -n "$deplibs"; then + $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 + fi + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 + fi + + if test -n "$xrpath"; then + $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for archives" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 + fi + + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 + fi + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + objs="$objs$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + eval libname=\"$libname_spec\" + ;; + *) + if test "$module" = no; then + $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` + eval libname=\"$libname_spec\" + else + libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 + exit 1 + else + echo + echo "*** Warning: Linking the shared library $output against the non-libtool" + echo "*** objects $objs is not portable!" + libobjs="$libobjs $objs" + fi + fi + + if test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 + fi + + set dummy $rpath + if test "$#" -gt 2; then + $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 + fi + install_libdir="$2" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + # Some compilers have problems with a `.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for convenience libraries" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 + fi + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + IFS="$save_ifs" + + if test -n "$8"; then + $echo "$modename: too many parameters to \`-version-info'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + current="$2" + revision="$3" + age="$4" + + # Check that each of the things are valid numbers. + case $current in + 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; + *) + $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + case $revision in + 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; + *) + $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + case $age in + 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; + *) + $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + if test "$age" -gt "$current"; then + $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + major=.`expr $current - $age` + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + minor_current=`expr $current + 1` + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current"; + ;; + + irix | nonstopux) + major=`expr $current - $age` + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring="$verstring_prefix$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test "$loop" -ne 0; do + iface=`expr $revision - $loop` + loop=`expr $loop - 1` + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) + major=.`expr $current - $age` + versuffix="$major.$age.$revision" + ;; + + osf) + major=.`expr $current - $age` + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test "$loop" -ne 0; do + iface=`expr $current - $loop` + loop=`expr $loop - 1` + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring="$verstring:${current}.0" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + major=`expr $current - $age` + versuffix="-$major" + ;; + + *) + $echo "$modename: unknown library version type \`$version_type'" 1>&2 + echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit 1 + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring="0.0" + ;; + esac + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + fi + + if test "$mode" != relink; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`echo "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) + removelist="$removelist $p" + ;; + *) ;; + esac + done + if test -n "$removelist"; then + $show "${rm}r $removelist" + $run ${rm}r $removelist + fi + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + oldlibs="$oldlibs $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + for path in $notinst_path; do + lib_search_path=`echo "$lib_search_path " | ${SED} -e 's% $path % %g'` + deplibs=`echo "$deplibs " | ${SED} -e 's% -L$path % %g'` + dependency_libs=`echo "$dependency_libs " | ${SED} -e 's% -L$path % %g'` + done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + temp_xrpath="$temp_xrpath -R$libdir" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles="$dlfiles" + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) dlfiles="$dlfiles $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles="$dlprefiles" + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) dlprefiles="$dlprefiles $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + deplibs="$deplibs -framework System" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test "$build_libtool_need_lc" = "yes"; then + deplibs="$deplibs -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $rm conftest.c + cat > conftest.c </dev/null` + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null \ + | grep " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ + | ${SED} 10q \ + | $EGREP "$file_magic_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + echo "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + echo "*** with $libname but no candidates were found. (...for file magic test)" + else + echo "*** with $libname and none of the candidates passed a file format test" + echo "*** using a file magic. Last file checked: $potlib" + fi + fi + else + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + fi + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method + match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` + for a_deplib in $deplibs; do + name="`expr $a_deplib : '-l\(.*\)'`" + # If $name is empty we are operating on a -L argument. + if test -n "$name" && test "$name" != "0"; then + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $a_deplib "*) + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + ;; + esac + fi + if test -n "$a_deplib" ; then + libname=`eval \\$echo \"$libname_spec\"` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib="$potent_lib" # see symlink-check above in file_magic test + if eval echo \"$potent_lib\" 2>/dev/null \ + | ${SED} 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + echo "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + echo "*** with $libname but no candidates were found. (...for regex pattern test)" + else + echo "*** with $libname and none of the candidates passed a file format test" + echo "*** using a regex pattern. Last file checked: $potlib" + fi + fi + else + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + fi + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ + -e 's/ -[LR][^ ]*//g'` + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + for i in $predeps $postdeps ; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` + done + fi + if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ + | grep . >/dev/null; then + echo + if test "X$deplibs_check_method" = "Xnone"; then + echo "*** Warning: inter-library dependencies are not supported in this platform." + else + echo "*** Warning: inter-library dependencies are not known to be supported." + fi + echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + fi + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` + ;; + esac + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + echo + echo "*** Warning: libtool could not satisfy all declared inter-library" + echo "*** dependencies of module $libname. Therefore, libtool will create" + echo "*** a static module, that should work as long as the dlopening" + echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + echo "*** The inter-library dependencies that have been dropped here will be" + echo "*** automatically added whenever a program is linked with this library" + echo "*** or is declared to -dlopen it." + + if test "$allow_undefined" = no; then + echo + echo "*** Since this library must not contain undefined symbols," + echo "*** because either the platform does not support them or" + echo "*** it was explicitly requested with -no-undefined," + echo "*** libtool will only create a static version of it." + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + if test "$hardcode_into_libs" = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + dep_rpath="$dep_rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval dep_rpath=\"$hardcode_libdir_flag_spec\" + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath="$finalize_shlibpath" + test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval library_names=\"$library_names_spec\" + set dummy $library_names + realname="$2" + shift; shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib="$output_objdir/$realname" + for link + do + linknames="$linknames $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + $show "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $run $rm $export_symbols + eval cmds=\"$export_symbols_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + if len=`expr "X$cmd" : ".*"` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + $show "$cmd" + $run eval "$cmd" || exit $? + skipped_export=false + else + # The command line is too long to execute in one step. + $show "using reloadable object file for export list..." + skipped_export=: + fi + done + IFS="$save_ifs" + if test -n "$export_symbols_regex"; then + $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" + $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + $show "$mv \"${export_symbols}T\" \"$export_symbols\"" + $run eval '$mv "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' + fi + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + else + gentop="$output_objdir/${outputname}x" + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "$mkdir $gentop" + $run $mkdir "$gentop" + status=$? + if test "$status" -ne 0 && test ! -d "$gentop"; then + exit $status + fi + generated="$generated $gentop" + + for xlib in $convenience; do + # Extract the objects. + case $xlib in + [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; + *) xabs=`pwd`"/$xlib" ;; + esac + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + xdir="$gentop/$xlib" + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "$mkdir $xdir" + $run $mkdir "$xdir" + status=$? + if test "$status" -ne 0 && test ! -d "$xdir"; then + exit $status + fi + $show "(cd $xdir && $AR x $xabs)" + $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? + + libobjs="$libobjs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` + done + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + linker_flags="$linker_flags $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test "$mode" = relink; then + $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval cmds=\"$archive_expsym_cmds\" + else + save_deplibs="$deplibs" + for conv in $convenience; do + tmp_deplibs= + for test_deplib in $deplibs; do + if test "$test_deplib" != "$conv"; then + tmp_deplibs="$tmp_deplibs $test_deplib" + fi + done + deplibs="$tmp_deplibs" + done + eval cmds=\"$archive_cmds\" + deplibs="$save_deplibs" + fi + + if test "X$skipped_export" != "X:" && len=`expr "X$cmds" : ".*"` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise. + $echo "creating reloadable object files..." + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + delfiles= + last_robj= + k=1 + output=$output_objdir/$save_output-${k}.$objext + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + eval test_cmds=\"$reload_cmds $objlist $last_robj\" + if test "X$objlist" = X || + { len=`expr "X$test_cmds" : ".*"` && + test "$len" -le "$max_cmd_len"; }; then + objlist="$objlist $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test "$k" -eq 1 ; then + # The first file doesn't have a previous command to add. + eval concat_cmds=\"$reload_cmds $objlist $last_robj\" + else + # All subsequent reloadable object files will link in + # the last one created. + eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" + fi + last_robj=$output_objdir/$save_output-${k}.$objext + k=`expr $k + 1` + output=$output_objdir/$save_output-${k}.$objext + objlist=$obj + len=1 + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" + + if ${skipped_export-false}; then + $show "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $run $rm $export_symbols + libobjs=$output + # Append the command to create the export file. + eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" + fi + + # Set up a command to remove the reloadale object files + # after they are used. + i=0 + while test "$i" -lt "$k" + do + i=`expr $i + 1` + delfiles="$delfiles $output_objdir/$save_output-${i}.$objext" + done + + $echo "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs="$IFS"; IFS='~' + for cmd in $concat_cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval cmds=\"$archive_expsym_cmds\" + else + eval cmds=\"$archive_cmds\" + fi + + # Append the command to remove the reloadable object files + # to the just-reset $cmds. + eval cmds=\"\$cmds~$rm $delfiles\" + fi + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? + exit 0 + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" + $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + obj) + if test -n "$deplibs"; then + $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 + fi + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 + fi + + if test -n "$xrpath"; then + $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 + fi + + case $output in + *.lo) + if test -n "$objs$old_deplibs"; then + $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 + exit 1 + fi + libobj="$output" + obj=`$echo "X$output" | $Xsed -e "$lo2o"` + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $run $rm $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" + else + gentop="$output_objdir/${obj}x" + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "$mkdir $gentop" + $run $mkdir "$gentop" + status=$? + if test "$status" -ne 0 && test ! -d "$gentop"; then + exit $status + fi + generated="$generated $gentop" + + for xlib in $convenience; do + # Extract the objects. + case $xlib in + [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; + *) xabs=`pwd`"/$xlib" ;; + esac + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + xdir="$gentop/$xlib" + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "$mkdir $xdir" + $run $mkdir "$xdir" + status=$? + if test "$status" -ne 0 && test ! -d "$xdir"; then + exit $status + fi + $show "(cd $xdir && $AR x $xabs)" + $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? + + reload_conv_objs="$reload_objs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` + done + fi + fi + + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + + output="$obj" + eval cmds=\"$reload_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + exit 0 + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $run eval "echo timestamp > $libobj" || exit $? + exit 0 + fi + + if test -n "$pic_flag" || test "$pic_mode" != default; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + eval cmds=\"$reload_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + exit 0 + ;; + + prog) + case $host in + *cygwin*) output=`echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; + esac + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 + fi + + if test "$preload" = yes; then + if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && + test "$dlopen_self_static" = unknown; then + $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." + fi + fi + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` + finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` + ;; + esac + + compile_command="$compile_command $compile_deplibs" + finalize_command="$finalize_command $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + case :$dllsearchpath: in + *":$libdir:"*) ;; + *) dllsearchpath="$dllsearchpath:$libdir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + fi + + dlsyms= + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + dlsyms="${outputname}S.c" + else + $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 + fi + fi + + if test -n "$dlsyms"; then + case $dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${outputname}.nm" + + $show "$rm $nlist ${nlist}S ${nlist}T" + $run $rm "$nlist" "${nlist}S" "${nlist}T" + + # Parse the name list into a source file. + $show "creating $output_objdir/$dlsyms" + + test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ +/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ +/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +/* Prevent the only kind of declaration conflicts we can make. */ +#define lt_preloaded_symbols some_other_symbol + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + $show "generating symbol list for \`$output'" + + test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + for arg in $progfiles; do + $show "extracting global C symbols from \`$arg'" + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + $run eval '$mv "$nlist"T "$nlist"' + fi + + if test -n "$export_symbols_regex"; then + $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + $run eval '$mv "$nlist"T "$nlist"' + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$output.exp" + $run $rm $export_symbols + $run eval "${SED} -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + else + $run eval "${SED} -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"' + $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T' + $run eval 'mv "$nlist"T "$nlist"' + fi + fi + + for arg in $dlprefiles; do + $show "extracting global C symbols from \`$arg'" + name=`echo "$arg" | ${SED} -e 's%^.*/%%'` + $run eval 'echo ": $name " >> "$nlist"' + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + if test -z "$run"; then + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $mv "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if grep -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + grep -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' + else + echo '/* NONE */' >> "$output_objdir/$dlsyms" + fi + + $echo >> "$output_objdir/$dlsyms" "\ + +#undef lt_preloaded_symbols + +#if defined (__STDC__) && __STDC__ +# define lt_ptr void * +#else +# define lt_ptr char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr address; +} +lt_preloaded_symbols[] = +{\ +" + + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" + + $echo >> "$output_objdir/$dlsyms" "\ + {0, (lt_ptr) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + fi + + pic_flag_for_symtable= + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + case "$compile_command " in + *" -static "*) ;; + *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; + esac;; + *-*-hpux*) + case "$compile_command " in + *" -static "*) ;; + *) pic_flag_for_symtable=" $pic_flag";; + esac + esac + + # Now compile the dynamic symbol file. + $show "(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" + $run eval '(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? + + # Clean up the generated files. + $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" + $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" + + # Transform the symbol file into the correct name. + compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + ;; + *) + $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 + exit 1 + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` + fi + + if test "$need_relink" = no || test "$build_libtool_libs" != yes; then + # Replace the output file specification. + compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + $show "$link_command" + $run eval "$link_command" + status=$? + + # Delete the generated files. + if test -n "$dlsyms"; then + $show "$rm $output_objdir/${outputname}S.${objext}" + $run $rm "$output_objdir/${outputname}S.${objext}" + fi + + exit $status + fi + + if test -n "$shlibpath_var"; then + # We should set the shlibpath_var + rpath= + for dir in $temp_rpath; do + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) + # Absolute path. + rpath="$rpath$dir:" + ;; + *) + # Relative path: add a thisdir entry. + rpath="$rpath\$thisdir/$dir:" + ;; + esac + done + temp_rpath="$rpath" + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + rpath="$rpath$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$no_install" = yes; then + # We don't need to create a wrapper script. + link_command="$compile_var$compile_command$compile_rpath" + # Replace the output file specification. + link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $run $rm $output + # Link the executable and exit + $show "$link_command" + $run eval "$link_command" || exit $? + exit 0 + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 + $echo "$modename: \`$output' will be relinked during installation" 1>&2 + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname + + $show "$link_command" + $run eval "$link_command" || exit $? + + # Now create the wrapper script. + $show "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` + relink_command="$var=\"$var_value\"; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` + fi + + # Quote $echo for shipping. + if test "X$echo" = "X$SHELL $0 --fallback-echo"; then + case $0 in + [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";; + *) qecho="$SHELL `pwd`/$0 --fallback-echo";; + esac + qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` + else + qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` + fi + + # Only actually do things if our run command is non-null. + if test -z "$run"; then + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) output=`echo $output|${SED} 's,.exe$,,'` ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + outputname=`echo $outputname|${SED} 's,.exe$,,'` ;; + *) exeext= ;; + esac + $rm $output + trap "$rm $output; exit 1" 1 2 15 + + $echo > $output "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='${SED} -e 1s/^X//' +sed_quote_subst='$sed_quote_subst' + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variable: + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$echo are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + echo=\"$qecho\" + file=\"\$0\" + # Make sure echo works. + if test \"X\$1\" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift + elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then + # Yippee, \$echo works! + : + else + # Restart under the correct shell, and then maybe \$echo will work. + exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} + fi + fi\ +" + $echo >> $output "\ + + # Find the directory that this script lives in. + thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` + done + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + echo >> $output "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || \\ + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $mkdir \"\$progdir\" + else + $rm \"\$progdir/\$file\" + fi" + + echo >> $output "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + $echo \"\$relink_command_output\" >&2 + $rm \"\$progdir/\$file\" + exit 1 + fi + fi + + $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $rm \"\$progdir/\$program\"; + $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $rm \"\$progdir/\$file\" + fi" + else + echo >> $output "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + echo >> $output "\ + + if test -f \"\$progdir/\$program\"; then" + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $echo >> $output "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` + + export $shlibpath_var +" + fi + + # fixup the dll searchpath if we need to. + if test -n "$dllsearchpath"; then + $echo >> $output "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + $echo >> $output "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2*) + $echo >> $output "\ + exec \$progdir\\\\\$program \${1+\"\$@\"} +" + ;; + + *) + $echo >> $output "\ + exec \$progdir/\$program \${1+\"\$@\"} +" + ;; + esac + $echo >> $output "\ + \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" + exit 1 + fi + else + # The program doesn't exist. + \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2 + \$echo \"This script is just a wrapper for \$program.\" 1>&2 + echo \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" + chmod +x $output + fi + exit 0 + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$old_deplibs $non_pic_objects" + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "$mkdir $gentop" + $run $mkdir "$gentop" + status=$? + if test "$status" -ne 0 && test ! -d "$gentop"; then + exit $status + fi + generated="$generated $gentop" + + # Add in members from convenience archives. + for xlib in $addlibs; do + # Extract the objects. + case $xlib in + [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; + *) xabs=`pwd`"/$xlib" ;; + esac + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + xdir="$gentop/$xlib" + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "$mkdir $xdir" + $run $mkdir "$xdir" + status=$? + if test "$status" -ne 0 && test ! -d "$xdir"; then + exit $status + fi + $show "(cd $xdir && $AR x $xabs)" + $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? + + oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP` + done + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + eval cmds=\"$old_archive_from_new_cmds\" + else + eval cmds=\"$old_archive_cmds\" + + if len=`expr "X$cmds" : ".*"` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # the command line is too long to link in one step, link in parts + $echo "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + # GNU ar 2.10+ was changed to match POSIX; thus no paths are + # encoded into archives. This makes 'ar r' malfunction in + # this piecewise linking case whenever conflicting object + # names appear in distinct ar calls; check, warn and compensate. + if (for obj in $save_oldobjs + do + $echo "X$obj" | $Xsed -e 's%^.*/%%' + done | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "$modename: warning: object name conflicts; overriding AR_FLAGS to 'cq'" 1>&2 + $echo "$modename: warning: to ensure that POSIX-compatible ar will work" 1>&2 + AR_FLAGS=cq + fi + for obj in $save_oldobjs + do + oldobjs="$objlist $obj" + objlist="$objlist $obj" + eval test_cmds=\"$old_archive_cmds\" + if len=`expr "X$test_cmds" : ".*"` && + test "$len" -le "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" + objlist= + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + eval cmds=\"\$concat_cmds~$old_archive_cmds\" + fi + fi + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$generated"; then + $show "${rm}r$generated" + $run ${rm}r$generated + fi + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + $show "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` + relink_command="$var=\"$var_value\"; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $0 --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` + + # Only create the output if not a dry run. + if test -z "$run"; then + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + if test -z "$libdir"; then + $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 + exit 1 + fi + newdependency_libs="$newdependency_libs $libdir/$name" + ;; + *) newdependency_libs="$newdependency_libs $deplib" ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + for lib in $dlfiles; do + name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + if test -z "$libdir"; then + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit 1 + fi + newdlfiles="$newdlfiles $libdir/$name" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + if test -z "$libdir"; then + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit 1 + fi + newdlprefiles="$newdlprefiles $libdir/$name" + done + dlprefiles="$newdlprefiles" + fi + $rm $output + # place dlname in correct position for cygwin + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; + esac + $echo > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test "$installed" = no && test "$need_relink" = yes; then + $echo >> $output "\ +relink_command=\"$relink_command\"" + fi + done + fi + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" + $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? + ;; + esac + exit 0 + ;; + + # libtool install mode + install) + modename="$modename: install" + + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then + # Aesthetically quote it. + arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$arg " + arg="$1" + shift + else + install_prog= + arg="$nonopt" + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog$arg" + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + for arg + do + if test -n "$dest"; then + files="$files $dest" + dest="$arg" + continue + fi + + case $arg in + -d) isdir=yes ;; + -f) prev="-f" ;; + -g) prev="-g" ;; + -m) prev="-m" ;; + -o) prev="-o" ;; + -s) + stripme=" -s" + continue + ;; + -*) ;; + + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + prev= + else + dest="$arg" + continue + fi + ;; + esac + + # Aesthetically quote the argument. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog $arg" + done + + if test -z "$install_prog"; then + $echo "$modename: you must specify an install program" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + if test -n "$prev"; then + $echo "$modename: the \`$prev' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + if test -z "$files"; then + if test -z "$dest"; then + $echo "$modename: no file or destination specified" 1>&2 + else + $echo "$modename: you must specify a destination" 1>&2 + fi + $echo "$help" 1>&2 + exit 1 + fi + + # Strip any trailing slash from the destination. + dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` + test "X$destdir" = "X$dest" && destdir=. + destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` + + # Not a directory, so check to see that there is only one file specified. + set dummy $files + if test "$#" -gt 2; then + $echo "$modename: \`$dest' is not a directory" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + staticlibs="$staticlibs $file" + ;; + + *.la) + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + library_names= + old_library= + relink_command= + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) current_libdirs="$current_libdirs $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) future_libdirs="$future_libdirs $libdir" ;; + esac + fi + + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ + test "X$dir" = "X$file/" && dir= + dir="$dir$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$echo "$destdir" | sed "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + if test "$inst_prefix_dir" = "$destdir"; then + $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 + exit 1 + fi + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$echo "$relink_command" | sed "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$echo "$relink_command" | sed "s%@inst_prefix_dir@%%"` + fi + + $echo "$modename: warning: relinking \`$file'" 1>&2 + $show "$relink_command" + if $run eval "$relink_command"; then : + else + $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 + exit 1 + fi + fi + + # See the names of the shared library. + set dummy $library_names + if test -n "$2"; then + realname="$2" + shift + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + $show "$install_prog $dir/$srcname $destdir/$realname" + $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? + if test -n "$stripme" && test -n "$striplib"; then + $show "$striplib $destdir/$realname" + $run eval "$striplib $destdir/$realname" || exit $? + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + for linkname + do + if test "$linkname" != "$realname"; then + $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" + $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" + fi + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + eval cmds=\"$postinstall_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Install the pseudo-library for information purposes. + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + instname="$dir/$name"i + $show "$install_prog $instname $destdir/$name" + $run eval "$install_prog $instname $destdir/$name" || exit $? + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` + ;; + *.$objext) + staticdest="$destfile" + destfile= + ;; + *) + $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + esac + + # Install the libtool object if requested. + if test -n "$destfile"; then + $show "$install_prog $file $destfile" + $run eval "$install_prog $file $destfile" || exit $? + fi + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` + + $show "$install_prog $staticobj $staticdest" + $run eval "$install_prog \$staticobj \$staticdest" || exit $? + fi + exit 0 + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + destfile="$destdir/$destfile" + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext="" + case $file in + *.exe) + if test ! -f "$file"; then + file=`echo $file|${SED} 's,.exe$,,'` + stripped_ext=".exe" + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin*|*mingw*) + wrapper=`echo $file | ${SED} -e 's,.exe$,,'` + ;; + *) + wrapper=$file + ;; + esac + if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then + notinst_deplibs= + relink_command= + + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $wrapper ;; + *) . ./$wrapper ;; + esac + + # Check the variables that should have been set. + if test -z "$notinst_deplibs"; then + $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 + exit 1 + fi + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + # If there is no directory component, then add one. + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + fi + libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 + finalize=no + fi + done + + relink_command= + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + if test "$finalize" = yes && test -z "$run"; then + tmpdir="/tmp" + test -n "$TMPDIR" && tmpdir="$TMPDIR" + tmpdir="$tmpdir/libtool-$$" + if $mkdir -p "$tmpdir" && chmod 700 "$tmpdir"; then : + else + $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2 + continue + fi + file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` + + $show "$relink_command" + if $run eval "$relink_command"; then : + else + $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 + ${rm}r "$tmpdir" + continue + fi + file="$outputname" + else + $echo "$modename: warning: cannot relink \`$file'" 1>&2 + fi + else + # Install the binary that we compiled earlier. + file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyways + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + destfile=`echo $destfile | ${SED} -e 's,.exe$,,'` + ;; + esac + ;; + esac + $show "$install_prog$stripme $file $destfile" + $run eval "$install_prog\$stripme \$file \$destfile" || exit $? + test -n "$outputname" && ${rm}r "$tmpdir" + ;; + esac + done + + for file in $staticlibs; do + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + $show "$install_prog $file $oldlib" + $run eval "$install_prog \$file \$oldlib" || exit $? + + if test -n "$stripme" && test -n "$striplib"; then + $show "$old_striplib $oldlib" + $run eval "$old_striplib $oldlib" || exit $? + fi + + # Do each command in the postinstall commands. + eval cmds=\"$old_postinstall_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$future_libdirs"; then + $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 + fi + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + test -n "$run" && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $0 --finish$current_libdirs' + else + exit 0 + fi + ;; + + # libtool finish mode + finish) + modename="$modename: finish" + libdirs="$nonopt" + admincmds= + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for dir + do + libdirs="$libdirs $dir" + done + + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + eval cmds=\"$finish_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || admincmds="$admincmds + $cmd" + done + IFS="$save_ifs" + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $run eval "$cmds" || admincmds="$admincmds + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + test "$show" = : && exit 0 + + echo "----------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + echo " $libdir" + done + echo + echo "If you ever happen to want to link against installed libraries" + echo "in a given directory, LIBDIR, you must either use libtool, and" + echo "specify the full pathname of the library, or use the \`-LLIBDIR'" + echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the \`$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + echo " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + echo " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + echo + echo "See any operating system documentation about shared libraries for" + echo "more information, such as the ld(1) and ld.so(8) manual pages." + echo "----------------------------------------------------------------------" + exit 0 + ;; + + # libtool execute mode + execute) + modename="$modename: execute" + + # The first argument is the command name. + cmd="$nonopt" + if test -z "$cmd"; then + $echo "$modename: you must specify a COMMAND" 1>&2 + $echo "$help" + exit 1 + fi + + # Handle -dlopen flags immediately. + for file in $execute_dlfiles; do + if test ! -f "$file"; then + $echo "$modename: \`$file' is not a file" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + dir= + case $file in + *.la) + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Read the libtool library. + dlname= + library_names= + + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" + continue + fi + + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + + if test -f "$dir/$objdir/$dlname"; then + dir="$dir/$objdir" + else + $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 + exit 1 + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + ;; + + *) + $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -*) ;; + *) + # Do a test to see if this is really a libtool program. + if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` + args="$args \"$file\"" + done + + if test -z "$run"; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + if test "${save_LC_ALL+set}" = set; then + LC_ALL="$save_LC_ALL"; export LC_ALL + fi + if test "${save_LANG+set}" = set; then + LANG="$save_LANG"; export LANG + fi + + # Now prepare to actually exec the command. + exec_cmd="\$cmd$args" + else + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" + $echo "export $shlibpath_var" + fi + $echo "$cmd$args" + exit 0 + fi + ;; + + # libtool clean and uninstall mode + clean | uninstall) + modename="$modename: $mode" + rm="$nonopt" + files= + rmforce= + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + for arg + do + case $arg in + -f) rm="$rm $arg"; rmforce=yes ;; + -*) rm="$rm $arg" ;; + *) files="$files $arg" ;; + esac + done + + if test -z "$rm"; then + $echo "$modename: you must specify an RM program" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + rmdirs= + + for file in $files; do + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + if test "X$dir" = "X$file"; then + dir=. + objdir="$objdir" + else + objdir="$dir/$objdir" + fi + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + test "$mode" = uninstall && objdir="$dir" + + # Remember objdir for removal later, being careful to avoid duplicates + if test "$mode" = clean; then + case " $rmdirs " in + *" $objdir "*) ;; + *) rmdirs="$rmdirs $objdir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if (test -L "$file") >/dev/null 2>&1 \ + || (test -h "$file") >/dev/null 2>&1 \ + || test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif test "$rmforce" = yes; then + continue + fi + + rmfiles="$file" + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + . $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + rmfiles="$rmfiles $objdir/$n" + done + test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" + test "$mode" = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" + + if test "$mode" = uninstall; then + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + eval cmds=\"$postuninstall_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" + if test "$?" -ne 0 && test "$rmforce" != yes; then + exit_status=1 + fi + done + IFS="$save_ifs" + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + eval cmds=\"$old_postuninstall_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" + if test "$?" -ne 0 && test "$rmforce" != yes; then + exit_status=1 + fi + done + IFS="$save_ifs" + fi + # FIXME: should reinstall the best remaining shared library. + fi + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + + # Read the .lo file + . $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" \ + && test "$pic_object" != none; then + rmfiles="$rmfiles $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" \ + && test "$non_pic_object" != none; then + rmfiles="$rmfiles $dir/$non_pic_object" + fi + fi + ;; + + *) + # Do a test to see if this is a libtool program. + if test "$mode" = clean && + (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + relink_command= + . $dir/$file + + rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" + if test "$fast_install" = yes && test -n "$relink_command"; then + rmfiles="$rmfiles $objdir/lt-$name" + fi + fi + ;; + esac + $show "$rm $rmfiles" + $run $rm $rmfiles || exit_status=1 + done + + # Try to remove the ${objdir}s in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + $show "rmdir $dir" + $run rmdir $dir >/dev/null 2>&1 + fi + done + + exit $exit_status + ;; + + "") + $echo "$modename: you must specify a MODE" 1>&2 + $echo "$generic_help" 1>&2 + exit 1 + ;; + esac + + if test -z "$exec_cmd"; then + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$generic_help" 1>&2 + exit 1 + fi +fi # test -z "$show_help" + +if test -n "$exec_cmd"; then + eval exec $exec_cmd + exit 1 +fi + +# We need to display help for each of the modes. +case $mode in +"") $echo \ +"Usage: $modename [OPTION]... [MODE-ARG]... + +Provide generalized library-building support services. + + --config show all configuration variables + --debug enable verbose shell tracing +-n, --dry-run display commands without modifying any files + --features display basic configuration information and exit + --finish same as \`--mode=finish' + --help display this help message and exit + --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] + --quiet same as \`--silent' + --silent don't print informational messages + --tag=TAG use configuration variables from tag TAG + --version print version information + +MODE must be one of the following: + + clean remove files from the build directory + compile compile a source file into a libtool object + execute automatically set library path, then run a program + finish complete the installation of libtool libraries + install install libraries or executables + link create a library or an executable + uninstall remove libraries from an installed directory + +MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for +a more detailed description of MODE." + exit 0 + ;; + +clean) + $echo \ +"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + +compile) + $echo \ +"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -prefer-pic try to building PIC objects only + -prefer-non-pic try to building non-PIC objects only + -static always build a \`.o' file suitable for static linking + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + +execute) + $echo \ +"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + +finish) + $echo \ +"Usage: $modename [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + +install) + $echo \ +"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + +link) + $echo \ +"Usage: $modename [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE Use a list of object files found in FILE to specify objects + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -static do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + +uninstall) + $echo \ +"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + +*) + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; +esac + +echo +$echo "Try \`$modename --help' for more information about other modes." + +exit 0 + +# The TAGs below are defined such that we never get into a situation +# in which we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: +# ### BEGIN LIBTOOL TAG CONFIG: CXX + +# Libtool was configured on host du216771: + +# Shell to use when invoking shell scripts. +SHELL="/bin/sh" + +# Whether or not to build shared libraries. +build_libtool_libs=no + +# Whether or not to build static libraries. +build_old_libs=yes + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=yes + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=no + +# Whether or not to optimize for fast installation. +fast_install=needless + +# The host system. +host_alias= +host=i686-pc-msys + +# An echo program that does not interpret backslashes. +echo="echo" + +# The archiver. +AR="ar" +AR_FLAGS="cru" + +# A C compiler. +LTCC="gcc" + +# A language-specific compiler. +CC="g++" + +# Is the compiler the GNU C compiler? +with_gcc=yes + +# An ERE matcher. +EGREP="grep -E" + +# The linker used to build libraries. +LD="/usr/msys/bin/ld.exe" + +# Whether we need hard or soft links. +LN_S="ln -s" + +# A BSD-compatible nm program. +NM="/bin/nm -B" + +# A sed program that does not truncate output. +SED="/bin/sed" + +# A symbol stripping program +STRIP=strip + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=file + +# Used on cygwin: DLL creation program. +DLLTOOL="dlltool" + +# Used on cygwin: object dumper. +OBJDUMP="objdump" + +# Used on cygwin: assembler. +AS="as" + +# The name of the directory that contains temporary libtool files. +objdir=.libs + +# How to create reloadable object files. +reload_flag=" -r" +reload_cmds="\$LD\$reload_flag -o \$output\$reload_objs" + +# How to pass a linker flag through the compiler. +wl="-Wl," + +# Object file suffix (normally "o"). +objext="o" + +# Old archive suffix (normally "a"). +libext="a" + +# Executable file suffix (normally ""). +exeext="" + +# Additional compiler flags for building library objects. +pic_flag=" -DPIC" +pic_mode=default + +# What is the maximum length of a command? +max_cmd_len=262144 + +# Does compiler simultaneously support -c and -o options? +compiler_c_o="yes" + +# Must we lock files when doing compilation ? +need_locks="no" + +# Do we need the lib prefix for modules? +need_lib_prefix=unknown + +# Do we need a version for libraries? +need_version=unknown + +# Whether dlopen is supported. +dlopen_support=yes + +# Whether dlopen of programs is supported. +dlopen_self=no + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=unknown + +# Compiler flag to prevent dynamic linking. +link_static_flag="-static" + +# Compiler flag to turn off builtin functions. +no_builtin_flag=" -fno-builtin" + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec="\${wl}--export-dynamic" + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec="\${wl}--whole-archive\$convenience \${wl}--no-whole-archive" + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec="" + +# Library versioning type. +version_type=none + +# Format of library name prefix. +libname_spec="lib\$name" + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec="" + +# The coded name of the library, if different from the real name. +soname_spec="" + +# Commands used to build and install an old-style archive. +RANLIB="ranlib" +old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs\$old_deplibs~\$RANLIB \$oldlib" +old_postinstall_cmds="\$RANLIB \$oldlib~chmod 644 \$oldlib" +old_postuninstall_cmds="" + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds="" + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds="" + +# Commands used to build and install a shared archive. +archive_cmds="\$CC -shared -nostdlib \$predep_objects \$libobjs \$deplibs \$postdep_objects \$compiler_flags \${wl}-soname \$wl\$soname -o \$lib" +archive_expsym_cmds="\$CC -shared -nostdlib \$predep_objects \$libobjs \$deplibs \$postdep_objects \$compiler_flags \${wl}-soname \$wl\$soname \${wl}-retain-symbols-file \$wl\$export_symbols -o \$lib" +postinstall_cmds="" +postuninstall_cmds="" + +# Commands to strip libraries. +old_striplib="strip --strip-debug" +striplib="strip --strip-unneeded" + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects="" + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects="" + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps="" + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps="-lstdc++ -lgcc -lmsys-1.0 -luser32 -lkernel32 -ladvapi32 -lshell32 -lgcc" + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path="-L/usr/lib -L/usr/lib -L/usr/lib/w32api -L/bin/../lib/gcc-lib/msys/2.95.3-1 -L/bin/../lib/gcc-lib -L/usr/lib/gcc-lib/msys/2.95.3-1 -L/bin/../lib/gcc-lib/msys/2.95.3-1/../../../../msys/lib -L/usr/lib/gcc-lib/msys/2.95.3-1/../../../../msys/lib" + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method="unknown" + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd="\$MAGIC_CMD" + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag="" + +# Flag that forces no undefined symbols. +no_undefined_flag="" + +# Commands used to finish a libtool library installation in a directory. +finish_cmds="" + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval="" + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe="sed -n -e 's/^.*[ ]\\([ABCDGISTW][ABCDGISTW]*\\)[ ][ ]*\\(_\\)\\([_A-Za-z][_A-Za-z0-9]*\\)\$/\\1 \\2\\3 \\3/p'" + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl="sed -n -e 's/^. .* \\(.*\\)\$/extern int \\1;/p'" + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address="sed -n -e 's/^: \\([^ ]*\\) \$/ {\\\"\\1\\\", (lt_ptr) 0},/p' -e 's/^[BCDEGRST] \\([^ ]*\\) \\([^ ]*\\)\$/ {\"\\2\", (lt_ptr) \\&\\2},/p'" + +# This is the shared library runtime path variable. +runpath_var=LD_RUN_PATH + +# This is the shared library path variable. +shlibpath_var= + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=unknown + +# How to hardcode a shared library path into an executable. +hardcode_action=immediate + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=no + +# Flag to hardcode $libdir into a binary during linking. +# This must work even if $libdir does not exist. +hardcode_libdir_flag_spec="\${wl}--rpath \${wl}\$libdir" + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator="" + +# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=no + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=no + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var= + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="PATH LD_RUN_PATH GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=unknown + +# Compile-time system search path for libraries +sys_lib_search_path_spec=" /bin/../lib/gcc-lib/msys/2.95.3-1/ /bin/../lib/gcc-lib/ /usr/lib/gcc-lib/msys/2.95.3-1/ /usr/lib/gcc/msys/2.95.3-1/ /bin/../lib/gcc-lib/msys/2.95.3-1/../../../../msys/lib/msys/2.95.3-1/ /bin/../lib/gcc-lib/msys/2.95.3-1/../../../../msys/lib/ /usr/lib/gcc-lib/msys/2.95.3-1/../../../../msys/lib/msys/2.95.3-1/ /usr/lib/gcc-lib/msys/2.95.3-1/../../../../msys/lib/" + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec="/lib /usr/lib" + +# Fix the shell variable $srcfile for the compiler. +fix_srcfile_path="" + +# Set to yes if exported symbols are required. +always_export_symbols=no + +# The commands to list exported symbols. +export_symbols_cmds="\$NM \$libobjs \$convenience | \$global_symbol_pipe | sed 's/.* //' | sort | uniq > \$export_symbols" + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds="" + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms="" + +# Symbols that must always be exported. +include_expsyms="" + +# ### END LIBTOOL TAG CONFIG: CXX + +# ### BEGIN LIBTOOL TAG CONFIG: F77 + +# Libtool was configured on host du216771: + +# Shell to use when invoking shell scripts. +SHELL="/bin/sh" + +# Whether or not to build shared libraries. +build_libtool_libs=no + +# Whether or not to build static libraries. +build_old_libs=yes + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=yes + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=no + +# Whether or not to optimize for fast installation. +fast_install=needless + +# The host system. +host_alias= +host=i686-pc-msys + +# An echo program that does not interpret backslashes. +echo="echo" + +# The archiver. +AR="ar" +AR_FLAGS="cru" + +# A C compiler. +LTCC="gcc" + +# A language-specific compiler. +CC="g77" + +# Is the compiler the GNU C compiler? +with_gcc=yes + +# An ERE matcher. +EGREP="grep -E" + +# The linker used to build libraries. +LD="/usr/msys/bin/ld.exe" + +# Whether we need hard or soft links. +LN_S="ln -s" + +# A BSD-compatible nm program. +NM="/bin/nm -B" + +# A sed program that does not truncate output. +SED="/bin/sed" + +# A symbol stripping program +STRIP=strip + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=file + +# Used on cygwin: DLL creation program. +DLLTOOL="dlltool" + +# Used on cygwin: object dumper. +OBJDUMP="objdump" + +# Used on cygwin: assembler. +AS="as" + +# The name of the directory that contains temporary libtool files. +objdir=.libs + +# How to create reloadable object files. +reload_flag=" -r" +reload_cmds="\$LD\$reload_flag -o \$output\$reload_objs" + +# How to pass a linker flag through the compiler. +wl="-Wl," + +# Object file suffix (normally "o"). +objext="o" + +# Old archive suffix (normally "a"). +libext="a" + +# Executable file suffix (normally ""). +exeext="" + +# Additional compiler flags for building library objects. +pic_flag=" -DPIC" +pic_mode=default + +# What is the maximum length of a command? +max_cmd_len=262144 + +# Does compiler simultaneously support -c and -o options? +compiler_c_o="yes" + +# Must we lock files when doing compilation ? +need_locks="no" + +# Do we need the lib prefix for modules? +need_lib_prefix=unknown + +# Do we need a version for libraries? +need_version=unknown + +# Whether dlopen is supported. +dlopen_support=yes + +# Whether dlopen of programs is supported. +dlopen_self=no + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=unknown + +# Compiler flag to prevent dynamic linking. +link_static_flag="-static" + +# Compiler flag to turn off builtin functions. +no_builtin_flag="" + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec="\${wl}--export-dynamic" + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec="\${wl}--whole-archive\$convenience \${wl}--no-whole-archive" + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec="" + +# Library versioning type. +version_type=none + +# Format of library name prefix. +libname_spec="lib\$name" + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec="" + +# The coded name of the library, if different from the real name. +soname_spec="" + +# Commands used to build and install an old-style archive. +RANLIB="ranlib" +old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs\$old_deplibs~\$RANLIB \$oldlib" +old_postinstall_cmds="\$RANLIB \$oldlib~chmod 644 \$oldlib" +old_postuninstall_cmds="" + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds="" + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds="" + +# Commands used to build and install a shared archive. +archive_cmds="\$CC -shared \$libobjs \$deplibs \$compiler_flags \${wl}-soname \$wl\$soname -o \$lib" +archive_expsym_cmds="\$CC -shared \$libobjs \$deplibs \$compiler_flags \${wl}-soname \$wl\$soname \${wl}-retain-symbols-file \$wl\$export_symbols -o \$lib" +postinstall_cmds="" +postuninstall_cmds="" + +# Commands to strip libraries. +old_striplib="strip --strip-debug" +striplib="strip --strip-unneeded" + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects="" + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects="" + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps="" + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps="" + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path="" + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method="unknown" + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd="\$MAGIC_CMD" + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag="" + +# Flag that forces no undefined symbols. +no_undefined_flag="" + +# Commands used to finish a libtool library installation in a directory. +finish_cmds="" + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval="" + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe="sed -n -e 's/^.*[ ]\\([ABCDGISTW][ABCDGISTW]*\\)[ ][ ]*\\(_\\)\\([_A-Za-z][_A-Za-z0-9]*\\)\$/\\1 \\2\\3 \\3/p'" + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl="sed -n -e 's/^. .* \\(.*\\)\$/extern int \\1;/p'" + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address="sed -n -e 's/^: \\([^ ]*\\) \$/ {\\\"\\1\\\", (lt_ptr) 0},/p' -e 's/^[BCDEGRST] \\([^ ]*\\) \\([^ ]*\\)\$/ {\"\\2\", (lt_ptr) \\&\\2},/p'" + +# This is the shared library runtime path variable. +runpath_var=LD_RUN_PATH + +# This is the shared library path variable. +shlibpath_var= + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=unknown + +# How to hardcode a shared library path into an executable. +hardcode_action=immediate + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=no + +# Flag to hardcode $libdir into a binary during linking. +# This must work even if $libdir does not exist. +hardcode_libdir_flag_spec="\${wl}--rpath \${wl}\$libdir" + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator="" + +# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=no + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=no + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=unsupported + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="PATH LD_RUN_PATH GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=unknown + +# Compile-time system search path for libraries +sys_lib_search_path_spec=" /bin/../lib/gcc-lib/msys/2.95.3-1/ /bin/../lib/gcc-lib/ /usr/lib/gcc-lib/msys/2.95.3-1/ /usr/lib/gcc/msys/2.95.3-1/ /bin/../lib/gcc-lib/msys/2.95.3-1/../../../../msys/lib/msys/2.95.3-1/ /bin/../lib/gcc-lib/msys/2.95.3-1/../../../../msys/lib/ /usr/lib/gcc-lib/msys/2.95.3-1/../../../../msys/lib/msys/2.95.3-1/ /usr/lib/gcc-lib/msys/2.95.3-1/../../../../msys/lib/" + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec="/lib /usr/lib" + +# Fix the shell variable $srcfile for the compiler. +fix_srcfile_path="" + +# Set to yes if exported symbols are required. +always_export_symbols=no + +# The commands to list exported symbols. +export_symbols_cmds="\$NM \$libobjs \$convenience | \$global_symbol_pipe | sed 's/.* //' | sort | uniq > \$export_symbols" + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds="" + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms="_GLOBAL_OFFSET_TABLE_" + +# Symbols that must always be exported. +include_expsyms="" + +# ### END LIBTOOL TAG CONFIG: F77 + +# ### BEGIN LIBTOOL TAG CONFIG: GCJ + +# Libtool was configured on host du216771: + +# Shell to use when invoking shell scripts. +SHELL="/bin/sh" + +# Whether or not to build shared libraries. +build_libtool_libs=no + +# Whether or not to build static libraries. +build_old_libs=yes + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=yes + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=no + +# Whether or not to optimize for fast installation. +fast_install=needless + +# The host system. +host_alias= +host=i686-pc-msys + +# An echo program that does not interpret backslashes. +echo="echo" + +# The archiver. +AR="ar" +AR_FLAGS="cru" + +# A C compiler. +LTCC="gcc" + +# A language-specific compiler. +CC="no" + +# Is the compiler the GNU C compiler? +with_gcc= + +# An ERE matcher. +EGREP="grep -E" + +# The linker used to build libraries. +LD="" + +# Whether we need hard or soft links. +LN_S="ln -s" + +# A BSD-compatible nm program. +NM="/bin/nm -B" + +# A sed program that does not truncate output. +SED="/bin/sed" + +# A symbol stripping program +STRIP=strip + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=file + +# Used on cygwin: DLL creation program. +DLLTOOL="dlltool" + +# Used on cygwin: object dumper. +OBJDUMP="objdump" + +# Used on cygwin: assembler. +AS="as" + +# The name of the directory that contains temporary libtool files. +objdir=.libs + +# How to create reloadable object files. +reload_flag=" -r" +reload_cmds="\$LD\$reload_flag -o \$output\$reload_objs" + +# How to pass a linker flag through the compiler. +wl="-Wl," + +# Object file suffix (normally "o"). +objext="o" + +# Old archive suffix (normally "a"). +libext="a" + +# Executable file suffix (normally ""). +exeext="" + +# Additional compiler flags for building library objects. +pic_flag="" +pic_mode=default + +# What is the maximum length of a command? +max_cmd_len=262144 + +# Does compiler simultaneously support -c and -o options? +compiler_c_o="no" + +# Must we lock files when doing compilation ? +need_locks="no" + +# Do we need the lib prefix for modules? +need_lib_prefix=unknown + +# Do we need a version for libraries? +need_version=unknown + +# Whether dlopen is supported. +dlopen_support=yes + +# Whether dlopen of programs is supported. +dlopen_self=no + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=unknown + +# Compiler flag to prevent dynamic linking. +link_static_flag="-static" + +# Compiler flag to turn off builtin functions. +no_builtin_flag=" -fno-builtin -fno-rtti -fno-exceptions" + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec="\${wl}--export-dynamic" + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec="\${wl}--whole-archive\$convenience \${wl}--no-whole-archive" + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec="" + +# Library versioning type. +version_type=none + +# Format of library name prefix. +libname_spec="lib\$name" + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec="" + +# The coded name of the library, if different from the real name. +soname_spec="" + +# Commands used to build and install an old-style archive. +RANLIB="ranlib" +old_archive_cmds="" +old_postinstall_cmds="\$RANLIB \$oldlib~chmod 644 \$oldlib" +old_postuninstall_cmds="" + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds="" + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds="" + +# Commands used to build and install a shared archive. +archive_cmds="\$CC -shared \$libobjs \$deplibs \$compiler_flags \${wl}-soname \$wl\$soname -o \$lib" +archive_expsym_cmds="\$CC -shared \$libobjs \$deplibs \$compiler_flags \${wl}-soname \$wl\$soname \${wl}-retain-symbols-file \$wl\$export_symbols -o \$lib" +postinstall_cmds="" +postuninstall_cmds="" + +# Commands to strip libraries. +old_striplib="strip --strip-debug" +striplib="strip --strip-unneeded" + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects="" + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects="" + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps="" + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps="" + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path="" + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method="unknown" + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd="\$MAGIC_CMD" + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag="" + +# Flag that forces no undefined symbols. +no_undefined_flag="" + +# Commands used to finish a libtool library installation in a directory. +finish_cmds="" + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval="" + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe="sed -n -e 's/^.*[ ]\\([ABCDGISTW][ABCDGISTW]*\\)[ ][ ]*\\(_\\)\\([_A-Za-z][_A-Za-z0-9]*\\)\$/\\1 \\2\\3 \\3/p'" + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl="sed -n -e 's/^. .* \\(.*\\)\$/extern int \\1;/p'" + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address="sed -n -e 's/^: \\([^ ]*\\) \$/ {\\\"\\1\\\", (lt_ptr) 0},/p' -e 's/^[BCDEGRST] \\([^ ]*\\) \\([^ ]*\\)\$/ {\"\\2\", (lt_ptr) \\&\\2},/p'" + +# This is the shared library runtime path variable. +runpath_var=LD_RUN_PATH + +# This is the shared library path variable. +shlibpath_var= + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=unknown + +# How to hardcode a shared library path into an executable. +hardcode_action=immediate + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=no + +# Flag to hardcode $libdir into a binary during linking. +# This must work even if $libdir does not exist. +hardcode_libdir_flag_spec="\${wl}--rpath \${wl}\$libdir" + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator="" + +# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=no + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=no + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=unsupported + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="PATH LD_RUN_PATH GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=unknown + +# Compile-time system search path for libraries +sys_lib_search_path_spec="" + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec="/lib /usr/lib" + +# Fix the shell variable $srcfile for the compiler. +fix_srcfile_path="" + +# Set to yes if exported symbols are required. +always_export_symbols=no + +# The commands to list exported symbols. +export_symbols_cmds="\$NM \$libobjs \$convenience | \$global_symbol_pipe | sed 's/.* //' | sort | uniq > \$export_symbols" + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds="" + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms="_GLOBAL_OFFSET_TABLE_" + +# Symbols that must always be exported. +include_expsyms="" + +# ### END LIBTOOL TAG CONFIG: GCJ + diff --git a/bin/libtoolize b/bin/libtoolize new file mode 100644 index 00000000..b3cdaa13 --- /dev/null +++ b/bin/libtoolize @@ -0,0 +1,353 @@ +#! /bin/sh +# libtoolize - Prepare a package to use libtool. +# libtoolize. Generated from libtoolize.in by configure. +# Copyright (C) 1996-2000, 2001 Free Software Foundation, Inc. +# Originally by Gordon Matzigkeit , 1996 +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# The name of this program. +progname=`echo "$0" | sed 's%^.*/%%'` + +# Constants. +PROGRAM=libtoolize +PACKAGE=libtool +VERSION=1.4e + +# Directory names. +prefix=/usr +datadir=${prefix}/share +pkgdatadir=${datadir}/libtool +aclocaldir=${datadir}/aclocal + +libtool_m4="$aclocaldir/libtool.m4" +ltdl_m4="$aclocaldir/ltdl.m4" + +dry_run=no +help="Try \`$progname --help' for more information." +rm="rm -f" +ln_s="ln -s" +cp="cp -f" +mkdir="mkdir" + +# Global variables. +automake= +copy= +force= +ltdl= +ltdl_tar= +configure_ac= +status=0 + +for arg +do + case "$arg" in + --help) + cat <&2 + echo "$help" 1>&2 + exit 1 + ;; + + *) + echo "$progname: too many arguments" 1>&2 + echo "$help" 1>&2 + exit 1 + ;; + esac +done + +if test -f configure.ac; then + configure_ac=configure.ac +elif test -f configure.in; then + configure_ac=configure.in +else + echo "$progname: \`configure.ac' does not exist" 1>&2 + echo "$help" 1>&2 + exit 1 +fi + + +files=`cd $pkgdatadir && ls` +if test -z "$files"; then + echo "$progname: cannot list files in \`$pkgdatadir'" 1>&2 + exit 1 +fi +files='config.guess config.sub ltmain.sh' + +auxdir=. +auxdirline=`grep '^AC_CONFIG_AUX_DIR' $configure_ac 2>/dev/null` +if test -n "$auxdirline"; then + # Handle explicit AC_CONFIG_AUX_DIR settings. + auxdir=`echo "$auxdirline" | sed 's/^AC_CONFIG_AUX_DIR(\([^)]*\)).*$/\1/'` + + if test "$auxdir" = "$auxdirline"; then + echo "$progname: invalid AC_CONFIG_AUX_DIR syntax: $auxdirline" 1>&2 + exit 1 + else + # Strip any quote brackets. + auxdir=`echo "$auxdir" | sed 's/^\[\(.*\)\]$/\1/g'` + case "$auxdir" in + *\$*) + echo "$progname: cannot handle variables in AC_CONFIG_AUX_DIR" 1>&2 + exit 1 + ;; + *) + ;; + esac + fi +else + # Try to discover auxdir the same way it is discovered by configure. + # Note that we default to the current directory. + for dir in . .. ../..; do + if test -f $dir/install-sh; then + auxdir=$dir + break + elif test -f $dir/install.sh; then + auxdir=$dir + break + fi + done +fi + +if test -z "$automake"; then + if grep '^A[MC]_PROG_LIBTOOL' $configure_ac >/dev/null 2>&1; then : + else + echo "Remember to add \`AC_PROG_LIBTOOL' to \`$configure_ac'." + fi + + if grep '^AC_PROG_RANLIB' $configure_ac >/dev/null 2>&1; then + echo "Using \`AC_PROG_RANLIB' is rendered obsolete by \`AC_PROG_LIBTOOL'" + fi + + if grep 'generated automatically by aclocal' aclocal.m4 >/dev/null 2>&1; then + updatemsg="update your \`aclocal.m4' by running aclocal" + else + updatemsg="add the contents of \`$libtool_m4' to \`aclocal.m4'" + fi + + if grep '^AC_DEFUN(\[A[MC]_PROG_LIBTOOL' aclocal.m4 >/dev/null 2>&1; then + # Check the version number on libtool.m4 and the one used in aclocal.m4. + instserial=`grep '^# serial ' $libtool_m4 | grep 'A[MC]_PROG_LIBTOOL' | sed -e 's/^# serial \([0-9][0-9]*\).*$/\1/; q'` + + if test -z "$instserial"; then + echo "$progname: warning: no serial number on \`$libtool_m4'" 1>&2 + else + # If the local macro has no serial number, we assume it's ancient. + localserial=`grep '^# serial ' aclocal.m4 | grep 'A[MC]_PROG_LIBTOOL' | sed -e 's/^# serial \([0-9][0-9]*\).*$/\1/; q'` + + test -z "$localserial" && localserial=0 + + if test "$localserial" -lt "$instserial"; then + echo "You should $updatemsg." + elif test "$localserial" -gt "$instserial"; then + echo "$progname: \`$libtool_m4' is serial $instserial, less than $localserial in \`aclocal.m4'" 1>&2 + if test -z "$force"; then + echo "Use \`--force' to replace newer libtool files with this version." 1>&2 + exit 1 + fi + echo "To remain compatible, you should $updatemsg." + fi + fi + else + echo "You should $updatemsg." + fi + + if grep '^AC_LIB_LTDL' $configure_ac >/dev/null 2>&1; then + if grep 'generated automatically by aclocal' aclocal.m4 >/dev/null 2>&1; then + updatemsg="update your \`aclocal.m4' by running aclocal" + else + updatemsg="add the contents of \`$ltdl_m4' to \`aclocal.m4'" + fi + + if grep '^AC_DEFUN(AC_LIB_LTDL' aclocal.m4 >/dev/null 2>&1; then + # Check the version number on ltdl.m4 and the one used in aclocal.m4. + instserial=`grep '^# serial ' $ltdl_m4 | grep 'AC_LIB_LTDL' | sed -e 's/^# serial \([0-9][0-9]*\).*$/\1/; q'` + + if test -z "$instserial"; then + echo "$progname: warning: no serial number on \`$ltdl_m4'" 1>&2 + else + # If the local macro has no serial number, we assume it's ancient. + localserial=`grep '^# serial ' aclocal.m4 | grep 'AC_LIB_LTDL' | sed -e 's/^# serial \([0-9][0-9]*\).*$/\1/; q'` + + test -z "$localserial" && localserial=0 + + if test "$localserial" -lt "$instserial"; then + echo "You should $updatemsg." + elif test "$localserial" -gt "$instserial"; then + echo "$progname: \`$ltld_m4' is serial $instserial, less than $localserial in \`aclocal.m4'" 1>&2 + if test -z "$force"; then + echo "Use \`--force' to replace newer libtool files with this version." 1>&2 + exit 1 + fi + echo "To remain compatible, you should $updatemsg." + fi + fi + else + echo "You should $updatemsg." + fi + fi +fi + + +if test "x$ltdl" = xyes; then + test -d libltdl || $mkdir libltdl + ltdlfiles=`cd $pkgdatadir && ls libltdl/*` +else + ltdlfiles= +fi + +for file in $ltdlfiles; do + if test -f "$file" && test -z "$force"; then + test -z "$automake" && echo "$progname: \`$file' exists: use \`--force' to overwrite" 1>&2 + continue + fi + + $rm $file + if test -n "$ln_s" && $ln_s $pkgdatadir/$file $file; then : + elif $cp $pkgdatadir/$file $file; then : + else + echo "$progname: cannot copy \`$pkgdatadir/$file' to \`$file'" 1>&2 + status=1 + fi +done + +if test "x$ltdl_tar" = x"yes"; then + if test "x$dry_run" = x"yes"; then + echo "tar -cf - libltdl | gzip --best > libltdl.tar.gz" + elif test -f libltdl.tar.gz && test -z "$force"; then + test -z "$automake" && echo "$progname: \`libltdl.tar.gz' exists: use \`--force' to overwrite" 1>&2 + else + test -d libltdl && ${rm}r libltdl + $mkdir libltdl + ltdlfiles=`cd $pkgdatadir && ls libltdl/*` + for file in $ltdlfiles; do + if $cp $pkgdatadir/$file $file; then : + else + echo "$progname: cannot copy \`$pkgdatadir/$file' to \`$file'" 1>&2 + status=1 + break + fi + done + for file in $files; do + if $cp $pkgdatadir/$file libltdl/$file; then : + else + echo "$progname: cannot copy \`$pkgdatadir/$file' to \`libltdl/$file'" 1>&2 + status=1 + break + fi + done + tar -cf - libltdl | gzip --best > libltdl.tar.gz + ${rm}r libltdl + fi +fi + +# Change to the auxiliary directory. +if test "$auxdir" != .; then + test -z "$automake" && echo "Putting files in AC_CONFIG_AUX_DIR, \`$auxdir'." + cd $auxdir || exit 1 +fi + +for file in $files; do + if test -f "$file" && test -z "$force"; then + test -z "$automake" && echo "$progname: \`$file' exists: use \`--force' to overwrite" 1>&2 + continue + fi + + $rm $file + if test -n "$ln_s" && $ln_s $pkgdatadir/$file $file; then : + elif $cp $pkgdatadir/$file $file; then : + else + echo "$progname: cannot copy \`$pkgdatadir/$file' to \`$file'" 1>&2 + status=1 + fi +done + +exit $status + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: diff --git a/bin/m4.exe b/bin/m4.exe new file mode 100644 index 0000000000000000000000000000000000000000..988199f23f6489e515ee9861ee436e1f94c63ab1 GIT binary patch literal 118148 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 cd7Gqg6h}#N@|O3@` sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +]) diff --git a/share/aclocal-1.10/depout.m4 b/share/aclocal-1.10/depout.m4 new file mode 100644 index 00000000..0d9717a1 --- /dev/null +++ b/share/aclocal-1.10/depout.m4 @@ -0,0 +1,68 @@ +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +#serial 3 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed 10q "$mf" | grep '^#.*generated by automake' > /dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done +done +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) diff --git a/share/aclocal-1.10/dmalloc.m4 b/share/aclocal-1.10/dmalloc.m4 new file mode 100644 index 00000000..44990154 --- /dev/null +++ b/share/aclocal-1.10/dmalloc.m4 @@ -0,0 +1,31 @@ +## ----------------------------------- ## -*- Autoconf -*- +## Check if --with-dmalloc was given. ## +## From Franc,ois Pinard ## +## ----------------------------------- ## + +# Copyright (C) 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 3 + +AC_DEFUN([AM_WITH_DMALLOC], +[AC_MSG_CHECKING([if malloc debugging is wanted]) +AC_ARG_WITH(dmalloc, +[ --with-dmalloc use dmalloc, as in + http://www.dmalloc.com/dmalloc.tar.gz], +[if test "$withval" = yes; then + AC_MSG_RESULT(yes) + AC_DEFINE(WITH_DMALLOC,1, + [Define if using the dmalloc debugging malloc package]) + LIBS="$LIBS -ldmalloc" + LDFLAGS="$LDFLAGS -g" +else + AC_MSG_RESULT(no) +fi], [AC_MSG_RESULT(no)]) +]) + +AU_DEFUN([fp_WITH_DMALLOC], [AM_WITH_DMALLOC]) diff --git a/share/aclocal-1.10/gcj.m4 b/share/aclocal-1.10/gcj.m4 new file mode 100644 index 00000000..5d1e00f9 --- /dev/null +++ b/share/aclocal-1.10/gcj.m4 @@ -0,0 +1,18 @@ +# Check for Java compiler. -*- Autoconf -*- +# For now we only handle the GNU compiler. + +# Copyright (C) 1999, 2000, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +AC_DEFUN([AM_PROG_GCJ],[ +AC_CHECK_PROGS(GCJ, gcj, gcj) +test -z "$GCJ" && AC_MSG_ERROR([no acceptable gcj found in \$PATH]) +if test "x${GCJFLAGS-unset}" = xunset; then + GCJFLAGS="-g -O2" +fi +AC_SUBST(GCJFLAGS) +_AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES(GCJ)]) +]) diff --git a/share/aclocal-1.10/header.m4 b/share/aclocal-1.10/header.m4 new file mode 100644 index 00000000..c328ceb4 --- /dev/null +++ b/share/aclocal-1.10/header.m4 @@ -0,0 +1,12 @@ +## -*- Autoconf -*- +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 8 + +# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. +AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) diff --git a/share/aclocal-1.10/init.m4 b/share/aclocal-1.10/init.m4 new file mode 100644 index 00000000..511073c1 --- /dev/null +++ b/share/aclocal-1.10/init.m4 @@ -0,0 +1,124 @@ +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 12 + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.60])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AM_PROG_INSTALL_SH +AM_PROG_INSTALL_STRIP +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $1 | $1:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) diff --git a/share/aclocal-1.10/install-sh.m4 b/share/aclocal-1.10/install-sh.m4 new file mode 100644 index 00000000..32c2ebb2 --- /dev/null +++ b/share/aclocal-1.10/install-sh.m4 @@ -0,0 +1,14 @@ +## -*- Autoconf -*- +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} +AC_SUBST(install_sh)]) diff --git a/share/aclocal-1.10/lead-dot.m4 b/share/aclocal-1.10/lead-dot.m4 new file mode 100644 index 00000000..d83bfa0b --- /dev/null +++ b/share/aclocal-1.10/lead-dot.m4 @@ -0,0 +1,21 @@ +## -*- Autoconf -*- +# Copyright (C) 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) diff --git a/share/aclocal-1.10/lex.m4 b/share/aclocal-1.10/lex.m4 new file mode 100644 index 00000000..022f6a8b --- /dev/null +++ b/share/aclocal-1.10/lex.m4 @@ -0,0 +1,22 @@ +## Replacement for AC_PROG_LEX. -*- Autoconf -*- +## by Alexandre Oliva +# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_PROG_LEX +# ----------- +# Autoconf leaves LEX=: if lex or flex can't be found. Change that to a +# "missing" invocation, for better error output. +AC_DEFUN([AM_PROG_LEX], +[AC_PREREQ(2.50)dnl +AC_REQUIRE([AM_MISSING_HAS_RUN])dnl +AC_REQUIRE([AC_PROG_LEX])dnl +if test "$LEX" = :; then + LEX=${am_missing_run}flex +fi]) diff --git a/share/aclocal-1.10/lispdir.m4 b/share/aclocal-1.10/lispdir.m4 new file mode 100644 index 00000000..62c2daf6 --- /dev/null +++ b/share/aclocal-1.10/lispdir.m4 @@ -0,0 +1,55 @@ +## ------------------------ -*- Autoconf -*- +## Emacs LISP file handling +## From Ulrich Drepper +## Almost entirely rewritten by Alexandre Oliva +## ------------------------ +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, +# 2006 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 10 + +# AM_PATH_LISPDIR +# --------------- +AC_DEFUN([AM_PATH_LISPDIR], +[AC_PREREQ([2.60])dnl + # If set to t, that means we are running in a shell under Emacs. + # If you have an Emacs named "t", then use the full path. + test x"$EMACS" = xt && EMACS= + AC_CHECK_PROGS([EMACS], [emacs xemacs], [no]) + AC_ARG_VAR([EMACS], [the Emacs editor command]) + AC_ARG_VAR([EMACSLOADPATH], [the Emacs library search path]) + AC_ARG_WITH([lispdir], + [ --with-lispdir override the default lisp directory], + [ lispdir="$withval" + AC_MSG_CHECKING([where .elc files should go]) + AC_MSG_RESULT([$lispdir])], + [ + AC_CACHE_CHECK([where .elc files should go], [am_cv_lispdir], [ + if test $EMACS != "no"; then + if test x${lispdir+set} != xset; then + # If $EMACS isn't GNU Emacs or XEmacs, this can blow up pretty badly + # Some emacsen will start up in interactive mode, requiring C-x C-c to exit, + # which is non-obvious for non-emacs users. + # Redirecting /dev/null should help a bit; pity we can't detect "broken" + # emacsen earlier and avoid running this altogether. + AC_RUN_LOG([$EMACS -batch -q -eval '(while load-path (princ (concat (car load-path) "\n")) (setq load-path (cdr load-path)))' conftest.out]) + am_cv_lispdir=`sed -n \ + -e 's,/$,,' \ + -e '/.*\/lib\/x*emacs\/site-lisp$/{s,.*/lib/\(x*emacs/site-lisp\)$,${libdir}/\1,;p;q;}' \ + -e '/.*\/share\/x*emacs\/site-lisp$/{s,.*/share/\(x*emacs/site-lisp\),${datarootdir}/\1,;p;q;}' \ + conftest.out` + rm conftest.out + fi + fi + test -z "$am_cv_lispdir" && am_cv_lispdir='${datadir}/emacs/site-lisp' + ]) + lispdir="$am_cv_lispdir" +]) +AC_SUBST([lispdir]) +])# AM_PATH_LISPDIR + +AU_DEFUN([ud_PATH_LISPDIR], [AM_PATH_LISPDIR]) diff --git a/share/aclocal-1.10/maintainer.m4 b/share/aclocal-1.10/maintainer.m4 new file mode 100644 index 00000000..1c15c980 --- /dev/null +++ b/share/aclocal-1.10/maintainer.m4 @@ -0,0 +1,28 @@ +# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- +# From Jim Meyering + +# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +AC_DEFUN([AM_MAINTAINER_MODE], +[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) + dnl maintainer-mode is disabled by default + AC_ARG_ENABLE(maintainer-mode, +[ --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer], + USE_MAINTAINER_MODE=$enableval, + USE_MAINTAINER_MODE=no) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST(MAINT)dnl +] +) + +AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) diff --git a/share/aclocal-1.10/make.m4 b/share/aclocal-1.10/make.m4 new file mode 100644 index 00000000..0969d9a7 --- /dev/null +++ b/share/aclocal-1.10/make.m4 @@ -0,0 +1,51 @@ +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 3 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) diff --git a/share/aclocal-1.10/minuso.m4 b/share/aclocal-1.10/minuso.m4 new file mode 100644 index 00000000..925baec7 --- /dev/null +++ b/share/aclocal-1.10/minuso.m4 @@ -0,0 +1,34 @@ +## -*- Autoconf -*- +# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_PROG_CC_C_O +# -------------- +# Like AC_PROG_CC_C_O, but changed for automake. +AC_DEFUN([AM_PROG_CC_C_O], +[AC_REQUIRE([AC_PROG_CC_C_O])dnl +AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +# FIXME: we rely on the cache variable name because +# there is no other way. +set dummy $CC +ac_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` +if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" != yes"; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +dnl Make sure AC_PROG_CC is never called again, or it will override our +dnl setting of CC. +m4_define([AC_PROG_CC], + [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])]) +]) diff --git a/share/aclocal-1.10/missing.m4 b/share/aclocal-1.10/missing.m4 new file mode 100644 index 00000000..26fab2aa --- /dev/null +++ b/share/aclocal-1.10/missing.m4 @@ -0,0 +1,35 @@ +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) diff --git a/share/aclocal-1.10/mkdirp.m4 b/share/aclocal-1.10/mkdirp.m4 new file mode 100644 index 00000000..be8a9de5 --- /dev/null +++ b/share/aclocal-1.10/mkdirp.m4 @@ -0,0 +1,26 @@ +## -*- Autoconf -*- +# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_MKDIR_P +# --------------- +# Check for `mkdir -p'. +AC_DEFUN([AM_PROG_MKDIR_P], +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) diff --git a/share/aclocal-1.10/multi.m4 b/share/aclocal-1.10/multi.m4 new file mode 100644 index 00000000..98417679 --- /dev/null +++ b/share/aclocal-1.10/multi.m4 @@ -0,0 +1,65 @@ +## -*- Autoconf -*- +# Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 6 + +# AM_ENABLE_MULTILIB([MAKEFILE], [REL-TO-TOP-SRCDIR]) +# --------------------------------------------------- +# Add --enable-multilib to configure. +AC_DEFUN([AM_ENABLE_MULTILIB], +[# Default to --enable-multilib +AC_ARG_ENABLE(multilib, +[ --enable-multilib build many library versions (default)], +[case "$enableval" in + yes) multilib=yes ;; + no) multilib=no ;; + *) AC_MSG_ERROR([bad value $enableval for multilib option]) ;; + esac], + [multilib=yes]) + +# We may get other options which we leave undocumented: +# --with-target-subdir, --with-multisrctop, --with-multisubdir +# See config-ml.in if you want the gory details. + +if test "$srcdir" = "."; then + if test "$with_target_subdir" != "."; then + multi_basedir="$srcdir/$with_multisrctop../$2" + else + multi_basedir="$srcdir/$with_multisrctop$2" + fi +else + multi_basedir="$srcdir/$2" +fi +AC_SUBST(multi_basedir) + +# Even if the default multilib is not a cross compilation, +# it may be that some of the other multilibs are. +if test $cross_compiling = no && test $multilib = yes \ + && test "x${with_multisubdir}" != x ; then + cross_compiling=maybe +fi + +AC_OUTPUT_COMMANDS([ +# Only add multilib support code if we just rebuilt the top-level +# Makefile. +case " $CONFIG_FILES " in + *" ]m4_default([$1],Makefile)[ "*) + ac_file=]m4_default([$1],Makefile)[ . ${multi_basedir}/config-ml.in + ;; +esac], + [ +srcdir="$srcdir" +host="$host" +target="$target" +with_multisubdir="$with_multisubdir" +with_multisrctop="$with_multisrctop" +with_target_subdir="$with_target_subdir" +ac_configure_args="${multilib_arg} ${ac_configure_args}" +multi_basedir="$multi_basedir" +CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} +CC="$CC"])])dnl diff --git a/share/aclocal-1.10/obsol-gt.m4 b/share/aclocal-1.10/obsol-gt.m4 new file mode 100644 index 00000000..d380c6d1 --- /dev/null +++ b/share/aclocal-1.10/obsol-gt.m4 @@ -0,0 +1,12 @@ +# Support for obsolete Gettext macro. -*- Autoconf -*- + +# Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# See comment in obsolete.m4. +AU_DEFUN([ud_GNU_GETTEXT], [AM_GNU_GETTEXT]) diff --git a/share/aclocal-1.10/obsol-lt.m4 b/share/aclocal-1.10/obsol-lt.m4 new file mode 100644 index 00000000..12c4d7d0 --- /dev/null +++ b/share/aclocal-1.10/obsol-lt.m4 @@ -0,0 +1,12 @@ +# Support for obsolete Libtool macro. -*- Autoconf -*- + +# Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# See comment in obsolete.m4. +AU_DEFUN([gm_PROG_LIBTOOL], [AM_PROG_LIBTOOL]) diff --git a/share/aclocal-1.10/obsolete.m4 b/share/aclocal-1.10/obsolete.m4 new file mode 100644 index 00000000..bad1db76 --- /dev/null +++ b/share/aclocal-1.10/obsolete.m4 @@ -0,0 +1,37 @@ +## -*- Autoconf -*- +# Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# Obsolete Automake macros. + +# We put here only the macros whose substitution is not an Automake +# macro; otherwise including this file would trigger dependencies for +# all the substitutions. Generally, obsolete Automake macros are +# better AU_DEFUNed in the same file as their replacement, or alone in +# a separate file (see obsol-gt.m4 or obsol-lt.m4 for instance). + +AU_DEFUN([AC_FEATURE_CTYPE], [AC_HEADER_STDC]) +AU_DEFUN([AC_FEATURE_ERRNO], [AC_REPLACE_FUNCS([strerror])]) +AU_DEFUN([AM_CYGWIN32], [AC_CYGWIN]) +AU_DEFUN([AM_EXEEXT], [AC_EXEEXT]) +AU_DEFUN([AM_FUNC_MKTIME], [AC_FUNC_MKTIME]) +AU_DEFUN([AM_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL], + [AC_HEADER_TIOCGWINSZ]) +AU_DEFUN([AM_MINGW32], [AC_MINGW32]) +AU_DEFUN([AM_PROG_INSTALL], [AC_PROG_INSTALL]) +AU_DEFUN([AM_SANITY_CHECK_CC], [AC_PROG_CC]) +AU_DEFUN([AM_SYS_POSIX_TERMIOS], [AC_SYS_POSIX_TERMIOS]) +AU_DEFUN([fp_FUNC_FNMATCH], [AC_FUNC_FNMATCH]) +AU_DEFUN([fp_PROG_INSTALL], [AC_PROG_INSTALL]) +AU_DEFUN([md_TYPE_PTRDIFF_T], [AC_CHECK_TYPES([ptrdiff_t])]) + +# Don't know how to translate these. +# If used, Autoconf will complain that they are possibly unexpended; +# this seems a good enough error message. +# AC_FEATURE_EXIT +# AC_SYSTEM_HEADER diff --git a/share/aclocal-1.10/options.m4 b/share/aclocal-1.10/options.m4 new file mode 100644 index 00000000..34c086d0 --- /dev/null +++ b/share/aclocal-1.10/options.m4 @@ -0,0 +1,32 @@ +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 3 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# ------------------------------ +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ---------------------------------- +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) diff --git a/share/aclocal-1.10/protos.m4 b/share/aclocal-1.10/protos.m4 new file mode 100644 index 00000000..427193b9 --- /dev/null +++ b/share/aclocal-1.10/protos.m4 @@ -0,0 +1,29 @@ +## ------------------------------- ## -*- Autoconf -*- +## Check for function prototypes. ## +## From Franc,ois Pinard ## +## ------------------------------- ## +# Copyright (C) 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2005, 2006 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +AC_DEFUN([AM_C_PROTOTYPES], +[AC_REQUIRE([AC_C_PROTOTYPES]) +if test "$ac_cv_prog_cc_stdc" != no; then + U= ANSI2KNR= +else + U=_ ANSI2KNR=./ansi2knr +fi +# Ensure some checks needed by ansi2knr itself. +AC_REQUIRE([AC_HEADER_STDC]) +AC_CHECK_HEADERS([string.h]) +AC_SUBST([U])dnl +AC_SUBST([ANSI2KNR])dnl +_AM_SUBST_NOTMAKE([ANSI2KNR])dnl +]) + +AU_DEFUN([fp_C_PROTOTYPES], [AM_C_PROTOTYPES]) diff --git a/share/aclocal-1.10/python.m4 b/share/aclocal-1.10/python.m4 new file mode 100644 index 00000000..229fd554 --- /dev/null +++ b/share/aclocal-1.10/python.m4 @@ -0,0 +1,168 @@ +## ------------------------ -*- Autoconf -*- +## Python file handling +## From Andrew Dalke +## Updated by James Henstridge +## ------------------------ +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PATH_PYTHON([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# --------------------------------------------------------------------------- +# Adds support for distributing Python modules and packages. To +# install modules, copy them to $(pythondir), using the python_PYTHON +# automake variable. To install a package with the same name as the +# automake package, install to $(pkgpythondir), or use the +# pkgpython_PYTHON automake variable. +# +# The variables $(pyexecdir) and $(pkgpyexecdir) are provided as +# locations to install python extension modules (shared libraries). +# Another macro is required to find the appropriate flags to compile +# extension modules. +# +# If your package is configured with a different prefix to python, +# users will have to add the install directory to the PYTHONPATH +# environment variable, or create a .pth file (see the python +# documentation for details). +# +# If the MINIMUM-VERSION argument is passed, AM_PATH_PYTHON will +# cause an error if the version of python installed on the system +# doesn't meet the requirement. MINIMUM-VERSION should consist of +# numbers and dots only. +AC_DEFUN([AM_PATH_PYTHON], + [ + dnl Find a Python interpreter. Python versions prior to 1.5 are not + dnl supported because the default installation locations changed from + dnl $prefix/lib/site-python in 1.4 to $prefix/lib/python1.5/site-packages + dnl in 1.5. + m4_define_default([_AM_PYTHON_INTERPRETER_LIST], + [python python2 python2.5 python2.4 python2.3 python2.2 dnl +python2.1 python2.0 python1.6 python1.5]) + + m4_if([$1],[],[ + dnl No version check is needed. + # Find any Python interpreter. + if test -z "$PYTHON"; then + AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST, :) + fi + am_display_PYTHON=python + ], [ + dnl A version check is needed. + if test -n "$PYTHON"; then + # If the user set $PYTHON, use it and don't search something else. + AC_MSG_CHECKING([whether $PYTHON version >= $1]) + AM_PYTHON_CHECK_VERSION([$PYTHON], [$1], + [AC_MSG_RESULT(yes)], + [AC_MSG_ERROR(too old)]) + am_display_PYTHON=$PYTHON + else + # Otherwise, try each interpreter until we find one that satisfies + # VERSION. + AC_CACHE_CHECK([for a Python interpreter with version >= $1], + [am_cv_pathless_PYTHON],[ + for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do + test "$am_cv_pathless_PYTHON" = none && break + AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break]) + done]) + # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. + if test "$am_cv_pathless_PYTHON" = none; then + PYTHON=: + else + AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON]) + fi + am_display_PYTHON=$am_cv_pathless_PYTHON + fi + ]) + + if test "$PYTHON" = :; then + dnl Run any user-specified action, or abort. + m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])]) + else + + dnl Query Python for its version number. Getting [:3] seems to be + dnl the best way to do this; it's what "site.py" does in the standard + dnl library. + + AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version], + [am_cv_python_version=`$PYTHON -c "import sys; print sys.version[[:3]]"`]) + AC_SUBST([PYTHON_VERSION], [$am_cv_python_version]) + + dnl Use the values of $prefix and $exec_prefix for the corresponding + dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made + dnl distinct variables so they can be overridden if need be. However, + dnl general consensus is that you shouldn't need this ability. + + AC_SUBST([PYTHON_PREFIX], ['${prefix}']) + AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}']) + + dnl At times (like when building shared libraries) you may want + dnl to know which OS platform Python thinks this is. + + AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform], + [am_cv_python_platform=`$PYTHON -c "import sys; print sys.platform"`]) + AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform]) + + + dnl Set up 4 directories: + + dnl pythondir -- where to install python scripts. This is the + dnl site-packages directory, not the python standard library + dnl directory like in previous automake betas. This behavior + dnl is more consistent with lispdir.m4 for example. + dnl Query distutils for this directory. distutils does not exist in + dnl Python 1.5, so we fall back to the hardcoded directory if it + dnl doesn't work. + AC_CACHE_CHECK([for $am_display_PYTHON script directory], + [am_cv_python_pythondir], + [am_cv_python_pythondir=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(0,0,prefix='$PYTHON_PREFIX')" 2>/dev/null || + echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"`]) + AC_SUBST([pythondir], [$am_cv_python_pythondir]) + + dnl pkgpythondir -- $PACKAGE directory under pythondir. Was + dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is + dnl more consistent with the rest of automake. + + AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE]) + + dnl pyexecdir -- directory for installing python extension modules + dnl (shared libraries) + dnl Query distutils for this directory. distutils does not exist in + dnl Python 1.5, so we fall back to the hardcoded directory if it + dnl doesn't work. + AC_CACHE_CHECK([for $am_display_PYTHON extension module directory], + [am_cv_python_pyexecdir], + [am_cv_python_pyexecdir=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(1,0,prefix='$PYTHON_EXEC_PREFIX')" 2>/dev/null || + echo "${PYTHON_EXEC_PREFIX}/lib/python${PYTHON_VERSION}/site-packages"`]) + AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir]) + + dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE) + + AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE]) + + dnl Run any user-specified action. + $2 + fi + +]) + + +# AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) +# --------------------------------------------------------------------------- +# Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION. +# Run ACTION-IF-FALSE otherwise. +# This test uses sys.hexversion instead of the string equivalent (first +# word of sys.version), in order to cope with versions such as 2.2c1. +# hexversion has been introduced in Python 1.5.2; it's probably not +# worth to support older versions (1.5.1 was released on October 31, 1998). +AC_DEFUN([AM_PYTHON_CHECK_VERSION], + [prog="import sys, string +# split strings by '.' and convert to numeric. Append some zeros +# because we need at least 4 digits for the hex conversion. +minver = map(int, string.split('$2', '.')) + [[0, 0, 0]] +minverhex = 0 +for i in xrange(0, 4): minverhex = (minverhex << 8) + minver[[i]] +sys.exit(sys.hexversion < minverhex)" + AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])]) diff --git a/share/aclocal-1.10/regex.m4 b/share/aclocal-1.10/regex.m4 new file mode 100644 index 00000000..c05bb381 --- /dev/null +++ b/share/aclocal-1.10/regex.m4 @@ -0,0 +1,53 @@ +## --------------------------------- ## -*- Autoconf -*- +## Check if --with-regex was given. ## +## --------------------------------- ## +# Copyright (C) 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 7 + +# AM_WITH_REGEX +# ------------- +# +# The idea is to distribute rx.[hc] and regex.[hc] together, for a +# while. The WITH_REGEX symbol is used to decide which of regex.h or +# rx.h should be included in the application. If `./configure +# --with-regex' is given (the default), the package will use gawk's +# regex. If `./configure --without-regex', a check is made to see if +# rx is already installed, as with newer Linux'es. If not found, the +# package will use the rx from the distribution. If found, the +# package will use the system's rx which, on Linux at least, will +# result in a smaller executable file. +# +# FIXME: This macro seems quite obsolete now since rx doesn't seem to +# be maintained, while regex is. +AC_DEFUN([AM_WITH_REGEX], +[AC_PREREQ(2.50)dnl +AC_LIBSOURCES([rx.h, rx.c, regex.c, regex.h])dnl +AC_MSG_CHECKING([which of GNU rx or gawk's regex is wanted]) +AC_ARG_WITH([regex], +[ --without-regex use GNU rx in lieu of gawk's regex for matching], + [test "$withval" = yes && am_with_regex=1], + [am_with_regex=1]) +if test -n "$am_with_regex"; then + AC_MSG_RESULT([regex]) + AC_DEFINE([WITH_REGEX], 1, [Define if using GNU regex]) + AC_CACHE_CHECK([for GNU regex in libc], [am_cv_gnu_regex], + [AC_TRY_LINK([], + [extern int re_max_failures; re_max_failures = 1], + [am_cv_gnu_regex=yes], + [am_cv_gnu_regex=no])]) + if test $am_cv_gnu_regex = no; then + AC_LIBOBJ([regex]) + fi +else + AC_MSG_RESULT([rx]) + AC_CHECK_FUNC([re_rx_search], , [AC_LIBOBJ([rx])]) +fi[]dnl +]) + +AU_DEFUN([fp_WITH_REGEX], [AM_WITH_REGEX]) diff --git a/share/aclocal-1.10/runlog.m4 b/share/aclocal-1.10/runlog.m4 new file mode 100644 index 00000000..c3608fbb --- /dev/null +++ b/share/aclocal-1.10/runlog.m4 @@ -0,0 +1,17 @@ +## -*- Autoconf -*- +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_RUN_LOG(COMMAND) +# ------------------- +# Run COMMAND, save the exit status in ac_status, and log it. +# (This has been adapted from Autoconf's _AC_RUN_LOG macro.) +AC_DEFUN([AM_RUN_LOG], +[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD + ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + (exit $ac_status); }]) diff --git a/share/aclocal-1.10/sanity.m4 b/share/aclocal-1.10/sanity.m4 new file mode 100644 index 00000000..2e76b10d --- /dev/null +++ b/share/aclocal-1.10/sanity.m4 @@ -0,0 +1,51 @@ +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) diff --git a/share/aclocal-1.10/strip.m4 b/share/aclocal-1.10/strip.m4 new file mode 100644 index 00000000..43435dcf --- /dev/null +++ b/share/aclocal-1.10/strip.m4 @@ -0,0 +1,28 @@ +## -*- Autoconf -*- +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) diff --git a/share/aclocal-1.10/substnot.m4 b/share/aclocal-1.10/substnot.m4 new file mode 100644 index 00000000..27d3f1fb --- /dev/null +++ b/share/aclocal-1.10/substnot.m4 @@ -0,0 +1,12 @@ +## -*- Autoconf -*- +# Copyright (C) 2006 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputing VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) diff --git a/share/aclocal-1.10/tar.m4 b/share/aclocal-1.10/tar.m4 new file mode 100644 index 00000000..a4a00ecf --- /dev/null +++ b/share/aclocal-1.10/tar.m4 @@ -0,0 +1,95 @@ +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of `v7', `ustar', or `pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR diff --git a/share/aclocal-1.10/upc.m4 b/share/aclocal-1.10/upc.m4 new file mode 100644 index 00000000..a819ea72 --- /dev/null +++ b/share/aclocal-1.10/upc.m4 @@ -0,0 +1,20 @@ +# Find a compiler for Unified Parallel C. -*- Autoconf -*- + +# Copyright (C) 2006 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +AC_DEFUN([AM_PROG_UPC], +[dnl We need OBJEXT and EXEEXT, but Autoconf doesn't offer any public +dnl macro to compute them. Use AC_PROG_CC instead. +AC_REQUIRE([AC_PROG_CC])dnl +AC_ARG_VAR([UPC], [Unified Parallel C compiler command])dnl +AC_ARG_VAR([UPCFLAGS], [Unified Parallel C compiler flags])dnl +AC_CHECK_TOOLS([UPC], [m4_default([$1], [upcc upc])], [:]) +if test "$UPC" = :; then + AC_MSG_ERROR([no Unified Parallel C compiler was found], [77]) +fi +_AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES([UPC])])dnl +]) diff --git a/share/autoconf/Autom4te/C4che.pm b/share/autoconf/Autom4te/C4che.pm new file mode 100644 index 00000000..bf8c6219 --- /dev/null +++ b/share/autoconf/Autom4te/C4che.pm @@ -0,0 +1,244 @@ +# autoconf -- create `configure' using m4 macros +# Copyright (C) 2003, 2006 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 2, 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, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + +package Autom4te::C4che; + +=head1 NAME + +Autom4te::C4che - a single m4 run request + +=head1 SYNOPSIS + + use Autom4te::C4che; + +=head1 DESCRIPTION + +This Perl module handles the cache of M4 runs used by autom4te. + +=cut + +use Data::Dumper; +use Autom4te::Request; +use Carp; +use strict; + +=over 4 + +=item @request + +List of requests. + +We cannot declare it "my" as the loading, performed via "do", would +refer to another scope, and @request would not be updated. It used to +work with "my" vars, and I do not know whether the current behavior +(5.6) is wanted or not. + +=cut + +use vars qw(@request); + +=item C<$req = Autom4te::C4che-Eretrieve (%attr)> + +Find a request with the same path and input. + +=cut + +sub retrieve($%) +{ + my ($self, %attr) = @_; + + foreach (@request) + { + # Same path. + next + if join ("\n", @{$_->path}) ne join ("\n", @{$attr{path}}); + + # Same inputs. + next + if join ("\n", @{$_->input}) ne join ("\n", @{$attr{input}}); + + # Found it. + return $_; + } + + return undef; +} + +=item C<$req = Autom4te::C4che-Eregister (%attr)> + +Create and register a request for these path and input. + +=cut + +# $REQUEST-OBJ +# register ($SELF, %ATTR) +# ----------------------- +# NEW should not be called directly. +# Private. +sub register ($%) +{ + my ($self, %attr) = @_; + + # path and input are the only ID for a request object. + my $obj = new Autom4te::Request ('path' => $attr{path}, + 'input' => $attr{input}); + push @request, $obj; + + # Assign an id for cache file. + $obj->id ("$#request"); + + return $obj; +} + + +=item C<$req = Autom4te::C4che-Erequest (%request)> + +Get (retrieve or create) a request for the path C<$request{path}> and +the input C<$request{input}>. + +=cut + +# $REQUEST-OBJ +# request($SELF, %REQUEST) +# ------------------------ +sub request ($%) +{ + my ($self, %request) = @_; + + my $req = + Autom4te::C4che->retrieve (%request) + || Autom4te::C4che->register (%request); + + # If there are new traces to produce, then we are not valid. + foreach (@{$request{'macro'}}) + { + if (! exists ${$req->macro}{$_}) + { + ${$req->macro}{$_} = 1; + $req->valid (0); + } + } + + # It would be great to have $REQ check that it is up to date wrt + # its dependencies, but that requires getting traces (to fetch the + # included files), which is out of the scope of Request (currently?). + + return $req; +} + + +=item C<$string = Autom4te::C4che-Emarshall ()> + +Serialize all the current requests. + +=cut + + +# marshall($SELF) +# --------------- +sub marshall ($) +{ + my ($caller) = @_; + my $res = ''; + + my $marshall = Data::Dumper->new ([\@request], [qw (*request)]); + $marshall->Indent(2)->Terse(0); + $res = $marshall->Dump . "\n"; + + return $res; +} + + +=item Csave ($file)> + +Save the cache in the C<$file> file object. + +=cut + +# SAVE ($FILE) +# ------------ +sub save ($$) +{ + my ($self, $file) = @_; + + confess "cannot save a single request\n" + if ref ($self); + + $file->seek (0, 0); + $file->truncate (0); + print $file + "# This file was generated.\n", + "# It contains the lists of macros which have been traced.\n", + "# It can be safely removed.\n", + "\n", + $self->marshall; +} + + +=item Cload ($file)> + +Load the cache from the C<$file> file object. + +=cut + +# LOAD ($FILE) +# ------------ +sub load ($$) +{ + my ($self, $file) = @_; + my $fname = $file->name; + + confess "cannot load a single request\n" + if ref ($self); + + my $contents = join "", $file->getlines; + + eval $contents; + + confess "cannot eval $fname: $@\n" if $@; +} + + +=head1 SEE ALSO + +L + +=head1 HISTORY + +Written by Akim Demaille EFE. + +=cut + +1; # for require + +### 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: diff --git a/share/autoconf/Autom4te/ChannelDefs.pm b/share/autoconf/Autom4te/ChannelDefs.pm new file mode 100644 index 00000000..ba94e245 --- /dev/null +++ b/share/autoconf/Autom4te/ChannelDefs.pm @@ -0,0 +1,390 @@ +# Copyright (C) 2002, 2003, 2006 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 2, 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, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + +package Autom4te::ChannelDefs; + +use Autom4te::Channels; + +=head1 NAME + +Autom4te::ChannelDefs - channel definitions for Automake and helper functions + +=head1 SYNOPSIS + + use Autom4te::ChannelDefs; + + print Autom4te::ChannelDefs::usage (), "\n"; + prog_error ($MESSAGE, [%OPTIONS]); + error ($WHERE, $MESSAGE, [%OPTIONS]); + error ($MESSAGE); + fatal ($WHERE, $MESSAGE, [%OPTIONS]); + fatal ($MESSAGE); + verb ($MESSAGE, [%OPTIONS]); + switch_warning ($CATEGORY); + parse_WARNINGS (); + parse_warnings ($OPTION, $ARGUMENT); + Autom4te::ChannelDefs::set_strictness ($STRICTNESS_NAME); + +=head1 DESCRIPTION + +This packages defines channels that can be used in Automake to +output diagnostics and other messages (via C). It also defines +some helper function to enable or disable these channels, and some +shorthand function to output on specific channels. + +=cut + +use 5.005; +use strict; +use Exporter; + +use vars qw (@ISA @EXPORT); + +@ISA = qw (Exporter); +@EXPORT = qw (&prog_error &error &fatal &verb + &switch_warning &parse_WARNINGS &parse_warnings); + +=head2 CHANNELS + +The following channels can be used as the first argument of +C. For some of them we list a shorthand +function that makes the code more readable. + +=over 4 + +=item C + +Fatal errors. Use C<&fatal> to send messages over this channel. + +=item C + +Common errors. Use C<&error> to send messages over this channel. + +=item C + +Errors related to GNU Standards. + +=item C + +Errors related to GNU Standards that should be warnings in "foreign" mode. + +=item C + +Errors related to GNITS Standards (silent by default). + +=item C + +Internal errors. Use C<&prog_error> to send messages over this channel. + +=item C + +Constructs compromising the cross-compilation of the package. + +=item C + +Warnings related to GNU Coding Standards. + +=item C + +Warnings about obsolete features (silent by default). + +=item C + +Warnings about user redefinitions of Automake rules or +variables (silent by default). + +=item C + +Warnings about non-portable constructs. + +=item C + +Warnings about weird syntax, unused variables, typos... + +=item C + +Warnings about unsupported (or mis-supported) features. + +=item C + +Messages output in C<--verbose> mode. Use C<&verb> to send such messages. + +=item C + +Informative messages. + +=back + +=cut + +# Initialize our list of error/warning channels. +# Do not forget to update &usage and the manual +# if you add or change a warning channel. + +register_channel 'fatal', type => 'fatal'; +register_channel 'error', type => 'error'; +register_channel 'error-gnu', type => 'error'; +register_channel 'error-gnu/warn', type => 'error'; +register_channel 'error-gnits', type => 'error', silent => 1; +register_channel 'automake', type => 'fatal', backtrace => 1, + header => ("####################\n" . + "## Internal Error ##\n" . + "####################\n"), + footer => "\nPlease contact ."; + +register_channel 'cross', type => 'warning', silent => 1; +register_channel 'gnu', type => 'warning'; +register_channel 'obsolete', type => 'warning', silent => 1; +register_channel 'override', type => 'warning', silent => 1; +register_channel 'portability', type => 'warning', silent => 1; +register_channel 'syntax', type => 'warning'; +register_channel 'unsupported', type => 'warning'; + +register_channel 'verb', type => 'debug', silent => 1; +register_channel 'note', type => 'debug', silent => 0; + +=head2 FUNCTIONS + +=over 4 + +=item C + +Return the warning category descriptions. + +=cut + +sub usage () +{ + return "Warning categories include: + `cross' cross compilation issues + `gnu' GNU coding standards (default in gnu and gnits modes) + `obsolete' obsolete features or constructions + `override' user redefinitions of Automake rules or variables + `portability' portability issues (default in gnu and gnits modes) + `syntax' dubious syntactic constructs (default) + `unsupported' unsupported or incomplete features (default) + `all' all the warnings + `no-CATEGORY' turn off warnings in CATEGORY + `none' turn off all the warnings + `error' treat warnings as errors"; +} + +=item C + +Signal a programming error (on channel C), +display C<$MESSAGE>, and exit 1. + +=cut + +sub prog_error ($;%) +{ + my ($msg, %opts) = @_; + msg 'automake', '', $msg, %opts; +} + +=item C + +=item C + +Uncategorized errors. + +=cut + +sub error ($;$%) +{ + my ($where, $msg, %opts) = @_; + msg ('error', $where, $msg, %opts); +} + +=item C + +=item C + +Fatal errors. + +=cut + +sub fatal ($;$%) +{ + my ($where, $msg, %opts) = @_; + msg ('fatal', $where, $msg, %opts); +} + +=item C + +C<--verbose> messages. + +=cut + +sub verb ($;%) +{ + my ($msg, %opts) = @_; + msg 'verb', '', $msg, %opts; +} + +=item C + +If C<$CATEGORY> is C, turn on channel C. +If it is C, turn C off. +Else handle C and C for completeness. + +=cut + +sub switch_warning ($) +{ + my ($cat) = @_; + my $has_no = 0; + + if ($cat =~ /^no-(.*)$/) + { + $cat = $1; + $has_no = 1; + } + + if ($cat eq 'all') + { + setup_channel_type 'warning', silent => $has_no; + } + elsif ($cat eq 'none') + { + setup_channel_type 'warning', silent => ! $has_no; + } + elsif ($cat eq 'error') + { + $warnings_are_errors = ! $has_no; + # Set exit code if Perl warns about something + # (like uninitialized variables). + $SIG{"__WARN__"} = + $has_no ? 'DEFAULT' : sub { print STDERR @_; $exit_code = 1; }; + } + elsif (channel_type ($cat) eq 'warning') + { + setup_channel $cat, silent => $has_no; + } + else + { + return 1; + } + return 0; +} + +=item C + +Parse the WARNINGS environment variable. + +=cut + +sub parse_WARNINGS () +{ + if (exists $ENV{'WARNINGS'}) + { + # Ignore unknown categories. This is required because WARNINGS + # should be honored by many tools. + switch_warning $_ foreach (split (',', $ENV{'WARNINGS'})); + } +} + +=item C + +Parse the argument of C<--warning=CATEGORY> or C<-WCATEGORY>. + +C<$OPTIONS> is C<"--warning"> or C<"-W">, C<@ARGUMENT> is a list of +C. + +This can be used as a argument to C. + +=cut + +sub parse_warnings ($@) +{ + my ($opt, @categories) = @_; + + foreach my $cat (map { split ',' } @categories) + { + msg 'unsupported', "unknown warning category `$cat'" + if switch_warning $cat; + } +} + +=item C + +Configure channels for strictness C<$STRICTNESS_NAME>. + +=cut + +sub set_strictness ($) +{ + my ($name) = @_; + + if ($name eq 'gnu') + { + setup_channel 'error-gnu', silent => 0; + setup_channel 'error-gnu/warn', silent => 0, type => 'error'; + setup_channel 'error-gnits', silent => 1; + setup_channel 'portability', silent => 0; + setup_channel 'gnu', silent => 0; + } + elsif ($name eq 'gnits') + { + setup_channel 'error-gnu', silent => 0; + setup_channel 'error-gnu/warn', silent => 0, type => 'error'; + setup_channel 'error-gnits', silent => 0; + setup_channel 'portability', silent => 0; + setup_channel 'gnu', silent => 0; + } + elsif ($name eq 'foreign') + { + setup_channel 'error-gnu', silent => 1; + setup_channel 'error-gnu/warn', silent => 0, type => 'warning'; + setup_channel 'error-gnits', silent => 1; + setup_channel 'portability', silent => 1; + setup_channel 'gnu', silent => 1; + } + else + { + prog_error "level `$name' not recognized\n"; + } +} + +=back + +=head1 SEE ALSO + +L + +=head1 HISTORY + +Written by Alexandre Duret-Lutz EFE. + +=cut + +### 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: diff --git a/share/autoconf/Autom4te/Channels.pm b/share/autoconf/Autom4te/Channels.pm new file mode 100644 index 00000000..1d4d824b --- /dev/null +++ b/share/autoconf/Autom4te/Channels.pm @@ -0,0 +1,709 @@ +# Copyright (C) 2002, 2004, 2006 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 2, 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, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + +############################################################### +# The main copy of this file is in Automake's CVS repository. # +# Updates should be sent to automake-patches@gnu.org. # +############################################################### + +package Autom4te::Channels; + +=head1 NAME + +Autom4te::Channels - support functions for error and warning management + +=head1 SYNOPSIS + + use Autom4te::Channels; + + # Register a channel to output warnings about unused variables. + register_channel 'unused', type => 'warning'; + + # Register a channel for system errors. + register_channel 'system', type => 'error', exit_code => 4; + + # Output a message on channel 'unused'. + msg 'unused', "$file:$line", "unused variable `$var'"; + + # Make the 'unused' channel silent. + setup_channel 'unused', silent => 1; + + # Turn on all channels of type 'warning'. + setup_channel_type 'warning', silent => 0; + + # Treat all warnings as errors. + $warnings_are_errors = 1; + + # Exit with the greatest exit code encountered so far. + exit $exit_code; + +=head1 DESCRIPTION + +This perl module provides support functions for handling diagnostic +channels in programs. Channels can be registered to convey fatal, +error, warning, or debug messages. Each channel has various options +(e.g. is the channel silent, should duplicate messages be removed, +etc.) that can also be overridden on a per-message basis. + +=cut + +use 5.005; +use strict; +use Exporter; +use Carp; +use File::Basename; + +use vars qw (@ISA @EXPORT %channels $me); + +@ISA = qw (Exporter); +@EXPORT = qw ($exit_code $warnings_are_errors + &reset_local_duplicates &reset_global_duplicates + ®ister_channel &msg &exists_channel &channel_type + &setup_channel &setup_channel_type + &dup_channel_setup &drop_channel_setup + &buffer_messages &flush_messages + US_GLOBAL US_LOCAL + UP_NONE UP_TEXT UP_LOC_TEXT); + +$me = basename $0; + +=head2 Global Variables + +=over 4 + +=item C<$exit_code> + +The greatest exit code seen so far. C<$exit_code> is updated from +the C options of C and C channels. + +=cut + +use vars qw ($exit_code); +$exit_code = 0; + +=item C<$warnings_are_errors> + +Set this variable to 1 if warning messages should be treated as +errors (i.e. if they should update C<$exit_code>). + +=cut + +use vars qw ($warnings_are_errors); +$warnings_are_errors = 0; + +=back + +=head2 Constants + +=over 4 + +=item C, C, C + +Possible values for the C options. This selects the part +of the message that should be considered when filtering out duplicates. +If C is used, the location and the explanation message +are used for filtering. If C is used, only the explanation +message is used (so the same message will be filtered out if it appears +at different locations). C means that duplicate messages +should be output. + +=cut + +use constant UP_NONE => 0; +use constant UP_TEXT => 1; +use constant UP_LOC_TEXT => 2; + +=item C, C + +Possible values for the C options. +Use C for error messages that should be printed only +once during the execution of the program, C for message that +should be printed only once per file. (Actually, C does not +do this now when files are changed, it relies on you calling +C when this happens.) + +=cut + +# possible values for uniq_scope +use constant US_LOCAL => 0; +use constant US_GLOBAL => 1; + +=back + +=head2 Options + +Channels accept the options described below. These options can be +passed as a hash to the C, C, and C +functions. The possible keys, with their default value are: + +=over + +=item C 'warning'> + +The type of the channel. One of C<'debug'>, C<'warning'>, C<'error'>, or +C<'fatal'>. Fatal messages abort the program when they are output. +Error messages update the exit status. Debug and warning messages are +harmless, except that warnings can be treated as errors of +C<$warnings_are_errors> is set. + +=item C 1> + +The value to update C<$exit_code> with when a fatal or error message +is emitted. C<$exit_code> is also updated for warnings output +when @<$warnings_are_errors> is set. + +=item C \*STDERR> + +The file where the error should be output. + +=item C 0> + +Whether the channel should be silent. Use this do disable a +category of warning, for instance. + +=item C UP_LOC_TEXT> + +The part of the message subject to duplicate filtering. See the +documentation for the C, C, and C +constants above. + +C can also be set to an arbitrary string that will be used +instead of the message when considering duplicates. + +=item C US_LOCAL> + +The scope of duplicate filtering. See the documentation for the +C, and C constants above. + +=item C

''> + +A string to prepend to each message emitted through this channel. + +=item C