automake-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Automake-commit] [SCM] GNU Automake branch, master, updated. v1.12.1-12


From: Stefano Lattarini
Subject: [Automake-commit] [SCM] GNU Automake branch, master, updated. v1.12.1-123-g9465eb2
Date: Fri, 22 Jun 2012 22:41:40 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Automake".

http://git.sv.gnu.org/gitweb/?p=automake.git;a=commitdiff;h=9465eb2651d9af30519882c4b583acc8ce91b8bb

The branch, master has been updated
       via  9465eb2651d9af30519882c4b583acc8ce91b8bb (commit)
       via  a22717dffe37f30ef2ad2c355b68c9b3b5e4b8c7 (commit)
      from  edbcd8f1948b35f956bba1586d7cc2e628b98338 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 9465eb2651d9af30519882c4b583acc8ce91b8bb
Merge: edbcd8f a22717d
Author: Stefano Lattarini <address@hidden>
Date:   Sat Jun 23 00:32:30 2012 +0200

    Merge branch 'missing-not-touch-just-warn'
    
    * missing-not-touch-just-warn:
      missing: do not touch timestamps; only warn for out-of-date files
    
    Signed-off-by: Stefano Lattarini <address@hidden>

commit a22717dffe37f30ef2ad2c355b68c9b3b5e4b8c7
Author: Stefano Lattarini <address@hidden>
Date:   Fri Jun 15 11:13:00 2012 +0200

    missing: do not touch timestamps; only warn for out-of-date files
    
    Before this change, the missing script had a twofold role:
    
      - it warned the user if some required maintainer tools was missing,
        or too old;
    
      - in such a case, it tried to "fix" the timestamp of the files that
        should have been rebuilt by that tool (without actually updating
        the file contents, of course), to allow the build to continue.
    
    The second capability used to be quite useful in the days when most
    projects committed files generated by maintainer-only tools in their
    VCS repository (today the trend is not to keep such generated files
    VCS-committed anymore).  In such a setup, the "timestamp-fixing"
    capability of 'missing' was quite useful, in that it allowed users
    lacking some required maintainer tool to build from a VCS checkout
    in the face of skewed timestamps (as could have been caused by
    "cvs update" or "git checkout").
    
    But then, when the automatic remake rules kicked in due to the
    generated files being *actually out-of-date* (e.g., because the user
    had modified 'configure.ac' but lacked a modern-enough autoconf to
    rebuild it), that behaviour of 'missing' caused the same problem that
    plagued AM_MAINTAINER_MODE; i.e., the user would get non-dependable
    builds and inconsistent statuses of the build tree -- changes to
    source files don't reflect on generated files, and this can be very
    confusing and cause hard-to-spot errors).
    
    So we now believe that the best approach to deal with timestamp-related
    issues is not to have 'missing' to "automagically" try to resolve
    them (with all the risk and brittleness entailed), but rather to
    suggest those projects still keeping generated files committed in their
    VCS to provide a proper (say) 'fix-timestamp.sh' script that touches
    the timestamp of the checked-out files, to ensure no spurious rebuild
    will be triggered.  As a bonus, such a script can be more aware of the
    particularities, nooks and corner cases of a project, and thus more
    reliable than the old 'missing' script.
    
    An example of this approach is offered by GNU awk (release 4.0.1, Git
    tag 'gawk-4.0.1', commit b85b04e8).  The GNU awk maintainers commit
    the Autotools-generated files (configure, Makefile.in, etc.) and other
    generated in the project's Git repository, but offer a useful script
    'bootstrap.sh' that fixes the timestamps of those files, to ensure no
    useless remake is triggered in a freshly cloned repository:
    
        #! /bin/sh
        # bootstrap.sh --- touch relevant files to avoid out-of-date issues
        #                  in Git sandboxes
        touch aclocal.m4
        find awklib -type f -print | xargs touch
        sleep 1
        touch configure
        sleep 2
        touch configh.in
        sleep 1
        touch test/Maketests
        find . -name Makefile.in -print | xargs touch
        touch doc/*.info
        touch po/*.gmo
        touch po/stamp-po
        touch awkgram.c
        touch command.c
        touch version.c
    
    A similar, simplified script is also reported as an example in the
    manual.
    
    * NEWS: Update.
    * doc/automake.texi (Auxiliary Programs, maintainer-mod): Update.
    (CVS): Do not suggest that 'missing' can "automagically" fix botched
    timestamp due to a "cvs update"; this isn't true anymore.  Give an
    example of a custom 'fix-timestamp.sh' script that can be used to
    obtain the same effect (in a slightly more laborious but also more
    explicit and less brittle way).  Fix some minor typos and improper
    wordings while we are at it.
    * lib/missing: Basically rewritten to implement the new semantics.
    As a side effect (one of the several), the '--run' option is no more
    required nor recognized.
    * m4/missing.m4 (AM_MISSING_HAS_RUN): Enhance the test on '$MISSING'
    to ensure it actually provides the new semantics (by trying the new
    "witness" option '--is-lightweight').
    * lib/am/distdir.am (distdir): No need anymore to check for "bad"
    distributed man pages that were actually dummy stubs generated by
    the 'missing' script.
    * t/missing4.sh: Rename ...
    * t/remake-aclocal-version-mismatch.sh: ... like this.
    * t/missing2.sh: Rename ...
    * t/missing-version-mismatch.sh: ... like this, and adjust to the
    new semantics.
    * t/missing3.sh: Adjust to the new semantics.
    * t/man4.sh: Remove as obsolete.
    * t/missing.sh: Likewise.
    * t/missing5.sh: Likewise.
    * t/txinfo30.sh: Likewise.
    * t/man6.sh: Adjust grepping checks.
    * t/remake6.sh: Likewise.
    * t/list-of-tests.mk: Adjust.
    
    Signed-off-by: Stefano Lattarini <address@hidden>

-----------------------------------------------------------------------

Summary of changes:
 NEWS                                               |   15 ++
 doc/automake.texi                                  |   69 +++++--
 lib/am/distdir.am                                  |   26 ---
 lib/missing                                        |  208 +++++---------------
 m4/missing.m4                                      |   10 +-
 ...ssing6.sh => aclocal-autoconf-version-check.sh} |    0
 t/list-of-tests.mk                                 |   10 +-
 t/man4.sh                                          |  105 ----------
 t/man6.sh                                          |    4 +-
 t/{missing2.sh => missing-version-mismatch.sh}     |   54 +++---
 t/missing.sh                                       |   66 ------
 t/missing3.sh                                      |   43 ++---
 t/missing5.sh                                      |   64 ------
 ...sing4.sh => remake-aclocal-version-mismatch.sh} |    0
 t/remake6.sh                                       |    2 +-
 t/txinfo30.sh                                      |   63 ------
 16 files changed, 163 insertions(+), 576 deletions(-)
 rename t/{missing6.sh => aclocal-autoconf-version-check.sh} (100%)
 delete mode 100755 t/man4.sh
 rename t/{missing2.sh => missing-version-mismatch.sh} (53%)
 delete mode 100755 t/missing.sh
 delete mode 100755 t/missing5.sh
 rename t/{missing4.sh => remake-aclocal-version-mismatch.sh} (100%)
 delete mode 100755 t/txinfo30.sh

diff --git a/NEWS b/NEWS
index 6df5fcd..54acc7a 100644
--- a/NEWS
+++ b/NEWS
@@ -66,6 +66,21 @@ New in 1.13:
     and texi2pdf around without cluttering the build directory, and to
     make it possible to run the "dvi" and "pdf" recipes in parallel.
 
+* Automatic remake rules and 'missing' script:
+
+  - The 'missing' script does not try anymore to update the timestamp
+    of out-of-date files that require a maintainer-specific tool to be
+    remade, in case the user lacks such a tool (or has a too-old version
+    of it).  It just give a useful warning, and in some cases also a tip
+    about how to obtain such a tool.
+
+  - The missing script has thus become useless as a (poor) way to work
+    around the sketched-timestamps issues that can happen for projects
+    that keep generated files committed in their VCS repository.  Such
+    projects are now encouraged to write a custom "fix-timestamps.sh"
+    script to avoid such issues; a simple example is provided in the
+    "CVS and generated files" chapter of the automake manual.
+
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 New in 1.12.2:
diff --git a/doc/automake.texi b/doc/automake.texi
index 12c4c05..73dceab 100644
--- a/doc/automake.texi
+++ b/doc/automake.texi
@@ -2294,9 +2294,9 @@ a file and prints some date information about it.
 
 @item missing
 This wraps a number of programs that are typically only required by
-maintainers.  If the program in question doesn't exist,
address@hidden prints an informative warning and attempts to fix
-things so that the build can continue.
+maintainers.  If the program in question doesn't exist, or seems to old,
address@hidden will print an informative warning before failing out,
+to provide the user with more context and information.
 
 @item mkinstalldirs
 This script used to be a wrapper around @samp{mkdir -p}, which is not
@@ -11498,12 +11498,12 @@ lists.
 
 Packages made with Autoconf and Automake ship with some generated
 files like @file{configure} or @file{Makefile.in}.  These files were
-generated on the developer's host and are distributed so that
+generated on the developer's machine and are distributed so that
 end-users do not have to install the maintainer tools required to
 rebuild them.  Other generated files like Lex scanners, Yacc parsers,
 or Info documentation, are usually distributed on similar grounds.
 
-Automake outputs rules in @file{Makefile}s to rebuild these files.  For
+Automake output rules in @file{Makefile}s to rebuild these files.  For
 instance, @command{make} will run @command{autoconf} to rebuild
 @file{configure} whenever @file{configure.ac} is changed.  This makes
 development safer by ensuring a @file{configure} is never out-of-date
@@ -11566,10 +11566,41 @@ If users use @command{cvs update} to update their 
copy, instead of
 inaccurate.  Some rebuild rules will be triggered and attempt to
 run developer tools such as @command{autoconf} or @command{automake}.
 
-Actually, calls to such tools are all wrapped into a call to the
address@hidden script discussed later (@pxref{maintainer-mode}).
address@hidden will take care of fixing the timestamps when these
-tools are not installed, so that the build can continue.
+Calls to such tools are all wrapped into a call to the @command{missing}
+script discussed later (@pxref{maintainer-mode}), so that the user will
+see more descriptive warnings about missing or out-of-date tools, and
+possible suggestions about how to obtain them, rather than just some
+``command not found'' error, or (worse) some obscure message from some
+older version of the required tool they happen to have installed.
+
+Maintainers interested in keeping their package buildable from a CVS
+checkout even for those users that lack maintainer-specific tools might
+want to provide an helper script (or to enhance their existing bootstrap
+script) to fix the timestamps after a
address@hidden update} or a @command{git checkout}, to prevent spurious
+rebuilds.  In case of a project committing the Autotools-generated
+files, as well as the generated @file{.info} files, such script might
+look something like this:
+
address@hidden
+#!/bin/sh
+# fix-timestamp.sh: prevents useless rebuilds after "cvs update"
+sleep 1
+# aclocal-generated aclocal.m4 depends on locally-installed
+# '.m4' macro files, as well as on 'configure.ac'
+touch aclocal.m4
+sleep 1
+# autoconf-generated configure depends on aclocal.m4 and on
+# configure.ac
+configure config.h.in
+# so does autoheader-generated config.h.in
+configure config.h.in
+# and all the automake-generated Makefile.in files
+touch `find . -name Makefile.in -print`
+# finally, the makeinfo-generated '.info' files depend on the
+# corresponding '.texi' files
+touch doc/*.info
address@hidden smallexample
 
 @item
 In distributed development, developers are likely to have different
@@ -11666,20 +11697,20 @@ tools shouldn't be required during a user build and 
they are not
 checked for in @file{configure}.
 
 However, if for some reason a rebuild rule is triggered and involves a
-missing tool, @command{missing} will notice it and warn the user.
-Besides the warning, when a tool is missing, @command{missing} will
-attempt to fix timestamps in a way that allows the build to continue.
-For instance, @command{missing} will touch @file{configure} if
address@hidden is not installed.  When all distributed files are
-kept under version control, this feature of @command{missing} allows a
-user @emph{with no maintainer tools} to build a package off its version
-control repository, bypassing any timestamp inconsistency (implied by
-e.g.@: @samp{cvs update} or @samp{git clone}).
+missing tool, @command{missing} will notice it and warn the user, even
+suggesting how to obtain such a tool (at least in case it is a well-known
+one, like @command{makeinfo} or @command{bison}).  This is more helpful
+and user-friendly than just having the rebuild rules spewing out a terse
+error message like @samp{sh: @var{tool}: command not found}.  Similarly,
address@hidden will warn the user if it detects that a maintainer
+tool it attempted to use seems too old (be warned that diagnosing this
+correctly is typically more difficult that detecting missing tools, and
+requires cooperation from the tool itself, so it won't always work).
 
 If the required tool is installed, @command{missing} will run it and
 won't attempt to continue after failures.  This is correct during
 development: developers love fixing failures.  However, users with
-wrong versions of maintainer tools may get an error when the rebuild
+missing or too old maintainer tools may get an error when the rebuild
 rule is spuriously triggered, halting the build.  This failure to let
 the build continue is one of the arguments of the
 @code{AM_MAINTAINER_MODE} advocates.
diff --git a/lib/am/distdir.am b/lib/am/distdir.am
index 3a5e1a5..bfe0f31 100644
--- a/lib/am/distdir.am
+++ b/lib/am/distdir.am
@@ -90,32 +90,6 @@ if  %?CK-NEWS%
 endif  %?CK-NEWS%
 endif %?TOPDIR_P%
 ##
-## 'missing help2man' may have created some bogus man pages.  Ensure they
-## are not distributed.
-##
-if %?INSTALL-MAN%
-if %?HAVE-MANS%
-       @list='$(MANS)'; if test -n "$$list"; then \
-         list=`for p in $$list; do \
-           if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
-## Note that we check existing man pages here only.  If there are man pages
-## which are not distributed, and may be generated only conditionally, then
-## we should not error out because of them.  This could be refined to take
-## into account only dist_*_MANS, but then we'd be missing out on those
-## the user distributes with EXTRA_DIST.
-           if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \
-         if test -n "$$list" && \
-           grep 'ab help2man is required to generate this page' $$list 
>/dev/null; then \
-           echo "error: found man pages containing the 'missing help2man' 
replacement text:" >&2; \
-           grep -l 'ab help2man is required to generate this page' $$list | 
sed 's/^/         /' >&2; \
-           echo "       to fix them, install help2man, remove and regenerate 
the man pages;" >&2; \
-           echo "       typically 'make maintainer-clean' will remove them" 
>&2; \
-           exit 1; \
-         else :; fi; \
-       else :; fi
-endif %?HAVE-MANS%
-endif %?INSTALL-MAN%
-##
 ## Only for the top dir.
 ##
 if %?TOPDIR_P%
diff --git a/lib/missing b/lib/missing
index 074c62c..06e0af1 100755
--- a/lib/missing
+++ b/lib/missing
@@ -1,10 +1,10 @@
 #! /bin/sh
-# Common stub for a few missing GNU programs while installing.
+# Common wrapper for a few potentially missing GNU programs.
 
-scriptversion=2012-05-23.18; # UTC
+scriptversion=2012-06-14.10; # UTC
 
 # Copyright (C) 1996-2012 Free Software Foundation, Inc.
-# Originally by Fran,cois Pinard <address@hidden>, 1996.
+# Originally written by Fran,cois Pinard <address@hidden>, 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
@@ -29,10 +29,6 @@ if test $# -eq 0; then
   exit 1
 fi
 
-run=:
-sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
-sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
-
 # In the cases where this matters, 'missing' is being run in the
 # srcdir already.
 if test -f configure.ac; then
@@ -41,49 +37,28 @@ else
   configure_ac=configure.in
 fi
 
-msg="missing on your system"
-
 case $1 in
---run)
-  # Try to run requested program, and just exit if it succeeds.
-  run=
-  shift
-  "$@" && exit 0
-  # Exit code 63 means version mismatch.  This often happens
-  # when the user try to use an ancient version of a tool on
-  # a file that requires a minimum version.  In this case we
-  # we should proceed has if the program had been absent, or
-  # if --run hadn't been passed.
-  if test $? = 63; then
-    run=:
-    msg="probably too old"
-  fi
-  ;;
+
+  --is-lightweight)
+    # Used by our autoconf macros to check whether the available missing
+    # script is modern enough.
+    exit 0
+    ;;
 
   -h|--h|--he|--hel|--help)
     echo "\
 $0 [OPTION]... PROGRAM [ARGUMENT]...
 
-Handle 'PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
-error status if there is no known handling for PROGRAM.
+Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
+to PROGRAM being missing or too old.
 
 Options:
   -h, --help      display this help and exit
   -v, --version   output version information and exit
-  --run           try to run the given command, and emulate it if it fails
 
 Supported PROGRAM values:
-  aclocal      touch file 'aclocal.m4'
-  autoconf     touch file 'configure'
-  autoheader   touch file 'config.h.in'
-  autom4te     touch the output file, or create a stub one
-  automake     touch all 'Makefile.in' files
-  bison        create 'y.tab.[ch]', if possible, from existing .[ch]
-  flex         create 'lex.yy.c', if possible, from existing .c
-  help2man     touch the output file
-  lex          create 'lex.yy.c', if possible, from existing .c
-  makeinfo     touch the output file
-  yacc         create 'y.tab.[ch]', if possible, from existing .[ch]
+  aclocal   autoconf  autoheader   autom4te  automake  makeinfo
+  bison     yacc      flex         lex       help2man
 
 Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
 'g' are ignored when checking the name.
@@ -98,51 +73,53 @@ Send bug reports to <address@hidden>."
     ;;
 
   -*)
-    echo 1>&2 "$0: Unknown '$1' option"
+    echo 1>&2 "$0: unknown '$1' option"
     echo 1>&2 "Try '$0 --help' for more information"
     exit 1
     ;;
 
 esac
 
-# normalize program name to check for.
+# Run the given program, remember its exit status.
+"$@"; st=$?
+
+# If it succeeded, we are done.
+test $st -eq 0 && exit 0
+
+# Also exit now if we it failed (or wasn't found), and '--version' was
+# passed; such an option is passed most likely to detect whether the
+# program is present and works.
+case $2 in --version|--help) exit $st;; esac
+
+# Exit code 63 means version mismatch.  This often happens when the user
+# tries to use an ancient version of a tool on a file that requires a
+# minimum version.
+if test $st -eq 63; then
+  msg="probably too old"
+elif test $st -eq 127; then
+  # Program was missing.
+  msg="missing on your system"
+else
+  # Program was found and executed, but failed.  Give up.
+  exit $st
+fi
+
+# Normalize program name to check for.
 program=`echo "$1" | sed '
   s/^gnu-//; t
   s/^gnu//; t
   s/^g//; t'`
 
-# Now exit if we have it, but it failed.  Also exit now if we
-# don't have it and --version was passed (most likely to detect
-# the program).  This is about non-GNU programs, so use $1 not
-# $program.
-case $1 in
-  lex*|yacc*)
-    # Not GNU programs, they don't have --version.
-    ;;
-
-  *)
-    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
-       # We have it, but it failed.
-       exit 1
-    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
-       # Could not run --version or --help.  This is probably someone
-       # running '$TOOL --version' or '$TOOL --help' to check whether
-       # $TOOL exists and not knowing $TOOL uses missing.
-       exit 1
-    fi
-    ;;
-esac
-
 # If it does not exist, or fails to run (possibly an outdated version),
-# try to emulate it.
+# advise the user how to get it.
 case $program in
+
   aclocal*)
     echo 1>&2 "\
 WARNING: '$1' is $msg.  You should only need it if
          you modified 'acinclude.m4' or '${configure_ac}'.  You might want
          to install the Automake and Perl packages.  Grab them from
          any GNU archive site."
-    touch aclocal.m4
     ;;
 
   autoconf*)
@@ -151,7 +128,6 @@ WARNING: '$1' is $msg.  You should only need it if
          you modified '${configure_ac}'.  You might want to install the
          Autoconf and GNU m4 packages.  Grab them from any GNU
          archive site."
-    touch configure
     ;;
 
   autoheader*)
@@ -160,19 +136,6 @@ WARNING: '$1' is $msg.  You should only need it if
          you modified 'acconfig.h' or '${configure_ac}'.  You might want
          to install the Autoconf and GNU m4 packages.  Grab them
          from any GNU archive site."
-    files=`sed -n -e 's/^[ ]*AC_CONFIG_HEADER(\([^)]*\)).*/\1/p' \
-                  -e 's/^[ ]*AC_CONFIG_HEADERS(\([^)]*\)).*/\1/p' \
-             ${configure_ac}`
-    test -z "$files" && files="config.h"
-    touch_files=
-    for f in $files; do
-      case $f in
-      *:*) touch_files="$touch_files "`echo "$f" |
-                                      sed -e 's/^[^:]*://' -e 's/:.*//'`;;
-      *) touch_files="$touch_files $f.in";;
-      esac
-    done
-    touch $touch_files
     ;;
 
   automake*)
@@ -181,9 +144,6 @@ WARNING: '$1' is $msg.  You should only need it if
          you modified 'Makefile.am', 'acinclude.m4' or '${configure_ac}'.
          You might want to install the Automake and Perl packages.
          Grab them from any GNU archive site."
-    find . -type f -name Makefile.am -print |
-          sed 's/\.am$/.in/' |
-          while read f; do touch "$f"; done
     ;;
 
   autom4te*)
@@ -193,20 +153,6 @@ WARNING: '$1' is needed, but is $msg.
          proper tools for further handling them.
          You can get '$1' as part of Autoconf from any GNU
          archive site."
-
-    file=`echo "$*" | sed -n "$sed_output"`
-    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
-    if test -f "$file"; then
-       touch $file
-    else
-       test -z "$file" || exec >$file
-       echo "#! /bin/sh"
-       echo "# Created by GNU Automake missing as a replacement of"
-       echo "#  $ $@"
-       echo "exit 0"
-       chmod +x $file
-       exit 1
-    fi
     ;;
 
   bison*|yacc*)
@@ -215,28 +161,6 @@ WARNING: '$1' $msg.  You should only need it if
          you modified a '.y' file.  You may need the Bison package
          in order for those modifications to take effect.  You can get
          Bison from any GNU archive site."
-    rm -f y.tab.c y.tab.h
-    if test $# -ne 1; then
-        eval LASTARG=\${$#}
-       case $LASTARG in
-       *.y)
-           SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
-           if test -f "$SRCFILE"; then
-                cp "$SRCFILE" y.tab.c
-           fi
-           SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
-           if test -f "$SRCFILE"; then
-                cp "$SRCFILE" y.tab.h
-           fi
-         ;;
-       esac
-    fi
-    if test ! -f y.tab.h; then
-       echo >y.tab.h
-    fi
-    if test ! -f y.tab.c; then
-       echo 'main() { return 0; }' >y.tab.c
-    fi
     ;;
 
   lex*|flex*)
@@ -245,21 +169,6 @@ WARNING: '$1' is $msg.  You should only need it if
          you modified a '.l' file.  You may need the Flex package
          in order for those modifications to take effect.  You can get
          Flex from any GNU archive site."
-    rm -f lex.yy.c
-    if test $# -ne 1; then
-        eval LASTARG=\${$#}
-       case $LASTARG in
-       *.l)
-           SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
-           if test -f "$SRCFILE"; then
-                cp "$SRCFILE" lex.yy.c
-           fi
-         ;;
-       esac
-    fi
-    if test ! -f lex.yy.c; then
-       echo 'main() { return 0; }' >lex.yy.c
-    fi
     ;;
 
   help2man*)
@@ -268,16 +177,6 @@ WARNING: '$1' is $msg.  You should only need it if
         you modified a dependency of a manual page.  You may need the
         Help2man package in order for those modifications to take
         effect.  You can get Help2man from any GNU archive site."
-
-    file=`echo "$*" | sed -n "$sed_output"`
-    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
-    if test -f "$file"; then
-       touch $file
-    else
-       test -z "$file" || exec >$file
-       echo ".ab help2man is required to generate this page"
-       exit $?
-    fi
     ;;
 
   makeinfo*)
@@ -288,25 +187,6 @@ WARNING: '$1' is $msg.  You should only need it if
          call might also be the consequence of using a buggy 'make' (AIX,
          DU, IRIX).  You might want to install the Texinfo package or
          the GNU make package.  Grab either from any GNU archive site."
-    # The file to touch is that specified with -o ...
-    file=`echo "$*" | sed -n "$sed_output"`
-    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
-    if test -z "$file"; then
-      # ... or it is the one specified with @setfilename ...
-      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
-      file=`sed -n '
-       /address@hidden/{
-         s/.* \([^ ]*\) *$/\1/
-         p
-         q
-       }' $infile`
-      # ... or it is derived from the source name (dir/f.texi becomes f.info)
-      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
-    fi
-    # If the file does not exist, the user really needs makeinfo;
-    # let's fail without touching anything.
-    test -f $file || exit 1
-    touch $file
     ;;
 
   *)
@@ -317,11 +197,13 @@ WARNING: '$1' is needed, and is $msg.
          it often tells you about the needed prerequisites for installing
          this package.  You may also peek at any GNU archive site, in case
          some other package would contain this missing '$1' program."
-    exit 1
     ;;
+
 esac
 
-exit 0
+# Propagate the correct exit status (expected to be 127 for a program
+# not found, 63 for a program that failed due to version mismatch).
+exit $st
 
 # Local variables:
 # eval: (add-hook 'write-file-hooks 'time-stamp)
diff --git a/m4/missing.m4 b/m4/missing.m4
index e124803..2de7fe4 100644
--- a/m4/missing.m4
+++ b/m4/missing.m4
@@ -6,7 +6,7 @@
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 7
+# serial 8
 
 # AM_MISSING_PROG(NAME, PROGRAM)
 # ------------------------------
@@ -18,8 +18,8 @@ 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.
+# Define MISSING if not defined so far and test if it is modern enough.
+# If it is, 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
@@ -32,8 +32,8 @@ if test x"${MISSING+set}" != xset; then
   esac
 fi
 # Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
-  am_missing_run="$MISSING --run "
+if eval "$MISSING --is-lightweight"; then
+  am_missing_run="$MISSING "
 else
   am_missing_run=
   AC_MSG_WARN(['missing' script is too old or missing])
diff --git a/t/missing6.sh b/t/aclocal-autoconf-version-check.sh
similarity index 100%
rename from t/missing6.sh
rename to t/aclocal-autoconf-version-check.sh
diff --git a/t/list-of-tests.mk b/t/list-of-tests.mk
index e701360..054a03a 100644
--- a/t/list-of-tests.mk
+++ b/t/list-of-tests.mk
@@ -109,6 +109,7 @@ t/aclocal-install-fail.sh \
 t/aclocal-install-mkdir.sh \
 t/aclocal-no-install-no-mkdir.sh \
 t/aclocal-verbose-install.sh \
+t/aclocal-autoconf-version-check.sh \
 t/ac-output-old.tap \
 t/acsilent.sh \
 t/acsubst.sh \
@@ -656,7 +657,6 @@ t/makevars.sh \
 t/man.sh \
 t/man2.sh \
 t/man3.sh \
-t/man4.sh \
 t/man5.sh \
 t/man6.sh \
 t/man7.sh \
@@ -667,12 +667,8 @@ t/mdate3.sh \
 t/mdate4.sh \
 t/mdate5.sh \
 t/mdate6.sh \
-t/missing.sh \
-t/missing2.sh \
+t/missing-version-mismatch.sh \
 t/missing3.sh \
-t/missing4.sh \
-t/missing5.sh \
-t/missing6.sh \
 t/missing-auxfile-stops-makefiles-creation.sh \
 t/mkinstall.sh \
 t/mkinst2.sh \
@@ -931,6 +927,7 @@ t/remake-deleted-am-2.sh \
 t/remake-deleted-am-subdir.sh \
 t/remake-deleted-am.sh \
 t/remake-renamed-am.sh \
+t/remake-aclocal-version-mismatch.sh \
 t/pr8365-remake-timing.sh \
 t/req.sh \
 t/reqd.sh \
@@ -1176,7 +1173,6 @@ t/txinfo26.sh \
 t/txinfo27.sh \
 t/txinfo28.sh \
 t/txinfo29.sh \
-t/txinfo30.sh \
 t/txinfo31.sh \
 t/txinfo32.sh \
 t/txinfo33.sh \
diff --git a/t/man4.sh b/t/man4.sh
deleted file mode 100755
index c8fd86d..0000000
--- a/t/man4.sh
+++ /dev/null
@@ -1,105 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2008-2012 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, see <http://www.gnu.org/licenses/>.
-
-# Ensure 'make dist' fails when help2man replacement man pages are created.
-#
-# The assumption here is the following: if the developer uses help2man to
-# generate man pages from --help output, then these man pages may not be
-# stored in VCS.  However, they should be distributed, so that the end user
-# that receives the tarball doesn't have to install help2man.  If they are
-# not distributed, then the developer should make help2man a prerequisite
-# to building the package from a tarball, e.g., with a configure check for
-# help2man that errors out if it is unavailable.  In both cases it is
-# sufficient to check only distributed man pages.
-#
-# Idea of this whole shenanigan is to allow somebody to check out sources from
-# a VCS and build and install them without needing help2man installed.  The
-# installed man pages will be bogus in this case.  Typically, this happens
-# when developers ask users to try out a fix from VCS; the developers 
themselves
-# will usually have help2man installed (or should install it).
-
-. ./defs || Exit 1
-
-cat > Makefile.am << 'END'
-dist_man_MANS = $(srcdir)/foo.1 bar.1
-dist_bin_SCRIPTS = foo bar
-$(srcdir)/foo.1:
-       $(HELP2MAN) --output=$@ $(srcdir)/foo
-bar.1:
-       $(HELP2MAN) --output=$(srcdir)/bar.1 $(srcdir)/bar
-END
-
-cat >>configure.ac <<'END'
-AM_MISSING_PROG([HELP2MAN], [help2man])
-AC_OUTPUT
-END
-
-cat > foo <<'END'
-#! /bin/sh
-while test $# -gt 0; do
-  case $1 in
-    -h | --help) echo "usage: $0 [OPTIONS]..."; exit 0;;
-    -v | --version) echo "$0 1.0"; exit 0;;
-  esac
-  shift
-done
-END
-cp foo bar
-chmod +x foo bar
-
-mkdir bin
-cat > bin/help2man <<'END'
-#! /bin/sh
-# Fake help2man script that lets 'missing' think it is not installed.
-exit 127
-END
-chmod +x bin/help2man
-PATH=$(pwd)/bin$PATH_SEPARATOR$PATH
-
-grep_error_messages()
-{
-  grep ' man pages contain.*missing help2man.* replacement text' stderr \
-   && grep 'install help2man' stderr \
-   && grep 'regenerate the man pages' stderr \
-   || Exit 1
-}
-
-$ACLOCAL
-$AUTOMAKE
-$AUTOCONF
-
-./configure
-$MAKE
-$MAKE dist 2>stderr && { cat stderr >&2; Exit 1; }
-cat stderr >&2
-grep_error_messages
-$MAKE distcheck 2>stderr && { cat stderr >&2; Exit 1; }
-cat stderr >&2
-grep_error_messages
-$MAKE distclean
-
-mkdir build
-cd build
-../configure
-$MAKE
-$MAKE dist 2>stderr && { cat stderr >&2; Exit 1; }
-cat stderr >&2
-grep_error_messages
-$MAKE distcheck 2>stderr && { cat stderr >&2; Exit 1; }
-cat stderr >&2
-grep_error_messages
-
-:
diff --git a/t/man6.sh b/t/man6.sh
index 1a7b267..e3c5569 100755
--- a/t/man6.sh
+++ b/t/man6.sh
@@ -65,7 +65,7 @@ cd build
 
 ../configure
 # Sanity check.
-grep '^HELP2MAN *=.*/missing --run help2man' Makefile
+grep '^HELP2MAN *=.*/missing help2man' Makefile
 
 $MAKE
 $FGREP foobar ../foobar.1
@@ -84,7 +84,7 @@ rm -f *.1 # Remove leftover generated manpages.
 
 ./configure
 # Sanity check.
-grep '^HELP2MAN *=.*/missing --run help2man' Makefile
+grep '^HELP2MAN *=.*/missing help2man' Makefile
 
 $MAKE
 $FGREP foobar  foobar.1
diff --git a/t/missing2.sh b/t/missing-version-mismatch.sh
similarity index 53%
rename from t/missing2.sh
rename to t/missing-version-mismatch.sh
index 89e9a5d..4a2910a 100755
--- a/t/missing2.sh
+++ b/t/missing-version-mismatch.sh
@@ -16,43 +16,35 @@
 
 # Test missing with version mismatches.
 
+am_create_testdir=empty
 . ./defs || Exit 1
 
-cat >>configure.ac <<'EOF'
-m4_include([v.m4])
-AC_OUTPUT
-EOF
+get_shell_script missing
 
-: > v.m4
+do_check ()
+{
+  progname=$1; shift;
+  ./missing "$@" 2>stderr && { cat stderr >&2; Exit 1; }
+  cat stderr >&2
+  $FGREP "WARNING: '$progname' is probably too old." stderr
+}
 
-: > Makefile.am
+echo 'AC_INIT([x], [1.0]) AC_PREREQ([9999])' >> configure.ac
 
-get_shell_script missing
+do_check autoconf               $AUTOCONF
+do_check autoheader             $AUTOHEADER
+do_check aclocal-$APIVERSION    $am_original_ACLOCAL
+
+cat > configure.ac << 'END'
+AC_INIT([x], [0])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+END
 
+echo AUTOMAKE_OPTIONS = 9999.9999 > Makefile.am
 $ACLOCAL
-$AUTOCONF
-$AUTOMAKE --add-missing
-
-# See missing.test for explanations about this.
-MYAUTOCONF="./missing --run $AUTOCONF"
-unset AUTOCONF
-
-./configure AUTOCONF="$MYAUTOCONF"
-
-$MAKE
-$sleep
-# Hopefully the install version of Autoconf cannot compete with this one...
-echo 'AC_PREREQ(9999)' > v.m4
-$MAKE distdir
-
-# Run again, but without missing, to ensure that timestamps were updated.
-export AUTOMAKE ACLOCAL
-./configure AUTOCONF="$MYAUTOCONF"
-$MAKE
-
-# Make sure $MAKE fail when timestamps aren't updated and missing is not used.
-$sleep
-touch v.m4
-$MAKE && Exit 1
+: > install-sh
+# FIXME: this doesn't work due to a bug in automake (not 'missing').
+#do_check automake-$APIVERSION  $am_original_AUTOMAKE
 
 :
diff --git a/t/missing.sh b/t/missing.sh
deleted file mode 100755
index 473d041..0000000
--- a/t/missing.sh
+++ /dev/null
@@ -1,66 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2003-2012 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, see <http://www.gnu.org/licenses/>.
-
-# Test missing with version mismatches.
-
-. ./defs || Exit 1
-
-cat >>configure.ac <<'EOF'
-AC_OUTPUT
-EOF
-
-: > Makefile.am
-
-get_shell_script missing
-
-$ACLOCAL
-$AUTOCONF
-$AUTOMAKE --add-missing
-
-# Make sure we do use missing, even if the user exported AUTOCONF.
-# (We cannot export this new value, because it would be used by Automake
-# when tracing, and missing is no good for this.)
-MYAUTOCONF="./missing --run $AUTOCONF"
-unset AUTOCONF
-
-./configure AUTOCONF="$MYAUTOCONF"
-$MAKE
-$sleep
-# Hopefully the install version of Autoconf cannot compete with this one...
-echo 'AC_PREREQ(9999)' >> aclocal.m4
-$MAKE distdir
-
-# Try version number suffixes if we can add them safely.
-case $MYAUTOCONF in *autoconf)
-  ./configure AUTOCONF="${MYAUTOCONF}6789"
-  $MAKE
-  $sleep
-  # Hopefully the install version of Autoconf cannot compete with this one...
-  echo 'AC_PREREQ(9999)' >> aclocal.m4
-  $MAKE distdir
-esac
-
-# Run again, but without missing, to ensure that timestamps were updated.
-export AUTOMAKE ACLOCAL
-./configure AUTOCONF="$MYAUTOCONF"
-$MAKE
-
-# Make sure $MAKE fails when timestamps aren't updated and missing is not used.
-$sleep
-touch aclocal.m4
-$MAKE && Exit 1
-
-:
diff --git a/t/missing3.sh b/t/missing3.sh
index a26f954..e8641da 100755
--- a/t/missing3.sh
+++ b/t/missing3.sh
@@ -23,31 +23,26 @@ get_shell_script missing
 
 # b7cb8259 assumed not to exist.
 
-./missing b7cb8259 --version 2>stderr && { cat stderr >&2; Exit 1; }
-cat stderr >&2
-grep . stderr && Exit 1
-./missing b7cb8259 --grep 2>stderr && { cat stderr >&2; Exit 1; }
-cat stderr >&2
-grep WARNING stderr
-
-./missing --run b7cb8259 --version && Exit 1
-./missing --run b7cb8259 --grep 2>stderr && { cat stderr >&2; Exit 1; }
-cat stderr >&2
-grep WARNING stderr
+run_cmd ()
+{
+  st=0; "$@" >stdout 2>stderr || st=$?
+  cat stdout
+  cat stderr >&2
+  return $st
+}
+
+./missing b7cb8259 --version && Exit 1
+grep WARNING stderr && Exit 1
+run_cmd ./missing b7cb8259 --grep && Exit 1
+grep 'WARNING:.*missing on your system' stderr
 
 # missing itself it known to exist :)
 
-./missing ./missing --version 2>stderr && { cat stderr >&2; Exit 1; }
-cat stderr >&2
-grep . stderr && Exit 1
-./missing ./missing --grep 2>stderr && { cat stderr >&2; Exit 1; }
-cat stderr >&2
-grep WARNING stderr
-
-./missing --run ./missing --version 2>stderr || { cat stderr >&2; Exit 1; }
-cat stderr >&2
-grep . stderr && Exit 1
-./missing --run ./missing --grep 2>stderr && { cat stderr >&2; Exit 1; }
-cat stderr >&2
+run_cmd ./missing ./missing --version || Exit 1
+grep 'missing .*(GNU [aA]utomake)' stdout
+test -s stderr && Exit 1
+run_cmd ./missing ./missing --grep && Exit 1
 grep WARNING stderr && Exit 1
-grep Unknown stderr
+grep "missing:.* unknown '--grep'" stderr
+
+:
diff --git a/t/missing5.sh b/t/missing5.sh
deleted file mode 100755
index 363cc1a..0000000
--- a/t/missing5.sh
+++ /dev/null
@@ -1,64 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2006-2012 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, see <http://www.gnu.org/licenses/>.
-
-# Test how well 'missing' finds output file names of various tools.
-# PR automake/483.
-
-am_create_testdir=empty
-. ./defs || Exit 1
-
-get_shell_script missing
-
-# These programs may be invoked by 'missing'.
-needed_tools='chmod find sed test touch'
-needed_tools_csep=$(echo $needed_tools | sed 's/ /, /g')
-
-cat >configure.ac <<EOF
-AC_INIT([missing4], [1.0])
-m4_foreach([tool], [$needed_tools_csep],
-          [AC_PATH_PROG(tool, tool, [false])
-           AC_CONFIG_FILES(tool, chmod +x tool)
-          ])
-AC_OUTPUT
-EOF
-
-for tool in $needed_tools; do
-  unindent >$tool.in <<EOF
-    #! /bin/sh
-    exec @$tool@ "\$@"
-EOF
-done
-
-$AUTOCONF
-./configure
-
-echo output-file > output-file
-cp output-file my--output--file-o
-
-save_PATH=$PATH
-PATH=.
-export PATH
-missing --help
-missing --version
-for tool in autom4te help2man makeinfo; do
-  missing --run $tool -o my--output--file-o input
-  missing --run $tool --output my--output--file-o input
-done
-PATH=$save_PATH
-export PATH
-diff output-file my--output--file-o
-test ! -f ./--file-o
-test ! -f input
diff --git a/t/missing4.sh b/t/remake-aclocal-version-mismatch.sh
similarity index 100%
rename from t/missing4.sh
rename to t/remake-aclocal-version-mismatch.sh
diff --git a/t/remake6.sh b/t/remake6.sh
index b6a3340..b5e9646 100755
--- a/t/remake6.sh
+++ b/t/remake6.sh
@@ -39,7 +39,7 @@ do_check ()
 {
   $MAKE >stdout || { cat stdout; Exit 1; }
   cat stdout
-  test $(grep -c " --run " stdout) -eq 1
+  test $(grep -c "/missing " stdout) -eq 1
 }
 
 # Now, we are set up.  Ensure that, for either missing Makefile.in,
diff --git a/t/txinfo30.sh b/t/txinfo30.sh
deleted file mode 100755
index 1766cac..0000000
--- a/t/txinfo30.sh
+++ /dev/null
@@ -1,63 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2005-2012 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, see <http://www.gnu.org/licenses/>.
-
-# Make sure 'missing texinfo' does not create empty files.
-# Report from Bob Proulx.
-
-. ./defs || Exit 1
-
-echo info_TEXINFOS = bar.texi >Makefile.am
-echo grepme >bar.info
-$sleep
-cat >bar.texi <<EOF
address@hidden bar.info
-EOF
-
-echo AC_OUTPUT >>configure.ac
-
-cat >makeinfo <<\EOF
-#!/bin/sh
-# This script
-# 1. fails so 'missing' can take over
-# 2. does not understand '--version' so 'missing' thinks 'makeinfo' isn't
-#    installed
-exec false
-EOF
-
-chmod +x makeinfo
-
-PATH=$(pwd)$PATH_SEPARATOR$PATH
-export PATH
-
-# Otherwise configure might pick up a working makeinfo from the
-# environment.  Seen in automake bug#10866.
-unset MAKEINFO || :
-
-$ACLOCAL
-$AUTOCONF
-$AUTOMAKE --add-missing
-
-./configure
-$MAKE
-grep grepme bar.info
-test -f bar.info
-
-# We should not create a missing bar.info.
-rm -f bar.info
-$MAKE && Exit 1
-test ! -f bar.info
-
-:


hooks/post-receive
-- 
GNU Automake



reply via email to

[Prev in Thread] Current Thread [Next in Thread]