• Show log

    Commit

  • Hash : a22717df
    Author : Stefano Lattarini
    Date : 2012-06-15T11:13:00

    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 <stefano.lattarini@gmail.com>
    

  • README

  • This is Automake, a Makefile generator.  It aims to be portable and
    to conform to the GNU Coding Standards for Makefile variables and
    targets.
    
    See the INSTALL file for detailed information about how to configure
    and install Automake.
    
    Automake is a Perl script.  The input files are called Makefile.am.
    The output files are called Makefile.in; they are intended for use
    with Autoconf.  Automake requires certain things to be done in your
    configure.ac.
    
    Automake comes with extensive documentation; please refer to it for
    more details about its purpose, features, and usage patterns.
    
    This package also includes the "aclocal" program, whose purpose is
    to generate an 'aclocal.m4' based on the contents of 'configure.ac'.
    It is useful as an extensible, maintainable mechanism for augmenting
    autoconf.  It is intended that other package authors will write m4
    macros which can be automatically used by aclocal.  The documentation
    for aclocal is currently found in the Automake manual.
    
    Automake has a test suite.  Use "make check" to run it.  For more
    information, see the file t/README.
    
    Automake has a page on the web.  See:
    
    	http://www.gnu.org/software/automake/
    
    Automake also has three mailing lists:
    
      * automake@gnu.org
        For general discussions of Automake and its interactions with other
        configuration/portability tools like Autoconf or Libtool.
    
      * bug-automake@gnu.org
        Where to send bug reports and feature requests.
    
      * automake-patches@gnu.org
        Where to send patches, and discuss the automake development process
        and the  design of new features.
    
    To obtain more information about these list, or to subscribe to them,
    refer to <http://www.gnu.org/software/automake/#mailinglists>
    
    New releases are announced to autotools-announce@gnu.org.  If you want to
    be informed, subscribe to that list by following the instructions at
    <http://lists.gnu.org/mailman/listinfo/autotools-announce>.
    
    For any copyright year range specified as YYYY-ZZZZ in this package,
    that the range specifies every single year in that closed interval.
    
    -----
    
    Copyright (C) 1994-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/>.