1# Find a POSIX-conforming shell.
2
3# Copyright (C) 2007-2008 Free Software Foundation, Inc.
4
5# This file is free software; the Free Software Foundation
6# gives unlimited permission to copy and/or distribute it,
7# with or without modifications, as long as this notice is preserved.
8
9# Written by Paul Eggert.
10
11# If a POSIX-conforming shell can be found, set POSIX_SHELL and
12# PREFERABLY_POSIX_SHELL to it.  If not, set POSIX_SHELL to the
13# empty string and PREFERABLY_POSIX_SHELL to '/bin/sh'.
14
15AC_DEFUN([gl_POSIX_SHELL],
16[
17  AC_CACHE_CHECK([for a shell that conforms to POSIX], [gl_cv_posix_shell],
18    [gl_test_posix_shell_script='
19       func_return () {
20	 (exit [$]1)
21       }
22       func_success () {
23	 func_return 0
24       }
25       func_failure () {
26	 func_return 1
27       }
28       func_ret_success () {
29	 return 0
30       }
31       func_ret_failure () {
32	 return 1
33       }
34       subshell_umask_sanity () {
35	 (umask 22; (umask 0); test $(umask) -eq 22)
36       }
37       test "[$](echo foo)" = foo &&
38       func_success &&
39       ! func_failure &&
40       func_ret_success &&
41       ! func_ret_failure &&
42       (set x && func_ret_success y && test x = "[$]1") &&
43       subshell_umask_sanity
44     '
45     for gl_cv_posix_shell in \
46	 "$CONFIG_SHELL" "$SHELL" /bin/sh /bin/bash /bin/ksh /bin/sh5 no; do
47       case $gl_cv_posix_shell in
48         /*)
49	   "$gl_cv_posix_shell" -c "$gl_test_posix_shell_script" 2>/dev/null \
50	     && break;;
51       esac
52     done])
53
54  if test "$gl_cv_posix_shell" != no; then
55    POSIX_SHELL=$gl_cv_posix_shell
56    PREFERABLY_POSIX_SHELL=$POSIX_SHELL
57  else
58    POSIX_SHELL=
59    PREFERABLY_POSIX_SHELL=/bin/sh
60  fi
61  AC_SUBST([POSIX_SHELL])
62  AC_SUBST([PREFERABLY_POSIX_SHELL])
63])
64