bug-dejagnu
[Top][All Lists]
Advanced

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

bug#47382: runtest doesn't work with Solaris 10 /bin/sh


From: Jacob Bachmeyer
Subject: bug#47382: runtest doesn't work with Solaris 10 /bin/sh
Date: Fri, 16 Apr 2021 16:50:58 -0500
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.8.1.22) Gecko/20090807 MultiZilla/1.8.3.4e SeaMonkey/1.1.17 Mnenhy/0.7.6.0

I have had time to address the rest of these:

Rainer Orth wrote:
One can use \{0,1\} instead, but I cannot tell for certain how portable
that is:

diff --git a/dejagnu b/dejagnu
--- a/dejagnu
+++ b/dejagnu
@@ -147,7 +147,7 @@ if $want_version ; then
 fi
# Remove any leading autoconf platform prefix and the "dejagnu" prefix.
-command=`basename "$0" | sed -e 's/^.*-\?dejagnu-\?//'`
+command=`basename "$0" | sed -e 's/^.*-\{0,1\}dejagnu-\{0,1\}//'`
while expr $# \> 0 > /dev/null
 do

Fixed in commit cc4d2e41f5d72be55e2b506f45fa052e1b3d410b; according to the latest Autoconf manual, basename is not portable either!

8<----
diff --git a/dejagnu b/dejagnu
index ece4e09..c38dd4d 100755
--- a/dejagnu
+++ b/dejagnu
@@ -147,7 +147,20 @@ if $want_version ; then
fi

# Remove any leading autoconf platform prefix and the "dejagnu" prefix.
-command=`basename "$0" | sed -e 's/^.*-\?dejagnu-\?//'`
+# command=`basename "$0" | sed -e 's/^.*-\?dejagnu-\?//'`
+# The above simple solution is not portable, so we use Awk:
+command=`echo "$0" | awk 'BEGIN { FS = "/" }
+{   OFS = FS = "-"
+    $0 = $NF
+    for (i = 1; i <= NF; i++) if ($i ~ /dejagnu/) break;
+    for (j = 1; j <= (NF - i); j++) $j = $(j+i);
+    NF = j - 1
+    print }'`
+# Initially splitting on "/", then assigning the last field to the record
+# performs the role of basename.  Splitting on "-" and searching for a
+# field matching /dejagnu/ identifies the other prefixes, and the second
+# loop removes the "dejagnu" prefix and everything before it.  The record
+# is then truncated, printed, and thereby returned to the shell.

while expr $# \> 0 > /dev/null
do
8<----


With that fixed I ran into:

Found subcommand foo with variants:  tcl sh
grep: illegal option -- q
Usage: grep -hblcnsviw pattern file . . .
Selected variant tcl

grep -q isn't portable, too, also documented in the Autoconf manual:

Some of the options required by Posix are not portable in practice.
Don't use @samp{grep -q} to suppress output, because traditional @command{grep}
implementations (e.g., Solaris) do not support @option{-q}.

Fixed in commits 84c903914b49e5051f116b7a1512ee6d962d71bc (first) and e2fa0bcf54e2bb05106be1ce22a73de4f7381444 (second). Splitting this also allowed for neatly cleaning up the rest of the help display code in the second commit.

8<----
diff --git a/dejagnu b/dejagnu
index c38dd4d..57767b1 100755
--- a/dejagnu
+++ b/dejagnu
@@ -248,11 +248,10 @@ if $have_gawk ; then
fi
# is "awk" actually GNU Awk?
if $have_awk ; then
-    if "$awkbin" --version | sed 1q | grep -qi 'GNU Awk' ; then
-       have_gawk_as_awk=true
-    else
-       have_gawk_as_awk=false
-    fi
+    case `"$awkbin" --version 2>&1 | sed 1q` in
+       *'GNU Awk'*)    have_gawk_as_awk=true   ;;
+       *)              have_gawk_as_awk=false  ;;
+    esac
fi
if expr "$verbose" \> 2 > /dev/null ; then
    if $have_awk ; then
8<----


8<----
diff --git a/dejagnu b/dejagnu
index 57767b1..d323a62 100755
--- a/dejagnu
+++ b/dejagnu
@@ -418,21 +418,15 @@ if $want_help ; then
       echo ERROR: file "'$help_file'" is not readable
       exit 2
    fi
-    if grep -q '#help' "$help_file" \
-       && grep -q '#end' "$help_file"; then : ; else
+    if awk '/#help$/ { pfxlen = length($0) - 4 }
+           pfxlen && substr($0, pfxlen) == "#end" { exit 1 }
+          ' "$help_file" ; then
       echo ERROR: file "'$help_file'" does not contain a help message
       exit 2
    fi
-    help_prefix_pat=`grep '#help' "$help_file" \
-       | sed -e 's/#help.*$//' -e '1q' | tr '[:print:][:blank:]' .`
-    if expr "$verbose" \> 1 > /dev/null ; then
-       echo Extracting help from "'$help_file'" with prefix "'$help_prefix_pat'
-    fi
-    sed -n < "$help_file" \
-       -e '1,/#help/d' \
-       -e '/^'"$help_prefix_pat"'#end/q' \
-       -e 's/^'"$help_prefix_pat"'//;p'
-    exit 0
+    exec awk '/#help$/ { pfxlen = length($0) - 4 }
+             pfxlen && substr($0, pfxlen) == "#end" { exit 0 }
+             pfxlen { print substr($0, pfxlen) }' "$help_file"
fi

if test -z "$command" ; then
8<----

Now I'm down to

Running 
/vol/src/gnu/dejagnu/dejagnu-1.6.3-branch/local/testsuite/launcher.all/command.exp
 ...
FAIL: dejagnu --help works
FAIL: dejagnu foo --help works if shell variant selected

This only occurs when running runtest --tool launcher manually, but
works with make check.

Please try the revised help support above; I suspect that there may have been other issues. Working with make check but not directly invoked runtest is ... strange.


-- Jacob






reply via email to

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