summaryrefslogtreecommitdiff
path: root/m4/shell.m4
blob: a4b554dc2dec470274f4c3414b98185571392faf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# Check for a working shell.

# Copyright (C) 2000-2001, 2007, 2009-2016 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
# -------------
# Check for a working (i.e. POSIX-compatible) shell.
# Written by Paul Eggert <eggert@twinsun.com>,
# from an idea suggested by Albert Chin-A-Young <china@thewrittenword.com>.
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
      '
      # 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
          "$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.
        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
   if test "$SHELL" = no; then
     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)])