From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maxim Cournoyer Subject: Re: mypaint package Date: Sat, 26 Jan 2019 15:41:29 -0500 Message-ID: <87r2czcft2.fsf@gmail.com> References: <20190126043738.focftyoqbmpacjem@WaraToNora> Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([209.51.188.92]:53296) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gnUll-0000wn-FS for help-guix@gnu.org; Sat, 26 Jan 2019 15:41:40 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gnUli-00065W-7n for help-guix@gnu.org; Sat, 26 Jan 2019 15:41:36 -0500 Received: from mail-io1-xd2e.google.com ([2607:f8b0:4864:20::d2e]:33942) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1gnUlh-000650-VG for help-guix@gnu.org; Sat, 26 Jan 2019 15:41:34 -0500 Received: by mail-io1-xd2e.google.com with SMTP id b16so10481930ior.1 for ; Sat, 26 Jan 2019 12:41:32 -0800 (PST) In-Reply-To: <20190126043738.focftyoqbmpacjem@WaraToNora> (Yoshinori Arai's message of "Sat, 26 Jan 2019 13:37:38 +0900") List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-guix-bounces+gcggh-help-guix=m.gmane.org@gnu.org Sender: "Help-Guix" To: Yoshinori Arai Cc: help-guix Hi, Yoshinori Arai 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