X-Git-Url: https://git.distorted.org.uk/~mdw/sod/blobdiff_plain/48eb81ca02d7e618ecc474f73ef948b023586857..refs/heads/mdw/progfmt:/src/sod.asd.in diff --git a/src/sod.asd.in b/src/sod.asd.in index 0755979..82839dd 100644 --- a/src/sod.asd.in +++ b/src/sod.asd.in @@ -24,12 +24,13 @@ ;;; Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. (cl:defpackage #:sod-sysdef - (:use #:common-lisp #:asdf) + (:use #:common-lisp #:asdf #:uiop) (:export #:*version*)) (cl:in-package #:sod-sysdef) -#|@-auto-@|# (load (merge-pathnames "auto.lisp" *load-pathname*)) +#|@-auto-@|# (load (make-pathname :name "AUTO" :type "LISP" :version :newest +#|@-del-@|# :case :common :defaults *load-pathname*)) #+cmu (require :gray-streams) @@ -62,123 +63,191 @@ statically predicting which superclass's method to delegate to. Multiple inheritance makes this approach (taken by C++) fail: the right next method might be an unknown sibling, and two siblings might - be in either order depending on descendents. + be in either order depending on descendants. * Minimal runtime support requirements, so that it's suitable for use wherever C is -- e.g., interfacing to other languages." + :depends-on ("uiop") + :in-order-to ((test-op (load-op "sod/test"))) + :perform (test-op (op comp) + (let ((result (symbol-call :sod-test :run-tests))) + (unless (symbol-call :xlunit :was-successful result) + (error "Failed test")))) + :components - ((:file "utilities") - - ;; Parser equipment. This is way more elaborate than it needs to be, but - ;; it was interesting, and it may well get split off into a separate - ;; library. - (:module "parser" :depends-on ("utilities") :components - ((:file "package") - - ;; File location protocol (including error reporting). - (:file "floc-proto" :depends-on ("package")) - (:file "floc-impl" :depends-on ("floc-proto")) - - ;; Position-aware streams. - (:file "streams-proto" :depends-on ("package")) - (:file "streams-impl" :depends-on ("streams-proto" "floc-proto")) - - ;; Scanner protocol, and various scanner implementations. - (:file "scanner-proto" :depends-on ("package")) - (:file "scanner-impl" :depends-on ("scanner-proto")) - (:file "scanner-charbuf-impl" :depends-on - ("scanner-proto" "floc-proto" "streams-proto")) - (:file "scanner-token-impl" :depends-on ("scanner-proto")) - - ;; Parser notation macro support. - (:file "parser-proto" :depends-on ("package")) - (:file "parser-impl" :depends-on ("parser-proto")) - - ;; Expression parser support. - (:file "parser-expr-proto" :depends-on ("parser-proto")) - (:file "parser-expr-impl" :depends-on ("parser-expr-proto")) - - ;; Stitching parsers to scanners. - (:file "scanner-context-impl" :depends-on - ("parser-proto" "scanner-proto")))) - - (:file "package" :depends-on ("utilities" "parser")) - - ;; Lexical analysis. - (:file "lexer-proto" :depends-on ("package" "parser")) - (:file "lexer-impl" :depends-on ("lexer-proto")) - (:file "fragment-parse" :depends-on ("lexer-proto")) - - ;; C type representation protocol. - (:file "c-types-proto" :depends-on ("package")) - (:file "c-types-impl" :depends-on ("c-types-proto" "codegen-proto")) - (:file "c-types-parse" :depends-on - ("c-types-proto" "c-types-class-impl" "fragment-parse")) - - ;; Property set protocol. - (:file "pset-proto" :depends-on ("package" "c-types-proto")) - (:file "pset-impl" :depends-on ("pset-proto" "module-proto")) - (:file "pset-parse" :depends-on ("pset-proto" "lexer-proto")) - - ;; Code generation protocol. - (:file "codegen-proto" :depends-on ("module-proto")) - (:file "codegen-impl" :depends-on ("codegen-proto")) - - ;; Modules. - (:file "module-proto" :depends-on ("pset-proto" "package")) - (:file "module-impl" :depends-on - ("module-proto" "pset-proto" "c-types-class-impl" "builtin")) - (:file "builtin" :depends-on - ("module-proto" "pset-proto" "c-types-impl" "c-types-class-impl" - "classes" "class-layout-proto" "method-proto")) - (:file "module-parse" :depends-on - ("class-make-proto" "class-finalize-proto" - "fragment-parse" "lexer-proto" "module-impl")) - (:file "module-output" :depends-on ("module-impl" "output-proto")) - - ;; Output. - (:file "output-proto" :depends-on ("package")) - (:file "output-impl" :depends-on ("output-proto")) - - ;; Class representation. - (:file "classes" :depends-on ("package" "c-types-proto")) - (:file "c-types-class-impl" :depends-on ("classes" "module-proto")) - (:file "class-utilities" :depends-on - ("classes" "codegen-impl" "pset-impl" - "c-types-impl" "c-types-class-impl")) - - ;; Class construction. - (:file "class-make-proto" :depends-on ("class-utilities")) - (:file "class-make-impl" :depends-on ("class-make-proto")) - - ;; Class layout. - (:file "class-layout-proto" :depends-on ("class-utilities")) - (:file "class-layout-impl" :depends-on - ("class-layout-proto" "method-proto")) - - ;; Class finalization. - (:file "class-finalize-proto" :depends-on ("class-utilities")) - (:file "class-finalize-impl" :depends-on ("class-finalize-proto")) - - ;; Method generation. - (:file "method-proto" :depends-on ("class-make-proto")) - (:file "method-impl" :depends-on ("method-proto")) - (:file "method-aggregate" :depends-on ("method-impl")) - - ;; Class output. - (:file "class-output" :depends-on - ("classes" "class-layout-impl" "method-impl" "output-proto")) - - ;; Finishing touches of various kinds. - (:file "final" :depends-on ("builtin" "module-output" "class-output")))) + ((:file "utilities") + (:file "optparse") + + ;; Parser equipment. This is way more elaborate than it needs to be, + ;; but it was interesting, and it may well get split off into a separate + ;; library. + (:module "parser" + :depends-on ("utilities") + :components + ((:file "package") + + ;; File location protocol (including error reporting). + (:file "floc-proto" :depends-on ("package")) + (:file "floc-impl" :depends-on ("floc-proto")) + + ;; Position-aware streams. + (:file "streams-proto" :depends-on ("package")) + (:file "streams-impl" + :depends-on ("streams-proto" "floc-proto")) + + ;; Scanner protocol, and various scanner implementations. + (:file "scanner-proto" :depends-on ("package")) + (:file "scanner-impl" :depends-on ("scanner-proto")) + (:file "scanner-charbuf-impl" + :depends-on + ("scanner-proto" "floc-proto" "streams-proto")) + (:file "scanner-token-impl" :depends-on ("scanner-proto")) + + ;; Parser notation macro support. + (:file "parser-proto" :depends-on ("package")) + (:file "parser-impl" :depends-on ("parser-proto")) + + ;; Expression parser support. + (:file "parser-expr-proto" :depends-on ("parser-proto")) + (:file "parser-expr-impl" :depends-on ("parser-expr-proto")) + + ;; Stitching parsers to scanners. + (:file "scanner-context-impl" + :depends-on ("parser-proto" "scanner-proto")))) + + (:file "package" :depends-on ("utilities" "parser")) + + ;; Lexical analysis. + (:file "lexer-proto" :depends-on ("package" "parser")) + (:file "lexer-impl" :depends-on ("lexer-proto")) + (:file "fragment-parse" :depends-on ("lexer-proto")) + + ;; C type representation protocol. + (:file "c-types-proto" :depends-on ("package")) + (:file "c-types-impl" :depends-on ("c-types-proto" "codegen-proto")) + (:file "c-types-parse" + :depends-on + ("c-types-proto" "c-types-class-impl" "fragment-parse")) + + ;; Property set protocol. + (:file "pset-proto" :depends-on ("package" "c-types-proto")) + (:file "pset-impl" :depends-on ("pset-proto" "module-proto")) + (:file "pset-parse" :depends-on ("pset-proto" "lexer-proto")) + + ;; Code generation protocol. + (:file "codegen-proto" :depends-on ("module-proto")) + (:file "codegen-impl" :depends-on ("codegen-proto")) + + ;; Modules. + (:file "module-proto" :depends-on ("pset-proto" "package")) + (:file "module-impl" + :depends-on + ("module-proto" "pset-proto" "c-types-class-impl" "builtin")) + (:file "builtin" + :depends-on + ("module-proto" "pset-proto" + "c-types-impl" "c-types-class-impl" + "classes" "class-layout-proto" "method-proto")) + (:file "module-parse" + :depends-on + ("class-make-proto" "class-finalize-proto" + "fragment-parse" "lexer-proto" "module-impl")) + (:file "module-output" :depends-on ("module-impl" "output-proto")) + + ;; Output. + (:file "output-proto" :depends-on ("package")) + (:file "output-impl" :depends-on ("output-proto")) + + ;; Class representation. + (:file "classes" :depends-on ("package" "c-types-proto")) + (:file "c-types-class-impl" :depends-on ("classes" "module-proto")) + (:file "class-utilities" + :depends-on + ("classes" "codegen-impl" "pset-impl" + "c-types-impl" "c-types-class-impl")) + + ;; Class construction. + (:file "class-make-proto" :depends-on ("class-utilities")) + (:file "class-make-impl" :depends-on ("class-make-proto")) + + ;; Class layout. + (:file "class-layout-proto" :depends-on ("class-utilities")) + (:file "class-layout-impl" + :depends-on ("class-layout-proto" "method-proto")) + + ;; Class finalization. + (:file "class-finalize-proto" :depends-on ("class-utilities")) + (:file "class-finalize-impl" :depends-on ("class-finalize-proto")) + + ;; Method generation. + (:file "method-proto" :depends-on ("class-make-proto")) + (:file "method-impl" :depends-on ("method-proto")) + (:file "method-aggregate" :depends-on ("method-impl")) + + ;; Class output. + (:file "class-output" + :depends-on + ("classes" "class-layout-impl" "method-impl" "output-proto")) + + ;; Finishing touches of various kinds. + (:file "final" :depends-on ("builtin" "module-output" "class-output")))) + +(defsystem sod/frontend + + ;; Boring copyright stuff. + :version #.*sysdef-version* + :author "Mark Wooding" + :license "GNU General Public License, version 2 or later" + #|@-path-@|# :pathname "@srcdir@" + + ;; Documentation. + :description "A Sensible Object Design for C, command-line frontend." + + :long-description + "The Sensible Object Design (SOD) is a fairly simple, yet powerful object + system for plain old C. + + This system provides a command-line interface to the SOD translator. It's + a separate system because it has additional dependencies and + Lisp-system-specific code." + + :entry-point "sod-frontend:main" + :build-pathname "sod" + :depends-on ("uiop" "sod") + :components ((:file "frontend"))) ;;;-------------------------------------------------------------------------- ;;; Testing. -(defmethod perform ((op test-op) (component (eql (find-system "sod")))) - (declare (ignore op component)) - (handler-bind (((or warning style-warning) #'muffle-warning)) - (operate 'test-op "sod-test"))) +(defsystem sod/test + + ;; Boring copyright stuff. + :version #.*sysdef-version* + :author "Mark Wooding" + :license "GNU General Public License, version 2 or later" + #|@-path-@|# :pathname "@srcdir@" + + ;; Documentation. + :description "Tests for the Sensible Object Design translator." + + :long-description + "This system provides unit tests for the Sod translator." + + :depends-on ("sod" "xlunit") + + :components + ((:file "test-base") + + ;; Test the parser edifice. + (:module "parser" + :depends-on ("test-base") + :components ((:file "parser-test") + (:file "scanner-charbuf-test"))) + + ;; The actual tests. + (:file "c-types-test" :depends-on ("test-base")) + (:file "codegen-test" :depends-on ("test-base")) + (:file "lexer-test" :depends-on ("test-base")))) ;;;----- That's all, folks --------------------------------------------------