| #!/bin/bash |
| # Copyright 2023 The ChromiumOS Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| cd "$(dirname "$(realpath "${0}")")" || exit |
| |
| set -e |
| |
| # The depgraph visualizer creates a bespoke virtual env independent of vpython |
| # because the viz deps are tricky to maintain. E.g., numpy's Fortran deps |
| # relying on specific glibc, and packages wanting Python >= 3.9. Here, do a |
| # simple check for changes to the visualizer source, or install if the virtual |
| # env does not exist yet. |
| should_upgrade() { |
| TARGET=my_visualizations/bin/visualize_depgraph |
| DEPS=(depgraph_visualization requirements.txt) |
| if [[ ! -x "${TARGET}" ]]; then |
| return 0 |
| fi |
| if [[ -n "$(find "${DEPS[@]}" -newer "${TARGET}" -print -quit)" ]]; then |
| return 0 |
| fi |
| return 1 |
| } |
| |
| install() { |
| INSTALL_OPTIONS=(--quiet --log my_visualizations/install.log install) |
| echo "Updating visualize_depgraph venv.." |
| python3 -m venv my_visualizations |
| source my_visualizations/bin/activate |
| |
| # Upgrade pip to avoid a red herring warning about it not being up to date. |
| pip "${INSTALL_OPTIONS[@]}" --upgrade pip |
| pip "${INSTALL_OPTIONS[@]}" -r requirements.txt |
| pip "${INSTALL_OPTIONS[@]}" . |
| } |
| |
| if should_upgrade; then |
| install |
| fi |
| |
| # Run in my_visualizations so that default output paths are scoped there. |
| cd my_visualizations |
| exec bin/visualize_depgraph "$@" |