488f9fbd90
The width only applies to a single group, not to several or even all groups.
207 lines
6.4 KiB
Bash
207 lines
6.4 KiB
Bash
#! /bin/sh
|
|
# $NetBSD: show-all.sh,v 1.3 2020/07/01 09:13:12 rillig Exp $
|
|
#
|
|
# Tests for the show-all target from mk/misc/show.mk.
|
|
#
|
|
# Ensures that the show-all target prints all variants of variable
|
|
# values as intended. This involves sorted multi-valued variables (like
|
|
# CONFIGURE_ENV), other multi-valued variables (like CONFIGURE_ARGS),
|
|
# variables containing special characters that need to be escaped, and
|
|
# various other edge cases.
|
|
#
|
|
|
|
. './test.subr'
|
|
|
|
|
|
if test_case_begin 'show all'; then
|
|
|
|
# Ensures that the output of the show-all target is easily
|
|
# recognizable by pkgsrc developers.
|
|
#
|
|
# The variable values are aligned in column 24 by default. The
|
|
# variable assignments have the same form as those that are
|
|
# written in Makefiles.
|
|
#
|
|
# For lists of values, each value is written on a line of its
|
|
# own, to aid readability. The final line only contains the
|
|
# comment marker, for ease of implementation. This comment
|
|
# marker also provides a convenient place for remarks like
|
|
# "sorted" or "ends with space".
|
|
|
|
create_file 'test.mk' <<'EOF'
|
|
REGRESS.empty= # empty
|
|
REGRESS.space= ${:U } # a single space
|
|
REGRESS.value= All * kinds of `strange' \escape $$characters
|
|
|
|
REGRESS_ENV.empty= # empty
|
|
REGRESS_ENV.space= ${:U } # a single space
|
|
REGRESS_ENV.value= VAR1=value1 VAR2=`command execution via backticks` *=all
|
|
|
|
REGRESS_ARGS.empty= # empty
|
|
REGRESS_ARGS.space= ${:U } # a single space
|
|
REGRESS_ARGS.value= VAR1=value1 VAR2=`command execution via backticks` *=all
|
|
|
|
# Variable names may also contain special characters that must be escaped.
|
|
#
|
|
# The "*" variable is built-in into bmake and expands to the current
|
|
# make target, which in this case is "show-all-regress".
|
|
#
|
|
# The "**" variable ensures that show-all doesn't accidentally expand
|
|
# filenames.
|
|
*= bmake built-in
|
|
**= asterisk
|
|
|
|
_VARGROUPS+= regress
|
|
_PKG_VARS.regress+= REGRESS_ENV.undefined REGRESS_ENV.empty REGRESS_ENV.space REGRESS_ENV.value
|
|
_PKG_VARS.regress+= REGRESS_ARGS.undefined REGRESS_ARGS.empty REGRESS_ARGS.space REGRESS_ARGS.value
|
|
_PKG_VARS.regress+= REGRESS.undefined REGRESS.empty REGRESS.space REGRESS.value
|
|
_PKG_VARS.regress+= * **
|
|
_SORTED_VARS.regress= *_ENV.*
|
|
_LISTED_VARS.regress= *_ARGS.*
|
|
|
|
RUN= @set -eu;
|
|
.include "${PKGSRCDIR}/mk/misc/show.mk"
|
|
EOF
|
|
|
|
PKGSRCDIR="$pkgsrcdir" \
|
|
"$make" -f 'test.mk' 'show-all-regress' 1> 'output' 2>&1 \
|
|
&& exitcode=0 || exitcode=$?
|
|
|
|
create_file 'expected' <<'EOF'
|
|
regress:
|
|
pkg REGRESS_ENV.undefined # undefined
|
|
pkg REGRESS_ENV.empty= # empty
|
|
pkg REGRESS_ENV.space= # empty
|
|
pkg REGRESS_ENV.value= \
|
|
*=all \
|
|
VAR1=value1 \
|
|
VAR2=`command \
|
|
backticks` \
|
|
execution \
|
|
via \
|
|
# end of REGRESS_ENV.value (sorted)
|
|
pkg REGRESS_ARGS.undefined # undefined
|
|
pkg REGRESS_ARGS.empty= # empty
|
|
pkg REGRESS_ARGS.space= # empty
|
|
pkg REGRESS_ARGS.value= \
|
|
VAR1=value1 \
|
|
VAR2=`command \
|
|
execution \
|
|
via \
|
|
backticks` \
|
|
*=all \
|
|
# end of REGRESS_ARGS.value
|
|
pkg REGRESS.undefined # undefined
|
|
pkg REGRESS.empty= # empty
|
|
pkg REGRESS.space= # ends with space
|
|
pkg REGRESS.value= All * kinds of `strange' \escape $$characters
|
|
pkg *= show-all-regress
|
|
pkg **= asterisk
|
|
|
|
EOF
|
|
|
|
# On first sight it may seem strange that bmake doesn't handle
|
|
# the backticks command as a single word. Luckily, this is a
|
|
# rare case.
|
|
#
|
|
# On the other hand, if it did, bmake would also have to handle
|
|
# variable expansion and all the other syntactic difficulties
|
|
# from parsing shell commands, and that would be just too much.
|
|
|
|
assert_that "$exitcode" --equals '0'
|
|
assert_that 'output' --file-equals 'expected'
|
|
|
|
test_case_end
|
|
fi
|
|
|
|
|
|
if test_case_begin 'show dollars in variable values'; then
|
|
|
|
# Up to 2020-03-20, the output of the ENV and ARGS variables differed
|
|
# a lot from the PLAIN variable.
|
|
|
|
create_file 'test.mk' <<'EOF'
|
|
SHELLVAR_PLAIN= "$$var $${var} $$other $$$$"
|
|
SHELLVAR_ENV= "$$var $${var} $$other $$$$"
|
|
SHELLVAR_ARGS= "$$var $${var} $$other $$$$"
|
|
|
|
_VARGROUPS+= shellvar
|
|
_PKG_VARS.shellvar= SHELLVAR_PLAIN SHELLVAR_ENV SHELLVAR_ARGS
|
|
_SORTED_VARS.shellvar= *_ENV
|
|
_LISTED_VARS.shellvar= *_ARGS
|
|
|
|
RUN= @set -eu;
|
|
.include "${PKGSRCDIR}/mk/misc/show.mk"
|
|
EOF
|
|
|
|
PKGSRCDIR="$pkgsrcdir" \
|
|
"$make" -f 'test.mk' 'show-all-shellvar' 1> 'output' 2>&1 \
|
|
&& exitcode=0 || exitcode=$?
|
|
|
|
create_file 'expected' <<'EOF'
|
|
shellvar:
|
|
pkg SHELLVAR_PLAIN= "$$var $${var} $$other $$$$"
|
|
pkg SHELLVAR_ENV= \
|
|
"$$var $${var} $$other $$$$" \
|
|
# end of SHELLVAR_ENV (sorted)
|
|
pkg SHELLVAR_ARGS= \
|
|
"$$var $${var} $$other $$$$" \
|
|
# end of SHELLVAR_ARGS
|
|
|
|
EOF
|
|
|
|
assert_that "$exitcode" --equals '0'
|
|
assert_that 'output' --file-equals 'expected'
|
|
|
|
test_case_end
|
|
fi
|
|
|
|
|
|
if test_case_begin 'individual width'; then
|
|
|
|
# If the variable names of a group are typically longer than 16
|
|
# characters, it is possible to increase the width.
|
|
|
|
create_file 'test.mk' <<'EOF'
|
|
VAR_PLAIN= value
|
|
VAR_ENV= value1 value2
|
|
VAR_ARGS= value1 value2
|
|
|
|
_VARGROUPS+= var
|
|
_VARGROUP_WIDTH.var= 15
|
|
_PKG_VARS.var= VAR_PLAIN VAR_PLAIN_LONG_NAME
|
|
_PKG_VARS.var+= VAR_ENV VAR_ENV_LONG_NAME
|
|
_PKG_VARS.var+= VAR_ARGS VAR_ARGS_LONG_NAME
|
|
_SORTED_VARS.var= *_ENV
|
|
_LISTED_VARS.var= *_ARGS
|
|
|
|
RUN= @set -eu;
|
|
.include "${PKGSRCDIR}/mk/misc/show.mk"
|
|
EOF
|
|
|
|
PKGSRCDIR="$pkgsrcdir" \
|
|
"$make" -f 'test.mk' 'show-all-var' 1> 'output' 2>&1 \
|
|
&& exitcode=0 || exitcode=$?
|
|
|
|
create_file 'expected' <<'EOF'
|
|
var:
|
|
pkg VAR_PLAIN= value
|
|
pkg VAR_PLAIN_LONG_NAME # undefined
|
|
pkg VAR_ENV= \
|
|
value1 \
|
|
value2 \
|
|
# end of VAR_ENV (sorted)
|
|
pkg VAR_ENV_LONG_NAME # undefined
|
|
pkg VAR_ARGS= \
|
|
value1 \
|
|
value2 \
|
|
# end of VAR_ARGS
|
|
pkg VAR_ARGS_LONG_NAME # undefined
|
|
|
|
EOF
|
|
|
|
assert_that "$exitcode" --equals '0'
|
|
assert_that 'output' --file-equals 'expected'
|
|
|
|
test_case_end
|
|
fi
|