1
0
Fork 0
tinmop/quick_quicklisp.sh.in

222 lines
6.1 KiB
Bash

#!/bin/sh
# tinmop: an humble mastodon client
# Copyright (C) 2020 cage
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program.
# If not, see [[http://www.gnu.org/licenses/][http://www.gnu.org/licenses/]].
QUICKLISP_INSTALL_DIR=$HOME/quicklisp/
QUICKLISP_URL="https://beta.quicklisp.org/quicklisp.lisp"
QUICKLISP_SIG_URL="https://beta.quicklisp.org/quicklisp.lisp.asc"
QUICKLISP_KEY_URL="https://beta.quicklisp.org/release-key.txt"
QUICKLISP="quicklisp.lisp"
QUICKLISP_SIG="quicklisp.lisp.asc"
QUICKLISP_KEY="release-key"
QUICKLISP_SIGNATURE="D7A3 +489D +DEFE +32B7 +D0E7 +CC61 +3079 +65AB +028B +5FF7"
LISP_SOURCE_REGISTRY_DIR="$HOME/.config/common-lisp/"
LISP_SOURCE_REGISTRY_FILE="$LISP_SOURCE_REGISTRY_DIR/source-registry.conf"
VERIFY_OK_RES=2
CROATOAN_GIT_URL=https://github.com/McParen/croatoan.git
CROATOAN_DIR="$QUICKLISP_INSTALL_DIR"/local-projects/croatoan/
CROATOAN_COMMIT=668add0b640ac6b54641c048f636b1ae202120e3
CL_COLORS2_GIT_URL=https://codeberg.org/cage/cl-colors2.git
CL_COLORS2_DIR="$QUICKLISP_INSTALL_DIR"/local-projects/cl-colors2/
NODGUI_GIT_URL=https://codeberg.org/cage/nodgui.git
NODGUI_DIR="$QUICKLISP_INSTALL_DIR"/local-projects/nodgui/
TOOTER_GIT_URL="https://github.com/Shinmera/tooter.git"
TOOTER_DIR="$QUICKLISP_INSTALL_DIR"/local-projects/tooter/
echo_bold () {
printf "\033[1m%s\033[0m\n" "$1"
}
check_dir (){
if [ -d "$1" ]; then
echo 0;
else
echo 1;
fi
}
check_croatoan (){
check_dir "$CROATOAN_DIR"
}
check_quicklisp () {
check_dir "$QUICKLISP_INSTALL_DIR"
}
check_cl_colors2 () {
check_dir "$CL_COLORS2_DIR"
}
check_nodgui () {
check_dir "$NODGUI_DIR"
}
check_tooter () {
check_dir "$TOOTER_DIR"
}
check_quicklisp_signature () {
chk1_prog='BEGIN {res=0} /Good signature.*release@quicklisp.org/ {res++; print res}'
chk2_prog="BEGIN {res=0} /${QUICKLISP_SIGNATURE}/ {res++; print res}"
res1=$(LC_MESSAGES="C" @GPG@ --verify quicklisp.lisp.asc quicklisp.lisp 2>&1 | @AWK@ -- "${chk1_prog}")
res2=$(@GPG@ --verify quicklisp.lisp.asc quicklisp.lisp 2>&1 | @AWK@ -- "${chk2_prog}")
res=$((res1 + res2))
printf "%s" "$res"
}
QUICKLIST_INSTALL_FORM="(quicklisp-quickstart:install)"
if [ "$1" = "--proxy" ] ; then
QUICKLIST_INSTALL_FORM="(quicklisp-quickstart:install :proxy \"$2\")"
fi
if [ "$2" = "--proxy" ] ; then
QUICKLIST_INSTALL_FORM="(quicklisp-quickstart:install :proxy \"$3\")"
fi
install_quicklisp () {
echo_bold "Downloading quicklisp..."
@CURL@ "$QUICKLISP_URL" > $QUICKLISP
@CURL@ "$QUICKLISP_SIG_URL" > $QUICKLISP_SIG
@CURL@ "$QUICKLISP_KEY_URL" > $QUICKLISP_KEY
echo_bold "Importing gpg key."
@GPG@ --import $QUICKLISP_KEY
echo_bold "Verifying key"
signature_verified=$(check_quicklisp_signature)
if [ "$signature_verified" -ne $VERIFY_OK_RES ]; then
echo_bold "Key verification failed!"
exit 1
else
echo_bold "Key successfully verified."
if test "$1" = "" ; then
@LISP_COMPILER@ --load $QUICKLISP \
--eval "$QUICKLIST_INSTALL_FORM" \
--eval "(ql:add-to-init-file)" \
--eval "(sb-ext:quit)";
else
@LISP_COMPILER@ --load $QUICKLISP \
--eval "$QUICKLIST_INSTALL_FORM" \
--eval "(ql-util:without-prompting (ql:add-to-init-file))" \
--eval "(sb-ext:quit)";
fi
@MKDIR_P@ "$LISP_SOURCE_REGISTRY_DIR"
PAR_PWD=$(@DIRNAME@ "$PWD")
echo "(:source-registry" > "$LISP_SOURCE_REGISTRY_FILE"
echo " (:tree \"$PAR_PWD\")" >> "$LISP_SOURCE_REGISTRY_FILE"
echo ":inherit-configuration)" >> "$LISP_SOURCE_REGISTRY_FILE"
echo "quicklisp installed"
fi
}
install_dependency () {
sbcl_args=''
while read -r dep; do
sbcl_args="$sbcl_args --eval '(ql:quickload \"$dep\")'"
done < lisp-dependencies
sbcl_args="$sbcl_args --eval '(sb-ext:quit)'"
eval "@LISP_COMPILER@ $sbcl_args"
}
install_croatoan () {
installedp=$(check_croatoan);
if [ "$installedp" -eq 0 ]; then
cd "$CROATOAN_DIR" && @GIT@ pull
else
cd "$QUICKLISP_INSTALL_DIR"/local-projects/ && @GIT@ clone "$CROATOAN_GIT_URL"
fi
cd "$CROATOAN_DIR" && @GIT@ checkout "$CROATOAN_COMMIT"
}
install_from_git () {
cd "$QUICKLISP_INSTALL_DIR"/local-projects/ && @GIT@ clone "$1"
}
install_cl_colors2 () {
installedp=$(check_cl_colors2);
if [ "$installedp" -eq 0 ]; then
cd "$CL_COLORS2_DIR" && @GIT@ pull
else
install_from_git $CL_COLORS2_GIT_URL
fi
}
install_nodgui () {
installedp=$(check_nodgui);
if [ "$installedp" -eq 0 ]; then
cd "$NODGUI_DIR" && @GIT@ pull
else
install_from_git $NODGUI_GIT_URL
fi
@LISP_COMPILER@ --eval '(ql:quickload "nodgui")' --eval "(sb-ext:quit)";
}
install_tooter () {
installedp=$(check_tooter);
if [ "$installedp" -eq 0 ]; then
cd "$TOOTER_DIR" && @GIT@ pull
else
install_from_git $TOOTER_GIT_URL
fi
}
quicklisp_installed_p=$(check_quicklisp)
if [ "$quicklisp_installed_p" -eq 0 ]; then
echo_bold "Quicklisp already installed; fetching libraries..."
install_dependency
else
if test "$1" = "--do-not-prompt" ; then
install_quicklisp 1
else
install_quicklisp
fi
install_dependency
fi
echo_bold "installing croatoan from git repository..."
install_croatoan
echo_bold "installing cl-colors2 from git repository..."
install_cl_colors2
echo_bold "installing nodgui from git repository..."
install_nodgui
echo_bold "installing tooter from git repository..."
install_tooter
echo_bold "Finished."