summaryrefslogtreecommitdiff
path: root/regress
diff options
context:
space:
mode:
authorrillig <rillig@pkgsrc.org>2020-05-17 13:35:35 +0000
committerrillig <rillig@pkgsrc.org>2020-05-17 13:35:35 +0000
commitc63831a15c4525c501835f73f7a84ada31115f66 (patch)
tree1365aaccbdecc3113798df019e6a7214d22affbe /regress
parentb2adfeb5eb43b31cfb1060e6dac0bf08a700172b (diff)
downloadpkgsrc-c63831a15c4525c501835f73f7a84ada31115f66.tar.gz
regress/infra-unittests: add test for variable precedence
Diffstat (limited to 'regress')
-rw-r--r--regress/infra-unittests/var-precedence.sh70
1 files changed, 70 insertions, 0 deletions
diff --git a/regress/infra-unittests/var-precedence.sh b/regress/infra-unittests/var-precedence.sh
new file mode 100644
index 00000000000..a12cf823a4d
--- /dev/null
+++ b/regress/infra-unittests/var-precedence.sh
@@ -0,0 +1,70 @@
+#! /bin/sh
+# $NetBSD: var-precedence.sh,v 1.1 2020/05/17 13:35:35 rillig Exp $
+#
+# Demonstrates how environment variables interact with variables defined
+# in the Makefiles and variables defined in the command line.
+#
+# Everything works exactly as documented in the bmake manual page.
+#
+
+set -eu
+
+. './test.subr'
+
+# usage: vartest <testname> <command> <expected>
+vartest() {
+ test_case_begin "$1" || return 0
+
+ create_file_lines 'var.mk' \
+ '.if defined(DEFAULT)' \
+ 'VAR?= default' \
+ '.endif' \
+ '' \
+ '.if defined(SET)' \
+ 'VAR= set' \
+ '.endif' \
+ '' \
+ '.if defined(APPEND)' \
+ 'VAR+= append' \
+ '.endif' \
+ '' \
+ '.if defined(RESET)' \
+ '.undef VAR' \
+ 'VAR= reset' \
+ '.endif' \
+ '' \
+ 'all:' \
+ ' @printf '\''%s\n'\'' '\'\''${VAR:Q}'
+
+ unset DEFAULT SET APPEND VAR
+
+ eval "$2" 1> "$tmpdir/output" 2>&1 \
+ && exitcode=0 || exitcode=$?
+
+ assert_that "$exitcode" --equals '0'
+ assert_that "$tmpdir/output" --file-is-lines \
+ "$3"
+
+ test_case_end
+}
+
+vartest 'undefined' ' run_bmake var.mk' ''
+vartest 'env' 'VAR=env run_bmake var.mk' 'env'
+vartest 'env + flag' 'VAR=env run_bmake var.mk VAR=flag' 'flag'
+vartest 'env + default' 'VAR=env run_bmake var.mk DEFAULT=yes' 'env'
+vartest 'env + set' 'VAR=env run_bmake var.mk SET=yes' 'set'
+vartest 'env + append' 'VAR=env run_bmake var.mk APPEND=yes' 'env append'
+vartest 'env + reset' 'VAR=env run_bmake var.mk RESET=yes' 'reset'
+vartest 'flag' ' run_bmake var.mk VAR=flag' 'flag'
+vartest 'flag + default' ' run_bmake var.mk VAR=flag DEFAULT=yes' 'flag'
+vartest 'flag + set' ' run_bmake var.mk VAR=flag SET=yes' 'flag'
+vartest 'flag + append' ' run_bmake var.mk VAR=flag APPEND=yes' 'flag'
+vartest 'flag + reset' ' run_bmake var.mk VAR=flag RESET=yes' 'flag'
+
+# The override flag is not used in pkgsrc.
+vartest 'env + override' 'VAR=env run_bmake var.mk -e' 'env'
+vartest 'env + override + flag' 'VAR=env run_bmake var.mk -e VAR=flag' 'flag'
+vartest 'env + override + default' 'VAR=env run_bmake var.mk -e DEFAULT=yes' 'env'
+vartest 'env + override + set' 'VAR=env run_bmake var.mk -e SET=yes' 'env'
+vartest 'env + override + append' 'VAR=env run_bmake var.mk -e APPEND=yes' 'env'
+vartest 'env + override + reset' 'VAR=env run_bmake var.mk -e RESET=yes' 'env'