#!/bin/sh
# Registers a user package
# Author: Kevin Rosenberg <kmr@debian.org >  GPL-2 license

set -e

LANG=C
LC_ALL=C
export HOME LANG LC_ALL

progname=$(basename $0)

if [ ! -d "$HOME" ]; then
  echo "User home directory $HOME does not exist as a directory" >&2
  exit 3
fi

clc_user_dir=$HOME/.clc

if [ ! -d "$clc_user_dir" ]; then
  mkdir "$clc_user_dir" ||
   (echo "Unable to create CLC user directory $clc_user_dir" >&2; exit 3)
fi

clc_user_db=$HOME/.clc/user-packages.db
clc_user_systems=$HOME/.clc/systems

if [ ! -f "$clc_user_db" ]; then
  touch "$clc_user_db" ||
    (echo "Unable to create CLC user package file $clc_user_db" >&2; exit 3)
fi

if [ -z "$1" ] ; then
 cat <<EOF
usage: $progname package-asd-file

registers a Common Lisp package to the Common Lisp Controller system.
EOF
    exit 1
fi
asdf_file=$(realpath -s "$1" 2>/dev/null || true)
if [ ! -f "$asdf_file" ] ; then
    echo "The user package file $1 does not exist." 
    exit 3
fi

# now store user directory into database file

output=$(grep "^$asdf_file\$" $clc_user_db || true)
if [ "$output" ]; then
  echo "User package $asdf_file already exists in CLC database, ignoring"
  exit 1;
fi

echo $asdf_file >> $clc_user_db

# create symbolic link from systems directory
if [ ! -d $clc_user_systems ]; then
  mkdir -p $clc_user_systems
fi

ln -sf $asdf_file $clc_user_systems

echo "User package $asdf_file installed"
