Didier Verna's scientific blog: Lisp, Emacs, LaTeX and random stuff.

## Tag - release

Monday, November 28 2011

## CL-RCFiles 2.0

This very small Common Lisp library provides a way to add initialization files to ASDF systems. Every time ASDF loads <system>, one or several corresponding <system>.lisp files are loaded automatically afterwards. This lets you conditionally plug in additional behavior on a per-system basis without cluttering up any global Common Lisp init file.

For backward-compatibility, files found directly in the rc/ directory are considered to be post-loading initialization files.

You can modify the rc-files location by changing the values of the global variables *directory*, *pre-directory*, and *post-directory*.

Get it here.

Wednesday, June 29 2011

## Declt 1.0b12 is out

I've just released the next version of Declt, my reference manual generator for ASDF systems.

This release includes some fixes for the Info format target but most notably, support for documenting (generic) writer functions and methods. When it makes sense, the documentations for func and (setf func) are grouped together. Getting closer to an official 1.0 stable version...

Grab it here, and enjoy!

Tuesday, May 31 2011

## Declt 1.0b11 is out

I've just released a new version of Declt, my Texinfo reference manual generator for ASDF systems. This release contains only one bugfix: when trying to create links to source files, Declt now checks whether the files actually exist or not.

Tracking this bug down had the side-effect of exhibiting a misfeature of SBCL's introspection facility: the COPY-<struct> functions (automatically generated by defstruct calls) have their definition source set to target-defstruct.lisp which is an SBCL source file. It would make more sense to set it to the file containing the defstruct call instead, as is already the case for constructors, predicates and accessor functions. Patch sent to the SBCL developers.

Wednesday, April 27 2011

## XEmacs 21.5.30 "garlic" is released

At long last, there is a new release of XEmacs 21.5. A lot of stuff has happened in this release, but the most important thing is that this is the last GPLv2 version of XEmacs. Future versions (including the current trunk) will be licensed GPLv3 or later. In fact, the first GPLv3 release, 21.5.31, is expected to follow this one by a couple of days. Thanks mostly to Aidan Kehoe, I'm also quite happy that XEmacs Lisp is more Common Lisp'y than ever.

Wednesday, February 23 2011

## Declt 1.0b9 is out

The next edition of Declt, the Documentation Extractor from Common Lisp to Texinfo, is out. In this release:

• Bugfix: rendering the documentation for methods with EQL specializers didn't work.
• Feature: licensing and copyrighting the reference manual is now optional. Licenses currently supported are BSD and GPL.
• Declt now generates its own reference manual by default.
• Some package infrastructure changes that should remain transparent.

Grab it here

Happy documenting!

Wednesday, February 9 2011

## Clon 1.0b19 is out

Clon version 1.0b19 has just been released. This version comes with a couple of fixes related to error handling and a switch from the GPL to the BSD license. Grab it here.

Tuesday, January 25 2011

## Optional ASDF system dependencies (Clon v1.0b18)

Clon v1.0b18 is now out. Compared to the previous version, the only small bit of change is the fact that the CLISP implementation now depends only optionally on cffi, whereas that dependency was mandatory before. Doing this is actually quite simple but raised the question of optional ASDF system dependencies, a topic on which there's quite a bit to be said.

A bit of context first. Clon has a terminal autodetection feature which allows it to automatically highlight its output on a tty (see --clon-highlight=auto) and also compute the output line width in case the COLUNMS environment variable is not set. This feature requires an ioctl call which is beyond Lisp. Since one of my goals is to have as few dependencies as possible (zero being the ideal number), I looked at compiler-specific solutions to this problem. The result is that SBCL, CMU-CL, CCL and ECL provide solutions almost out-of-the-box: SBCL has a grovel contributed module, CMU-CL and CCL already have system bindings and ECL has its own ffi interface. The ABCL port doesn't support terminal autodetection yet, but that's another (Java) story. The only black sheep in the picture is CLISP which, as far as I can tell, neither has a native binding for ioctl, nore any built-in grovel facility, hence the need for cffi.

Previously, my system definition file was like that:

#+clisp (asdf:operate 'asdf:load-op :cffi-grovel)

(asdf:defsystem :com.dvlsoft.clon
#| ... |#
:depends-on (#+clisp :cffi)
:components ((:file "package")
#+clisp
(:module "clisp"
:depends-on ("package")
:components ((cffi-grovel:grovel-file "constants")))
(module "src"
:depends-on ("package" #+clisp "clisp")
:components #| ... |#)))

And then later, I had a file with the concerned utility function:

(defun stream-line-width (stream)
#+clisp (#| CLISP implementation |#)
#| etc. |#)

After that, I started looking at ways to make the dependency on cffi optional. After all, it makes sense to avoid that dependency at the cost of not being able to autodetect terminals.

One thing I fell on almost by accident is ASDF's :weakly-depends-on keyword. Here is an interesting thread about it. It was an accident because that feature is not documented :-( People, however, have very mitigated feelings about it, as shown in this other thread (syntax and semantics both appear somewhat shaky and underspecified). Besides, the aparent behavior is that if A weakly depends on B and B is not present, then A is operated anyway. So I could probably have my "src" module weakly depend on the "clisp" one, but that doesn't change the fact the "clisp" module should not be included at all if cffi is not there.

In the same thread, somebody proposes another kind of dependency called :contigent-on which looks closer to what I would need for the "clisp" module: a module the contingency of which is not present will not be processed. This new kind of dependency doesn't seem to be implemented yet, however.

So, all of this seems a bit frightening. Too borderline for my taste. Fortunately, my solution is much simpler, although probably not universal.

This first thing to do is only attempt to load cffi-grovel:

(eval-when (:load-toplevel :execute)
(asdf:missing-component ()
(format *error-output* "~
*********************************************************************
* Clon will be loaded without support for terminal autodetection.
*********************************************************************"))))

After that, if loading it were successful, we end up with cffi as a feature, so we can just conditionalize on that:

(asdf:defsystem :com.dvlsoft.clon
#| ... |#
:depends-on (#+(and clisp cffi) :cffi)
:components ((:file "package")
#+(and clisp cffi)
(:module "clisp"
:depends-on ("package")
:serial t
:components ((cffi-grovel:grovel-file "constants")))
(module "src"
:depends-on ("package" #+(and clisp cffi) "clisp")
:components #| ... |#)))

One last problem remains however: what to do in the source code, for the feature-dependent parts. Conditionalizing an ASDF system may indeed lead to trouble: for instance, what would happen if the function stream-line-width was compiled with cffi around, and later used in a context where it is not? To be on the safe side, what you really need is to dynamically check for the feature. One possible solution is this:

1. move all feature-dependent code to the "clisp" module and make that a protocol,
2. everytime you need to access the feature, dynamically check whether the protocol functions are fbound.

In my specific case, what I did was to implement a CLISP-specific version of stream-line-width, called clisp/stream-line-width and put it in a new file in the "clisp" module, now defined as follows:

#+(and clisp cffi)
(:module "clisp"
:depends-on ("package")
:serial t
:components ((cffi-grovel:grovel-file "constants")
(:file "util")))

Then, the original function is rewritten like this:

(defun stream-line-width (stream)
#+clisp (when (fboundp 'clisp/stream-line-width) (clisp/stream-line-width stream))
#| etc. |#)

So now I think I'm on the safe side, and Clon has zero mandatory dependency again...

Monday, January 24 2011

## Clon 1.0b17 is out

I'm happy to announce the release of Clon version 1.0b17. This version notably introduces support for ABCL and expands the documentation in the portability section. Grab it here.

Thursday, December 16 2010

## DoX 2.2 is released

Hello, I'm happy to announce the release of DoX v2.2. DoX is a set of extensions to the Doc package, for LaTeX2e class and style authors.

New in this release: the ability to create new control-sequence based documentation items (for instance LaTeX lengths).

Tuesday, December 14 2010

## CurVe 1.16 is out

Hello,

I'm happy to announce the release of CurVe 1.16. CurVe is a CV class for LaTeX2e.

New in this release:

- An examples directory
- New \text macro to insert plain text in the middle of rubrics,
- Support for openbib option which was implicit before
- Fix incompatibilities with the splitbib package
- Handle the bibentry/hyperref incompatibility directly
- Implement old font commands letting packages using them (e.g. fancyhdr) work correctly

Friday, December 3 2010

## FiNK 2.2 is out

Hello,

I'm happy to announce the release of FiNK 2.2. FiNK is the LaTeX2e File Name Keeper. New in this release: FiNK is now compatible with the memoir class.

Grab it here

Tuesday, November 30 2010

## Clon v1.0b16 now supports CLISP

Hello,

I'm happy to annouce the release of Clon version 1.0 beta 16.
Most notable news for this release is the support for CLISP, which comes at the expense on one dependency (over cffi).

Grab it here.

Thursday, November 18 2010

## Clon v1.0b15 now supports ECL

Hello,

I'm happy to annouce the release of Clon version 1.0 beta 15.
Most notable news for this release is the support for ECL.

Grab it here

Thursday, November 11 2010

## Clon v1.0b12 now supports CCL

Hello,

I'm happy to annouce the release of Clon version 1.0 beta 12.
Most notable news for this release is the support for CCL.

Grab it here.

Tuesday, November 9 2010

## Clon 1.0b11 now supports CMU-CL

Hello,

I'm happy to annouce the release of Clon version 1.0 beta 11.
Most notable news for this release is the support for CMU-CL.

Grab it here.

Tuesday, September 21 2010

## Declt version 1.0b1 - first public release

Hello,

I'm happy to announce the first public release of Declt.

Declt (pronounce dec'let) is a reference manual generator for Common Lisp. It extracts and formats documentation from ASDF systems, including the system itself and its components, the packages defined in the system and definitions like constants, special variables, macros, functions, generic functions and methods, conditions, structures and classes.

Reference manuals are generated in Texinfo format which can be subsequently converted into info, HTML, DVI, PostScript or PDF. The generated manuals are fully indexed and provide a complete set of cross-references between documentation elements. For instance, files and packages point to the definitions they provide, and those definitions point back to package and file in which they can be found.

Get it at:
http://www.lrde.epita.fr/~didier/softwa ... .php#declt

Declt requires SBCL to work (if you're interested in porting it, grep
PORTME in the sources). Also, ASDF 2 has not been tested yet.

Tuesday, August 31 2010

## Clon: the Command-Line Options Nuker library for Common Lisp

I'm happy to announce the first public release of Clon, the Command-Line Options Nuker library for Common Lisp.

Clon currently requires SBCL to work. If you want to help porting it to other implementations, 'grep PORTME **/*' in the sources.

Get it here.

Clon is a library for managing command-line options in standalone Common Lisp applications. It provides a unified option syntax with both short and long names, automatic completion of partial names and automatic retrieval/conversion of option arguments from the command-line, associated environment variables, fallback or default values. Clon comes with a set of extensible option types (switches, paths, strings etc.). Clon also provides automatic generation and formatting of help strings, with support for highlighting on tty's through ISO/IEC 6429 SGR. This formatting is customizable through "themes".

Monday, February 15 2010

## RT for Emacs Lisp, version 1.0

I'm happy to announce the first public version of RT for Emacs Lisp, a port of the original Common Lisp regression testing package.

Grab it here.

Monday, September 21 2009

## FiXme 4.0 is out !

I'm happy to announce FiXme version 4.0

#### WARNING: this is a major release containing many new features and heavy
#### internals refactoring. FiXme 4.0 comes with unprecedented flexibiity,
#### unrivalled extensibility and unchallenged backward-INcompatibility.

What's new in version 4.0
=========================
* Support for collaborative annotations
suggested by Michael Kubovy
** Support for "targeted" notes and environments
(highlighting a portion of text), suggested by Mark Edgington.
** Support for "floating" notes
(not specific to any portion of text), suggested by Rasmus Villemoes.
** Support for alternate layout autoswitch in TeX's inner mode
suggested by Will Robertson.
** Support for automatic language tracking in multilingual documents
** Support for themes
** Extended support for user-provided layouts
** Support for key=value argument syntax in the whole user interface
** New command \fxsetup
** Homogenize log and console messages
** Heavy internals refactoring

Description
===========
FiXme is a collaborative annotation tool for LaTeX documents. Annotating a
document refers here to inserting meta-notes, that is, notes that do not
belong to the document itself, but rather to its development or reviewing
process. Such notes may involve things of different importance levels, ranging
from simple "fix the spelling" flags to critical "this paragraph is a lie"
mentions. Annotations like this should be visible during the development or
reviewing phase, but should normally disapear in the final version of the
document.

FiXme is designed to ease and automate the process of managing collaborative
annotations, by offering a set of predefined note levels and layouts, the
possibility to register multiple note authors, to reference annotations by
listing and indexing etc. FiXme is extensible, giving you the possibility to
create new layouts or even complete "themes", and also comes with support for
AUC-TeX.

FiXme homepage: http://www.lrde.epita.fr/~didier/softwa ... .php#fixme

## DoX v2.0 (2009/09/21) is out

I'm happy to announce the release of DoX v2.0 (2009/09/21).

New in this version:
* Optional argument to \doxitem idxtype option to change the item's index type

* Optional argument to \Describe<Item> and the <Item> environment
noprint option to avoid marginal printing
noindex option to avoid item indexing

* Extend \DescribeMacro, \DescribeEnv and their corresponding environments with the same features

The doc package provides LaTeX developers with means to describe the usage and the definition of new commands and environments. However, there is no simple way to extend this functionality to other items (options or counters for instance). DoX is designed to circumvent this limitation, and provides some improvements over the existing functionality as well.

- page 2 of 3 -

Copyright (C) 2008 -- 2013 Didier Verna didier@lrde.epita.fr