Subject: [bug#46160] [PATCH] Add new plplot

From: Maxim Cournoyer <[email-masked]>
Date: Sat, 21 May 2022 23:24:00 -0400

Hi,

Sharlatan Hellseher <[email-masked]> writes:

> Hi Guix team!
>
> This is fixed version of the patch adding plplot with all test enabled
> and folowing new packge style fromat.
>
>
>
> -- 
> … наш разум - превосходная объяснительная машина которая способна
> найти смысл почти в чем угодно, истолковать любой феномен, но
> совершенно не в состоянии принять мысль о непредсказуемости.
>
> From f190a7f646d8f1d7d212663a629adeb33414eb6a Mon Sep 17 00:00:00 2001
> From: Sharlatan Hellseher <[email-masked]>
> Date: Fri, 13 May 2022 16:13:57 +0100
> Subject: [PATCH] gnu: Add plplot
>
> * gnu/packages/maths.scm (plplot): New variable.
> ---
>  gnu/packages/maths.scm | 55 ++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 55 insertions(+)
>
> diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
> index 98e239d5bd..641b80f572 100644
> --- a/gnu/packages/maths.scm
> +++ b/gnu/packages/maths.scm
> @@ -50,6 +50,7 @@
>  ;;; Copyright © 2021 Jean-Baptiste Volatier <[email-masked]>
>  ;;; Copyright © 2021 Guillaume Le Vaillant <[email-masked]>
>  ;;; Copyright © 2021 Pierre-Antoine Bouttier <[email-masked]>
> +;;; Copyright © 2022 Sharlatan Hellseher <[email-masked]>
>  ;;;
>  ;;; This file is part of GNU Guix.
>  ;;;
> @@ -123,6 +124,7 @@ (define-module (gnu packages maths)
>    #:use-module (gnu packages llvm)
>    #:use-module (gnu packages logging)
>    #:use-module (gnu packages lua)
> +  #:use-module (gnu packages geo)
>    #:use-module (gnu packages gnome)
>    #:use-module (gnu packages guile)
>    #:use-module (gnu packages xorg)
> @@ -152,6 +154,7 @@ (define-module (gnu packages maths)
>    #:use-module (gnu packages serialization)
>    #:use-module (gnu packages shells)
>    #:use-module (gnu packages sphinx)
> +  #:use-module (gnu packages swig)
>    #:use-module (gnu packages tcl)
>    #:use-module (gnu packages texinfo)
>    #:use-module (gnu packages tex)
> @@ -1123,6 +1126,58 @@ (define-public gnuplot
>      (license (license:fsf-free
>                "http://gnuplot.cvs.sourceforge.net/gnuplot/gnuplot/Copyright"))))
>  
> +(define-public plplot
> +  (package
> +    (name "plplot")
> +    (version "5.15.0")
> +    (source
> +     (origin
> +       (method git-fetch)
> +       (uri (git-reference
> +             ;; Mirror: https://github.com/PLplot/PLplot
> +             (url "https://git.code.sf.net/p/plplot/plplot")
> +             (commit (string-append name "-" version))))
> +       (sha256
> +        (base32
> +         "0fn9j251zv9pwlqy30yv4flwcd0cbyxd1nn388n1k158jycw2i91"))
> +       (file-name (git-file-name name version))))
> +    (build-system cmake-build-system)
> +    (arguments
> +     (list
> +      #:configure-flags
> +      #~(list
> +         "-DBUILD_TEST=ON"
> +         (string-append "-DCMAKE_INSTALL_LIBDIR=" #$output "/lib")
> +         (string-append "-DCMAKE_INSTALL_PREFIX=" #$output))))
> +    (native-inputs
> +     (list perl
> +           python-wrapper
> +           pkg-config
> +           swig))
> +    (inputs
> +     (list freetype
> +           camlidl
> +           gfortran
> +           libltdl
> +           lua
> +           ocaml
> +           octave
> +           pango
> +           perl-xml-dom
> +           perl-xml-parser

Are you sure the Perl XML modules are needed at runtime and not at build
time (to build doc, for example?).

> +           python-numpy

If python-numpy is refered at runtime, you'd need to also add
python-wrapper as an 'input' I believe, since numpy is a Python
library.  One good way to verify if the dependencies are correct is to
run the package in a container with:

$ ./pre-inst-env guix shell -C plplot

and see if something fail.

Another telling data point to shake extraneous dependencies is looking
at the output of 'guix gc -R $(./pre-inst-env guix build plplot)'; if
python-numpy is not there (probably it isn't), but really needed at
runtime, then it'd need to be wrapper in the plplot command script.

Could you verify that the package works in a container, adding a wrap
phase if needed or removing the unneeded inputs?

Thanks!

Maxim