aboutsummaryrefslogtreecommitdiff
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2019, 2022 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2021-2024 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2021 Hugo Lecomte <hugo.lecomte@inria.fr>
;;; Copyright © 2022 Marius Bakke <marius@gnu.org>
;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2024 Sharlatan Hellseher <sharlatanus@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix 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 General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (gnu packages jupyter)
  #:use-module ((guix licenses) #:prefix license:)
  #:use-module (guix gexp)
  #:use-module (guix packages)
  #:use-module (guix download)
  #:use-module (guix git-download)
  #:use-module (guix build-system cmake)
  #:use-module (guix build-system pyproject)
  #:use-module (guix build-system python)
  #:use-module (gnu packages bash)
  #:use-module (gnu packages check)
  #:use-module (gnu packages cpp)
  #:use-module (gnu packages docker)
  #:use-module (gnu packages linux)
  #:use-module (gnu packages monitoring)
  #:use-module (gnu packages networking)
  #:use-module (gnu packages pkg-config)
  #:use-module (gnu packages python)
  #:use-module (gnu packages python-build)
  #:use-module (gnu packages python-check)
  #:use-module (gnu packages python-crypto)
  #:use-module (gnu packages python-science)
  #:use-module (gnu packages python-xyz)
  #:use-module (gnu packages python-web)
  #:use-module (gnu packages rdf)
  #:use-module (gnu packages time)
  #:use-module (gnu packages xml)
  #:use-module (gnu packages tls)
  #:use-module (gnu packages sphinx)
  #:use-module (gnu packages serialization)
  #:use-module (gnu packages version-control))

(define-public python-nbclassic
  (package
    (name "python-nbclassic")
    (version "1.0.0")
    (source
     (origin
       (method url-fetch)
       (uri (pypi-uri "nbclassic" version))
       (sha256
        (base32 "1qrhzazq10dz64y9mawr3ns595fsdhrj1wvbb42xhmcl66r1xq8a"))))
    (build-system pyproject-build-system)
    (propagated-inputs (list python-argon2-cffi
                             python-ipykernel
                             python-ipython-genutils
                             python-jinja2
                             python-jupyter-client
                             python-jupyter-core
                             python-jupyter-server
                             python-nbconvert
                             python-nbformat
                             python-nest-asyncio
                             python-notebook-shim
                             python-prometheus-client
                             python-pyzmq
                             python-send2trash
                             python-terminado
                             python-tornado-6
                             python-traitlets))
    (native-inputs (list python-coverage
                         python-nbval
                         python-jupyter-packaging
                         python-pytest
                         python-pytest-cov
                         python-pytest-jupyter
                         python-pytest-tornasync
                         python-requests
                         python-requests-unixsocket
                         python-testpath))
    (home-page "https://github.com/jupyter/nbclassic")
    (synopsis "Jupyter Notebook as a Jupyter Server extension")
    (description "NbClassic provides a backwards compatible Jupyter Notebook
interface that you can install side-by-side with the latest versions: That
way, you can fearlessly upgrade without worrying about your classic extensions
and customizations breaking.  Because NbClassic provides the classic interface
on top of the new Jupyter Server backend, it can coexist with other frontends
like JupyterLab and Notebook 7 in the same installation.  NbClassic preserves
the custom classic notebook experience under a new set of URL endpoints, under
the namespace @code{/nbclassic/}.")
    (license license:bsd-3)))

(define-public python-notebook-shim
  (package
    (name "python-notebook-shim")
    (version "0.2.4")
    (source
     (origin
       (method url-fetch)
       (uri (pypi-uri "notebook_shim" version))
       (sha256
        (base32 "1jrqqrm5xjwsx13plyyh7wybb1g71yrzaqa3l9y3162xnshwzcml"))))
    (build-system pyproject-build-system)
    (propagated-inputs (list python-jupyter-server))
    (native-inputs
     (list python-hatchling
           python-pytest
           python-pytest-console-scripts
           python-pytest-jupyter
           python-pytest-tornasync))
    (home-page "https://pypi.org/project/notebook-shim/")
    (synopsis "Shim layer for notebook traits and config")
    (description
     "This project provides a way for JupyterLab and other frontends to switch
to Jupyter Server for their Python Web application backend.")
    (license license:bsd-3)))

(define-public python-jupyter-protocol
  (package
    (name "python-jupyter-protocol")
    (version "0.2.0")
    (source (origin
              (method url-fetch)
              (uri (pypi-uri "jupyter_protocol" version))
              (sha256
               (base32
                "075vbaak6hlk9606lw61ldv72p6694k938jd1kvkm6spd0pczpmn"))))
    (build-system python-build-system)
    (propagated-inputs
     (list python-dateutil
           python-ipython-genutils
           python-jupyter-core
           python-pyzmq
           python-traitlets))
    (native-inputs
     (list python-ipykernel python-ipython python-mock python-pytest))
    (home-page "https://jupyter.org")
    (synopsis "Jupyter protocol implementation")
    (description
     "This Python library is an experimental implementation of the
@uref{https://jupyter-client.readthedocs.io/en/latest/messaging.html, Jupyter
protocol} to be used by both clients and kernels.")
    (license license:bsd-3)
    (properties '((upstream-name . "jupyter_protocol")))))

(define-public python-jupyter-kernel-mgmt
  (package
    (name "python-jupyter-kernel-mgmt")
    (version "0.5.1")
    (source (origin
              (method url-fetch)
              (uri (pypi-uri "jupyter_kernel_mgmt" version))
              (sha256
               (base32
                "0977ixfi1pzjgy84hl0zycg4wpllmid98fhzcpy0lxd322w4sl7x"))))
    (build-system python-build-system)
    (arguments
     (list
      ;; There are 8 test failures, most of them in 'test_client_loop.py'
      ;; (see: https://github.com/takluyver/jupyter_kernel_mgmt/issues/48).
      #:tests? #f
      #:phases
      #~(modify-phases %standard-phases
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (when tests?
                (setenv "HOME" "/tmp")
                (invoke "pytest" "-vv" "jupyter_kernel_mgmt")))))))
    (propagated-inputs
     (list python-dateutil
           python-entrypoints
           python-jupyter-core
           python-jupyter-protocol
           python-pyzmq
           python-tornado-6
           python-traitlets))
    (native-inputs
     (list python-async-generator
           python-ipykernel
           python-ipython
           python-pytest
           python-pytest-asyncio))
    (home-page "https://jupyter.org")
    (synopsis "Discover, launch, and communicate with Jupyter kernels")
    (description
     "This package is an experimental refactoring of the machinery for
launching and using Jupyter kernels.")
    (license license:bsd-3)
    (properties '((upstream-name . "jupyter_kernel_mgmt")))))

(define-public python-jupyter-kernel-test
  (package
    (name "python-jupyter-kernel-test")
    (version "0.3")
    (home-page "https://github.com/jupyter/jupyter_kernel_test")
    (source (origin
              ;; PyPI has a ".whl" file but not a proper source release.
              ;; Thus, fetch code from Git.
              (method git-fetch)
              (uri (git-reference (url home-page) (commit version)))
              (file-name (git-file-name name version))
              (sha256
               (base32
                "00iy74i4i8is6axb9vlsm0b9wxkvyyxnbl8r0i4gaj3xd788jm83"))))
    (build-system python-build-system)
    (arguments
     ;; The repo doesn't contain a "setup.py" file so install files manually.
     '(#:phases (modify-phases %standard-phases
                  (delete 'build)
                  (delete 'check)
                  (replace 'install
                    (lambda* (#:key inputs outputs #:allow-other-keys)
                      (let* ((out (assoc-ref outputs "out"))
                             (version (python-version (assoc-ref inputs "python")))
                             (pydir (string-append out "/lib/python"
                                                   version "/site-packages/"
                                                   "jupyter_kernel_test")))
                        (for-each (lambda (file)
                                    (install-file file pydir))
                                  (find-files "jupyter_kernel_test"
                                              "\\.py$"))
                        #t))))))
    (propagated-inputs
     (list python-jupyter-kernel-mgmt python-jupyter-protocol
           python-jsonschema))
    (synopsis "Test Jupyter kernels")
    (description
     "@code{jupyter_kernel_test} is a tool for testing Jupyter kernels.  It
tests kernels for successful code execution and conformance with the
@uref{https://jupyter-client.readthedocs.io/en/latest/messaging.html, Jupyter
Messaging Protocol}.")
    (license license:bsd-3)))

(define-public python-pytest-jupyter
  (package
    (name "python-pytest-jupyter")
    (version "0.10.1")
    (source
     (origin
       (method url-fetch)
       (uri (pypi-uri "pytest_jupyter" version))
       (sha256
        (base32 "114y9py29j6p2iymhc3vj55x65gg1ncbhwal5mads0g2z7p59pq0"))))
    (build-system pyproject-build-system)
    (arguments
     (list
      #:test-flags
      ;; This requires python-jupyter-server, which itself requires this
      ;; package.
      '(list "--ignore=tests/test_jupyter_server.py")
      #:phases
      '(modify-phases %standard-phases
         ;; The jupyter_server tests requires python-jupyter-server, which
         ;; itself requires this package.
         (add-after 'unpack 'disable-tests
           (lambda _
             (substitute* "tests/conftest.py"
               (("\"pytest_jupyter.jupyter_server\",") ""))))
         ;; Some tests require a writable HOME
         (add-before 'check 'set-HOME
           (lambda _ (setenv "HOME" "/tmp")))
         (add-after 'unpack 'ignore-deprecation-warnings
           (lambda _
             (substitute* "pyproject.toml"
               (("  \"module:datetime.*" m)
                (string-append m "\n\"ignore:zmq.eventloop.ioloop is deprecated:DeprecationWarning\","))))))))
    (propagated-inputs (list python-jupyter-core python-nbformat))
    (native-inputs (list python-hatchling
                         python-ipykernel
                         python-pytest
                         python-pytest-timeout
                         python-tornado-6))
    (home-page "https://jupyter.org")
    (synopsis "Pytest plugin for testing Jupyter libraries and extensions.")
    (description
     "This package provides a pytest plugin for testing Jupyter libraries and
extensions.")
    (license license:bsd-4)))

(define-public xeus
  (package
    (name "xeus")
    (version "2.4.1")
    (source (origin
              (method git-fetch)
              (uri (git-reference
                    (url "https://github.com/jupyter-xeus/xeus")
                    (commit version)))
              (sha256
               (base32
                "1k1h416qkw3yra6ayfa61nv0v4ify2wvp5x27slgbcw6c88w7fb1"))
              (file-name (git-file-name name version))))
    (build-system cmake-build-system)
    (arguments
     '(#:configure-flags '("-DBUILD_STATIC_LIBS=OFF"
                           "-DDISABLE_ARCH_NATIVE=ON" ;no '-march=native'
                           "-DBUILD_TESTING=ON")))
    (native-inputs
     (list pkg-config
           ;; The following inputs are used by the test suite.
           googletest
           python-pytest
           python-wrapper
           python-jupyter-kernel-test
           python-jupyter-client))
    (inputs
     (list xtl
           nlohmann-json
           cppzmq
           zeromq
           openssl
           `(,util-linux "lib")))       ;libuuid
    (home-page "https://quantstack.net/xeus")
    (synopsis "C++ implementation of the Jupyter Kernel protocol")
    (description
     "@code{xeus} is a library meant to facilitate the implementation of
kernels for Jupyter.  It takes the burden of implementing the Jupyter Kernel
protocol so developers can focus on implementing the interpreter part of the
kernel.

Several Jupyter kernels are built upon @code{xeus}, such as @code{xeus-cling},
a kernel for the C++ programming language, and @code{xeus-python}, an
alternative Python kernel for Jupyter.")
    (license license:bsd-3)))

(define-public python-jupyterlab-pygments
  (package
    (name "python-jupyterlab-pygments")
    (version "0.1.2")
    (source
     (origin
       (method url-fetch)
       (uri (pypi-uri "jupyterlab_pygments" version))
       (sha256
        (base32
         "0ij14mmnc39nmf84i0av6j9glazjic7wzv1qyhr0j5966s3s1kfg"))))
    (build-system python-build-system)
    (arguments '(#:tests? #false)) ; there are no tests
    (propagated-inputs
     (list python-pygments))
    (home-page "https://jupyter.org")
    (synopsis "Pygments theme using JupyterLab CSS variables")
    (description
     "This package contains a syntax coloring theme for pygments making use of
the JupyterLab CSS variables.")
    (license license:bsd-3)))

(define-public python-jupyterlab-server
  (package
    (name "python-jupyterlab-server")
    (version "2.27.1")
    (source
     (origin
       (method url-fetch)
       (uri (pypi-uri "jupyterlab_server" version))
       (sha256
        (base32 "07b3m34akrf79xpaim9cymhsac0ry5ry7if998lcfxmn173mlyq9"))))
    (build-system pyproject-build-system)
    (arguments
     (list
      #:test-flags
      ;; XXX: These tests appear to fail due to the lack of
      ;; locales.
      '(list "-k" "not locale and not language")
      #:phases
      '(modify-phases %standard-phases
         (add-after 'unpack 'ignore-deprecation-warnings
           (lambda _
             (substitute* "pyproject.toml"
               (("  \"module:datetime.*" m)
                (string-append
                 m
                 "\n\"ignore:zmq.eventloop.ioloop is deprecated:DeprecationWarning\","
                 "\n\"ignore:There is no current event loop:DeprecationWarning\","
                 "\n\"ignore:Spec is deprecated. Use SchemaPath from jsonschema-path package.:DeprecationWarning\"," )))))
         (add-before 'check 'set-HOME
           (lambda _ (setenv "HOME" "/tmp"))))))
    (propagated-inputs
     (list python-babel
           python-importlib-metadata    ;TODO: remove after Python >= 3.10
           python-jinja2
           python-json5
           python-jsonschema
           python-jupyter-server
           python-packaging
           python-requests))
    (native-inputs
     (list python-hatchling
           python-ipykernel
           python-openapi-core
           python-openapi-spec-validator
           python-pytest
           python-pytest-console-scripts
           python-pytest-cov
           python-pytest-jupyter
           python-pytest-timeout
           python-requests-mock
           python-ruamel.yaml
           python-strict-rfc3339
           python-werkzeug
           python-wheel))
    (home-page "https://jupyter.org")
    (synopsis "Server components for JupyterLab applications")
    (description "JupyterLab Server sits between JupyterLab and Jupyter
Server, and provides a set of REST API handlers and utilities that are used by
JupyterLab.  It is a separate project in order to accommodate creating
JupyterLab-like applications from a more limited scope.")
    (license license:bsd-3)))

(define-public python-jupyter-events
  (package
    (name "python-jupyter-events")
    (version "0.10.0")
    (source
     (origin
       (method url-fetch)
       (uri (pypi-uri "jupyter_events" version))
       (sha256
        (base32 "08jyhj16drl3hg594gr677bc5q991lpd4khlhb3jx26csclq42v7"))))
    (build-system pyproject-build-system)
    (arguments
     ;; This passes the whole command line to shutil.which, instead of just
     ;; the executable.
     (list #:test-flags '(list "--ignore=tests/test_cli.py")))
    (propagated-inputs (list python-jsonschema
                             python-json-logger
                             python-pyyaml
                             python-referencing
                             python-rich
                             python-rfc3339-validator
                             python-rfc3986-validator
                             python-traitlets))
    (native-inputs (list python-click
                         python-hatchling
                         python-pytest
                         python-pytest-asyncio
                         python-pytest-console-scripts))
    (home-page "https://pypi.org/project/jupyter-events/")
    (synopsis "Jupyter Event System library")
    (description "Jupyter Events enables Jupyter Python
Applications (e.g. Jupyter Server, JupyterLab Server, JupyterHub, etc.) to
emit events—structured data describing things happening inside the
application.  Other software (e.g. client applications like JupyterLab) can
listen and respond to these events.")
    (license license:bsd-3)))

(define-public python-jupyter-packaging
  (package
    (name "python-jupyter-packaging")
    (version "0.12.0")
    (source
     (origin
       (method url-fetch)
       (uri (pypi-uri "jupyter_packaging" version))
       (sha256
        (base32
         "1b7ssc627vgrdl21c09w9sxk5fc1ps3g7f70laxag4yw1bb5ax5j"))))
    (build-system python-build-system)
    (arguments
     (list
      #:phases
      #~(modify-phases %standard-phases
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (when tests?
                ;; Disable isolation so that the package environment can be
                ;; setup without connectivity.
                (setenv "SOURCE_DATE_EPOCH" "315532800")
                (substitute* "tests/test_build_api.py"
                  (("\"-m\", \"build\"" all)
                   (string-append all ", \"--no-isolation\"")))
                (invoke "python" "-m" "pytest" "-vv")))))))
    (propagated-inputs
     (list python-deprecation python-packaging python-setuptools
           python-tomlkit python-wheel))
    (native-inputs
     (list python-pypa-build python-coverage python-pytest
           python-pytest-cov python-pytest-mock))
    (home-page "https://jupyter.org")
    (synopsis "Jupyter packaging utilities")
    (description "This package provides tools to help build and install
Jupyter Python packages that require a pre-build step that may include
JavaScript build steps.")
    (license license:bsd-3)))

(define-public python-hatch-jupyter-builder
  (package
    (name "python-hatch-jupyter-builder")
    (version "0.9.1")
    (source
     (origin
       (method url-fetch)
       (uri (pypi-uri "hatch_jupyter_builder" version))
       (sha256
        (base32 "1baqk80c5ddhksh73l48mb59vvaaa2ldrs65k6vldii4s6c829vr"))))
    (build-system pyproject-build-system)
    (arguments
     ;; Don't attempt to build anything, because we don't have network access
     ;; anyway.
     (list #:test-flags '(list "-k" "not test_hatch_build")))
    (propagated-inputs (list python-hatchling))
    (native-inputs (list python-pytest
                         python-pytest-cov
                         python-pytest-mock
                         python-tomli
                         python-twine))
    (home-page "https://github.com/jupyterlab/hatch-jupyter-builder")
    (synopsis "Hatch plugin to help build Jupyter packages")
    (description
     "This package provides a hatch plugin to help build Jupyter packages.")
    (license license:bsd-3)))

(define-public python-jupyter-server
  (package
    (name "python-jupyter-server")
    (version "2.14.0")
    (source
     (origin
       (method url-fetch)
       (uri (pypi-uri "jupyter_server" version))
       (sha256
        (base32
         "0xz69anflhib514lgpdrs0ppmbwp13zbg4vwzls3820jlp7594b5"))))
    (build-system pyproject-build-system)
    (arguments
     (list
      #:test-flags
      ;; Integration tests require a server.
      '(list "-m" "not integration_test"
             ;; This test fails just like the shutil test in
             ;; python-jupyter-events fails.  Odd, that.
             "-k" "not test_server_extension_list")
      #:phases
      #~(modify-phases %standard-phases
          (add-after 'unpack 'ignore-deprecation-warnings
            (lambda _
              (substitute* "pyproject.toml"
                (("  \"ignore:datetime.*" m)
                 (string-append m "\n\"ignore:zmq.eventloop.ioloop is deprecated:DeprecationWarning\","
                                "\n\"ignore:There is no current event loop:DeprecationWarning\","
                                "\n\"ignore:unclosed event loop:ResourceWarning\","
                                ;; From tornado
                                "\n\"ignore:unclosed <socket.socket:ResourceWarning\",")))))
          (add-before 'check 'pre-check
            (lambda _
              (let ((home (string-append (getcwd) "/guix-home")))
                (setenv "HOME" home))
              ;; Add jupyter-server executable to PATH.
              (setenv "PATH"
                      (string-append #$output "/bin:" (getenv "PATH"))))))))
    (propagated-inputs
     (list python-anyio
           python-argon2-cffi
           python-jinja2
           python-jupyter-client
           python-jupyter-core
           python-jupyter-events
           python-jupyter-server-terminals
           python-nbconvert
           python-nbformat
           python-overrides
           python-packaging
           python-prometheus-client
           python-pyzmq
           python-send2trash
           python-terminado
           python-tornado-6
           python-traitlets
           python-websocket-client))
    (native-inputs
     (list python-flaky
           python-hatchling
           python-hatch-jupyter-builder
           python-ipykernel
           python-pytest
           python-pytest-console-scripts
           python-pytest-jupyter
           python-pytest-timeout
           python-requests))
    (home-page "https://jupyter.org")
    (synopsis "Core services, APIs, and REST endpoints for Jupyter web applications")
    (description
     "This package provides the backend—i.e. core services, APIs, and REST
endpoints—to Jupyter web applications.")
    (license license:expat)))

(define-public python-jupyter-server-terminals
  (package
    (name "python-jupyter-server-terminals")
    (version "0.5.3")
    (source
     (origin
       (method url-fetch)
       (uri (pypi-uri "jupyter_server_terminals" version))
       (sha256
        (base32 "0sajiadhwncrr0inzzkrs7l1xc6jmw9b5zfw1v79l3i2cx8jkq2s"))))
    (build-system pyproject-build-system)
    ;; The tests require python-jupyter-server, but python-jupyter-server
    ;; needs this package.
    (arguments (list #:tests? #false))
    (propagated-inputs (list python-terminado))
    (native-inputs
     (list python-hatchling))
    (home-page "https://pypi.org/project/jupyter-server-terminals/")
    (synopsis "Jupyter Server extension providing terminals")
    (description
     "This package provides a Jupyter Server extension providing terminals.")
    (license license:bsd-3)))

(define-public python-jupyterlab-widgets
  (package
    (name "python-jupyterlab-widgets")
    (version "3.0.10")
    (source
     (origin
       (method url-fetch)
       (uri (pypi-uri "jupyterlab_widgets" version))
       (sha256
        (base32
         "1h04kln8hp56svdjjk2hbsb0z1mby71cv4gss3wy89v7jw2arwh4"))))
    (build-system pyproject-build-system)
    (native-inputs
     (list python-jupyter-packaging))
    (home-page "https://github.com/jupyter-widgets/ipywidgets")
    (synopsis "Interactive widgets for Jupyter Notebooks")
    (description "ipywidgets, also known as jupyter-widgets or simply widgets,
are interactive HTML widgets for Jupyter notebooks and the IPython kernel.")
    (license license:bsd-3)))

(define-public python-jupyterlite-core
  (package
    (name "python-jupyterlite-core")
    (version "0.1.3")
    (source
     (origin
       (method url-fetch)
       (uri (pypi-uri "jupyterlite_core" version))
       (sha256
        (base32 "18ysrqlsh7a31sknfnng419r7wpx9nfj59lxxd6zl1kcj6wazh34"))))
    (build-system pyproject-build-system)
    (propagated-inputs (list python-doit python-importlib-metadata
                             python-jupyter-core))
    (native-inputs (list python-ansi2html
                         python-hatchling
                         python-pytest-console-scripts
                         python-pytest-cov
                         python-pytest-xdist
                         python-tornado-6))
    (home-page "https://github.com/jupyterlite/jupyterlite")
    (synopsis "Core functionality for building JupyterLite websites")
    (description "The jupyterlite-core package provides the core functionality
for building JupyterLite websites, the jupyter-lite CLI, and extension points
for authoring custom addons.")
    (license license:bsd-3)))

(define-public python-jupyterlite-sphinx
  (package
    (name "python-jupyterlite-sphinx")
    (version "0.9.3")
    (source
     (origin
       (method url-fetch)
       (uri (pypi-uri "jupyterlite_sphinx" version))
       (sha256
        (base32 "05h7zrvsx0xzxlddsqfz1fxdgld66yhn6nxfp4jz20wbx6csrr4v"))))
    (build-system pyproject-build-system)
    (arguments (list #:tests? #false))  ;there are none
    (propagated-inputs (list python-docutils python-jupyter-server
                             python-jupyterlab-server python-jupyterlite-core
                             python-sphinx))
    (native-inputs (list python-hatchling))
    (home-page "https://github.com/jupyterlite/jupyterlite")
    (synopsis "Sphinx extension for deploying JupyterLite")
    (description "This package provides a Sphinx extension for deploying
@code{JupyterLite}.")
    (license license:bsd-3)))

(define-public python-jupyter-server-mathjax
  (package
    (name "python-jupyter-server-mathjax")
    (version "0.2.6")
    (source
     (origin
       (method url-fetch)
       (uri (pypi-uri "jupyter_server_mathjax" version))
       (sha256
        (base32 "0hrrl969r7ir6q683hlr7a4lid9x2s35hax2hviiyv38q1nnn7mv"))))
    (build-system pyproject-build-system)
    (arguments
     (list
      #:test-flags
      '(list "--pyargs" "jupyter_server_mathjax")))
    (propagated-inputs (list python-jupyter-server))
    (native-inputs
     (list python-jupyter-packaging
           python-pytest python-pytest-jupyter
           python-setuptools python-wheel))
    (home-page "https://jupyter.org")
    (synopsis "Jupyter Server extension for serving Mathjax")
    (description "This package provides a Jupyter Server extension for serving
Mathjax, the JavaScript display engine for mathematics.")
    (license license:bsd-3)))

(define-public python-comm
  (package
    (name "python-comm")
    (version "0.2.2")
    (source
     (origin
       (method git-fetch)   ; no tests data in PyPi package
       (uri (git-reference
             (url "https://github.com/ipython/comm")
             (commit (string-append "v" version))))
       (file-name (git-file-name name version))
       (sha256
        (base32 "18xsbpd8dgcfbc51xl59nlwaq7jnyzvgzjfj6psscv71894x4lg7"))))
    (build-system pyproject-build-system)
    (native-inputs
     (list python-hatchling python-pytest python-setuptools-scm))
    (propagated-inputs
     (list python-traitlets))
    (home-page "https://github.com/ipython/comm")
    (synopsis "Python Comm implementation for the Jupyter kernel protocol")
    (description
     "This package provides a way to register a Kernel Comm implementation, as
per the Jupyter kernel protocol. It also provides a base Comm implementation
and a default CommManager that can be used.")
    (license license:bsd-3)))

(define-public python-nbclient
  (package
    (name "python-nbclient")
    (version "0.10.0")
    (source
     (origin
       (method url-fetch)
       (uri (pypi-uri "nbclient" version))
       (sha256
        (base32
         "02dvb9ffpd237apyj4fw97a9371kv99lzny49624j7jkp9yingsb"))))
    (build-system pyproject-build-system)
    ;; Tests require tools from nbconvert, which would introduces a cycle.
    (arguments '(#:tests? #false))
    (propagated-inputs
     (list python-jupyter-client python-jupyter-core python-nbformat
           python-traitlets))
    (native-inputs
     (list python-hatchling
           python-flaky
           python-pytest
           python-pytest-asyncio
           python-pytest-cov
           python-testpath
           python-xmltodict))
    (home-page "https://jupyter.org")
    (synopsis "Client library for executing notebooks")
    (description
     "This package provides a client library for executing notebooks.
It was formerly known as nbconvert's @code{ExecutePreprocessor.}")
    (license license:bsd-3)))

(define-public python-nbdime
  (package
    (name "python-nbdime")
    (version "3.1.1")
    (source
     (origin
       (method url-fetch)
       (uri (pypi-uri "nbdime" version))
       (sha256
        (base32 "12v41lricbg713lzlfcx0cilfm9spndaanhp39q4ydvix4h76xk7"))))
    (build-system python-build-system)
    (arguments
     (list
      #:phases
      #~(modify-phases %standard-phases
          (add-after 'unpack 'remove-ipython-genutils
            ;; TODO: Remove when a release newer than 3.1.1 is made.
            (lambda _
              (substitute* "nbdime/config.py"
                (("from ipython_genutils import py3compat")
                 "")
                (("py3compat\\.getcwd")
                 "os.getcwd")))))))
    (propagated-inputs
     (list python-colorama
           python-gitpython
           python-jinja2
           python-jupyter-server
           python-jupyter-server-mathjax
           python-nbformat
           python-pygments
           python-requests
           python-tornado-6))
    (native-inputs
     (list python-jupyter-server
           python-mock
           python-notebook
           python-pytest
           python-pytest-tornado
           python-tabulate))
    (home-page "https://nbdime.readthedocs.io")
    (synopsis "Diff tools for Jupyter Notebooks")
    (description "@code{nbdime} provides tools for diffing and merging of
Jupyter Notebooks.  It includes the following commands:
@table @command
@item nbdiff compare notebooks in a terminal-friendly way
@item nbmerge three-way merge of notebooks with automatic conflict resolution
@item nbdiff-web rich rendered diff of notebooks
@item nbmerge-web web-based three-way merge tool for notebooks
nbshow present a single notebook in a terminal-friendly way
@end table")
    (license license:bsd-3)))

(define-public python-nbstripout
  (package
    (name "python-nbstripout")
    (version "0.5.0")
    (source (origin
              (method url-fetch)
              (uri (pypi-uri "nbstripout" version))
              (sha256
               (base32
                "1n57nvxsc94gz9w8ymi83bjkfhfwkpmx4y14m6gjrmlqd49m1aw6"))))
    (build-system pyproject-build-system)
    (arguments
     (list
      ;; These tests use git and hg, and they are sensitive to the
      ;; exact printed output.
      #:test-flags '(map (lambda (test)
                           (string-append "--ignore=tests/test-" test ".t"))
                         '("git" "hg" "status" "uninstall"))
      #:phases
      #~(modify-phases %standard-phases
          (add-before 'check 'set-CRAMSHELL
            (lambda _
              (setenv "CRAMSHELL" (which "bash")))))))
    (propagated-inputs (list python-nbformat))
    (native-inputs
     (list python-pytest
           python-pytest-cram
           python-pytest-flake8
           python-pytest-runner
           python-setuptools
           python-wheel))
    (home-page "https://github.com/kynan/nbstripout")
    (synopsis "Strips outputs from Jupyter and IPython notebooks")
    (description
     "This package opens a notebook, strips its output, and writes the outputless
version to the original file.")
    (license license:expat)))

(define-public repo2docker
  (package
    (name "repo2docker")
    (version "2024.03.0")
    (source (origin
              (method git-fetch)
              (uri (git-reference
                    (url "https://github.com/jupyterhub/repo2docker/")
                    (commit version)))
              (file-name (git-file-name name version))
              (sha256
               (base32
                "1bcnl91j6p3315lk2mmn02jq6mjsn68m9rcw5rkln4c9fx1160rx"))))
    (outputs '("out" "doc"))
    (build-system pyproject-build-system)
    (arguments
     (list
      #:phases
      #~(modify-phases %standard-phases
          (add-after 'patch-shebangs 'fix-install-miniforge
            (lambda _
              (substitute* (find-files
                            #$output "^(install-miniforge|install-nix|\
nix-shell-wrapper|repo2docker-entrypoint)")
                (("^#!(.*)/bin/bash")
                 "#!/bin/bash"))
                (substitute* (find-files #$output "^freeze\\.py$")
                  (("^#!(.*)/bin/python3")
                   "#!/bin/python3\n"))))
          (add-after 'install 'make-doc
            (lambda _
              (let ((doc (string-append #$output:out "/share/doc/"
                                        #$(package-name this-package))))
                (setenv "PYTHONPATH"
                        (string-append (getcwd) ":"
                                       (getenv "GUIX_PYTHONPATH")))
                ;; Don't treat warnings as errors.
                (substitute* "docs/Makefile"
                  (("(SPHINXOPTS[[:blank:]]+= )-W" _ group)
                   group))
                (with-directory-excursion "docs"
                  (invoke  "make" "html")
                  (copy-recursively "build/html"
                                    (string-append doc "/html")))))))))
    (inputs
     (list python-traitlets
           python-toml
           python-semver
           python-ruamel.yaml
           python-requests
           python-json-logger
           python-jinja2
           python-iso8601
           python-escapism
           python-docker
           python-chardet))
    (native-inputs
     (list python-entrypoints
           python-myst-parser
           python-pydata-sphinx-theme
           python-recommonmark
           python-setuptools
           python-sphinx
           python-sphinx-autobuild
           python-sphinx-copybutton
           python-sphinxcontrib-autoprogram
           python-sphinxext-opengraph
           python-sphinxext-rediraffe
           python-wheel))
    (home-page "https://repo2docker.readthedocs.io/en/latest/index.html#")
    (synopsis "Generate docker images from repositories")
    (description
     "repo2docker fetches a repository (from GitHub, GitLab, Zenodo, Figshare,
Dataverse installations, a Git repository or a local directory) and builds a
container image in which the code can be executed.  The image build process is
based on the configuration files found in the repository.  repo2docker can be
used to explore a repository locally by building and executing the constructed
image of the repository, or as a means of building images that are pushed to a
Docker registry.")
    (license license:bsd-3)))

(define-public python-bash-kernel
  (package
   (name "python-bash-kernel")
   (version "0.7.2")
   (source (origin
            (method url-fetch)
            (uri (pypi-uri "bash_kernel" version))
            (sha256
             (base32
              "0w0nbr3iqqsgpk83rgd0f5b02462bkyj2n0h6i9dwyc1vpnq9350"))))
   (build-system python-build-system)
   (arguments
    `(#:tests? #f
      #:phases
      (modify-phases %standard-phases
        (add-after 'unpack 'bash-references
          (lambda* (#:key inputs #:allow-other-keys)
             (substitute* "bash_kernel/kernel.py"
               (("\"bash\"")
                (string-append "\"" (assoc-ref inputs "bash") "/bin/bash\""))
               (("\\['bash', ")
                (string-append "['" (assoc-ref inputs "bash") "/bin/bash', ")))
             #t))
        (add-after 'install 'install-kernelspec
          (lambda* (#:key outputs #:allow-other-keys)
            (let ((out (assoc-ref outputs "out")))
              (setenv "HOME" "/tmp")
              (invoke "python" "-m" "bash_kernel.install" "--prefix" out)
              #t))))))
   (inputs
     (list bash
           python-pexpect
           python-ipykernel
           python-jupyter-client))
   (home-page "https://github.com/takluyver/bash_kernel")
   (synopsis "Jupyter kernel for Bash")
   (description "A bash shell kernel for Jupyter.")
   (license license:expat)))

(define-public python-sparqlkernel
  (package
    (name "python-sparqlkernel")
    (version "1.3.0")
    (source (origin
              (method url-fetch)
              (uri (pypi-uri "sparqlkernel" version))
              (sha256
               (base32
                "004v22nyi5cnpxq4fiws89p7i5wcnzv45n3n70axdd6prh6rkapx"))))
    (build-system python-build-system)
    (arguments
     (list
      #:tests? #f                       ;no test suite
      #:phases
      #~(modify-phases %standard-phases
          (add-after 'unpack 'no-custom-css
            (lambda _
              (substitute* "sparqlkernel/install.py"
                (("notebook.DEFAULT_STATIC_FILES_PATH") "\"/does-not-matter\"")
                (("install_custom_css\\( destd, PKGNAME \\)") ""))))
          (add-after 'add-install-to-pythonpath 'install-kernelspec
            (lambda _
              (setenv "HOME" "/tmp")
              (invoke
               (string-append #$output "/bin/jupyter-sparqlkernel")
               "install"
               (string-append "--InstallKernelSpec.prefix=" #$output)))))))
    (propagated-inputs
     (list python-ipykernel
           python-notebook
           python-pygments
           python-rdflib
           python-sparqlwrapper
           python-traitlets))
    (home-page "https://github.com/paulovn/sparql-kernel")
    (synopsis "Jupyter kernel for SPARQL")
    (description "This module installs a Jupyter kernel for SPARQL.  It allows
sending queries to an SPARQL endpoint, fetching and presenting the results in
a notebook.")
    (license license:bsd-3)))

(define-public python-ipympl
  (package
    (name "python-ipympl")
    (version "0.9.1")
    (source
     (origin
       (method url-fetch)
       (uri (pypi-uri "ipympl" version))
       (sha256
        (base32 "11rppjdqzgs4pfiq8gww5xkpbk21fp86vvv839v56b9rqq06j2b4"))))
    (build-system python-build-system)
    (propagated-inputs
     (list python-ipython
           python-ipython-genutils
           python-ipywidgets
           python-matplotlib
           python-numpy
           python-pillow
           python-traitlets))
    (native-inputs
     (list python-jupyter-packaging))
    (home-page "https://matplotlib.org/ipympl/")
    (synopsis "Matplotlib Jupyter Extension")
    (description "Leveraging the Jupyter interactive widgets framework, ipympl
enables the interactive features of matplotlib in the Jupyter notebook and in
JupyterLab.")
    (license license:bsd-3)))

(define-public python-ipydatawidgets
  (package
    (name "python-ipydatawidgets")
    (version "4.2.0")
    (source
     (origin
       (method url-fetch)
       (uri (pypi-uri "ipydatawidgets" version))
       (sha256
        (base32 "1g65nzlsb1cipmvh9v27b22kkmzwvg8zbf32hmg1c25mb65vbr6h"))))
    (build-system python-build-system)
    (arguments
     '(#:phases
       (modify-phases %standard-phases
         (replace 'check
           (lambda* (#:key tests? #:allow-other-keys)
             (when tests?
               (invoke
                "pytest" "-v"
                ;; Disable failing tests.
                "-k" (string-append
                      "not test_dataunion_constricts_widget_data"
                      " and not test_dataunion_widget_change_notified"
                      " and not test_datawidget_creation_blank_comm"))))))))
    (propagated-inputs
     (list python-ipywidgets python-numpy python-six python-traittypes))
    (native-inputs
     (list python-jupyter-packaging
           python-nbval
           python-pytest
           python-pytest-cov))
    (home-page "https://github.com/vidartf/ipydatawidgets")
    (synopsis "Widgets to help facilitate reuse of large datasets across widgets")
    (description
     "This package provides a set of widgets to help facilitate reuse of large
datasets across widgets.")
    (license license:bsd-3)))

(define-public python-papermill
  (package
    (name "python-papermill")
    (version "2.6.0")
    (source
     (origin
       (method url-fetch)
       (uri (pypi-uri "papermill" version))
       (sha256
        (base32 "097ai2n7f72a7hya9qnds3f28cg70p8xdj2c3cwqymzx28cskqlz"))))
    (build-system pyproject-build-system)
    (arguments
     (list
      #:test-flags
      ;; Do not bother testing Azure, AWS, and Google Cloud features.
      '(list "--ignore=papermill/tests/test_abs.py"
             "--ignore=papermill/tests/test_adl.py"
             "--ignore=papermill/tests/test_gcs.py"
             "--ignore=papermill/tests/test_s3.py")))
    (propagated-inputs (list python-aiohttp
                             python-ansicolors
                             python-click
                             python-entrypoints
                             python-nbclient
                             python-nbformat
                             python-pyyaml
                             python-requests
                             python-tenacity
                             python-tqdm))
    (native-inputs (list python-attrs
                         python-black
                         python-boto3
                         python-botocore
                         python-bumpversion
                         python-check-manifest
                         python-codecov
                         python-coverage
                         python-ipython
                         python-ipywidgets
                         python-moto
                         python-notebook
                         python-pytest
                         python-pytest-cov
                         python-pytest-env
                         python-pytest-mock
                         python-recommonmark
                         python-requests
                         python-setuptools
                         python-tox
                         python-twine
                         python-wheel))
    (home-page "https://github.com/nteract/papermill")
    (synopsis "Parameterize and run Jupyter and nteract Notebooks")
    (description "Papermill is a tool for parameterizing, executing, and
analyzing Jupyter Notebooks.")
    (license license:bsd-3)))

(define-public python-voila
  (package
    (name "python-voila")
    (version "0.3.5")
    (source
     (origin
       (method git-fetch)               ;no tests in pypi archive
       (uri (git-reference
             (url "https://github.com/voila-dashboards/voila")
             (commit (string-append "v" version))))
       (file-name (git-file-name name version))
       (sha256
        (base32
         "10qn34ddmcwcl9zxa0gwxarxr64k8hx4yysdwrf0iqvmzmkwmbbj"))))
    (build-system python-build-system)
    (arguments
     (list
      #:phases
      #~(modify-phases %standard-phases
          (add-after 'unpack 'relax-requirements
            (lambda _
              (substitute* "setup.cfg"
                (("nbclient>=0.4.0,<0.6")
                 "nbclient"))))
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (when tests?
                (setenv "HOME" "/tmp")
                (invoke "pytest" "-vv"
                        ;; Many tests depend on Node JavaScript dependencies
                        ;; and a running HTTP server; ignore them.
                        "--ignore" "tests/app"
                        "--ignore" "tests/server")))))))
    (propagated-inputs
     (list python-jupyter-client
           python-jupyter-server
           python-jupyterlab-server
           python-nbclient
           python-nbconvert
           python-traitlets
           python-websockets))
    (native-inputs
     (list python-ipywidgets
           python-matplotlib
           python-mock
           python-numpy
           python-pandas
           python-pytest
           python-pytest-tornasync
           python-tornado-6))
    (home-page "https://github.com/voila-dashboards/voila")
    (synopsis "Render live Jupyter notebooks with interactive widgets")
    (description
     "Voilà turns Jupyter notebooks into standalone web applications.  Unlike
the usual HTML-converted notebooks, each user connecting to the Voilà tornado
application gets a dedicated Jupyter kernel which can execute the callbacks to
changes in Jupyter interactive widgets.")
    (license license:bsd-3)))
mrhfgda9v76"))) vulkan-loader)) (native-inputs (list git-minimal/pinned pkg-config python)) (home-page "https://github.com/flightlessmango/MangoHud/") (synopsis "Vulkan and OpenGL overlay for monitoring performance and hardware") (description "MangoHud is a Vulkan and OpenGL overlay for monitoring frames per second (FPS), temperatures, CPU/GPU load and more.") (license license:expat))) (define-public ogre (package (name "ogre") (version "14.3.2") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/OGRECave/ogre") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "0acpwj0kj48jn2vv195cn6951gynz68zwji5sj3m06dj8ciw9r1h")))) (build-system cmake-build-system) (arguments (list #:phases #~(modify-phases %standard-phases (add-after 'unpack 'do-not-attempt-building-gtest (lambda _ (substitute* "Tests/CMakeLists.txt" (("NOT EXISTS \\$\\{PROJECT_BINARY_DIR}/googletest-1.11.0") "FALSE")))) (add-before 'configure 'unpack-imgui (lambda _ (copy-recursively #$(this-package-native-input "imgui-source") "../imgui-source"))) (add-before 'configure 'pre-configure ;; CMakeLists.txt forces a CMAKE_INSTALL_RPATH value. As ;; a consequence, we cannot suggest ours in configure flags. Fix ;; it. (lambda _ (substitute* "CMakeLists.txt" (("set\\(CMAKE_INSTALL_RPATH .*") "")))) (add-before 'check 'run-x-server (lambda _ (system "Xvfb &") (setenv "DISPLAY" ":0")))) #:configure-flags #~(let ((runpath (string-join (list (string-append #$output "/lib") (string-append #$output "/lib/OGRE")) ";"))) (list (string-append "-DCMAKE_INSTALL_RPATH=" runpath) "-DIMGUI_DIR=../imgui-source" "-DOGRE_BUILD_DEPENDENCIES=OFF" "-DOGRE_BUILD_RENDERSYSTEM_VULKAN=ON" "-DOGRE_BUILD_TESTS=TRUE" "-DOGRE_INSTALL_DOCS=TRUE" "-DOGRE_INSTALL_SAMPLES=TRUE" "-DOGRE_INSTALL_SAMPLES_SOURCE=TRUE")))) (native-inputs `(("doxygen" ,doxygen) ("imgui-source" ,(package-source imgui)) ("googletest" ,googletest) ("pkg-config" ,pkg-config) ("python" ,python) ("vulkan-headers" ,vulkan-headers) ("xorg-server-for-tests" ,xorg-server-for-tests))) (inputs (list bullet freeimage freetype glslang libxaw libxrandr libxt mesa pugixml sdl2 spirv-tools wayland zlib)) (synopsis "Scene-oriented, flexible 3D engine written in C++") (description "OGRE (Object-Oriented Graphics Rendering Engine) is a scene-oriented, flexible 3D engine written in C++ designed to make it easier and more intuitive for developers to produce applications utilising hardware-accelerated 3D graphics.") (home-page "https://www.ogre3d.org/") (license license:expat))) (define-public ogre-next (package (inherit ogre) (name "ogre-next") (version "3.0.0") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/OGRECave/ogre-next") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "1yrlg3s654xbp95208h9a2b8jcwdk69r6sjvll0aiyvxm4c056cw")))) (arguments (substitute-keyword-arguments (package-arguments ogre) ((#:tests? _ #f) ;; The test suite is currently disabled by the build system ;; (see: https://github.com/OGRECave/ogre-next/issues/466). #f))) (inputs (modify-inputs (package-inputs ogre) (append rapidjson))))) (define-public openexr (package (name "openexr") (version "3.2.4") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/AcademySoftwareFoundation/openexr") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "00s1a05kggk71vfbnsvykyjc2j7y6yyzgl63sy4yiddshz2k2mcr")))) (build-system cmake-build-system) (arguments (list #:configure-flags #~(list #$@(match (%current-system) ;; A test explicitly checks for SSE2 (would fail on ;; i686-linux), so make sure it is enabled for both C ;; and CPP. ((or "x86_64-linux" "i686-linux") '("-DCMAKE_CXX_FLAGS=-mfpmath=sse -msse2" "-DCMAKE_C_FLAGS=-mfpmath=sse -msse2")) (_ '()))) #:phases #~(modify-phases %standard-phases (add-after 'unpack 'patch-test-directory (lambda _ (substitute* (list "src/test/OpenEXRTest/tmpDir.h" "src/test/OpenEXRCoreTest/main.cpp") (("/var/tmp") "/tmp")))) #$@(if (target-64bit?) #~() #~((add-after 'patch-test-directory 'disable-broken-tests (lambda _ ;; Disable tests that fail at least on i686-linux. (substitute* '("src/test/OpenEXRCoreTest/main.cpp" "src/test/OpenEXRTest/main.cpp") (("TEST \\(testCompression, \"basic\"\\);") "") (("TEST\\( testNoCompression, \"core_compression\" \\);") "") (("TEST\\( testRLECompression, \"core_compression\" \\);") "") (("TEST\\( testZIPCompression, \"core_compression\" \\);") "") (("TEST\\( testZIPSCompression, \"core_compression\" \\);") "") (("TEST\\( testB44Compression, \"core_compression\" \\);") "") (("TEST\\( testB44ACompression, \"core_compression\" \\);") "") (("TEST \\(testOptimizedInterleavePatterns, \"basic\"\\);") ""))))))))) (inputs (list imath)) (propagated-inputs ;; Marked as Requires.private in OpenEXR.pc. (list libdeflate)) (home-page "https://www.openexr.com/") (synopsis "High-dynamic-range file format library") (description "OpenEXR provides the specification and reference implementation of the EXR file format. The purpose of EXR format is to accurately and efficiently represent high-dynamic-range scene-linear image data and associated metadata, with strong support for multi-part, multi-channel use cases.") (license license:bsd-3))) (define-public openexr-2 (package (name "openexr") (version (package-version ilmbase)) (source (origin (inherit (package-source ilmbase)) (file-name (git-file-name "openexr" version)))) (build-system cmake-build-system) (arguments `(#:phases (modify-phases %standard-phases (add-after 'unpack 'change-directory (lambda _ (chdir "OpenEXR") #t)) (add-after 'change-directory 'patch-test-directory (lambda _ (substitute* '("IlmImfFuzzTest/tmpDir.h" "IlmImfTest/tmpDir.h" "IlmImfUtilTest/tmpDir.h") (("/var/tmp") "/tmp")))) (add-after 'change-directory 'increase-test-timeout (lambda _ ;; On some architectures, we need to override the CTest default ;; timeout of 1500 seconds for the OpenEXR.IlmImf test. (substitute* "IlmImfTest/CMakeLists.txt" (("add_test\\(NAME OpenEXR\\.IlmImf.*" all) (string-append all "set_tests_properties(OpenEXR.IlmImf PROPERTIES TIMEOUT 15000)"))) #t)) ,@(if (not (target-64bit?)) `((add-after 'change-directory 'disable-broken-test (lambda _ (substitute* "IlmImfTest/main.cpp" ;; This test fails on i686. Upstream developers suggest ;; that this test is broken on i686 and can be safely ;; disabled: ;; https://github.com/openexr/openexr/issues/67#issuecomment-21169748 ((".*testOptimizedInterleavePatterns.*") "") ;; This one fails similarly on i686. ((".*testCompression.*") ""))))) '())))) (native-inputs (list pkg-config)) (propagated-inputs (list ilmbase ;used in public headers zlib)) ;OpenEXR.pc reads "-lz" (home-page (package-home-page openexr)) (synopsis (package-synopsis openexr)) (description (package-description openexr)) (license (package-license openexr)))) (define-public openimageio (package (name "openimageio") (version "2.5.13.0") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/AcademySoftwareFoundation/OpenImageIO") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "0bqalfcfjjk31a7zv2hyx0jz8jpdhpsmc3sqwmfl4zf431g45hpb")))) (build-system cmake-build-system) (arguments (list #:tests? #f ; half the tests require online data or use redirection #:configure-flags #~(list "-DUSE_EXTERNAL_PUGIXML=1" "-DOIIO_BUILD_TESTS=false") #:phases #~(modify-phases %standard-phases ; Work around a CMake Zlib-detection bug: ; https://issues.guix.gnu.org/72046 ; https://gitlab.kitware.com/cmake/cmake/-/issues/25200 (add-after 'configure 'fix-zlib-version (lambda _ (substitute* "include/imageio_pvt.h" (("#define ZLIB_VERSION \"1\\.3\"") "")))) (add-after 'install 'fix-OpenImageIOConfig (lambda _ (substitute* (string-append #$output "/lib/cmake/OpenImageIO/OpenImageIOConfig.cmake") (("#define ZLIB_VERSION \"1\\.3\"") ""))))))) (native-inputs (list pkg-config)) (inputs (list boost dcmtk fmt freetype giflib imath libglvnd libheif libjpeg-turbo libpng libraw libtiff libwebp opencolorio openexr openjpeg ;; openvdb ; OpenVDB needs OIIO to be built with C++17 or higher pugixml pybind11 python-wrapper robin-map zlib)) (synopsis "C++ library for reading and writing images") (description "OpenImageIO is a library for reading and writing images, and a bunch of related classes, utilities, and applications. There is a particular emphasis on formats and functionality used in professional, large-scale animation and visual effects work for film.") (home-page "https://github.com/AcademySoftwareFoundation/OpenImageIO") (license license:bsd-3))) (define-public openscenegraph (package (name "openscenegraph") (version "3.6.5") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/openscenegraph/OpenSceneGraph") (commit (string-append "OpenSceneGraph-" version)))) (sha256 (base32 "00i14h82qg3xzcyd8p02wrarnmby3aiwmz0z43l50byc9f8i05n1")) (file-name (git-file-name name version)))) (properties `((upstream-name . "OpenSceneGraph") (output-synopsis "pluginlib" "Plugins as shared libraries"))) (build-system cmake-build-system) (outputs (list "out" "pluginlib")) (arguments (list #:tests? #f ; no test target available ;; Without this flag, 'rd' will be added to the name of the ;; library binaries and break linking with other programs. #:build-type "Release" #:configure-flags #~(list (string-append "-DCMAKE_INSTALL_RPATH=" #$output "/lib:" #$output "/lib64")) #:modules `((guix build cmake-build-system) (guix build utils) (ice-9 regex)) #:phases #~(modify-phases %standard-phases (add-after 'install 'copy-plugins (lambda* (#:key outputs #:allow-other-keys) (let ((out (assoc-ref outputs "out")) (pluginlib (assoc-ref outputs "pluginlib"))) (mkdir-p (string-append pluginlib "/lib/pkgconfig")) (with-directory-excursion (string-append out "/lib/osgPlugins-" #$version) (for-each (lambda (lib) (let ((blib (basename lib)) (m (string-match "([^/]*)\\.so$" lib))) (symlink (canonicalize-path lib) (string-append pluginlib "/lib/lib" blib)) (call-with-output-file (string-append pluginlib "/lib/pkgconfig/" (match:substring m 1) ".pc") (lambda (port) (format port "libdir=~a/lib~%" pluginlib) (newline port) (format port "Name: ~a~%" (match:substring m 1)) (format port "Version: ~a~%" #$version) (display "Description: A plugin for openscenegraph\n" port) (display "Requires: openscenegraph\n" port) (format port "Libs: -L${libdir} -l~a~%" (match:substring m 1)))))) (find-files "." "\\.so"))))))))) (native-inputs (list pkg-config unzip)) (inputs `(("giflib" ,giflib) ("libjpeg" ,libjpeg-turbo) ; required for the JPEG texture plugin. ("jasper" ,jasper) ("librsvg" ,(librsvg-for-system)) ("libxrandr" ,libxrandr) ("ffmpeg" ,ffmpeg-4) ("mesa" ,mesa))) (synopsis "High-performance real-time graphics toolkit") (description "The OpenSceneGraph is a high-performance 3D graphics toolkit used by application developers in fields such as visual simulation, games, virtual reality, scientific visualization and modeling.") (home-page "http://www.openscenegraph.org") ;; The 'LICENSE' file explains that the source is licensed under ;; LGPL 2.1, but with 4 exceptions. This version is called OSGPL. (license license:lgpl2.1))) (define-public gr-framework (package (name "gr-framework") (version "0.69.1") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/sciapp/gr") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "0kllbj4bj3f5w4wzg29ilac66fd0bslqq5srj845ssmzp4ynqglh")) (modules '((guix build utils))) (snippet '(begin (delete-file-recursively "3rdparty"))))) (build-system cmake-build-system) (arguments `(#:tests? #f)) ; no test target (inputs `(("bzip2" ,bzip2) ("cairo" ,cairo) ("fontconfig" ,fontconfig) ("ffmpeg" ,ffmpeg) ("freetype" ,freetype) ("ghostscript" ,ghostscript) ("glfw" ,glfw) ("libjpeg-turbo" ,libjpeg-turbo) ("libpng" ,libpng) ("libtiff" ,libtiff) ("libx11" ,libx11) ("libxft" ,libxft) ("libxt" ,libxt) ("pixman" ,pixman) ("qtbase" ,qtbase-5) ("qhull" ,qhull) ("zlib" ,zlib))) (home-page "https://gr-framework.org/") (synopsis "Graphics library for visualisation applications") (description "GR is a universal framework for cross-platform visualization applications. It offers developers a compact, portable and consistent graphics library for their programs. Applications range from publication quality 2D graphs to the representation of complex 3D scenes. GR is essentially based on an implementation of a @acronym{GKS, Graphical Kernel System}. As a self-contained system it can quickly and easily be integrated into existing applications (i.e. using the @code{ctypes} mechanism in Python or @code{ccall} in Julia).") (license license:expat))) (define-public openmw-openscenegraph ;; OpenMW prefers its own fork of openscenegraph: ;; https://wiki.openmw.org/index.php?title=Development_Environment_Setup#OpenSceneGraph. (let ((commit "68c5c573d47766507bfb191e0c8d213b1997ad20")) (hidden-package (package (inherit openscenegraph) (version (git-version "3.6" "3" commit)) (outputs (list "out")) (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/OpenMW/osg/") (commit commit))) (file-name (git-file-name (package-name openscenegraph) version)) (sha256 (base32 "12xgdmymjh4rb7djzniy15lvi45y0x4i0l5swf031r8g4zn72v2n")))) (arguments (substitute-keyword-arguments (package-arguments openscenegraph) ((#:configure-flags flags) ;; As per the above wiki link, the following plugins are enough: #~(append '("-DBUILD_OSG_PLUGINS_BY_DEFAULT=0" "-DBUILD_OSG_PLUGIN_OSG=1" "-DBUILD_OSG_PLUGIN_DAE=1" "-DBUILD_OSG_PLUGIN_DDS=1" "-DBUILD_OSG_PLUGIN_TGA=1" "-DBUILD_OSG_PLUGIN_BMP=1" "-DBUILD_OSG_PLUGIN_JPEG=1" "-DBUILD_OSG_PLUGIN_PNG=1" "-DBUILD_OSG_PLUGIN_FREETYPE=1" "-DBUILD_OSG_DEPRECATED_SERIALIZERS=0") #$flags)) ((#:phases phases) #~(modify-phases #$phases (delete 'copy-plugins))))))))) (define-public povray (package (name "povray") (version "3.7.0.10") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/POV-Ray/povray") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "19bv962clwc6sk53kq8bqf77fh0v46afm2knjbki8yj0m1mnyyd0")) (modules '((guix build utils))) (snippet ;; Delete bundled libraries. '(delete-file-recursively "libraries")))) (build-system gnu-build-system) (native-inputs (list autoconf automake pkg-config)) (inputs (list boost libjpeg-turbo libpng libtiff openexr-2 sdl zlib)) (arguments (list #:configure-flags #~(list "COMPILED_BY=Guix" (string-append "--with-boost-libdir=" #$(this-package-input "boost") "/lib") "--disable-optimiz-arch") #:phases '(modify-phases %standard-phases (add-after 'unpack 'run-prebuild (lambda _ (setenv "HOME" (getcwd)) (with-directory-excursion "unix" (substitute* "prebuild.sh" (("/bin/sh") (which "sh")) ;; Make test run non-interactive. (("biscuit.pov -f \\+d \\+p \\+v") "biscuit.pov -f +v")) (invoke "sh" "prebuild.sh")))) ;; The bootstrap script is run by the prebuild script in the ;; "run-prebuild" phase. (delete 'bootstrap)))) (synopsis "Tool for creating three-dimensional graphics") (description "@code{POV-Ray} is short for the Persistence of Vision Raytracer, a tool for producing high-quality computer graphics. @code{POV-Ray} creates three-dimensional, photo-realistic images using a rendering technique called ray-tracing. It reads in a text file containing information describing the objects and lighting in a scene and generates an image of that scene from the view point of a camera also described in the text file. Ray-tracing is not a fast process by any means, but it produces very high quality images with realistic reflections, shading, perspective and other effects.") (home-page "http://www.povray.org/") (license license:agpl3+))) (define-public ctl (package (name "ctl") (version "1.5.3") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/ampas/CTL") (commit (string-append "ctl-" version)))) (file-name (git-file-name name version)) (sha256 (base32 "1qhfp9b90czvxjkf66sbnqyw3wvmdvl1pkh6201fxhqg7grbfvwc")))) (build-system cmake-build-system) ;; Headers include OpenEXR and IlmBase headers. (propagated-inputs (list openexr-2)) (inputs (list libtiff)) (home-page "https://ampasctl.sourceforge.net") (synopsis "Color Transformation Language") (description "The Color Transformation Language, or CTL, is a small programming language that was designed to serve as a building block for digital color management systems. CTL allows users to describe color transforms in a concise and unambiguous way by expressing them as programs. In order to apply a given transform to an image, the color management system instructs a CTL interpreter to load and run the CTL program that describes the transform. The original and the transformed image constitute the CTL program's input and output.") ;; The web site says it's under a BSD-3 license, but the 'LICENSE' file ;; and headers use different wording. (license (license:non-copyleft "file://LICENSE")))) (define-public brdf-explorer ;; There are no release tarballs, and not even tags in the repo, ;; so use the latest revision. (let ((commit "5b2cd46f38a06e47207fa7229b72d37beb945019") (revision "1")) (package (name "brdf-explorer") (version (string-append "1.0.0-" revision "." (string-take commit 9))) (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/wdas/brdf") (commit commit))) (sha256 (base32 "06vzbiajzbi2xl8jlff5d45bc9wd68i3jdndfab1f3jgfrd8bsgx")) (file-name (string-append name "-" version "-checkout")))) (build-system gnu-build-system) (arguments `(#:phases (modify-phases %standard-phases (replace 'configure (lambda* (#:key outputs #:allow-other-keys) (let ((out (assoc-ref outputs "out"))) (invoke "qmake" (string-append "prefix=" out))))) (add-after 'install 'wrap-program (lambda* (#:key outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) (bin (string-append out "/bin")) (data (string-append out "/share/brdf"))) (with-directory-excursion bin (rename-file "brdf" ".brdf-real") (call-with-output-file "brdf" (lambda (port) (format port "#!/bin/sh # Run the thing from its home, otherwise it just bails out. cd \"~a\" exec -a \"$0\" ~a/.brdf-real~%" data bin))) (chmod "brdf" #o555))) #t))))) (native-inputs (list qttools-5)) ;for 'qmake' (inputs (list qtbase-5 mesa glew freeglut zlib)) (home-page (string-append "https://web.archive.org/web/20190115030100/" "https://www.disneyanimation.com/technology/brdf.html")) (synopsis "@acronym{BRDF, bidirectional reflectance distribution function} analyzer") (description "BRDF Explorer is an application that allows the development and analysis of @acronym{BRDF, bidirectional reflectance distribution functions}. It can load and plot analytic BRDF functions (coded as functions in OpenGL's GLSL shader language), measured material data from the MERL database, and anisotropic measured material data from MIT CSAIL. Graphs and visualizations update in real time as parameters are changed, making it a useful tool for evaluating and understanding different BRDFs (and other component functions).") (license license:ms-pl)))) (define-public agg (package (name "agg") (version "2.5") (source (origin (method url-fetch) (uri (list (string-append "ftp://ftp.fau.de/gentoo/distfiles/agg-" version ".tar.gz") (string-append "ftp://ftp.ula.ve/gentoo/distfiles/agg-" version ".tar.gz") ;; Site was discontinued. (string-append "http://www.antigrain.com/agg-" version ".tar.gz"))) (sha256 (base32 "07wii4i824vy9qsvjsgqxppgqmfdxq0xa87i5yk53fijriadq7mb")) (patches (search-patches "agg-am_c_prototype.patch" "agg-2.5-gcc8.patch")))) (build-system gnu-build-system) (arguments '(#:configure-flags (list (string-append "--x-includes=" (assoc-ref %build-inputs "libx11") "/include") (string-append "--x-libraries=" (assoc-ref %build-inputs "libx11") "/lib") "--disable-examples") #:phases (modify-phases %standard-phases (replace 'bootstrap (lambda _ ;; let's call configure from configure phase and not now (substitute* "autogen.sh" (("./configure") "# ./configure")) (invoke "sh" "autogen.sh")))))) (native-inputs (list pkg-config libtool autoconf automake)) (inputs (list libx11 freetype sdl)) ;; Antigrain.com was discontinued. (home-page "https://agg.sourceforge.net/antigrain.com/index.html") (synopsis "High-quality 2D graphics rendering engine for C++") (description "Anti-Grain Geometry is a high quality rendering engine written in C++. It supports sub-pixel resolutions and anti-aliasing. It is also a library for rendering @acronym{SVG, Scalable Vector Graphics}.") (license license:gpl2+))) (define-public python-pastel (package (name "python-pastel") (version "0.2.0") (source (origin (method url-fetch) (uri (pypi-uri "pastel" version)) (sha256 (base32 "0dnaw44ss10i10z4ksy0xljknvjap7rb7g0b8p6yzm5x4g2my5a6")))) (build-system python-build-system) (arguments `(#:phases (modify-phases %standard-phases (replace 'check (lambda _ (invoke "pytest" "pastel" "tests/")))))) (native-inputs (list python-pytest)) (home-page "https://github.com/sdispater/pastel") (synopsis "Library to colorize strings in your terminal") (description "Pastel is a simple library to help you colorize strings in your terminal.") (license license:expat))) (define-public facedetect (let ((commit "5f9b9121001bce20f7d87537ff506fcc90df48ca") (revision "0")) (package (name "facedetect") (version (git-version "0.1" revision commit)) (source (origin (method git-fetch) (uri (git-reference (url "https://gitlab.com/wavexx/facedetect") (commit commit))) (file-name (git-file-name name version)) (sha256 (base32 "1jiz72y3ykkxkiij1qqjf45gxg223sghkjir7sr663x91kviwkjd")))) (build-system copy-build-system) (arguments (list #:install-plan #~`(("facedetect" "bin/facedetect") ("README.rst" ,(string-append "share/doc/" #$name "-" #$version "/README.rst"))) #:phases #~(modify-phases %standard-phases (add-after 'unpack 'configure (lambda* (#:key inputs #:allow-other-keys) (substitute* "facedetect" (("^DATA_DIR = .*") (string-append "DATA_DIR = '" #$opencv "/share/opencv" #$(version-major (package-version opencv)) "'\n"))))) (add-after 'install 'wrap (lambda _ (let ((program (string-append #$output "/bin/facedetect"))) (patch-shebang program) (wrap-program program `("GUIX_PYTHONPATH" prefix ,(search-path-as-string->list (getenv "GUIX_PYTHONPATH")))))))))) (inputs (list bash-minimal opencv python python-numpy)) (home-page "https://www.thregr.org/~wavexx/software/facedetect/") (synopsis "Face detector") (description "@code{facedetect} is a face detector for batch processing. It answers the question: \"Is there a face in this image?\" and gives back either an exit code or the coordinates of each detect face in the standard output. @code{facedetect} is used in software such as @code{fgallery} to improve the thumbnail cutting region, so that faces are always centered.") (license license:gpl2+)))) (define-public fgallery (package (name "fgallery") (version "1.9.1") (source (origin (method url-fetch) (uri (string-append "https://www.thregr.org/~wavexx/software/fgallery/releases/" "fgallery-" version ".zip")) (sha256 (base32 "0zf6r88m2swgj1ylgh3qa1knzb4if501hzvga37h9psy8k179w8n")))) (build-system gnu-build-system) (arguments `(#:tests? #f ; no tests #:phases (modify-phases %standard-phases (delete 'configure) (delete 'build) (replace 'install (lambda* (#:key inputs outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) (script (string-append out "/bin/fgallery")) (perl5lib (getenv "PERL5LIB"))) (define (bin-directory input-name) (string-append (assoc-ref inputs input-name) "/bin")) (invoke "make" "install" (string-append "PREFIX=" out)) ;; fgallery copies files from store when it is run. The ;; read-only permissions from the store directories will cause ;; fgallery to fail. Do not preserve file attributes when ;; copying files to prevent it. (substitute* script (("'cp'") "'cp', '--no-preserve=all'")) (wrap-program script `("PATH" ":" prefix ,(map bin-directory '("imagemagick" "lcms" "facedetect" "fbida" "libjpeg-turbo" "zip" "jpegoptim" "pngcrush" "p7zip"))) `("PERL5LIB" ":" prefix (,perl5lib))))))))) (native-inputs (list unzip)) (inputs (list bash-minimal imagemagick lcms facedetect fbida libjpeg-turbo zip perl perl-cpanel-json-xs perl-image-exiftool jpegoptim pngcrush p7zip)) (home-page "https://www.thregr.org/~wavexx/software/fgallery/") (synopsis "Static photo gallery generator") (description "FGallery is a static, JavaScript photo gallery generator with minimalist look. The result can be uploaded on any web server without additional requirements.") (license license:gpl2+))) (define-public opensubdiv (package (name "opensubdiv") (version "3.6.0") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/PixarAnimationStudios/OpenSubdiv") (commit (string-append "v" (string-join (string-split version #\.) "_"))))) (file-name (git-file-name name version)) (sha256 (base32 "0h9scxiigijzlpv4r0s0nhxlndhv1cmarb2bqgmlwcln1jjvlb4n")))) (build-system cmake-build-system) (arguments (list #:phases #~(modify-phases %standard-phases (add-before 'configure 'set-glew-location (lambda _ (setenv "GLEW_LOCATION" #$(this-package-input "glew")))) (add-before 'check 'start-xorg-server (lambda* (#:key inputs #:allow-other-keys) ;; The test suite requires a running X server. (system "Xvfb :1 &") (setenv "DISPLAY" ":1")))))) (native-inputs (list xorg-server-for-tests)) (inputs (list glew libxrandr libxcursor libxinerama libxi zlib glfw)) (home-page "https://graphics.pixar.com/opensubdiv/") (synopsis "High performance subdivision surface evaluation") (description "OpenSubdiv is a set of libraries that implement high performance subdivision surface (subdiv) evaluation on massively parallel CPU and GPU architectures.") (license license:asl2.0))) (define-public opencsg (let ((dot-to-dash (lambda (c) (if (char=? c #\.) #\- c)))) (package (name "opencsg") (version "1.4.2") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/floriankirsch/OpenCSG") (commit (string-append "opencsg-" (string-map dot-to-dash version) "-release")))) (file-name (git-file-name name version)) (sha256 (base32 "00m4vs6jn3scqczscc4591l1d6zg6anqp9v1ldf9ymf70rdyvm7m")))) (build-system gnu-build-system) (arguments `(#:phases (modify-phases %standard-phases (replace 'configure (lambda* (#:key outputs #:allow-other-keys) (substitute* "src/Makefile" (("/usr/local") (assoc-ref outputs "out"))) #t)) (add-before 'build 'skip-example (lambda _ (chdir "src") #t))))) (inputs (list glew freeglut)) (synopsis "Library for rendering Constructive Solid Geometry (CSG)") (description "OpenCSG is a library for rendering Constructive Solid Geometry (CSG) using OpenGL. CSG is an approach for modeling complex 3D-shapes using simpler ones. For example, two shapes can be combined by uniting them, by intersecting them, or by subtracting one shape from the other.") (home-page "https://www.opencsg.org/") (license license:gpl2)))) (define-public coin3d (package (name "coin3d") (version "4.0.2") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/coin3d/coin") (commit (string-append "v" version)) (recursive? #t))) (file-name (git-file-name name version)) (sha256 (base32 "1p59q67zc45pwicknsccvmby09snhz35725wr3xsh2v6kxza76a4")) (modules '((guix build utils))) (snippet #~(begin ;; Delete binaries (for-each delete-file '("cfg/csubst.exe" "cfg/wrapmsvc.exe")) ;; Unbundle expat. (delete-file-recursively "src/xml/expat") (substitute* "src/xml/document.cpp" (("expat/expat\\.h") "expat.h")) ;; Delete references to packaging tool cpack. Otherwise the build ;; fails with "add_subdirectory given source "cpack.d" which is not ;; an existing directory." (substitute* "CMakeLists.txt" ((".*cpack.d.*") "")))))) (build-system cmake-build-system) (arguments (list #:configure-flags #~(list "-DCOIN_BUILD_DOCUMENTATION_MAN=ON" "-DUSE_EXTERNAL_EXPAT=ON" ;; Disable "runtime linking" of libraries, i.e. `dlopen`, ;; force to use libraries at build time. "-DFONTCONFIG_RUNTIME_LINKING=OFF" "-DFREETYPE_RUNTIME_LINKING=OFF" "-DLIBBZIP2_RUNTIME_LINKING=OFF" "-DOPENAL_RUNTIME_LINKING=OFF" ;"-DSIMAGE_RUNTIME_LINKING=OFF" -- Not packaged yet. "-DZLIB_RUNTIME_LINKING=OFF" "-DGLU_RUNTIME_LINKING=OFF" ;"-DSPIDERMONKEY_RUNTIME_LINKING=OFF" -- Can't find mozjs. (string-append "-DBOOST_ROOT=" #$(this-package-input "boost"))))) (native-inputs (list doxygen graphviz)) (inputs (list boost bzip2 expat fontconfig freeglut freetype glew libx11 openal zlib)) (home-page "https://github.com/coin3d/coin") (synopsis "High-level 3D visualization library with Open Inventor 2.1 API") (description "Coin is a 3D graphics library with an Application Programming Interface based on the Open Inventor 2.1 API. For those who are not familiar with Open Inventor, it is a scene-graph based retain-mode rendering and model interaction library, written in C++, which has become the de facto standard graphics library for 3D visualization and visual simulation software in the scientific and engineering community.") (license license:bsd-3))) (define-deprecated coin3D coin3d) (export coin3D) (define-deprecated coin3D-4 coin3d) (export coin3D-4) (define-public skia ;; Releases follow those of Chromium, about every 6 weeks. The release ;; version can be found on this page: ;; https://skia.org/docs/user/release/release_notes/. The commit used ;; should be the last commit, as recommended at ;; https://skia.org/docs/user/release/. (let ((version "112") (revision "0") (commit "6d0b93856303fcf3021a8b40654d7739fda4dfb0")) (package (name "skia") (version (git-version version revision commit)) (source (origin (method git-fetch) (uri (git-reference (url "https://skia.googlesource.com/skia.git") (commit commit))) (file-name (git-file-name name version)) (sha256 (base32 "0g07xlvpbbxqmr9igvy5d1hy11z7dz9nzp2fd3ka9y2jqciniyz6")))) (build-system gnu-build-system) ;actually GN + Ninja (arguments (list #:phases #~(modify-phases %standard-phases (replace 'configure (lambda* (#:key inputs #:allow-other-keys) (substitute* "BUILD.gn" ;; Workaround a bug in the zlib third_party definition, that ;; fails the build even when zlib is found from the system. (("deps = \\[ \"//third_party/zlib\" ]") "deps = []")) (invoke "gn" "gen" "build" (string-append ;; "--args=" "cc=\"gcc\" " ;defaults to 'cc' "is_official_build=true " ;to use system libraries "is_component_build=true " ;build as a shared library "skia_use_system_zlib=true " ; use system zlib library ;; Specify where locate the harfbuzz and freetype ;; includes. (format #f "extra_cflags=[\"-I~a\",\"-I~a\"] " (search-input-directory inputs "include/harfbuzz") (search-input-directory inputs "include/freetype2")) ;; Otherwise the validate-runpath phase fails. "extra_ldflags=[\"-Wl,-rpath=" #$output "/lib\"] " ;; Disabled, otherwise the build system attempts to ;; download the SDK at build time. "skia_use_dng_sdk=false " ;; Wuffs is a google language that may improve performance ;; disabled while unpackaged "skia_use_wuffs=false ")))) (replace 'build (lambda* (#:key parallel-build? #:allow-other-keys) (let ((job-count (if parallel-build? (number->string (parallel-job-count)) "1"))) (invoke "ninja" "-j" job-count "-C" "build")))) (replace 'install (lambda _ ;; Install headers. (for-each (lambda (h) (install-file h (string-append #$output "/include/skia/" (dirname h)))) (find-files "." "\\.h$")) ;; Install libraries. (for-each (lambda (lib) (install-file lib (string-append #$output "/lib"))) (find-files "build" "^lib.*\\.(a|so)")) ;; This pkgconfig file is useful at least to the ;; python-skia-pathops package. (define skia.pc (string-append #$output "/lib/pkgconfig/skia.pc")) (mkdir-p (dirname skia.pc)) (call-with-output-file skia.pc (lambda (port) (format port "\ prefix=~a exec_prefix=${prefix} libdir=${prefix}/lib includedir=${prefix}/include/skia Name: skia Description: 2D graphic library for drawing text, geometries and images. URL: https://skia.org/ Version: ~a Libs: -L${libdir} -lskia Cflags: -I${includedir}~%" #$output #$version))))) (replace 'check (lambda* (#:key tests? inputs native-inputs #:allow-other-keys) (if tests? (let ((icu #$(this-package-native-input "icu4c-for-skia"))) ;; Unbundle SPIRV-Tools dependency. (substitute* "BUILD.gn" (("deps \\+= \\[ \"//third_party/externals/spirv-tools:spvtools_val\" \\]") "libs += [ \"SPIRV-Tools\" ]")) (substitute* "src/sksl/SkSLCompiler.cpp" (("\"spirv-tools/libspirv.hpp\"") "<libspirv.hpp>")) ;; Configure ICU dependency. (substitute* "third_party/icu/BUILD.gn" (("data_dir = \"\\.\\./externals/icu/\"") (string-append "data_dir = \"" icu "/share/data/\"")) (("script = \"\\.\\./externals/icu/scripts/") (string-append "script = \"" icu "/share/scripts/")) (("\\.\\./externals/icu/common/icudtl\\.dat") (string-append icu "/share/data/icudtl.dat")) (("sources = icu_sources") "") (("sources \\+= \\[ \"\\$data_assembly\" \\]") "sources = [ \"$data_assembly\" ]")) ;; Enable system libraries without is_official_build=true. ;; This is necessary because is_official_build prevents from ;; building dm. (for-each (lambda (libname) (let ((snake (string-join (string-split libname #\-) "_"))) (substitute* (string-append "third_party/" libname "/BUILD.gn") (((string-append "skia_use_system_" snake " = is_official_build.*")) (string-append "skia_use_system_" snake " = true"))))) '("zlib" "libjpeg-turbo" "harfbuzz" "libpng" "libwebp")) ;; Configure with gn. (invoke "gn" "gen" "out/Debug" (string-append "--args=" "cc=\"gcc\" " ;defaults to 'cc' "skia_compile_sksl_tests=false " ; disable some tests "skia_use_perfetto=false " ; disable performance tests "skia_use_wuffs=false " ; missing performance tool "skia_use_system_expat=true " ; use system expat library "skia_use_system_zlib=true " ; use system zlib library ;; Specify where to locate the includes. "extra_cflags=[" (string-join (map (lambda (lib) (string-append "\"-I" (search-input-directory inputs (string-append "include/" lib)) "\"")) '("harfbuzz" "freetype2" "spirv-tools" "spirv" "unicode")) ",") "] " ;; Otherwise the validate-runpath phase fails. "extra_ldflags=[" "\"-Wl,-rpath=" #$output "/lib\"" "] " ;; Disabled, otherwise the build system attempts to ;; download the SDK at build time. "skia_use_dng_sdk=false " "skia_use_runtime_icu=true ")) ;; Build dm testing tool. (symlink (string-append #$(this-package-native-input "gn") "/bin/gn") "./bin/gn") (invoke "ninja" "-C" "out/Debug" "dm") ;; The test suite requires an X server. (let ((xvfb (search-input-file (or native-inputs inputs) "bin/Xvfb")) (display ":1")) (setenv "DISPLAY" display) (system (string-append xvfb " " display " &"))) ;; Run tests. (invoke "out/Debug/dm" "-v" "-w" "dm_output" "--codecWritePath" "dm_output" "--simpleCodec" "--skip" ;; The underscores are part of the dm syntax for ;; skipping tests. ;; These tests fail with segmentation fault. "_" "_" "_" "Codec_trunc" "_" "_" "_" "AnimCodecPlayer" "_" "_" "_" "Codec_partialAnim" "_" "_" "_" "Codec_InvalidImages" "_" "_" "_" "Codec_GifInterlacedTruncated" ;; This test started failing possibly after mesa ;; being updated to 23.2.1 and possibly only on some ;; hardware. "_" "_" "_" "SkRuntimeBlender_GPU" "_" "_" "_" "SkText_UnicodeText_Flags" "_" "_" "_" "SkParagraph_FontStyle" "_" "_" "_" "flight_animated_image" ;; These tests fail because of Codec/Sk failure. "_" "_" "_" "AndroidCodec_computeSampleSize" "_" "_" "_" "AnimatedImage_invalidCrop" "_" "_" "_" "AnimatedImage_scaled" "_" "_" "_" "AnimatedImage_copyOnWrite" "_" "_" "_" "AnimatedImage" "_" "_" "_" "BRD_types" "_" "_" "_" "Codec_frames" "_" "_" "_" "Codec_partial" "_" "_" "_" "Codec_partialWuffs" "_" "_" "_" "Codec_requiredFrame" "_" "_" "_" "Codec_rewind" "_" "_" "_" "Codec_incomplete" "_" "_" "_" "Codec_InvalidAnimated" "_" "_" "_" "Codec_ossfuzz6274" "_" "_" "_" "Codec_gif_out_of_palette" "_" "_" "_" "Codec_xOffsetTooBig" "_" "_" "_" "Codec_gif" "_" "_" "_" "Codec_skipFullParse" "_" "_" "_" "AndroidCodec_animated_gif" ;; These fail for unknown reasons. "_" "_" "_" "Gif" "_" "_" "_" "Wuffs_seek_and_decode" "_" "_" "_" "Skottie_Shaper_ExplicitFontMgr" "8888" "skp" "_" "_" "8888" "lottie" "_" "_" "gl" "skp" "_" "_" "gl" "lottie" "_" "_" "_" "_" "_" "ES2BlendWithNoTexture")) (format #t "test suite not run~%"))))))) (native-inputs (list gn libjpeg-turbo ninja pkg-config python-wrapper spirv-tools spirv-headers icu4c-for-skia glu xorg-server-for-tests)) (inputs (list expat fontconfig freetype harfbuzz mesa libwebp zlib)) (home-page "https://skia.org/") (synopsis "2D graphics library") (description "Skia is a 2D graphics library for drawing text, geometries, and images. It supports: @itemize @item 3x3 matrices with perspective @item antialiasing, transparency, filters @item shaders, xfermodes, maskfilters, patheffects @item subpixel text @end itemize") (license license:bsd-3)))) (define-public superfamiconv (package (name "superfamiconv") (version "0.8.8") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/Optiroc/SuperFamiconv") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "0848szv6a2b8wdganh6mw5i8vn8cqvn1kbwzx7mb9wlrf5wzqn37")))) (build-system gnu-build-system) (arguments `(#:tests? #f ; no tests #:phases (modify-phases %standard-phases (delete 'configure) (replace 'install (lambda* (#:key outputs #:allow-other-keys) (let* ((outdir (assoc-ref outputs "out")) (bindir (string-append outdir "/bin"))) (install-file "bin/superfamiconv" bindir) #t)))))) (home-page "https://github.com/Optiroc/SuperFamiconv") (synopsis "Tile graphics converter supporting SNES, Game Boy Color and PC Engine formats") (description "SuperFamiconv is a converter for tiled graphics, supporting the graphics formats of the SNES, Game Boy Color and PC Engine game consoles. Automated palette selection is supported.") (license license:expat))) (define-public drawpile ;; This commit fix building with libmicrohttpd>=0.71. (let ((commit "ed1a75deb113da2d1df91a28f557509c4897130e") (revision "1")) (package (name "drawpile") (version (string-append "2.1.17-" revision "." (string-take commit 9))) (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/drawpile/Drawpile") (commit commit))) (file-name (git-file-name name version)) (sha256 (base32 "1y21h1hk9ipkjvhjgas0c5hkjyan92vsxbxrn60c906hzqln2fr1")))) (build-system qt-build-system) (arguments '(#:configure-flags (list "-DTESTS=ON" "-DTOOLS=ON" "-DKIS_TABLET=ON"))) (native-inputs (list extra-cmake-modules pkg-config)) (inputs (list giflib karchive-5 kdnssd-5 libmicrohttpd libsodium libvpx libxi ;; ("miniupnpc" ,miniupnpc) ;segfaults for some reason qtbase-5 qtkeychain qtmultimedia-5 qtsvg-5 qtx11extras)) (home-page "https://drawpile.net") (synopsis "Collaborative drawing program") (description "Drawpile is a drawing program that allows share the canvas with other users in real time. Some feature highlights: @itemize @item Shared canvas using the built-in server or a dedicated server @item Record, play back and export drawing sessions @item Simple animation support @item Layers and blending modes @item Text layers @item Supports pressure sensitive Wacom tablets @item Built-in chat @item Supports OpenRaster file format @item Encrypted connections using SSL @item Automatic port forwarding with UPnP @end itemize\n") (license license:gpl3+)))) (define-public openxr (package (name "openxr") (version "1.0.26") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/KhronosGroup/OpenXR-SDK") (commit (string-append "release-" version)))) (file-name (git-file-name name version)) (modules '((guix build utils))) (snippet '(begin ;; Delete bundled jsoncpp. (delete-file-recursively "src/external/jsoncpp"))) (sha256 (base32 "0s66xgwkdj5vn05l493hqydrxfpxxidd6mcb8l7l5awhn88cy16f")))) (build-system cmake-build-system) (arguments `(#:tests? #f)) ; there are no tests (native-inputs (list pkg-config python shaderc vulkan-headers)) (inputs (list jsoncpp mesa vulkan-loader wayland)) (home-page "https://www.khronos.org/openxr/") (synopsis "Generated headers and sources for OpenXR loader") (description "This package contains OpenXR headers, as well as source code and build scripts for the OpenXR loader.") ;; Dual licensed. Either license applies. (license (list license:asl2.0 license:expat)))) (define-public tinygltf (package (name "tinygltf") (version "2.8.21") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/syoyo/tinygltf") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "14712lndwlk4y001jxf2rxhwrw0w5gbc2hyh9kpik1galdzg41ii")) (modules '((guix build utils))) (snippet #~(begin (for-each delete-file-recursively (list "examples" ".github" "tools")) ;; tinygltf bundles json, stb-image and stb-image-write ;; headers. Delete those, and use symlink ours instead. (for-each delete-file (list "json.hpp" "stb_image.h" "stb_image_write.h" "tests/catch.hpp")))))) (build-system cmake-build-system) (arguments (list #:phases #~(modify-phases %standard-phases (add-after 'unpack 'use-our-packages (lambda* (#:key inputs #:allow-other-keys) (symlink (search-input-file inputs "include/nlohmann/json.hpp") "json.hpp") (symlink (search-input-file inputs "include/stb_image.h") "stb_image.h") (symlink (search-input-file inputs "include/stb_image_write.h") "stb_image_write.h") (symlink (search-input-file inputs "include/catch.hpp") "catch.hpp"))) (add-after 'install 'delete-static-lib (lambda _ (delete-file (string-append #$output "/lib/libtinygltf.a")))) (replace 'check (lambda* (#:key tests? #:allow-other-keys) (if tests? (with-directory-excursion "../source/tests" (invoke "make") (invoke "./tester") (invoke "./tester_noexcept")) (format #t "test suite not run~%"))))))) (inputs (list nlohmann-json stb-image stb-image-write)) (native-inputs (list catch-framework clang)) (home-page "https://github.com/syoyo/tinygltf") (synopsis "Header only GL Transmission Format library") (description "This package provides a header only C++11 @url{https://github.com/KhronosGroup/glTF, glTF} (GL Transmission Format) 2.0 library. GL Transmission Format (glTF) is a royalty-free specification for the efficient transmission and loading of 3D scenes and models by applications. glTF minimizes both the size of 3D assets, and the runtime processing needed to unpack and use those assets. glTF defines an extensible, common publishing format for 3D content tools and services that streamlines authoring workflows and enables interoperable use of content across the industry.") (license license:expat))) (define-public monado (package (name "monado") (version "24.0.0") (source (origin (method git-fetch) (uri (git-reference (url "https://gitlab.freedesktop.org/monado/monado") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "1ix52kr4av259g4n06338qjrlfssi1v2dnb4pfr863wbyrbb8p4l")))) (build-system cmake-build-system) (inputs (list ffmpeg glslang eudev libusb libxcb libxrandr mesa python v4l-utils vulkan-loader)) (native-inputs (list eigen pkg-config vulkan-headers)) (home-page "https://monado.freedesktop.org/") (synopsis "OpenXR runtime") (description "Monado is an OpenXR runtime delivering immersive experiences such as VR and AR on mobile, PC/desktop, and any other device. Monado aims to be a complete and conforming implementation of the OpenXR API made by Khronos.") (license license:boost1.0))) (define-public azpainter (package (name "azpainter") (version "3.0.6") (source (origin (method git-fetch) (uri (git-reference (url "https://gitlab.com/azelpg/azpainter") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "0lk74drrksk340fzyzvrq0ixwj498adshbp505cj163qsqnndj7y")))) (build-system gnu-build-system) ;actually a home grown build system (arguments (list #:tests? #f #:phases #~(modify-phases %standard-phases (replace 'configure (lambda _ (invoke "./configure" (string-append "--prefix=" #$output)))) (replace 'build (lambda* (#:key parallel-build? #:allow-other-keys) (let ((job-count (if parallel-build? (number->string (parallel-job-count)) "1"))) (invoke "ninja" "-j" job-count "-C" "build")))) (add-before 'install 'disable-cache-generation (lambda _ (setenv "DESTDIR" "/") #t)) (replace 'install (lambda _ (invoke "ninja" "-C" "build" "install")))))) (inputs (list fontconfig freetype libjpeg-turbo libpng libtiff libwebp libx11 libxcursor libxext libxi zlib)) (native-inputs (list ninja pkg-config)) (home-page "http://azsky2.html.xdomain.jp/soft/azpainter.html") (synopsis "Paint software for editing illustrations and images") (description "AzPainter is a lightweight full color painting application for editing illustrations and images. Features include: @itemize @item Layers @item Many artistic filters @item Good range of selection tools @item Pen pressure support with automatic brush size adjustment @item Support for 16-bit color images with transparency (RGBA) @item Support for image formats like PSD, PNG, JPEG, TIFF, WebP @end itemize ") (license license:gpl3+))) (define-public discregrid (let ((commit "4c27e1cc88be828c6ac5b8a05759ac7e01cf79e9") (revision "0")) (package (name "discregrid") (version (git-version "0.0.0" revision commit)) (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/InteractiveComputerGraphics/Discregrid") (commit commit))) (file-name (git-file-name name version)) (sha256 (base32 "01cwfpw19rc9k5glx9dhnqpihd0is28a9b53qvzp5kgjmdq2v1p0")) (modules '((guix build utils))) (snippet #~(begin (delete-file-recursively "extern/cxxopts") (substitute* '("cmd/discrete_field_to_bitmap/main.cpp" "cmd/generate_density_map/main.cpp" "cmd/generate_sdf/main.cpp") (("^#include <cxxopts/cxxopts\\.hpp>") "#include <cxxopts.hpp>") (("cxxopts::OptionException") "cxxopts::exceptions::parsing")))))) (build-system cmake-build-system) (outputs '("out" "bin")) (arguments (list #:tests? #f ; No tests #:configure-flags #~(list (string-append "-DCMAKE_INSTALL_BINDIR=" #$output:bin "/bin") ;; Bespoke version of BUILD_SHARED_LIBS. "-DBUILD_AS_SHARED_LIBS=ON") #:phases #~(modify-phases %standard-phases (add-after 'unpack 'patch-cmake (lambda _ (let ((port (open-file "cmd/CMakeLists.txt" "a"))) (display "install(TARGETS DiscreteFieldToBitmap GenerateDensityMap GenerateSDF) " port) (close-port port))))))) (inputs (list cxxopts eigen)) (home-page "https://github.com/InteractiveComputerGraphics/Discregrid") (synopsis "Discretize functions on regular grids") (description "Discregrid is a C++ library for the parallel discretization of (preferably smooth) functions on regular grids. It generates a (cubic) polynomial discretization given a box-shaped domain, a grid resolution, and a 3D scalar field. The library can also serialize and deserialize the generated discrete grid, and compute and discretize the signed distance field corresponding to a triangle mesh. The following programs are included with Discregrid: @itemize @item @code{GenerateSDF}: Computes a discrete (cubic) signed distance field from a triangle mesh in OBJ format. @item @code{DiscreteFieldToBitmap}: Generates an image in bitmap format of a two-dimensional slice of a previously computed discretization. @item @code{GenerateDensityMap}: Generates a density map from a previously generated discrete signed distance field using the cubic spline kernel. @end itemize") (license license:expat)))) (define-public mmg (package (name "mmg") (version "5.7.2") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/MmgTools/mmg") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "007d0mvqhnxxj6dbcip9s615asrbpgrbkpm5xn6m8k3n9sljr153")))) (build-system cmake-build-system) (outputs '("out" "lib" "doc")) (arguments (list #:configure-flags #~(list (string-append "-DCMAKE_INSTALL_PREFIX=" #$output:lib) (string-append "-DCMAKE_INSTALL_RPATH=" #$output:lib "/lib") ;; The build doesn't honor -DCMAKE_INSTALL_BINDIR, hence ;; the adjust-bindir phase. ;;(string-append "-DCMAKE_INSTALL_BINDIR=" #$output "/bin") (string-append "-DCMAKE_INSTALL_MANDIR=" #$output "/share/man") "-DBUILD_SHARED_LIBS=ON" "-DBUILD_DOC=ON" "-DBUILD_TESTING=ON" ;; The longer tests are for continuous integration and ;; depend on input data which must be downloaded. "-DONLY_VERY_SHORT_TESTS=ON" "-DUSE_SCOTCH=ON" ;; TODO: Add Elas (from ;; https://github.com/ISCDtoolbox/LinearElasticity). "-DUSE_ELAS=OFF" ;; TODO: Figure out how to add VTK to inputs without ;; causing linking errors in ASLI of the form: ;; ;; ld: /gnu/store/…-vtk-9.0.1/lib/libvtkWrappingPythonCore-9.0.so.1: ;; undefined reference to `PyUnicode_InternFromString' ;; ;; Also, adding VTK to inputs requires adding these as well: ;; ;; double-conversion eigen expat freetype gl2ps glew hdf5 ;; jsoncpp libjpeg-turbo libpng libtheora libtiff libx11 ;; libxml2 lz4 netcdf proj python sqlite zlib "-DUSE_VTK=OFF") #:phases #~(modify-phases %standard-phases (add-after 'build 'build-doc (lambda _ ;; Fontconfig wants to write to a cache directory. (setenv "HOME" "/tmp") (invoke "make" "doc"))) (add-after 'install 'install-doc (lambda _ (copy-recursively "doc" (string-append #$output:doc "/share/doc/" #$name "-" #$version)))) (add-after 'install 'adjust-bindir (lambda _ (let ((src (string-append #$output:lib "/bin")) (dst (string-append #$output "/bin"))) (copy-recursively src dst) (delete-file-recursively src)))) ;; Suffixing program names with build information, i.e., ;; optimization flags and whether debug symbols were generated, ;; is unusual and fragilizes scripts calling these programs. (add-after 'adjust-bindir 'fix-program-names (lambda _ (with-directory-excursion (string-append #$output "/bin") (rename-file "mmg2d_O3d" "mmg2d") (rename-file "mmg3d_O3d" "mmg3d") (rename-file "mmgs_O3d" "mmgs"))))))) (native-inputs ;; For the documentation (list doxygen graphviz ;; TODO: Fix failing LaTeX invocation (which results in equations ;; being inserted literally into PNGs rather than being typeset). ;; (texlive-updmap.cfg) perl)) ;used to generate Fortran headers (inputs (list scotch)) (home-page "http://www.mmgtools.org/") (synopsis "Surface and volume remeshers") (description "Mmg is a collection of applications and libraries for bidimensional and tridimensional surface and volume remeshing. It consists of: @itemize @item the @code{mmg2d} application and library: mesh generation from a set of edges, adaptation and optimization of a bidimensional triangulation and isovalue discretization; @item the @code{mmgs} application and library: adaptation and optimization of a surface triangulation and isovalue discretization; @item the @code{mmg3d} application and library: adaptation and optimization of a tetrahedral mesh, isovalue discretization and Lagrangian movement; @item the @code{mmg} library gathering the @code{mmg2d}, @code{mmgs} and @code{mmg3d} libraries. @end itemize") (license license:lgpl3+))) (define-public nanosvg ;; There are no proper versions or releases; use the latest commit. (let ((commit "9da543e8329fdd81b64eb48742d8ccb09377aed1") (revision "0")) (package (name "nanosvg") (version (git-version "0.0.0" revision commit)) (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/memononen/nanosvg") (commit commit))) (file-name (git-file-name name version)) (sha256 (base32 "1pkzv75kavkhrbdd2kvq755jyr0vamgrfr7lc33dq3ipkzmqvs2l")) ;; This patch required to build PrusaSlicer 2.6. ;; ;; It is taken from ;; <https://github.com/fltk/nanosvg/commit/abcd277ea45e9098bed752cf9c6875b533c0892f.patch> (patches (search-patches "nanosvg-prusa-slicer.patch")))) (build-system cmake-build-system) (arguments (list #:tests? #f ;no test suite #:configure-flags #~(list "-DBUILD_SHARED_LIBS=ON"))) (home-page "https://github.com/memononen/nanosvg") (synopsis "Simple SVG parser") (description "NanoSVG is a simple single-header SVG parser. The output of the parser is a list of cubic bezier shapes. The library suits well for anything from rendering scalable icons in an editor application to prototyping a game.") (license license:zlib)))) (define-public asli ;; Use the newer version of ASLI that allows build with CGAL v5.6. (let ((commit "4f4ba142ea7db6eecfdb546538c88a38680a83c5") (revision "1")) (package (name "asli") (version (git-version "0.1" revision commit)) (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/tpms-lattice/ASLI") (commit commit))) (file-name (git-file-name name version)) (sha256 (base32 "122xxnj3dckmg6mh07x490564b2z9gd38cd0wc5zz3p4nshcq7wy")) (patches (search-patches "asli-use-system-libs.patch")) (modules '((guix build utils))) (snippet ;; Remove bundled libraries except (the ones missing from Guix and) ;; KU Leuven's mTT, which is an obscure (i.e., unfindable by searching ;; online for “mTT KU Leuven”), BSD-3 licensed, header-only library. #~(begin ;;(delete-file-recursively "libs/AdaptTools") ; Missing from Guix (delete-file-recursively "libs/CGAL") ;;(delete-file-recursively "libs/alglib") ; Missing from Guix (delete-file-recursively "libs/eigen") (delete-file-recursively "libs/mmg") (delete-file-recursively "libs/yaml"))))) (build-system cmake-build-system) (inputs (list boost cgal eigen gmp `(,mmg "lib") mpfr tbb-2020 yaml-cpp)) (arguments (list #:tests? #f ; No tests #:configure-flags #~(list "-DCGAL_ACTIVATE_CONCURRENT_MESH_3=ON" (string-append "-DEIGEN3_INCLUDE_DIR=" #$(this-package-input "eigen") "/include/eigen3") (string-append "-DMMG_INCLUDE_DIR=" (ungexp (this-package-input "mmg") "lib") "/include") (string-append "-DMMG_LIBRARY_DIR=" (ungexp (this-package-input "mmg") "lib") "/lib")) #:phases #~(modify-phases %standard-phases (replace 'install ; No install phase (lambda _ (with-directory-excursion "../source/bin" (install-file "ASLI" (string-append #$output "/bin")) ;; The manual is included in the repository. ;; Building it requires -DASLI_DOC=ON, but this is marked ;; as unsupported (presumably for users). ;; Besides, some of the LaTeX packages it uses are ;; missing from Guix, for example emptypage, fvextra and ;; menukeys. (install-file "docs/ASLI [User Manual].pdf" (string-append #$output "/share/doc/" #$name "-" #$version)))))))) (home-page "http://www.biomech.ulg.ac.be/ASLI/") (synopsis "Create lattice infills with varying unit cell type, size and feature") (description "ASLI (A Simple Lattice Infiller) is a command-line tool that allows users to fill any 3D geometry with a functionally graded lattice. The lattice infill is constructed out of unit cells, described by implicit functions, whose type, size and feature can be varied locally to obtain the desired local properties.") (license license:agpl3+)))) (define-public f3d (package (name "f3d") (version "2.5.0") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/f3d-app/f3d") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "0r5rddnh58hgakh7nkjiz530mcxyc6kzxfsjxkncpw7w7dxjpys3")) (modules '((guix build utils))) (snippet #~(begin (delete-file-recursively "external/cxxopts") (delete-file-recursively "external/nlohmann_json"))))) (build-system cmake-build-system) ;; The package cannot easily be split into out and lib outputs because ;; VTK's vtkModule.cmake complains, and also the CMake files in ;; /lib/cmake/f3d expect the f3d executable and library to be available, ;; as they set up targets for both of them. (arguments (list ;; Many tests require files supplied by git-lfs. ;; Also, some tests segfault (after an exception?) but the tested ;; behavior, i.e., when the program is run manually, does not (for ;; example, TestNonExistentConfigFile and TestInvalidConfigFile). ;; Upstream is aware of occasionally flaky tests [1], but the tests ;; run in CI seem to be passing. ;; Anyway, the program runs and is able to open at least STL files ;; without issue. ;; ;; [1]: https://github.com/f3d-app/f3d/issues/92 #:tests? #f #:configure-flags #~(list (string-append "-DCMAKE_INSTALL_DOCDIR=" #$output "/share/doc/" #$name "-" #$version) "-DBUILD_TESTING=OFF" "-DF3D_LINUX_GENERATE_MAN=ON" "-DF3D_USE_EXTERNAL_CXXOPTS=ON" "-DF3D_USE_EXTERNAL_NLOHMANN_JSON=ON" "-DF3D_MODULE_EXTERNAL_RENDERING=ON" "-DF3D_MODULE_EXR=ON" "-DF3D_PLUGIN_BUILD_ALEMBIC=ON" "-DF3D_PLUGIN_BUILD_ASSIMP=ON" "-DF3D_PLUGIN_BUILD_OCCT=ON") #:phases #~(modify-phases %standard-phases (add-after 'unpack 'fix-cmake-rpath (lambda _ ;; Expand $ORIGIN, and add VTK to library RPATH, because it is ;; not added automatically. (substitute* "application/CMakeLists.txt" (("(set_target_properties.*PROPERTIES.*INSTALL_RPATH ).*" _ prefix) (string-append prefix "\"" #$output "/lib\")\n"))) (substitute* "library/CMakeLists.txt" (("(set_target_properties.*PROPERTIES.*INSTALL_RPATH ).*" _ prefix) (string-append prefix "\"" #$output "/lib:" #$(this-package-input "vtk") "/lib\")\n")))))))) (native-inputs (list cxxopts help2man nlohmann-json)) (inputs (list alembic assimp double-conversion eigen expat fontconfig freetype glew hdf5 imath jsoncpp libjpeg-turbo libpng libtiff libx11 lz4 netcdf opencascade-occt openexr vtk zlib)) (home-page "https://f3d.app/") (synopsis "VTK-based 3D viewer") (description "F3D (pronounced @samp{/fɛd/}) is a VTK-based 3D viewer with simple interaction mechanisms and which is fully controllable using arguments on the command line. It supports a range of file formats (including animated glTF, STL, STEP, PLY, OBJ, FBX), and provides numerous rendering and texturing options.") (license license:bsd-3))) (define-public gpaint (package (name "gpaint") (version "0.3.4") (source (origin (method url-fetch) (uri (string-append "http://alpha.gnu.org/gnu/" name "/" name "-2-" version ".tar.gz")) (sha256 (base32 "13jv0zqbnyxjw7fa9x0yl08rrkqq0mdvki0yzbj6vqifvs393v5h")))) (build-system gnu-build-system) (inputs (list gtk+-2 libglade)) (native-inputs (list gettext-minimal `(,glib "bin") pkg-config)) (synopsis "Simple paint program for GNOME") (description "GNU Paint is a simple, easy-to-use paint program for the GNOME environment. It supports drawing freehand as well as basic shapes and text. It features cut-and-paste for irregular regions or polygons.") (home-page "https://www.gnu.org/software/gpaint/") (license license:gpl3+)))