Skip to content
slave.lisp 1.63 KiB
Newer Older
#+xcvb (module (:depends-on ("commands")))

(in-package :xcvb)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; slave builder ;;;;;;;;;;;;;;;;;;;;;;;;;;;

(define-command slave-builder
    (("slave-builder")
     (&rest keys &key)
     `(,@+build-option-spec+
       ,@+setup-option-spec+
       ,@+base-image-option-spec+
       ,@+source-registry-option-spec+
       (("output-path" #\o) :type string :initial-value "xcvb.mk" :documentation "specify output path")
       ,@+install-option-spec+
       ,@+workspace-option-spec+
       ,@+lisp-implementation-option-spec+
       ,@+cfasl-option-spec+
       ,@+verbosity-option-spec+
       ,@+profiling-option-spec+)
     "Build some project as a slave to the XCVB master (for internal use)"
     "Build some project as a slave to the XCVB master (for internal use)"
     (build))
  (multiple-value-bind (code makefile-dir)
      ;; Note that make-makefile calls handle-common-options for us.
      (apply 'make-build :master t :retry nil :exit nil keys)
    (unless (zerop code)
      (exit code))
    (let* ((*default-pathname-defaults* makefile-dir)
           (env (make-instance 'static-makefile-traversal))
           (issued
            (progn
              (build-command-for env (handle-target build))
              (reverse (traversed-build-commands-r env))))
           (manifest-spec (commands-to-manifest-spec env issued))
           (manifest-form (manifest-form manifest-spec)))
      (with-safe-io-syntax ()
        (write-string +xcvb-slave-greeting+)
        (write manifest-form :readably nil :pretty t :case :downcase)
        (write-string +xcvb-slave-farewell+))))