Index: ChangeLog =================================================================== RCS file: /cvsroot/autoconf/autoconf/ChangeLog,v retrieving revision 1.2847 diff -u -r1.2847 ChangeLog --- ChangeLog 24 Apr 2006 05:54:54 -0000 1.2847 +++ ChangeLog 24 Apr 2006 12:29:35 -0000 @@ -3,14 +3,6 @@ * doc/autoconf.texi (Run Time): Document the exit status situation with more accuracy and detail. - * NEWS: Remove mention of AS_VAR_SET_BASENAME and AS_VAR_SET_DIRNAME. - * doc/autoconf.texi (Programming in M4sh): Remove mention of - AS_VAR_SET_BASENAME, AS_VAR_SET_DIRNAME, and AS_BASENAME. - We have to keep AS_DIRNAME since it was part of a stable Autoconf, - but AS_BASENAME doesn't have to be supported. - - * lib/m4sugar/m4sh.m4 (AS_BASENAME, AS_DIRNAME): Bring these back. - 2006-04-23 Ralf Wildenhues * doc/autoconf.texi (Introduction): The GNU Autoconf Macro @@ -20,39 +12,17 @@ 2006-04-22 Paul Eggert - * NEWS: Remove AS_DIRNAME and AS_BASENAME, replacing them with - AS_VAR_SET_DIRNAME and AS_VAR_SET_BASENAME. - * doc/autoconf.texi (Programming in M4sh): Document this. All uses - changed. The newer interfaces are more reliable, as they allow - implementations that handle trailing newline correctly. For now, - we're in a freeze, so I did not include the more-reliable - implementations, but I wanted to correct the interface before 2.60 - goes out. - * lib/m4sugar/m4sh.m4 (_AS_DETECT_REQUIRED): Renamed from - AS_DETECT_REQUIRED. All uses changed. - (_AS_DETECT_SUGGESTED): Renamed from AS_DETECT_SUGGESTED. - All uses changed. - (_AS_DETECT_BETTER_SHELL): Put ;; at the end of a case. - (_AS_BASENAME): Renamed from AS_BASENAME. All uses changed. - Use "basename --" to protect against leading "-". - (_AS_BASENAME_EXPR): Renamed from AS_BASENAME_EXPR. All uses changed. - (_AS_BASENAME_SED): Renamed from AS_BASENAME_SED. All uses changed. - (_AS_BASENAME_PREPARE): Reject implementations that cannot handle "--". - (_AS_DIRNAME_PREPARE): Likewise. - (_AS_DIRNAME): Renamed from AS_DIRNAME. All uses changed. - (_AS_DIRNAME_EXPR): Renamed from AS_DIRNAME_EXPR. All uses changed. - (_AS_DIRNAME_SED): Renamed from AS_DIRNAME_SED. All uses changed. - Use "dirname --". - (AS_VAR_SET_BASENAME, AS_VAR_SET_DIRNAME): New macros. - * tests/m4sh.at (AS_VAR_SET_DIRNAME): Renamed from AS_DIRNAME. - Test the new API. Don't test internals, since they're probably - going to change anyway. - (AS_VAR_SET_BASENAME): Likewise, renamed from AS_BASENAME. - - * bin/autoconf.as: Don't use AS_BASENAME or AS_DIRNAME. This - removes a bootstrapping problem with the changes described above. - The AS_DIRNAME part wasn't used, anyway, and the AS_BASENAME - part can be done portably without all the deep Autoconf magic. + Prepare for deprecation of AS_BASENAME and AS_DIRNAME. + + * doc/autoconf.texi (Programming in M4sh): Comment out the + documentation of AS_BASENAME, for now. + (Shell Substitutions): Do not use AS_DIRNAME in an example. + (Limitations of Builtins) : Do not refer to + AS_BASENAME. + * bin/autoconf.as (dir): Remove the unused variable. + + * lib/m4sugar/m4sh.m4 (_AS_DETECT_BETTER_SHELL): Put ;; at the + end of a case. 2006-04-19 Ralf Wildenhues Index: bin/autoconf.as =================================================================== RCS file: /cvsroot/autoconf/autoconf/bin/autoconf.as,v retrieving revision 1.17 diff -u -r1.17 autoconf.as --- bin/autoconf.as 23 Apr 2006 06:49:53 -0000 1.17 +++ bin/autoconf.as 24 Apr 2006 12:29:35 -0000 @@ -67,11 +67,7 @@ This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."] -me=$0 -case $me in -*/autoconf) me=autoconf;; -*/*) me=`expr "X$me" : '.*/\(.*\)'`;; -esac +me=`AS_BASENAME([$0])` help="\ Try \`$me --help' for more information." Index: doc/autoconf.texi =================================================================== RCS file: /cvsroot/autoconf/autoconf/doc/autoconf.texi,v retrieving revision 1.999 diff -u -r1.999 autoconf.texi --- doc/autoconf.texi 24 Apr 2006 06:51:53 -0000 1.999 +++ doc/autoconf.texi 24 Apr 2006 12:29:53 -0000 @@ -9666,6 +9666,16 @@ M4sh provides portable alternatives for some common shell constructs that unfortunately are not portable in practice. address@hidden Deprecated, to be replaced by a better API address@hidden address@hidden AS_BASENAME (@var{file-name}) address@hidden +Output the non-directory portion of @var{file-name}. For example, +if @code{$file} is @samp{/one/two/three}, the command address@hidden(["$file"])`} sets @code{base} to @samp{three}. address@hidden defmac address@hidden ignore + @defmac AS_BOURNE_COMPATIBLE @asindex{BOURNE_COMPATIBLE} Set up the shell to be more compatible with the Bourne shell as @@ -12483,6 +12493,27 @@ Not all hosts have a working @command{basename}. You can use @command{expr} instead. address@hidden AS_BASENAME is to be replaced by a better API. address@hidden +Not all hosts have a working @command{basename}, and you should instead +use @code{AS_BASENAME} (@pxref{Programming in M4sh}), followed by address@hidden if you need to strip a suffix. For example: + address@hidden +a=`basename "$aname"` # This is not portable. +a=`AS_BASENAME(["$aname"])` # This is more portable. + +# This is not portable. +c=`basename "$cname" .c` + +# This is more portable. +c=`AS_BASENAME(["$cname"])` +case $c in +?*.c) c=`expr "X$c" : 'X\(.*\)\.c'`;; +esac address@hidden example address@hidden ignore + @item @command{cat} @c ---------------- Index: lib/autoconf/general.m4 =================================================================== RCS file: /cvsroot/autoconf/autoconf/lib/autoconf/general.m4,v retrieving revision 1.911 diff -u -r1.911 general.m4 --- lib/autoconf/general.m4 24 Apr 2006 06:51:53 -0000 1.911 +++ lib/autoconf/general.m4 24 Apr 2006 12:29:56 -0000 @@ -440,8 +440,8 @@ _AS_ECHO_N([checking for prefix by ]) AC_PATH_PROG(ac_prefix_program, [$1]) if test -n "$ac_prefix_program"; then - AS_VAR_SET_DIRNAME([prefix], ["$ac_prefix_program"]) - AS_VAR_SET_DIRNAME([prefix], ["$prefix"]) + prefix=`AS_DIRNAME(["$ac_prefix_program"])` + prefix=`AS_DIRNAME(["$prefix"])` fi fi ])# AC_PREFIX_PROGRAM @@ -489,7 +489,7 @@ if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. - AS_VAR_SET_DIRNAME([ac_confdir], ["$[0]"]) + ac_confdir=`AS_DIRNAME(["$[0]"])` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. Index: lib/autoconf/status.m4 =================================================================== RCS file: /cvsroot/autoconf/autoconf/lib/autoconf/status.m4,v retrieving revision 1.97 diff -u -r1.97 status.m4 --- lib/autoconf/status.m4 23 Apr 2006 06:49:53 -0000 1.97 +++ lib/autoconf/status.m4 24 Apr 2006 12:29:57 -0000 @@ -1427,7 +1427,7 @@ ;; esac - AS_VAR_SET_DIRNAME([ac_dir], ["$ac_file"]) + ac_dir=`AS_DIRNAME(["$ac_file"])` AS_MKDIR_P(["$ac_dir"]) _AC_SRCDIRS(["$ac_dir"]) Index: lib/m4sugar/m4sh.m4 =================================================================== RCS file: /cvsroot/autoconf/autoconf/lib/m4sugar/m4sh.m4,v retrieving revision 1.182 diff -u -r1.182 m4sh.m4 --- lib/m4sugar/m4sh.m4 23 Apr 2006 08:13:43 -0000 1.182 +++ lib/m4sugar/m4sh.m4 24 Apr 2006 12:29:59 -0000 @@ -150,7 +150,7 @@ # xx_REQUIRE macros, BODY-TO-EXPAND is mandatory. # m4_define([AS_REQUIRE_SHELL_FN], -[_AS_DETECT_REQUIRED([_AS_SHELL_FN_WORK])dnl +[AS_DETECT_REQUIRED([_AS_SHELL_FN_WORK])dnl m4_provide_if([AS_SHELL_FN_$1], [], [m4_provide([AS_SHELL_FN_$1])m4_divert_text([M4SH-INIT], [$1() { $2 @@ -191,26 +191,27 @@ [(eval "AS_ESCAPE(m4_quote($1))")])]) -# _AS_DETECT_REQUIRED(TEST) -# ------------------------- -# Refuse to execute under a shell that does not pass the given TEST. +# AS_DETECT_REQUIRED(TEST) +# ------------------------ +# Refuse to execute under a shell that does not pass +# the given TEST. m4_define([_AS_DETECT_REQUIRED_BODY], [:]) -m4_defun([_AS_DETECT_REQUIRED], +m4_defun([AS_DETECT_REQUIRED], [m4_require([_AS_DETECT_BETTER_SHELL])dnl m4_expand_once([m4_append([_AS_DETECT_REQUIRED_BODY], [ ($1) || AS_EXIT(1) -])], [_AS_DETECT_REQUIRED_provide($1)])]) +])], [AS_DETECT_REQUIRED_provide($1)])]) -# _AS_DETECT_SUGGESTED(TEST) -# -------------------------- +# AS_DETECT_SUGGESTED(TEST) +# ------------------------- # Prefer to execute under a shell that passes the given TEST. m4_define([_AS_DETECT_SUGGESTED_BODY], [:]) -m4_defun([_AS_DETECT_SUGGESTED], +m4_defun([AS_DETECT_SUGGESTED], [m4_require([_AS_DETECT_BETTER_SHELL])dnl m4_expand_once([m4_append([_AS_DETECT_SUGGESTED_BODY], [ ($1) || AS_EXIT(1) -])], [_AS_DETECT_SUGGESTED_provide($1)])]) +])], [AS_DETECT_SUGGESTED_provide($1)])]) # _AS_DETECT_BETTER_SHELL @@ -382,7 +383,7 @@ _AS_BASENAME_PREPARE # Name of the executable. -AS_VAR_SET_BASENAME([as_me], [$[0]]) +as_me=`AS_BASENAME("$[0]")` # CDPATH. $as_unset CDPATH @@ -659,18 +660,18 @@ # This section is lexicographically sorted. -# _AS_BASENAME(FILE-NAME) -# ----------------------- +# AS_BASENAME(FILE-NAME) +# ---------------------- # Simulate the command 'basename FILE-NAME'. Not all systems have basename. # Also see the comments for AS_DIRNAME. -m4_defun([_AS_BASENAME_EXPR], +m4_defun([AS_BASENAME_EXPR], [AS_REQUIRE([_AS_EXPR_PREPARE])dnl $as_expr X/[]$1 : '.*/\([[^/][^/]*]\)/*$' \| \ X[]$1 : 'X\(//\)$' \| \ X[]$1 : 'X\(/\)' \| .]) -m4_defun([_AS_BASENAME_SED], +m4_defun([AS_BASENAME_SED], [echo X/[]$1 | sed ['/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ @@ -686,24 +687,18 @@ } s/.*/./; q']]) -m4_defun([_AS_BASENAME], -[AS_REQUIRE([$0_PREPARE])dnl -$as_basename -- $1 || -_AS_BASENAME_EXPR([$1]) 2>/dev/null || -_AS_BASENAME_SED([$1])]) - -# Some programs rely on _AS_BASENAME being called AS_BASENAME. -# They should be rewritten to use AS_VAR_SET_BASENAME, but in -# the meantime we'll leave AS_BASENAME in as an undocumented macro. -m4_defun([AS_BASENAME], [_AS_BASENAME([$1])]) +m4_defun([AS_BASENAME], +[AS_REQUIRE([_$0_PREPARE])dnl +$as_basename $1 || +AS_BASENAME_EXPR([$1]) 2>/dev/null || +AS_BASENAME_SED([$1])]) # _AS_BASENAME_PREPARE # -------------------- # Avoid Solaris 9 /usr/ucb/basename, as `basename /' outputs an empty line. -# Also, traditional basename mishandles --. m4_defun([_AS_BASENAME_PREPARE], -[if as_basename=`(basename -- /) 2>&1` && test "X$as_basename" = "X/"; then +[if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false @@ -711,8 +706,8 @@ ])# _AS_BASENAME_PREPARE -# _AS_DIRNAME(FILE-NAME) -# ---------------------- +# AS_DIRNAME(FILE-NAME) +# --------------------- # Simulate the command 'dirname FILE-NAME'. Not all systems have dirname. # This macro must be usable from inside ` `. # @@ -722,14 +717,14 @@ # a silly length limit that causes expr to fail if the matched # substring is longer than 120 bytes. So fall back on echo|sed if # expr fails. -m4_defun([_AS_DIRNAME_EXPR], +m4_defun([AS_DIRNAME_EXPR], [AS_REQUIRE([_AS_EXPR_PREPARE])dnl $as_expr X[]$1 : 'X\(.*[[^/]]\)//*[[^/][^/]]*/*$' \| \ X[]$1 : 'X\(//\)[[^/]]' \| \ X[]$1 : 'X\(//\)$' \| \ X[]$1 : 'X\(/\)' \| .]) -m4_defun([_AS_DIRNAME_SED], +m4_defun([AS_DIRNAME_SED], [echo X[]$1 | sed ['/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ @@ -749,22 +744,17 @@ } s/.*/./; q']]) -m4_defun([_AS_DIRNAME], -[AS_REQUIRE([$0_PREPARE])dnl -$as_dirname -- $1 || -_AS_DIRNAME_EXPR([$1]) 2>/dev/null || -_AS_DIRNAME_SED([$1])]) - -# Some programs rely on _AS_DIRNAME being called AS_DIRNAME. -# They should be rewritten to use AS_VAR_SET_DIRNAME, but in -# the meantime we'll leave AS_DIRNAME in as an undocumented macro. -m4_defun([AS_DIRNAME], [_AS_DIRNAME([$1])]) +m4_defun([AS_DIRNAME], +[AS_REQUIRE([_$0_PREPARE])dnl +$as_dirname $1 || +AS_DIRNAME_EXPR([$1]) 2>/dev/null || +AS_DIRNAME_SED([$1])]) # _AS_DIRNAME_PREPARE # -------------------- m4_defun([_AS_DIRNAME_PREPARE], -[if (dirname -- /) >/dev/null 2>&1; then +[if (dirname /) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false @@ -821,7 +811,7 @@ # configure. m4_define([_AS_LINENO_PREPARE], [AS_REQUIRE([_AS_CR_PREPARE])dnl -_AS_DETECT_SUGGESTED([_AS_LINENO_WORKS]) +AS_DETECT_SUGGESTED([_AS_LINENO_WORKS]) _AS_LINENO_WORKS || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO @@ -917,7 +907,7 @@ as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" - AS_VAR_SET_DIRNAME([as_dir], ["$as_dir"]) + as_dir=`AS_DIRNAME("$as_dir")` done test ! -n "$as_dirs" || mkdir $as_dirs fi || AS_ERROR([cannot create directory $1]); }dnl @@ -1020,22 +1010,6 @@ ])# _AS_TEST_PREPARE -# AS_VAR_SET_BASENAME(VARIABLE, FILE-NAME) -# ---------------------------------------- -# Simulate VARIABLE=`basename FILE-NAME`. -m4_defun([AS_VAR_SET_BASENAME], -[$1=$2 -$1=`_AS_BASENAME(["$$1"])`]) - - -# AS_VAR_SET_DIRNAME(VARIABLE, FILE-NAME) -# --------------------------------------- -# Simulate the command VARIABLE=`dirname FILE-NAME`. -m4_defun([AS_VAR_SET_DIRNAME], -[$1=$2 -$1=`_AS_DIRNAME(["$$1"])`]) - - ## ------------------ ## @@ -1467,7 +1441,7 @@ # This temporary macro checks "in the wild" for shells that do # not support shell functions. m4_define([_AS_SHELL_FN_SPY], -[_AS_DETECT_SUGGESTED([_AS_SHELL_FN_WORK]) +[AS_DETECT_SUGGESTED([_AS_SHELL_FN_WORK]) _AS_RUN([_AS_SHELL_FN_WORK]) || { echo No shell found that supports shell functions. echo Please tell address@hidden about your system, Index: tests/m4sh.at =================================================================== RCS file: /cvsroot/autoconf/autoconf/tests/m4sh.at,v retrieving revision 1.46 diff -u -r1.46 m4sh.at --- tests/m4sh.at 23 Apr 2006 06:49:53 -0000 1.46 +++ tests/m4sh.at 24 Apr 2006 12:29:59 -0000 @@ -95,20 +95,33 @@ -## -------------------- ## -## AS_VAR_SET_DIRNAME. ## -## -------------------- ## +## ------------ ## +## AS_DIRNAME. ## +## ------------ ## # Build nested dirs. -AT_SETUP([AS@&address@hidden) +AT_SETUP([AS@&address@hidden) AT_DATA_M4SH([script.as], [[AS_INIT +# The EXPR variant is allowed to fail if `expr' was considered as too +# weak for us, in which case `as_expr=false'. m4_define([DIRNAME_TEST], -[AS_VAR_SET_DIRNAME([dir], [$1]) +[dir=`AS_DIRNAME([$1])` +test "$dir" = "$2" || (test -n "$3" && test "$dir" = "$3") || + echo "dirname($1) = $dir instead of $2" >&2 + +if test "$as_expr" != false; then + dir=`AS_DIRNAME_EXPR([$1])` + test "$dir" = "$2" || (test -n "$3" && test "$dir" = "$3") || + echo "dirname_expr($1) = $dir instead of $2" >&2 +fi + +dir=`AS_DIRNAME_SED([$1])` +test "$dir" = "$2" || test "$dir" = "$2" || (test -n "$3" && test "$dir" = "$3") || - echo "dirname($1) = $dir instead of $2" >&2]) + echo "dirname_sed($1) = $dir instead of $2" >&2]) DIRNAME_TEST([/], [/]) DIRNAME_TEST([//], [//], [/]) @@ -143,20 +156,24 @@ -## --------------------- ## -## AS_VAR_SET_BASENAME. ## -## --------------------- ## +## ------------- ## +## AS_BASENAME. ## +## ------------- ## # Build nested dirs. -AT_SETUP([AS@&address@hidden) +AT_SETUP([AS@&address@hidden) AT_DATA_M4SH([script.as], [[AS_INIT m4_define([BASENAME_TEST], -[AS_VAR_SET_BASENAME([base], [$1]) +[base=`AS_BASENAME([$1])` +test "$base" = "$2" || + echo "basename($1) = $base instead of $2" >&2 + +base=`AS_BASENAME_SED([$1])` test "$base" = "$2" || - echo "basename($1) = $base instead of $2" >&2]) + echo "basename_sed($1) = $base instead of $2" >&2]) BASENAME_TEST([//1], [1]) BASENAME_TEST([/1], [1])