help-guix
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: mypaint package


From: Maxim Cournoyer
Subject: Re: mypaint package
Date: Sat, 26 Jan 2019 15:41:29 -0500
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux)

Hi,

Yoshinori Arai <address@hidden> writes:

> Hello,
>
> I have made mypaint git version package. I have some question about guix
> package development.
>
> During develop the package, add gobject-introspection for propagated-inputs
> to resolve the python module import error, which is
> gi.require_version('GdkPixBuf','2.0').
>
> But this case can't resolve it. Then remove gobject-introspection
> package from propagated-inputs. I add librsvg, gdk-pixbuf+svg, gtk+,
> hicolor-icon-theme for propagated-inputs finally.
>
> After package build is successfully finished, I installed the package to test
> then found some error as like gobject-instrospection. Then I remove installed
> package and edit package file and build, install...
>
> Q1. Why is gobject-introspection in my profile? I have not install it
> individualy.

Because this is how propagated-inputs work: they are installed along the
package who pulled them in the profile.  For this reason, we usually
only use propagated-inputs as a last resort as they don't mesh
with the functional model well and can conflict together.

> Q2. A hicolor-icon-theme is already installed in my profile. Is it need for
> propageted-inputs of mypaint-git package?

The policy regarding icons in Guix has been to let the user choice the
icons of their choice; you don't need to include icons as a
propagated-input in your package definition.

Some comments about your package definitions follow.

> mypaint-git package definition is as follows,
>
> (define-module (mypaint)
>   #:use-module ((guix licenses) #:prefix license:)
>   #:use-module (guix utils)
>   #:use-module (guix packages)
>   #:use-module (guix git-download)
>   #:use-module (guix build-system gnu)
>   #:use-module (guix build-system python)
>   #:use-module (gnu packages pkg-config)
>   #:use-module (gnu packages autotools)
>   #:use-module (gnu packages gettext)
>   #:use-module (gnu packages glib)
>   #:use-module (gnu packages swig)
>   #:use-module (gnu packages gtk)
>   #:use-module (gnu packages python)
>   #:use-module (gnu packages python-xyz)
>   #:use-module (gnu packages ghostscript)
>   #:use-module (gnu packages gimp)
>   #:use-module (gnu packages gnome)
>   #:use-module (gnu packages web)
>   #:use-module (gnu packages python))
>
> (define-public libmypaint-git
>   (let ((commit "0c07191409bd257084d4ea7576deb832aac8868b")
>         (revision "1"))
>     (package
>       (name "libmypaint-git")
>       (version (git-version "2.0.0" revision commit))
>       (source (origin
>                 (method git-fetch)
>                 (uri (git-reference
>                       (url "https://github.com/mypaint/libmypaint.git";)
>                       (commit commit)))
>                 (file-name (git-file-name name version))
>                 (sha256
>                  (base32
>                   "0x5yacdj4bfm298ijv64igv06yjr401g6giln5wrdpv0pixg8ig3"))))
>       (build-system gnu-build-system)
>       (native-inputs
>        `(("intltool" ,intltool)
>          ("libtool" ,libtool)
>          ("automake" ,automake)
>          ("autoconf" ,autoconf)
>          ("python-2" ,python-2)  ;need to generate headers in autogen.sh
>          ("pkg-config" ,pkg-config)))
>       ;; As needed by 'libmypaint.pc'.
>       (propagated-inputs
>        `(("json-c" ,json-c)
>          ("gobject-introspection" ,gobject-introspection)))
>       (inputs
>        `(("glib" ,glib)))
>       (home-page "http://mypaint.org/";)
>       (synopsis "The brush library")
>       (description "This library used by MyPaint. A number of other painting 
> programs use it too")
>       (license license:isc))))

You should make use of the glib-or-gtk-build-system here; it would take
care of the glib dependency for you by wrapping the binary in a build
phase.

You shouldn't need the automake and autoconf inputs as these
dependencies come with the gnu-build-system (whose steps are reused by
most other build systems).

> (define-public mypaint-brushes-git
>   (let ((commit "769ec941054725a195e77d8c55080344e2ab77e4")
>         (revision "1"))
>     (package
>       (name "mypaint-brushes-git")
>       (version (git-version "2.0.0" revision commit))
>       (source (origin
>                 (method git-fetch)
>                 (uri (git-reference
>                       (url "https://github.com/mypaint/mypaint-brushes.git";)
>                       (commit commit)))
>                 (file-name (git-file-name name version))
>                 (sha256
>                  (base32
>                   "0viilmad809qg12xw11p1yv0lwbgjfkcv82g2avwzdaa6wy783pf"))))
>       (build-system gnu-build-system)
>       (native-inputs
>        `(("autoconf" ,autoconf)
>          ("automake" ,automake)))
>       (home-page "http://mypaint.org/";)
>       (synopsis "Brushes for MyPaint")
>       (description "Brushes used by MyPaint and other software using 
> libmypaint")
>       (license license:cc0))))

Same here (regarding the autoconf and automake native inputs).

> (define-public mypaint-git
>   (let ((commit "57685af8dbd65719d7874bc501094bade85d94e7")
>         (revision "1"))
>     (package
>       (name "mypaint-git")
>       (version (git-version "2.0.0" revision commit))
>       (source (origin
>                 (method git-fetch)
>                 (uri (git-reference
>                       (url "https://github.com/mypaint/mypaint.git";)
>                       (commit commit)))
>                 (file-name (git-file-name name version))
>                 (sha256
>                  (base32
>                   "14dmnwma8gsfd5hv3cvwkzyd3v392h4g1zp7i38295cf39yf61y6"))))
>       (build-system python-build-system)
>       (arguments
>        `(#:python ,python-2
>          #:phases
>          (modify-phases %standard-phases
>            (add-after 'unpack 'fix-for-buildconfig-and-test
>              (lambda _
>                (for-each make-file-writable (find-files "." ".*"))
>                ;; FATAL: Cannot create cache dir '/homeless-shelter
>                (setenv "HOME" "/tmp")))
>            (replace 'install
>              (lambda _
>                (invoke "python" "setup.py" "managed_install"
>                        (string-append "--prefix=" (assoc-ref %outputs 
> "out"))))))))
>       (native-inputs
>        `(("pkg-config" ,pkg-config)
>          ("lcms" ,lcms)
>          ("libmypaint" ,libmypaint-git)
>          ("mypaint-brushes" ,mypaint-brushes-git)))
>       (inputs
>        `(("python2-pygobject" ,python2-pygobject)
>          ("swig" ,swig)
>          ("gettext" ,gettext-minimal)
>          ("python2-numpy" ,python2-numpy)
>          ("python2-pycairo" ,python2-pycairo)))
>       (propagated-inputs
>        `(("gtk+" ,gtk+)
>          ("librsvg" ,librsvg)
>          ("gdk-pixbuf" ,gdk-pixbuf+svg)
>          ("hicolor-icon-theme" ,hicolor-icon-theme)))
>       (home-page "http://mypaint.org/";)
>       (synopsis "A simple drawing and painting program")
>       (description "MyPaint is a fast, free, and easy graphics app for 
> digital painters. It lets you focus on the art you make instead of the 
> program you make it with. You can work on your canvas without clutter, and 
> show the interface only when you need it. MyPaint works best with a graphics 
> tablet.")
>       (license license:gpl2+))))

As discussed above, the color theme can be removed from the propagated
inputs. You should also the glib-or-gtk-build-system here; this should
allow you to remove the propagated gtk+ library.

Python dependencies are typically propagated. That means that
python2-pygobject, python-numpy and python-pycairo probably need to be
listed under `propagated-inputs' rather than `inputs'.

swig and gettext are typically build dependencies and should probably
listed as `native-inputs'.

The librsvg and gdk-pixbuf+svg might be required only at build time (if
they are used to compile the Python->C wrappers), so I'd try moving them
to native-inputs and see if it works.

Otherwise it looks pretty good! Make sure to run the `guix lint' on your
package definitions.

I hope this helps!

Maxim



reply via email to

[Prev in Thread] Current Thread [Next in Thread]