summaryrefslogtreecommitdiff
path: root/sysutils/sysbuild
diff options
context:
space:
mode:
authorjmmv <jmmv@pkgsrc.org>2012-08-15 21:20:14 +0000
committerjmmv <jmmv@pkgsrc.org>2012-08-15 21:20:14 +0000
commitb51dfd4c425ffec12047ccaadd7fd6029b82c64c (patch)
tree1ce0d1466c887198fc9a0f2732bf0dc480e9f3b5 /sysutils/sysbuild
parent94504fd7fb94c168a7e2e5b9daf21ed07de75701 (diff)
downloadpkgsrc-b51dfd4c425ffec12047ccaadd7fd6029b82c64c.tar.gz
Update to 2.1:
- Use shtk for the common utilities and configuration file parsing functionality. The local copies of the "config" and "utils" modules are gone.
Diffstat (limited to 'sysutils/sysbuild')
-rw-r--r--sysutils/sysbuild/Makefile25
-rw-r--r--sysutils/sysbuild/PLIST5
-rw-r--r--sysutils/sysbuild/files/Kyuafile3
-rw-r--r--sysutils/sysbuild/files/config.subr287
-rw-r--r--sysutils/sysbuild/files/config_test.sh395
-rw-r--r--sysutils/sysbuild/files/cvs.subr107
-rw-r--r--sysutils/sysbuild/files/cvs_test.sh180
-rw-r--r--sysutils/sysbuild/files/sysbuild.sh91
-rw-r--r--sysutils/sysbuild/files/sysbuild4cron.sh8
-rw-r--r--sysutils/sysbuild/files/sysbuild4cron_test.sh1
-rw-r--r--sysutils/sysbuild/files/sysbuild_test.sh16
-rw-r--r--sysutils/sysbuild/files/utils.subr91
-rw-r--r--sysutils/sysbuild/files/utils_test.sh145
13 files changed, 67 insertions, 1287 deletions
diff --git a/sysutils/sysbuild/Makefile b/sysutils/sysbuild/Makefile
index 014992df77f..22173716da3 100644
--- a/sysutils/sysbuild/Makefile
+++ b/sysutils/sysbuild/Makefile
@@ -1,6 +1,6 @@
-# $NetBSD: Makefile,v 1.18 2012/07/25 12:18:22 jmmv Exp $
+# $NetBSD: Makefile,v 1.19 2012/08/15 21:20:14 jmmv Exp $
-DISTNAME= sysbuild-2.0
+DISTNAME= sysbuild-2.1
CATEGORIES= sysutils
MASTER_SITES= # empty
DISTFILES= # empty
@@ -30,20 +30,19 @@ PKG_SUGGESTED_OPTIONS= tests
.include "../../mk/bsd.options.mk"
.if $(PKG_OPTIONS:Mtests)
-TEST_PROGS= config_test cvs_test sysbuild_test sysbuild4cron_test utils_test
+TEST_PROGS= sysbuild_test sysbuild4cron_test
PLIST_SUBST+= TESTS=
. include "../../devel/atf-libs/buildlink3.mk"
+BUILD_SUBST+= -e 's,@ATF_SH@,${BUILDLINK_PREFIX.atf-libs}/bin/atf-sh,g'
+
do-build: build-tests
build-tests:
cp ${FILESDIR}/Kyuafile ${WRKSRC}
.for file in ${TEST_PROGS}
- ${ECHO} '#! ${BUILDLINK_PREFIX.atf-libs}/bin/atf-sh' \
- >${WRKSRC}/${file}
- ${CAT} ${FILESDIR}/*.subr ${FILESDIR}/${file}.sh \
- | ${SED} ${BUILD_SUBST} >>${WRKSRC}/${file}
- ${CHMOD} +x ${WRKSRC}/${file}
+ sed ${BUILD_SUBST} <${FILESDIR}/${file}.sh >${WRKSRC}/${file}
+ chmod +x ${WRKSRC}/${file}
.endfor
INSTALLATION_DIRS+= tests/sysbuild
@@ -63,12 +62,9 @@ PLIST_SUBST+= TESTS=@comment
do-build:
.for file in sysbuild sysbuild4cron
- ${ECHO} '#! ${SH}' >${WRKSRC}/${file}
- ${ECHO} 'set -e' >>${WRKSRC}/${file}
- ${CAT} ${FILESDIR}/*.subr ${FILESDIR}/${file}.sh \
- | ${SED} ${BUILD_SUBST} >>${WRKSRC}/${file}
- ${ECHO} '${file}_main "$${@}"' >>${WRKSRC}/${file}
- ${CHMOD} +x ${WRKSRC}/${file}
+ sed ${BUILD_SUBST} ${FILESDIR}/${file}.sh \
+ | ${BUILDLINK_PREFIX.shtk}/bin/shtk build \
+ -s ${SH} -m ${file}_main -o ${WRKSRC}/${file} -
.endfor
.for file in sysbuild.1 sysbuild4cron.1 default.conf
sed ${BUILD_SUBST} <${FILESDIR}/${file} >${WRKSRC}/${file}
@@ -87,4 +83,5 @@ do-install:
${INSTALL_DATA} ${WRKSRC}/${file} ${DESTDIR}${EGDIR}
.endfor
+.include "../../devel/shtk/buildlink3.mk"
.include "../../mk/bsd.pkg.mk"
diff --git a/sysutils/sysbuild/PLIST b/sysutils/sysbuild/PLIST
index 506efc426f2..942d44b7df8 100644
--- a/sysutils/sysbuild/PLIST
+++ b/sysutils/sysbuild/PLIST
@@ -1,12 +1,9 @@
-@comment $NetBSD: PLIST,v 1.4 2012/07/25 12:18:22 jmmv Exp $
+@comment $NetBSD: PLIST,v 1.5 2012/08/15 21:20:14 jmmv Exp $
bin/sysbuild
bin/sysbuild4cron
man/man1/sysbuild.1
man/man1/sysbuild4cron.1
share/examples/sysbuild/default.conf
${TESTS}tests/sysbuild/Kyuafile
-${TESTS}tests/sysbuild/config_test
-${TESTS}tests/sysbuild/cvs_test
${TESTS}tests/sysbuild/sysbuild_test
${TESTS}tests/sysbuild/sysbuild4cron_test
-${TESTS}tests/sysbuild/utils_test
diff --git a/sysutils/sysbuild/files/Kyuafile b/sysutils/sysbuild/files/Kyuafile
index 7bf365d34e2..a6456c745e8 100644
--- a/sysutils/sysbuild/files/Kyuafile
+++ b/sysutils/sysbuild/files/Kyuafile
@@ -2,8 +2,5 @@ syntax("kyuafile", 1)
test_suite("sysbuild")
-atf_test_program{name="config_test"}
-atf_test_program{name="cvs_test"}
atf_test_program{name="sysbuild_test"}
atf_test_program{name="sysbuild4cron_test"}
-atf_test_program{name="utils_test"}
diff --git a/sysutils/sysbuild/files/config.subr b/sysutils/sysbuild/files/config.subr
deleted file mode 100644
index 741d311a750..00000000000
--- a/sysutils/sysbuild/files/config.subr
+++ /dev/null
@@ -1,287 +0,0 @@
-# Copyright 2012 Google Inc.
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-# * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-# * Neither the name of Google Inc. nor the names of its contributors
-# may be used to endorse or promote products derived from this software
-# without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-# \file config.subr
-# Configuration file processing and queries.
-
-
-# List of valid configuration variables.
-#
-# This is initialized by config_init and should remain unchanged thorough the
-# execution of the program.
-CONFIG_VARS=
-
-
-# List of overrides to apply by config_apply_overrides.
-#
-# The overrides are recorded and applied separately because they need to happen
-# after a configuration file has been loaded. The contents of this list are
-# words of the form: set:<variable> or unset:<variable>. For those variables
-# listed in set:, there is a corresponding config_override_var_<variable>
-# variable containing the new value.
-CONFIG_OVERRIDES=
-
-
-# Initializes the configuration module.
-#
-# \param ... List of configuration variables to recognize in configuration files
-# and user overrides.
-config_init() {
- CONFIG_VARS="${@}"
-}
-
-
-# Checks if a configuration variable is known.
-#
-# \param var Name of the variable to check.
-#
-# \return True if the variable was registered by config_init, false otherwise.
-config_is_valid() {
- local var="${1}"; shift
-
- local known_var
- for known_var in ${CONFIG_VARS}; do
- if [ "${known_var}" = "${var}" ]; then
- return 0
- fi
- done
- return 1
-}
-
-
-# Checks if a configuration variable is defined.
-#
-# \param var The name of the variable to check.
-#
-# \return True if the variable is defined (even if empty), false otherwise.
-config_has() {
- local var="${1}"; shift
-
- local is_unset
- eval is_unset="\${config_var_${var}-yes_this_is_unset}"
- if [ "${is_unset}" = yes_this_is_unset ]; then
- return 1
- else
- return 0
- fi
-}
-
-
-# Gets the value of a defined configuration variable.
-#
-# \post The value of the variable is printed to stdout, if any.
-#
-# \post If the variable is not defined, this terminates execution with an error.
-#
-# \param var Name of the configuration variable to query.
-config_get() {
- local var="${1}"; shift
-
- if config_has "${var}"; then
- eval echo "\${config_var_${var}}"
- else
- utils_error "Required configuration variable ${var} not set"
- fi
-}
-
-
-# Gets the value of configuration variable interpreting it as a boolean.
-#
-# \param var The variable to query.
-#
-# \return True if the variable is set to a truth value, false if its value is
-# false or if it is not defined.
-config_get_bool() {
- local var="${1}"; shift
-
- if config_has "${var}"; then
- case "$(config_get "${var}")" in
- [Yy][Ee][Ss]|[Tt][Rr][Uu][Ee])
- return 0
- ;;
- [Nn][Oo]|[Ff][Aa][Ll][Ss][Ee])
- return 1
- ;;
- *)
- utils_error "Invalid boolean value in variable ${var}"
- ;;
- esac
- else
- return 1
- fi
-}
-
-
-# Gets the value of a configuration variable with a default fallback.
-#
-# \post The value of the variable is printed to stdout, if any.
-#
-# \param var Name of the configuration variable to query.
-# \param default Default value to return if the variable is not defined.
-config_get_default() {
- local var="${1}"; shift
- local default="${1}"; shift
-
- if config_has "${var}"; then
- config_get "${var}"
- else
- echo "${default}"
- fi
-}
-
-
-# Sets a configuration variable.
-#
-# \post Execution terminates if the variable is not valid.
-#
-# \param var The name of the configuration variable to set.
-# \param value The value to set.
-config_set() {
- local var="${1}"; shift
- local value="${1}"; shift
-
- config_is_valid "${var}" \
- || utils_usage_error "Unknown configuration variable ${var}"
- eval "config_var_${var}=\"\${value}\""
-}
-
-
-# Loads a configuration file.
-#
-# \pre config_init should have been called to register the valid configuration
-# variables. Any non-registered configuration variable found in the file will
-# not be available through any of the functions in this module.
-#
-# \post The configuration module is updated with the values defined in the
-# configuration file.
-#
-# \post Any errors in the processing of the configuration file terminate the
-# execution of the script.
-#
-# \param config_file Path to the file to load.
-config_load() {
- local config_file="${1}"; shift
-
- [ -e "${config_file}" ] || utils_error "Configuration file ${config_file}" \
- "does not exist"
-
- # User-facing variables.
- local var
- for var in ${CONFIG_VARS}; do
- unset "${var}" || true
- eval local "${var}"
- done
-
- local real_config_file
- case "${config_file}" in
- */*) real_config_file="${config_file}" ;;
- *) real_config_file="./${config_file}" ;;
- esac
- ( . "${real_config_file}" ) || utils_error "Failed to load configuration" \
- "file ${config_file}"
- . "${real_config_file}"
-
- for var in ${CONFIG_VARS}; do
- local value
- eval value="\${${var}-unset}"
- [ "${value-unset}" != unset ] || continue
-
- if [ -n "${value}" ]; then
- config_set "${var}" "${value}"
- else
- unset "config_var_${var}" || true
- fi
- done
-
- config_apply_overrides
-}
-
-
-# Applies recorded overrides to the current configuration.
-#
-# This is just a helper function for config_load and should not be used
-# directly.
-#
-# \post The configuration data in memory is modified according to the data
-# recorded in the overrides.
-#
-# \post The contents of CONFIG_OVERRIDES is cleared.
-config_apply_overrides() {
- for override in ${CONFIG_OVERRIDES}; do
- case "${override}" in
- set:*)
- local var="$(echo ${override} | cut -d : -f 2)"
- local value
- eval value="\"\${config_override_var_${var}}\""
- config_set "${var}" "${value}"
- ;;
- unset:*)
- local var="$(echo ${override} | cut -d : -f 2)"
- unset "config_var_${var}" || true
- ;;
- esac
- done
- CONFIG_OVERRIDES=
-}
-
-
-# Records an override to be applied to the configuration.
-#
-# Overrides are configuration variables set through the command line. These can
-# be set before loading the configuration file with config_load.
-#
-# \post Any errors in the processing of the configuration override terminate the
-# execution of the script.
-#
-# \param arg An override of the form variable=value.
-config_override() {
- local arg="${1}"; shift
-
- case "${arg}" in
- *=*)
- ;;
- *)
- utils_usage_error "Invalid configuration override" \
- "${arg}; must be of the form variable=value"
- ;;
- esac
- local var="$(echo "${arg}" | cut -d = -f 1)"
- local value="$(echo "${arg}" | cut -d = -f 2-)"
-
- [ -n "${var}" ] || utils_usage_error "Invalid configuration override" \
- "${arg}; must be of the form variable=value"
- config_is_valid "${var}" \
- || utils_usage_error "Unknown configuration variable ${var}"
-
- if [ -n "${value}" ]; then
- eval "config_override_var_${var}=\"${value}\""
- CONFIG_OVERRIDES="${CONFIG_OVERRIDES} set:${var}"
- else
- CONFIG_OVERRIDES="${CONFIG_OVERRIDES} unset:${var}"
- fi
-}
diff --git a/sysutils/sysbuild/files/config_test.sh b/sysutils/sysbuild/files/config_test.sh
deleted file mode 100644
index 4d650becc0c..00000000000
--- a/sysutils/sysbuild/files/config_test.sh
+++ /dev/null
@@ -1,395 +0,0 @@
-# Copyright 2012 Google Inc.
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-# * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-# * Neither the name of Google Inc. nor the names of its contributors
-# may be used to endorse or promote products derived from this software
-# without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-atf_test_case is_valid__true
-is_valid__true_body() {
- config_init VAR1 VAR3
- for var in VAR1 VAR3; do
- config_is_valid "${var}" || atf_fail "${var} not found"
- done
-}
-
-
-atf_test_case is_valid__false
-is_valid__false_body() {
- config_init VAR1 VAR3
- for var in VAR11 VAR2 VAR; do
- if config_is_valid "${var}"; then
- atf_fail "${var} found but was not registered"
- fi
- done
-}
-
-
-atf_test_case has__true__empty
-has__true__empty_body() {
- config_init TESTVAR
- config_set TESTVAR ""
- config_has TESTVAR || atf_fail "Expected variable not found"
-}
-
-
-atf_test_case has__true__not_empty
-has__true__not_empty_body() {
- config_init TESTVAR
- config_set TESTVAR "foo"
- config_has TESTVAR || atf_fail "Expected variable not found"
-}
-
-
-atf_test_case has__false
-has__false_body() {
- config_init TESTVAR
- if config_has TESTVAR; then
- atf_fail "Unexpected variable found"
- fi
-}
-
-
-atf_test_case get__ok__empty
-get__ok__empty_body() {
- config_init TESTVAR
-
- config_set TESTVAR ""
- [ -z "$(config_get TESTVAR)" ] || atf_fail "Failed to query value"
-}
-
-
-atf_test_case get__ok__not_empty
-get__ok__not_empty_body() {
- config_init TESTVAR
-
- config_set TESTVAR some-value
- [ "$(config_get TESTVAR)" = some-value ] || atf_fail "Failed to query value"
-}
-
-
-atf_test_case get__undefined_variable
-get__undefined_variable_body() {
- config_init TESTVAR
-
- if ( config_get TESTVAR ) >out 2>err; then
- atf_fail "Got unset variable successfully"
- else
- grep "Required configuration variable TESTVAR not set" err >/dev/null \
- || atf_fail "Expected error message not found"
- fi
-}
-
-
-atf_test_case get_bool__true
-get_bool__true_body() {
- config_init TESTVAR
-
- for value in yes Yes true True; do
- config_set TESTVAR "${value}"
- config_get_bool TESTVAR || atf_fail "Expected true, but got false"
- done
-}
-
-
-atf_test_case get_bool__false
-get_bool__false_body() {
- config_init TESTVAR
-
- for value in no No false False; do
- config_set TESTVAR "${value}"
- if config_get_bool TESTVAR; then
- atf_fail "Expected false, but got true"
- fi
- done
-}
-
-
-atf_test_case get_bool__undefined_variable
-get_bool__undefined_variable_body() {
- config_init TESTVAR
-
- if config_get_bool TESTVAR; then
- atf_fail "Expected false, but got true"
- fi
-}
-
-
-atf_test_case get_bool__invalid_value
-get_bool__invalid_value_body() {
- config_init TESTVAR
-
- config_set TESTVAR not-a-boolean
- if ( config_get_bool TESTVAR ) >out 2>err; then
- atf_fail "Got invalid boolean value successfully"
- else
- grep "Invalid boolean value in variable TESTVAR" err >/dev/null \
- || atf_fail "Expected error message not found"
- fi
-}
-
-
-atf_test_case get_default__defined__empty
-get_default__defined__empty_body() {
- config_init TESTVAR
- config_set TESTVAR ""
- [ "$(config_get_default TESTVAR 'foo')" = "" ] \
- || atf_fail "Did not fetch defined value"
-}
-
-
-atf_test_case get_default__defined__not_empty
-get_default__defined__not_empty_body() {
- config_init TESTVAR
- config_set TESTVAR "bar"
- [ "$(config_get_default TESTVAR 'foo')" = "bar" ] \
- || atf_fail "Did not fetch defined value"
-}
-
-
-atf_test_case get_default__default__empty
-get_default__default__empty_body() {
- config_init TESTVAR
- [ "$(config_get_default TESTVAR '')" = "" ] \
- || atf_fail "Did not fetch default value"
-}
-
-
-atf_test_case get_default__default__not_empty
-get_default__default__not_empty_body() {
- config_init TESTVAR
- [ "$(config_get_default TESTVAR 'foo')" = "foo" ] \
- || atf_fail "Did not fetch default value"
-}
-
-
-atf_test_case set__ok
-set__ok_body() {
- config_init TESTVAR
-
- config_set TESTVAR some-value
- [ "${config_var_TESTVAR}" = some-value ] || atf_fail "Failed to set value"
-}
-
-
-atf_test_case set__unknown_variable
-set__unknown_variable_body() {
- config_init TESTVAR
-
- if ( config_set TESTVAR2 some-value ) >out 2>err; then
- atf_fail "Set unknown variable successfully"
- else
- grep "Unknown configuration variable TESTVAR2" err >/dev/null \
- || atf_fail "Expected error message not found"
- fi
-}
-
-
-atf_test_case load__filter_variables
-load__filter_variables_body() {
- config_init Z VAR1 EMPTY
-
- cat >test.conf <<EOF
-A=foo
-Z=bar
-VAR1="some text"
-VAR2="some other text"
-EOF
-
- config_load $(pwd)/test.conf || atf_fail "Failed to load test configuration"
-
- [ "${config_var_Z}" = bar ] || \
- atf_fail "Z not found in configuration"
- [ "${config_var_VAR1}" = "some text" ] || \
- atf_fail "VAR1 not found in configuration"
-
- [ "${config_var_EMPTY-has_not_been_set}" = has_not_been_set ] || \
- atf_fail "Undefined variable set, but should not have been"
-
- [ "${config_var_A-unset}" = unset ] || \
- atf_fail "A set in configuration, but not expected"
- [ "${config_var_VAR2-unset}" = unset ] || \
- atf_fail "VAR2 set in configuration, but not expected"
-}
-
-
-atf_test_case load__allow_undefine
-load__allow_undefine_body() {
- config_init UNDEFINE
-
- cat >test.conf <<EOF
-UNDEFINE=
-EOF
-
- config_set UNDEFINE "remove me"
- config_load $(pwd)/test.conf || atf_fail "Failed to load test configuration"
- if config_has UNDEFINE; then
- atf_fail "Undefine attempt from configuration did not work"
- fi
-}
-
-
-atf_test_case load__current_directory
-load__current_directory_body() {
- config_init A
-
- cat >test.conf <<EOF
-A=foo
-EOF
-
- config_load test.conf || atf_fail "Failed to load test configuration"
-
- [ "${config_var_A}" = foo ] || \
- atf_fail "A not found in configuration"
-}
-
-
-atf_test_case load__missing_file
-load__missing_file_body() {
- if ( config_load missing.conf ) >out 2>err; then
- atf_fail "Missing configuration file load succeeded"
- else
- grep "Configuration file missing.conf does not exist" err >/dev/null \
- || atf_fail "Expected error message not found"
- fi
-}
-
-
-atf_test_case load__invalid_file
-load__invalid_file_body() {
- echo "this file is invalid" >invalid.conf
-
- if ( config_load invalid.conf ) >out 2>err; then
- atf_fail "Invalid configuration file load succeeded"
- else
- cat err
- grep "Failed to load configuration file invalid.conf" err >/dev/null \
- || atf_fail "Expected error message not found"
- fi
-}
-
-
-atf_test_case override__ok_before_load
-override__ok_before_load_body() {
- config_init VAR1 VAR2
-
- cat >test.conf <<EOF
-VAR1="override me"
-VAR2="do not override me"
-EOF
-
- config_override "VAR1=new value"
- config_load test.conf || atf_fail "Failed to load test configuration"
-
- [ "${config_var_VAR1}" = "new value" ] || atf_fail "Override failed"
- [ "${config_var_VAR2}" = "do not override me" ] \
- || atf_fail "Overrode more than one variable"
-}
-
-
-atf_test_case override__not_ok_after_load
-override__not_ok_after_load_body() {
- config_init VAR1 VAR2
-
- cat >test.conf <<EOF
-VAR1="override me"
-VAR2="do not override me"
-EOF
-
- config_load test.conf || atf_fail "Failed to load test configuration"
- config_override "VAR1=new value"
-
- [ "${config_var_VAR1}" = "override me" ] \
- || atf_fail "Override succeeded, but it should not have"
- [ "${config_var_VAR2}" = "do not override me" ] \
- || atf_fail "Overrode more than one variable"
-}
-
-
-atf_test_case override__invalid_format
-override__invalid_format_body() {
- for arg in foo =bar ''; do
- if ( config_override "${arg}" ) >out 2>err; then
- atf_fail "Invalid configuration override ${arg} succeeded"
- else
- cat err
- grep "Invalid configuration override ${arg}" err >/dev/null \
- || atf_fail "Expected error message not found"
- fi
- done
-}
-
-
-atf_test_case override__unknown_variable
-override__unknown_variable_body() {
- config_init Z VAR1
- for arg in A=b VAR2=d; do
- if ( config_override "${arg}" ) >out 2>err; then
- atf_fail "Invalid configuration override ${arg} succeeded"
- else
- cat err
- grep "Unknown configuration variable ${var}" err >/dev/null \
- || atf_fail "Expected error message not found"
- fi
- done
-}
-
-
-atf_init_test_cases() {
- atf_add_test_case is_valid__true
- atf_add_test_case is_valid__false
-
- atf_add_test_case has__true__empty
- atf_add_test_case has__true__not_empty
- atf_add_test_case has__false
-
- atf_add_test_case get__ok__empty
- atf_add_test_case get__ok__not_empty
- atf_add_test_case get__undefined_variable
-
- atf_add_test_case get_bool__true
- atf_add_test_case get_bool__false
- atf_add_test_case get_bool__undefined_variable
- atf_add_test_case get_bool__invalid_value
-
- atf_add_test_case get_default__defined__empty
- atf_add_test_case get_default__defined__not_empty
- atf_add_test_case get_default__default__empty
- atf_add_test_case get_default__default__not_empty
-
- atf_add_test_case set__ok
- atf_add_test_case set__unknown_variable
-
- atf_add_test_case load__filter_variables
- atf_add_test_case load__allow_undefine
- atf_add_test_case load__current_directory
- atf_add_test_case load__missing_file
- atf_add_test_case load__invalid_file
-
- atf_add_test_case override__ok_before_load
- atf_add_test_case override__not_ok_after_load
- atf_add_test_case override__invalid_format
- atf_add_test_case override__unknown_variable
-}
diff --git a/sysutils/sysbuild/files/cvs.subr b/sysutils/sysbuild/files/cvs.subr
deleted file mode 100644
index da8faa5f76e..00000000000
--- a/sysutils/sysbuild/files/cvs.subr
+++ /dev/null
@@ -1,107 +0,0 @@
-# Copyright 2012 Google Inc.
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-# * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-# * Neither the name of Google Inc. nor the names of its contributors
-# may be used to endorse or promote products derived from this software
-# without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-# \file cvs.subr
-# Utilities to invoke CVS and wrappers to simplify its operation.
-
-
-# Checks out or updates a working copy.
-#
-# \param cvsroot Location of the CVS repository.
-# \param module Module to check out, when the working copy does not exist yet.
-# \param tag CVS tag to use, if any; may be empty.
-# \param directory Target directory in which to store the checked out files or
-# the updated files.
-cvs_fetch() {
- local cvsroot="${1}"; shift
- local module="${1}"; shift
- local tag="${1}"; shift
- local directory="${1}"; shift
-
- if [ -d "${directory}" ]; then
- cvs_update "${cvsroot}" "${tag}" "${directory}"
- else
- cvs_checkout "${cvsroot}" "${module}" "${tag}" "${directory}"
- fi
-}
-
-
-# Checks out a new directory from CVS.
-#
-# \param cvsroot Location of the CVS repository.
-# \param module The name of the module to check out.
-# \param tag CVS tag to use, if any; may be empty.
-# \param directory The directory in which to perform the checkout.
-cvs_checkout() {
- local cvsroot="${1}"; shift
- local module="${1}"; shift
- local tag="${1}"; shift
- local directory="${1}"; shift
-
- local rflag=
- [ -z "${tag}" ] || rflag="-r${tag}"
-
- [ ! -d "${directory}" ] || utils_error "Cannot checkout into" \
- "${directory}; directory already exists"
- mkdir -p "${directory}"
- mkdir "${directory}"/.cvs-checkout \
- || utils_error "Failed to create ${directory}"
- ( cd "${directory}"/.cvs-checkout &&
- utils_run cvs -d"${cvsroot}" -q checkout -P ${rflag} "${module}" )
- mv "${directory}"/.cvs-checkout/"${module}"/* "${directory}"/ \
- || true # Maybe the checkout yielded no files...
- rm -rf "${directory}"/.cvs-checkout
-}
-
-
-# Updates an existing directory from CVS.
-#
-# \param cvsroot Location of the CVS repository.
-# \param tag CVS tag to use, if any; may be empty.
-# \param directory The directory in which to perform the update.
-cvs_update() {
- local cvsroot="${1}"; shift
- local tag="${1}"; shift
- local directory="${1}"; shift
-
- local rflag=
- [ -z "${tag}" ] || rflag="-r${tag}"
-
- [ -d "${directory}" ] || utils_error "Cannot update ${directory};" \
- "directory does not exist"
-
- if [ -d "${directory}/.cvs-checkout" ]; then
- # Attempt to resume a previously aborted cvs_checkout.
- mv "${directory}"/.cvs-checkout/*/* "${directory}"/ \
- || true # Maybe the checkout yielded no files...
- rm -rf "${directory}"/.cvs-checkout
- fi
-
- ( cd "${directory}" && \
- utils_run cvs -d"${cvsroot}" -q update -d -P ${rflag} )
-}
diff --git a/sysutils/sysbuild/files/cvs_test.sh b/sysutils/sysbuild/files/cvs_test.sh
deleted file mode 100644
index d7fea271097..00000000000
--- a/sysutils/sysbuild/files/cvs_test.sh
+++ /dev/null
@@ -1,180 +0,0 @@
-# Copyright 2012 Google Inc.
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-# * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-# * Neither the name of Google Inc. nor the names of its contributors
-# may be used to endorse or promote products derived from this software
-# without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-MOCK_CVSROOT=":local:$(pwd)/cvsroot"
-
-
-# Creates a local CVS repository with a variety of modules.
-#
-# \param repository Path to the repository to create.
-# \param ... Modules to create.
-init_cvsroot() {
- local repository="${1}"; shift
-
- atf_check -o ignore -e ignore cvs -d "${repository}" init
-
- for module in "${@}"; do
- mkdir module
- cd module
- echo "first revision" >"file-in-${module}"
- cvs -d "${repository}" import -m "Import." "${module}" VENDOR_TAG \
- release_tag
- cd -
- rm -rf module
- done
-}
-
-
-atf_test_case fetch
-fetch_body() {
- init_cvsroot "${MOCK_CVSROOT}" src
-
- cvs_fetch "${MOCK_CVSROOT}" src "" first
- grep "first revision" first/file-in-src >/dev/null \
- || atf_fail "Unexpected version found"
-
- cp -rf first second
- echo "second revision" >second/file-in-src
- ( cd second && cvs commit -m "Second commit." )
-
- cvs_fetch "${MOCK_CVSROOT}" src "" first
- grep "second revision" first/file-in-src >/dev/null \
- || atf_fail "Unexpected version found"
-}
-
-
-atf_test_case checkout__same_name
-checkout__same_name_body() {
- init_cvsroot "${MOCK_CVSROOT}" first second
- cvs_checkout "${MOCK_CVSROOT}" first "" $(pwd)/a/b/c/first
- [ -f a/b/c/first/file-in-first ] || atf_fail "Files not checked out"
- if [ -f a/b/c/second/file-in-second ]; then
- atf_fail "Unexpected module checked out"
- fi
-}
-
-
-atf_test_case checkout__different_name
-checkout__different_name_body() {
- init_cvsroot "${MOCK_CVSROOT}" first second
- cvs_checkout "${MOCK_CVSROOT}" first "" $(pwd)/a/b/c/second
- [ -f a/b/c/second/file-in-first ] || atf_fail "Files not checked out"
-}
-
-
-atf_test_case checkout__already_exists
-checkout__already_exists_body() {
- mkdir usr/src
- if ( cvs_checkout "${MOCK_CVSROOT}" src "" $(pwd)/usr/src ) >out 2>err; then
- atf_fail "Checkout succeeded, but should not"
- else
- grep "Cannot checkout into $(pwd)/usr/src.*exists" err >/dev/null \
- || atf_fail "Expected error message not found"
- fi
-}
-
-
-atf_test_case checkout__permission_denied
-checkout__permission_denied_head() {
- atf_set "require.user" "unprivileged"
-}
-checkout__permission_denied_body() {
- init_cvsroot "${MOCK_CVSROOT}" src
- mkdir usr
- chmod 555 usr
- if ( cvs_checkout "${MOCK_CVSROOT}" src "" $(pwd)/usr/src ) >out 2>err; then
- atf_fail "Checkout succeeded, but should not"
- else
- grep "Failed to create $(pwd)/usr/src" err >/dev/null \
- || atf_fail "Expected error message not found"
- fi
-}
-
-
-atf_test_case update__ok
-update__ok_body() {
- init_cvsroot "${MOCK_CVSROOT}" first second
-
- cvs -d "${MOCK_CVSROOT}" checkout first
- mv first copy
- cvs -d "${MOCK_CVSROOT}" checkout first
-
- cvs_update "${MOCK_CVSROOT}" "" first
- grep "first revision" first/file-in-first >/dev/null \
- || atf_fail "Unexpected version found"
-
- echo "second revision" >copy/file-in-first
- ( cd copy && cvs commit -m "Second commit." )
-
- cvs_update "${MOCK_CVSROOT}" "" first
- grep "second revision" first/file-in-first >/dev/null \
- || atf_fail "Unexpected version found"
-}
-
-
-atf_test_case update__resume_checkout
-update__resume_checkout_body() {
- init_cvsroot "${MOCK_CVSROOT}" first
-
- cvs -d "${MOCK_CVSROOT}" checkout first
- mv first copy
-
- mkdir -p first/.cvs-checkout/first
- mv copy/CVS first/.cvs-checkout/first
- rm -rf copy
-
- cvs_update "${MOCK_CVSROOT}" "" first
- grep "first revision" first/file-in-first >/dev/null \
- || atf_fail "Unexpected version found"
-}
-
-
-atf_test_case update__does_not_exist
-update__does_not_exist_body() {
- if ( cvs_update "${MOCK_CVSROOT}" "" src ) >out 2>err; then
- atf_fail "Update succeeded, but should not"
- else
- grep "Cannot update src; .*not exist" err >/dev/null \
- || atf_fail "Expected error message not found"
- fi
-}
-
-
-atf_init_test_cases() {
- atf_add_test_case fetch
-
- atf_add_test_case checkout__same_name
- atf_add_test_case checkout__different_name
- atf_add_test_case checkout__already_exists
- atf_add_test_case checkout__permission_denied
-
- atf_add_test_case update__ok
- atf_add_test_case update__resume_checkout
- atf_add_test_case update__does_not_exist
-}
diff --git a/sysutils/sysbuild/files/sysbuild.sh b/sysutils/sysbuild/files/sysbuild.sh
index 777b334bd22..8560c0b7136 100644
--- a/sysutils/sysbuild/files/sysbuild.sh
+++ b/sysutils/sysbuild/files/sysbuild.sh
@@ -29,6 +29,11 @@
# \file sysbuild.sh
# Entry point and main program logic.
+shtk_import cli
+shtk_import config
+shtk_import cvs
+shtk_import process
+
# List of valid configuration variables.
#
@@ -50,14 +55,14 @@ SYSBUILD_CONFIG_VARS="BUILD_ROOT BUILD_TARGETS CVSROOT CVSTAG INCREMENTAL_BUILD
# him shoot himself in the foot if he so desires.
sysbuild_set_defaults() {
# Please remember to update sysbuild(1) if you change any default values.
- config_set BUILD_ROOT "${HOME}/sysbuild"
- config_set BUILD_TARGETS "release"
- config_set CVSROOT ":ext:anoncvs@anoncvs.NetBSD.org:/cvsroot"
- config_set INCREMENTAL_BUILD "false"
- config_set MACHINES "$(uname -m)"
- config_set RELEASEDIR "${HOME}/sysbuild/release"
- config_set SRCDIR "${HOME}/sysbuild/src"
- config_set UPDATE_SOURCES "true"
+ shtk_config_set BUILD_ROOT "${HOME}/sysbuild"
+ shtk_config_set BUILD_TARGETS "release"
+ shtk_config_set CVSROOT ":ext:anoncvs@anoncvs.NetBSD.org:/cvsroot"
+ shtk_config_set INCREMENTAL_BUILD "false"
+ shtk_config_set MACHINES "$(uname -m)"
+ shtk_config_set RELEASEDIR "${HOME}/sysbuild/release"
+ shtk_config_set SRCDIR "${HOME}/sysbuild/src"
+ shtk_config_set UPDATE_SOURCES "true"
}
@@ -67,22 +72,22 @@ sysbuild_set_defaults() {
do_one_build() {
local machine="${1}"; shift
- local basedir="$(config_get BUILD_ROOT)/${machine}"
+ local basedir="$(shtk_config_get BUILD_ROOT)/${machine}"
local jflag=
- if config_has NJOBS; then
- jflag="-j$(config_get NJOBS)"
+ if shtk_config_has NJOBS; then
+ jflag="-j$(shtk_config_get NJOBS)"
fi
local uflag=
- if config_get_bool INCREMENTAL_BUILD; then
+ if shtk_config_get_bool INCREMENTAL_BUILD; then
uflag=-u
# Get rid of any possibly-old modules; they are a constant source of
# update-build problems.
rm -rf "${basedir}/destdir/stand"/*
else
- utils_info "Cleaning up previous build files"
+ shtk_cli_info "Cleaning up previous build files"
rm -rf "${basedir}/destdir"
rm -rf "${basedir}/obj"
rm -rf "${basedir}/tools"
@@ -90,16 +95,16 @@ do_one_build() {
local xflag=
local Xflag=
- if config_has XSRCDIR; then
+ if shtk_config_has XSRCDIR; then
xflag=-x
- Xflag="-X$(config_get XSRCDIR)"
+ Xflag="-X$(shtk_config_get XSRCDIR)"
fi
- ( cd "$(config_get SRCDIR)" && utils_run ./build.sh \
+ ( cd "$(shtk_config_get SRCDIR)" && shtk_process_run ./build.sh \
-D"${basedir}/destdir" \
-M"${basedir}/obj" \
-N2 \
- -R"$(config_get RELEASEDIR)" \
+ -R"$(shtk_config_get RELEASEDIR)" \
-T"${basedir}/tools" \
-U \
${Xflag} \
@@ -107,7 +112,7 @@ do_one_build() {
-m"${machine}" \
${uflag} \
${xflag} \
- $(config_get BUILD_TARGETS) )
+ $(shtk_config_get BUILD_TARGETS) )
}
@@ -118,24 +123,24 @@ sysbuild_build() {
while getopts ':f' arg "${@}"; do
case "${arg}" in
f) # Convenience flag for a "fast mode".
- config_set "INCREMENTAL_BUILD" "true"
- config_set "UPDATE_SOURCES" "false"
+ shtk_config_set "INCREMENTAL_BUILD" "true"
+ shtk_config_set "UPDATE_SOURCES" "false"
;;
\?)
- utils_usage_error "Unknown option -${OPTARG}"
+ shtk_cli_usage_error "Unknown option -${OPTARG}"
;;
esac
done
shift $((${OPTIND} - 1))
- [ ${#} -eq 0 ] || config_set BUILD_TARGETS "${*}"
+ [ ${#} -eq 0 ] || shtk_config_set BUILD_TARGETS "${*}"
- if config_get_bool UPDATE_SOURCES; then
+ if shtk_config_get_bool UPDATE_SOURCES; then
sysbuild_fetch
fi
- for machine in $(config_get MACHINES); do
+ for machine in $(shtk_config_get MACHINES); do
do_one_build "${machine}"
done
}
@@ -145,11 +150,11 @@ sysbuild_build() {
#
# \params ... The options and arguments to the command.
sysbuild_config() {
- [ ${#} -eq 0 ] || utils_usage_error "config does not take any arguments"
+ [ ${#} -eq 0 ] || shtk_cli_usage_error "config does not take any arguments"
for var in ${SYSBUILD_CONFIG_VARS}; do
- if config_has "${var}"; then
- echo "${var} = $(config_get "${var}")"
+ if shtk_config_has "${var}"; then
+ echo "${var} = $(shtk_config_get "${var}")"
else
echo "${var} is undefined"
fi
@@ -161,18 +166,18 @@ sysbuild_config() {
#
# \params ... The options and arguments to the command.
sysbuild_fetch() {
- [ ${#} -eq 0 ] || utils_usage_error "fetch does not take any arguments"
+ [ ${#} -eq 0 ] || shtk_cli_usage_error "fetch does not take any arguments"
- local cvsroot="$(config_get CVSROOT)"
+ local cvsroot="$(shtk_config_get CVSROOT)"
- utils_info "Updating base source tree"
- cvs_fetch "${cvsroot}" src "$(config_get_default CVSTAG '')" \
- "$(config_get SRCDIR)"
+ shtk_cli_info "Updating base source tree"
+ shtk_cvs_fetch "${cvsroot}" src "$(shtk_config_get_default CVSTAG '')" \
+ "$(shtk_config_get SRCDIR)"
- if config_has XSRCDIR; then
- utils_info "Updating X11 source tree"
- cvs_fetch "${cvsroot}" xsrc "$(config_get_default CVSTAG '')" \
- "$(config_get XSRCDIR)"
+ if shtk_config_has XSRCDIR; then
+ shtk_cli_info "Updating X11 source tree"
+ shtk_cvs_fetch "${cvsroot}" xsrc \
+ "$(shtk_config_get_default CVSTAG '')" "$(shtk_config_get XSRCDIR)"
fi
}
@@ -201,11 +206,11 @@ sysbuild_config_load() {
fi
done
[ -n "${config_file}" ] \
- || utils_usage_error "Cannot locate configuration named" \
+ || shtk_cli_usage_error "Cannot locate configuration named" \
"'${config_name}'"
;;
esac
- config_load "${config_file}"
+ shtk_config_load "${config_file}"
}
@@ -217,7 +222,7 @@ sysbuild_config_load() {
sysbuild_main() {
local config_name="default"
- config_init ${SYSBUILD_CONFIG_VARS}
+ shtk_config_init ${SYSBUILD_CONFIG_VARS}
while getopts ':c:o:' arg "${@}"; do
case "${arg}" in
@@ -226,17 +231,17 @@ sysbuild_main() {
;;
o) # Override for a particular configuration variable.
- config_override "${OPTARG}"
+ shtk_config_override "${OPTARG}"
;;
\?)
- utils_usage_error "Unknown option -${OPTARG}"
+ shtk_cli_usage_error "Unknown option -${OPTARG}"
;;
esac
done
shift $((${OPTIND} - 1))
- [ ${#} -ge 1 ] || utils_usage_error "No command specified"
+ [ ${#} -ge 1 ] || shtk_cli_usage_error "No command specified"
local exit_code=0
@@ -249,7 +254,7 @@ sysbuild_main() {
;;
*)
- utils_usage_error "Unknown command ${command}"
+ shtk_cli_usage_error "Unknown command ${command}"
;;
esac
diff --git a/sysutils/sysbuild/files/sysbuild4cron.sh b/sysutils/sysbuild/files/sysbuild4cron.sh
index 68353b03e35..bdb0924bcb0 100644
--- a/sysutils/sysbuild/files/sysbuild4cron.sh
+++ b/sysutils/sysbuild/files/sysbuild4cron.sh
@@ -29,6 +29,8 @@
# \file sysbuild4cron.sh
# Entry point and main program logic.
+shtk_import cli
+
# Paths to installed files.
#
@@ -85,7 +87,7 @@ sysbuild4cron_main() {
;;
\?)
- utils_usage_error "Unknown option -${OPTARG}"
+ shtk_cli_usage_error "Unknown option -${OPTARG}"
;;
esac
done
@@ -96,11 +98,11 @@ sysbuild4cron_main() {
if [ ! -d "${logdir}" ]; then
mkdir -p "$(dirname "${logdir}")" >/dev/null 2>/dev/null || true
mkdir "${logdir}" \
- || utils_error "Failed to create directory '${logdir}'"
+ || shtk_cli_error "Failed to create directory '${logdir}'"
fi
local exit_code=0
- local logfile="${logdir}/${Utils_ProgName}.$(date +%Y%m%d%H%M%S).log"
+ local logfile="${logdir}/$(shtk_cli_progname).$(date +%Y%m%d%H%M%S).log"
"${@}" >"${logfile}" 2>&1 \
|| sysbuild4cron_email "${logfile}" "${recipient}" "${@}"
}
diff --git a/sysutils/sysbuild/files/sysbuild4cron_test.sh b/sysutils/sysbuild/files/sysbuild4cron_test.sh
index 39ae0161394..fca4b0b3174 100644
--- a/sysutils/sysbuild/files/sysbuild4cron_test.sh
+++ b/sysutils/sysbuild/files/sysbuild4cron_test.sh
@@ -1,3 +1,4 @@
+#! @ATF_SH@
# Copyright 2012 Google Inc.
# All rights reserved.
#
diff --git a/sysutils/sysbuild/files/sysbuild_test.sh b/sysutils/sysbuild/files/sysbuild_test.sh
index a29f2f37b7c..c06bd39111b 100644
--- a/sysutils/sysbuild/files/sysbuild_test.sh
+++ b/sysutils/sysbuild/files/sysbuild_test.sh
@@ -1,3 +1,4 @@
+#! @ATF_SH@
# Copyright 2012 Google Inc.
# All rights reserved.
#
@@ -91,21 +92,6 @@ create_mock_cvsroot() {
}
-# Creates a fake id(1) binary for use by the "unprivileged-user" tests.
-create_mock_id() {
- [ -n "@SYSBUILD_USER@" ] \
- || atf_skip "Package built without unprivileged-user"
-
- cat >id <<EOF
-#! /bin/sh
-
-echo @SYSBUILD_USER@
-EOF
- chmod +x id
- PATH="$(pwd):${PATH}"
-}
-
-
atf_test_case build__custom_dirs
build__custom_dirs_body() {
create_mock_cvsroot "${MOCK_CVSROOT}"
diff --git a/sysutils/sysbuild/files/utils.subr b/sysutils/sysbuild/files/utils.subr
deleted file mode 100644
index c424341606a..00000000000
--- a/sysutils/sysbuild/files/utils.subr
+++ /dev/null
@@ -1,91 +0,0 @@
-# Copyright 2012 Google Inc.
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-# * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-# * Neither the name of Google Inc. nor the names of its contributors
-# may be used to endorse or promote products derived from this software
-# without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-# \file utils.subr
-# Miscellaneous utility functions and global variables.
-
-
-# Base name of the running script.
-Utils_ProgName="${0##*/}"
-
-
-# Prints a runtime error and exits.
-#
-# \param ... The message to print. Can be provided as multiple words and, in
-# that case, they are joined together by a single whitespace.
-utils_error() {
- echo "${Utils_ProgName}: E: $*" 1>&2
- exit 1
-}
-
-
-# Prints an informational message.
-#
-# \param ... The message to print. Can be provided as multiple words and, in
-# that case, they are joined together by a single whitespace.
-utils_info() {
- echo "${Utils_ProgName}: I: $*" 1>&2
-}
-
-
-# Prints a runtime warning.
-#
-# \param ... The message to print. Can be provided as multiple words and, in
-# that case, they are joined together by a single whitespace.
-utils_warning() {
- echo "${Utils_ProgName}: W: $*" 1>&2
-}
-
-
-# Prints an usage error and exits.
-#
-# \param ... The message to print. Can be provided as multiple words and, in
-# that case, they are joined together by a single whitespace.
-utils_usage_error() {
- echo "${Utils_ProgName}: E: $*" 1>&2
- echo "Type 'man ${Utils_ProgName}' for help" 1>&2
- exit 1
-}
-
-
-# Executes a command with logging.
-#
-# \param ... The command to execute.
-#
-# \return The exit code of the executed command.
-utils_run() {
- utils_info "Running '${@}' in $(pwd)"
- local ret=0
- "${@}" || ret="${?}"
- if [ ${ret} -eq 0 ]; then
- utils_info "Command finished successfully"
- else
- utils_warning "Command failed with code ${ret}"
- fi
- return "${ret}"
-}
diff --git a/sysutils/sysbuild/files/utils_test.sh b/sysutils/sysbuild/files/utils_test.sh
deleted file mode 100644
index 9534cd8f777..00000000000
--- a/sysutils/sysbuild/files/utils_test.sh
+++ /dev/null
@@ -1,145 +0,0 @@
-# Copyright 2012 Google Inc.
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-# * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-# * Neither the name of Google Inc. nor the names of its contributors
-# may be used to endorse or promote products derived from this software
-# without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-atf_test_case global_progname
-global_progname_body() {
- [ "${Utils_ProgName}" = utils_test ] \
- || atf_fail "Invalid value in Utils_ProgName"
-}
-
-
-atf_test_case error
-error_body() {
- if ( utils_error "This is" "a message"; echo "not seen" ) >out 2>err; then
- atf_fail "utils_error did not exit with an error"
- else
- grep "utils_test: E: This is a message" err >/dev/null \
- || atf_fail "Expected error message not found"
- [ ! -s out ] || atf_fail "Unexpected output in stdout"
- fi
-}
-
-
-atf_test_case info
-info_body() {
- ( utils_info "This is" "a message"; echo "continuing" ) >out 2>err
- grep "utils_test: I: This is a message" err >/dev/null \
- || atf_fail "Expected info message not found"
- grep "continuing" out >/dev/null || atf_fail "Execution aborted"
-}
-
-
-atf_test_case usage_error
-usage_error_body() {
- if ( utils_usage_error "This is" "a message"; echo "not seen" ) >out 2>err
- then
- atf_fail "utils_usage_error did not exit with an error"
- else
- grep "utils_test: E: This is a message" err >/dev/null \
- || atf_fail "Expected error message not found"
- grep "Type 'man utils_test' for help" err >/dev/null \
- || atf_fail "Expected instructional message not found"
- [ ! -s out ] || atf_fail "Unexpected output in stdout"
- fi
-}
-
-
-atf_test_case warning
-warning_body() {
- ( utils_warning "This is" "a message"; echo "continuing" ) >out 2>err
- grep "utils_test: W: This is a message" err >/dev/null \
- || atf_fail "Expected info message not found"
- grep "continuing" out >/dev/null || atf_fail "Execution aborted"
-}
-
-
-atf_test_case run__ok
-run__ok_body() {
- cat >helper.sh <<EOF
-#! /bin/sh
-echo "This exits cleanly:" "\${@}"
-exit 0
-EOF
- chmod +x helper.sh
-
- utils_run ./helper.sh one two three >out 2>err \
- || atf_fail "Got an unexpected error code"
-
- cat >expout <<EOF
-This exits cleanly: one two three
-EOF
- atf_check -o file:expout cat out
-
- cat >experr <<EOF
-utils_test: I: Running './helper.sh one two three' in $(pwd)
-utils_test: I: Command finished successfully
-EOF
- atf_check -o file:experr cat err
-}
-
-
-atf_test_case run__fail
-run__fail_body() {
- cat >helper.sh <<EOF
-#! /bin/sh
-echo "This exits with an error:" "\${@}"
-exit 42
-EOF
- chmod +x helper.sh
-
- code=0
- utils_run ./helper.sh one two three >out 2>err || code="${?}"
- [ ${code} -eq 42 ] \
- || atf_fail "Did not get the expected error code; got ${code}"
-
- cat >expout <<EOF
-This exits with an error: one two three
-EOF
- atf_check -o file:expout cat out
-
- cat >experr <<EOF
-utils_test: I: Running './helper.sh one two three' in $(pwd)
-utils_test: W: Command failed with code 42
-EOF
- atf_check -o file:experr cat err
-}
-
-
-atf_init_test_cases() {
- atf_add_test_case global_progname
-
- atf_add_test_case error
- atf_add_test_case info
- atf_add_test_case warning
-
- atf_add_test_case usage_error
-
- atf_add_test_case run__ok
- atf_add_test_case run__fail
-}