]> diplodocus.org Git - nmh/blobdiff - test/install-mh/test-version-check
test/common.sh.in: Clarify test name in failure message.
[nmh] / test / install-mh / test-version-check
index 406fc70a9a5b16bccfea43d6b40f9f7f31580a9e..dfe6c9b68f2a89d5e3a833ca269f34633687ed69 100755 (executable)
@@ -24,12 +24,39 @@ context="${MH_TEST_DIR}"/Mail/context
 version="Version: nmh-${MH_VERSION}"
 cmd="${MH_TEST_DIR}/Mail/cmd"
 
+#### Hack:  especially on multicore/multiprocessor machines, need
+#### to allow time for the output file to be closed.  If the output
+#### file never reaches a size greater than zero after waiting for
+#### a short while, let a subsequent check fail to find what it needs.
+#### $1: pid to wait for
+#### $2: output file that must eventually have non-zero size
+wait_for_script() {
+    wait $1
+
+    for i in 1 2 3 4 5 6 7 8 9 10; do
+        test -s "$2"  &&  break  ||  sleep 1
+    done
+}
+
+
 if script -S /bin/sh 'echo OK' /dev/null 2>&1 | egrep 'OK' >/dev/null; then
     #### script(1) uses -S to set the shell that it runs.
     use_dash_S=1
 else
-    #### Assume that script(1) uses SHELL environment variable.
-    use_dash_S=0
+    cat >"${cmd}" <<EOF
+#! /bin/sh
+echo OK
+EOF
+    chmod +x "${cmd}"
+
+    (SHELL="${cmd}"; export SHELL; script "${actual}" >/dev/null &
+     wait_for_script $! "${actual}")
+    if grep OK "${actual}" >/dev/null; then
+        #### script(1) supports SHELL environment variable.
+        use_dash_S=0
+    else
+        test_skip "can't find mechanism to set SHELL for script(1)"
+    fi
 fi
 
 #### Run a command but don't wait for user input.  script(1) seems to do
@@ -49,13 +76,13 @@ EOF
         SHELL="${cmd}" script "${actual}" >/dev/null &
     fi
 
-    wait $!
+    wait_for_script $! "${actual}"
 }
 
 #### Ensure that script(1) makes the program look like it's connected to a
 #### terminal.  The welcome message code in sbr/utils.c needs that.
-run_without_input 'if test -t 0  &&  test -t 1  &&  test -t 2; then echo tty; fi'
-grep tty "${actual}" >/dev/null || test_skip "(script(1) doesn't simulate tty)"
+run_without_input 'if test -t 0  -a  -t 1  -a  -t 2; then echo tty; fi'
+grep tty "${actual}" >/dev/null || test_skip "script(1) doesn't simulate tty"
 
 
 # Removing Version will trigger the welcome message.  (setup_test