summaryrefslogtreecommitdiffstats
path: root/m4/posix-shell.m4
blob: 4c56193c1571dbf86074727a933b44c739bf70b7 (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
# Find a POSIX-conforming shell.

# Copyright (C) 2007-2008 Free Software Foundation, Inc.

# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# Written by Paul Eggert.

# If a POSIX-conforming shell can be found, set POSIX_SHELL and
# PREFERABLY_POSIX_SHELL to it.  If not, set POSIX_SHELL to the
# empty string and PREFERABLY_POSIX_SHELL to '/bin/sh'.

AC_DEFUN([gl_POSIX_SHELL],
[
  AC_CACHE_CHECK([for a shell that conforms to POSIX], [gl_cv_posix_shell],
    [gl_test_posix_shell_script='
       func_return () {
	 (exit [$]1)
       }
       func_success () {
	 func_return 0
       }
       func_failure () {
	 func_return 1
       }
       func_ret_success () {
	 return 0
       }
       func_ret_failure () {
	 return 1
       }
       subshell_umask_sanity () {
	 (umask 22; (umask 0); test $(umask) -eq 22)
       }
       test "[$](echo foo)" = foo &&
       func_success &&
       ! func_failure &&
       func_ret_success &&
       ! func_ret_failure &&
       (set x && func_ret_success y && test x = "[$]1") &&
       subshell_umask_sanity
     '
     for gl_cv_posix_shell in \
	 "$CONFIG_SHELL" "$SHELL" /bin/sh /bin/bash /bin/ksh /bin/sh5 no; do
       case $gl_cv_posix_shell in
         /*)
	   "$gl_cv_posix_shell" -c "$gl_test_posix_shell_script" 2>/dev/null \
	     && break;;
       esac
     done])

  if test "$gl_cv_posix_shell" != no; then
    POSIX_SHELL=$gl_cv_posix_shell
    PREFERABLY_POSIX_SHELL=$POSIX_SHELL
  else
    POSIX_SHELL=
    PREFERABLY_POSIX_SHELL=/bin/sh
  fi
  AC_SUBST([POSIX_SHELL])
  AC_SUBST([PREFERABLY_POSIX_SHELL])
])