[mcclim-devel] more magical dependency analysis

Andreas Fuchs asf at boinkor.net
Sat Jan 20 16:50:29 EST 2007


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://|im:asf@|mailto:asf@)boinkor.net, antifuchs
-------------- next part --------------
;;; -*- Mode: Lisp -*-

;;;  (c) copyright 1998,1999,2000 by Michael McDonald (mikemac at mikemac.com)
;;;  (c) copyright 2000 by 
;;;           Robert Strandh (strandh at labri.u-bordeaux.fr)
;;;  (c) copyright 2005-2006 by
;;;	      Andreas Fuchs (asf at 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)))
-------------- next part --------------
;;; 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"))
)
-------------- next part --------------
#!/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)'
-------------- next part --------------
;;; -*- 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)))


More information about the mcclim-devel mailing list