(automake-1.16.info)maintainer-mode


Next: Wildcards Prev: CVS Up: FAQ
Enter node , (file) or (file)node

27.2 ‘missing’ and ‘AM_MAINTAINER_MODE’
=======================================

‘missing’
---------

The ‘missing’ script is a wrapper around several maintainer tools,
designed to warn users if a maintainer tool is required but missing.
Typical maintainer tools are ‘autoconf’, ‘automake’, ‘bison’, etc.
Because file generated by these tools are shipped with the other sources
of a package, these tools shouldn’t be required during a user build and
they are not checked for in ‘configure’.

   However, if for some reason a rebuild rule is triggered and involves
a missing tool, ‘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 ‘makeinfo’ or ‘bison’).  This is more helpful and
user-friendly than just having the rebuild rules spewing out a terse
error message like ‘sh: TOOL: command not found’.  Similarly, ‘missing’
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, ‘missing’ will run it and won’t
attempt to continue after failures.  This is correct during development:
developers love fixing failures.  However, users with 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 ‘AM_MAINTAINER_MODE’ advocates.

‘AM_MAINTAINER_MODE’
--------------------

‘AM_MAINTAINER_MODE’ allows you to choose whether the so called "rebuild
rules" should be enabled or disabled.  With
‘AM_MAINTAINER_MODE([enable])’, they are enabled by default, otherwise
they are disabled by default.  In the latter case, if you have
‘AM_MAINTAINER_MODE’ in ‘configure.ac’, and run ‘./configure && make’,
then ‘make’ will *never* attempt to rebuild ‘configure’, ‘Makefile.in’s,
Lex or Yacc outputs, etc.  I.e., this disables build rules for files
that are usually distributed and that users should normally not have to
update.

   The user can override the default setting by passing either
‘--enable-maintainer-mode’ or ‘--disable-maintainer-mode’ to
‘configure’.

   People use ‘AM_MAINTAINER_MODE’ either because they do not want their
users (or themselves) annoyed by timestamps lossage (Note: CVS), or
because they simply can’t stand the rebuild rules and prefer running
maintainer tools explicitly.

   ‘AM_MAINTAINER_MODE’ also allows you to disable some custom build
rules conditionally.  Some developers use this feature to disable rules
that need exotic tools that users may not have available.

   Several years ago François Pinard pointed out several arguments
against this ‘AM_MAINTAINER_MODE’ macro.  Most of them relate to
insecurity.  By removing dependencies you get non-dependable builds:
changes to sources files can have no effect on generated files and this
can be very confusing when unnoticed.  He adds that security shouldn’t
be reserved to maintainers (what ‘--enable-maintainer-mode’ suggests),
on the contrary.  If one user has to modify a ‘Makefile.am’, then either
‘Makefile.in’ should be updated or a warning should be output (this is
what Automake uses ‘missing’ for) but the last thing you want is that
nothing happens and the user doesn’t notice it (this is what happens
when rebuild rules are disabled by ‘AM_MAINTAINER_MODE’).

   Jim Meyering, the inventor of the ‘AM_MAINTAINER_MODE’ macro was
swayed by François’s arguments, and got rid of ‘AM_MAINTAINER_MODE’ in
all of his packages.

   Still many people continue to use ‘AM_MAINTAINER_MODE’, because it
helps them working on projects where all files are kept under version
control, and because ‘missing’ isn’t enough if you have the wrong
version of the tools.


automatically generated by info2www version 1.2.2.9