automake-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

reinstate AM_PROG_MKDIR_P


From: Jim Meyering
Subject: reinstate AM_PROG_MKDIR_P
Date: Thu, 25 Oct 2012 19:32:20 +0200

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 <address@hidden>
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


address@hidden Obsolete Macros
address@hidden Obsolete Macros
address@hidden obsolete macros
address@hidden 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
address@hidden, autoconf, The Autoconf Manual}).
address@hidden it NOW!}
+
address@hidden @code
+
address@hidden AM_CONFIG_HEADER
address@hidden 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}).
+
address@hidden AM_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL
address@hidden 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.
+
address@hidden AM_PROG_MKDIR_P
address@hidden AM_PROG_MKDIR_P
address@hidden @code{mkdir -p}, macro check
address@hidden MKDIR_P
address@hidden 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
address@hidden (@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.
+
address@hidden AM_SYS_POSIX_TERMIOS
address@hidden AM_SYS_POSIX_TERMIOS
address@hidden POSIX termios headers
address@hidden 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
address@hidden  If not, set the variable to @samp{no}.  This macro is obsolete,
+you should use Autoconf's @code{AC_SYS_POSIX_TERMIOS} instead.
+
address@hidden 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(address@hidden)])' >> 
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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]