tests/utils/utils.sh: remove redundancy when setting def. var. values
authorPhilippe Proulx <eeppeliteloop@gmail.com>
Fri, 10 Nov 2023 05:41:41 +0000 (00:41 -0500)
committerPhilippe Proulx <eeppeliteloop@gmail.com>
Wed, 7 Feb 2024 21:25:56 +0000 (16:25 -0500)
This patch removes more redundancy in `utils.sh` by using a function
which sets a variable by name if it's empty and exports it.

This makes the file less error-prone: the variable name is written just
once, making it safer to add more.

The

    export "${varname?}"

form is to make ShellCheck happy, even if a simple `export $varname`
would perfectly work in this context.

The function is unset when it's not needed anymore to avoid polluting
the scope of whatever sources `utils.sh`.

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I6e25aa557f4d09f8129121b76b8b3a860ba3ed29

tests/utils/utils.sh

index 3dddd60b141b2d4026cf67f7380768c5a3ad6eb4..10d984441e22dd51a1b603fe4d137d145bd32f9f 100644 (file)
 # An unbound variable is an error
 set -u
 
+# Sets the variable named `$1` to `$2` if it's not set, and exports it.
+_bt_tests_set_var_def() {
+       local -r varname=$1
+       local -r val=$2
+
+       if [[ -z ${!varname:-} ]]; then
+               eval "$varname='$val'"
+       fi
+
+       export "${varname?}"
+}
+
 # Name of the OS on which we're running, if not set.
 #
 # One of:
@@ -82,18 +94,10 @@ _set_vars_srcdir_builddir() {
        fi
 
        # Base source directory of tests
-       if [[ -z ${BT_TESTS_SRCDIR:-} ]]; then
-               BT_TESTS_SRCDIR=$testsdir
-       fi
-
-       export BT_TESTS_SRCDIR
+       _bt_tests_set_var_def BT_TESTS_SRCDIR "$testsdir"
 
        # Base build directory of tests
-       if [[ -z ${BT_TESTS_BUILDDIR:-} ]]; then
-               BT_TESTS_BUILDDIR=$testsdir
-       fi
-
-       export BT_TESTS_BUILDDIR
+       _bt_tests_set_var_def BT_TESTS_BUILDDIR "$testsdir"
 }
 
 _set_vars_srcdir_builddir
@@ -130,46 +134,23 @@ export BT_TESTS_BT2_BIN
 _bt_tests_plugins_path=$BT_TESTS_BUILDDIR/../src/plugins
 
 # Colon-separated list of project plugin paths, if not set
-if [[ -z ${BT_TESTS_BABELTRACE_PLUGIN_PATH:-} ]]; then
-       BT_TESTS_BABELTRACE_PLUGIN_PATH=$_bt_tests_plugins_path/ctf:$_bt_tests_plugins_path/utils:$_bt_tests_plugins_path/text:$_bt_tests_plugins_path/lttng-utils
-fi
-
-export BT_TESTS_BABELTRACE_PLUGIN_PATH
+_bt_tests_set_var_def BT_TESTS_BABELTRACE_PLUGIN_PATH \
+       "$_bt_tests_plugins_path/ctf:$_bt_tests_plugins_path/utils:$_bt_tests_plugins_path/text:$_bt_tests_plugins_path/lttng-utils"
 
 # Directory containing the Python plugin provider library, if not set
-if [[ -z ${BT_TESTS_PROVIDER_DIR:-} ]]; then
-       BT_TESTS_PROVIDER_DIR=$BT_TESTS_BUILDDIR/../src/python-plugin-provider/.libs
-fi
-
-export BT_TESTS_PROVIDER_DIR
+_bt_tests_set_var_def BT_TESTS_PROVIDER_DIR "$BT_TESTS_BUILDDIR/../src/python-plugin-provider/.libs"
 
 # Directory containing the built `bt2` Python package, if not set
-if [[ -z ${BT_TESTS_PYTHONPATH:-} ]]; then
-       BT_TESTS_PYTHONPATH=$BT_TESTS_BUILDDIR/../src/bindings/python/bt2/build/build_lib
-fi
-
-export BT_TESTS_PYTHONPATH
+_bt_tests_set_var_def BT_TESTS_PYTHONPATH "$BT_TESTS_BUILDDIR/../src/bindings/python/bt2/build/build_lib"
 
 # Name of the `awk` command to use when testing, if not set
-if [[ -z ${BT_TESTS_AWK_BIN:-} ]]; then
-       BT_TESTS_AWK_BIN="awk"
-fi
-
-export BT_TESTS_AWK_BIN
+_bt_tests_set_var_def BT_TESTS_AWK_BIN awk
 
 # Name of the `grep` command to use when testing, if not set
-if [[ -z ${BT_TESTS_GREP_BIN:-} ]]; then
-       BT_TESTS_GREP_BIN="grep"
-fi
-
-export BT_TESTS_GREP_BIN
+_bt_tests_set_var_def BT_TESTS_GREP_BIN grep
 
 # Name of the `python3` command to use when testing, if not set
-if [[ -z ${BT_TESTS_PYTHON_BIN:-} ]]; then
-       BT_TESTS_PYTHON_BIN=python3
-fi
-
-export BT_TESTS_PYTHON_BIN
+_bt_tests_set_var_def BT_TESTS_PYTHON_BIN python3
 
 # Major and minor version of the `python3` command to use when testing.
 #
@@ -178,25 +159,16 @@ export BT_TESTS_PYTHON_BIN
 _bt_tests_py3_version=$("$BT_TESTS_PYTHON_BIN" -c 'import sys; print("{}.{}".format(sys.version_info.major, sys.version_info.minor))')
 
 # Name of the `python3-config` command to use when testing, if not set
-if [[ -z ${BT_TESTS_PYTHON_CONFIG_BIN:-} ]]; then
-       BT_TESTS_PYTHON_CONFIG_BIN=python3-config
-fi
-
-export BT_TESTS_PYTHON_CONFIG_BIN
+_bt_tests_set_var_def BT_TESTS_PYTHON_CONFIG_BIN python3-config
 
 # Name of the `sed` command to use when testing, if not set
-if [[ -z ${BT_TESTS_SED_BIN:-} ]]; then
-       BT_TESTS_SED_BIN="sed"
-fi
-
-export BT_TESTS_SED_BIN
+_bt_tests_set_var_def BT_TESTS_SED_BIN sed
 
 # Name of the `cc` command to use when testing, if not set
-if [[ -z ${BT_TESTS_CC_BIN:-} ]]; then
-       BT_TESTS_CC_BIN=cc
-fi
+_bt_tests_set_var_def BT_TESTS_CC_BIN cc
 
-export BT_TESTS_CC_BIN
+# Done with _bt_tests_set_var_def()
+unset -f _bt_tests_set_var_def
 
 # Whether or not to enable AddressSanitizer, `0` (disabled) if not set.
 #
This page took 0.026094 seconds and 4 git commands to generate.