maint: update gnulib and copyright dates for 2017
[debian/gzip] / m4 / shell.m4
index 07740aa306eefaa0b464c06975e4bd642eb97c02..ff5cf1aae2efea6c94fd9362042be5a81230fbac 100644 (file)
@@ -1,4 +1,20 @@
-#serial 5
+# Check for a working shell.
+
+# Copyright (C) 2000-2001, 2007, 2009-2017 Free Software Foundation, Inc.
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
 
 # AC_PROG_SHELL
 # -------------
@@ -9,52 +25,65 @@ AC_DEFUN([AC_PROG_SHELL],
   [AC_MSG_CHECKING([for a POSIX-compliant shell])
    AC_CACHE_VAL(ac_cv_path_shell,
      [ac_command='
-       # Test the noclobber option, using the portable POSIX.2 syntax.
-       set -C
-       rm -f conftest.c
-       >conftest.c || exit
-       >|conftest.c || exit
-       !>conftest.c || exit
-       # Test that $(...) works.
-       test "$(expr 3 + 4)" -eq 7 || exit
+        # Test the noclobber option, using the portable POSIX.2 syntax.
+        set -C
+        rm -f conftest.c
+        >conftest.c || exit
+        >|conftest.c || exit
+        !>conftest.c || exit
+        # Test that $(...) works.
+        test "$(expr 3 + 4)" -eq 7 || exit
       '
+      # Solaris 11 /bin/sh (AT&T Research) 93u 2011-02-08 has a file
+      # descriptor bug that breaks zgrep and is hard to test for
+      # directly.  At some point $(...) is reading a pipe from the
+      # subshell, but the pipe is also open in the parent shell, so
+      # the read deadlocks.  Prefer some other shell if available.
+      ac_maybe_solaris_sh_bug='test "${.sh.version}"'
+
       ac_cv_path_shell=no
 
       case $SHELL in
       /*)
-       rm -f conftest.c
-       if ("$SHELL" -c "$ac_command") 2>/dev/null; then
-         ac_cv_path_shell=$SHELL
-       fi;;
+        rm -f conftest.c
+        if ("$SHELL" -c "$ac_command") 2>/dev/null; then
+          "$SHELL" -c "$ac_maybe_solaris_sh_bug" 2>/dev/null ||
+            ac_cv_path_shell=$SHELL
+        fi
       esac
 
       case $ac_cv_path_shell in
       no)
-       # Prefer shells that are more likely to be installed in the
-       # same place on all hosts of this platform.  Therefore, prefer
-       # shells in /bin and /usr/bin to shells in the installer's
-       # PATH.  Also, loop through PATH first and then through
-       # shells, since less-"nice" shells in /bin and /usr/bin are
-       # more likely to be installed than "nicer" shells elsewhere.
-       as_save_IFS=$IFS; IFS=:
-       for as_dir in /bin /usr/bin $PATH
-       do
-         IFS=$as_save_IFS
-         case $as_dir in
-         /*)
-           for ac_base in sh bash ksh sh5; do
-             rm -f conftest.c
-             if ("$as_dir/$ac_base" -c "$ac_command") 2>/dev/null; then
-               ac_cv_path_shell=$as_dir/$ac_base
-               break
-             fi
-           done
-           case $ac_cv_path_shell in
-           /*) break;;
-           esac;;
-         esac
-       done
-       rm -f conftest.c;;
+        # Prefer shells that are more likely to be installed in the
+        # same place on all hosts of this platform.  Therefore, prefer
+        # shells in /bin and /usr/bin to shells in the installer's
+        # PATH.  Also, loop through PATH first and then through
+        # shells, since less-"nice" shells in /bin and /usr/bin are
+        # more likely to be installed than "nicer" shells elsewhere.
+        ac_break_if_good_shell=:
+        as_save_IFS=$IFS; IFS=:
+        for as_dir in /bin /usr/bin $PATH
+        do
+          IFS=$as_save_IFS
+          case $as_dir in
+          /*)
+            for ac_base in sh bash ksh sh5; do
+              rm -f conftest.c
+              if ("$as_dir/$ac_base" -c "$ac_command") 2>/dev/null; then
+                if "$as_dir/$ac_base" -c "$ac_maybe_solaris_sh_bug" 2>/dev/null
+                then
+                  test "$ac_cv_path_shell" = no
+                else
+                  ac_break_if_good_shell=break
+                  :
+                fi && ac_cv_path_shell=$as_dir/$ac_base
+                $ac_break_if_good_shell
+              fi
+            done
+            $ac_break_if_good_shell
+          esac
+        done
+        rm -f conftest.c
       esac])
    AC_MSG_RESULT($ac_cv_path_shell)
    SHELL=$ac_cv_path_shell
@@ -62,4 +91,7 @@ AC_DEFUN([AC_PROG_SHELL],
      SHELL=/bin/sh
      AC_MSG_WARN([using $SHELL, even though it does not conform to POSIX])
    fi
+   if "$SHELL" -c "$ac_maybe_solaris_sh_bug" 2>/dev/null; then
+     AC_MSG_WARN([using $SHELL, even though it may have file descriptor bugs])
+   fi
    AC_SUBST(SHELL)])