The development, both historical and contemporary, of automake is full of features that are introduced, obsoleted, deprecated and removed. Due to this, it's important to know a few things about its deprecation process.
First of all, it's unfortunately common for newly-released series (1.12, 1.13, 1.14, ...) to have regressions that are addressed in subsequent micro-releases. When important regressions are present, a warning will be noted at the top of the list of changes.
More importantly, when features (variables, macros, …) are marked as deprecated, their use
is causing a warning to be printed, as long as the -Wobsolete
option is
passed (which is not, by default). If this option is paired with -Werror
,
it can cause features that are still present, but deprecated, to trigger a failure in
Makefile generation.
Versions 1.12 and 1.12.1 of automake have been released with a
regression in the behaviour, related to the deprecation of
AM_PROG_MKDIR_P
, as noted later in this section. It is thus of the utmost
importance to not rely on the behaviour of these versions.
Unsupported behaviour in automake starting from version 1.12
The long-deprecated AM_PROG_MKDIR_P
macro (previously called by default
by AM_INIT_AUTOMAKE
) is now reporting itself as such; this, if combined
with the -Werror
option, will cause automake to fail on
projects that are calling the macro, either explicitly, or through another macro, for
example gettext's, which is still unfixed as of December
2012.
This function enabled the use of $(mkdir_p)
and
@mkdir_p@
in Makefile.am
, which are still present
and will still be available for version 1.14, but are also considered deprecated, and should
thus not be used in new build systems. Please also note that automake releases 1.12 and
1.12.1 mistakenly removed the expansions for $(mkdir_p)
and
@mkdir_p@
altogether, breaking more than a few packages in the process.
See Section 4.1, “Parallel Install” for further details.
The dist-lzma
, used to produce
.tar.lzma
archives has been removed.
The LZMA compression format has undergone different,
incompatible revisions over its short life, and has been
deprecated for most uses. In its place you can use the new
dist-xz
option.
The support for de-ANSI-fication (ansi2knr
Automake option) that was deprecated in version 1.11 has been
removed from this version.
This feature allowed for code to be written as
specially-formatted ANSI C code, to be translated at build
time through the ansi2knr
tool, bundled
in the source distribution.
Since C has been standardized first in 1989, there should be
no concern that any compiler will only accept pre-standard C
code. Furthermore, the use of ansi2knr
is
not supported during cross-compilation, so there is no real
benefit in using this feature any longer.
Even though this feature is hardly ever used, there are
projects that still rely on the initialisation macro
AM_C_PROTOTYPES
; this macro is defined in
automake 1.11 this way:
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 ])
This means that whenever the package is using
AM_C_PROTOTYPES
but doesn't have the
ansi2knr.c
source file in its
distribution, the intended behaviour was probably to call for
AC_C_PROTOTYPES
.
Unfortunately as with other non-trivial macros, it's possible
that projects rely on more than just the main side-effect of
said macro, which means that if you want to replace its use,
you have to also verify that there is no reliance on calls to
AC_HEADER_STDC
or on the check on
string.h
header that is not otherwise
executed.
Example 5.1. Safe conversion of a configure.ac
relying on AM_C_PROTOTYPES
without
de-ANSI-fication.
⋮ AC_C_PROTOYPES AC_HEADER_STDC AC_CHECK_HEADERS([string.h]) ⋮
Please consider verifying whether the calls to
AC_HEADER_STDC
and
AC_CHECK_HEADERS
are actually needed.
It is important to note that as of writing (July 2012), the
AC_C_PROTOTYPES
macro is not considered
deprecated by autoconf but it is
considered obsolete.
Versions 1.13 and 1.13.1 of automake have been released with
regressions in their behaviour, related to the deprecation of
AM_PROG_CC_STDC
and AM_CONFIG_HEADER
macros. It is
thus of the utmost importance to not rely on the behaviour of any version before 1.13.2.
Furthermore, Fedora patched version 1.13.1 to re-introduce the aforementioned macros, which means that the behaviour of any automake version 1.13.1 is distribution-dependent.
Unsupported and changed behaviour in automake starting from version 1.13
Tests are now executed in parallel, rather than in series. You
can return to the the old behaviour with the
serial-tests
option.
The multi-argument AM_INIT_AUTOMAKE
syntax is now considered fully
obsolete. This syntax was long discontinued and has never been documented in this guide, but
it's still being used for projects using dynamic version definition, due to a bug in
autoconf which is still unfixed as of January 2013.
The cygnus
flavour for Automake has been removed. This might require a
vast overhaul of the very few projects who still relied on this build flavour.
A number of internal, deprecated aliases, not starting with the canonical
AM_
prefix, have been removed. These were part of the
m4/obsolete.m4
macro file and should not really be of importance as
they were mostly used by the projects that implemented them before being merged in automake.
Together with this, as of the original 1.13 release two more macros where removed:
AM_PROG_CC_STDC
(replaced by AC_PROG_CC
as
provided by autoconf) and AM_CONFIG_HEADER
(replaced by AC_CONFIG_HEADERS
). Version 1.13.1 re-introduced the
macros, but only to throw a proper error message; version 1.13.2 finally reintroduced these,
as deprecated, to catch-up with Fedora's 1.13.1 patched version.
Unsupported and changed behaviour in automake starting from version 1.14
The AM_PROG_CC_C_O
macro has been deprecated, and its use now is a
no-op. Instead, the compile
script is now required for all builds, and
the tests executed by this macro have been bolted on the AC_PROG_CC
basic macro instead. Removal of this macro is scheduled for version 2.0.
The dist-shar
and dist-tarZ
options have been
deprecated and are scheduled to be removed for version 2.0.
Starting with version 1.13, automake versioning scheme has changes so that backward-incompatible changes are only present in major version. The next major version of automake is version 2.0. This new version was promised for 2013, but has not been released yet as of writing in 2016.
This content is still in flux as this version of automake is not out yet. It'll be updated to the best of my abilities over time until release.
Unsupported and changed behaviour in automake starting from version 2.0
Projects still using the old configure.in
name for the
autoconf script are no longer supported. Simply rename the file
to the modern name of configure.ac
.
The ACLOCAL_AMFLAGS
variable in Makefile.am
is no
longer supported. See Section 6.1, “External Macro Files” for alternatives on how to
make use external macro file definitions.