autoconf-patches
[Top][All Lists]
Advanced

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

[PATCH] avoid problems when _AS_BASENAME_EXPR is invoked before _AS_EXPR


From: Paolo Bonzini
Subject: [PATCH] avoid problems when _AS_BASENAME_EXPR is invoked before _AS_EXPR_PREPARE
Date: Thu, 9 Oct 2008 15:28:06 +0200

This is a latent bug that was fixed in patch 5/5.  When as_me is separated
in _AS_ME_PREPARE and so it is invoked in the M4SH-INIT diversion, it
expands _AS_BASENAME_PREPARE (and sometimes _AS_EXPR_PREPARE) right in
the middle of a command substitution, with horrible effects.  The
"right" fix would be to make AS_REQUIRE as smart as AC_REQUIRE, but
do we really want that since this only applies to m4sh constructs
happening in _AS_*_PREPARE macros?

I'll push this in a hour or two.

2008-10-09  Paolo Bonzini  <address@hidden>

        * m4sugar/m4sh.m4 (_AS_BASENAME_EXPR, _AS_DIRNAME_EXPR): Do not
        require _AS_EXPR_PREPARE.
        (_AS_BASENAME_PREPARE, _AS_DIRNAME_PREPARE): Do it here.
        (_AS_PREPARE): Add _AS_BASENAME_PREPARE.
---
 ChangeLog           |    7 +++++++
 lib/m4sugar/m4sh.m4 |   14 +++++++++-----
 2 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/lib/m4sugar/m4sh.m4 b/lib/m4sugar/m4sh.m4
index 4cdf591..2345879 100644
--- a/lib/m4sugar/m4sh.m4
+++ b/lib/m4sugar/m4sh.m4
@@ -259,6 +259,7 @@ m4_defun([_AS_PREPARE],
 [_AS_LINENO_PREPARE
 
 _AS_DIRNAME_PREPARE
+_AS_BASENAME_PREPARE
 _AS_ECHO_N_PREPARE[]dnl We do not need this ourselves but user code might.
 _AS_EXPR_PREPARE
 _AS_LN_S_PREPARE
@@ -708,8 +709,7 @@ m4_define([AS_ERROR],
 # Also see the comments for AS_DIRNAME.
 
 m4_defun([_AS_BASENAME_EXPR],
-[AS_REQUIRE([_AS_EXPR_PREPARE])dnl
-$as_expr X/[]$1 : '.*/\([[^/][^/]*]\)/*$' \| \
+[$as_expr X/[]$1 : '.*/\([[^/][^/]*]\)/*$' \| \
         X[]$1 : 'X\(//\)$' \| \
         X[]$1 : 'X\(/\)' \| .])
 
@@ -739,9 +739,12 @@ _AS_BASENAME_SED([$1])])
 # _AS_BASENAME_PREPARE
 # --------------------
 # Avoid Solaris 9 /usr/ucb/basename, as `basename /' outputs an empty line.
-# Also, traditional basename mishandles --.
+# Also, traditional basename mishandles --.  Require here _AS_EXPR_PREPARE,
+# to avoid problems when _AS_BASENAME is called from the M4SH-INIT diversion
+# (AS_REQUIRE is nowhere near being as sophisticated as AC_REQUIRE).
 m4_defun([_AS_BASENAME_PREPARE],
-[if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; 
then
+[AS_REQUIRE([_AS_EXPR_PREPARE])dnl
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
   as_basename=basename
 else
   as_basename=false
@@ -797,7 +800,8 @@ _AS_DIRNAME_SED([$1])])
 # _AS_DIRNAME_PREPARE
 # --------------------
 m4_defun([_AS_DIRNAME_PREPARE],
-[if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+[AS_REQUIRE([_AS_EXPR_PREPARE])dnl
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
   as_dirname=dirname
 else
   as_dirname=false
-- 
1.5.5





reply via email to

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