#!/usr/bin/env bash # USAGE: ./setup.sh install cbuild to /usr/local # ./setup.sh --local install cbuild to $HOME/.local # exit on errors set -xeo pipefail CBUILD_VERSION=2.1.1 function version_parse { local value="$1" var_name="$2" IFS_backup="$IFS" IFS='.' local v_array=($value) IFS="$IFS_backup" eval ${var_name}_version_major=${v_array[0]} eval ${var_name}_version_minor=${v_array[1]} eval ${var_name}_version_patch=${v_array[2]} } function exec_script_line { local script="$1" local line_num="$2" local line_str="$(sed $line_num'!d' $script)" if [ -z "$line_str" ]; then echo "script line is empty" exit 1 fi eval "$line_str" } version_parse $CBUILD_VERSION local if [ -z "$CBUILD_INSTALL_DIR" ]; then if [ "$1" = "--local" ]; then if [ ! -d "$HOME" ]; then echo "ERROR: home directory '$HOME' doesn't exist" exit 1 fi CBUILD_INSTALL_DIR="$HOME/.local/share/cbuild/${local_version_major}.${local_version_minor}" CBUILD_BIN_DIR="$HOME/.local/bin" mkdir -p "$HOME/.local" mkdir -p "$HOME/.local/share" mkdir -p "$HOME/.local/share/cbuild" mkdir -p "$HOME/.local/bin" else CBUILD_INSTALL_DIR="/usr/local/share/cbuild/${local_version_major}.${local_version_minor}" CBUILD_BIN_DIR="/usr/local/bin" mkdir -p "/usr/local/share" mkdir -p "/usr/local/share/cbuild" mkdir -p "/usr/local/bin" fi fi rm -rf "$CBUILD_INSTALL_DIR" cp -r ./ "$CBUILD_INSTALL_DIR" rm -rf "$CBUILD_INSTALL_DIR/.git" ln -sf "$(realpath $CBUILD_INSTALL_DIR/cbuild.sh)" -T "$CBUILD_BIN_DIR/cbuild${local_version_major}.${local_version_minor}" bootstrap_install_path="$CBUILD_INSTALL_DIR/../bootstrap.sh" if [ -f "$bootstrap_install_path" ]; then exec_script_line "$bootstrap_install_path" 2 installed_bootstrap_version=$CBUILD_BOOTSTRAP_VERSION installed_bootstrap_version_int=$(echo $installed_bootstrap_version | sed 's/\.//g') exec_script_line "./bootstrap.sh" 2 local_bootstrap_version=$CBUILD_BOOTSTRAP_VERSION local_bootstrap_version_int=$(echo $local_bootstrap_version | sed 's/\.//g') if [[ $local_bootstrap_version_int > $installed_bootstrap_version_int ]]; then ln -sf "$(realpath $CBUILD_INSTALL_DIR/bootstrap.sh)" -T "$bootstrap_install_path" fi else ln -sf "$(realpath $CBUILD_INSTALL_DIR/bootstrap.sh)" -T "$bootstrap_install_path" fi ln -sf "$(realpath $bootstrap_install_path)" -T "$CBUILD_BIN_DIR/cbuild"