autoconf-commit
[Top][All Lists]
Advanced

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

[SCM] GNU Autoconf source repository branch, master, updated. v2.67-38-g


From: Eric Blake
Subject: [SCM] GNU Autoconf source repository branch, master, updated. v2.67-38-gd1bea51
Date: Fri, 27 Aug 2010 16:30:30 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Autoconf source repository".

http://git.sv.gnu.org/gitweb/?p=autoconf.git;a=commitdiff;h=d1bea5123b8ecb406fbeabbe70552271f60de8e7

The branch, master has been updated
       via  d1bea5123b8ecb406fbeabbe70552271f60de8e7 (commit)
      from  270b8340863c11c5e51bb2841a58974edf52e0db (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit d1bea5123b8ecb406fbeabbe70552271f60de8e7
Author: Eric Blake <address@hidden>
Date:   Wed Aug 25 16:56:37 2010 -0600

    m4sh: assume ${a:-b} support
    
    * tests/m4sh.at (Null variable substitution): New test.
    * doc/autoconf.texi (Shell Substitutions) <${var:-value}>: Mention
    that m4sh guarantees support.
    (Limitations of Usual Tools) <mktemp>: Use it.
    * lib/m4sugar/m4sh.m4 (AS_LINENO_POP, AS_VAR_IF, AS_TMPDIR):
    Exploit use of colon for smaller files.
    
    Signed-off-by: Eric Blake <address@hidden>

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog           |   10 ++++++++
 doc/autoconf.texi   |    5 +++-
 lib/m4sugar/m4sh.m4 |   14 +++++++----
 tests/m4sh.at       |   64 +++++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 87 insertions(+), 6 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 92132b3..236bfcd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2010-08-27  Eric Blake  <address@hidden>
+
+       m4sh: assume ${a:-b} support
+       * tests/m4sh.at (Null variable substitution): New test.
+       * doc/autoconf.texi (Shell Substitutions) <${var:-value}>: Mention
+       that m4sh guarantees support.
+       (Limitations of Usual Tools) <mktemp>: Use it.
+       * lib/m4sugar/m4sh.m4 (AS_LINENO_POP, AS_VAR_IF, AS_TMPDIR):
+       Exploit use of colon for smaller files.
+
 2010-08-26  Eric Blake  <address@hidden>
 
        docs: document m4_define_default
diff --git a/doc/autoconf.texi b/doc/autoconf.texi
index 996525a..95500be 100644
--- a/doc/autoconf.texi
+++ b/doc/autoconf.texi
@@ -15425,6 +15425,9 @@ bad substitution
 Old BSD shells, including the Ultrix @code{sh}, don't accept the
 colon for any shell substitution, and complain and die.
 Similarly for address@hidden@var{var}:address@hidden@}, 
address@hidden@var{var}:address@hidden@}, etc.
+However, all shells that support functions allow the use of colon in
+shell substitution, and since m4sh requires functions, you can portably
+use null variable substitution patterns in configure scripts.
 
 @item address@hidden@address@hidden@}
 @cindex address@hidden@address@hidden@}
@@ -18425,7 +18428,7 @@ Here is sample code to create a new temporary directory 
safely:
 # Create a temporary directory $tmp in $TMPDIR (default /tmp).
 # Use mktemp if possible; otherwise fall back on mkdir,
 # with $RANDOM to make collisions less likely.
-: "address@hidden/address@hidden"
+: "address@hidden:=/address@hidden"
 @{
   tmp=`
     (umask 077 && mktemp -d "$TMPDIR/fooXXXXXX") 2>/dev/null
diff --git a/lib/m4sugar/m4sh.m4 b/lib/m4sugar/m4sh.m4
index 2f8baec..8343b25 100644
--- a/lib/m4sugar/m4sh.m4
+++ b/lib/m4sugar/m4sh.m4
@@ -859,8 +859,10 @@ m4_defun([AS_LINENO_PUSH],
 # -----------------------
 # If this is call balances the outermost call to AS_LINENO_PUSH,
 # AS_MESSAGE will restart printing $LINENO as the line number.
+#
+# No need to use AS_UNSET, since as_lineno is necessarily set.
 m4_defun([AS_LINENO_POP],
-[eval $as_lineno_stack; test "x$as_lineno_stack" = x && AS_UNSET([as_lineno])])
+[eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno])
 
 
 
@@ -1620,7 +1622,7 @@ m4_define([_AS_LITERAL_HEREDOC_IF_NO], [$2])
 # it is a documented part of the public API and must not be changed.
 m4_define([AS_TMPDIR],
 [# Create a (secure) tmp directory for tmp files.
-m4_if([$2], [], [: "${TMPDIR=/tmp}"])
+m4_if([$2], [], [: "${TMPDIR:=/tmp}"])
 {
   tmp=`(umask 077 && mktemp -d "m4_default([$2],
     [$TMPDIR])/$1XXXXXX") 2>/dev/null` &&
@@ -1984,10 +1986,12 @@ m4_define([AS_VAR_GET],
 # Polymorphic, and avoids sh expansion error upon interrupt or term signal.
 m4_define([AS_VAR_IF],
 [AS_LITERAL_WORD_IF([$1],
-  [AS_IF([test "x$$1" = x""$2]],
+  [AS_IF(m4_ifval([$2], [[test "x$$1" = x[]$2]], [[${$1:+false} :]])],
   [AS_VAR_COPY([as_val], [$1])
-   AS_IF([test "x$as_val" = x""$2]],
-  [AS_IF([eval test \"x\$"$1"\" = x"_AS_ESCAPE([$2], [`], [\"$])"]]),
+   AS_IF(m4_ifval([$2], [[test "x$as_val" = x[]$2]], [[${as_val:+false} :]])],
+  [AS_IF(m4_ifval([$2],
+    [[eval test \"x\$"$1"\" = x"_AS_ESCAPE([$2], [`], [\"$])"]],
+    [[eval \${$1:+false} :]])]),
 [$3], [$4])])
 
 
diff --git a/tests/m4sh.at b/tests/m4sh.at
index de2bdc9..e73c971 100644
--- a/tests/m4sh.at
+++ b/tests/m4sh.at
@@ -552,7 +552,71 @@ AT_CHECK([$CONFIG_SHELL ./script])
 
 AT_CLEANUP
 
+## ---------------------------- ##
+## Null variable substitution.  ##
+## ---------------------------- ##
 
+# According to http://www.in-ulm.de/~mascheck/bourne/, all shells with
+# functions also support `${a:-b}'.
+
+AT_SETUP([Null variable substitution])
+AT_KEYWORDS([m4sh])
+
+AT_DATA_M4SH([script.as],
+[[AS_INIT
+
+AS_UNSET([a])
+b=
+c=.
+case ${a:-x}${b:-y}${c:-z} in
+  xy.) ;;
+  *) exit 1 ;;
+esac
+case ${a-x}${b-y}${c-z} in
+  x.) ;;
+  *) exit 2 ;;
+esac
+
+case ${a+x}${b+y}${c+z} in
+  yz) ;;
+  *) exit 3 ;;
+esac
+case ${a:+x}${b:+y}${c:+z} in
+  z) ;;
+  *) exit 4 ;;
+esac
+
+case ${a=x}${b=y}${c=z} in
+  x.) ;;
+  *) exit 5 ;;
+esac
+AS_UNSET([a])
+case ${a:=x}${b:=y}${c:=z} in
+  xy.) ;;
+  *) exit 6 ;;
+esac
+case $a$b$c in
+  xy.) ;;
+  *) exit 7 ;;
+esac
+AS_UNSET([a])
+b=
+
+(: ${a?oops}; echo fail) 2>err && exit 8
+grep oops err >/dev/null || exit 9
+test "${b?oops}" = '' || exit 10
+test "${c?oops}" = . || exit 11
+(: ${a:?oops}; echo fail) 2>err && exit 12
+grep oops err >/dev/null || exit 13
+(: ${b:?oops}; echo fail) 2>err && exit 14
+grep oops err >/dev/null || exit 15
+test "${c:?oops}" = . || exit 16
+]])
+
+AT_CHECK_M4SH
+AT_CHECK([$CONFIG_SHELL ./script])
+
+AT_CLEANUP
 
 
 ## ------------------- ##


hooks/post-receive
-- 
GNU Autoconf source repository



reply via email to

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