78 lines
2.7 KiB
Bash
Executable File
78 lines
2.7 KiB
Bash
Executable File
#!/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=$(<CBUILD_VERSION)
|
|
|
|
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
|
|
echo "Found outdated bootstrap.sh in '$CBUILD_INSTALL_DIR', updating"
|
|
ln -sf "$(realpath $CBUILD_INSTALL_DIR/bootstrap.sh)" -T "$bootstrap_install_path"
|
|
fi
|
|
else
|
|
echo "Not found bootstrap.sh in '$CBUILD_INSTALL_DIR', installing"
|
|
ln -sf "$(realpath $CBUILD_INSTALL_DIR/bootstrap.sh)" -T "$bootstrap_install_path"
|
|
fi
|
|
echo "Link bootstrap.sh to $CBUILD_BIN_DIR"
|
|
ln -sf "$(realpath $bootstrap_install_path)" -T "$CBUILD_BIN_DIR/cbuild"
|