You wrote: > OK, if someone sends a patch reverting the AM_PROG_MKDIR_P removal (with a > rationale in the commit message), I'll take it. But AM_PROG_MKDIR_P will > be dropped in 1.14, without further "ifs" or "buts".
Hi Stefano, Here's the promised patch. This is relative to "master" and "make check" still passes. I have spent too little time investigating the merge conflicts, so odds are good that you'll find more than nits to pick. >From 0593ddfd6f6a2ed58aaa1aa7e0b361d4a5108924 Mon Sep 17 00:00:00 2001 From: Jim Meyering <j...@meyering.net> Date: Mon, 22 Oct 2012 16:14:49 +0200 Subject: [PATCH] reinstate AM_PROG_MKDIR_P Do not remove AM_PROG_MKDIR_P just yet. gettext (latest from git) still AC_REQUIRE's AM_PROG_MKDIR_P via its intl.m4 and po.m4 files, which are pulled into *many* projects. When I try to build one of those projects (coreutils) using the latest from automake.git/master, I see this failure: $ aclocal -I m4 configure.ac:477: warning: AM_PROG_MKDIR_P is m4_require'd \ but not m4_defun'd m4/po.m4:23: AM_PO_SUBDIRS is expanded from... m4/gettext.m4:57: AM_GNU_GETTEXT is expanded from... configure.ac:477: the top level That is because AM_PROG_MKDIR_P was removed (via commit v1.12-20-g8a1c64f) in preparation for the next release of automake. * NEWS: Remove the paragraph that announced the removal of AM_PROG_MKDIR_P. * Makefile.am (dist_automake_ac_DATA): Add m4/mkdirp.m4. * m4/mkdirp.m4: Re-add file. * t/mkdirp-deprecation.sh: Likewise. * t/list-of-tests.mk: Add it. * automake.in: Restore removed code, and adjust comments, s/1.13/1.14/ to reflect new plan for removal. * doc/automake.texi (Obsolete Macros): Restore deleted section. --- Makefile.am | 1 + automake.in | 9 +++++++ doc/automake.texi | 62 +++++++++++++++++++++++++++++++++++++++++++++++++ m4/mkdirp.m4 | 31 +++++++++++++++++++++++++ t/gettext-macros.sh | 13 +++++++---- t/list-of-tests.mk | 1 + t/mkdirp-deprecation.sh | 48 ++++++++++++++++++++++++++++++++++++++ 7 files changed, 160 insertions(+), 5 deletions(-) create mode 100644 m4/mkdirp.m4 create mode 100755 t/mkdirp-deprecation.sh diff --git a/Makefile.am b/Makefile.am index e629787..0e959da 100644 --- a/Makefile.am +++ b/Makefile.am @@ -276,6 +276,7 @@ dist_automake_ac_DATA = \ m4/make.m4 \ m4/minuso.m4 \ m4/missing.m4 \ + m4/mkdirp.m4 \ m4/options.m4 \ m4/protos.m4 \ m4/python.m4 \ diff --git a/automake.in b/automake.in index 9c0c8b9..32389f4 100644 --- a/automake.in +++ b/automake.in @@ -5128,6 +5128,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.14 AM_CONDITIONAL => 2, _AM_EXTRA_RECURSIVE_TARGETS => 1, AM_GNU_GETTEXT => 0, @@ -5283,6 +5284,14 @@ sub scan_autoconf_traces ($) $seen_automake_version = 1; } + elsif ($macro eq 'AM_PROG_MKDIR_P') # FIXME: to be removed in 1.14 + { + 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/doc/automake.texi b/doc/automake.texi index 7058545..aa6f67d 100644 --- a/doc/automake.texi +++ b/doc/automake.texi @@ -3880,6 +3880,7 @@ Macros @menu * Public Macros:: Macros that you can use. +* Obsolete Macros:: Macros that will soon be removed. * Private Macros:: Macros that you should not use. @end menu @@ -4046,6 +4047,67 @@ Public Macros @end table +@node Obsolete Macros +@subsection Obsolete Macros +@cindex obsolete macros +@cindex autoupdate + +Although using some of the following macros was required in past +releases, you should not use any of them in new code. @emph{All +these macros will be removed in the next major Automake version}; +if you are still using them, running @command{autoupdate} should +adjust your @file{configure.ac} automatically (@pxref{autoupdate +Invocation, , Using @command{autoupdate} to Modernize +@file{configure.ac}, autoconf, The Autoconf Manual}). +@emph{Do it NOW!} + +@table @code + +@item AM_CONFIG_HEADER +@acindex AM_CONFIG_HEADER +Automake will generate rules to automatically regenerate the config +header. This obsolete macro is a synonym of @code{AC_CONFIG_HEADERS} +today (@pxref{Optional}). + +@item AM_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL +@acindex AM_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL +If the use of @code{TIOCGWINSZ} requires @file{<sys/ioctl.h>}, then +define @code{GWINSZ_IN_SYS_IOCTL}. Otherwise @code{TIOCGWINSZ} can be +found in @file{<termios.h>}. This macro is obsolete, you should +use Autoconf's @code{AC_HEADER_TIOCGWINSZ} instead. + +@item AM_PROG_MKDIR_P +@acindex AM_PROG_MKDIR_P +@cindex @code{mkdir -p}, macro check +@vindex MKDIR_P +@vindex mkdir_p + +From Automake 1.8 to 1.9.6 this macro used to define the output +variable @code{mkdir_p} to one of @code{mkdir -p}, @code{install-sh +-d}, or @code{mkinstalldirs}. + +Nowadays Autoconf provides a similar functionality with +@code{AC_PROG_MKDIR_P} (@pxref{Particular Programs, , Particular +Program Checks, autoconf, The Autoconf Manual}), however this defines +the output variable @code{MKDIR_P} instead. In case you are still +using the @code{AM_PROG_MKDIR_P} macro in your @file{configure.ac}, +or its provided variable @code{$(mkdir_p)} in your @file{Makefile.am}, +you are advised to switch ASAP to the more modern Autoconf-provided +interface instead; both the macro and the variable @emph{will be +removed} in the next major Automake release. + +@item AM_SYS_POSIX_TERMIOS +@acindex AM_SYS_POSIX_TERMIOS +@cindex POSIX termios headers +@cindex termios POSIX headers +Check to see if POSIX termios headers and functions are available on the +system. If so, set the shell variable @code{am_cv_sys_posix_termios} to +@samp{yes}. If not, set the variable to @samp{no}. This macro is obsolete, +you should use Autoconf's @code{AC_SYS_POSIX_TERMIOS} instead. + +@end table + + @node Private Macros @subsection Private Macros diff --git a/m4/mkdirp.m4 b/m4/mkdirp.m4 new file mode 100644 index 0000000..93c12b0 --- /dev/null +++ b/m4/mkdirp.m4 @@ -0,0 +1,31 @@ +## -*- Autoconf -*- +# Copyright (C) 2003-2012 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_MKDIR_P +# --------------- +# Check for 'mkdir -p'. +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.14. +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. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) diff --git a/t/gettext-macros.sh b/t/gettext-macros.sh index cbc5565..f6424ae 100755 --- a/t/gettext-macros.sh +++ b/t/gettext-macros.sh @@ -61,7 +61,10 @@ AM_GNU_GETTEXT AM_GNU_GETTEXT_VERSION([$autopoint_version]) END -if ! ($am_gettextize_command --force && test -f m4/gettext.m4); then +if $am_gettextize_command --force && test -f m4/gettext.m4; then + echo "ACLOCAL_PATH='$(pwd)/m4':\$ACLOCAL_PATH" >> get.sh + echo "export ACLOCAL_PATH" >> get.sh +else # Older versions of gettext might not have a gettextize program # available, but this doesn't mean the user hasn't made the gettext # macros available, e.g., by properly setting ACLOCAL_PATH. @@ -75,12 +78,12 @@ if ! ($am_gettextize_command --force && test -f m4/gettext.m4); then fi fi -echo "ACLOCAL_PATH='$(pwd)/m4':\$ACLOCAL_PATH" >> get.sh -echo "export ACLOCAL_PATH" >> 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. -echo 'AC_DEFUN([AM_PROG_MKDIR_P], [AC_PROG_MKDIR_P([$@])])' >> m4/mk-dirp.m4 +ACLOCAL="$ACLOCAL -Wno-obsolete" +AUTOMAKE="$AUTOMAKE -Wno-obsolete" +END . ./get.sh diff --git a/t/list-of-tests.mk b/t/list-of-tests.mk index c3b8cf4..72f737b 100644 --- a/t/list-of-tests.mk +++ b/t/list-of-tests.mk @@ -683,6 +683,7 @@ t/missing3.sh \ t/am-missing-prog.sh \ t/missing-auxfile-stops-makefiles-creation.sh \ t/mkdir_p.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..8482dea --- /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.8.0