/ maint / check_env
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