From fa5d709fb266c97d4db15006bf855e887a6c123b Mon Sep 17 00:00:00 2001 From: MarcoFalke Date: Tue, 17 Dec 2019 13:33:58 -0500 Subject: ci: Move wrap-qemu into separate script --- ci/test/06_script_b.sh | 11 +---------- ci/test/wrap-qemu.sh | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 10 deletions(-) create mode 100755 ci/test/wrap-qemu.sh (limited to 'ci/test') diff --git a/ci/test/06_script_b.sh b/ci/test/06_script_b.sh index e641cef279..139894e7c6 100755 --- a/ci/test/06_script_b.sh +++ b/ci/test/06_script_b.sh @@ -11,16 +11,7 @@ if [ -n "$QEMU_USER_CMD" ]; then # Generate all binaries, so that they can be wrapped DOCKER_EXEC make $MAKEJOBS -C src/secp256k1 VERBOSE=1 DOCKER_EXEC make $MAKEJOBS -C src/univalue VERBOSE=1 - for b_name in {"${BASE_OUTDIR}/bin"/*,src/secp256k1/*tests,src/univalue/{no_nul,test_json,unitester,object}}; do - # shellcheck disable=SC2044 - for b in $(find "${BASE_ROOT_DIR}" -executable -type f -name $(basename $b_name)); do - echo "Wrap $b ..." - DOCKER_EXEC mv "$b" "${b}_orig" - DOCKER_EXEC echo "\#\!/usr/bin/env bash" \> "$b" - DOCKER_EXEC echo "$QEMU_USER_CMD \\\"${b}_orig\\\" \\\"\\\$@\\\"" \>\> "$b" - DOCKER_EXEC chmod +x "$b" - done - done + DOCKER_EXEC "${BASE_ROOT_DIR}/ci/test/wrap-qemu.sh" END_FOLD fi diff --git a/ci/test/wrap-qemu.sh b/ci/test/wrap-qemu.sh new file mode 100755 index 0000000000..f1d3088748 --- /dev/null +++ b/ci/test/wrap-qemu.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +# +# Copyright (c) 2018 The Bitcoin Core developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. + +export LC_ALL=C.UTF-8 + +for b_name in {"${BASE_OUTDIR}/bin"/*,src/secp256k1/*tests,src/univalue/{no_nul,test_json,unitester,object}}; do + # shellcheck disable=SC2044 + for b in $(find "${BASE_ROOT_DIR}" -executable -type f -name $(basename $b_name)); do + echo "Wrap $b ..." + mv "$b" "${b}_orig" + echo '#!/usr/bin/env bash' > "$b" + echo "$QEMU_USER_CMD \"${b}_orig\" \"\$@\"" >> "$b" + chmod +x "$b" + done +done -- cgit v1.2.3 From faba4672b64fb5ba89e5cb6299479887494b571a Mon Sep 17 00:00:00 2001 From: MarcoFalke Date: Tue, 17 Dec 2019 14:16:48 -0500 Subject: ci: Fix QEMU_USER_CMD parse issues * Fix bash syntax by adding missing - * Disable QEMU_USER_CMD fallback when it is set Apparently bash can't distinguish an unset variable from a variable that is set to the empty string * Export the environment variable to the docker env, otherwise it couldn't be used there --- ci/test/00_setup_env_arm.sh | 2 +- ci/test/00_setup_env_s390x.sh | 2 +- ci/test/04_install.sh | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'ci/test') diff --git a/ci/test/00_setup_env_arm.sh b/ci/test/00_setup_env_arm.sh index 6e2542584c..4047f8ed8d 100644 --- a/ci/test/00_setup_env_arm.sh +++ b/ci/test/00_setup_env_arm.sh @@ -9,7 +9,7 @@ export LC_ALL=C.UTF-8 export HOST=arm-linux-gnueabihf # The host arch is unknown, so we run the tests through qemu. # If the host is arm and wants to run the tests natively, it can set QEMU_USER_CMD to the empty string. -export QEMU_USER_CMD="${QEMU_USER_CMD:"qemu-arm -L /usr/arm-linux-gnueabihf/"}" +if [ -z ${QEMU_USER_CMD+x} ]; then export QEMU_USER_CMD="${QEMU_USER_CMD:-"qemu-arm -L /usr/arm-linux-gnueabihf/"}"; fi # We don't know whether the host can run the cross compiled binaries. To run them, either qemu-user or libc6:armhf for # the target is required, so install both. export DPKG_ADD_ARCH="armhf" diff --git a/ci/test/00_setup_env_s390x.sh b/ci/test/00_setup_env_s390x.sh index 637d549553..a4f4841848 100644 --- a/ci/test/00_setup_env_s390x.sh +++ b/ci/test/00_setup_env_s390x.sh @@ -9,7 +9,7 @@ export LC_ALL=C.UTF-8 export HOST=s390x-linux-gnu # The host arch is unknown, so we run the tests through qemu. # If the host is s390x and wants to run the tests natively, it can set QEMU_USER_CMD to the empty string. -export QEMU_USER_CMD="${QEMU_USER_CMD:"qemu-s390x"}" +if [ -z ${QEMU_USER_CMD+x} ]; then export QEMU_USER_CMD="${QEMU_USER_CMD:-"qemu-s390x"}"; fi export PACKAGES="python3-zmq bsdmainutils qemu-user" export RUN_UNIT_TESTS=true export RUN_FUNCTIONAL_TESTS=true diff --git a/ci/test/04_install.sh b/ci/test/04_install.sh index 62f30535cb..cf2b39c68d 100755 --- a/ci/test/04_install.sh +++ b/ci/test/04_install.sh @@ -41,7 +41,7 @@ export ASAN_OPTIONS="detect_stack_use_after_return=1:check_initialization_order= export LSAN_OPTIONS="suppressions=${BASE_ROOT_DIR}/test/sanitizer_suppressions/lsan" export TSAN_OPTIONS="suppressions=${BASE_ROOT_DIR}/test/sanitizer_suppressions/tsan:log_path=${BASE_SCRATCH_DIR}/sanitizer-output/tsan" export UBSAN_OPTIONS="suppressions=${BASE_ROOT_DIR}/test/sanitizer_suppressions/ubsan:print_stacktrace=1:halt_on_error=1:report_error_type=1" -env | grep -E '^(BITCOIN_CONFIG|BASE_|CCACHE_|WINEDEBUG|LC_ALL|BOOST_TEST_RANDOM|CONFIG_SHELL|(ASAN|LSAN|TSAN|UBSAN)_OPTIONS)' | tee /tmp/env +env | grep -E '^(BITCOIN_CONFIG|BASE_|QEMU_|CCACHE_|WINEDEBUG|LC_ALL|BOOST_TEST_RANDOM|CONFIG_SHELL|(ASAN|LSAN|TSAN|UBSAN)_OPTIONS)' | tee /tmp/env if [[ $HOST = *-mingw32 ]]; then DOCKER_ADMIN="--cap-add SYS_ADMIN" elif [[ $BITCOIN_CONFIG = *--with-sanitizers=*address* ]]; then # If ran with (ASan + LSan), Docker needs access to ptrace (https://github.com/google/sanitizers/issues/764) -- cgit v1.2.3 From fabb946090be2f604da3d7d4b1bbe93b79baf23e Mon Sep 17 00:00:00 2001 From: MarcoFalke Date: Tue, 17 Dec 2019 15:24:03 -0500 Subject: ci: Install needed gcc and qemu-user iff cross-compiling --- ci/test/00_setup_env_arm.sh | 8 +++++--- ci/test/00_setup_env_s390x.sh | 7 ++++++- 2 files changed, 11 insertions(+), 4 deletions(-) (limited to 'ci/test') diff --git a/ci/test/00_setup_env_arm.sh b/ci/test/00_setup_env_arm.sh index 4047f8ed8d..b98b39a83a 100644 --- a/ci/test/00_setup_env_arm.sh +++ b/ci/test/00_setup_env_arm.sh @@ -10,10 +10,12 @@ export HOST=arm-linux-gnueabihf # The host arch is unknown, so we run the tests through qemu. # If the host is arm and wants to run the tests natively, it can set QEMU_USER_CMD to the empty string. if [ -z ${QEMU_USER_CMD+x} ]; then export QEMU_USER_CMD="${QEMU_USER_CMD:-"qemu-arm -L /usr/arm-linux-gnueabihf/"}"; fi -# We don't know whether the host can run the cross compiled binaries. To run them, either qemu-user or libc6:armhf for -# the target is required, so install both. export DPKG_ADD_ARCH="armhf" -export PACKAGES="python3 g++-arm-linux-gnueabihf busybox qemu-user libc6:armhf libstdc++6:armhf libfontconfig1:armhf libxcb1:armhf" +export PACKAGES="python3-zmq g++-arm-linux-gnueabihf busybox libc6:armhf libstdc++6:armhf libfontconfig1:armhf libxcb1:armhf" +if [ -n "$QEMU_USER_CMD" ]; then + # Likely cross-compiling, so install the needed gcc and qemu-user + export PACKAGES="$PACKAGES qemu-user" +fi export USE_BUSY_BOX=true export RUN_UNIT_TESTS=true export RUN_FUNCTIONAL_TESTS=true diff --git a/ci/test/00_setup_env_s390x.sh b/ci/test/00_setup_env_s390x.sh index a4f4841848..c049994944 100644 --- a/ci/test/00_setup_env_s390x.sh +++ b/ci/test/00_setup_env_s390x.sh @@ -10,7 +10,12 @@ export HOST=s390x-linux-gnu # The host arch is unknown, so we run the tests through qemu. # If the host is s390x and wants to run the tests natively, it can set QEMU_USER_CMD to the empty string. if [ -z ${QEMU_USER_CMD+x} ]; then export QEMU_USER_CMD="${QEMU_USER_CMD:-"qemu-s390x"}"; fi -export PACKAGES="python3-zmq bsdmainutils qemu-user" +export PACKAGES="python3-zmq" +if [ -n "$QEMU_USER_CMD" ]; then + # Likely cross-compiling, so install the needed gcc and qemu-user + export DPKG_ADD_ARCH="s390x" + export PACKAGES="$PACKAGES g++-s390x-linux-gnu qemu-user libc6:s390x libstdc++6:s390x libfontconfig1:s390x libxcb1:s390x" +fi export RUN_UNIT_TESTS=true export RUN_FUNCTIONAL_TESTS=true export GOAL="install" -- cgit v1.2.3 From fa3d77623ecb25dde6b5f4be11626ed16966eb29 Mon Sep 17 00:00:00 2001 From: MarcoFalke Date: Tue, 17 Dec 2019 15:22:41 -0500 Subject: ci: Use debian to avoid apt install 404 errors The default ubuntu mirror does not have s390x or armhf packages: Get:1 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB] Get:2 http://archive.ubuntu.com/ubuntu bionic InRelease [242 kB] Get:3 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB] Ign:4 http://security.ubuntu.com/ubuntu bionic-security/multiverse armhf Packages Get:5 http://archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB] Get:6 http://security.ubuntu.com/ubuntu bionic-security/restricted amd64 Packages [19.2 kB] Get:7 http://security.ubuntu.com/ubuntu bionic-security/multiverse amd64 Packages [6781 B] Ign:8 http://security.ubuntu.com/ubuntu bionic-security/universe armhf Packages Get:9 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages [761 kB] Ign:10 http://archive.ubuntu.com/ubuntu bionic/main armhf Packages Ign:11 http://archive.ubuntu.com/ubuntu bionic/restricted armhf Packages Get:12 http://archive.ubuntu.com/ubuntu bionic/restricted amd64 Packages [13.5 kB] Ign:13 http://archive.ubuntu.com/ubuntu bionic/multiverse armhf Packages Get:14 http://archive.ubuntu.com/ubuntu bionic/main amd64 Packages [1344 kB] Ign:15 http://security.ubuntu.com/ubuntu bionic-security/main armhf Packages Ign:16 http://security.ubuntu.com/ubuntu bionic-security/restricted armhf Packages Get:17 http://security.ubuntu.com/ubuntu bionic-security/universe amd64 Packages [795 kB] Get:18 http://archive.ubuntu.com/ubuntu bionic/multiverse amd64 Packages [186 kB] Get:19 http://archive.ubuntu.com/ubuntu bionic/universe amd64 Packages [11.3 MB] Ign:4 http://security.ubuntu.com/ubuntu bionic-security/multiverse armhf Packages Ign:8 http://security.ubuntu.com/ubuntu bionic-security/universe armhf Packages Ign:15 http://security.ubuntu.com/ubuntu bionic-security/main armhf Packages Ign:16 http://security.ubuntu.com/ubuntu bionic-security/restricted armhf Packages Ign:4 http://security.ubuntu.com/ubuntu bionic-security/multiverse armhf Packages Ign:8 http://security.ubuntu.com/ubuntu bionic-security/universe armhf Packages Ign:15 http://security.ubuntu.com/ubuntu bionic-security/main armhf Packages Ign:16 http://security.ubuntu.com/ubuntu bionic-security/restricted armhf Packages Err:4 http://security.ubuntu.com/ubuntu bionic-security/multiverse armhf Packages 404 Not Found [IP: 91.189.88.174 80] Ign:8 http://security.ubuntu.com/ubuntu bionic-security/universe armhf Packages Ign:15 http://security.ubuntu.com/ubuntu bionic-security/main armhf Packages Ign:16 http://security.ubuntu.com/ubuntu bionic-security/restricted armhf Packages Ign:20 http://archive.ubuntu.com/ubuntu bionic/universe armhf Packages Ign:10 http://archive.ubuntu.com/ubuntu bionic/main armhf Packages Ign:11 http://archive.ubuntu.com/ubuntu bionic/restricted armhf Packages Ign:13 http://archive.ubuntu.com/ubuntu bionic/multiverse armhf Packages Get:21 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages [1057 kB] Ign:22 http://archive.ubuntu.com/ubuntu bionic-updates/restricted armhf Packages Get:23 http://archive.ubuntu.com/ubuntu bionic-updates/multiverse amd64 Packages [10.5 kB] Ign:24 http://archive.ubuntu.com/ubuntu bionic-updates/main armhf Packages Ign:25 http://archive.ubuntu.com/ubuntu bionic-updates/universe armhf Packages Get:26 http://archive.ubuntu.com/ubuntu bionic-updates/universe amd64 Packages [1322 kB] Get:27 http://archive.ubuntu.com/ubuntu bionic-updates/restricted amd64 Packages [32.7 kB] Ign:28 http://archive.ubuntu.com/ubuntu bionic-updates/multiverse armhf Packages Ign:29 http://archive.ubuntu.com/ubuntu bionic-backports/main armhf Packages Get:30 http://archive.ubuntu.com/ubuntu bionic-backports/universe amd64 Packages [4244 B] Ign:31 http://archive.ubuntu.com/ubuntu bionic-backports/universe armhf Packages Get:32 http://archive.ubuntu.com/ubuntu bionic-backports/main amd64 Packages [2496 B] Ign:20 http://archive.ubuntu.com/ubuntu bionic/universe armhf Packages Ign:10 http://archive.ubuntu.com/ubuntu bionic/main armhf Packages Ign:11 http://archive.ubuntu.com/ubuntu bionic/restricted armhf Packages Ign:13 http://archive.ubuntu.com/ubuntu bionic/multiverse armhf Packages Ign:22 http://archive.ubuntu.com/ubuntu bionic-updates/restricted armhf Packages Ign:24 http://archive.ubuntu.com/ubuntu bionic-updates/main armhf Packages Ign:25 http://archive.ubuntu.com/ubuntu bionic-updates/universe armhf Packages Ign:28 http://archive.ubuntu.com/ubuntu bionic-updates/multiverse armhf Packages Ign:29 http://archive.ubuntu.com/ubuntu bionic-backports/main armhf Packages Ign:31 http://archive.ubuntu.com/ubuntu bionic-backports/universe armhf Packages Ign:20 http://archive.ubuntu.com/ubuntu bionic/universe armhf Packages Err:10 http://archive.ubuntu.com/ubuntu bionic/main armhf Packages 404 Not Found [IP: 91.189.88.149 80] Ign:11 http://archive.ubuntu.com/ubuntu bionic/restricted armhf Packages Ign:13 http://archive.ubuntu.com/ubuntu bionic/multiverse armhf Packages Ign:22 http://archive.ubuntu.com/ubuntu bionic-updates/restricted armhf Packages Ign:24 http://archive.ubuntu.com/ubuntu bionic-updates/main armhf Packages Ign:25 http://archive.ubuntu.com/ubuntu bionic-updates/universe armhf Packages Ign:28 http://archive.ubuntu.com/ubuntu bionic-updates/multiverse armhf Packages Ign:29 http://archive.ubuntu.com/ubuntu bionic-backports/main armhf Packages Ign:31 http://archive.ubuntu.com/ubuntu bionic-backports/universe armhf Packages Ign:20 http://archive.ubuntu.com/ubuntu bionic/universe armhf Packages Err:22 http://archive.ubuntu.com/ubuntu bionic-updates/restricted armhf Packages 404 Not Found [IP: 91.189.88.149 80] Ign:24 http://archive.ubuntu.com/ubuntu bionic-updates/main armhf Packages Ign:25 http://archive.ubuntu.com/ubuntu bionic-updates/universe armhf Packages Ign:28 http://archive.ubuntu.com/ubuntu bionic-updates/multiverse armhf Packages Err:29 http://archive.ubuntu.com/ubuntu bionic-backports/main armhf Packages 404 Not Found [IP: 91.189.88.149 80] Ign:31 http://archive.ubuntu.com/ubuntu bionic-backports/universe armhf Packages Fetched 17.4 MB in 2s (7076 kB/s) Reading package lists... E: Failed to fetch http://security.ubuntu.com/ubuntu/dists/bionic-security/multiverse/binary-armhf/Packages 404 Not Found [IP: 91.189.88.174 80] E: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/bionic/main/binary-armhf/Packages 404 Not Found [IP: 91.189.88.149 80] E: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/bionic-updates/restricted/binary-armhf/Packages 404 Not Found [IP: 91.189.88.149 80] E: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/bionic-backports/main/binary-armhf/Packages 404 Not Found [IP: 91.189.88.149 80] E: Some index files failed to download. They have been ignored, or old ones used instead. --- ci/test/00_setup_env.sh | 2 +- ci/test/00_setup_env_arm.sh | 2 ++ ci/test/00_setup_env_s390x.sh | 2 ++ ci/test/04_install.sh | 20 ++++++++++---------- 4 files changed, 15 insertions(+), 11 deletions(-) (limited to 'ci/test') diff --git a/ci/test/00_setup_env.sh b/ci/test/00_setup_env.sh index 1f485fbec4..a008d51523 100755 --- a/ci/test/00_setup_env.sh +++ b/ci/test/00_setup_env.sh @@ -51,7 +51,7 @@ export DEPENDS_DIR=${DEPENDS_DIR:-$BASE_ROOT_DIR/depends} export BASE_OUTDIR=${BASE_OUTDIR:-$BASE_SCRATCH_DIR/out/$HOST} export SDK_URL=${SDK_URL:-https://bitcoincore.org/depends-sources/sdks} export WINEDEBUG=${WINEDEBUG:-fixme-all} -export DOCKER_PACKAGES=${DOCKER_PACKAGES:-build-essential libtool autotools-dev automake pkg-config bsdmainutils curl ca-certificates ccache python3 rsync git} +export DOCKER_PACKAGES=${DOCKER_PACKAGES:-build-essential libtool autotools-dev automake pkg-config bsdmainutils curl ca-certificates ccache python3 rsync git procps} export GOAL=${GOAL:-install} export DIR_QA_ASSETS=${DIR_QA_ASSETS:-${BASE_SCRATCH_DIR}/qa-assets} export PATH=${BASE_ROOT_DIR}/ci/retry:$PATH diff --git a/ci/test/00_setup_env_arm.sh b/ci/test/00_setup_env_arm.sh index b98b39a83a..2a522f5a8f 100644 --- a/ci/test/00_setup_env_arm.sh +++ b/ci/test/00_setup_env_arm.sh @@ -16,6 +16,8 @@ if [ -n "$QEMU_USER_CMD" ]; then # Likely cross-compiling, so install the needed gcc and qemu-user export PACKAGES="$PACKAGES qemu-user" fi +# Use debian to avoid 404 apt errors when cross compiling +export DOCKER_NAME_TAG="debian:buster" export USE_BUSY_BOX=true export RUN_UNIT_TESTS=true export RUN_FUNCTIONAL_TESTS=true diff --git a/ci/test/00_setup_env_s390x.sh b/ci/test/00_setup_env_s390x.sh index c049994944..6452feb5f2 100644 --- a/ci/test/00_setup_env_s390x.sh +++ b/ci/test/00_setup_env_s390x.sh @@ -16,6 +16,8 @@ if [ -n "$QEMU_USER_CMD" ]; then export DPKG_ADD_ARCH="s390x" export PACKAGES="$PACKAGES g++-s390x-linux-gnu qemu-user libc6:s390x libstdc++6:s390x libfontconfig1:s390x libxcb1:s390x" fi +# Use debian to avoid 404 apt errors +export DOCKER_NAME_TAG="debian:buster" export RUN_UNIT_TESTS=true export RUN_FUNCTIONAL_TESTS=true export GOAL="install" diff --git a/ci/test/04_install.sh b/ci/test/04_install.sh index cf2b39c68d..68fd98302f 100755 --- a/ci/test/04_install.sh +++ b/ci/test/04_install.sh @@ -72,16 +72,6 @@ else } fi -if [ "$TRAVIS_OS_NAME" == "osx" ]; then - top -l 1 -s 0 | awk ' /PhysMem/ {print}' - echo "Number of CPUs: $(sysctl -n hw.logicalcpu)" -else - DOCKER_EXEC free -m -h - DOCKER_EXEC echo "Number of CPUs \(nproc\):" \$\(nproc\) - DOCKER_EXEC echo "Free disk space:" - DOCKER_EXEC df -h -fi - if [ -n "$DPKG_ADD_ARCH" ]; then DOCKER_EXEC dpkg --add-architecture "$DPKG_ADD_ARCH" fi @@ -94,6 +84,16 @@ elif [ "$TRAVIS_OS_NAME" != "osx" ]; then ${CI_RETRY_EXE} DOCKER_EXEC apt-get install --no-install-recommends --no-upgrade -y $PACKAGES $DOCKER_PACKAGES fi +if [ "$TRAVIS_OS_NAME" == "osx" ]; then + top -l 1 -s 0 | awk ' /PhysMem/ {print}' + echo "Number of CPUs: $(sysctl -n hw.logicalcpu)" +else + DOCKER_EXEC free -m -h + DOCKER_EXEC echo "Number of CPUs \(nproc\):" \$\(nproc\) + DOCKER_EXEC echo "Free disk space:" + DOCKER_EXEC df -h +fi + if [ ! -d ${DIR_QA_ASSETS} ]; then DOCKER_EXEC git clone https://github.com/bitcoin-core/qa-assets ${DIR_QA_ASSETS} fi -- cgit v1.2.3 From fa569e1a9c5ad1bf8bdf866235b21aff56112224 Mon Sep 17 00:00:00 2001 From: MarcoFalke Date: Tue, 17 Dec 2019 22:02:48 -0500 Subject: ci: Set LC_ALL=C when running in qemu-s390x This avoids std::runtime_error in the unit tests of the type "locale::facet::_S_create_c_locale name not valid" --- ci/test/04_install.sh | 3 +++ 1 file changed, 3 insertions(+) (limited to 'ci/test') diff --git a/ci/test/04_install.sh b/ci/test/04_install.sh index 68fd98302f..2b5a9a5357 100755 --- a/ci/test/04_install.sh +++ b/ci/test/04_install.sh @@ -9,6 +9,9 @@ export LC_ALL=C.UTF-8 if [[ $DOCKER_NAME_TAG == centos* ]]; then export LC_ALL=en_US.utf8 fi +if [[ $QEMU_USER_CMD == qemu-s390* ]]; then + export LC_ALL=C +fi if [ "$TRAVIS_OS_NAME" == "osx" ]; then set +o errexit -- cgit v1.2.3