#!/usr/bin/env bash set -euo pipefail script_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" repo_root="$(cd -- "${script_dir}/.." && pwd)" prefix="${PREFIX:-${HOME}/.local}" profile="release" build=1 usage() { cat <<'USAGE' usage: scripts/install.sh [--prefix ] [--debug] [--no-build] Installs the Slovo toolchain layout: /bin/glagol /share/slovo/std/*.slo /share/slovo/runtime/runtime.c Set PREFIX instead of --prefix if preferred. USAGE } while [ "$#" -gt 0 ]; do case "$1" in --prefix) if [ "$#" -lt 2 ]; then echo "--prefix requires a directory" >&2 exit 2 fi prefix="$2" shift 2 ;; --debug) profile="debug" shift ;; --no-build) build=0 shift ;; -h|--help) usage exit 0 ;; *) echo "unexpected argument: $1" >&2 usage >&2 exit 2 ;; esac done if [ "${build}" -eq 1 ]; then cargo build --manifest-path "${repo_root}/compiler/Cargo.toml" --profile "${profile}" fi binary="${repo_root}/compiler/target/${profile}/glagol" if [ ! -x "${binary}" ]; then echo "missing built compiler binary: ${binary}" >&2 echo "run cargo build --manifest-path compiler/Cargo.toml --profile ${profile}" >&2 exit 1 fi bin_dir="${prefix}/bin" std_dir="${prefix}/share/slovo/std" runtime_dir="${prefix}/share/slovo/runtime" doc_dir="${prefix}/share/doc/slovo" install -d "${bin_dir}" "${std_dir}" "${runtime_dir}" "${doc_dir}" install -m 755 "${binary}" "${bin_dir}/glagol" install -m 644 "${repo_root}/runtime/runtime.c" "${runtime_dir}/runtime.c" find "${repo_root}/lib/std" -maxdepth 1 -type f -name '*.slo' -print0 | while IFS= read -r -d '' module; do install -m 644 "${module}" "${std_dir}/$(basename "${module}")" done install -m 644 "${repo_root}/README.md" "${doc_dir}/README.md" install -m 644 "${repo_root}/LICENSE-MIT" "${doc_dir}/LICENSE-MIT" install -m 644 "${repo_root}/LICENSE-APACHE" "${doc_dir}/LICENSE-APACHE" cat <