gnu: Add Ao.
* gnu/packages/engineering.scm (ao): New variable.
This commit is contained in:
		
							parent
							
								
									a966281f2d
								
							
						
					
					
						commit
						4534d85e70
					
				
					 1 changed files with 102 additions and 0 deletions
				
			
		|  | @ -3,6 +3,7 @@ | |||
| ;;; Copyright © 2015 Federico Beffa <beffa@fbengineering.ch> | ||||
| ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il> | ||||
| ;;; Copyright © 2016 David Thompson <davet@gnu.org> | ||||
| ;;; Copyright © 2016 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -29,11 +30,14 @@ | |||
|   #:use-module (guix utils) | ||||
|   #:use-module ((guix licenses) #:prefix license:) | ||||
|   #:use-module (guix build-system gnu) | ||||
|   #:use-module (guix build-system cmake) | ||||
|   #:use-module (gnu packages) | ||||
|   #:use-module (gnu packages algebra) | ||||
|   #:use-module (gnu packages autotools) | ||||
|   #:use-module (gnu packages base) | ||||
|   #:use-module (gnu packages bison) | ||||
|   #:use-module (gnu packages boost) | ||||
|   #:use-module (gnu packages check) | ||||
|   #:use-module (gnu packages compression) | ||||
|   #:use-module (gnu packages flex) | ||||
|   #:use-module (gnu packages fontutils) | ||||
|  | @ -45,6 +49,7 @@ | |||
|   #:use-module (gnu packages gnome) | ||||
|   #:use-module (gnu packages gtk) | ||||
|   #:use-module (gnu packages guile) | ||||
|   #:use-module (gnu packages image) | ||||
|   #:use-module (gnu packages linux)               ;FIXME: for pcb | ||||
|   #:use-module (gnu packages m4) | ||||
|   #:use-module (gnu packages maths) | ||||
|  | @ -460,3 +465,100 @@ you load several files on top of each other, do measurements on the displayed | |||
| image, etc.  Besides viewing Gerbers, you may also view Excellon drill files | ||||
| as well as pick-place files.") | ||||
|     (license license:gpl2+))) | ||||
| 
 | ||||
| (define-public ao | ||||
|   (let ((commit "0bc2354b8dcd1a82a0fd6647706b126045e52734")) | ||||
|     (package | ||||
|       (name "ao-cad")            ;XXX: really "ao", but it collides with libao | ||||
|       (version (string-append "0." (string-take commit 7))) | ||||
|       (source (origin | ||||
|                 (method git-fetch) | ||||
|                 (uri (git-reference | ||||
|                       (url "https://github.com/mkeeter/ao") | ||||
|                       (commit commit))) | ||||
|                 (sha256 | ||||
|                  (base32 | ||||
|                   "0lm7iljklafs8dhlvaab2yhwx4xymrdjrqk9c5xvn59hlvbgl1j5")) | ||||
|                 (file-name (string-append name "-" version "-checkout")) | ||||
|                 (modules '((guix build utils))) | ||||
|                 (snippet | ||||
|                  ;; Remove bundled libraries: Eigen, glm, and catch.  TODO: | ||||
|                  ;; Unbundle efsw <https://github.com/diegostamigni/efsw>. | ||||
|                  '(begin | ||||
|                     (delete-file-recursively "vendor") | ||||
| 
 | ||||
|                     ;; Use #include <catch.hpp>. | ||||
|                     (substitute* (find-files "." "\\.[ch]pp$") | ||||
|                       (("catch/catch\\.hpp") | ||||
|                        "catch.hpp")))))) | ||||
|       (build-system cmake-build-system) | ||||
|       (arguments | ||||
|        `(;; Have the RUNPATH of libao.so point to $libdir, where libefsw.so | ||||
|          ;; lives. | ||||
|          #:configure-flags (list (string-append "-DCMAKE_SHARED_LINKER_FLAGS=" | ||||
|                                                 "-Wl,-rpath=" | ||||
|                                                 (assoc-ref %outputs "out") | ||||
|                                                 "/lib")) | ||||
| 
 | ||||
|          #:phases | ||||
|          (modify-phases %standard-phases | ||||
|            (add-before 'build 'add-eigen-to-search-path | ||||
|              (lambda* (#:key inputs #:allow-other-keys) | ||||
|                ;; Allow things to find our own Eigen and Catch. | ||||
|                (let ((eigen (assoc-ref inputs "eigen"))) | ||||
|                  (setenv "CPLUS_INCLUDE_PATH" | ||||
|                          (string-append eigen "/include/eigen3:" | ||||
|                                         (getenv "CPLUS_INCLUDE_PATH"))) | ||||
|                  #t))) | ||||
|            (add-after 'install 'install-guile-bindings | ||||
|              (lambda* (#:key outputs #:allow-other-keys) | ||||
|                ;; Install the Guile bindings (the build system only installs | ||||
|                ;; libao.so.) | ||||
|                (let* ((out    (assoc-ref outputs "out")) | ||||
|                       (moddir (string-append out "/share/guile/site/2.0"))) | ||||
|                  (install-file "bind/libao.so" | ||||
|                                (string-append out "/lib")) | ||||
| 
 | ||||
|                  ;; Go to the source directory. | ||||
|                  (with-directory-excursion ,(string-append "../" | ||||
|                                                            name "-" version | ||||
|                                                            "-checkout") | ||||
|                    (substitute* "bind/guile/ao/bind.scm" | ||||
|                      (("\\(define libao \\(dynamic-link .*$") | ||||
|                       (string-append "(define libao (dynamic-link \"" | ||||
|                                      out "/lib/libao\")) ;"))) | ||||
| 
 | ||||
|                    (for-each (lambda (file) | ||||
|                                (install-file file | ||||
|                                              (string-append moddir | ||||
|                                                             "/ao"))) | ||||
|                              (find-files "bind/guile" "\\.scm$")) | ||||
| 
 | ||||
|                    (substitute* "bin/ao-guile" | ||||
|                      (("\\(add-to-load-path .*") | ||||
|                       (string-append "(add-to-load-path \"" moddir "\")"))) | ||||
| 
 | ||||
|                    (install-file "bin/ao-guile" | ||||
|                                  (string-append out "/bin")) | ||||
|                    #t))))))) | ||||
|       (native-inputs | ||||
|        `(("pkg-config" ,pkg-config))) | ||||
|       (inputs | ||||
|        `(("boost" ,boost) | ||||
|          ("catch" ,catch-framework) | ||||
|          ("libpng" ,libpng) | ||||
|          ("glfw" ,glfw) | ||||
|          ("libepoxy" ,libepoxy) | ||||
|          ("eigen" ,eigen) | ||||
|          ("glm" ,glm) | ||||
|          ("guile" ,guile-2.0))) | ||||
|       (home-page "http://www.mattkeeter.com/projects/ao/") | ||||
|       (synopsis "Tool for programmatic computer-aided design") | ||||
|       (description | ||||
|        "Ao is a tool for programmatic computer-aided design (CAD).  In Ao, | ||||
| solid models are defined as Scheme scripts, and there are no opaque function | ||||
| calls into the geometry kernel: everything is visible to the user.  Even | ||||
| fundamental, primitive shapes are represented as code in the user-level | ||||
| language.") | ||||
|       (license (list license:lgpl2.1+             ;library | ||||
|                      license:gpl2+)))))           ;Guile bindings | ||||
|  |  | |||
		Reference in a new issue