Hi all,
I just polished up asdf-dependency-grovel
(http://www.cliki.net/asdf-dependency-grovel, now with added
asdf-installability) and let it have its way with mcclim.asd. The result
is a merged :clim system with 168 components and (apparently) working
dependencies. (Yay!)
Attached, you can find:
* the updated mcclim.asd,
* the clim system's components file,
* the "master system definition" file used to generate the list
(contains just serial definitions), and
* a shell script to generate the components file from the master system
definition.
Drop these files in the top level directory of a recent cvs checkout of
mcclim, and you can start testing stuff. (:
To re-generate dependencies:
1. have sbcl
2. asdf-install asdf-dependency-grovel
3. run ./grovel-dependencies.sh
4. wait.
I would like to hear your comments, especially on the maintainability of
the serial definitions in mcclim-dependencies.lisp vs. the
blood/sweat/tears hand-maintained dependencies in the old mcclim.asd.
Cheers,
--
Andreas Fuchs, (
http://%7Cim:asf@%7Cmailto:asf@)boinkor.net, antifuchs
;;; -*- Mode: Lisp -*-
;;; (c) copyright 1998,1999,2000 by Michael McDonald (mikemac@mikemac.com)
;;; (c) copyright 2000 by
;;; Robert Strandh (strandh@labri.u-bordeaux.fr)
;;; (c) copyright 2005-2006 by
;;; Andreas Fuchs (asf@boinkor.net)
;;;
;;; This library is free software; you can redistribute it and/or
;;; modify it under the terms of the GNU Library General Public
;;; License as published by the Free Software Foundation; either
;;; version 2 of the License, or (at your option) any later version.
;;;
;;; This library is distributed in the hope that it will be useful,
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;;; Library General Public License for more details.
;;;
;;; You should have received a copy of the GNU Library General Public
;;; License along with this library; if not, write to the
;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
;;; Boston, MA 02111-1307 USA.
;;; Really, I wouldn't bother with anything but ASDF. Almost every lisp
;;; ships with it, and it has the added benefit of ASDF-INSTALL.
;;; Get ASDF, and be welcome to the 21st century. -- [2005-01-31:asf]
(cl:defpackage :mcclim.system
(:use :asdf :cl)
(:export #:mp #:fix #:dep-on-swank #:ifswank #:*clim-directory*
#:mcclim-cl-source-file))
(in-package :mcclim.system)
(defparameter *clim-directory* (directory-namestring *load-truename*))
;;; Legacy CMUCL support stuff
#+cmu
(progn
(unless (fboundp 'ext:stream-read-char)
(unless (ignore-errors (ext:search-list "gray-streams:"))
(setf (ext:search-list "gray-streams:")
'("target:pcl/" "library:subsystems/")))
(if (fboundp 'extensions:without-package-locks)
(extensions:without-package-locks
(load "gray-streams:gray-streams-library"))
(load "gray-streams:gray-streams-library")))
#-clx
(require :clx)
#+mp (when (eq mp::*initial-process* mp::*current-process*)
(format t "~%~%You need to run (mp::startup-idle-and-top-level-loops) to start up the multiprocessing support.~%~%")))
;;; Make CLX asdf-loadable on Allegro 6.2
;;; possibly this should be further refined to funciton properly for
;;; Allegro on Windows platforms. [2005/04/18:rpg]
#+allegro
(progn
(defclass requireable-system (asdf:system)
())
(defmethod asdf:perform ((op asdf:load-op) (system requireable-system))
(require (intern (slot-value system 'asdf::name) :keyword)))
(defmethod asdf::traverse ((op asdf:load-op) (system requireable-system))
(list (cons op system)))
(defsystem :clx
:class requireable-system))
(defmacro clim-defsystem ((module &key depends-on) &rest components)
`(progn
(asdf:defsystem ,module
,@(and depends-on
`(:depends-on ,depends-on))
:serial t
:components
(,@(loop for c in components
for p = (merge-pathnames
(parse-namestring c)
(make-pathname :type "lisp"
:defaults *clim-directory*))
collect `(:file ,(namestring p) :pathname ,p))))))
(eval-when (:compile-toplevel :execute :load-toplevel)
(defun fix (&optional (prefix "Lisp-Dep/"))
(concatenate 'string prefix
#+cmu "fix-cmu"
#+scl "fix-scl"
#+excl "fix-acl"
#+sbcl "fix-sbcl"
#+openmcl "fix-openmcl"
#+lispworks "fix-lispworks"
#+clisp "fix-clisp"))
(defun mp (&optional (prefix "Lisp-Dep/"))
(concatenate 'string prefix
(first '(#+(and :cmu :mp (not :pthread)) "mp-cmu"
#+scl "mp-scl"
#+sb-thread "mp-sbcl"
#+excl "mp-acl"
#+openmcl "mp-openmcl"
#+lispworks "mp-lw"
#| fall back |# "mp-nil"))))
(defun find-swank-system ()
(handler-case (asdf:find-system :swank)
(asdf:missing-component ())))
(defun ifswank ()
(if (find-swank-system)
'(:and)
'(:or))))
(defclass mcclim-cl-source-file (asdf:cl-source-file) ())
(defsystem :clim
:depends-on (:spatial-trees :flexichain)
:default-component-class mcclim-cl-source-file
:components
#.(let ((component-file (merge-pathnames #p"clim-components.lisp-expr"
*clim-directory*)))
(when (probe-file component-file)
(with-open-file (f component-file :direction :input)
(read f)))))
(defsystem :drei-tests
:depends-on (:clim :fiveam)
:components
((:module "Tests"
:pathname #.(make-pathname :directory '(:relative "Drei" "Tests"))
:components
((:module
"cl-automaton"
:depends-on ("testing")
:components
((:file "eqv-hash-tests")
(:file "state-and-transition-tests")
(:file "automaton-tests")
(:file "regexp-tests")))
(:file "packages")
(:file "testing" :depends-on ("packages"))
(:file "buffer-tests" :depends-on ("testing"))
(:file "base-tests" :depends-on ("testing"))
(:file "kill-ring-tests" :depends-on ("testing"))
(:file "motion-tests" :depends-on ("testing"))
(:file "editing-tests" :depends-on ("testing"))
(:file "core-tests" :depends-on ("testing"))
(:file "buffer-streams-tests" :depends-on ("testing"))
(:file "rectangle-tests" :depends-on ("testing"))
(:file "undo-tests" :depends-on ("testing"))
(:file "lisp-syntax-tests" :depends-on ("testing"))))))
(defsystem :clim-clx
:depends-on (:clim #+(or sbcl openmcl ecl allegro) :clx)
:components
((:module "Backends/CLX"
:pathname #.(make-pathname :directory '(:relative "Backends" "CLX"))
:components
((:file "package")
(:file "image" :depends-on ("package"))
(:file "keysyms-common" :depends-on ("package"))
(:file "keysyms" :depends-on ("keysyms-common" "package"))
(:file "keysymdef" :depends-on ("keysyms-common" "package"))
(:file "port" :depends-on ("keysyms-common" "keysyms" "package"))
(:file "medium" :depends-on ("port" "keysyms" "package"))
(:file "graft" :depends-on ("port" "package"))
(:file "frame-manager" :depends-on ("medium" "port" "package"))))))
(defsystem :clim-null
:depends-on (:clim)
:components
((:module "Backends/Null"
:pathname #.(make-pathname :directory '(:relative "Backends" "Null"))
:components
((:file "package")
(:file "port" :depends-on ("package"))
(:file "medium" :depends-on ("port" "package"))
(:file "graft" :depends-on ("port" "package"))
(:file "frame-manager" :depends-on ("medium" "port" "package"))))))
;;; TODO/asf: I don't have the required libs to get :clim-opengl to load. tough.
(clim-defsystem (:clim-opengl :depends-on (:clim))
"Backends/OpenGL/opengl-x-frame-manager"
"Backends/OpenGL/opengl-frame-manager"
"Backends/OpenGL/opengl-x-port-before"
"Backends/OpenGL/opengl-port"
"Backends/OpenGL/opengl-x-port-after"
"Backends/OpenGL/opengl-medium"
"Backends/OpenGL/opengl-x-graft")
;;; A system that loads the appropriate backend for the current
;;; platform.
(defsystem :clim-looks
:depends-on (:clim
;; If we're on an implementation that ships CLX, use
;; it. Same if the user has loaded CLX already.
#+(or sbcl scl openmcl ecl clx allegro) :clim-clx
#+gl :clim-opengl
;; OpenMCL and MCL support the beagle backend (native
;; OS X look&feel on OS X).
;; But until it's ready, it's no use forcing users to
;; cope with possible bugs.
;; #+(or openmcl mcl) :clim-beagle
;; null backend
:clim-null
)
:components ((:file "Looks/pixie"
:pathname #.(make-pathname :directory '(:relative "Looks") :name "pixie" :type "lisp"))))
(defsystem :drei-swank-add-ons
:depends-on (:swank :clim)
:components ((:file "lisp-syntax-swank"
:pathname #.(make-pathname :directory '(:relative "Drei")
:name "lisp-syntax-swank"
:type "lisp"))))
;;; The actual McCLIM system that people should to use in their ASDF
;;; package dependency lists.
(defsystem :mcclim
:depends-on (:clim-looks #+#.(mcclim.system:ifswank):drei-swank-add-ons))
(defmethod perform :after ((op load-op) (c (eql (find-system :clim))))
(pushnew :clim *features*)
(pushnew :mcclim *features*))
(defmethod perform :around (op (c mcclim-cl-source-file))
(let ((*features* (adjoin :building-mcclim *features*)))
(call-next-method)))
;;; This file contains -*- lisp -*- expressions.
;;; AUTO-GENERATED file from system definition of system clim/serial in .
;;;
;;; Instead of directly editing this file, please edit the system definitions
;;; of clim-lisp/serial or clim-basic/serial or clim-core/serial or clim/serial
;;; or goatee-core/serial or esa-mcclim/serial or drei-mcclim/serial or
;;; clim-postscript/grovel, then re-generate this file.
(
;; ex clim-lisp/serial
(:file "patch" :depends-on ())
(:file #.(fix) :pathname #.(make-pathname :directory '(:relative "Lisp-Dep") :name (fix "") :type "lisp") :depends-on ("patch"))
(:file "package" :depends-on ("patch" "patch" #.(fix)))
;; ex clim-basic/serial
(:file "decls" :depends-on ("package"))
(:file "protocol-classes" :depends-on ("package" #.(fix)))
(:file #.(mp) :pathname #.(make-pathname :directory '(:relative "Lisp-Dep") :name (mp "") :type "lisp") :depends-on ("package"))
(:file "utils" :depends-on ("package"))
(:file "defresource" :depends-on ("package"))
(:file "setf-star" :depends-on ("package"))
(:file "design" :depends-on ("decls" "protocol-classes"))
(:file "X11-colors" :depends-on ("design"))
(:file "coordinates" :depends-on ("package"))
(:file "transforms" :depends-on ("decls" "protocol-classes"))
(:file "regions" :depends-on ("decls" "protocol-classes" "setf-star" "utils"))
(:file "sheets" :depends-on ("regions"))
(:file "pixmap" :depends-on ("decls" "protocol-classes"))
(:file "events" :depends-on ("decls" "protocol-classes" "utils" #.(mp)))
(:file "ports" :depends-on ("pixmap" "sheets" #.(mp)))
(:file "grafts" :depends-on ("sheets"))
(:file "medium" :depends-on ("ports"))
(:file "output" :depends-on ("medium"))
(:file "input" :depends-on ("sheets" #.(mp)))
(:file "repaint" :depends-on ("events" "sheets"))
(:file "graphics" :depends-on ("design" "output" "transforms"))
(:file "views" :depends-on ("decls" "protocol-classes"))
(:file "stream-output" :depends-on ("output"))
(:file "recording" :depends-on ("graphics" "stream-output"))
(:file "encapsulate" :depends-on ("stream-output"))
(:file "stream-input" :depends-on ("encapsulate" "events" "input"))
(:file "text-selection" :depends-on ("X11-colors" "events" "graphics"))
(:file "bezier" :depends-on ("coordinates" "recording"))
;; ex clim-core/serial
(:file "text-formatting" :depends-on ("encapsulate"))
(:file "input-editing" :depends-on ("decls" "utils"))
(:file "presentations" :depends-on ("recording"))
(:file "presentation-defs" :depends-on ("input-editing" "presentations"
"stream-input" "views"))
(:file "pointer-tracking" :depends-on ("events" "recording"))
(:file "commands" :depends-on ("Backends/PostScript/sheet" "presentation-defs"))
(:file "incremental-redisplay" :depends-on ("recording"))
(:file "frames" :depends-on ("incremental-redisplay" "pointer-tracking"
"presentation-defs"))
(:file "panes" :depends-on ("commands" "frames" "text-selection"))
(:file "gadgets" :depends-on ("panes"))
(:file "menu" :depends-on ("gadgets"))
(:file "table-formatting" :depends-on ("presentation-defs"))
(:file "graph-formatting" :depends-on ("recording"))
(:file "bordered-output" :depends-on ("recording"))
(:file "dialog-views" :depends-on ("bordered-output" "incremental-redisplay"
"presentation-defs"))
(:file "dialog" :depends-on ("bordered-output" "commands"
"incremental-redisplay" "table-formatting"))
(:file "builtin-commands" :depends-on ("dialog"))
(:file "describe" :depends-on ("builtin-commands"))
(:file "menu-choose" :depends-on ("builtin-commands" "panes"))
;; ex clim/serial
(:file "input-editing-goatee" :depends-on ("Goatee/editing-stream"
"builtin-commands"))
(:file "input-editing-drei" :depends-on ("Drei/input-editor"))
(:file "text-editor-gadget" :depends-on ("Drei/drei-clim"))
(:file "Extensions/rgb-image" :pathname #.(make-pathname :directory '(:relative
"Extensions") :name "rgb-image" :type "lisp")
:depends-on ("builtin-commands"))
;; ex goatee-core/serial
(:file "Goatee/conditions" :pathname #.(make-pathname :directory '(:relative "Goatee") :name "conditions" :type "lisp")
:depends-on ("package"))
(:file "Goatee/dbl-list" :pathname #.(make-pathname :directory '(:relative "Goatee") :name "dbl-list" :type "lisp")
:depends-on ("package" #.(fix)))
(:file "Goatee/flexivector" :pathname #.(make-pathname :directory '(:relative "Goatee") :name "flexivector" :type "lisp")
:depends-on ("Goatee/conditions" #.(fix)))
(:file "Goatee/buffer" :pathname #.(make-pathname :directory '(:relative "Goatee") :name "buffer" :type "lisp")
:depends-on ("Goatee/dbl-list" "Goatee/flexivector" "setf-star"))
(:file "Goatee/editable-buffer" :pathname #.(make-pathname :directory '(:relative
"Goatee") :name "editable-buffer" :type "lisp")
:depends-on ("Goatee/buffer"))
(:file "Goatee/editable-area" :pathname #.(make-pathname :directory '(:relative
"Goatee") :name "editable-area" :type "lisp")
:depends-on ("Goatee/dbl-list"))
(:file "Goatee/clim-area" :pathname #.(make-pathname :directory '(:relative "Goatee") :name "clim-area" :type "lisp")
:depends-on ("Goatee/buffer" "Goatee/editable-area" "recording"))
(:file "Goatee/kill-ring" :pathname #.(make-pathname :directory '(:relative "Goatee") :name "kill-ring" :type "lisp")
:depends-on ("Goatee/dbl-list" "utils"))
(:file "Goatee/goatee-command" :pathname #.(make-pathname :directory '(:relative
"Goatee") :name "goatee-command" :type "lisp")
:depends-on ("Goatee/editable-area" "Goatee/editable-buffer"
"Goatee/kill-ring" "stream-input"))
(:file "Goatee/editing-stream" :pathname #.(make-pathname :directory '(:relative
"Goatee") :name "editing-stream" :type "lisp")
:depends-on ("Goatee/editable-buffer" "recording"))
(:file "Goatee/presentation-history" :pathname #.(make-pathname :directory '(:relative
"Goatee") :name "presentation-history" :type "lisp")
:depends-on ("Goatee/goatee-command"))
;; ex esa-mcclim/serial
(:file "ESA/packages" :pathname #.(make-pathname :directory '(:relative "ESA") :name "packages" :type "lisp")
:depends-on ("builtin-commands"))
(:file "ESA/utils" :pathname #.(make-pathname :directory '(:relative "ESA") :name "utils" :type "lisp")
:depends-on ("ESA/packages"))
(:file "ESA/esa" :pathname #.(make-pathname :directory '(:relative "ESA") :name "esa" :type "lisp")
:depends-on ("ESA/utils" "panes"))
(:file "ESA/esa-buffer" :pathname #.(make-pathname :directory '(:relative "ESA") :name "esa-buffer" :type "lisp")
:depends-on ("ESA/packages"))
(:file "ESA/esa-io" :pathname #.(make-pathname :directory '(:relative "ESA") :name "esa-io" :type "lisp")
:depends-on ("ESA/esa"))
(:file "ESA/esa-command-parser" :pathname #.(make-pathname :directory '(:relative
"ESA") :name "esa-command-parser" :type "lisp")
:depends-on ("ESA/packages"))
(:file "ESA/colors" :pathname #.(make-pathname :directory '(:relative "ESA") :name "colors" :type "lisp")
:depends-on ("builtin-commands"))
;; ex drei-mcclim/serial
(:file "Drei/cl-automaton/automaton-package" :pathname #.(make-pathname :directory '(:relative
"Drei"
"cl-automaton") :name "automaton-package" :type "lisp")
:depends-on ("builtin-commands"))
(:file "Drei/cl-automaton/eqv-hash" :pathname #.(make-pathname :directory '(:relative
"Drei"
"cl-automaton") :name "eqv-hash" :type "lisp")
:depends-on ("Drei/cl-automaton/automaton-package"))
(:file "Drei/cl-automaton/state-and-transition" :pathname #.(make-pathname :directory '(:relative
"Drei"
"cl-automaton") :name "state-and-transition" :type "lisp")
:depends-on ("Drei/cl-automaton/eqv-hash"))
(:file "Drei/cl-automaton/automaton" :pathname #.(make-pathname :directory '(:relative
"Drei"
"cl-automaton") :name "automaton" :type "lisp")
:depends-on ("Drei/cl-automaton/eqv-hash"))
(:file "Drei/cl-automaton/regexp" :pathname #.(make-pathname :directory '(:relative
"Drei"
"cl-automaton") :name "regexp" :type "lisp")
:depends-on ("Drei/cl-automaton/automaton-package"))
(:file "Drei/Persistent/binseq-package" :pathname #.(make-pathname :directory '(:relative
"Drei"
"Persistent") :name "binseq-package" :type "lisp")
:depends-on ("builtin-commands"))
(:file "Drei/Persistent/binseq" :pathname #.(make-pathname :directory '(:relative
"Drei"
"Persistent") :name "binseq" :type "lisp")
:depends-on ("Drei/Persistent/binseq-package"))
(:file "Drei/Persistent/obinseq" :pathname #.(make-pathname :directory '(:relative
"Drei"
"Persistent") :name "obinseq" :type "lisp")
:depends-on ("Drei/Persistent/binseq-package"))
(:file "Drei/Persistent/binseq2" :pathname #.(make-pathname :directory '(:relative
"Drei"
"Persistent") :name "binseq2" :type "lisp")
:depends-on ("Drei/Persistent/binseq-package"))
(:file "Drei/packages" :pathname #.(make-pathname :directory '(:relative "Drei") :name "packages" :type "lisp")
:depends-on ("Drei/Persistent/binseq-package" "ESA/packages"))
(:file "Drei/buffer" :pathname #.(make-pathname :directory '(:relative "Drei") :name "buffer" :type "lisp")
:depends-on ("Drei/packages"))
(:file "Drei/Persistent/persistent-buffer" :pathname #.(make-pathname :directory '(:relative
"Drei"
"Persistent") :name "persistent-buffer" :type "lisp")
:depends-on ("Drei/buffer"))
(:file "Drei/kill-ring" :pathname #.(make-pathname :directory '(:relative "Drei") :name "kill-ring" :type "lisp")
:depends-on ("Drei/packages"))
(:file "Drei/base" :pathname #.(make-pathname :directory '(:relative "Drei") :name "base" :type "lisp")
:depends-on ("Drei/Persistent/persistent-buffer"
"Drei/cl-automaton/automaton-package" "ESA/utils"))
(:file "Drei/syntax" :pathname #.(make-pathname :directory '(:relative "Drei") :name "syntax" :type "lisp")
:depends-on ("Drei/base"))
(:file "Drei/motion" :pathname #.(make-pathname :directory '(:relative "Drei") :name "motion" :type "lisp")
:depends-on ("Drei/Persistent/persistent-buffer"))
(:file "Drei/editing" :pathname #.(make-pathname :directory '(:relative "Drei") :name "editing" :type "lisp")
:depends-on ("Drei/buffer"))
(:file "Drei/abbrev" :pathname #.(make-pathname :directory '(:relative "Drei") :name "abbrev" :type "lisp")
:depends-on ("Drei/packages"))
(:file "Drei/undo" :pathname #.(make-pathname :directory '(:relative "Drei") :name "undo" :type "lisp")
:depends-on ("Drei/packages"))
(:file "Drei/delegating-buffer" :pathname #.(make-pathname :directory '(:relative
"Drei") :name "delegating-buffer" :type "lisp")
:depends-on ("Drei/buffer"))
(:file "Drei/Persistent/persistent-undo" :pathname #.(make-pathname :directory '(:relative
"Drei"
"Persistent") :name "persistent-undo" :type "lisp")
:depends-on ("Drei/buffer" "Drei/undo"))
(:file "Drei/drei" :pathname #.(make-pathname :directory '(:relative "Drei") :name "drei" :type "lisp")
:depends-on ("Drei/abbrev" "Drei/delegating-buffer" "Drei/syntax" "Drei/undo"
"ESA/esa" "ESA/esa-buffer"))
(:file "Drei/core" :pathname #.(make-pathname :directory '(:relative "Drei") :name "core" :type "lisp")
:depends-on ("Drei/drei"))
(:file "Drei/buffer-streams" :pathname #.(make-pathname :directory '(:relative "Drei") :name "buffer-streams" :type "lisp")
:depends-on ("Drei/packages"))
(:file "Drei/rectangle" :pathname #.(make-pathname :directory '(:relative "Drei") :name "rectangle" :type "lisp")
:depends-on ("Drei/packages" "ESA/utils"))
(:file "Drei/drei-clim" :pathname #.(make-pathname :directory '(:relative "Drei") :name "drei-clim" :type "lisp")
:depends-on ("Drei/drei" "gadgets"))
(:file "Drei/core-commands" :pathname #.(make-pathname :directory '(:relative "Drei") :name "core-commands" :type "lisp")
:depends-on ("Drei/base" "ESA/esa"))
(:file "Drei/drei-redisplay" :pathname #.(make-pathname :directory '(:relative "Drei") :name "drei-redisplay" :type "lisp")
:depends-on ("Drei/drei-clim"))
(:file "Drei/basic-commands" :pathname #.(make-pathname :directory '(:relative "Drei") :name "basic-commands" :type "lisp")
:depends-on ("Drei/packages" "ESA/esa"))
(:file "Drei/misc-commands" :pathname #.(make-pathname :directory '(:relative "Drei") :name "misc-commands" :type "lisp")
:depends-on ("Drei/packages" "ESA/esa"))
(:file "Drei/unicode-commands" :pathname #.(make-pathname :directory '(:relative
"Drei") :name "unicode-commands" :type "lisp")
:depends-on ("Drei/packages" "ESA/esa"))
(:file "Drei/search-commands" :pathname #.(make-pathname :directory '(:relative "Drei") :name "search-commands" :type "lisp")
:depends-on ("Drei/packages" "ESA/esa"))
(:file "Drei/fundamental-syntax" :pathname #.(make-pathname :directory '(:relative
"Drei") :name "fundamental-syntax" :type "lisp")
:depends-on ("Drei/drei-redisplay"))
(:file "Drei/lisp-syntax" :pathname #.(make-pathname :directory '(:relative "Drei") :name "lisp-syntax" :type "lisp")
:depends-on ("Drei/fundamental-syntax" "Drei/motion"))
(:file "Drei/input-editor" :pathname #.(make-pathname :directory '(:relative "Drei") :name "input-editor" :type "lisp")
:depends-on ("Drei/core"))
(:file "Drei/lisp-syntax-swine" :pathname #.(make-pathname :directory '(:relative
"Drei") :name "lisp-syntax-swine" :type "lisp")
:depends-on ("Drei/lisp-syntax"))
(:file "Drei/lisp-syntax-commands" :pathname #.(make-pathname :directory '(:relative
"Drei") :name "lisp-syntax-commands" :type "lisp")
:depends-on ("Drei/basic-commands" "Drei/lisp-syntax"))
;; ex clim-postscript/grovel
(:file "Backends/PostScript/package" :pathname #.(make-pathname :directory '(:relative
"Backends"
"PostScript") :name "package" :type "lisp")
:depends-on ("package"))
(:file "Backends/PostScript/encoding" :pathname #.(make-pathname :directory '(:relative
"Backends"
"PostScript") :name "encoding" :type "lisp")
:depends-on ("Backends/PostScript/package"))
(:file "Backends/PostScript/paper" :pathname #.(make-pathname :directory '(:relative
"Backends"
"PostScript") :name "paper" :type "lisp")
:depends-on ("Backends/PostScript/package"))
(:file "Backends/PostScript/class" :pathname #.(make-pathname :directory '(:relative
"Backends"
"PostScript") :name "class" :type "lisp")
:depends-on ("Backends/PostScript/package" "input" "recording" "repaint"))
(:file "Backends/PostScript/font" :pathname #.(make-pathname :directory '(:relative
"Backends"
"PostScript") :name "font" :type "lisp")
:depends-on ("Backends/PostScript/class"))
(:file "Backends/PostScript/graphics" :pathname #.(make-pathname :directory '(:relative
"Backends"
"PostScript") :name "graphics" :type "lisp")
:depends-on ("Backends/PostScript/class" "bezier"))
(:file "Backends/PostScript/sheet" :pathname #.(make-pathname :directory '(:relative
"Backends"
"PostScript") :name "sheet" :type "lisp")
:depends-on ("Backends/PostScript/graphics"))
(:file "Backends/PostScript/afm" :pathname #.(make-pathname :directory '(:relative
"Backends"
"PostScript") :name "afm" :type "lisp")
:depends-on ("Backends/PostScript/package"))
(:file "Backends/PostScript/standard-metrics" :pathname #.(make-pathname :directory '(:relative
"Backends"
"PostScript") :name "standard-metrics" :type "lisp")
:depends-on ("Backends/PostScript/font"))
)
#!/bin/sh -e
cd "$(dirname $0)"
rm -f clim-components.lisp-expr
sbcl --disable-debugger \
--eval '(require :asdf)' \
--load mcclim.asd \
--load mcclim-dependencies.lisp \
--eval "(asdf:oos 'asdf-dependency-grovel:dependency-op :mcclim-dependencies)" \
--eval '(sb-ext:quit)'
;;; -*- Mode: Lisp -*-
(cl:in-package :cl-user)
#+mcclim(eval-when (:compile-toplevel :load-toplevel :execute)
(cerror "Continue corrupting the lisp image."
"~@<You are trying to load the McCLIM dependency groveler into a lisp ~
image that has McCLIM already loaded. Besides possibly skewing results, ~
this will corrupt your Lisp image.~:@>"))
;; load groveler, for the component type, etc.
(eval-when (:load-toplevel :execute)
(asdf:find-system :mcclim) ; ensure that its system definition is loaded.
(asdf:oos 'asdf:load-op :asdf-dependency-grovel))
(defpackage :mcclim-dependencies.system
(:use :asdf :cl :asdf-dependency-grovel :mcclim.system))
(in-package :mcclim-dependencies.system)
(defclass mcclim-instrumented-cl-source-file (mcclim-cl-source-file instrumented-cl-source-file)
())
;;; serial system definitions
(defmacro groveling-defsystem ((module &key depends-on (serial t)) &body components)
`(progn
#+asdf
(asdf:defsystem ,module
,@(and depends-on
`(:depends-on ,depends-on))
:serial ,serial
:default-component-class mcclim-instrumented-cl-source-file
:components
(,@(loop for c in components
for p = (when (stringp c)
(merge-pathnames
(parse-namestring c)
(make-pathname :type "lisp"
:defaults *clim-directory*)))
if (stringp c)
collect `(:file ,(pathname-name p) :pathname ,p)
else
collect c)))))
(groveling-defsystem (:clim-lisp/serial)
"patch"
#.(fix)
"package")
(groveling-defsystem (:clim-basic/serial
:depends-on (:clim-lisp/serial :spatial-trees :flexichain))
"decls"
"protocol-classes"
#.(mp)
"utils"
"defresource"
"setf-star"
"design"
"X11-colors"
"coordinates"
"transforms"
"regions"
"sheets"
"pixmap"
"events"
"ports"
"grafts"
"medium"
"output"
"input"
"repaint"
"graphics"
"views"
"stream-output"
"recording"
"encapsulate"
"stream-input"
"text-selection"
"bezier"
)
(groveling-defsystem (:goatee-core/serial :depends-on (:clim-basic/serial))
"Goatee/conditions"
"Goatee/dbl-list"
"Goatee/flexivector"
"Goatee/buffer"
"Goatee/editable-buffer"
"Goatee/editable-area"
"Goatee/clim-area"
"Goatee/kill-ring"
"Goatee/goatee-command"
"Goatee/editing-stream"
"Goatee/presentation-history"
)
(groveling-defsystem (:clim-core/serial :depends-on
(:clim-basic/serial :goatee-core/serial
:clim-postscript/grovel))
"text-formatting"
"input-editing"
"presentations"
"presentation-defs"
"pointer-tracking"
"commands"
"incremental-redisplay"
"frames"
"panes"
"gadgets"
"menu"
"table-formatting"
"graph-formatting"
"bordered-output"
"dialog-views"
"dialog"
"builtin-commands"
"describe"
"menu-choose"
)
(groveling-defsystem (:esa-mcclim/serial
:depends-on (:clim-core/serial))
"ESA/packages"
"ESA/utils"
"ESA/esa"
"ESA/esa-buffer"
"ESA/esa-io"
"ESA/esa-command-parser"
"ESA/colors")
(groveling-defsystem (:drei-mcclim/serial
:depends-on (:flexichain :esa-mcclim/serial :clim-core/serial))
"Drei/cl-automaton/automaton-package"
"Drei/cl-automaton/eqv-hash"
"Drei/cl-automaton/state-and-transition"
"Drei/cl-automaton/automaton"
"Drei/cl-automaton/regexp"
"Drei/Persistent/binseq-package"
"Drei/Persistent/binseq"
"Drei/Persistent/obinseq"
"Drei/Persistent/binseq2"
"Drei/packages"
"Drei/buffer"
"Drei/Persistent/persistent-buffer"
"Drei/kill-ring"
"Drei/base"
"Drei/syntax"
"Drei/motion"
"Drei/editing"
"Drei/abbrev"
"Drei/undo"
"Drei/delegating-buffer"
"Drei/Persistent/persistent-undo"
"Drei/drei"
"Drei/core"
"Drei/buffer-streams"
"Drei/rectangle"
"Drei/drei-clim"
"Drei/core-commands"
"Drei/drei-redisplay"
"Drei/basic-commands"
"Drei/misc-commands"
"Drei/unicode-commands"
"Drei/search-commands"
"Drei/fundamental-syntax"
"Drei/lisp-syntax"
"Drei/input-editor"
"Drei/lisp-syntax-swine"
"Drei/lisp-syntax-commands")
(groveling-defsystem (:clim-postscript/grovel
:depends-on (:clim-basic/serial)
:serial nil)
"Backends/PostScript/package"
"Backends/PostScript/encoding"
"Backends/PostScript/paper"
"Backends/PostScript/class"
"Backends/PostScript/font"
"Backends/PostScript/graphics"
"Backends/PostScript/sheet"
"Backends/PostScript/afm"
"Backends/PostScript/standard-metrics")
(groveling-defsystem (:clim/serial
:depends-on (:clim-core/serial :goatee-core/serial
:drei-mcclim/serial))
"input-editing-goatee"
"input-editing-drei"
"text-editor-gadget"
"Extensions/rgb-image")
;;;; the dependency system
(asdf:defsystem :mcclim-dependencies
:components
((component-file "mcclim"
:output-file #.(merge-pathnames #p"clim-components.lisp-expr"
*clim-directory*)
:load-system :clim/serial
:merge-systems (:clim-lisp/serial :clim-basic/serial :clim-core/serial :clim/serial
:goatee-core/serial :esa-mcclim/serial
:drei-mcclim/serial :clim-postscript/grovel)
:additional-dependencies ((""package"" ""patch"" "#.(fix)"))
:component-name-translation
((#.(format nil "~S" (fix))
"#.(fix)"
"#.(fix) :pathname #.(make-pathname :directory '(:relative "Lisp-Dep") :name (fix "") :type "lisp")")
(#.(format nil "~S" (mp))
"#.(mp)"
"#.(mp) :pathname #.(make-pathname :directory '(:relative "Lisp-Dep") :name (mp "") :type "lisp")"))
:cull-redundant t
:verbose nil)))