This is the mail archive of the automake@gnu.org mailing list for the automake project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: install-sh posix compliance


> From: Alexandre Duret-Lutz <duret_g@lrde.epita.fr>
> Date: Wed, 26 Jun 2002 18:44:45 +0200

>  Clint>   if [ -f $src -o -d $src ]
>  Clint> This is not strictly POSIX-conformant.  
> 
> Damn!  Are they removing things between revisions?

No, this conformance issue has been in the standard for a decade.  The
problem is that different versions of the "test" command assign
different priorities to the -o and -a operators, so they're not
portable (and POSIX does not standardize them).  This issue is covered
in the Autoconf manual.

I installed the following patch to the Autoconf sources, to fix this
issue along with some more minor POSIX portability issues that I
noticed at the same time.

2002-06-27  Paul Eggert  <eggert@twinsun.com>

	* config/install-sh: Quote $src.  Prefer || to test's -o option,
	as per "Limitations of Builtins".
	* tests/atspecific.m4 (AT_CHECK_ENV): Likewise, for && vs test -a.
	* tests/semantics.at (AC_C_BIGENDIAN): Likewise.

	* tests/mktests.sh: Use grep instead of fgrep, as per
	"Limitations of Builtins".  This substitution is safe, since
	the patterns cannot contain grep metacharacters.

Index: config/install-sh
===================================================================
RCS file: /cvsroot/autoconf/autoconf/config/install-sh,v
retrieving revision 1.1
diff -p -u -r1.1 install-sh
--- config/install-sh	22 May 2001 14:43:50 -0000	1.1
+++ config/install-sh	27 Jun 2002 07:45:29 -0000
@@ -128,7 +128,7 @@ else
 # might cause directories to be created, which would be especially bad 
 # if $src (and thus $dsttmp) contains '*'.
 
-	if [ -f $src -o -d $src ]
+	if [ -f "$src" ] || [ -d "$src" ]
 	then
 		:
 	else
Index: tests/atspecific.m4
===================================================================
RCS file: /cvsroot/autoconf/autoconf/tests/atspecific.m4,v
retrieving revision 1.70
diff -p -u -r1.70 atspecific.m4
--- tests/atspecific.m4	29 May 2002 22:29:26 -0000	1.70
+++ tests/atspecific.m4	27 Jun 2002 07:45:30 -0000
@@ -201,11 +201,11 @@ m4_define([AT_CHECK_CONFIGURE],
 # me tests might exit prematurely when they find a problem, in
 # which case `env-after' is probably missing.  Don't check it then.
 m4_define([AT_CHECK_ENV],
-[if test -f state-env.before -a -f state-env.after; then
+[if test -f state-env.before && test -f state-env.after; then
   mv -f state-env.before expout
   AT_CHECK([cat state-env.after], 0, expout)
 fi
-if test -f state-ls.before -a -f state-ls.after; then
+if test -f state-ls.before && test -f state-ls.after; then
   mv -f state-ls.before expout
   AT_CHECK([cat state-ls.after], 0, expout)
 fi
Index: tests/mktests.sh
===================================================================
RCS file: /cvsroot/autoconf/autoconf/tests/mktests.sh,v
retrieving revision 1.27
diff -p -u -r1.27 mktests.sh
--- tests/mktests.sh	7 Jun 2002 09:50:32 -0000	1.27
+++ tests/mktests.sh	27 Jun 2002 07:45:30 -0000
@@ -233,14 +233,14 @@ MK_EOF
 
     echo "# Modern macros."
     for macro in `cat acdefuns`; do
-      if fgrep "$macro" requires >/dev/null 2>&1; then :; else
+      if grep "$macro" requires >/dev/null 2>&1; then :; else
   	echo "AT_CHECK_MACRO([$macro])"
       fi
     done
     echo
     echo "# Obsolete macros."
     for macro in `cat audefuns`; do
-      if fgrep "$macro" requires >/dev/null 2>&1; then :; else
+      if grep "$macro" requires >/dev/null 2>&1; then :; else
   	echo "AT_CHECK_AU_MACRO([$macro])"
       fi
     done
@@ -249,7 +249,7 @@ MK_EOF
   # In one atomic step so that if something above fails, the trap
   # preserves the old version of the file.  If there is nothing to
   # check, output /rien du tout/[1].
-  if fgrep AT_CHECK ac$base.tat >/dev/null 2>&1; then
+  if grep AT_CHECK ac$base.tat >/dev/null 2>&1; then
     mv ac$base.tat ac$base.at
   else
     rm -f ac$base.tat ac$base.at
Index: tests/semantics.at
===================================================================
RCS file: /cvsroot/autoconf/autoconf/tests/semantics.at,v
retrieving revision 1.38
diff -p -u -r1.38 semantics.at
--- tests/semantics.at	20 Apr 2002 06:09:02 -0000	1.38
+++ tests/semantics.at	27 Jun 2002 07:45:30 -0000
@@ -353,11 +353,11 @@ _AT_CHECK_AC_MACRO(
   [cross_compiling=yes
    AC_C_BIGENDIAN([ac_endian=big],[ac_endian=little],[ac_endian=unknown])
    ac_prevendian=`cat at-endian`
-   # Chech we have found the same result as in the previous run
+   # Check that we have found the same result as in the previous run
    # or unknown (because the cross-compiling check is allowed to fail;
    # although it might be interesting to suppress this comparison, just
    # to know on which system it fails if it ever does).
-   if test $ac_endian != $ac_prevendian -a $ac_endian != unknown; then
+   if test $ac_endian != $ac_prevendian && test $ac_endian != unknown; then
      AC_MSG_ERROR([unexpected endianness: first run found '$ac_prevendian' but second run found '$ac_endian'])
    fi
 ])



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]