Overview
Getting Hunchentoot to work with ABCL for abcl-1.1.0-dev trunk needs a patch to set socket timeouts. Using Hunchentoot with SSL will require a patch to CFFI.
Installation
- Install Quicklisp if it isn't already installed
CL-USER> (load "http://beta.quicklisp.org/quicklisp.lisp")
Then add to "~/.abclrc":
#-quicklisp (let ((ql #P"~/quicklisp/setup.lisp")) (when (probe-file ql) (load ql)))
Restart ABCL.
- Simply use Quicklisp to install Hunchentoot
CL-USER> (ql:quickload :hunchentoot)
-
Patch Hunchentoot for socket timeouts, and CFFI for access to CL+SSL.
Issues
Hunchentoot uses CFFI to access the OpenSSL libraries, for which two issues might arise:
- If you encounter problems loading the jna.jar artifact for CFFI please patch your ~/.abclrc. We're working on figuring out why the default code doesn't work in all instances, but Maven Aether is proving to be quite the counter-intutive beast lacking valid documentation.
- When loading Hunchentoot from the compiled fasls (i.e. the second time you run Hunchentoot on a given machine), you will be presented with restarts asking whether you wish to try recompiling classes in the org.armedbear.lisp.dynamic package which provide the callback interfaces. Simply choosing the interactive restart (twice, once for each needed callback), will enable CL+SSL to load.
Patches
The following patches currently need to be applied to the Quicklisp installed software.Quicklisp system | Patch | |
---|---|---|
Hunchentoot for socket timeouts | hunchentoot-1.2.6 | hunchentoot-1.2.6-abcl-20121020a.patch |
CFFI for access to CL+SSL | cffi_0.10.7.1 | cffi-abcl-20121021a.patch |
To apply a given patch, one has to navigate to the directory in which Quicklisp stores the Lisp for the system which will have the parent directory ~/quicklisp/dists/quicklisp/software/. From the directory of the appropiate software (here hunchentoot-1.2.6 and cffi_0.10.7.1) apply the patch via
cmd$ patch -p1 < LOCATION-OF-PATCH
where location-of-patch is replaced with a path which resolves to the location of the patch where you have downloaded it to the local filesystem.
If you are connected to a SLIME session, one can use the Emacs interactive function M-x slime-browse-system to visit the appropiate system in dired mode where it is easy to copy-and-paste the rather long directory names.