make 'eql5' executable independant from source installation (e.g. for eql5 -qgui, Slime)

This commit is contained in:
polos 2019-02-27 21:47:39 +01:00
parent dbb1c6085e
commit b2c280bed4
26 changed files with 126 additions and 41 deletions

View file

@ -7,7 +7,7 @@
(in-package :eql-user)
#+linux
(qauto-reload-c++ *lib* (in-home "Qt_EQL/eql_cpp"))
(qauto-reload-c++ *lib* (in-src "Qt_EQL/eql_cpp"))
#+linux
(setf *lib-reloaded* 'show-current-apropos)

View file

@ -2,7 +2,7 @@
(in-package :eql-user)
(defvar *lib* (qload-c++ (in-home "Qt_EQL/eql_fun_cpp")))
(defvar *lib* (qload-c++ (in-src "Qt_EQL/eql_fun_cpp")))
(defun say-number (n)
(format nil "~R" n))

View file

@ -17,14 +17,14 @@
(in-package :eql-user)
(defvar *lib* (qload-c++ (in-home "Qt_EQL/eql_cpp")))
(defvar *lib* (qload-c++ (in-src "Qt_EQL/eql_cpp")))
(defun recompile-c++ ()
(qload-c++ (in-home "Qt_EQL/eql_cpp")
(qload-c++ (in-src "Qt_EQL/eql_cpp")
:unload)
(ext:run-program #+msvc "make.bat" #-msvc "make"
#+msvc nil #-msvc '("-C" "cpp/")
:output t)
(setf *lib* (qload-c++ (in-home "Qt_EQL/eql_cpp")))
(setf *lib* (qload-c++ (in-src "Qt_EQL/eql_cpp")))
(assert (qt-object-p *lib*))
(qapropos nil *lib*))

View file

@ -1,6 +1,6 @@
(in-package :eql-user)
(defvar *lib* (qload-c++ (in-home "Qt_EQL/eql_cpp")))
(defvar *lib* (qload-c++ (in-src "Qt_EQL/eql_cpp")))
(assert (qt-object-p *lib*))

View file

@ -1,6 +1,6 @@
(in-package :eql-user)
(defvar *trafficlight* (qload-c++ (in-home "Qt_EQL/trafficlight/trafficlight")))
(defvar *trafficlight* (qload-c++ (in-src "Qt_EQL/trafficlight/trafficlight")))
(defvar *lights* (qfind-children *trafficlight* nil "LightWidget"))
(defvar *red* (first *lights*))
(defvar *yellow* (second *lights*))

View file

@ -5,7 +5,7 @@
(in-package :main-window)
(defvar *main* (qload-ui (in-home "examples/data/main-window.ui")))
(defvar *main* (qload-ui (in-src "examples/data/main-window.ui")))
(defvar *editor* (qfind-child *main* "editor"))
(defvar *action-open* (qfind-child *main* "action_open"))
(defvar *action-save* (qfind-child *main* "action_save"))
@ -24,7 +24,7 @@
(defun set-icon-from-file (action name)
"Icon from custom pixmap."
(|setIcon| action (qnew "QIcon(QString)"
(in-home (format nil "examples/data/icons/~A.png" name)))))
(in-src (format nil "examples/data/icons/~A.png" name)))))
(defun start ()
(x:do-with (qset *main*)
@ -34,7 +34,7 @@
(set-icon *action-save* "document-save")
(qconnect *action-open* "triggered()" 'file-open)
(qconnect *action-save* "triggered()" 'file-save)
(|setHtml| *editor* (read-file (in-home "examples/data/utf8.htm")))
(|setHtml| *editor* (read-file (in-src "examples/data/utf8.htm")))
(x:do-with *main* |show| |raise|))
(defun file-open ()

View file

@ -181,7 +181,7 @@
(|setRenderHint| |QPainter.Antialiasing|)
(|setBackgroundBrush| (qnew "QBrush(QPixmap)"
(qnew "QPixmap(QString)"
(in-home "examples/data/icons/cheese.jpg"))))
(in-src "examples/data/icons/cheese.jpg"))))
(|setCacheMode| |QGraphicsView.CacheBackground|)
(|setViewportUpdateMode| |QGraphicsView.BoundingRectViewportUpdate|)
(|setDragMode| |QGraphicsView.ScrollHandDrag|))

View file

@ -18,8 +18,8 @@
;;;
;;; ------------------------------------------------------------------------
(load (eql:in-home "examples/7-Sokoban/3rd-party/sokoban"))
(load (eql:in-home "examples/7-Sokoban/3rd-party/levels"))
(load (eql:in-src "examples/7-Sokoban/3rd-party/sokoban"))
(load (eql:in-src "examples/7-Sokoban/3rd-party/levels"))
(defpackage :eql-sokoban
(:use :common-lisp :eql)

View file

@ -37,11 +37,11 @@
(x:let-it (make-string (file-length s))
(read-sequence x:it s))))
(defun in-home* (name)
(in-home "examples/9-simple-lisp-editor/" name))
(defun in-src* (name)
(in-src "examples/9-simple-lisp-editor/" name))
(defun from-file (name)
(eval (read-from-string (read-file (in-home* name) :do-not-set))))
(eval (read-from-string (read-file (in-src* name) :do-not-set))))
(defparameter *auto-indent* (from-file "data/auto-indent.lisp"))
(defparameter *eql-keywords* (from-file "data/eql-keywords.lisp"))
@ -64,7 +64,7 @@
;;; Qt
(defvar *main* (qload-ui (in-home* "data/editor.ui")))
(defvar *main* (qload-ui (in-src* "data/editor.ui")))
(defvar-ui *main*
*editor*
@ -1029,7 +1029,7 @@
(defun run-on-server (str &optional restart)
(flet ((path-to-server (name)
(x:when-it (probe-file (in-home "examples/9-simple-lisp-editor/" name))
(x:when-it (probe-file (in-src "examples/9-simple-lisp-editor/" name))
(namestring x:it))))
(qprocess-events)
(or (local-client:request str)

View file

@ -111,7 +111,7 @@
(x:let-it (qnew "QPixmap")
(! "loadFromData" x:it
;; embed data
#.(file-data (in-home "examples/9-simple-lisp-editor/data/local_server.png"))
#.(file-data (in-src "examples/9-simple-lisp-editor/data/local_server.png"))
"PNG")))))
(menu (qnew "QMenu"))
(quit (qnew "QAction(QObject*)" menu

View file

@ -2,12 +2,12 @@
(qrequire :multimedia)
(require :ui (in-home "examples/M-modules/multimedia/camera/ui/ui-camera"))
(require :ui-image (in-home "examples/M-modules/multimedia/camera/ui/ui-image-settings"))
(require :ui-video (in-home "examples/M-modules/multimedia/camera/ui/ui-video-settings"))
(require :ui (in-src "examples/M-modules/multimedia/camera/ui/ui-camera"))
(require :ui-image (in-src "examples/M-modules/multimedia/camera/ui/ui-image-settings"))
(require :ui-video (in-src "examples/M-modules/multimedia/camera/ui/ui-video-settings"))
(require :image-settings (in-home "examples/M-modules/multimedia/camera/image-settings"))
(require :video-settings (in-home "examples/M-modules/multimedia/camera/video-settings"))
(require :image-settings (in-src "examples/M-modules/multimedia/camera/image-settings"))
(require :video-settings (in-src "examples/M-modules/multimedia/camera/video-settings"))
(defpackage :camera
(:use :common-lisp :eql)

View file

@ -2,7 +2,7 @@
(qrequire :multimedia)
(require :ui (in-home "examples/M-modules/multimedia/video-graphics-item/ui/ui-video-graphics-item"))
(require :ui (in-src "examples/M-modules/multimedia/video-graphics-item/ui/ui-video-graphics-item"))
(defpackage :video-item
(:nicknames :vi)

View file

@ -2,7 +2,7 @@
(qrequire :multimedia)
(require :ui (in-home "examples/M-modules/multimedia/video-widget/ui/ui-video-widget"))
(require :ui (in-src "examples/M-modules/multimedia/video-widget/ui/ui-video-widget"))
(defpackage :video-widget
(:nicknames :vw)

View file

@ -5,7 +5,7 @@
(qrequire :quick)
(defun example-url (name)
(|fromLocalFile.QUrl| (in-home (x:cc "examples/M-modules/quick/quickwidget/qml/" name))))
(|fromLocalFile.QUrl| (in-src (x:cc "examples/M-modules/quick/quickwidget/qml/" name))))
(defvar *mdi-area* (qnew "QMdiArea"))
(defvar *quick-widget-1* (qnew "QQuickWidget(QUrl)" (example-url "example-1.qml")))

View file

@ -103,7 +103,7 @@
*ini-file* ini-file)
;; QNetworkAccessManager does it all for us (asynchroneous, parallel download)
(dolist (name file-names)
(download (|fromUserInput.QUrl| (in-home "examples/" name)) ; change this to a network location
(download (|fromUserInput.QUrl| (in-src "examples/" name)) ; change this to a network location
id
name))))))

View file

@ -4,7 +4,7 @@
(in-package :eql-user)
(require :ui (in-home "examples/M-modules/webkit/ui/ui-dom")) ; generated: "eql5 -quic dom.ui"
(require :ui (in-src "examples/M-modules/webkit/ui/ui-dom")) ; generated: "eql5 -quic dom.ui"
(defun ini (&optional url)
(ui:ini t)

View file

@ -13,7 +13,7 @@
;;; cpp plugin
;;;
(defvar *c++* (qload-c++ (in-home "examples/X-extras/move-blocks/cpp/easing_curve")))
(defvar *c++* (qload-c++ (in-src "examples/X-extras/move-blocks/cpp/easing_curve")))
(defvar *custom-easing-curve* (! "easingCurve" (:qt *c++*)))
(let ((sub 0)
@ -47,7 +47,7 @@
;;; user interface
;;;
(defvar *main* (qload-ui (in-home "examples/X-extras/move-blocks/move-blocks.ui")))
(defvar *main* (qload-ui (in-src "examples/X-extras/move-blocks/move-blocks.ui")))
(defvar-ui *main*
*custom*

View file

@ -16,7 +16,7 @@
(in-package :image-manipulation)
(defvar *main* (qload-ui (in-home "examples/X-extras/qimage/qimage.ui")))
(defvar *main* (qload-ui (in-src "examples/X-extras/qimage/qimage.ui")))
(defvar-ui *main*
*display*
@ -35,13 +35,13 @@
*scale*)
;; C++ plugin
(defvar *c++* (qload-c++ (in-home "examples/X-extras/qimage/cpp/qimage")))
(defvar *c++* (qload-c++ (in-src "examples/X-extras/qimage/cpp/qimage")))
(define-qt-wrappers *c++*)
(defvar *file* (x:if-it (third (remove-if (lambda (arg) (x:starts-with "-" arg))
(|arguments.QCoreApplication|)))
x:it
(in-home "examples/X-extras/qimage/vernazza.jpg")))
(in-src "examples/X-extras/qimage/vernazza.jpg")))
(defvar *image* (qnew "QImage(QString)" *file*))
(defvar *color-image* *image*)

View file

@ -2,7 +2,7 @@
(in-package :eql-user)
(defvar *pixmap* (qnew "QPixmap(QString)" (in-home "examples/X-extras/screenshot/camera.png")))
(defvar *pixmap* (qnew "QPixmap(QString)" (in-src "examples/X-extras/screenshot/camera.png")))
(defvar *splash* (qnew "QSplashScreen(QPixmap,Qt::WindowFlags)" *pixmap* |Qt.WindowStaysOnTopHint|
"font" (x:let-it (|font.QApplication|)

View file

@ -8,7 +8,7 @@
#include <QTimer>
#include <QStringList>
const char EQL::version[] = "17.10.1"; // October 2017
const char EQL::version[] = "19.2.1"; // February 2019
extern "C" void ini_EQL(cl_object);

View file

@ -22,3 +22,5 @@ osx {
}
SOURCES += main.cpp
RESOURCES = eql_exe.qrc

35
src/eql_exe.qrc Normal file
View file

@ -0,0 +1,35 @@
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file>../doc/auto-doc.htm</file>
<file>../doc/debug-dialog.png</file>
<file>../doc/Debugging.htm</file>
<file>../doc/Deploy.htm</file>
<file>../doc/EQL.png</file>
<file>../doc/EQL-Slime-Integration.htm</file>
<file>../doc/index.html</file>
<file>../doc/Notes.htm</file>
<file>../doc/QtDesigner.htm</file>
<file>../doc/QtLinguist.htm</file>
<file>../doc/Slime.htm</file>
<file>../doc/Slime-REPL-hook.htm</file>
<file>../doc/style.css</file>
<file>../lib/ecl-readline.lisp</file>
<file>../lib/gui.lisp</file>
<file>../lib/gui.ui</file>
<file>../lib/invokables.lisp</file>
<file>../lib/properties.lisp</file>
<file>../lib/properties.ui</file>
<file>../lib/qselect.lisp</file>
<file>../lib/quic.lisp</file>
<file>../lib/restart-dialog.lisp</file>
<file>../lib/thread-safe.lisp</file>
<file>../slime/.swank.lisp</file>
<file>../slime/eql-start-swank.lisp</file>
<file>../slime/README.txt</file>
<file>../slime/repl-hook.lisp</file>
</qresource>
</RCC>

View file

@ -2,8 +2,8 @@
(eql:qrequire :webengine)
(load (in-home "helper/my-class-lists/webengine/n-names"))
(load (in-home "helper/my-class-lists/webengine/q-names"))
(load (in-src "helper/my-class-lists/webengine/n-names"))
(load (in-src "helper/my-class-lists/webengine/q-names"))
(defvar *objects* (qobject-names))
(defvar *webengine-objects* (append *webengine-n-names* *webengine-q-names*))
@ -122,7 +122,7 @@
;; add only new function names (checking with 'grep')
(dotimes (i 12) ; TODO: keep in sync!
(when (zerop (|execute.QProcess| "grep" (list lisp-name
(in-home (format nil "src/lisp/all-wrappers-~D.lisp" (1+ i))))))
(in-src (format nil "src/lisp/all-wrappers-~D.lisp" (1+ i))))))
(setf found t)
(return)))
(unless found

View file

@ -158,13 +158,19 @@
(defun %windows-version ()
(qfun "QSysInfo" "windowsVersion"))
(let ((eql5-home #.(let ((path (namestring *default-pathname-defaults*))) ; hard-code EQL5 directory
(subseq path 0 (- (length path) 4))))) ; cut "src/"
(let ((eql5-home (namestring (merge-pathnames ".eql5/" (user-homedir-pathname)))))
(defun set-home (path)
(setf eql5-home path))
(defun in-home (&rest files)
(apply 'concatenate 'string eql5-home files)))
(let ((eql5-src #.(let ((path (namestring *default-pathname-defaults*))) ; hard-code EQL5 directory
(subseq path 0 (- (length path) (length "src/"))))))
(defun set-src (path)
(setf eql5-src path))
(defun in-src (&rest files)
(apply 'concatenate 'string eql5-src files)))
(defun qsignal (name)
"args: (name)
Needed in functions which expect a <code>const char*</code> Qt signal (not needed in <code>qconnect</code>)."

View file

@ -12,6 +12,7 @@
#:defvar-ui
#:ensure-qt-object
#:in-home
#:in-src
#:make-qimage
#:new-qt-object
#:qadd-event-filter

View file

@ -5,6 +5,46 @@
#include <iostream>
#include <eql5/eql.h>
void ini() {
QString home(QDir::homePath() + "/.eql5/");
if(!QFile::exists(home + "lib/gui.lisp")) {
QDir dir(QDir::homePath());
dir.mkdir(".eql5");
dir.setPath(home);
dir.mkdir("doc");
dir.mkdir("lib");
dir.mkdir("slime");
QStringList files = QStringList()
<< "doc/auto-doc.htm"
<< "doc/debug-dialog.png"
<< "doc/Debugging.htm"
<< "doc/Deploy.htm"
<< "doc/EQL.png"
<< "doc/EQL-Slime-Integration.htm"
<< "doc/index.html"
<< "doc/Notes.htm"
<< "doc/QtDesigner.htm"
<< "doc/QtLinguist.htm"
<< "doc/Slime.htm"
<< "doc/Slime-REPL-hook.htm"
<< "doc/style.css"
<< "lib/ecl-readline.lisp"
<< "lib/gui.lisp"
<< "lib/gui.ui"
<< "lib/invokables.lisp"
<< "lib/properties.lisp"
<< "lib/properties.ui"
<< "lib/qselect.lisp"
<< "lib/quic.lisp"
<< "lib/restart-dialog.lisp"
<< "lib/thread-safe.lisp"
<< "slime/.swank.lisp"
<< "slime/eql-start-swank.lisp"
<< "slime/README.txt"
<< "slime/repl-hook.lisp";
Q_FOREACH(QString file, files) {
QFile::copy(":/" + file, home + file); }}}
int catch_all_qexec() {
int ret = 0;
CL_CATCH_ALL_BEGIN(ecl_process_env()) {
@ -22,6 +62,7 @@ int main(int argc, char** argv) {
if(args.contains("-h") || (args.contains("--help"))) {
std::cout << "Usage: eql5 [file] [-qtpl] [-qgui] [-quic file.ui [:ui-package] [:maximized]] [-slime] [-norc]" << std::endl;
exit(0); }
ini();
QTextCodec* utf8 = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForLocale(utf8);