A short introduction to Drew Crampsie's Lisp-on-Lines

Kevin Griffin

CaveWallArts

Table of Contents

1. Installing:The easy route
2. Installing the hard way
Glossary

Chapter 1. Installing:The easy route

A few notes about formatting in this document:

REPL output, in the html, is rendered in a light green if you are using a CSS capable browser. I'm using the tag "returnvalue" in the docbook source - although I'm not convinced that's the right tag to represent top level output at the REPL. Suggestions are welcome.

Shell commands are light tan in the html version of this document, and are delimited by the "command" tag.

LISP to be entered is light grey in the html version, and are noted in the docbook version by "programlisting".

This document is released under the modified BSD license, the very same license that Lisp-on-Lines uses!

Before you even consider installing Lisp-on-Lines, you'll want to equip yourself with the following:

$ wget http://versions.tech.coop/t3cl-site-0.0.1.tar.bz2
asdf-install (for cl-ppcre and and possibly split sequence)
cvs (to get cl-zlib)
Darcs, to keep up with latest and greatest versions.
Some way of getting libpq (I'm testing on a Debian system, so an apt-get install libpq-dev took care of most of that.)

$ tar xjf t3cl-site-0.0.1.tar.bz2

somewhere convenient, maybe your home directory. This will create two directories, site, and site-systems.

[Note]Building the Universal Foreign Function Interface

Building cl-uffi requires the "make" command, so you may want to

apt-get install build-essential

. As well, zlib is required:

cd; cvs -d :pserver:anonymous@common-lisp.net/project/zlib/cvsroot login

. The password is "anonymous"

cvs -d :pserver:anonymous@common-lisp.net/project/zlib/cvsroot co zlib

Now, we'll have to let asdf know where to find this new wonderful library - so, in our site-systems directory:

ln -s ~/zlib/src/zlib.asd .

Eventually, Lisp-on-Lines will encompass every Lisp library known to the human race

Lisp-on-Lines, in the centre of the library universe.

Once you have all of the wonderful libraries unpacked from the tarball (It'll be fearsome list. You'll have to trust me that it's better getting it this way.)

acl-compatcl-ajax_0.2.0 closer-moplisp-on-lines
puri-1.3.1.2ucw yaclmlalan-araneida
cl-ppcre-1.2.11clsql-3.3.0lw-compatrfc2388
ucw_devaraneida_0.85cl-storeclsql-pg-introspect
meta-modelsexqlucw_dev.oldarnesi_dev
cl-store.oldcontextlnet-telent-date_0.41slime
uffi-1.5.4aservecliki_0.4.3iterate_1.4
parenscriptsplit-sequencexmls-1.2.

Mercifully, symlinks are already created in ~/site-systems. If you're using sbcl, you'll want to put

 
(require :asdf)
(pushnew "~/site-systems/" asdf:*central-registry*)

in your .sbclrc

Fire up sbcl.

(require :asdf-install)
(asdf-install:install :cl-ppcre)
(asdf-install:install :split-sequence)
(require :lisp-on-lines)

Chapter 2. Installing the hard way

Route actually taken

Where does ASDF look for definitions?

asdf:*central-registry* (#P"/home/vertov/systems/" *DEFAULT-PATHNAME-DEFAULTS*) I had set this earlier with a

(require :asdf)
(pushnew "/home/vertov/systems/" asdf:*central-registry*)

in my openmcl-init.lisp. Now, create a symlink in one of the directories that asdf will look in: i.e.

cd /home/vertov/systems

ln -s /home/vertov/lisp-on-lines/lisp-on-lines.asd .

Then fire up your lisp. try a

(require 'lisp-on-lines)

. You'll likely be dumped into the debugger. In this case, I realize that I needed the package Split-sequence. So I load up asdf-install 1 > :pop ? (require :asdf-install) > Error in process listener(1): Module ASDF-INSTALL was not provided by any function on *MODULE-PROVIDER-FUNCTIONS*. > While executing: REQUIRE > Type :POP to abort. Type :? for other options. 1 > So that's not happy. Where is asdf-install? I know it ships with openmcl. A quick look around in /usr/local/ccl/tools reveals the asdf-install directory. So I add another symlink in ~/systems.

A

(require :asdf-install)

and we are ready to go again. Now let's try

(require :meta-model)
> Error in process listener(1): Error component :CLSQL-PG-INTROSPECT not found, required by # <SYSTEM "meta-model" #x354ADD66>
> 
a	;;; ASDF-INSTALL: Downloading package CLSQL-POSTGRESQL, required by clsql-pg-introspect

> Error in process listener(1): Server responded 404 for GET http://www.cliki.net/CLSQL-POSTGRESQL?download

[Caution]Caution

~ $ cd systems/
~/systems $ ln -s /usr/share/common-lisp/source/clsql-postgresql/clsql-postgresql.asd .
~/systems $ ln -s /usr/share/common-lisp/source/clsql-uffi/clsql-uffi.asd .
~/systems $ ln -s /usr/share/common-lisp/source/cl-gd/cl-gd.asd .
~/systems $ ln -s /usr/share/common-lisp/source/clsql/clsql.asd .

Don't do this.This brings you the wrong version of clsql-postgresql

 
(require :asdf-install)
:ASDF-INSTALL
("ASDF-INSTALL")
CL-USER> (asdf-install-system:split-sequence)
CL-USER> (asdf-install:install 'clsql)
(asdf-install:install 'uffi)

Ah! but here's the rub- uffi- requires zlib. so

cvs -d :pserver:anonymous@common-lisp.net/project/zlib/cvsroot login

The password is "anonymous"

cvs -d :pserver:anonymous@common-lisp.net/project/zlib/cvsroot co zlib

In our "systems directory":

ln -s ~/zlib/src/zlib.asd .

UCW requires parenscript, and parenscript in turn requires htmlgen which , at the time of writing Wed Dec 21 21:12:09 2005, returns a 403 error- so is not asdf installable. For whatever reason, using a browser, you may get the package from http://constantly.at/lisp/htmlgen.tar.gz even wget works

~/systems $ ln -s ~/htmlgen/htmlgen.asd .

While you're at it you'll need acl-compat

~ $ wget http://constantly.at/lisp/acl-compat.tar.gz

untar, and make a symlink.

Unbelievable! acl-compat needs cl-ppcre! component :CL-PPCRE not found, required by # < SYSTEM "acl-compat" #x355BF73E> [Condition of type ASDF:MISSING-DEPENDENCY] Fortunately, the lisp gods are kind: cl-ppcre is asdf-installable:

(asdf-install:install 'cl-ppcre)

Now where were we?

let's try requiring htmlgen again. component :PURI not found, required by # "< SYSTEM "acl-compat" #x354E4EC6> [Condition of type ASDF:MISSING-DEPENDENCY] puri is also asdf-installable, so we're cool.

After that, htmlgen is installable and loadable. So now we're back to parenscript: and we need an updated version of parenscript which is used by ucw (uncommon-web)

darcs get http://common-lisp.net/project/ucw/repos/parenscript

~/systems $ ln -s ~/parenscript/parenscript-test.asd . ~/systems $ ln -s ~/parenscript/parenscript.asd .

But now we're going to neeed the latest RFC2388 libraries. Download the ASDF package from ftp://common-lisp.net:21/pub/project/rfc2388/rfc2388_latest.tar.gz

~ $ wget ftp://common-lisp.net:21/pub/project/rfc2388/rfc2388_latest.tar.gz

Untar.

Then,

~/systems $ ln -s ~/rfc2388/rfc2388.asd .

A

(require :rfc2388)

is all that is needed.

Now we need :iterate

Unfortunately, Server responded 403 for GET http://common-lisp.net/project/iterate/releases/iterate-current.tar.gz [Condition of type ASDF-INSTALL::DOWNLOAD-ERROR] but

wget http://common-lisp.net/project/iterate/releases/iterate-current.tar.gz

didn't work either. 403 forbidden. Bummer.

Iterate is available through an arch repository. I haven't spent enough time with arch to comment responsibly on it, so I'm going to cheat and do an apt-get install of cl-iterate.

We now need yaclml, and arnesi

darcs get http://common-lisp.net/project/bese/repos/yaclml/

For some reason, the darcs repository of arnesi is down right now.

darcs get http://common-lisp.net/project/bese/repos/arnesi/

So, I installed the version provided by ubuntu cl-arnesi after some group and permissions schnanigans, in ~/systems

ln -s /usr/share/common-lisp/source/arnesi/arnesi.asd .

But this is too out-of-date to be useful! So, we try darcs again:

darcs get http://common-lisp.net/project/bese/repos/arnesi_dev/

Much better this time. rm old symlink and install new one:

/systems$ ln -s ~/arnesi_dev/arnesi.asd . After doing a

(require :arnesi)

, the interpreter is understandably confused: you're telling it that the old symbols that arnesi brought with it are in conflict with the new meanings: so this throws you into the debugger, - just let the interpreter know that you'd like all those old symbols uninterred.

Now is the time that the swank binaries will be loaded. We have ucw! A

(require :lisp-on-lines)

- and we're good! Let's try it out. Drew has made an example application available: It is yet another reddit rewrite. Check out http://versions.tech.coop.

Glossary

asdf

Another System Definition Facility, by Dan Barlow.

CVS

Concurrent Version System, one of the mostly widely used revision control systems in the free software worls

darcs

Another revision control system, popular with, as Bill Clementson so eloquently stated, "the cool kids".