bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

New module posix-shell


From: Paul Eggert
Subject: New module posix-shell
Date: Thu, 15 Nov 2007 16:30:52 -0800
User-agent: Gnus/5.11 (Gnus v5.11) Emacs/22.1 (gnu/linux)

This is another module I'm finding useful when converting coreutils
"make check" to run on Solaris.  The coreutils tests now assume
features of the POSIX shell but they use /bin/sh which (on Solaris) is
still missing important POSIX features like shell functions.  Luckily,
Solaris has shipped with good-enough shells for quite some time
(/bin/bash is part of Solaris 8, for example) so this is not hard to
work around if the right info is available.

2007-11-15  Paul Eggert  <address@hidden>

        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.

diff --git a/MODULES.html.sh b/MODULES.html.sh
index 43f4395..e825ce3 100755
--- a/MODULES.html.sh
+++ b/MODULES.html.sh
@@ -2731,6 +2731,7 @@ func_all_modules ()
   func_module gnu-make
   func_module host-os
   func_module perl
+  func_module posix-shell
   func_module uptime
   func_end_table
 }
diff --git a/m4/posix-shell.m4 b/m4/posix-shell.m4
new file mode 100644
index 0000000..ac526d5
--- /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])
+])
diff --git a/modules/posix-shell b/modules/posix-shell
new file mode 100644
index 0000000..aafd5b7
--- /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 address@hidden $@
+#      sed -e 's#@''PREFERABLY_POSIX_SHELL''@#$(PREFERABLY_POSIX_SHELL)#g' \
+#          -e 's#@''POSIX_SHELL''@#$(POSIX_SHELL)#g' \
+#          -e $(srcdir)/address@hidden >address@hidden
+#      chmod a+x address@hidden
+#      mv address@hidden $@
+#EXTRA_DIST += script.in
+#MOSTLYCLEANFILES += script script-t
+
+Include:
+
+License:
+GPL
+
+Maintainer:
+Paul Eggert




reply via email to

[Prev in Thread] Current Thread [Next in Thread]