CL-BREWER ASDF System Details
Description: Homebrew formula builder for Common Lisp applications.
Licence: Public Domain
Author: Dmitry Petrov <firstname.lastname@example.org>
Maintainer: Alexander Artemenko <email@example.com>
Bug tracker: https://github.com/40ants/cl-brewer/issues
Source control: GIT
Currently there is now easy way to distribute common lisp applications. One promising way is to use roswell project however it might be to complicated for the users how just want to install an application and are not really interested in having one more package manager for that.
OS X world the most popular solution is to use brew package manager and all
we need is to be able to generate formula that will handle installation proccess.
Since homebrew guidelines are not really fond of using third-party managers to
get dependencies, we need to generate list manually and feed it to brew.
SBCL and targets command line applications written in Common Lisp.
GUI applications haven't been tested and might require additional changes.
This application is based on the awesome quicklisp-homebrew-roundup but has a purpose to make a process simplier by:
Allowing to generate file for any system available not just quicklisp package (dependencies should be on quicklisp though)
Allowing to generate a complete formula, not just dependencies
Having a cli interface that can be used in
CIservices to generate formulas automatically.
At the moment several assumptions were made:
Formula is generated for the system available for
All dependencies should be available via quicklisp.
System source code should live on github all releases should be tagged with vX.Y.Z scheme.
System should have description, version, homepage fields defined. Project at GitHub should have a tag corresponding to the current system version. GitHub build a tar.gz archive with sources of the tagged revision and this way a formula, created by cl-brewer, will be able to fetch sources, corresponding to the version.
mainfunction. By default
mainfunction is searched in the package with the same name as system name but can be overridden with option.
When using Deploy, you don't have to define an entry point. Also, Deploy is able to create formulas for applications which build some dynamic libraries.
Here is an example formula
brew tap 40ants/soft brew install cl-brewer
Or you can install it using Roswell:
# install roswell and sbcl before $ ros install 40ants/cl-brewer
If you want to install it to use from the
REPL, then you can install this library from Quicklisp,
but you want to receive updates quickly, then install it from Ultralisp.org:
(ql-dist:install-dist "http://dist.ultralisp.org/" :prompt nil) (ql:quickload :cl-brewer)
This will emit
<your-system-name>.rb file in current folder.
To run cl-brewer under Qlot, you'll need set
sb-sys::*sbcl-homedir-pathname* variable will be reinitialized
and this can cause some incompatibilities if Qlot and cl-brewer were built
Thus, in this case call cl-brewer like this:
qlot exec bash -c "SBCL_HOME='' cl-brewer <your-system-name>"
To kickstart a cl-brewer and to create a formula for itself, load it in the
REPL and do like that:
CL-USER> (cl-brewer:create-formula :cl-brewer) #<BUILDAPP-FORMULA "cl-brewer" depends on 23 systems> CL-USER> (cl-brewer:save-formula * "cl-brewer" :preload (list "quicklisp-starter")) Downloading "https://github.com/40ants/cl-brewer/archive/v0.5.5.tar.gz" (Unknown size) NIL
However, in most cases you can just install cl-brewer from the Homebrew. In this case,
you can update
cl-brewer's formula with this command:
qlot exec cl-brewer --preload quicklisp-starter cl-brewer
How to install cl-brewer (or any other project) from a local formula?
Replace url line in a formula:
with two lines like this:
url File.dirname(__FILE__), :using => :git version "0.5.6-rc1"
Next, do this in the shell:
HOMEBREW_NO_AUTO_UPDATE=1 brew install --debug --verbose ./*.rb
it should build and install
If you are interested in using this project but your application has different requirements, please open an issue or make a pull request. Contributions are welcome!
All code is public domain except parts that were taken from quicklisp-homebrew-roundup which is under
Some systems, like cl-unicode have implicit dependencies in their asdf methods: https://github.com/edicl/cl-unicode/blob/8073fc5634c9d4802888ac03abf11dfe383e16fa/cl-unicode.asd#L67-L70 use this method to provide information about such dependencies.
System name is a keyword and method should return a one keyword or a list of keywords with names of systems. Each returned system should be possible to find with ql-dist:find-system.
Saves Homebrew formula definition into the file with given
ENTRY-POINT argument was given, then it might be used as entry-point,
but some formula classes like
might ignore this argument.
PRELOAD argument if given, should be a list of strings with
ASDF system names to be preloaded before cl-brewer will build a binary.
Some formulas might add dependencies needed to build a binary. For example, Deploy formula adds cl-brewer because it uses it's cl-brewer/deploy/hooks subsystem.
Use this macro to define a function to guess a formula class.
The function should accept a one argument - an
ASDF system and
return a symbol denoting a class derived from
If guesser does not know how to create a formula for the system,
then it should return a