;;; -*- Mode:LISP; Package:USER; Readtable:CL; Base:10 -*-

;(defsystem laser1+
;  (:name "Laser1+")
;  (:pathname-default "laser:laser1+;")
;  (:patchable)
;  (:module main "laser1+")
;  (:compile-load main))

(defconst *systems-path* "sys:site;"
  "Pathname string location of place to put module/system definition files")

;;; (cl-system "it:keith;alchemy")
;;;   =>
;;; (defsystem alchemy
;;;   (:name "Alchemy")
;;;   (:pathname-default "it:keith;")
;;;   (:patchable)
;;;   (:module main "alchemy"
;;;   (:compile-load main))

(defun cl-system(pathname &key pretty syspath)
  (let*((sys-str  (string-trim " " (file-namestring pathname)))
	(sys-symb (intern sys-str))
	(sys-file (merge-pathnames
		    (or syspath *systems-path*)
		    (merge-pathnames sys-str "*.SYSTEM")))
	(sys-prty (format nil "~:(~a~)" (or pretty sys-str)))
	(sys-def  (merge-pathnames
		    (merge-pathnames (string-append sys-str "-sysdef") "*.LISP")
		    pathname))
	(sys-dflt (merge-pathnames "*.*#>" pathname))
	(defile   `(si:set-system-source-file ',sys-symb ,(namestring sys-def)))
	(defsys `(defsystem ,sys-symb
		   (:name ,sys-prty)
		   (:pathname-default ,(namestring sys-dflt))
		   (:patchable)
		   (:module main ,sys-str)
		   (:compile-load main))))
    (pprint defile)
    (pprint defsys)
    (with-open-file (out sys-file :direction :output)
      (pprint defile out))
    (with-open-file (out sys-def :direction :output)
      (pprint defsys out))
    (list sys-file sys-def)))
