diff --git a/Makefile b/Makefile
index 0e0c10c..b84a083 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
PROGRAM = build/adams
PREFIX = /usr/local
-LISP = sbcl
+LISP = sbcl --dynamic-space-size 2048
LISP_LOAD = ${LISP} --load
all: ${PROGRAM}
@@ -18,7 +18,7 @@ ${PROGRAM}: build.lisp config.lisp build/systems.lisp toplevel.lisp
clean:
rm -rf build/*
-install: ${PROGRAM}
+install:
install -m 0755 ${PROGRAM} ${PREFIX}/bin
.PHONY: all clean deps install ${PROGRAM}
diff --git a/build.lisp b/build.lisp
index 8f03252..074ab9d 100644
--- a/build.lisp
+++ b/build.lisp
@@ -18,6 +18,12 @@
(in-package :common-lisp-user)
+(declaim (optimize (speed 1)
+ (space 1)
+ (safety 3)
+ (debug 3)
+ (compilation-speed 0)))
+
(defun compile-lisp (path)
(let* ((fasl (make-pathname :type "fasl" :defaults path))
(fasl (merge-pathnames fasl)))
diff --git a/prepare-build.lisp b/prepare-build.lisp
index 65c2147..8ae26a5 100644
--- a/prepare-build.lisp
+++ b/prepare-build.lisp
@@ -123,10 +123,17 @@
(defmethod collect-sources :around ((x asdf:component))
(let ((if-feature (asdf::component-if-feature x)))
- (if if-feature
- (when (find (the symbol if-feature) *features*)
- (call-next-method))
- (call-next-method))))
+ (etypecase if-feature
+ (null
+ (call-next-method))
+ (symbol
+ (when (find (the symbol if-feature) *features*)
+ (call-next-method)))
+ (cons
+ (cond ((string-equal 'not (first if-feature))
+ (unless (find (the symbol (second if-feature)) *features*)
+ (call-next-method)))
+ (t (error "Bad if-feature")))))))
#+nil (collect-sources :adams)