Gentoo Archives: gentoo-lisp

From: Stelian Ionescu <sionescu@×××××××××××.net>
To: gentoo-lisp@l.g.o
Subject: Re: [gentoo-lisp] common-lisp.eclass cleanup
Date: Thu, 18 Oct 2007 14:56:43
Message-Id: 20071018144607.GB1097429@universe.org
In Reply to: Re: [gentoo-lisp] common-lisp.eclass cleanup by "Marijn Schouten (hkBst)"
On Tue, Oct 16, 2007 at 01:04:28PM +0200, Marijn Schouten (hkBst) wrote:
>Stelian Ionescu wrote: >> On Mon, Oct 15, 2007 at 10:45:32AM +0200, Christian Faulhammer wrote: >> [snip] >>> Just a cosmetic...stay with one system. The local variables for Emacs >>> are unncessary, or do you have problems with app-emacs/gentoo-syntax? >> >> ok, here's the last version of the eclass; sorry for the delay > >Comments by me within <-- these are my comments --> > ># Copyright 1999-2007 Gentoo Foundation ># Distributed under the terms of the GNU General Public License v2 ># $Header: $ ># ># Author Matthew Kennedy <mkennedy@g.o> ># ># This eclass supports the installation of Common Lisp libraries > ><-- Where are the usage comments? Which are the public functions? --> > >inherit eutils > >CLSOURCEROOT="${ROOT}"/usr/share/common-lisp/source/ >CLSYSTEMROOT="${ROOT}"/usr/share/common-lisp/systems/ ><-- Before I really meant to ask about these two variables. I don't understand >what the point is as CLSOURCEROOT will contain symlinks to within >CLSYSTEMROOT. Can you explain this please. -->
it's the contrary: CLSOURCEROOT contains the source code, and CLSYSTEMROOT contains symlinks to within CLSOURCEROOT. the reason is that this is the way that ASDF works: it expects to find the .asd files in a list of predefined directories(in fact the variable is called asdf:*central-registry*), that's why we symlink .asd files into CLSYSTEMROOT and configure ASDF to look only there. there are workarounds for this, but they all imply either writing custom code which would be used only in gentoo, or maintaining some sort of site-gentoo.cl(much like for emacs) - but I'm strongly against either solutions since I think that doing what all other distros are doing is good policy because, for example, it allows users coming from other distros to be able to use their extant setup unchanged, not being forced to learn a new way to configure packaging
><-- Where is the comment about how to override these variables? --> >CLPACKAGE="${PN}" >CLSYSTEMS="${PN}"
ok, comments added
> >DEPEND="virtual/commonlisp" > >EXPORT_FUNCTIONS src_install > >path-absolute-p() { > if [ $# -ne 1 ]; then > die "path-absolute-p must receive exactly one argument" > fi > local path="${1}" > [ "${path:0:1}" == / ] >} > >} > >or even > >path-absolute-p() { > assert_arg_num 1 # is bash powerful enough to define and use such a > function?
AFAIK, no
> [ "${1:0:1}" == / ] > >and its name should be absolute-path-p.
done
>} > >or have it return true only if all its arguments start with '/'. >-->
done
>common-lisp-install() { > if [ $# -eq 0 ]; then > die "common-lisp-install must receive at least one argument" > fi > local _oldclpackage="${CLPACKAGE}" > [ "${1}" == "-p" ] && { CLPACKAGE="${2}" ; shift ; shift ; } > for thing in "$@"; do > if path-absolute-p "${thing}" ; then > common-lisp-install-relatively "${thing}" > else > common-lisp-install-relatively "${thing}" "$(dirname "${thing}")" > fi <-- indentation is screwed up here (and a lot of other places) >because of a combination of spaces and tabs. -->
fixed
>common-lisp-system-symlink() { > dodir "${CLSYSTEMROOT}" > # if no arguments received, default to > # the contents of ${CLSYSTEMS} > if [ $# -eq 0 ]; then > for package in ${CLSYSTEMS} ; do > common-lisp-install-single-system "${package}" > done > else > local _oldclpackage="${CLPACKAGE}" > [ "${1}" == "-p" ] && { CLPACKAGE="${2}" ; shift ; shift ; } ><-- what's the point of setting CLPACKAGE here? I'm not sure I like >influencing common-lisp-install-single-system in that way. --> > [ $# -eq 0 ] && die "common-lisp-system-symlink needs more arguments" > for package in "$@" ; do > common-lisp-install-single-system "${package}" > done > CLPACKAGE="${_oldclpackage}" > fi >}
setting CLPACKAGE that way is the equivalent of this: (defun common-lisp-system-symlink (system &key (package *clpackage*)) (let ((*clpackage* package)) ...)) I'm faking default arguments: when $1 is "-p" CLPACKAGE gets set temporarily to $2, then restored to its initial value. I've seen this idiom elsewhere in sh code anyway, I've removed this since it's unnecessary
>common-lisp-2_src_install() { > common-lisp-install *.{lisp,asd} > common-lisp-system-symlink > dodoc LICENCE* LICENSE* COPYING* COPYRIGHT README HEADER TODO \ > CHANGELOG ChangeLog BUGS CONTRIBUTORS *NEWS 2> /dev/null ><-- licenses should not be installed separately, /usr/portage/licenses/ >contains them already -->
done
>} > ># Many of our Common Lisp ebuilds are either inspired by, or actually ># use packages and files from the Debian project's archives. > ><-- please remove this stuff. It is misleading and non-functional. -->
done
># Local Variables: *** ># mode: shell-script *** ># tab-width: 4 *** ># End: *** ><-- were these not redundant? -->
I don't know if they were added for emacs or for vim. anyway, I've removed them -- Stelian Ionescu a.k.a. fe[nl]ix Quidquid latine dictum sit, altum videtur.

Attachments

File name MIME type
common-lisp-2.eclass text/plain

Replies

Subject Author
Re: [gentoo-lisp] common-lisp.eclass cleanup "Marijn Schouten (hkBst)" <hkBst@g.o>