Codebase list cl-who / HEAD
HEAD

Tree @HEAD (Download .tar.gz)

# Quicklisp to debian

This projects updates Common Lisp libraries debian packages from the current
release found at Quicklisp, if an update is needed.

## Quicklisp

ql-to-deb works with a directory of debian packaging as input, and then
fetches informations from the quicklisp web site.

The quicklisp URLs used are:

  - http://beta.quicklisp.org/dist/quicklisp.txt
  - http://beta.quicklisp.org/dist/quicklisp/2014-04-25/releases.txt
  
The first URL contains as its `release-index-url` the second URL, which
contains the list of currently most recent available releases in Quicklisp.

## Debian

It's only possible to `ql-to-deb` on packages you've prepared before hand.
Add the packaging in the `debian/` subdirectory of the project. A typical
workflow would be:

    $ ql-to-deb status [ package ]
    $ ql-to-deb build [ package ]
    $ ql-to-deb lint
    $ ql-to-deb sign
    $ ql-to-deb upload

The `build` command stores the name of the debian *changes* files in
`~/.ql-to-deb.changes` and will reuse that information in the other steps,
so that it's possible to use the `lint`, `sign` and `upload` commands
without any arguments meaning *work on what I just built please*.

The application will parse the `debian/control` file to figure out the name
of the debian source package, it is adviced to name the packaging directory
the same as the source file for easier maintenance.

### Origin tarball

The tarball given by Quicklisp is considered to be the `.orig.tar.gz` file
for debian packaging purposes. `ql-to-deb` just symlinks it in the format
expected by debian, and at the right place.

### Version numbers

Basically Quicklisp wins. When quicklisp release has a version number that
is both not the same as the current debian one, nor `gt` to it (in terms of
`dpkg --compare-versions`), then an *epoch* is added to the debian version
number.

For example, the `cffi` package debian version currently is *20100219* where
in Quicklisp the release version string is *0.12.0*. In that case
`ql-to-deb` will prepare a new version of the package with the debian
version string `1:0.12.0-1`.

## INSTALL

Currently lacking a debian package, because of a classic chicken and eggs
problem: `ql-to-deb` itself has some dependencies that are not to be found
in debian yet (drakma, md5 and command-line-arguments).

    $ sudo apt-get install sbcl cl-ppcre cl-split-sequence cl-alexandria
    $ sudo apt-get build-dep cl-asdf
    $ sudo apt-get build-dep buildapp
    $ dpkg -i cl-asdf...

Note that we need `cl-asdf` version 3.0.3 or more recent, and `buildapp`
version 1.5 or more recent, both as found in *sid* and an `apt-get
build-dep` command away to being backported into *squeeze*.

Now that you have the build requirements sorted:

    $ make

## Usage

And then:

    $ ./build/bin/ql-to-deb --version
    ql-to-deb version "0.7.0"
    compiled with SBCL 1.2.3.debian

    $ ./build/bin/ql-to-deb --help
    ./build/bin/ql-to-deb [ option ... ] command [ package ...]
    
    Options:
      --help -h                       boolean  Show usage and exit. 
      --version -V                    boolean  Displays version and exit. 
      --verbose -v                    boolean  Be verbose. 
      --fix-bugs -F                   boolean  Fix packaging bugs. 
      --config -c                     string   configuration file.  (default: #P"/vagrant/ql-to-deb.ini")
      --dir -D                        string   where to build packages.  (default: "/tmp/ql-to-deb/")
      --logs -L                       string   where to write detailed logs.  (default: "/tmp/ql-to-deb/logs/")
      --quicklisp -Q                  string   URL to use to fetch quicklisp.txt main file  (default: "http://beta.quicklisp.org/dist/quicklisp.txt")
    
    Commands:
      status    Compare versions (debian sid, local, Quicklisp)
      check     List packages that need building
      update    Build either packages or all that need a build
      build     Build either packages or all that need a build
      lint      Run lintian on just built packages
      install   Run dpkg -i on just built packages
      sign      Run debsign on just built packages
      upload    Run dput on just built packages