[Top][All Lists]
[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
- [PATCH] avoid problems when _AS_BASENAME_EXPR is invoked before _AS_EXPR_PREPARE,
Paolo Bonzini <=