public inbox for gentoo-lisp@lists.gentoo.org
 help / color / mirror / Atom feed
From: Stelian Ionescu <sionescu@common-lisp.net>
To: gentoo-lisp@lists.gentoo.org
Subject: Re: [gentoo-lisp] common-lisp.eclass cleanup
Date: Thu, 18 Oct 2007 16:46:07 +0200	[thread overview]
Message-ID: <20071018144607.GB1097429@universe.org> (raw)
In-Reply-To: <47149ABC.1000408@gentoo.org>


[-- Attachment #1.1: Type: text/plain, Size: 5252 bytes --]

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@gentoo.org>
>#
># 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.

[-- Attachment #1.2: common-lisp-2.eclass --]
[-- Type: text/plain, Size: 3878 bytes --]

# Copyright 1999-2007 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $
#
# Author Matthew Kennedy <mkennedy@gentoo.org>
#
# This eclass supports the installation of Common Lisp libraries
#
# Public functions:
#
# common-lisp-install path [<other_paths>...]
#   Used to install files or directories(recursively) into
#   $CLSOURCEROOT/$CLPACKAGE. If a path is absolute, it gets installed directly
#   under $CLSOURCEROOT/$CLPACKAGE; if a path is relative, it gets copied by
#   concatenating its path to $CLSOURCEROOT/$CLPACKAGE. If one of the paths does
#   not exist, common-lisp-install dies specifying the erroneous path
#   Example:
#      common-lisp-install foo/bar/baz.lisp
#   installs baz.lisp into the directory $CLSOURCEROOT/$CLPACKAGE/foo/bar/
#
# common-lisp-system-symlink [<paths>...]
#   I receives a list of ASDF systems(as relative paths into
#   $CLSOURCEROOT/$CLPACKAGE/) which will be symlinked into $CLSYSTEMROOT.
#   The list members *must not* end in ".asd" as that extension is supplied
#   by common-lisp-system-symlink.
#   If called with no arguments, the contents of $CLSYSTEMS will be used
#   as default. The specified files must alrady have been installed at the
#   time of the call, otherwise common-lisp-system-symlink dies
#   specifying the .asd file which could not be found.
#   Example:
#     CLSYSTEMS="src/foo" will symlink $CLSOURCEROOT/$CLPACKAGE/src/foo.asd
#   to $CLSYSTEMROOT/foo.asd


inherit eutils

CLSOURCEROOT="${ROOT}"/usr/share/common-lisp/source/
CLSYSTEMROOT="${ROOT}"/usr/share/common-lisp/systems/

# The subdirectory of ${CLSOURCEROOT} where sources will be installed.
# If you need to override, set it in the ebuild after calling "inherit"
CLPACKAGE="${PN}"

# A list of ASDF systems(as relative paths into $CLSOURCEROOT/$CLPACKAGE/)
# installed by the package which will be symlinked into $CLSYSTEMROOT.
# Example:
# CLSYSTEMS="src/foo" will symlink $CLSOURCEROOT/$CLPACKAGE/src/foo.asd
# to $CLSYSTEMROOT/foo.asd
# If you need to override, set it in the ebuild after calling "inherit"
CLSYSTEMS="${PN}"

DEPEND="virtual/commonlisp"

EXPORT_FUNCTIONS src_install

absolute-path-p() {
	[ $# -eq 0 ] && die "absolute-path-p must receive at least one argument"
	local absolute=TRUE
	for path in "$@" ; do
		[ "${path:0:1}" == / ] || absolute=FALSE
	done
	[ ${absolute} == TRUE ]
}

common-lisp-install-relatively() {
	if [ $# -lt 1 ] || [ $# -gt 2 ] ; then
		die "common-lisp-install-relatively must receive one or two arguments"
	fi
	local thing="${1}" ; local dir="${2}"
	insinto "${CLSOURCEROOT}/${CLPACKAGE}/${dir}"
	doins -r "${thing}" || die "Cannot install ${dir}/${thing}"
}

common-lisp-install() {
	[ $# -eq 0 ] && die "common-lisp-install must receive at least one argument"
	for thing in "$@"; do
		if absolute-path-p "${thing}" ; then
			common-lisp-install-relatively "${thing}"
		else
			common-lisp-install-relatively "${thing}" "$(dirname "${thing}")"
		fi
	done
}

common-lisp-install-single-system() {
	[ $# -ne 1 ] && die "common-lisp-install-single-system must receive exactly one argument"
	if [ ! -f "${D}/${CLSOURCEROOT}/${CLPACKAGE}/${1}.asd" ]; then
		die "${D}/${CLSOURCEROOT}/${CLPACKAGE}/${1}.asd does not exist"
	fi
	dosym "${CLSOURCEROOT}/${CLPACKAGE}/${1}.asd" \
		"${CLSYSTEMROOT}/$(basename ${1}).asd"
}

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
		for package in "$@" ; do
			common-lisp-install-single-system "${package}"
		done
	fi
}

common-lisp-2_src_install() {
	common-lisp-install *.{lisp,asd}
	common-lisp-system-symlink
	dodoc COPYRIGHT README HEADER TODO CHANGELOG ChangeLog \
		BUGS CONTRIBUTORS *NEWS 2> /dev/null
}

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

  parent reply	other threads:[~2007-10-18 14:56 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-10-12 21:30 [gentoo-lisp] common-lisp.eclass cleanup Stelian Ionescu
2007-10-13 10:05 ` Marijn Schouten (hkBst)
2007-10-13 11:30   ` Stelian Ionescu
2007-10-15 10:04     ` Marijn Schouten (hkBst)
2007-10-15 13:39       ` Stelian Ionescu
2007-10-13 10:07 ` Marijn Schouten (hkBst)
2007-10-13 10:48   ` Stelian Ionescu
2007-10-15  8:45 ` Christian Faulhammer
2007-10-15 13:14   ` Stelian Ionescu
2007-10-15 22:28   ` Stelian Ionescu
2007-10-16 11:04     ` Marijn Schouten (hkBst)
2007-10-16 11:27       ` Christian Faulhammer
2007-10-18 14:46       ` Stelian Ionescu [this message]
2007-10-18 17:15         ` Marijn Schouten (hkBst)

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20071018144607.GB1097429@universe.org \
    --to=sionescu@common-lisp.net \
    --cc=gentoo-lisp@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox