intend to be a lisp installer and launcher for major environment that just work.
Common Lisp C HTML Groff Shell M4 Other

README.md

Roswell - Common Lisp environment setup Utility.

Build Status Circle CI Build status Quicklisp

Roswell is a Lisp implementation installer/manager, launcher, and much more!

Roswell started out as a command-line tool with the aim to make installing and managing Common Lisp implementations really simple and easy.

Roswell has now evolved into a full-stack environment for Common Lisp development, and has many features that makes it easy to test, share, and distribute your Lisp applications. With Roswell, we aim to push the Common Lisp community to a whole new level of productivity.

Roswell is still in beta. Despite this, the basic interfaces are stable and not likely to change. Roswell currently works well on Unix-like platforms such as Linux, Mac OS X and FreeBSD. Roswell also works on other operating systems, but currently some parts or features might be missing or unstable.

Checkout issues list if you are interested in what's lacking.

Installation, Dependency & Usage

See our github wiki. We provide prebuilt binaries for homebrew on OSX, AUR on Arch and also on Windows.

Features

Feature comparison is available!

  • Implementation Manager (similar to CIM)
  • Scripting environment (similar to cl-launch)
  • Building utility (similar to buildapp)
  • Novel : Easier setup for initializing a script
  • Novel : Better integration to the command-line interface (Bash completion, etc)
  • Novel : Infrastructure for bundling/installing the scripts to/from a quicklisp system
  • Novel : Better support for Windows environment (tested exhaustively)
  • Novel : Better integration to CI environment (e.g. Travis-CI, CircleCI, Coveralls)

Usage

Roswell has git-like subcommands which resemble that of cl-launch, buildapp and CIM.

$ ros
Usage: /usr/local/bin/ros [OPTIONS] [Command arguments...]
Usage: /usr/local/bin/ros [OPTIONS] [[--] script-path arguments...]

Commands:
   run       Run repl
   install   Install a given implementation or a system for roswell environment
   build     Make executable from script.
   use       change default implementation
   init      Creates a new ros script, optionally based on a template.
   list      List Information
   asdf      manage asdf version
   config    Get and set options
   delete    Delete installed implementations
   dump      Dump image for faster startup or Make Executable
   emacs     Launch emacs
   fmt       [WIP] indent lisp source
   help      Show Command help
   setup     Initial setup
   template  [WIP] Manage templates
   version   Show the roswell version information
   wait      Wait forever

Options:
                --version            Print version information and quit
   -w  CODE     --wrap CODE          Run roswell with a shell wrapper CODE,
   -m  IMAGE    --image IMAGE        continue from Lisp image IMAGE
   -M  NAME     --module NAME        Execute ros script found in 'ROSWELLPATH'.(python's -m)
   -L  NAME     --lisp NAME          Run roswell with a lisp impl NAME[/VERSION].
   -l  FILE     --load FILE          load lisp FILE while building
   -S  X        --source-registry X  override source registry of asdf systems
   -s  SYSTEM   --system SYSTEM      load asdf SYSTEM while building
                --load-system SYSTEM same as above (buildapp compatibility)
   -p  PACKAGE  --package PACKAGE    change current package to PACKAGE
   -sp SP       --system-package SP  combination of -s SP and -p SP
   -e  FORM     --eval FORM          evaluate FORM while building
                --require MODULE     require MODULE while building
   -q           --quit               quit lisp here
   -r  FUNC     --restart FUNC       restart from build by calling (FUNC)
   -E  FUNC     --entry FUNC         restart from build by calling (FUNC argv)
   -i  FORM     --init FORM          evaluate FORM after restart
   -ip FORM     --print FORM         evaluate and princ FORM after restart
   -iw FORM     --write FORM         evaluate and write FORM after restart
   -F  FORM     --final FORM         evaluate FORM before dumping IMAGE
   -R           --rc                 try read /etc/rosrc, ~/.roswell/init.lisp
   +R           --no-rc              skip /etc/rosrc, ~/.roswell/init.lisp
   -A           --asdf               use asdf downloaded
   +A           --no-asdf            do not use asdf downloaded (default)
   -Q           --quicklisp          use quicklisp (default)
   +Q           --no-quicklisp       do not use quicklisp
   -v           --verbose            be quite noisy while building
                --quiet              be quite quiet while building (default)
                --test               for test purpose

Managing/Installing Several Lisp Installations

$ ros install               # displays a list of all installable implementations

$ ros install sbcl-bin      # default sbcl
$ ros install sbcl          # The newest released version of sbcl
$ ros install ccl-bin       # default prebuilt binary of ccl
$ ros install sbcl/1.2.0    # A specific version of sbcl

$ ros list installed sbcl   # Listing the installed implementations
$ ros run -- --version      # check which implementation is used
SBCL 1.2.15
$ ros use sbcl/1.2.3        # change the default implementation

To use an implementation that was not installed by roswell, use i.e. ros use sbcl/system.

The list of supported implementations continues to grow!

Installing scripts

It is also possible to install scripts using ros install:

$ ros install qlot            # will install a program from quicklisp
$ ros install fukamachi/qlot  # will install it from the GitHub

To add installable scripts into the system, you need to put roswell scripts (files having .ros extensions) into a roswell subdirectory. Take a look at qlot's roswell/qlot.ros.

Scripting with Roswell

$ ros init
Usage: ros init [template] name [options...]

$ ros init fact
Successfully generated: fact.ros

$ emacs fact.ros
## editing the fact.ros ...

$ cat fact.ros
#!/bin/sh
#|-*- mode:lisp -*-|#
#|
exec ros -Q -- $0 "$@"
|#

(defun fact (n)
  (if (zerop n)
      1
      (* n (fact (1- n)))))

(defun main (n &rest argv)
  (declare (ignore argv))
  (format t "~&Factorial ~D = ~D~%" n (fact (parse-integer n))))

$ ./fact.ros 10
Factorial 10 = 3628800

Chef recipe for roswell

@Rudolph-Miller is providing a Chef recipe for setting roswell up.

Roswell with CircleCI

@fukamachi use Roswell with CircleCI.

Naming Origin 'roswell'

From ‘made with secret alien technology’.

I felt making it easier to use Lisp for people is a kind of making opportunity for humanbeings to mingle with alien technology. I recall ‘roswell incident’ by the concept. I'm not sure what you feel.

See Also

  • keens/cim : similar project that is implemented in shellscript.I motivated to implement roswell by seeing this project.
  • cl-launch : influenced by the project of command line parameters design.

Author

SANO Masatoshi (snmsts@gmail.com)

Contributors

Special Thanks to

Project

License

Licensed under the MIT License.