check_env
1 #!/usr/bin/env bash 2 # 3 # The following scripts checks whether this shell environment contains all the 4 # binaries and packages required for an Arti development environment. 5 6 ############################################################################### 7 # LIST OF DEPENDENCIES 8 ############################################################################### 9 10 # List of binaries required in $PATH 11 BIN=( 12 "bash" # Redundant check, but included for completeness sake 13 "cargo" 14 "docker" 15 "git" 16 "grcov" 17 "perl" 18 "pkg-config" 19 "python3" 20 "rustc" 21 "rustup" 22 "shellcheck" 23 ) 24 25 # List of Cargo commands 26 CARGO=( 27 "audit" 28 "fuzz" 29 "license" 30 "sort" 31 ) 32 33 # List of C libraries, that pkg-config must be able to locate 34 C_LIBS=( 35 "openssl" 36 "sqlite3" 37 ) 38 39 # List of Python packages, that must be available to the Python interpreter 40 PYTHON=( 41 "bs4" 42 "lxml" 43 "toml" 44 ) 45 46 # List of Rust toolchain components, that must be available in the component list 47 RUST=( 48 "llvm-tools" 49 ) 50 51 ############################################################################### 52 # EXECUTION OF THE ACTUAL TESTS 53 ############################################################################### 54 55 MISSING_BIN=() 56 MISSING_CARGO=() 57 MISSING_C_LIBS=() 58 MISSING_PYTHON=() 59 MISSING_RUST=() 60 61 for bin in "${BIN[@]}"; do 62 echo -n "Checking $bin ... " 63 if ! type "$bin" > /dev/null; then 64 MISSING_BIN+=("$bin") 65 else 66 echo "ok" 67 fi 68 done 69 70 for cmd in "${CARGO[@]}"; do 71 echo -n "Checking Cargo command $cmd ... " 72 if ! cargo "$cmd" --help; then 73 MISSING_CARGO+=("$cmd") 74 else 75 echo "ok" 76 fi 77 done 78 79 for lib in "${C_LIBS[@]}"; do 80 echo -n "Checking C library $lib ... " 81 if ! pkg-config "$lib" > /dev/null; then 82 MISSING_C_LIBS+=("$lib") 83 else 84 echo "ok" 85 fi 86 done 87 88 for pkg in "${PYTHON[@]}"; do 89 echo -n "Checking Python3 package $pkg ... " 90 if ! python3 -c "import $pkg" > /dev/null; then 91 MISSING_PYTHON+=("$pkg") 92 else 93 echo "ok" 94 fi 95 done 96 97 for comp in "${RUST[@]}"; do 98 echo -n "Checking Rust component $comp ... " 99 if ! rustup component list --installed | grep "$comp" > /dev/null; then 100 MISSING_RUST+=("$comp") 101 else 102 echo "ok" 103 fi 104 done 105 106 echo "" 107 echo "===============================" 108 echo "Summary" 109 echo "===============================" 110 111 if [ ${#MISSING_BIN[@]} -ne 0 ] || [ ${#MISSING_CARGO[@]} -ne 0 ] || [ ${#MISSING_C_LIBS[@]} -ne 0 ] || [ ${#MISSING_PYTHON[@]} -ne 0 ] || [ ${#MISSING_RUST[@]} -ne 0 ]; 112 then 113 echo "Missing binaries: " "${MISSING_BIN[@]}" 114 echo "Missing Cargo commands: " "${MISSING_CARGO[@]}" 115 echo "Missing C libraries: " "${MISSING_C_LIBS[@]}" 116 echo "Missing Python3 packages: " "${MISSING_PYTHON[@]}" 117 echo "Missing Rust components: " "${MISSING_RUST[@]}" 118 exit 1 119 else 120 echo "No missing packages, enjoy your development environment! :-)" 121 exit 0 122 fi