| # Copyright 1999-2004 Gentoo Foundation |
| # Distributed under the terms of the GNU General Public License v2 |
| # $Header: /var/cvsroot/gentoo-x86/eclass/common-lisp-common.eclass,v 1.13 2009/09/18 15:35:50 hkbst Exp $ |
| # |
| # Author Matthew Kennedy <mkennedy@gentoo.org> |
| # |
| # Sundry code common to many Common Lisp related ebuilds. |
| |
| # Some handy constants |
| |
| inherit eutils |
| |
| CLFASLROOT=/usr/$(get_libdir)/common-lisp/ |
| CLSOURCEROOT=/usr/share/common-lisp/source/ |
| CLSYSTEMROOT=/usr/share/common-lisp/systems/ |
| |
| # Many of our Common Lisp ebuilds are either inspired by, or actually |
| # use packages and files from the Debian project's archives. |
| |
| do-debian-credits() { |
| docinto debian |
| for i in copyright README.Debian changelog; do |
| # be silent, since all files are not always present |
| dodoc "${S}"/debian/${i} &>/dev/null || true |
| done |
| docinto . |
| } |
| |
| # Most of the code below is from Debian's Common Lisp Controller |
| # package |
| |
| register-common-lisp-implementation() { |
| PROGNAME=$(basename $0) |
| # first check if there is at least a compiler-name: |
| if [ -z "$1" ] ; then |
| cat <<EOF |
| usage: $PROGNAME compiler-name |
| |
| registers a Common Lisp compiler to the |
| Common-Lisp-Controller system. |
| EOF |
| exit 1 |
| fi |
| IMPL=$1 |
| FILE="/usr/$(get_libdir)/common-lisp/bin/$IMPL.sh" |
| if [ ! -f "$FILE" ] ; then |
| cat <<EOF |
| $PROGNAME: I cannot find the script $FILE for the implementation $IMPL |
| EOF |
| exit 2 |
| fi |
| if [ ! -r "$FILE" ] ; then |
| cat <<EOF |
| $PROGNAME: I cannot read the script $FILE for the implementation $IMPL |
| EOF |
| exit 2 |
| fi |
| # install CLC into the lisp |
| sh "$FILE" install-clc || (echo "Installation of CLC failed" >&2 ; exit 3) |
| mkdir /usr/$(get_libdir)/common-lisp/$IMPL &>/dev/null || true |
| chown cl-builder:cl-builder /usr/$(get_libdir)/common-lisp/$IMPL |
| |
| # now recompile the stuff |
| for i in /usr/share/common-lisp/systems/*.asd ; do |
| if [ -f $i -a -r $i ] ; then |
| i=${i%.asd} |
| package=${i##*/} |
| clc-autobuild-check $IMPL $package |
| if [ $? = 0 ]; then |
| echo recompiling package $package for implementation $IMPL |
| /usr/bin/clc-send-command --quiet recompile $package $IMPL |
| fi |
| fi |
| done |
| for i in /usr/share/common-lisp/systems/*.system ; do |
| if [ -f $i -a -r $i ] ; then |
| i=${i%.system} |
| package=${i##*/} |
| clc-autobuild-check $IMPL $package |
| if [ $? = 0 ]; then |
| echo recompiling package $package for implementation $IMPL |
| /usr/bin/clc-send-command --quiet recompile $package $IMPL |
| fi |
| fi |
| done |
| echo "$PROGNAME: Compiler $IMPL installed" |
| } |
| |
| unregister-common-lisp-implementation() { |
| PROGNAME=$(basename $0) |
| if [ `id -u` != 0 ] ; then |
| echo $PROGNAME: you need to be root to run this program |
| exit 1 |
| fi |
| if [ -z "$1" ] ; then |
| cat <<EOF |
| usage: $PROGNAME compiler-name |
| |
| un-registers a Common Lisp compiler to the |
| Common-Lisp-Controller system. |
| EOF |
| exit 1 |
| fi |
| IMPL=$1 |
| IMPL_BIN="/usr/$(get_libdir)/common-lisp/bin/$IMPL.sh" |
| if [ ! -f "$IMPL_BIN" ] ; then |
| cat <<EOF |
| $PROGNAME: No implementation of the name $IMPL is registered |
| Cannot find the file $IMPL_BIN |
| |
| Maybe you already removed it? |
| EOF |
| exit 0 |
| fi |
| if [ ! -r "$IMPL_BIN" ] ; then |
| cat <<EOF |
| $PROGNAME: No implementation of the name $IMPL is registered |
| Cannot read the file $IMPL_BIN |
| |
| Maybe you already removed it? |
| EOF |
| exit 0 |
| fi |
| # Uninstall the CLC |
| sh $IMPL_BIN remove-clc || echo "De-installation of CLC failed" >&2 |
| clc-autobuild-impl $IMPL inherit |
| # Just remove the damn subtree |
| (cd / ; rm -rf "/usr/$(get_libdir)/common-lisp/$IMPL/" ; true ) |
| echo "$PROGNAME: Common Lisp implementation $IMPL uninstalled" |
| } |
| |
| reregister-all-common-lisp-implementations() { |
| # Rebuilds all common lisp implementations |
| # Written by Kevin Rosenberg <kmr@debian.org> |
| # GPL-2 license |
| local clc_bin_dir=/usr/$(get_libdir)/common-lisp/bin |
| local opt=$(shopt nullglob); shopt -s nullglob |
| cd $clc_bin_dir |
| for impl_bin in *.sh; do |
| impl=$(echo $impl_bin | sed 's/\(.*\).sh/\1/') |
| unregister-common-lisp-implementation $impl |
| register-common-lisp-implementation $impl |
| done |
| cd - >/dev/null |
| [[ $opt = *off ]] && shopt -u nullglob |
| } |
| |
| # BIG FAT HACK: Since the Portage emerge step kills file timestamp |
| # information, we need to compensate by ensuring all FASL files are |
| # more recent than their source files. |
| |
| # The following `impl-*-timestamp-hack' functions SHOULD NOT be used |
| # outside of this eclass. |
| |
| impl-save-timestamp-hack() { |
| local impl=$1 |
| dodir /usr/share/${impl} |
| tar cpjf "${D}"/usr/share/${impl}/portage-timestamp-compensate -C "${D}"/usr/$(get_libdir)/${impl} . |
| } |
| |
| impl-restore-timestamp-hack() { |
| local impl=$1 |
| tar xjpfo /usr/share/${impl}/portage-timestamp-compensate -C /usr/$(get_libdir)/${impl} |
| } |
| |
| impl-remove-timestamp-hack() { |
| local impl=$1 |
| rm -rf /usr/$(get_libdir)/${impl} &>/dev/null || true |
| } |
| |
| test-in() { |
| local symbol=$1 |
| shift |
| for i in $@; do |
| if [ $i == ${symbol} ]; then |
| return 0 # true |
| fi |
| done |
| false |
| } |
| |
| standard-impl-postinst() { |
| local impl=$1 |
| rm -rf /usr/$(get_libdir)/common-lisp/${impl}/* &>/dev/null || true |
| chown cl-builder:cl-builder /usr/$(get_libdir)/common-lisp/${impl} |
| if test-in ${impl} cmucl sbcl; then |
| impl-restore-timestamp-hack ${impl} |
| fi |
| chown -R root:0 /usr/$(get_libdir)/${impl} |
| /usr/bin/clc-autobuild-impl ${impl} yes |
| register-common-lisp-implementation ${impl} |
| } |
| |
| standard-impl-postrm() { |
| local impl=$1 impl_binary=$2 |
| # Since we keep our own time stamps we must manually remove them |
| # here. |
| if [ ! -x ${impl_binary} ]; then |
| if test-in ${impl} cmucl sbcl; then |
| impl-remove-timestamp-hack ${impl} |
| fi |
| rm -rf /usr/$(get_libdir)/common-lisp/${impl}/* |
| fi |
| } |
| |
| # Local Variables: *** |
| # mode: shell-script *** |
| # tab-width: 4 *** |
| # End: *** |