2002-02-23 Per Bothner <per@bothner.com>
[platform/upstream/automake.git] / Makefile.am
index a74b7d8..473b00c 100644 (file)
@@ -1,53 +1,60 @@
 ## Process this file with automake to create Makefile.in
 
-AUTOMAKE_OPTIONS = gnits 1.4
-MAINT_CHARSET = latin1
+## Makefile for Automake.
+
+## Copyright 1995, 1996, 1997, 1998, 1999, 2001 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., 59 Temple Place - Suite 330, Boston, MA
+## 02111-1307, USA.
 
 ## We need `.' in SUBDIRS because we want `check' to build `.' before
 ## tests.
-SUBDIRS = . m4 tests
+SUBDIRS = . m4 lib tests
 
 bin_SCRIPTS = automake aclocal
 info_TEXINFOS = automake.texi
 
-amfiles = clean-hdr.am clean-kr.am clean.am comp-vars.am compile.am \
-data-clean.am data.am dejagnu.am depend.am depend2.am dist-vars.am \
-footer.am header-vars.am header.am java-clean.am java.am kr-extra.am \
-library.am libs-clean.am libs.am libtool.am lisp-clean.am lisp.am \
-ltlib-clean.am ltlib.am ltlibrary.am mans-vars.am mans.am multilib.am \
-program.am progs-clean.am progs.am remake-hdr.am remake.am scripts.am \
-subdirs.am tags-clean.am tags.am texi-vers.am texinfos.am
-
-dist_pkgdata_DATA = COPYING INSTALL texinfo.tex ansi2knr.c ansi2knr.1 \
-$(amfiles)
-
-## These must all be executable when installed.  However, if we use
-## _SCRIPTS, then the program transform will be applied, which is not
-## what we want.  So we make them executable by hand.
-scriptdir = $(pkgdatadir)
-dist_script_DATA = config.guess config.sub install-sh mdate-sh missing \
-mkinstalldirs elisp-comp ylwrap acinstall
-
-install-data-hook:
-       @$(POST_INSTALL)
-       @for prog in $(dist_script_DATA); do \
-         echo " chmod +x $(DESTDIR)$(scriptdir)/$$prog"; \
-         chmod +x $(DESTDIR)$(scriptdir)/$$prog; \
-       done
+
+TAGS_FILES = automake.in aclocal.in
 
 # The following requires a fixed version of the Emacs 19.30 etags.
-ETAGS_ARGS = automake.in aclocal.in --lang=none \
- --regex='/^@node[ \t]+\([^,]+\)/\1/' automake.texi
-TAGS_DEPENDENCIES = automake.in aclocal.in automake.texi
-
-## `test -x' is not portable.  So we use Perl instead.  If Perl
-## doesn't exist, then this test is meaningless anyway.
-installcheck-local:
-       for file in $(dist_script_DATA); do \
-         $(PERL) -e "exit ! -x '$(pkgdatadir)/$$file';" || exit 1; \
+ETAGS_ARGS = --lang=none \
+ --regex='/^@node[ \t]+\([^,]+\)/\1/' $(srcdir)/automake.texi
+TAGS_DEPENDENCIES = automake.texi
+
+EXTRA_DIST = ChangeLog.1996 ChangeLog.1998 ChangeLog.2000
+
+## Make versioned links.  We only run the transform on the root name;
+## then we make a versioned link with the transformed base name.  This
+## seemed like the most reasonable approach.
+install-exec-hook:
+       @$(POST_INSTALL)
+       @for p in $(bin_SCRIPTS); do \
+         f="`echo $$p|sed '$(transform)'`"; \
+         fv="$$f-$(APIVERSION)"; \
+         rm -f $(DESTDIR)$(bindir)/$$fv; \
+         echo " ln $(DESTDIR)$(bindir)/$$f $(DESTDIR)$(bindir)/$$fv"; \
+         ln $(DESTDIR)$(bindir)/$$f $(DESTDIR)$(bindir)/$$fv; \
        done
 
-EXTRA_DIST = ChangeLog.1996 ChangeLog.1998
+uninstall-hook:
+       @for p in $(bin_SCRIPTS); do \
+         f="`echo $$p|sed '$(transform)'`"; \
+         fv="$$f-$(APIVERSION)"; \
+         rm -f $(DESTDIR)$(bindir)/$$fv; \
+       done
 
 ################################################################
 ##
@@ -55,57 +62,93 @@ EXTRA_DIST = ChangeLog.1996 ChangeLog.1998
 ## to anybody else
 ##
 
-# Run the test suite using Perl 4.
-perl4-check: automake aclocal
-       @if $(SHELL) -c 'perl4.036 -v' > /dev/null 2>&1; then \
-         $(MAKE) PERL=perl4.036 check; \
-       else :; fi
-
 # Some simple checks, and then ordinary check.  These are only really
 # guaranteed to work on my machine.
 maintainer-check: automake aclocal
 ## This check avoids accidental configure substitutions in the source.
 ## There are exactly 7 lines that should be modified.  This works out
 ## to 22 lines of diffs.
-       @if test `diff $(srcdir)/automake.in automake | wc -l` -ne 22; then \
+       @if test `diff $(srcdir)/automake.in automake | wc -l` -ne 28; then \
          echo "found too many diffs between automake.in and automake"; 1>&2; \
          diff -c $(srcdir)/automake.in automake; \
          exit 1; \
        fi
 ## Syntax check with default Perl (on my machine, Perl 5).
-       $(PERL) -c -w automake
-       $(PERL) -c -w aclocal
+       perllibdir=$(srcdir)/lib $(PERL) -c -w automake
+       perllibdir=$(srcdir)/lib $(PERL) -c -w aclocal
 ## expect no instances of '${...}'.  However, $${...} is ok, since that
 ## is a shell construct, not a Makefile construct.
 ## The backslash in `$${' is needed for some versions of bash.
-       @if test `fgrep '\$${' $(srcdir)/[a-z]*.am | fgrep -v '$$$$' | wc -l` -ne 0; then \
-         echo "found too many uses of '\$${'" 1>&2; \
+       @if fgrep '\$${' $(srcdir)/lib/am/[a-z]*.am | \
+              fgrep -v '$$$$'; then \
+         echo "Found too many uses of '\$${' in the lines above." 1>&2; \
+         exit 1;                               \
+       else :; fi
+## Make sure `rm' is called with `-f'.
+       @if egrep '\<rm ([^-]|\-[^f ]*\>)' \
+                 $(srcdir)/lib/am/[a-z]*.am $(srcdir)/tests/*.test | \
+             fgrep -v '##'; then \
+         echo "Suspicious 'rm' invocation." 1>&2; \
          exit 1;                               \
        else :; fi
 ## Make sure all invocations of mkinstalldirs are correct.
-       @if test `fgrep 'mkinstalldirs' $(srcdir)/[a-z]*.am | fgrep -v '$$(mkinstalldirs)' | wc -l` -ne 0; then \
-         echo "found incorrect use of mkinstalldirs" 1>&2; \
+       @if fgrep -n 'mkinstalldirs' $(srcdir)/lib/am/[a-z]*.am | \
+             fgrep -v '$$(mkinstalldirs)'; then \
+         echo "Found incorrect use of mkinstalldirs in the lines above" 1>&2; \
          exit 1; \
        else :; fi
-## Another syntax check, this time with Perl 4, if it exists.
-       @if $(SHELL) -c 'perl4.036 -v' >/dev/null 2>&1; then \
-         perl4.036 -c -w automake; \
-         perl4.036 -c -w aclocal; \
-       else :; fi
-## We never want to use "undef", only "delete".
-       @if grep undef $(srcdir)/automake.in > /dev/null 2>&1; then \
+## We never want to use "undef", only "delete", but for $/.
+       @if grep -n -w 'undef ' $(srcdir)/automake.in | \
+             fgrep -v 'undef $$/'; then \
          echo "Found undef in automake.in; use delete instead" 1>&2; \
          exit 1; \
        fi
 ## We never want split (/ /,...), only split (' ', ...).
-       @if fgrep 'split (/ /' $(srcdir)/automake.in > /dev/null 2>&1; then \
-         echo "Found bad split in automake.in" 1>&2; \
+       @if fgrep -n 'split (/ /' $(srcdir)/automake.in; then \
+         echo "Found bad split in the lines above." 1>&2; \
+         exit 1; \
+       fi
+## Look for cd within backquotes
+       @if grep -n '^[^#]*` *cd ' $(srcdir)/automake.in \
+             $(srcdir)/lib/am/*.am; then \
+         echo "Consider using $$$$(am__cd) in the line above." 1>&2; \
+         exit 1; \
+       fi
+## Using @_ in a scalar context is most probably a programming error.
+       @if grep -Hn '[^) ] *= *@_' $(srcdir)/automake.in; then \
+         echo "Using @_ in a scalar context in the lines above." 1>&2; \
+         exit 1; \
+       fi
+## Forbid using parens with `local' to ease counting.
+       @if grep '^[ \t]*local *(' $(srcdir)/automake.in; then \
+         echo "Don't use \`local' with parens: use several \`local' above." >&2; \
+         exit 1; \
+       fi
+## Up to now we manage to limit to 1 use of local, but for `local $_;'.
+       @locals=`grep -v '^[ \t]*local \$$_;' $(srcdir)/automake.in | \
+               grep -c '^[ \t]*local [^*]'`; \
+       case $$locals in \
+         [0] ) \
+           echo "Wow, congrats!  There are no \`local' now!." >&2; \
+           echo "Please update Makefile.am (maintainer-check)." >&2; \
+           exit 1; \
+         ;; \
+         1 ) ;; \
+         * ) \
+           echo "Too many \`local'!  Are you sure you need $$locals of them?" >&2; \
+           echo "Up to now 1 was enough." >&2; \
+           exit 1; \
+         ;; \
+       esac
+## Don't let AMDEP_TRUE substitution appear in automake.in.
+       @if grep '@AMDEP''_TRUE@' $(srcdir)/automake.in; then \
+         echo "Don't put AMDEP_TRUE substitution in automake.in" 1>&2; \
          exit 1; \
        fi
 
 # Tag before making distribution.  Also, don't make a distribution if
 # checks fail.  Also, make sure the NEWS file is up-to-date.
-cvs-dist: maintainer-check perl4-check distcheck
+cvs-dist: maintainer-check distcheck
        @if sed 1q $(srcdir)/NEWS | grep -e "$(VERSION)" > /dev/null; then :; else \
          echo "NEWS not updated; not releasing" 1>&2; \
          exit 1;                               \
@@ -129,10 +172,38 @@ path-check: distdir
 ## of files on stdin, at least.
          find . -print | xargs pathchk -p); \
          status=$$?; \
-         rm -rf $(distdir); \
+         chmod -R a+w $(distdir) > /dev/null 2>&1; rm -rf $(distdir); \
          exit $$status
 
-## Just get the .am files into TAGS.  We don't really care too much if
-## any interesting tags show up.
-ETAGS_ARGS = $(amfiles)
-TAGS_DEPENDENCIES = $(ETAGS_ARGS)
+## Program to use to fetch files.
+WGET = wget
+
+## Files that we fetch and which we compare against.
+## FIXME should be a lot more here
+FETCHFILES = config.guess config.sub texinfo.tex Automake/XFile.pm
+
+## Fetch the latest versions of files we care about.
+fetch:
+       rm -rf Fetchdir > /dev/null 2>&1
+       mkdir Fetchdir; mkdir Fetchdir/Automake
+## If a get fails then that is a problem.
+       (cd Fetchdir && \
+       $(WGET) ftp://ftp.gnu.org/gnu/config/config.guess; \
+       $(WGET) ftp://ftp.gnu.org/gnu/config/config.sub; \
+       $(WGET) ftp://ftp.gnu.org/gnu/texinfo/texinfo.tex; \
+       $(WGET) http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/autoconf/autoconf/lib/Autom4te/XFile.pm?content-type=text/plain -O Automake/XFile.pm)
+       perl -pi -e 's/Autom4te::/Automake::/g' Fetchdir/Automake/XFile.pm
+## Don't exit after test because we want to give as many errors as
+## possible.
+       @stat=0; for file in $(FETCHFILES); do \
+         if diff -u $(srcdir)/lib/$$file Fetchdir/$$file \
+                 >>Fetchdir/update.patch 2>/dev/null; then :; \
+         else \
+           stat=1; \
+           echo "Updating $(srcdir)/lib/$$file..."; \
+           cp Fetchdir/$$file $(srcdir)/lib/$$file; \
+         fi; \
+       done; \
+       test $$stat = 1 && \
+         echo "See Fetchdir/update.patch for a log of the changes."; \
+       exit $$stat