Skip to content

Instantly share code, notes, and snippets.

@lockie
Last active March 3, 2021 10:01
Show Gist options
  • Save lockie/3d8261f242e3a07ceff09995e3ae171d to your computer and use it in GitHub Desktop.
Save lockie/3d8261f242e3a07ceff09995e3ae171d to your computer and use it in GitHub Desktop.
#!/bin/sh
set -ex
ROSWELL_RELEASE_VERSION=21.01.14.108
ROSWELL_TARBALL_PATH=$HOME/roswell.tar.gz
ROSWELL_DIR=$HOME/.roswell
ROSWELL_REPO=${ROSWELL_REPO:-https://github.com/roswell/roswell}
ROSWELL_BRANCH=${ROSWELL_BRANCH:-release}
ROSWELL_INSTALL_DIR=${ROSWELL_INSTALL_DIR:-/usr/local}
ROSWELL_PLATFORMHTML_BASE=${ROSWELL_PLATFORMHTML_BASE:-https://github.com/roswell/sbcl_bin/releases/download/files/sbcl-bin_uri.tsv}
ROSWELL_SBCL_BIN_URI=${ROSWELL_SBCL_BIN_URI:-https://github.com/roswell/sbcl_bin/releases/download/}
ROSWELL_QUICKLISP_DIST_URI=${ROSWELL_QUICKLISP_DIST_URI:-http://beta.quicklisp.org/dist/quicklisp.txt}
USE_LISP=$LISP
unset LISP
LISP_IMPLS_BIN="$ROSWELL_INSTALL_DIR/bin"
LISP_IMPLS_DIR="$ROSWELL_DIR/impls/system"
log () {
echo "$ $1"
echo `$1`
}
fetch () {
echo "Downloading $1..."
if curl --no-progress-bar --retry 10 -o $2 -L $1; then
return 0;
else
echo "Failed to download $1."
exit 1
fi
}
extract () {
opt=$1
file=$2
destination=$3
echo "Extracting a tarball $file into $destination..."
mkdir -p "$destination"
file $file
ls -al $file
tar -C "$destination" --strip-components=1 "$opt" -xf "$file"
}
install_script () {
path=$1; shift
dir=$(dirname "$path")
tmp=$(mktemp /tmp/rosci_XXX)
echo "#!/bin/sh" > "$tmp"
while [ "$1" != "" ]; do
echo "$1" >> "$tmp"
shift
done
chmod 755 "$tmp"
mkdir -p "$dir" 2>/dev/null || $SUDO mkdir -p "$dir"
if [ -w "$dir" ]; then
mv "$tmp" "$path"
else
$SUDO mv "$tmp" "$path"
fi
}
apt_installed_p () {
if uname -s | grep -E "MSYS|MINGW" >/dev/null; then
true
elif [ `uname` = "Darwin" ]; then
if brew info "$1" |grep installed;then
false
else
true
fi
else
$(dpkg -s "$1" >/dev/null 2>&1)
fi
}
apt_unless_installed () {
if ! apt_installed_p "$1"; then
if [ `uname` = "Darwin" ]; then
brew install "$1"
else
$SUDO -E apt-get -yq update
$SUDO -E apt-get -yq --no-install-suggests --no-install-recommends --force-yes install "$1"
fi
fi
}
install_abcl () {
java=$(which java)
if [ "$java" = "" ]; then
if apt_installed_p "openjdk-7-jre"; then
java="/usr/lib/jvm/java-7-openjdk/bin/java"
elif apt_installed_p "openjdk-6-jre"; then
java="/usr/lib/jvm/java-6-openjdk/bin/java"
else
apt_unless_installed openjdk-7-jre
java="/usr/lib/jvm/java-7-openjdk/bin/java"
fi
fi
PATH="$java:$PATH" ros install abcl-bin
ros use abcl-bin
}
install_ecl () {
if [ `uname` = "Darwin" ]; then
brew install ecl
ros use ecl/system
else
ros install ecl
ros use ecl
fi
}
if which sudo 2>&1 >/dev/null; then
SUDO=sudo
fi
install_roswell_bin () {
if uname -s | grep -E "MSYS_NT|MINGW64" >/dev/null; then
if [ $ROSWELL_BRANCH = release ]; then
fetch "https://github.com/roswell/roswell/releases/download/v$ROSWELL_RELEASE_VERSION/roswell_${ROSWELL_RELEASE_VERSION}_amd64.zip" /tmp/roswell.zip
unzip /tmp/roswell.zip -d /tmp/ >/dev/null
mkdir -p $ROSWELL_INSTALL_DIR/bin
cp /tmp/roswell/ros.exe $ROSWELL_INSTALL_DIR/bin
cp -r /tmp/roswell/lisp $ROSWELL_INSTALL_DIR/bin/lisp
fi
elif uname -s | grep -E "MINGW32" >/dev/null; then
if [ $ROSWELL_BRANCH = release ]; then
fetch "https://github.com/roswell/roswell/releases/download/v$ROSWELL_RELEASE_VERSION/roswell_${ROSWELL_RELEASE_VERSION}_i686.zip" /tmp/roswell.zip
unzip /tmp/roswell.zip -d /tmp/ >/dev/null
mkdir -p $ROSWELL_INSTALL_DIR/bin
cp /tmp/roswell/ros.exe $ROSWELL_INSTALL_DIR/bin
cp -r /tmp/roswell/lisp $ROSWELL_INSTALL_DIR/bin/lisp
fi
elif uname -s |grep Linux >/dev/null && uname -m |grep x86_64 >/dev/null && which dpkg >/dev/null; then
if ! [ -w "$ROSWELL_INSTALL_DIR" ]; then
if [ $ROSWELL_BRANCH = release ]; then
fetch "https://github.com/roswell/roswell/releases/download/v$ROSWELL_RELEASE_VERSION/roswell_$ROSWELL_RELEASE_VERSION-1_amd64.deb" /tmp/roswell.deb
fi
if [ -f /tmp/roswell.deb ]; then
$SUDO dpkg -i /tmp/roswell.deb
fi
fi
elif [ `uname` = "Darwin" ] && [ $ROSWELL_BRANCH = release ]; then
apt_unless_installed roswell
fi
}
install_roswell_src () {
if ! which ros >/dev/null; then
fetch "$ROSWELL_REPO/archive/$ROSWELL_BRANCH.tar.gz" "$ROSWELL_TARBALL_PATH"
extract -z "$ROSWELL_TARBALL_PATH" "$ROSWELL_DIR"
cd $ROSWELL_DIR
sh bootstrap
mkdir -p ~/.roswell
echo "sbcl-bin-version-uri 0 $ROSWELL_PLATFORMHTML_BASE" >> ~/.roswell/config;
echo "sbcl-bin-uri 0 $ROSWELL_SBCL_BIN_URI" >> ~/.roswell/config;
./configure --prefix=$ROSWELL_INSTALL_DIR
make
if [ -w "$ROSWELL_INSTALL_DIR" ]; then
make install
else
$SUDO make install
fi
fi
}
if ! which ros >/dev/null; then
echo "Installing Roswell..."
install_roswell_bin
install_roswell_src
echo "Roswell has been installed."
else
echo "Detected Roswell."
fi
case "$USE_LISP" in
alisp|allegro)
apt_unless_installed libc6-i386
apt_unless_installed gcc-multilib
USE_LISP=allegro
;;
cmu|cmucl|cmu-bin)
apt_unless_installed libc6-i386
apt_unless_installed gcc-multilib
USE_LISP=cmu-bin
;;
# 'ccl' is an alias for 'ccl-bin'
ccl)
USE_LISP=ccl-bin
;;
ccl32)
USE_LISP=ccl-bin
apt_unless_installed libc6-i386
apt_unless_installed gcc-multilib
ros config set ccl.bit 32
;;
# 'sbcl-bin' is the default
"")
USE_LISP=sbcl-bin
;;
esac
echo "Installing $USE_LISP..."
echo $PATH
which ros || true
ls $HOME/.roswell/bin || true
case "$USE_LISP" in
clisp)
if [ `uname` = "Darwin" ]; then
apt_unless_installed clisp;
ros use clisp/system;
else
ros install $USE_LISP;
fi
ros install asdf;
;;
abcl)
install_abcl
;;
ecl)
install_ecl
;;
sbcl-bin)
ros use $USE_LISP
;;
*)
ros install $USE_LISP;
ros use $USE_LISP
;;
esac
log "ros version"
log "ros quicklisp.dist=$ROSWELL_QUICKLISP_DIST_URI setup"
if [ "$ROSWELL_LATEST_ASDF" ]; then
echo "Installing the latest ASDF..."
ros install asdf
fi
ros -e '(format t "~&~A ~A up and running! (ASDF ~A)~2%"
(lisp-implementation-type)
(lisp-implementation-version)
#+asdf(asdf:asdf-version) #-asdf "not required")' || exit 1
# Setup ASDF source regisry
if [ "$LOCALAPPDATA" ]; then
ASDF_SR_CONF_DIR="$LOCALAPPDATA/config/common-lisp/source-registry.conf.d"
else
ASDF_SR_CONF_DIR="$HOME/.config/common-lisp/source-registry.conf.d"
fi
ASDF_SR_CONF_FILE="$ASDF_SR_CONF_DIR/ci.conf"
LOCAL_LISP_TREE="$HOME/lisp"
mkdir -p "$ASDF_SR_CONF_DIR"
mkdir -p "$LOCAL_LISP_TREE"
if [ "$TRAVIS" ]; then
echo "(:tree \"$TRAVIS_BUILD_DIR/\")" > "$ASDF_SR_CONF_FILE"
elif [ "$CIRCLECI" ]; then
echo "(:tree \"$CIRCLE_WORKING_DIRECTORY/\")" > "$ASDF_SR_CONF_FILE"
elif [ "$GITHUB_WORKSPACE" ]; then
if uname -s | grep -E "MSYS_NT|MINGW" >/dev/null; then
GITHUB_WORKSPACE_LISP=`echo $GITHUB_WORKSPACE | sed -e 's/\\\\/\//g'`
echo "(:tree \"$GITHUB_WORKSPACE_LISP/\")" > "$ASDF_SR_CONF_FILE"
else
echo "(:tree \"$GITHUB_WORKSPACE/\")" > "$ASDF_SR_CONF_FILE"
fi
fi
echo "(:tree \"$LOCAL_LISP_TREE/\")" >> "$ASDF_SR_CONF_FILE"
echo "ASDF source registry configurations at ${ASDF_SR_CONF_FILE}."
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment