Subject: bug#33817: PATCH: fix bug #33817

From: Jacob Bachmeyer <[email-masked]>
Date: Fri, 21 Dec 2018 00:20:19 -0600

This patch fixes the problem, without reintroducing the "shift empty 
argument list" issue.  This was discovered while working on 
"dejagnu-report-card".

----
ChangeLog entry:
	* dejagnu: Improve command parsing to fix bug #33817.  Previously,
	the documented equivalence between "multi word command" and
	"multi-word-command" did not hold if no arguments were given.

	* testsuite/launcher.all/command.exp: Add tests for bug #33817.
----
patch:
----
diff --git a/dejagnu b/dejagnu
index 06efcc7..6cd52f6 100755
--- a/dejagnu
+++ b/dejagnu
@@ -134,7 +134,6 @@ fi
 
 # Remove any leading autoconf platform prefix and the "dejagnu" prefix.
 command="$(basename "$0" | sed -e 's/^.*-\?dejagnu-\?//')"
-commext=
 
 while expr $# \> 0 > /dev/null
 do
@@ -151,15 +150,12 @@ do
     for ext in ${Variants}
     do
 	if test -f "${commdir}/${command}.$ext" ; then
-	    commext="$commext $ext"
+	    break 2
 	fi
     done
     if expr "$1" : - > /dev/null ; then
 	break
     fi
-    if test -n "$commext" ; then
-	break
-    fi
     if test -n "$1" ; then
 	command="${command}-$1"
 	shift
@@ -168,6 +164,14 @@ do
     fi
 done
 
+commext=
+for ext in ${Variants}
+do
+    if test -f "${commdir}/${command}.$ext" ; then
+	commext="$commext $ext"
+    fi
+done
+
 if test -z "$commext" && test -n "$command" ; then
     echo ERROR: could not resolve command "$command"
     exit 2
diff --git a/testsuite/launcher.all/command.exp b/testsuite/launcher.all/command.exp
index eb7b219..9e21237 100644
--- a/testsuite/launcher.all/command.exp
+++ b/testsuite/launcher.all/command.exp
@@ -70,6 +70,15 @@ set tests {
 	    "Found subcommand baz-quux with variants:  gawk\n"
 	    "Selected variant gawk" }
 
+	{ "#" "bug #33817:  ensure that the failure is 'no variant'"
+	    " rather than 'could not resolve command'" }
+	{ "dejagnu baz-quux is resolved but fails without GNU Awk (bug #33817)"
+	    {baz-quux} {GAWK=bogus} 2
+	    "ERROR: no variant of baz-quux was selected" }
+	{ "dejagnu baz quux is resolved but fails without GNU Awk (bug #33817)"
+	    {baz quux} {GAWK=bogus} 2
+	    "ERROR: no variant of baz-quux was selected" }
+
 	{ "#" invalid direct calls }
 
 	{ "dejagnu -v bar fails"	{-v bar} {} 2
----

-- Jacob