I recently completed and released some work on Debian’s tooling for
packaging Emacs Lisp addons to GNU Emacs. Emacs grew a package
manager called package.el
a few years ago, and last year David
Bremner wrote the dh_elpa
tool to simplify packaging addons for
Debian by leveraging package.el
features. Packaging a series of
addons for Debian left me with a wishlist of features for dh_elpa and
I was recently able to implement them.
Debian tooling generally uses Perl, a language I didn’t know before starting on this project. I was fortunate enough to receive a free review copy of Perl 5 by Example when I attended a meeting of the Bay Area Linux Users Group while I was visiting San Francisco a few months ago. I accepted the book with the intent of doing this work.
dh_make_elpa
dh_make_elpa
(at present available from Debian experimental) is a
Perl script to convert a git repository cloned from the upstream of an
Emacs Lisp addon to a rudimentary Debian package. It performs a lot
of guesswork, and its simple heuristics are something I hope to
improve on. Since I am new to object-oriented program design in Perl
and I wanted to leverage object-oriented Debian tooling library code,
I took the structure of my project from dh_make_perl
. In this
manner I found it easy and pleasant to write a maintainable script.
dh_elpa_test
A lot of Emacs Lisp addon packages use a program called Cask to manage
the Emacs Lisp dependencies needed to run their test suites. That
meant that dh_auto_test
often fails to run Emacs Lisp addon package
test suites. Since the Debian packaging toolchain already has
advanced dependency management, it’s undesirable to involve Cask in
the package build pipeline if it can be avoided. I had been copying
and pasting the code needed to make the tests run in our environment
to the debian/rules
files of each package whose test suite I wanted
to run.
dh_elpa_test
tries to detect Emacs Lisp addon package test suites
and run them with the workarounds needed in our environment. This
avoids boilerplate in debian/rules
. dh_elpa_test
also disables
dh_auto_test
to avoid a inadvertent Cask invocation.
Future & acknowledgements
My hope for this work was to make it easier and faster to package
Emacs Lisp addon packages for Debian, for my own sake and for anyone
new who is interested in joining the
pkg-emacsen team. In the
future, I want to have dh_elpa_test
generate an autopkgtest
definition so that a Testsuite: pkg-emacsen
line in debian/control
is enough to have an Emacs Lisp addon package test suite run on
Debian CI.
I’m very grateful to David Bremner for reviewing and supporting this work, and also for supporting my Emacs Lisp addon packaging work more generally.