Support for the obsolescent 'AM_PROG_MKDIR_P' macro (and its output variable '$(mkdir_p)') has already been deprecated in the documentation. It's now time to make its use actively emit warnings in the 'obsolete' category as well.
* automake.in (scan_autoconf_traces): Warn about 'AM_PROG_MKDIR_P' obsolescent if that macro is seen. * m4/mkdirp.m4 (AM_PROG_MKDIR_P): Warn about its own obsolescence. * m4/init.m4: Require 'AC_PROG_MKDIR_P', not 'AM_PROG_MKDIR_P'. * t/mkdirp-deprecation.sh: New test. * t/list-of-tests.mk: Add it. * syntax-check.mk (sc_mkdir_p): Delete this check as obsolete. (syntax_check_rules): Remove it. * t/gettext-macros.sh: Ensure the gettext-requiring tests will call aclocal and automake with the 'obsolete' warnings disabled, since even recent versions of gettext used the now-deprecated 'AM_PROG_MKDIR_P' m4 macro. * NEWS: Update. Signed-off-by: Stefano Lattarini <stefano.lattar...@gmail.com> --- NEWS | 16 +++++++++++----- automake.in | 9 +++++++++ m4/init.m4 | 2 +- m4/mkdirp.m4 | 7 ++++++- syntax-checks.mk | 7 ------- t/gettext-macros.sh | 7 +++++++ t/list-of-tests.mk | 1 + t/mkdirp-deprecation.sh | 48 +++++++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 83 insertions(+), 14 deletions(-) create mode 100755 t/mkdirp-deprecation.sh diff --git a/NEWS b/NEWS index 4e49512..b415be6 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,14 @@ +New in 1.12.1: + +* Deprecated obsolescent features: + + - The long-obsolete (since 1.10) automake-provided $(mkdir_p) make + variable, @mkdir_p@ configure-time substitution and AM_PROG_MKDIR + m4 macro are deprecated, eliciting a warning in the 'obsolete' + category. They will be removed in the next major version (1.13). + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + New in 1.12: * WARNING: Future backward-incompatibilities! @@ -40,11 +51,6 @@ New in 1.12: AM_INIT_AUTOMAKE macro will be deprecated in the next minor version of Automake (1.12.1) and removed in the next major version (1.13). - - The long-obsolete (since 1.10) automake-provided $(mkdir_p) make - variable, @mkdir_p@ substitution and AM_PROG_MKDIR m4 macro will - all be deprecated in the next minor version of Automake (1.12.1) - and removed in the next major version (1.13). - - The '--acdir' option of aclocal is deprecated, and will probably be removed in the next major Automake release (1.13). You should use the options '--automake-acdir' and '--system-acdir' instead diff --git a/automake.in b/automake.in index a454109..a993451 100644 --- a/automake.in +++ b/automake.in @@ -5205,6 +5205,7 @@ sub scan_autoconf_traces ($) AC_REQUIRE_AUX_FILE => 1, AC_SUBST_TRACE => 1, AM_AUTOMAKE_VERSION => 1, + AM_PROG_MKDIR_P => 0, # FIXME: to be removed in 1.13 AM_CONDITIONAL => 2, AM_GNU_GETTEXT => 0, AM_GNU_GETTEXT_INTL_SUBDIR => 0, @@ -5363,6 +5364,14 @@ sub scan_autoconf_traces ($) $seen_automake_version = 1; } + elsif ($macro eq 'AM_PROG_MKDIR_P') # FIXME: to be removed in 1.13 + { + msg 'obsolete', $where, <<'EOF'; +The 'AM_PROG_MKDIR_P' macro is deprecated, and will soon be removed. +You should use the Autoconf-provided 'AC_PROG_MKDIR_P' macro instead, +and use '$(MKDIR_P)' instead of '$(mkdir_p)'in your Makefile.am files. +EOF + } elsif ($macro eq 'AM_CONDITIONAL') { $configure_cond{$args[1]} = $where; diff --git a/m4/init.m4 b/m4/init.m4 index 6a69244..3520dcb 100644 --- a/m4/init.m4 +++ b/m4/init.m4 @@ -78,7 +78,7 @@ AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl -AC_REQUIRE([AM_PROG_MKDIR_P])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl diff --git a/m4/mkdirp.m4 b/m4/mkdirp.m4 index 2d88b92..d362b0b 100644 --- a/m4/mkdirp.m4 +++ b/m4/mkdirp.m4 @@ -5,7 +5,7 @@ # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 2 +# serial 3 # AM_PROG_MKDIR_P # --------------- @@ -13,6 +13,11 @@ AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl FIXME to be removed in Automake 1.13. +AC_DIAGNOSE([obsolete], +[$0: this macro is deprecated, and will soon be removed. +You should use the Autoconf-provided 'AC][_PROG_MKDIR_P' macro instead, +and use '$(MKDIR_P)' instead of '$(mkdir_p)'in your Makefile.am files.]) dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. diff --git a/syntax-checks.mk b/syntax-checks.mk index 4d5ab6f..130d469 100644 --- a/syntax-checks.mk +++ b/syntax-checks.mk @@ -76,7 +76,6 @@ sc_tests_no_configure_in \ sc_tests_PATH_SEPARATOR \ sc_tests_logs_duplicate_prefixes \ sc_tests_makefile_variable_order \ -sc_mkdir_p \ sc_perl_at_substs \ sc_unquoted_DESTDIR \ sc_tabs_in_texi \ @@ -545,12 +544,6 @@ sc_tests_PATH_SEPARATOR: exit 1; \ fi -sc_mkdir_p: - @if grep 'mkdir_p' $(srcdir)/automake.in $(ams) $(xtests); then \ - echo 'Do not use mkdir_p in the above files, use MKDIR_P.' 1>&2; \ - exit 1; \ - fi - ## Try to make sure all @...@ substitutions are covered by our ## substitution rule. sc_perl_at_substs: diff --git a/t/gettext-macros.sh b/t/gettext-macros.sh index 8adcb0d..416a8e5 100755 --- a/t/gettext-macros.sh +++ b/t/gettext-macros.sh @@ -80,6 +80,13 @@ fi . ./get.sh +cat >> get.sh <<'END' +# Even recent versions of gettext used the now-obsolete 'AM_PROG_MKDIR_P' +# m4 macro. So we need the following to avoid spurious errors. +ACLOCAL="$ACLOCAL -Wno-obsolete" +AUTOMAKE="$AUTOMAKE -Wno-obsolete" +END + $ACLOCAL --force -I m4 || cat >> get.sh <<'END' # We need to use '-Wno-syntax', since we do not want our test suite # to fail merely because some third-party '.m4' file is underquoted. diff --git a/t/list-of-tests.mk b/t/list-of-tests.mk index fef7165..d692561 100644 --- a/t/list-of-tests.mk +++ b/t/list-of-tests.mk @@ -675,6 +675,7 @@ t/missing4.sh \ t/missing5.sh \ t/missing6.sh \ t/missing-auxfile-stops-makefiles-creation.sh \ +t/mkdirp-deprecation.sh \ t/mkinstall.sh \ t/mkinst2.sh \ t/mkinst3.sh \ diff --git a/t/mkdirp-deprecation.sh b/t/mkdirp-deprecation.sh new file mode 100755 index 0000000..7b8f67f --- /dev/null +++ b/t/mkdirp-deprecation.sh @@ -0,0 +1,48 @@ +#! /bin/sh +# Copyright (C) 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/>. + +# Check that the AM_PROG_MKDIR_P macro is deprecated. It will be +# be removed in the next major Automake release. + +. ./defs || Exit 1 + +echo AM_PROG_MKDIR_P >> configure.ac +: > Makefile.am + +grep_err () +{ + loc='^configure.ac:4:' + grep "$loc.*AM_PROG_MKDIR_P.*deprecated" stderr + grep "$loc.* use .*AC_PROG_MKDIR_P" stderr + grep "$loc.* use '\$(MKDIR_P)' instead of '\$(mkdir_p)'.*Makefile" stderr +} + +$ACLOCAL + +$AUTOCONF -Werror -Wobsolete 2>stderr && { cat stderr >&2; Exit 1; } +cat stderr >&2 +grep_err + +$AUTOCONF -Werror -Wno-obsolete + +#AUTOMAKE_fails +#grep_err +AUTOMAKE_fails --verbose -Wnone -Wobsolete +grep_err + +$AUTOMAKE -Wno-obsolete + +: -- 1.7.9.5