#!/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://codeberg.org/McParen/croatoan.git CROATOAN_DIR="$QUICKLISP_INSTALL_DIR"/local-projects/croatoan/ CROATOAN_COMMIT=470055739ef6ece42655ef0f3878a87a9e3e9b78 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."