diff --git a/README.md b/README.md
index c80c1d3..af428d5 100644
--- a/README.md
+++ b/README.md
@@ -25,6 +25,7 @@ like [libcanard](https://github.com/OpenCyphal/libcanard) and
| tag | Python | GCC (native) | GCC (arm-none-eabi) | Clang (native) | Cmake | Host Platforms | Other Utilities |
|----------|--------|--------------|---------------------|----------------|-------|----------------|-----------------|
+| [ts24.4.1](https://github.com/OpenCyphal/docker_toolchains/pkgs/container/toolshed) |
| - 13.3.0
- 12.3.0
- 11.4.0
- 10.5.0
- 7.5.0
| 13.3.1 | | 3.31.5 | | can-utilsdoxygen 1.13.2toxnoxgovrgcc-multilib (amd64 only) |
| [ts22.4.10](https://github.com/OpenCyphal/docker_toolchains/pkgs/container/toolshed) | 3.10 | 12.3.0 | 13.3.1 | 18.1.3 | 3.30.1 | | - qemu
- can-utils
- doxygen 1.10.0
- nvm
- node 20.x
- nox
- govr
- gcc-multilib (amd64 only)
|
| [ts22.4.8](https://github.com/OpenCyphal/docker_toolchains/pkgs/container/toolshed) | 3.10 | 12.3.0 | (N/A) | 18.1.3 | 3.22.1 | | - qemu
- can-utils
- doxygen 1.10.0
- nvm
- node 20.x
- nox
- govr
- gcc-multilib (amd64 only)
|
| [ts22.4.7](https://github.com/OpenCyphal/docker_toolchains/pkgs/container/toolshed) | 3.10 | 12.3.0 | (N/A) | 18.1.3 | 3.22.1 | | - qemu
- can-utils
- doxygen 1.10.0
- nvm
- node 20.x
- nox
- govr
|
diff --git a/toolshed/Dockerfile b/toolshed/Dockerfile
index e8cb251..f2f6b40 100644
--- a/toolshed/Dockerfile
+++ b/toolshed/Dockerfile
@@ -1,7 +1,7 @@
#
# Builds the toolshed/ubuntu-22.04 toolchain container.
#
-FROM ubuntu:22.04 AS base
+FROM ubuntu:24.04 AS base
LABEL org.opencontainers.image.source=https://github.com/OpenCyphal/docker_toolchains
LABEL org.opencontainers.image.description="Provides a consistent build and test environment for development, continuous-integration, and test automation of OpenCyphal C and C++ based projects."
@@ -25,48 +25,38 @@ FROM base AS provisioning
WORKDIR /tmp
ADD kitware-archive-latest.asc .
ADD pre-provision.sh ./pre-provision.sh
+ADD provision-repositories.sh ./provision-repositories.sh
+ADD provision-repositories-${TARGETARCH}.sh ./provision-repositories-${TARGETARCH}.sh
ADD provision.sh ./provision.sh
ADD provision-${TARGETARCH}.sh ./provision-${TARGETARCH}.sh
ADD post-provision.sh ./post-provision.sh
RUN apt update
RUN ./pre-provision.sh
+RUN ./provision-repositories.sh
+RUN ./provision-repositories-${TARGETARCH}.sh
RUN apt update
RUN ./provision.sh
RUN ./provision-${TARGETARCH}.sh
RUN ./post-provision.sh
-# INSTALL THE PATH FOR INTERATIVE SESSIONS
+# INSTALL THE PATH FOR INTERACTIVE SESSIONS
RUN echo "export PATH=$PATH" >> ~/.bashrc
# LEAVE THE WORKDIR AS /repo
WORKDIR /repo
-# +---------------------------------------------------------------------------+
-# | NVM/nodejs
-# +---------------------------------------------------------------------------+
-FROM provisioning AS node
-
-WORKDIR /tmp
-ADD nvm-install.sh ./nvm-install.sh
-RUN cat ./nvm-install.sh | bash
-ENV NVM_DIR="~/.nvm"
-RUN . ~/.nvm/nvm.sh && nvm install v20
-
-# LEAVE THE WORKDIR AS /repo
-WORKDIR /repo
-
# +---------------------------------------------------------------------------+
# | INSTALL PYTHON STUFF
# +---------------------------------------------------------------------------+
-FROM node AS python
+FROM provisioning AS python
WORKDIR /tmp
-RUN pip3 install virtualenv
-RUN pip3 install tox
-RUN pip3 install nox
-RUN pip3 install gcovr
-RUN pip3 list
+RUN apt-get -y install pipx
+RUN echo "export PATH=/root/.local/bin:$PATH" >> ~/.bashrc
+RUN pipx install tox
+RUN pipx install nox
+RUN pipx install gcovr
# LEAVE THE WORKDIR AS /repo
WORKDIR /repo
@@ -80,7 +70,9 @@ WORKDIR /tmp
ADD llvm-install.sh ./llvm-install.sh
ADD llvm-select.sh ./llvm-select.sh
RUN ./llvm-install.sh 18 all
-RUN ./llvm-select.sh 18
+RUN ./llvm-select.sh 18 18
+RUN ./llvm-install.sh 19 all
+RUN ./llvm-select.sh 19 99
# LEAVE THE WORKDIR AS /repo
WORKDIR /repo
@@ -94,7 +86,7 @@ RUN mkdir doxygen-Release
RUN mkdir doxygen-Release/build
COPY cached-download.sh .
-ARG DOXYGEN_VERSION=1_10_0
+ARG DOXYGEN_VERSION=1_13_2
COPY doxygen-Release_${DOXYGEN_VERSION}.sha512.txt .
RUN --mount=type=cache,target=/doxygen-download \
@@ -126,8 +118,11 @@ FROM doxygen AS gcc-select
WORKDIR /tmp
ADD gcc-select.sh ./gcc-select.sh
-RUN ./gcc-select.sh 11 1
-RUN ./gcc-select.sh 12 99
+RUN ./gcc-select.sh 7 7
+RUN ./gcc-select.sh 10 10
+RUN ./gcc-select.sh 11 11
+RUN ./gcc-select.sh 12 12
+RUN ./gcc-select.sh 13 99
RUN update-alternatives --display gcc
# +---------------------------------------------------------------------------+
diff --git a/toolshed/doxygen-Release_1_13_2.sha512.txt b/toolshed/doxygen-Release_1_13_2.sha512.txt
new file mode 100644
index 0000000..8f199bf
--- /dev/null
+++ b/toolshed/doxygen-Release_1_13_2.sha512.txt
@@ -0,0 +1 @@
+ec9e0c40c87a2a9477203b6df66323ca221468013094980e17965fa5a631d97af6286a66d7010c5ed94b825dd4e7bc8db18a48f30aa48b9a2e4f0ca6d9a5ddf0 doxygen-Release_1_13_2.tar.gz
diff --git a/toolshed/llvm-install.sh b/toolshed/llvm-install.sh
index 7c3ea85..2f58e83 100755
--- a/toolshed/llvm-install.sh
+++ b/toolshed/llvm-install.sh
@@ -127,7 +127,9 @@ LLVM_VERSION_PATTERNS[15]="-15"
LLVM_VERSION_PATTERNS[16]="-16"
LLVM_VERSION_PATTERNS[17]="-17"
LLVM_VERSION_PATTERNS[18]="-18"
-LLVM_VERSION_PATTERNS[19]=""
+LLVM_VERSION_PATTERNS[19]="-19"
+LLVM_VERSION_PATTERNS[20]="-20"
+LLVM_VERSION_PATTERNS[21]=""
if [ ! ${LLVM_VERSION_PATTERNS[$LLVM_VERSION]+_} ]; then
echo "This script does not support LLVM version $LLVM_VERSION"
@@ -161,9 +163,15 @@ fi
if [[ -z "`apt-key list 2> /dev/null | grep -i llvm`" ]]; then
# Delete the key in the old format
- apt-key del AF4F7421
+ apt-key del AF4F7421 || true
fi
-add-apt-repository "${REPO_NAME}"
+if [[ "${VERSION_CODENAME}" == "bookworm" ]]; then
+ # add it twice to workaround:
+ # https://github.com/llvm/llvm-project/issues/62475
+ add-apt-repository -y "${REPO_NAME}"
+fi
+
+add-apt-repository -y "${REPO_NAME}"
apt-get update
PKG="clang-$LLVM_VERSION lldb-$LLVM_VERSION lld-$LLVM_VERSION clangd-$LLVM_VERSION"
if [[ $ALL -eq 1 ]]; then
diff --git a/toolshed/llvm-select.sh b/toolshed/llvm-select.sh
index df64e19..6a997e9 100755
--- a/toolshed/llvm-select.sh
+++ b/toolshed/llvm-select.sh
@@ -20,7 +20,7 @@ setup_llvm_alternatives()
update-alternatives ${cmdln}
}
-LLVM_ALTERNATIVES_PRI=99
+LLVM_ALTERNATIVES_PRI=${2}
LLVM_ALTERNATIVES_PATH="/usr/bin/"
# setup llvm-config group
diff --git a/toolshed/nvm-install.sh b/toolshed/nvm-install.sh
deleted file mode 100755
index 0f6af49..0000000
--- a/toolshed/nvm-install.sh
+++ /dev/null
@@ -1,495 +0,0 @@
-#!/usr/bin/env bash
-
-{ # this ensures the entire script is downloaded #
-
-nvm_has() {
- type "$1" > /dev/null 2>&1
-}
-
-nvm_echo() {
- command printf %s\\n "$*" 2>/dev/null
-}
-
-if [ -z "${BASH_VERSION}" ] || [ -n "${ZSH_VERSION}" ]; then
- # shellcheck disable=SC2016
- nvm_echo >&2 'Error: the install instructions explicitly say to pipe the install script to `bash`; please follow them'
- exit 1
-fi
-
-nvm_grep() {
- GREP_OPTIONS='' command grep "$@"
-}
-
-nvm_default_install_dir() {
- [ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm"
-}
-
-nvm_install_dir() {
- if [ -n "$NVM_DIR" ]; then
- printf %s "${NVM_DIR}"
- else
- nvm_default_install_dir
- fi
-}
-
-nvm_latest_version() {
- nvm_echo "v0.39.7"
-}
-
-nvm_profile_is_bash_or_zsh() {
- local TEST_PROFILE
- TEST_PROFILE="${1-}"
- case "${TEST_PROFILE-}" in
- *"/.bashrc" | *"/.bash_profile" | *"/.zshrc" | *"/.zprofile")
- return
- ;;
- *)
- return 1
- ;;
- esac
-}
-
-#
-# Outputs the location to NVM depending on:
-# * The availability of $NVM_SOURCE
-# * The presence of $NVM_INSTALL_GITHUB_REPO
-# * The method used ("script" or "git" in the script, defaults to "git")
-# NVM_SOURCE always takes precedence unless the method is "script-nvm-exec"
-#
-nvm_source() {
- local NVM_GITHUB_REPO
- NVM_GITHUB_REPO="${NVM_INSTALL_GITHUB_REPO:-nvm-sh/nvm}"
- if [ "${NVM_GITHUB_REPO}" != 'nvm-sh/nvm' ]; then
- { nvm_echo >&2 "$(cat)" ; } << EOF
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@ WARNING: REMOTE REPO IDENTIFICATION HAS CHANGED! @
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
-
-The default repository for this install is \`nvm-sh/nvm\`,
-but the environment variables \`\$NVM_INSTALL_GITHUB_REPO\` is
-currently set to \`${NVM_GITHUB_REPO}\`.
-
-If this is not intentional, interrupt this installation and
-verify your environment variables.
-EOF
- fi
- local NVM_VERSION
- NVM_VERSION="${NVM_INSTALL_VERSION:-$(nvm_latest_version)}"
- local NVM_METHOD
- NVM_METHOD="$1"
- local NVM_SOURCE_URL
- NVM_SOURCE_URL="$NVM_SOURCE"
- if [ "_$NVM_METHOD" = "_script-nvm-exec" ]; then
- NVM_SOURCE_URL="https://raw.githubusercontent.com/${NVM_GITHUB_REPO}/${NVM_VERSION}/nvm-exec"
- elif [ "_$NVM_METHOD" = "_script-nvm-bash-completion" ]; then
- NVM_SOURCE_URL="https://raw.githubusercontent.com/${NVM_GITHUB_REPO}/${NVM_VERSION}/bash_completion"
- elif [ -z "$NVM_SOURCE_URL" ]; then
- if [ "_$NVM_METHOD" = "_script" ]; then
- NVM_SOURCE_URL="https://raw.githubusercontent.com/${NVM_GITHUB_REPO}/${NVM_VERSION}/nvm.sh"
- elif [ "_$NVM_METHOD" = "_git" ] || [ -z "$NVM_METHOD" ]; then
- NVM_SOURCE_URL="https://github.com/${NVM_GITHUB_REPO}.git"
- else
- nvm_echo >&2 "Unexpected value \"$NVM_METHOD\" for \$NVM_METHOD"
- return 1
- fi
- fi
- nvm_echo "$NVM_SOURCE_URL"
-}
-
-#
-# Node.js version to install
-#
-nvm_node_version() {
- nvm_echo "$NODE_VERSION"
-}
-
-nvm_download() {
- if nvm_has "curl"; then
- curl --fail --compressed -q "$@"
- elif nvm_has "wget"; then
- # Emulate curl with wget
- ARGS=$(nvm_echo "$@" | command sed -e 's/--progress-bar /--progress=bar /' \
- -e 's/--compressed //' \
- -e 's/--fail //' \
- -e 's/-L //' \
- -e 's/-I /--server-response /' \
- -e 's/-s /-q /' \
- -e 's/-sS /-nv /' \
- -e 's/-o /-O /' \
- -e 's/-C - /-c /')
- # shellcheck disable=SC2086
- eval wget $ARGS
- fi
-}
-
-install_nvm_from_git() {
- local INSTALL_DIR
- INSTALL_DIR="$(nvm_install_dir)"
- local NVM_VERSION
- NVM_VERSION="${NVM_INSTALL_VERSION:-$(nvm_latest_version)}"
- if [ -n "${NVM_INSTALL_VERSION:-}" ]; then
- # Check if version is an existing ref
- if command git ls-remote "$(nvm_source "git")" "$NVM_VERSION" | nvm_grep -q "$NVM_VERSION" ; then
- :
- # Check if version is an existing changeset
- elif ! nvm_download -o /dev/null "$(nvm_source "script-nvm-exec")"; then
- nvm_echo >&2 "Failed to find '$NVM_VERSION' version."
- exit 1
- fi
- fi
-
- local fetch_error
- if [ -d "$INSTALL_DIR/.git" ]; then
- # Updating repo
- nvm_echo "=> nvm is already installed in $INSTALL_DIR, trying to update using git"
- command printf '\r=> '
- fetch_error="Failed to update nvm with $NVM_VERSION, run 'git fetch' in $INSTALL_DIR yourself."
- else
- fetch_error="Failed to fetch origin with $NVM_VERSION. Please report this!"
- nvm_echo "=> Downloading nvm from git to '$INSTALL_DIR'"
- command printf '\r=> '
- mkdir -p "${INSTALL_DIR}"
- if [ "$(ls -A "${INSTALL_DIR}")" ]; then
- # Initializing repo
- command git init "${INSTALL_DIR}" || {
- nvm_echo >&2 'Failed to initialize nvm repo. Please report this!'
- exit 2
- }
- command git --git-dir="${INSTALL_DIR}/.git" remote add origin "$(nvm_source)" 2> /dev/null \
- || command git --git-dir="${INSTALL_DIR}/.git" remote set-url origin "$(nvm_source)" || {
- nvm_echo >&2 'Failed to add remote "origin" (or set the URL). Please report this!'
- exit 2
- }
- else
- # Cloning repo
- command git clone "$(nvm_source)" --depth=1 "${INSTALL_DIR}" || {
- nvm_echo >&2 'Failed to clone nvm repo. Please report this!'
- exit 2
- }
- fi
- fi
- # Try to fetch tag
- if command git --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" fetch origin tag "$NVM_VERSION" --depth=1 2>/dev/null; then
- :
- # Fetch given version
- elif ! command git --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" fetch origin "$NVM_VERSION" --depth=1; then
- nvm_echo >&2 "$fetch_error"
- exit 1
- fi
- command git -c advice.detachedHead=false --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" checkout -f --quiet FETCH_HEAD || {
- nvm_echo >&2 "Failed to checkout the given version $NVM_VERSION. Please report this!"
- exit 2
- }
- if [ -n "$(command git --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" show-ref refs/heads/master)" ]; then
- if command git --no-pager --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" branch --quiet 2>/dev/null; then
- command git --no-pager --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" branch --quiet -D master >/dev/null 2>&1
- else
- nvm_echo >&2 "Your version of git is out of date. Please update it!"
- command git --no-pager --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" branch -D master >/dev/null 2>&1
- fi
- fi
-
- nvm_echo "=> Compressing and cleaning up git repository"
- if ! command git --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" reflog expire --expire=now --all; then
- nvm_echo >&2 "Your version of git is out of date. Please update it!"
- fi
- if ! command git --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" gc --auto --aggressive --prune=now ; then
- nvm_echo >&2 "Your version of git is out of date. Please update it!"
- fi
- return
-}
-
-#
-# Automatically install Node.js
-#
-nvm_install_node() {
- local NODE_VERSION_LOCAL
- NODE_VERSION_LOCAL="$(nvm_node_version)"
-
- if [ -z "$NODE_VERSION_LOCAL" ]; then
- return 0
- fi
-
- nvm_echo "=> Installing Node.js version $NODE_VERSION_LOCAL"
- nvm install "$NODE_VERSION_LOCAL"
- local CURRENT_NVM_NODE
-
- CURRENT_NVM_NODE="$(nvm_version current)"
- if [ "$(nvm_version "$NODE_VERSION_LOCAL")" == "$CURRENT_NVM_NODE" ]; then
- nvm_echo "=> Node.js version $NODE_VERSION_LOCAL has been successfully installed"
- else
- nvm_echo >&2 "Failed to install Node.js $NODE_VERSION_LOCAL"
- fi
-}
-
-install_nvm_as_script() {
- local INSTALL_DIR
- INSTALL_DIR="$(nvm_install_dir)"
- local NVM_SOURCE_LOCAL
- NVM_SOURCE_LOCAL="$(nvm_source script)"
- local NVM_EXEC_SOURCE
- NVM_EXEC_SOURCE="$(nvm_source script-nvm-exec)"
- local NVM_BASH_COMPLETION_SOURCE
- NVM_BASH_COMPLETION_SOURCE="$(nvm_source script-nvm-bash-completion)"
-
- # Downloading to $INSTALL_DIR
- mkdir -p "$INSTALL_DIR"
- if [ -f "$INSTALL_DIR/nvm.sh" ]; then
- nvm_echo "=> nvm is already installed in $INSTALL_DIR, trying to update the script"
- else
- nvm_echo "=> Downloading nvm as script to '$INSTALL_DIR'"
- fi
- nvm_download -s "$NVM_SOURCE_LOCAL" -o "$INSTALL_DIR/nvm.sh" || {
- nvm_echo >&2 "Failed to download '$NVM_SOURCE_LOCAL'"
- return 1
- } &
- nvm_download -s "$NVM_EXEC_SOURCE" -o "$INSTALL_DIR/nvm-exec" || {
- nvm_echo >&2 "Failed to download '$NVM_EXEC_SOURCE'"
- return 2
- } &
- nvm_download -s "$NVM_BASH_COMPLETION_SOURCE" -o "$INSTALL_DIR/bash_completion" || {
- nvm_echo >&2 "Failed to download '$NVM_BASH_COMPLETION_SOURCE'"
- return 2
- } &
- for job in $(jobs -p | command sort)
- do
- wait "$job" || return $?
- done
- chmod a+x "$INSTALL_DIR/nvm-exec" || {
- nvm_echo >&2 "Failed to mark '$INSTALL_DIR/nvm-exec' as executable"
- return 3
- }
-}
-
-nvm_try_profile() {
- if [ -z "${1-}" ] || [ ! -f "${1}" ]; then
- return 1
- fi
- nvm_echo "${1}"
-}
-
-#
-# Detect profile file if not specified as environment variable
-# (eg: PROFILE=~/.myprofile)
-# The echo'ed path is guaranteed to be an existing file
-# Otherwise, an empty string is returned
-#
-nvm_detect_profile() {
- if [ "${PROFILE-}" = '/dev/null' ]; then
- # the user has specifically requested NOT to have nvm touch their profile
- return
- fi
-
- if [ -n "${PROFILE}" ] && [ -f "${PROFILE}" ]; then
- nvm_echo "${PROFILE}"
- return
- fi
-
- local DETECTED_PROFILE
- DETECTED_PROFILE=''
-
- if [ "${SHELL#*bash}" != "$SHELL" ]; then
- if [ -f "$HOME/.bashrc" ]; then
- DETECTED_PROFILE="$HOME/.bashrc"
- elif [ -f "$HOME/.bash_profile" ]; then
- DETECTED_PROFILE="$HOME/.bash_profile"
- fi
- elif [ "${SHELL#*zsh}" != "$SHELL" ]; then
- if [ -f "$HOME/.zshrc" ]; then
- DETECTED_PROFILE="$HOME/.zshrc"
- elif [ -f "$HOME/.zprofile" ]; then
- DETECTED_PROFILE="$HOME/.zprofile"
- fi
- fi
-
- if [ -z "$DETECTED_PROFILE" ]; then
- for EACH_PROFILE in ".profile" ".bashrc" ".bash_profile" ".zprofile" ".zshrc"
- do
- if DETECTED_PROFILE="$(nvm_try_profile "${HOME}/${EACH_PROFILE}")"; then
- break
- fi
- done
- fi
-
- if [ -n "$DETECTED_PROFILE" ]; then
- nvm_echo "$DETECTED_PROFILE"
- fi
-}
-
-#
-# Check whether the user has any globally-installed npm modules in their system
-# Node, and warn them if so.
-#
-nvm_check_global_modules() {
- local NPM_COMMAND
- NPM_COMMAND="$(command -v npm 2>/dev/null)" || return 0
- [ -n "${NVM_DIR}" ] && [ -z "${NPM_COMMAND%%"$NVM_DIR"/*}" ] && return 0
-
- local NPM_VERSION
- NPM_VERSION="$(npm --version)"
- NPM_VERSION="${NPM_VERSION:--1}"
- [ "${NPM_VERSION%%[!-0-9]*}" -gt 0 ] || return 0
-
- local NPM_GLOBAL_MODULES
- NPM_GLOBAL_MODULES="$(
- npm list -g --depth=0 |
- command sed -e '/ npm@/d' -e '/ (empty)$/d'
- )"
-
- local MODULE_COUNT
- MODULE_COUNT="$(
- command printf %s\\n "$NPM_GLOBAL_MODULES" |
- command sed -ne '1!p' | # Remove the first line
- wc -l | command tr -d ' ' # Count entries
- )"
-
- if [ "${MODULE_COUNT}" != '0' ]; then
- # shellcheck disable=SC2016
- nvm_echo '=> You currently have modules installed globally with `npm`. These will no'
- # shellcheck disable=SC2016
- nvm_echo '=> longer be linked to the active version of Node when you install a new node'
- # shellcheck disable=SC2016
- nvm_echo '=> with `nvm`; and they may (depending on how you construct your `$PATH`)'
- # shellcheck disable=SC2016
- nvm_echo '=> override the binaries of modules installed with `nvm`:'
- nvm_echo
-
- command printf %s\\n "$NPM_GLOBAL_MODULES"
- nvm_echo '=> If you wish to uninstall them at a later point (or re-install them under your'
- # shellcheck disable=SC2016
- nvm_echo '=> `nvm` Nodes), you can remove them from the system Node as follows:'
- nvm_echo
- nvm_echo ' $ nvm use system'
- nvm_echo ' $ npm uninstall -g a_module'
- nvm_echo
- fi
-}
-
-nvm_do_install() {
- if [ -n "${NVM_DIR-}" ] && ! [ -d "${NVM_DIR}" ]; then
- if [ -e "${NVM_DIR}" ]; then
- nvm_echo >&2 "File \"${NVM_DIR}\" has the same name as installation directory."
- exit 1
- fi
-
- if [ "${NVM_DIR}" = "$(nvm_default_install_dir)" ]; then
- mkdir "${NVM_DIR}"
- else
- nvm_echo >&2 "You have \$NVM_DIR set to \"${NVM_DIR}\", but that directory does not exist. Check your profile files and environment."
- exit 1
- fi
- fi
- # Disable the optional which check, https://www.shellcheck.net/wiki/SC2230
- # shellcheck disable=SC2230
- if nvm_has xcode-select && [ "$(xcode-select -p >/dev/null 2>/dev/null ; echo $?)" = '2' ] && [ "$(which git)" = '/usr/bin/git' ] && [ "$(which curl)" = '/usr/bin/curl' ]; then
- nvm_echo >&2 'You may be on a Mac, and need to install the Xcode Command Line Developer Tools.'
- # shellcheck disable=SC2016
- nvm_echo >&2 'If so, run `xcode-select --install` and try again. If not, please report this!'
- exit 1
- fi
- if [ -z "${METHOD}" ]; then
- # Autodetect install method
- if nvm_has git; then
- install_nvm_from_git
- elif nvm_has curl || nvm_has wget; then
- install_nvm_as_script
- else
- nvm_echo >&2 'You need git, curl, or wget to install nvm'
- exit 1
- fi
- elif [ "${METHOD}" = 'git' ]; then
- if ! nvm_has git; then
- nvm_echo >&2 "You need git to install nvm"
- exit 1
- fi
- install_nvm_from_git
- elif [ "${METHOD}" = 'script' ]; then
- if ! nvm_has curl && ! nvm_has wget; then
- nvm_echo >&2 "You need curl or wget to install nvm"
- exit 1
- fi
- install_nvm_as_script
- else
- nvm_echo >&2 "The environment variable \$METHOD is set to \"${METHOD}\", which is not recognized as a valid installation method."
- exit 1
- fi
-
- nvm_echo
-
- local NVM_PROFILE
- NVM_PROFILE="$(nvm_detect_profile)"
- local PROFILE_INSTALL_DIR
- PROFILE_INSTALL_DIR="$(nvm_install_dir | command sed "s:^$HOME:\$HOME:")"
-
- SOURCE_STR="\\nexport NVM_DIR=\"${PROFILE_INSTALL_DIR}\"\\n[ -s \"\$NVM_DIR/nvm.sh\" ] && \\. \"\$NVM_DIR/nvm.sh\" # This loads nvm\\n"
-
- # shellcheck disable=SC2016
- COMPLETION_STR='[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion\n'
- BASH_OR_ZSH=false
-
- if [ -z "${NVM_PROFILE-}" ] ; then
- local TRIED_PROFILE
- if [ -n "${PROFILE}" ]; then
- TRIED_PROFILE="${NVM_PROFILE} (as defined in \$PROFILE), "
- fi
- nvm_echo "=> Profile not found. Tried ${TRIED_PROFILE-}~/.bashrc, ~/.bash_profile, ~/.zprofile, ~/.zshrc, and ~/.profile."
- nvm_echo "=> Create one of them and run this script again"
- nvm_echo " OR"
- nvm_echo "=> Append the following lines to the correct file yourself:"
- command printf "${SOURCE_STR}"
- nvm_echo
- else
- if nvm_profile_is_bash_or_zsh "${NVM_PROFILE-}"; then
- BASH_OR_ZSH=true
- fi
- if ! command grep -qc '/nvm.sh' "$NVM_PROFILE"; then
- nvm_echo "=> Appending nvm source string to $NVM_PROFILE"
- command printf "${SOURCE_STR}" >> "$NVM_PROFILE"
- else
- nvm_echo "=> nvm source string already in ${NVM_PROFILE}"
- fi
- # shellcheck disable=SC2016
- if ${BASH_OR_ZSH} && ! command grep -qc '$NVM_DIR/bash_completion' "$NVM_PROFILE"; then
- nvm_echo "=> Appending bash_completion source string to $NVM_PROFILE"
- command printf "$COMPLETION_STR" >> "$NVM_PROFILE"
- else
- nvm_echo "=> bash_completion source string already in ${NVM_PROFILE}"
- fi
- fi
- if ${BASH_OR_ZSH} && [ -z "${NVM_PROFILE-}" ] ; then
- nvm_echo "=> Please also append the following lines to the if you are using bash/zsh shell:"
- command printf "${COMPLETION_STR}"
- fi
-
- # Source nvm
- # shellcheck source=/dev/null
- \. "$(nvm_install_dir)/nvm.sh"
-
- nvm_check_global_modules
-
- nvm_install_node
-
- nvm_reset
-
- nvm_echo "=> Close and reopen your terminal to start using nvm or run the following to use it now:"
- command printf "${SOURCE_STR}"
- if ${BASH_OR_ZSH} ; then
- command printf "${COMPLETION_STR}"
- fi
-}
-
-#
-# Unsets the various functions defined
-# during the execution of the install script
-#
-nvm_reset() {
- unset -f nvm_has nvm_install_dir nvm_latest_version nvm_profile_is_bash_or_zsh \
- nvm_source nvm_node_version nvm_download install_nvm_from_git nvm_install_node \
- install_nvm_as_script nvm_try_profile nvm_detect_profile nvm_check_global_modules \
- nvm_do_install nvm_reset nvm_default_install_dir nvm_grep
-}
-
-[ "_$NVM_ENV" = "_testing" ] || nvm_do_install
-
-} # this ensures the entire script is downloaded #
\ No newline at end of file
diff --git a/toolshed/pre-provision.sh b/toolshed/pre-provision.sh
index 19c192f..e23d6a7 100755
--- a/toolshed/pre-provision.sh
+++ b/toolshed/pre-provision.sh
@@ -28,14 +28,6 @@ apt-get -y install debconf
apt-get -y install wget
apt-get -y install gpg
-cat kitware-archive-latest.asc
-cat kitware-archive-latest.asc | gpg --dearmor - | tee /etc/apt/trusted.gpg.d/kitware.gpg >/dev/null
-
-apt-get -y install software-properties-common
-apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6AF7F09730B3F0A4
-apt-add-repository 'deb https://apt.kitware.com/ubuntu/ jammy main'
-add-apt-repository -y ppa:deadsnakes/ppa
-
# setup locales in the container so Python can default to utf-8.
apt-get -y install locales
# from http://jaredmarkell.com/docker-and-locales/
diff --git a/toolshed/provision-amd64.sh b/toolshed/provision-amd64.sh
index bae6fdc..79ce51f 100755
--- a/toolshed/provision-amd64.sh
+++ b/toolshed/provision-amd64.sh
@@ -23,5 +23,5 @@ export DEBIAN_FRONTEND=noninteractive
apt-get -y install gcc-multilib
apt-get -y install g++-multilib
-apt-get -y install gcc-12-multilib
-apt-get -y install g++-12-multilib
+apt-get -y install gcc-13-multilib
+apt-get -y install g++-13-multilib
diff --git a/toolshed/provision-arm64.sh b/toolshed/provision-arm64.sh
index 8481f9d..325e2a7 100755
--- a/toolshed/provision-arm64.sh
+++ b/toolshed/provision-arm64.sh
@@ -19,4 +19,4 @@ set -o errexit
set -o pipefail
# +----------------------------------------------------------+
-echo "No additional packages to install."
+
diff --git a/toolshed/provision-repositories-amd64.sh b/toolshed/provision-repositories-amd64.sh
new file mode 100755
index 0000000..27ba11e
--- /dev/null
+++ b/toolshed/provision-repositories-amd64.sh
@@ -0,0 +1,25 @@
+#!/usr/bin/env bash
+
+# +----------------------------------------------------------+
+# | BASH : Modifying Shell Behaviour
+# | (https://www.gnu.org/software/bash/manual)
+# +----------------------------------------------------------+
+# Treat unset variables and parameters other than the special
+# parameters ‘@’ or ‘*’ as an error when performing parameter
+# expansion. An error message will be written to the standard
+# error, and a non-interactive shell will exit.
+set -o nounset
+
+# Exit immediately if a pipeline returns a non-zero status.
+set -o errexit
+
+# If set, the return value of a pipeline is the value of the
+# last (rightmost) command to exit with a non-zero status, or
+# zero if all commands in the pipeline exit successfully.
+set -o pipefail
+
+# +----------------------------------------------------------+
+export DEBIAN_FRONTEND=noninteractive
+
+# For GCC7
+apt-add-repository 'deb http://archive.ubuntu.com/ubuntu/ focal main universe'
diff --git a/toolshed/provision-repositories-arm64.sh b/toolshed/provision-repositories-arm64.sh
new file mode 100755
index 0000000..1cbae6c
--- /dev/null
+++ b/toolshed/provision-repositories-arm64.sh
@@ -0,0 +1,26 @@
+#!/usr/bin/env bash
+
+# +----------------------------------------------------------+
+# | BASH : Modifying Shell Behaviour
+# | (https://www.gnu.org/software/bash/manual)
+# +----------------------------------------------------------+
+# Treat unset variables and parameters other than the special
+# parameters ‘@’ or ‘*’ as an error when performing parameter
+# expansion. An error message will be written to the standard
+# error, and a non-interactive shell will exit.
+set -o nounset
+
+# Exit immediately if a pipeline returns a non-zero status.
+set -o errexit
+
+# If set, the return value of a pipeline is the value of the
+# last (rightmost) command to exit with a non-zero status, or
+# zero if all commands in the pipeline exit successfully.
+set -o pipefail
+
+# +----------------------------------------------------------+
+export DEBIAN_FRONTEND=noninteractive
+
+# For GCC7
+apt-add-repository 'deb https://ports.ubuntu.com/ubuntu-ports focal main universe'
+
diff --git a/toolshed/provision-repositories.sh b/toolshed/provision-repositories.sh
new file mode 100755
index 0000000..005cecf
--- /dev/null
+++ b/toolshed/provision-repositories.sh
@@ -0,0 +1,31 @@
+#!/usr/bin/env bash
+
+# +----------------------------------------------------------+
+# | BASH : Modifying Shell Behaviour
+# | (https://www.gnu.org/software/bash/manual)
+# +----------------------------------------------------------+
+# Treat unset variables and parameters other than the special
+# parameters ‘@’ or ‘*’ as an error when performing parameter
+# expansion. An error message will be written to the standard
+# error, and a non-interactive shell will exit.
+set -o nounset
+
+# Exit immediately if a pipeline returns a non-zero status.
+set -o errexit
+
+# If set, the return value of a pipeline is the value of the
+# last (rightmost) command to exit with a non-zero status, or
+# zero if all commands in the pipeline exit successfully.
+set -o pipefail
+
+# +----------------------------------------------------------+
+export DEBIAN_FRONTEND=noninteractive
+
+cat kitware-archive-latest.asc
+cat kitware-archive-latest.asc | gpg --dearmor - | tee /etc/apt/trusted.gpg.d/kitware.gpg >/dev/null
+
+apt-get -y install software-properties-common
+apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 16FAAD7AF99A65E2
+apt-add-repository 'deb https://apt.kitware.com/ubuntu/ jammy main'
+
+add-apt-repository -y ppa:deadsnakes/ppa
diff --git a/toolshed/provision.sh b/toolshed/provision.sh
index 19b80e7..b6da383 100755
--- a/toolshed/provision.sh
+++ b/toolshed/provision.sh
@@ -25,6 +25,7 @@ apt-get -y install apt-utils
apt-get -y install moreutils
apt-get -y install python3.10
apt-get -y install python3-pip
+apt-get -y install python3-virtualenv
apt-get -y install cmake
apt-get -y install git
apt-get -y install flex
@@ -33,13 +34,16 @@ apt-get -y install lcov
apt-get -y install valgrind
apt-get -y install graphviz
apt-get -y install curl
-apt-get -y install qemu
apt-get -y install ninja-build
apt-get -y install can-utils
apt-get -y install lsb-release
apt-get -y install wget
apt-get -y install gnupg
apt-get -y install vim
+apt-get -y install g++-7
apt-get -y install g++-10
apt-get -y install g++-11
apt-get -y install g++-12
+apt-get -y install g++-13
+apt-get -y install nodejs
+apt-get -y install npm