diff --git a/make-exe b/make-exe new file mode 100755 index 0000000..c9d5bc3 --- /dev/null +++ b/make-exe @@ -0,0 +1 @@ +sbcl --eval "(ql:quickload :clog/tools)" --eval "(sb-ext:save-lisp-and-die #P\"./builder\" :toplevel (lambda () (clog-tools:clog-builder :app t)(loop (sleep 10))) :executable t :compression t)" diff --git a/run-builder b/run-builder index 51e01a0..b1b56cd 100755 --- a/run-builder +++ b/run-builder @@ -1 +1 @@ -sbcl --eval "(ql:quickload :clog/tools)" --eval "(clog-tools:clog-builder)" +sbcl --eval "(ql:quickload :clog/tools)" --eval "(clog-tools:clog-builder :app t)" diff --git a/source/clog-connection.lisp b/source/clog-connection.lisp index 2600257..292e62e 100644 --- a/source/clog-connection.lisp +++ b/source/clog-connection.lisp @@ -37,6 +37,7 @@ script." (*break-on-error* variable) (initialize function) + (random-port function) (shutdown-clog function) (set-on-connect function) (set-clog-path function) @@ -367,6 +368,17 @@ the default answer. (Private)" (format t "Condition caught in clog-server start-up - ~A.~&" c) (values 0 c)))) +;;;;;;;;;;;;;;;;; +;; random-port ;; +;;;;;;;;;;;;;;;;; + +(defun random-port (&key (host "0.0.0.0")) + "Return a random open port on host" + (let* ((l (usocket:socket-listen host 0)) + (p (usocket:get-local-port l))) + (usocket:socket-close l) + p)) + ;;;;;;;;;;;;;;;; ;; initialize ;; ;;;;;;;;;;;;;;;; diff --git a/tools/clog-builder.lisp b/tools/clog-builder.lisp index 9ba0a13..01de085 100644 --- a/tools/clog-builder.lisp +++ b/tools/clog-builder.lisp @@ -2973,16 +2973,20 @@ of controls and double click to select control." (create-gui-menu-full-screen menu)) (on-show-control-properties-win body) (on-show-control-list-win body) -;; (on-show-control-events-win body) (on-show-copy-history-win body) -;; (on-new-builder-panel body) (on-show-project body :project *start-project*) (set-on-before-unload (window body) (lambda(obj) (declare (ignore obj)) ;; return empty string to prevent nav off page - "")))) + ""))) + (run body) + (when *app-mode* + (clog:shutdown) + (uiop:quit))) -(defun clog-builder (&key (port 8080) project static-root system) +(defparameter *app-mode* nil) + +(defun clog-builder (&key (port 8080) app project static-root system) "Start clog-builder." (if project (setf *start-project* (string-downcase (format nil "~A" project))) @@ -2990,6 +2994,9 @@ of controls and double click to select control." (when system (setf static-root (merge-pathnames "./www/" (asdf:system-source-directory system)))) + (when app + (setf *app-mode* t) + (setf port (clog-connection:random-port))) (if static-root (initialize nil :port port :static-root static-root) (initialize nil :port port))