changeset 9478:c96110318f14

New module posix-shell, for determining a POSIX shell or perhaps something that is close enough to a POSIX shell. * m4/posix-shell.m4: New file. * modules/posix-shell: New file. * MODULES.html.sh: Mention new module.
author Paul Eggert <eggert@cs.ucla.edu>
date Thu, 15 Nov 2007 16:28:05 -0800
parents 96f72b145235
children 5c14f373b379
files ChangeLog MODULES.html.sh m4/posix-shell.m4 modules/posix-shell
diffstat 4 files changed, 95 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2007-11-15  Paul Eggert  <eggert@cs.ucla.edu>
 
+	New module posix-shell, for determining a POSIX shell
+	or perhaps something that is close enough to a POSIX shell.
+	* m4/posix-shell.m4: New file.
+	* modules/posix-shell: New file.
+	* MODULES.html.sh: Mention new module.
+
 	New module gnu-make, for determining whether we're using GNU Make.
 	* m4/gnu-make.m4: New file.
 	* modules/gnu-make: New file.
--- a/MODULES.html.sh
+++ b/MODULES.html.sh
@@ -2731,6 +2731,7 @@
   func_module gnu-make
   func_module host-os
   func_module perl
+  func_module posix-shell
   func_module uptime
   func_end_table
 }
new file mode 100644
--- /dev/null
+++ b/m4/posix-shell.m4
@@ -0,0 +1,58 @@
+# Find a POSIX-conforming shell.
+
+# Copyright (C) 2007 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='
+       func_return () {
+	 (exit [$]1)
+       }
+       func_success () {
+	 func_return 0
+       }
+       func_failure () {
+	 func_return 1
+       }
+       func_ret_success () {
+	 return 0
+       }
+       func_ret_failure () {
+	 return 1
+       }
+       test "[$](echo foo)" = foo &&
+       func_success &&
+       ! func_failure &&
+       func_ret_success &&
+       ! func_ret_failure &&
+       (set x && func_ret_success y && test x = "[$]1")
+     '
+     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" 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])
+])
new file mode 100644
--- /dev/null
+++ b/modules/posix-shell
@@ -0,0 +1,30 @@
+Description:
+Find a POSIX-conforming shell.
+
+Files:
+m4/posix-shell.m4
+
+Depends-on:
+
+configure.ac:
+gl_POSIX_SHELL
+
+Makefile.am:
+##Sample usage of posix-shell module:
+#script: script.in
+#	rm -f $@-t $@
+#	sed -e 's#@''PREFERABLY_POSIX_SHELL''@#$(PREFERABLY_POSIX_SHELL)#g' \
+#	    -e 's#@''POSIX_SHELL''@#$(POSIX_SHELL)#g' \
+#	    -e $(srcdir)/$@.in >$@-t
+#	chmod a+x $@-t
+#	mv $@-t $@
+#EXTRA_DIST += script.in
+#MOSTLYCLEANFILES += script script-t
+
+Include:
+
+License:
+GPL
+
+Maintainer:
+Paul Eggert