arti/maint/check_env

123 lines
2.9 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# The following scripts checks whether this shell environment contains all the
# binaries and packages required for an Arti development environment.
###############################################################################
# LIST OF DEPENDENCIES
###############################################################################
# List of binaries required in $PATH
BIN=(
"bash" # Redundant check, but included for completeness sake
"cargo"
"docker"
"git"
"grcov"
"perl"
"pkg-config"
"python3"
"rustc"
"rustup"
"shellcheck"
)
# List of Cargo commands
CARGO=(
"audit"
"fuzz"
"license"
"sort"
)
# List of C libraries, that pkg-config must be able to locate
C_LIBS=(
"openssl"
"sqlite3"
)
# List of Python packages, that must be available to the Python interpreter
PYTHON=(
"bs4"
"lxml"
"toml"
)
# List of Rust toolchain components, that must be available in the component list
RUST=(
"llvm-tools"
)
###############################################################################
# EXECUTION OF THE ACTUAL TESTS
###############################################################################
MISSING_BIN=()
MISSING_CARGO=()
MISSING_C_LIBS=()
MISSING_PYTHON=()
MISSING_RUST=()
for bin in "${BIN[@]}"; do
echo -n "Checking $bin ... "
if ! type "$bin" > /dev/null; then
MISSING_BIN+=("$bin")
else
echo "ok"
fi
done
for cmd in "${CARGO[@]}"; do
echo -n "Checking Cargo command $cmd ... "
if ! cargo "$cmd" --help; then
MISSING_CARGO+=("$cmd")
else
echo "ok"
fi
done
for lib in "${C_LIBS[@]}"; do
echo -n "Checking C library $lib ... "
if ! pkg-config "$lib" > /dev/null; then
MISSING_C_LIBS+=("$lib")
else
echo "ok"
fi
done
for pkg in "${PYTHON[@]}"; do
echo -n "Checking Python3 package $pkg ... "
if ! python3 -c "import $pkg" > /dev/null; then
MISSING_PYTHON+=("$pkg")
else
echo "ok"
fi
done
for comp in "${RUST[@]}"; do
echo -n "Checking Rust component $comp ... "
if ! rustup component list --installed | grep "$comp" > /dev/null; then
MISSING_RUST+=("$comp")
else
echo "ok"
fi
done
echo ""
echo "==============================="
echo "Summary"
echo "==============================="
if [ ${#MISSING_BIN[@]} -ne 0 ] || [ ${#MISSING_CARGO[@]} -ne 0 ] || [ ${#MISSING_C_LIBS[@]} -ne 0 ] || [ ${#MISSING_PYTHON[@]} -ne 0 ] || [ ${#MISSING_RUST[@]} -ne 0 ];
then
echo "Missing binaries: " "${MISSING_BIN[@]}"
echo "Missing Cargo commands: " "${MISSING_CARGO[@]}"
echo "Missing C libraries: " "${MISSING_C_LIBS[@]}"
echo "Missing Python3 packages: " "${MISSING_PYTHON[@]}"
echo "Missing Rust components: " "${MISSING_RUST[@]}"
exit 1
else
echo "No missing packages, enjoy your development environment! :-)"
exit 0
fi