Commit 338f2da7 authored by Dave Cooper's avatar Dave Cooper
Browse files

Merge branch 'release/1596'

parents e0685e98 185c2776
Pipeline #4100 passed with stages
in 5 minutes and 48 seconds
#!/bin/bash
set -e
OS="$1"
task="$2"
status="$(curl -s "http://localhost:9000/build?command=build&os=${OS}&branch=$CI_BUILD_REF_NAME&task=${task}&ci-job-id=$CI_JOB_ID&ci-pipeline-id=$CI_PIPELINE_ID&gdl-current-version=1596")"
#status="$(curl -s "http://ssh.genworks.com:9000/build?command=build&os=linux&branch=devo&cijobid=$CI_JOB_ID")"
echo "Testing status of curl command..."
if [ "${status}" == "0" ]
then
echo "Success."
exit 0
else
echo "Fail."
echo "${status}" >&2
exit 1
fi
......@@ -4,11 +4,13 @@
*.fas
*.xfasl
*.dx64fsl
*.lx64fsl
*.wx64fsl
*.64xfasl
*.lib
bin
*~
*/#*#
#*#
.DS_Store
......@@ -33,3 +35,5 @@ system-index.txt
# Ignore objects and archives.
# *.[oa]
documentation/tutorial/images/example*
documentation/tutorial/pdf
\ No newline at end of file
stages:
- update
- build
- containerize
# - inno
# - mint
# - test
# - deploy
update:
stage: update
script:
- bash -x ./.ci-script.sh linux git-pull
# - bash -x ./.ci-script.sh windows rsync-from-manager
# - bash -x ./.ci-script.sh macos rsync-from-manager
linux-build:
stage: build
# only:
# - master
script:
- bash -x ./.ci-script.sh linux build-gendl
windows-build:
stage: build
only:
- master
script:
- bash -x ./.ci-script.sh windows build-gendl
#
# FLAG - Maybe put back later.
#
# macos-build:
# stage: build
# only:
# - master
# script:
# - bash -x ./.ci-script.sh macos build-gendl
containerize:
stage: containerize
script:
- bash -x ./docker/build
# Contributing
Genworks may offer AGPL license exception credits or other incentives
as consideration for code contributions (e.g. bugfixes, ports) made
via gitlab merge requests, under the terms of our Contributor's
Agreement. Please contact [Genworks](http://gen.works) for details.
##Gendl®
## Gendl
Pre-built Distributions available here:
### Docker Quick-start
http://gendl.com
The Continuous Integration for this repository at
[the common-lisp.net gitlab](https://gitlab.common-lisp.net/gendl/gendl.git) maintains a
cutting-edge docker image, based on the `devo` branch, at
[Docker Hub](https://hub.docker.com/repository/docker/dcooper8/gendl).
There are some convenience scripts in this repository which can help
you use this image:
1. Install Gnu emacs on your host if it's not already.
2. In Emacs, do `M-x load-file [Enter]` and specify
`gendl/emacs/gdl.el` to be loaded. This should set up your emacs
with Slime (needed to connect to the Gendl swank listener coming
in the next step). (if you already have Slime loaded into your
emacs environment, then this step may not be needed).
3. Invoke the `gendl/docker/run` script in this repository. This will
spin up a pre-built Gendl image based on CCL (Clozure CL), with
Swank listening on port 4200 mapped to port 4200 on your docker
host. At this point, you can do `M-x slime-connect` and connect to
`localhost` on port `4200`, and you'll be connected and ready to
start developing with Gendl!
### Overview
Gendl® is a Generative Programming and Knowledge Based Engineering
framework, implementing concepts which date back to the 1980s and
......@@ -22,10 +46,10 @@ allows you to specify inputs, outputs (`computed-slots`), and child
objects, which then gives the ability to generate a "tree" of objects,
useful for decomposing complexity.
A graphical web-based interface, *tasty*, is available for interacting
A graphical web-based interface, *geysr*, is available for interacting
with your system as it is developed.
The web-based GUI framework used to make tasty (GWL) is also available
The web-based GUI framework used to make geysr (GWL) is also available
for creating your own custom web-based user interfaces.
### Fundamental KBE Features Provided
......@@ -47,18 +71,17 @@ use of standard CAD data exchange formats such as Iges, STEP, and STL
### Basic Requirements:
1. Common Lisp: Allegro CL 9.0, LispWorks 6.x, SBCL, or CCL (Clozure
CL). Without web interface, initial ports to ECL, ABCL, and CLISP
have also been completed.
1. Common Lisp: Allegro CL, LispWorks, CCL (Clozure CL), or
SBCL. Without web interface, initial ports to ECL, ABCL, and CLISP
have also been completed.
2. Quicklisp (available from http://www.quicklisp.org)
3. Gnu Emacs (recommended Editor/IDE -- native CL Editor/IDEs can
also be used)
4. Standard Web Browser (Chrome, Firefox, Safari, IE, Opera). Pick
one with WebGL support if possible (check
[here](http://www.x3dom.org/?page_id=9) and
4. Standard Web Browser. Pick one with WebGL support if possible
(check [here](http://www.x3dom.org/?page_id=9) and
[here](http://www.x3dom.org/check/) to check for WebGL browser
support)
......@@ -67,6 +90,7 @@ use of standard CAD data exchange formats such as Iges, STEP, and STL
### Installation
To load the entire system, you can do it with:
```common-lisp
......@@ -76,39 +100,52 @@ use of standard CAD data exchange formats such as Iges, STEP, and STL
Now you can do a quick sanity check by visiting:
[http://localhost:9000/tasty](http://localhost:9000/tasty)
[http://localhost:9000/geysr](http://localhost:9000/geysr)
in your browser and trying to instantiate the default assembly tree
(robot).
(robot) with File -> New [robot:assembly].
### Emacs Editor/IDE Support
Slime (Superior Lisp Interaction Mode for Emacs) is recommended
for developing Gendl applications with Emacs.
Slime is available with:
(ql:quickload :quicklisp-slime-helper)
Slime is available by doing `M-x load-file [ret]` in emacs, and
selecting the file `gdl/emacs/gdl.el`.
`Glime' is our Gendl-specific customizations to Slime. This is
implemented entirely on the swank (Common Lisp) side of things, and
can be loaded with
`Glime' is our Gendl-specific customizations to Slime (still
experimental). This is implemented both on the swank (Common Lisp)
side of things, and on the slime (emacs) side of things, and can be
loaded with
```common-lisp
(load (compile-file ".../gendl/emacs/glime.lisp"))
```
in CL, and
```
M-x load-file [Ret] .../gendl/emacs/glime.el
```
on the emacs side.
Although not strictly necessary, the file `.../gendl/emacs/gdl.el` is
also provided and can be used as a starting point or reference for
loading Glime and Gendl into an emacs environment.
### Further Documentation
Documentation is published
[here](http://gen.works/downloads/tutorial.pdf), and this very much
an active work in progress. Training tutorials and videos are also in
progress and in their current state are available in the Documentation
section on http://gen.works.
Also, more detail on operating the emacs environment can be found
in `gdl/emacs/README.txt`.
Further documentation is published
[here](http://genworks.com/documentation).
### Support/Community
......@@ -165,7 +202,7 @@ Including the base, there are eight modules supported with Gendl:
primitives (these don't do much without the underlying geometry
kernel middleware or implementation).
* `:tasty` - (gendl/apps/tasty/) web-based testing, tracking, and
* `:geysr` - (gendl/apps/geysr/) web-based testing, tracking, and
debugging utility.
* `:yadd` - (gendl/apps/yadd/) for self auto-documentation.
......@@ -175,10 +212,10 @@ Including the base, there are eight modules supported with Gendl:
### Alternative Geometry Kernels
If you have a different favorite solid modeling kernel
(e.g. OpenCascade, Parasolid, Geometros sgCore), then an interesting
project would be to interface the existing Surface package to that
kernel, by implementing the methods in surf/source/methods.lisp.
If you have a different favorite solid modeling kernel, then an
interesting project would be to interface the existing Surface package
to that kernel, by implementing the methods in
surf/source/methods.lisp.
The Surface (`:surf`) package (in the `surf/` folder) contains all the
high-level Surface and Solid modeling primitives currently implemented
......@@ -205,20 +242,15 @@ distributed at all).
For Proprietary (closed-source) development and distribution, the
commercial Genworks® GDL system (including Gendl® technology and,
optionally, commercial CL engines, technical support, and commercial
solid modeling engine) is available from [Genworks](http://gen.works).
### Bug Bounty Program, Bug Fix Program
Genworks offers a modest bounty for reporting (and sometimes solving)
of bugs on the [Issues
List](https://gitlab.common-lisp.net/gendl/gendl/issues?scope=all&state=opened).
Please contact [Genworks](http://gen.works) for details.
solid modeling engine) is available from [Genworks](http://genworks.com).
### Contributing
Genworks may offer AGPL license exception credits or other incentives
as consideration for code contributions (e.g. bugfixes, ports) made
via gitlab merge requests, under the terms of our Contributor's
Agreement. Please contact [Genworks](http://gen.works) for details.
......@@ -3,11 +3,8 @@
(asdf:defsystem #:dom :description
"The Gendl® dom Subsystem" :author "Genworks International" :license
"Affero Gnu Public License (http://www.gnu.org/licenses/)" :serial t
:version "20181023" :depends-on (:cl-who :yadd)
#-asdf-unicode :defsystem-depends-on #-asdf-unicode (:asdf-encodings)
#+asdf-unicode :defsystem-depends-on #+asdf-unicode ()
#+asdf-encodings :encoding #+asdf-encodings :utf-8
:components
:version "20210427" :depends-on (:cl-who :yadd)
:defsystem-depends-on nil :components
((:file "base/source/package") (:file "base/source/assembly")
(:file "writers/source/package")
(:file "writers/source/dom-writer") (:file "writers/source/html")
......
system-index.txt
;;
;; Copyright 2020 Genworks International
;;
;; This source file is part of the General-purpose Declarative
;; Language project (Gendl).
;;
;; This source file contains free software: you can redistribute it
;; and/or modify it under the terms of the GNU Affero General Public
;; License as published by the Free Software Foundation, either
;; version 3 of the License, or (at your option) any later version.
;;
;; This source file is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;; Affero General Public License for more details.
;;
;; You should have received a copy of the GNU Affero General Public
;; License along with this source file. If not, see
;; <http://www.gnu.org/licenses/>.
;;
":gendl-asdf"
\ No newline at end of file
;;
;; Copyright 2020 Genworks International
;;
;; This source file is part of the General-purpose Declarative
;; Language project (Gendl).
;;
;; This source file contains free software: you can redistribute it
;; and/or modify it under the terms of the GNU Affero General Public
;; License as published by the Free Software Foundation, either
;; version 3 of the License, or (at your option) any later version.
;;
;; This source file is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;; Affero General Public License for more details.
;;
;; You should have received a copy of the GNU Affero General Public
;; License along with this source file. If not, see
;; <http://www.gnu.org/licenses/>.
;;
(:gwl-graphics)
\ No newline at end of file
"Web-based Development Environment (geysr)"
\ No newline at end of file
......@@ -3,13 +3,12 @@
(asdf:defsystem #:geysr :description
"The Gendl® geysr Subsystem" :author "Genworks International"
:license "Affero Gnu Public License (http://www.gnu.org/licenses/)"
:serial t :version "20181204" :depends-on (:gwl-graphics)
#-asdf-unicode :defsystem-depends-on #-asdf-unicode (:asdf-encodings :gendl-asdf)
#+asdf-unicode :defsystem-depends-on #+asdf-unicode (:gendl-asdf)
#+asdf-encodings :encoding #+asdf-encodings :utf-8
:components
:serial t :version "20210427" :depends-on (:gwl-graphics)
:defsystem-depends-on (:gendl-asdf) :components
((:gdl "source/package") (:gdl "source/parameters")
(:gdl "source/assembly") (:gdl "source/initialize")
(:gdl "source/inspector") (:gdl "source/menu-node")
(:gdl "source/menu") (:gdl "source/tree") (:gdl "source/viewport")
(:gdl "source/assembly") (:file "source/iframe")
(:gdl "source/initialize") (:gdl "source/inspector")
(:gdl "source/menu-node") (:gdl "source/menu")
(:file "source/patches") (:gdl "source/tree")
(:gdl "source/user-inputs") (:gdl "source/viewport")
(:gdl "source/zzinit")))
(in-package :gdl-user)
(defparameter *systems* (list :gendl-patches :geysr))
(defparameter *monolithic-systems* (list :cl-markdown))
(load-quicklisp)
(defun ql-add-local (dir)
(pushnew dir ql:*local-project-directories* :test #'equalp))
(defparameter *geysr-home* (make-pathname :name nil :type nil :defaults *load-pathname*))
(defun make-geysr-fasl (&key (output (translate-logical-pathname "~/tmp/geysr/")))
(load-quicklisp)
(mapc #'ql-add-local (list "~/genworks/gendl-patches/" *geysr-home*))
(when (probe-file output)
(uiop:delete-directory-tree output :validate #'(lambda(arg) (search "tmp" (namestring arg)))))
(ensure-directories-exist output)
(dolist (system *monolithic-systems*)
(asdf:operate 'asdf:monolithic-compile-bundle-op system)
(let ((path (asdf:output-file 'asdf:monolithic-compile-bundle-op system)))
(uiop:copy-file path
(make-pathname :defaults output
:name (pathname-name path)
:type (pathname-type path)))))
(dolist (system *systems*)
(asdf:operate 'asdf:compile-bundle-op system)
(let ((path (asdf:output-file 'asdf:compile-bundle-op system)))
(uiop:copy-file path
(make-pathname :defaults output
:name (pathname-name path)
:type (pathname-type path)))))
(glisp:copy-directory (merge-pathnames "static/" (glisp:system-home :geysr))
(merge-pathnames "geysr-static/" output))
(with-open-file (out (merge-pathnames "load.lisp" output)
:direction :output :if-exists :supersede :if-does-not-exist :create)
(let ((format-string
(format nil "(in-package :gdl-user)
(defparameter *geysr-home* (make-pathname :name nil :type nil :defaults *load-pathname*))
~~{(load (merge-pathnames \"~~(~~a~~)--all-systems.~a\" *geysr-home*))~~^~~%~~}
~~{(load (merge-pathnames \"~~(~~a~~)--system.~a\" *geysr-home*))~~^~~%~~}
(geysr:initialize)
"
glisp:*fasl-extension* glisp:*fasl-extension*
)))
(format out format-string *monolithic-systems* *systems*))))
;;
;; Copyright 2020 Genworks International
;;
;; This source file is part of the General-purpose Declarative
;; Language project (Gendl).
;;
;; This source file contains free software: you can redistribute it
;; and/or modify it under the terms of the GNU Affero General Public
;; License as published by the Free Software Foundation, either
;; version 3 of the License, or (at your option) any later version.
;;
;; This source file is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;; Affero General Public License for more details.
;;
;; You should have received a copy of the GNU Affero General Public
;; License along with this source file. If not, see
;; <http://www.gnu.org/licenses/>.
;;
- Add ability to visit definition in source code for a node from geysr and from emacs.
- Add inspector inserted dirctly in tree under a node.
- Add inspector inserted directly in tree under a node.
;;;; -*- coding: utf-8 -*-
;;
;; Copyright (c) 2003, 2010 Genworks International, Bloomfield Hills,
;; MI, USA. The software, data and information contained herein are
;; proprietary to, and comprise valuable trade secrets of, Genworks
;; International and Genworks BV. They are given in confidence
;; pursuant to a written nondisclosure/noncompete license agreement,
;; and may be stored and used only in accordance with the terms of
;; such license.
;; Copyright 2020 Genworks International
;;
;; This source file is part of the General-purpose Declarative
;; Language project (Gendl).
;;
;; This source file contains free software: you can redistribute it
;; and/or modify it under the terms of the GNU Affero General Public
;; License as published by the Free Software Foundation, either
;; version 3 of the License, or (at your option) any later version.
;;
;; This source file is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;; Affero General Public License for more details.
;;
;; You should have received a copy of the GNU Affero General Public
;; License along with this source file. If not, see
;; <http://www.gnu.org/licenses/>.
;;
#|
ToDO:
x 1. Update welcome message to reflect empty object and refer to File->New.
2. Adjust spacing of tree for empty object to give enough room not to
obstruct File->New menu.
|#
(in-package :geysr)
......@@ -34,11 +57,29 @@
:input-slots
((viewport-dimensions (list :width 800 :length 550) :settable)
(design-mode? nil :settable))
(design-mode? nil :settable)
(user-mode?-default *user-mode?*)
(additional-css-links nil)
(empty-display-list-greeting
(with-cl-who-string ()
(:p (:h2 (fmt "Welcome to Geysr.")))
(:p (fmt
"Geysr is for inspecting Genworks GDL models
while you're developing them. You can see your
model structure in the tree at the upper left."))))
(menu-div-class nil)
(menu-div-style nil)
(menu-included-children :all))
:computed-slots
(
(user-mode? (the menu user-mode?))
(click-mode :add-leaves :settable)
(expand-mode :remember :settable)
......@@ -56,20 +97,33 @@
;; viewport image-format. Seems impossible to evaluate
;; newly injected <script src=...> with Ajax, though.
;;
(use-raphael? (not (the design-mode?)))
;;(use-raphael? (not (the design-mode?)))
(use-svgpanzoom? t) ;;(not (the design-mode?))
(use-x3dom? (not (the design-mode?)))
;;(use-x3dom? (not (the design-mode?)))
(use-x3dom? t)
(use-fontawesome? t)
(use-anyresize? (not (the design-mode?)))
;;(use-anyresize? (not (the design-mode?)))
(use-anyresize? t)
(root-object-type (read-from-string "robot:assembly") :settable)
(root-object-type nil :settable)
(root-object-type-valid? (and (the root-object-type)
(typep (ignore-errors
(find-class
(ignore-errors
(read-safe-string (the root-object-type)))))
'gdl-class)))
(root-object (the root-object-object) :settable)
(root-object-object (make-object (the root-object-type)
:god-parents (list self)
:strings-for-display (format nil "~s" (the root-object-type))))
(root-object-object
(when (the root-object-type-valid?)
(make-object (the root-object-type)
:god-parents (list self)
:strings-for-display (format nil "~s" (the root-object-type)))))
(ui-object nil :settable)
(additional-header-content
(with-cl-who-string ()
......@@ -90,10 +144,20 @@
(body-onpageshow (when (the use-ajax?) "gdlResize();"))
(body-onresize (when (the use-ajax?) "gdlResize();"))
(body-onpageload "gdlResize();")
(menu-clear-func #'(lambda()
(the (restore-slot-default! :ui-object))
(the viewport clear!)))
(local-css-link (with-cl-who-string ()
((:link :href "/geysr-static/styles.css" :rel "stylesheet"))
((:link :href "/geysr-static/menu.css" :rel "stylesheet"))))
(local-css-link
(with-cl-who-string ()
(string-append
(htm
((:link :href "/geysr-static/styles.css" :rel "stylesheet"))
((:link :href "/geysr-static/menu.css" :rel "stylesheet")))
(if (the additional-css-links)
(dolist (link (ensure-list (the additional-css-links)))
(htm ((:link :href link :rel "stylesheet")))) ""))))
(main-sheet-body
(with-cl-who-string (:indent t)
......@@ -104,8 +168,28 @@
(str (the menu main-div)))
((:div :id "tree" :class "cell tree") (str (the tree main-div)))
((:div :id "inspector" :class "cell inspector")
(str (if *user-mode?* (the user-inputs main-div) (the inspector main-div))))
((:div :id "viewport" :class "cell viewport"