summary refs log tree commit diff
path: root/gnu/packages/plotutils.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/plotutils.scm')
-rw-r--r--gnu/packages/plotutils.scm235
1 files changed, 160 insertions, 75 deletions
diff --git a/gnu/packages/plotutils.scm b/gnu/packages/plotutils.scm
index 4b89ddafd1..c0cbd24c9d 100644
--- a/gnu/packages/plotutils.scm
+++ b/gnu/packages/plotutils.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org>
-;;; Copyright © 2016, 2017, 2019, 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2016-2022 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
@@ -22,6 +22,8 @@
 
 (define-module (gnu packages plotutils)
   #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix gexp)
+  #:use-module ((guix utils) #:select (target-x86-32?))
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
@@ -29,6 +31,7 @@
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages bdw-gc)
+  #:use-module (gnu packages boost)
   #:use-module (gnu packages emacs)
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages image)
@@ -37,6 +40,7 @@
   #:use-module (gnu packages gl)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages maths)
+  #:use-module (gnu packages onc-rpc)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
@@ -45,6 +49,7 @@
   #:use-module (gnu packages qt)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages tex)
+  #:use-module (gnu packages web)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages))
 
@@ -83,11 +88,28 @@
               (search-patches "plotutils-spline-test.patch"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:configure-flags (list "--enable-libplotter")))
-    (inputs `(("libpng" ,libpng)
-              ("libx11" ,libx11)
-              ("libxt" ,libxt)
-              ("libxaw" ,libxaw)))
+     (list #:configure-flags
+           #~(list "--enable-libplotter"
+
+                   ;; On i686 some tests fail due to excess floating point
+                   ;; precision; work around it.  However, libplotter is C++
+                   ;; and thus unaffected by CFLAGS, but '-fexcess-precision'
+                   ;; is not implemented for C++ as of GCC 10.
+                   #$@(if (target-x86-32?)
+                          #~("CFLAGS=-g -O2 -fexcess-precision=standard")
+                          #~()))
+
+           #:phases
+           (if (target-x86-32?)
+               #~(modify-phases %standard-phases
+                   (add-before 'check 'skip-sloppy-test
+                     (lambda _
+                       ;; This test reveals a slight difference in the SVG
+                       ;; output due to floating point inequalities.  Skip it.
+                       (substitute* "test/plot2svg.test"
+                         (("^exit .*") "exit 77")))))
+               #~%standard-phases)))
+    (inputs (list libpng libx11 libxt libxaw))
     (home-page "https://www.gnu.org/software/plotutils/")
     (synopsis "Plotting utilities and library")
     (description
@@ -98,6 +120,54 @@ for 2D vector graphics animations.  The package also contains command-line
 programs for plotting scientific data.")
     (license license:gpl2+)))
 
+(define-public guile-plotutils
+  (package
+    (name "guile-plotutils")
+    (version "1.0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (list (string-append "https://lonelycactus.com/tarball/"
+                                        "guile_plotutils-" version ".tar.gz")
+                         (string-append
+                          "https://github.com/spk121/guile-plotutils/releases/download/v"
+                          version "/guile_plotutils-" version
+                          ".tar.gz")))
+              (sha256
+               (base32
+                "0r245z75cdzgzi57fpz84mnyrjq44793zzaaxxrszyxm1d06hc6r"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:imported-modules ((guix build guile-build-system)
+                           ,@%gnu-build-system-modules)
+       #:modules (((guix build guile-build-system)
+                   #:select (target-guile-effective-version))
+                  (guix build gnu-build-system)
+                  (guix build utils))
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'install 'set-library-file-name
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (version (target-guile-effective-version)))
+               ;; First install libguile-plotutils.so.
+               (invoke "make" "install-guileextensionLTLIBRARIES")
+
+               ;; Then change source files to refer to it.
+               (substitute* '("module/plotutils/graph.scm"
+                              "module/plotutils/plot.scm")
+                 (("\"libguile-plotutils\"")
+                  (string-append "\"" out "/lib/guile/" version
+                                 "/extensions/libguile-plotutils\"")))))))))
+    (native-inputs (list pkg-config texinfo))
+    (inputs (list plotutils guile-3.0 zlib))
+    (home-page "https://lonelycactus.com/guile-plotutils.html")
+    (synopsis "Guile bindings to the GNU Plotutils plotting libraries")
+    (description
+     "Guile-Plotutils is a Guile binding to the venerable GNU Plotutils
+plotting and graphing library.  If you want to make graphs that look like you
+went to university in the 1990s, this is the library for you.")
+    (license license:gpl3+)))
+
 (define-public guile-charting
   ;; This commit fixes a few things, including Guile 3 support, not available
   ;; in the latest release.
@@ -117,12 +187,9 @@ programs for plotting scientific data.")
                   "03049g7wnpyfi0r36ij4a46kc9l45jbanx02iklkjwav2n6jqnnk"))))
       (build-system gnu-build-system)
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("texinfo" ,texinfo)
-         ("pkg-config" ,pkg-config)))
-      (inputs `(("guile" ,guile-3.0)))
-      (propagated-inputs `(("guile-cairo" ,guile-cairo)))
+       (list autoconf automake texinfo pkg-config))
+      (inputs (list guile-3.0))
+      (propagated-inputs (list guile-cairo))
       (home-page "http://wingolog.org/projects/guile-charting/")
       (synopsis "Create charts and graphs in Guile")
       (description
@@ -134,11 +201,8 @@ using the Cairo drawing library.")
   (package
     (inherit guile-charting)
     (name "guile2.2-charting")
-    (inputs `(("guile" ,guile-2.2)))
-    (propagated-inputs `(("guile-cairo" ,guile2.2-cairo)))))
-
-(define-public guile3.0-charting
-  (deprecated-package "guile3.0-charting" guile-charting))
+    (inputs (list guile-2.2))
+    (propagated-inputs (list guile2.2-cairo))))
 
 (define-public ploticus
   (package
@@ -190,9 +254,7 @@ using the Cairo drawing library.")
                         (wrap-program (string-append bin "/pl")
                           `("PLOTICUS_PREFABS" ":" = (,dir)))))))))
     (inputs
-     `(("libpng" ,libpng)
-       ("libx11" ,libx11)
-       ("zlib" ,zlib)))
+     (list libpng libx11 zlib))
     (home-page "http://ploticus.sourceforge.net/")
     (synopsis "Command-line tool for producing plots and charts")
     (description
@@ -206,70 +268,98 @@ colors, styles, options and details.")
 (define-public asymptote
   (package
     (name "asymptote")
-    (version "2.70")
+    (version "2.77")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://sourceforge/asymptote/"
                            version "/asymptote-" version ".src.tgz"))
        (sha256
-        (base32 "0gqcm0m916kjzyfswlplhyyvmqhg9hsishmbg4pyjcwchlx93k7m"))))
+        (base32 "0v5r8g3b7f2dxsiba4f3yrgfkigr5nsdhg6jrdsnqrmf6y7dqgdf"))))
     (build-system gnu-build-system)
     ;; Note: The 'asy' binary retains a reference to docdir for use with its
     ;; "help" command in interactive mode, so adding a "doc" output is not
     ;; currently useful.
     (native-inputs
-     `(("emacs" ,emacs-minimal)
-       ("gs" ,ghostscript)              ;For tests
-       ("perl" ,perl)
-       ("texinfo" ,texinfo)             ;For generating documentation
-       ;; For the manual and the tests.
-       ("texlive" ,(texlive-union (list texlive-amsfonts/patched
-                                        texlive-epsf
-                                        texlive-etoolbox
-                                        texlive-latex-base
-                                        texlive-latex-geometry
-                                        texlive-latex-graphics
-                                        texlive-latex-oberdiek ; for ifluatex
-                                        texlive-latex-parskip
-                                        texlive-tex-texinfo)))))
+     (list autoconf
+           automake
+           boost
+           emacs-minimal
+           ghostscript                  ;for tests
+           perl
+           rapidjson
+           texinfo                      ;for generating documentation
+           (texlive-updmap.cfg
+            (list texlive-amsfonts
+                  texlive-dvips-l3backend
+                  texlive-epsf
+                  texlive-etoolbox
+                  texlive-fonts-ec
+                  texlive-generic-infwarerr
+                  texlive-generic-kvdefinekeys
+                  texlive-grfext
+                  texlive-hyperref
+                  texlive-latex-base
+                  texlive-latex-geometry
+                  texlive-latex-graphics
+                  texlive-latex-kvoptions
+                  texlive-latex-media9
+                  texlive-latex-ocgx2
+                  texlive-latex-pdftexcmds
+                  texlive-oberdiek      ;for ifluatex
+                  texlive-latex-parskip
+                  texlive-tex-texinfo))))
     (inputs
-     `(("fftw" ,fftw)
-       ("freeglut" ,freeglut)
-       ("glew" ,glew)
-       ("glm" ,glm)
-       ("gsl" ,gsl)
-       ("libgc" ,libgc)
-       ("python" ,python)
-       ("python-cson" ,python-cson)
-       ("python-numpy" ,python-numpy)
-       ("python-pyqt" ,python-pyqt)
-       ("readline" ,readline)
-       ("zlib" ,zlib)))
+     (list fftw
+           freeglut
+           glew
+           glm
+           gsl
+           libgc
+           libtirpc
+           python
+           python-cson
+           python-numpy
+           python-pyqt
+           readline
+           zlib))
     (arguments
-     `(#:modules ((guix build emacs-utils)
+     (list
+      #:modules '((guix build emacs-utils)
                   (guix build gnu-build-system)
                   (guix build utils)
                   (srfi srfi-26))
-       #:imported-modules (,@%gnu-build-system-modules
+      #:imported-modules `(,@%gnu-build-system-modules
                            (guix build emacs-utils))
-       #:configure-flags
-       (list (string-append "--enable-gc=" (assoc-ref %build-inputs "libgc"))
-             (string-append "--with-latex="
-                            (assoc-ref %outputs "out")
-                            "/share/texmf/tex/latex")
-             (string-append "--with-context="
-                            (assoc-ref %outputs "out")
-                            "/share/texmf/tex/context/third"))
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-build
-           ;; XXX: Build process complains about missing "config.h"
-           ;; and "primitives.h" files.
+      #:configure-flags
+      #~(list (string-append "--enable-gc=" #$(this-package-input "libgc"))
+              (string-append "--with-latex=" #$output "/share/texmf/tex/latex")
+              (string-append "--with-context="
+                             #$output
+                             "/share/texmf/tex/context/third"))
+      #:phases
+      `(modify-phases %standard-phases
+         (add-after 'unpack 'locate-tirpc
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* (list "configure.ac")
+               (("/usr/include/tirpc")
+                (search-input-directory inputs "include/tirpc")))))
+         (add-after 'unpack 'fix-includes
            (lambda _
              (substitute* (find-files "." "\\.in$")
                (("#include <primitives.h>") "#include \"primitives.h\""))
-             (invoke "touch" "prc/config.h")))
+             (substitute* (find-files "prc" "\\.h$")
+               (("#include \"config.h\"") "#include \"../config.h\""))
+             (substitute* "prc/oPRCFile.h"
+               (("#include \"xstream.h\"") "#include \"../xstream.h\""))
+             (substitute* "v3dfile.h"
+               (("#include <prc/oPRCFile.h>") "#include \"prc/oPRCFile.h\""))
+             (substitute* "LspCpp/LibLsp/lsp/ParentProcessWatcher.cpp"
+               (("#include <boost/process.hpp>" all)
+                (string-append "#include <algorithm>\n" all)))))
+         (replace 'bootstrap
+           (lambda _
+             (invoke "autoreconf" "-vfi")))
          (add-after 'unpack 'move-info-location
            ;; Build process installs info file in the unusual
            ;; "%out/share/info/asymptote/" location.  Move it to
@@ -278,21 +368,18 @@ colors, styles, options and details.")
              (substitute* "doc/png/Makefile.in"
                (("(\\$\\(infodir\\))/asymptote" _ infodir) infodir))
              (substitute* "doc/asymptote.texi"
-               (("asymptote/asymptote") "asymptote"))
-             #t))
+               (("asymptote/asymptote") "asymptote"))))
          (add-before 'build 'patch-pdf-viewer
            (lambda _
              ;; Default to a free pdf viewer.
              (substitute* "settings.cc"
                (("defaultPDFViewer=\"acroread\"")
-                "defaultPDFViewer=\"gv\""))
-             #t))
+                "defaultPDFViewer=\"gv\""))))
          (add-before 'check 'set-HOME
            ;; Some tests require write access to $HOME, otherwise leading to
            ;; "failed to create directory /homeless-shelter/.asy" error.
            (lambda _
-             (setenv "HOME" "/tmp")
-             #t))
+             (setenv "HOME" "/tmp")))
          (add-after 'install 'install-Emacs-data
            (lambda* (#:key outputs #:allow-other-keys)
              ;; Install related Emacs libraries into an appropriate location.
@@ -300,16 +387,14 @@ colors, styles, options and details.")
                     (lisp-dir (string-append out "/share/emacs/site-lisp")))
                (for-each (cut install-file <> lisp-dir)
                          (find-files "." "\\.el$"))
-               (emacs-generate-autoloads ,name lisp-dir))
-             #t))
+               (emacs-generate-autoloads ,name lisp-dir))))
          (add-after 'install-Emacs-data 'wrap-python-script
            (lambda* (#:key inputs outputs #:allow-other-keys)
              ;; Make sure 'xasy' runs with the correct PYTHONPATH.
              (let* ((out (assoc-ref outputs "out"))
-                    (path (getenv "PYTHONPATH")))
+                    (path (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/share/asymptote/GUI/xasy.py")
-                 `("PYTHONPATH" ":" prefix (,path))))
-             #t)))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,path)))))))))
     (home-page "http://asymptote.sourceforge.net")
     (synopsis "Script-based vector graphics language")
     (description