Subject: Re: A Humble Request: ASDF-INSTALL and version numbers
From: rpw3@rpw3.org (Rob Warnock)
Date: Thu, 16 Feb 2006 05:39:53 -0600
Newsgroups: comp.lang.lisp
Message-ID: <mI-dnb0iWL8U-WneRVn-uQ@speakeasy.net>
RPG <rpgoldman@gmail.com> wrote:
+---------------
| Would something like the following meet your needs (this is just a
| first sketch of a solution)?
| 
| 1.  When issuing a version, one bumps the :version argument in the asd
| defsystem;
| 2.  We add an :asdf-install-url argument to the asd defsystem
| 3.  One signs the asd file.
| 4.  One uploads the tarball, asd file, and signatures wherever one
| wishes, with whatever name one wishes.
| 5.  One puts a link to the asd file to Cliki (possibly a link to the
| tarball, too, for backward compatibility -- see below).  Note that this
| step, as with current "-latest" practice, only needs to be performed
| once, yet still permit automatic detection of upgrades.  I.e., only
| steps 1, 3 and 4 need be carried out to issue a patched version.
| 
| Now asdf-install would pull the asd file from a well-known location,
| examine it, and pull the corresponding tarball.
+---------------

Hmmm... This is starting to sound very much like the way the FreeBSD
"ports" system works:

    http://www.freebsd.org/ports/index.html
    http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/ports.html

except that "ports" uses a stylized "Makefile" and other auxiliary
files ("distinfo", "pkg-descr", & "pkg-plist", at a minimum) instead
of ASDF-Install. The ports system includes specifying canonical and
alternative archives for a port, as well as required prerequisites
and their versions.

The way it's usually used is to install the entire collection
of "ports", which is just the information files [for all 11000+
ports, currently ~70 MB!!], and then when you want to install
a specific port, you "cd" to the corresponding directory (e.g.,
"/usr/ports/lang/cmucl" for CMUCL) and say "make intall". But
you can also take a more a la carte approach.

The following lists the FreeBSD ports matching "lisp":

    http://www.freebsd.org/cgi/ports.cgi?query=lisp&stype=all

Here are some snippets from the Makefile for the CMUCL port (loads "19b")
which show how the version/archive-site/maintainer/etc. is handled:

    http://www.freebsd.org/cgi/cvsweb.cgi/~checkout~/ports/lang/cmucl/Makefile?rev=1.25
    ...[snip]...
    PORTNAME=	  cmucl
    PORTVERSION=  19b
    CATEGORIES=	  lang lisp
    MASTER_SITES= ftp://ftp.common-lisp.net/pub/project/cmucl/release/${PORTVERSION}/ \
		    http://www.pmsf.de/pub/cmucl/release/${PORTVERSION}/ \
		    ftp://ftp.averillpark.net/cmucl/release/${PORTVERSION}/ \
		    ftp://ftp.linux.org.uk/pub/lisp/cmucl/release/${PORTVERSION}/ \
		    ftp://ftp.tepus.com/pub/project/cmucl/release/${PORTVERSION}/
    DISTNAME=	  ${PORTNAME}-${PORTVERSION}-x86-FreeBSD

    MAINTAINER=	  cracauer@cons.org
    COMMENT=	  The CMU implementation of Common Lisp

    ONLY_FOR_ARCHS= i386
    USE_BZIP2=	  YES
    NO_WRKSUBDIR= yes
    NO_BUILD=	  yes
    MAN1=	  lisp.1 cmucl.1
    ...[snip]...

whereas the "distinfo" file contains the actual filename for the
distribution, length, and checksums (MD5 & SHA-256):

    MD5 (cmucl-19b-x86-FreeBSD.tar.bz2) = 9536c4f52b59041e90ed676dcab85cdf
    SIZE (cmucl-19b-x86-FreeBSD.tar.bz2) = 7283215
    SHA256 (cmucl-19b-x86-FreeBSD.tar.bz2) = 2683234da65a1a295429eacc88af011baf621333a556b8413063117de7a4e41d

I'm not suggesting trying to copy "ports" exactly, but it *does*
represent a system which has been shown capable of scaling to over
10.000 packages, and seems to address many of the concerns I have
heard in this thread. At the very least, it would be good to use
it as a checklist of features needed in a Common Lisp Repository.


-Rob

-----
Rob Warnock			<rpw3@rpw3.org>
627 26th Avenue			<URL:http://rpw3.org/>
San Mateo, CA 94403		(650)572-2607