2. Changes in automake release

About deprecation of automake features

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.

2.1. automake 1.12

Warning

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])
    
    ⋮
            

    Note

    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.

2.2. automake 1.13

Warning

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.

2.3. automake 1.14

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.

2.4. automake 1.15

Unsupported and changed behaviour in automake starting from version 1.15

  • The make distcheck target has been changed to use $(distdir)/_build/sub as its working directory. Code making assumption on the value of srcdir and top_srcdir during make distcheck will fail.

2.5. automake 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.

Warning

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.