Spaces:
Running
Running
| set -euo pipefail | |
| ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" | |
| PYTHON_BIN="${PYTHON_BIN:-$(command -v python3 || command -v python)}" | |
| if [[ -z "${PYTHON_BIN}" ]]; then | |
| echo "Python interpreter not found." >&2 | |
| exit 1 | |
| fi | |
| DEBIAN_MIRROR="${DEBIAN_MIRROR:-https://ftp.us.debian.org/debian}" | |
| DEBIAN_SECURITY_MIRROR="${DEBIAN_SECURITY_MIRROR:-https://security.debian.org/debian-security}" | |
| CPU_COUNT="$(getconf _NPROCESSORS_ONLN 2>/dev/null || sysctl -n hw.logicalcpu 2>/dev/null || echo 4)" | |
| if command -v apt-get >/dev/null 2>&1; then | |
| sed -i "s|http://deb.debian.org|${DEBIAN_MIRROR}|g" /etc/apt/sources.list || true | |
| sed -i "s|https://deb.debian.org|${DEBIAN_MIRROR}|g" /etc/apt/sources.list || true | |
| sed -i "s|http://security.debian.org|${DEBIAN_SECURITY_MIRROR}|g" /etc/apt/sources.list || true | |
| sed -i "s|https://security.debian.org|${DEBIAN_SECURITY_MIRROR}|g" /etc/apt/sources.list || true | |
| if ls /etc/apt/sources.list.d/*.list >/dev/null 2>&1; then | |
| sed -i "s|http://deb.debian.org|${DEBIAN_MIRROR}|g" /etc/apt/sources.list.d/*.list | |
| sed -i "s|https://deb.debian.org|${DEBIAN_MIRROR}|g" /etc/apt/sources.list.d/*.list | |
| sed -i "s|http://security.debian.org|${DEBIAN_SECURITY_MIRROR}|g" /etc/apt/sources.list.d/*.list | |
| sed -i "s|https://security.debian.org|${DEBIAN_SECURITY_MIRROR}|g" /etc/apt/sources.list.d/*.list | |
| fi | |
| APT_ARGS=( | |
| -o Acquire::Retries=5 | |
| -o Acquire::http::Timeout=30 | |
| -o Acquire::https::Timeout=30 | |
| ) | |
| apt-get update "${APT_ARGS[@]}" | |
| apt-get install -y --no-install-recommends "${APT_ARGS[@]}" \ | |
| ca-certificates \ | |
| build-essential \ | |
| cmake \ | |
| gcc \ | |
| git \ | |
| imagemagick \ | |
| libgtk-3-dev \ | |
| pkg-config | |
| rm -rf /var/lib/apt/lists/* | |
| else | |
| echo "apt-get not found; skipping OS package installation and assuming build tools are already available." | |
| fi | |
| "${PYTHON_BIN}" -m pip install --upgrade pip setuptools wheel | |
| "${PYTHON_BIN}" -m pip install -e "${ROOT_DIR}" | |
| "${PYTHON_BIN}" -m pip install "pygame>=2.1.0" | |
| pushd "${ROOT_DIR}/submodules/rlp" >/dev/null | |
| "${PYTHON_BIN}" setup.py build_ext --inplace | |
| popd >/dev/null | |
| find "${ROOT_DIR}/submodules/rlp/puzzles" -type f -name "*.sh" -exec chmod +x {} + | |
| mkdir -p "${ROOT_DIR}/submodules/rlp/rlp/lib" | |
| pushd "${ROOT_DIR}/submodules/rlp/rlp/lib" >/dev/null | |
| cmake ../../puzzles | |
| make -j"${CPU_COUNT}" libbridges libgalaxies libloopy libpattern libundead | |
| popd >/dev/null | |
| pushd "${ROOT_DIR}/submodules/flowfree" >/dev/null | |
| gcc -std=c11 -O2 -Wall -Wextra -o flowfree_all_solutions flowfree_all_solutions.c | |
| popd >/dev/null | |
| echo "TopoBench install complete." | |