tests: better way to compare lists in Makefile rules
With this commit, we introduce a new helper shell script for use
in the testsuite, which is meant to allow the test cases to easily
check whether two whitespace-separated lists are equal; this ability
is particularly useful to check for equality of the contents of make
variables that are expected to contain multiple whitespace-separated
words, and are defined through line continuations (or are rewritten
by automake in this way), or that contain expansion of potentially
empty variables.
Before this change, a test checking that an usage like this one:
VAR = valA
if COND1
VAR += val1 # com1
endif COND1
VAR += valC
worked as expected, couldn't use rules like:
## Doesn't work because $(VAR) expands to multiple words
verify:
test $(VAR) = "valA val1 valC"
nor like:
## Doesn't work because the final expansion of $(VAR) contains
## repeated contiguous whitespace characters (it actually
## equals "valA val1 valC", not "valA val1 valC"), and this
## is an internal detail which might change and which we don't
## want to explicitly rely on.
verify:
test "$(VAR)" = "valA val1 valC"
Instead, we had to rely on cumbersome workaround such as:
## This works, but is ugly.
verify:
test "`echo $(VAR)`" = "valA val1 valC"
or:
## This works, but is even uglier.
verify:
echo BEG: $(VAR) :END | grep "BEG: valA val1 valC :END"
Now, with the help of the new 'is' script, we can perform such a
check in a clearer and more straightforward way, as in:
## Works, and reads clearly.
verify:
is $(VAR) == valA val1 valC
* tests/is: New helper shell script, telling whether two whitespace
separated lists are equal.
* Makefile.am (EXTRA_DIST): Add it.
* tests/colneq2.test: Use the new helper script, and accordingly
get rid of older, more cumbersome idioms.
* tests/cond11.test: Likewise.
* tests/cond16.test: Likewise.
* tests/cond18.test: Likewise.
* tests/cond22.test: Likewise.
* tests/cond31.test: Likewise.
* tests/cond38.test: Likewise.
* tests/test-logs-repeated.test: Likewise.
* tests/objext-pr10128.test: Likewise.
* tests/programs-primary-rewritten.test: Likewise.
* tests/substre2.test: Likewise. Also ...
(configure.in, Makefile.am): Add a couple of hack to avoid having
to require (and run) a C compiler; accordingly ...
($required): ... remove this.
* tests/exeext4.test: Likewise.
* tests/substref.test: Likewise. Also ...
(hello.c): Use ": >" rather than "cat <<EOF" to generate it,
since it's meant to be empty anyway.
* tests/cond4.test: Use the new helper script, and accordingly
get rid of older, more cumbersome idioms. Avoid some unnecessary
uses of "make -e" since we are at it.
* tests/cond19.test: Likewise.
* tests/cond32.test: Likewise.
* tests/cond6.test: Use the new helper script, and accordingly
move some checks in the Makefile.am.
Avoid unnecessary execution of automake remake rules by manually
"touching" aclocal.m4