diff options
Diffstat (limited to 'gnu/packages/glib.scm')
-rw-r--r-- | gnu/packages/glib.scm | 955 |
1 files changed, 499 insertions, 456 deletions
diff --git a/gnu/packages/glib.scm b/gnu/packages/glib.scm index 1a94113fe7..7e6acc0984 100644 --- a/gnu/packages/glib.scm +++ b/gnu/packages/glib.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013, 2014, 2015, 2016, 2019, 2020 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2013, 2014, 2015, 2016, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr> ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org> ;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2021 Mark H Weaver <mhw@netris.org> @@ -11,9 +11,12 @@ ;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com> ;;; Copyright © 2019 Maxim Cournoyer <maxim.cournoyer@gmail.com> ;;; Copyright © 2019 Giacomo Leidi <goodoldpaul@autistici.org> -;;; Copyright © 2019, 2020 Marius Bakke <mbakke@fastmail.com> +;;; Copyright © 2019, 2020, 2021 Marius Bakke <marius@gnu.org> ;;; Copyright © 2020 Nicolò Balzarotti <nicolo@nixo.xyz> +;;; Copyright © 2020 Florian Pelz <pelzflorian@pelzflorian.de> +;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> ;;; Copyright © 2020 Arthur Margerit <ruhtra.mar@gmail.com> +;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be> ;;; ;;; This file is part of GNU Guix. ;;; @@ -34,16 +37,20 @@ #:use-module (gnu packages) #:use-module (gnu packages backup) #:use-module (gnu packages base) + #:use-module (gnu packages bash) #:use-module (gnu packages bison) + #:use-module (gnu packages boost) #:use-module (gnu packages check) #:use-module (gnu packages compression) #:use-module (gnu packages docbook) #:use-module (gnu packages documentation) + #:use-module (gnu packages elf) #:use-module (gnu packages enlightenment) #:use-module (gnu packages file) #:use-module (gnu packages flex) #:use-module (gnu packages gettext) #:use-module (gnu packages gnome) + #:use-module (gnu packages graphviz) #:use-module (gnu packages gperf) #:use-module (gnu packages gtk) #:use-module (gnu packages libffi) @@ -59,7 +66,6 @@ #:use-module (gnu packages pkg-config) #:use-module (gnu packages python) #:use-module (gnu packages python-xyz) - #:use-module (gnu packages selinux) #:use-module (gnu packages web) #:use-module (gnu packages xml) #:use-module (gnu packages xorg) @@ -72,6 +78,8 @@ #:use-module ((guix licenses) #:prefix license:) #:use-module (guix packages) #:use-module (guix utils) + #:use-module (guix gexp) + #:use-module (srfi srfi-26) #:use-module ((srfi srfi-1) #:hide (zip)) ;; Export variables up-front to allow circular dependency with the 'xorg' @@ -91,7 +99,7 @@ (define dbus (package (name "dbus") - (version "1.12.16") + (version "1.12.20") (source (origin (method url-fetch) (uri (string-append @@ -99,9 +107,8 @@ version ".tar.gz")) (sha256 (base32 - "107ckxaff1cv4q6kmfdi2fb1nlsv03312a7kf6lb4biglhpjv8jl")) - (patches (search-patches "dbus-CVE-2020-12049.patch" - "dbus-helper-search-path.patch")))) + "1zp5gpx61v1cpqf2zwb1cidhp9xylvw49d3zydkxqk6b1qa20xpp")) + (patches (search-patches "dbus-helper-search-path.patch")))) (build-system gnu-build-system) (arguments '(#:configure-flags @@ -134,20 +141,20 @@ "sysconfdir=/tmp/dummy" "install")))))) (native-inputs - `(("pkg-config" ,pkg-config) - ;; Dependencies to generate the doc. - ("docbook-xml" ,docbook-xml-4.4) - ("docbook-xsl" ,docbook-xsl) - ("doxygen" ,doxygen) - ("xmlto" ,xmlto) - ("libxml2" ,libxml2) ;for XML_CATALOG_FILES - ("libxslt" ,libxslt) - ("yelp-tools" ,yelp-tools))) + (list pkg-config + ;; Dependencies to generate the doc. + docbook-xml-4.4 + docbook-xsl + doxygen + xmlto + libxml2 ;for XML_CATALOG_FILES + libxslt + yelp-tools)) (inputs - `(("expat" ,expat) - ;; Add a dependency on libx11 so that 'dbus-launch' has support for - ;; '--autolaunch'. - ("libx11" ,libx11))) + (list expat + ;; Add a dependency on libx11 so that 'dbus-launch' has support for + ;; '--autolaunch'. + libx11)) (outputs '("out" "doc")) ;22 MiB of HTML doc (home-page "https://www.freedesktop.org/wiki/Software/dbus/") (synopsis "Message bus for inter-process communication (IPC)") @@ -171,254 +178,174 @@ shared NFS home directories.") (define glib (package - (name "glib") - (version "2.62.6") - (replacement glib/fixed) - (source (origin - (method url-fetch) - (uri (string-append "mirror://gnome/sources/" - name "/" (string-take version 4) "/" - name "-" version ".tar.xz")) - (sha256 - (base32 - "174bsmbmcvaw69ff9g60q5sx0fn23rkhqcwqz17h5s7sprps4kqh")) - (patches (search-patches "glib-appinfo-watch.patch" - "glib-tests-timer.patch")) - (modules '((guix build utils))) - (snippet - '(begin - (substitute* "tests/spawn-test.c" - (("/bin/sh") "sh")) - #t)))) - (build-system meson-build-system) - (outputs '("out" ; everything - "bin")) ; glib-mkenums, gtester, etc.; depends on Python - (propagated-inputs - `(("pcre" ,pcre) ; in the Requires.private field of glib-2.0.pc - ("libffi" ,libffi) ; in the Requires.private field of gobject-2.0.pc - ;; These are in the Requires.private field of gio-2.0.pc - ("util-linux" ,util-linux "lib") ;for libmount - ("libselinux" ,libselinux) - ("zlib" ,zlib))) - (native-inputs - `(("gettext" ,gettext-minimal) - ("m4" ,m4) ; for installing m4 macros - ("dbus" ,dbus) ; for GDBus tests - ("pkg-config" ,pkg-config) - ("python" ,python-wrapper) - ("perl" ,perl) ; needed by GIO tests - ("tzdata" ,tzdata-for-tests))) ; for tests/gdatetime.c - (arguments - `(#:disallowed-references (,tzdata-for-tests) - #:phases - (modify-phases %standard-phases - (add-after 'unpack 'patch-dbus-launch-path - (lambda* (#:key inputs #:allow-other-keys) - (let ((dbus (assoc-ref inputs "dbus"))) - (substitute* "gio/gdbusaddress.c" - (("command_line = g_strdup_printf \\(\"dbus-launch") - (string-append "command_line = g_strdup_printf (\"" - dbus "/bin/dbus-launch"))) - #t))) - (add-after 'unpack 'patch-gio-launch-desktop - (lambda* (#:key outputs #:allow-other-keys) - (let ((out (assoc-ref outputs "out"))) - ;; See also <https://gitlab.gnome.org/GNOME/glib/issues/1633> - ;; for another future fix. - (substitute* "gio/gdesktopappinfo.c" - (("gio-launch-desktop") - (string-append out "/libexec/gio-launch-desktop"))) - #t))) - ;; TODO: Remove the conditional in the next core-updates cycle. - ;; Needed to build glib on slower ARM nodes. - ,@(if (string-prefix? "arm" (%current-system)) - `((add-after 'unpack 'increase-test-timeout - (lambda _ - (substitute* "meson.build" - (("test_timeout = 60") - "test_timeout = 120") - (("test_timeout_slow = 120") - "test_timeout_slow = 180"))))) - '()) - (add-before 'build 'pre-build - (lambda* (#:key inputs outputs #:allow-other-keys) - ;; For tests/gdatetime.c. - (setenv "TZDIR" - (string-append (assoc-ref inputs "tzdata") - "/share/zoneinfo")) - - ;; Some tests want write access there. - (setenv "HOME" (getcwd)) - (setenv "XDG_CACHE_HOME" (getcwd)) - #t)) - (add-after 'unpack 'disable-failing-tests - (lambda _ - (let ((disable - (lambda (test-file test-paths) - (define pattern+procs - (map (lambda (test-path) - (cons - ;; XXX: only works for single line statements. - (format #f "g_test_add_func.*\"~a\".*" test-path) - (const ""))) - test-paths)) - (substitute test-file pattern+procs))) - (failing-tests - '(("glib/tests/thread.c" - (;; prlimit(2) returns ENOSYS on Linux 2.6.32-5-xen-amd64 - ;; as found on hydra.gnu.org, and strace(1) doesn't - ;; recognize it. - "/thread/thread4")) - - ;; This tries to find programs in FHS directories. - ("glib/tests/utils.c" - ("/utils/find-program")) - - ;; This fails because "glib/tests/echo-script" cannot be - ;; found. - ("glib/tests/spawn-singlethread.c" - ("/gthread/spawn-script")) - - ("glib/tests/timer.c" - (;; fails if compiler optimizations are enabled, which they - ;; are by default. - "/timer/stop")) - - ("gio/tests/gapplication.c" - (;; XXX: proven to be unreliable. See: - ;; <https://bugs.debian.org/756273> - ;; <http://bugs.gnu.org/18445> - "/gapplication/quit" - - ;; XXX: fails randomly for unknown reason. See: - ;; <https://lists.gnu.org/archive/html/guix-devel/2016-04/msg00215.html> - "/gapplication/local-actions")) - - ("gio/tests/contenttype.c" - (;; XXX: requires shared-mime-info. - "/contenttype/guess" - "/contenttype/guess_svg_from_data" - "/contenttype/subtype" - "/contenttype/list" - "/contenttype/icon" - "/contenttype/symbolic-icon" - "/contenttype/tree")) - - ("gio/tests/appinfo.c" - (;; XXX: requires update-desktop-database. - "/appinfo/associations")) - - ("gio/tests/desktop-app-info.c" - (;; XXX: requires update-desktop-database. - "/desktop-app-info/delete" - "/desktop-app-info/default" - "/desktop-app-info/fallback" - "/desktop-app-info/lastused" - "/desktop-app-info/search")) - - ("gio/tests/gdbus-peer.c" - (;; Requires /etc/machine-id. - "/gdbus/codegen-peer-to-peer")) - - ("gio/tests/gdbus-address-get-session.c" - (;; Requires /etc/machine-id. - "/gdbus/x11-autolaunch")) - - ("gio/tests/gsocketclient-slow.c" - (;; These tests tries to resolve "localhost", and fails. - "/socket-client/happy-eyeballs/slow" - "/socket-client/happy-eyeballs/cancellation/delayed")) - - ))) - (for-each (lambda (x) (apply disable x)) failing-tests) - #t))) - (replace 'check - (lambda _ - (setenv "MESON_TESTTHREADS" - (number->string (parallel-job-count))) - ;; Do not run tests marked as "flaky". - (invoke "meson" "test" "--no-suite" "flaky"))) - ;; TODO: meson does not permit the bindir to be outside of prefix. - ;; See https://github.com/mesonbuild/meson/issues/2561 - ;; We can remove this once meson is patched. - (add-after 'install 'move-executables - (lambda* (#:key outputs #:allow-other-keys) - (let ((out (assoc-ref outputs "out")) - (bin (assoc-ref outputs "bin"))) - (mkdir-p bin) - (rename-file (string-append out "/bin") - (string-append bin "/bin")) - ;; This one is an implementation detail of glib. - ;; It is wrong that that's in "/bin" in the first place, - ;; but that's what upstream is doing right now. - ;; See <https://gitlab.gnome.org/GNOME/glib/issues/1633>. - (mkdir (string-append out "/libexec")) - (rename-file (string-append bin "/bin/gio-launch-desktop") - (string-append out "/libexec/gio-launch-desktop")) - ;; Do not refer to "bindir", which points to "${prefix}/bin". - ;; We don't patch "bindir" to point to "$bin/bin", because that - ;; would create a reference cycle between the "out" and "bin" - ;; outputs. - (substitute* (list (string-append out "/lib/pkgconfig/gio-2.0.pc") - (string-append out "/lib/pkgconfig/glib-2.0.pc")) - (("bindir=\\$\\{prefix\\}/bin") "") - (("=\\$\\{bindir\\}/") "=")) - #t)))))) - ;; TODO: see above for explanation. - ;; #:configure-flags (list (string-append "--bindir=" - ;; (assoc-ref %outputs "bin") - ;; "/bin")) - - (native-search-paths - ;; This variable is not really "owned" by GLib, but several related - ;; packages refer to it: gobject-introspection's tools use it as a search - ;; path for .gir files, and it's also a search path for schemas produced - ;; by 'glib-compile-schemas'. - (list (search-path-specification - (variable "XDG_DATA_DIRS") - (files '("share"))) - ;; To load extra gio modules from glib-networking, etc. - (search-path-specification - (variable "GIO_EXTRA_MODULES") - (files '("lib/gio/modules"))))) - (search-paths native-search-paths) - (properties '((hidden? . #t))) - - (synopsis "Thread-safe general utility library; basis of GTK+ and GNOME") - (description - "GLib provides data structure handling for C, portability wrappers, -and interfaces for such runtime functionality as an event loop, threads, -dynamic loading, and an object system.") - (home-page "https://developer.gnome.org/glib/") - (license license:lgpl2.1+))) + (name "glib") + (version "2.70.2") + (source + (origin + (method url-fetch) + (uri + (string-append "mirror://gnome/sources/" + name "/" (string-take version 4) "/" + name "-" version ".tar.xz")) + (sha256 + (base32 "0vw08p4jllavp9qmlqg1yl1zanmy53yid46wipas6gfdhnf4al85")) + (patches + (search-patches "glib-appinfo-watch.patch" + "glib-skip-failing-test.patch")) + (modules '((guix build utils))) + (snippet + '(begin + (substitute* "tests/spawn-test.c" + (("/bin/sh") "sh")))))) + (build-system meson-build-system) + (outputs '("out" ;libraries, locales, etc + "static" ;static libraries + "bin" ;executables; depends on Python + "debug")) + (arguments + `(#:disallowed-references + (,tzdata-for-tests + ;; Verify glib-mkenums, gtester, ... use the cross-compiled + ;; python. + ,@(if (%current-target-system) + (map (cut gexp-input <> #:native? #t) + `(,(this-package-native-input "python") + ,(this-package-native-input "python-wrapper"))) + '())) + #:configure-flags ,#~(list "--default-library=both" + "-Dman=false" + "-Dselinux=disabled" + (string-append "--bindir=" + #$output:bin "/bin")) + #:phases + (modify-phases %standard-phases + ;; Needed to pass the test phase on slower ARM and i686 machines. + (add-after 'unpack 'increase-test-timeout + (lambda _ + (substitute* "meson.build" + (("(test_timeout.*) = ([[:digit:]]+)" all first second) + (string-append first " = " second "0"))))) + (add-after 'unpack 'disable-failing-tests + (lambda _ + (substitute* "gio/tests/meson.build" + ((".*'testfilemonitor'.*") ;marked as flaky + "")) + (with-directory-excursion "glib/tests" + (substitute* '("unix.c" "utils.c") + (("[ \t]*g_test_add_func.*;") ""))) + (with-directory-excursion "gio/tests" + (substitute* '("contenttype.c" "gdbus-address-get-session.c" + "gdbus-peer.c" "appinfo.c" "desktop-app-info.c") + (("[ \t]*g_test_add_func.*;") ""))) -(define glib/fixed - (package - (inherit glib) - (source (origin - (inherit (package-source glib)) - (patches - (append (search-patches "glib-CVE-2021-27218.patch" - "glib-CVE-2021-27219-01.patch" - "glib-CVE-2021-27219-02.patch" - "glib-CVE-2021-27219-03.patch" - "glib-CVE-2021-27219-04.patch" - "glib-CVE-2021-27219-05.patch" - "glib-CVE-2021-27219-06.patch" - "glib-CVE-2021-27219-07.patch" - "glib-CVE-2021-27219-08.patch" - "glib-CVE-2021-27219-09.patch" - "glib-CVE-2021-27219-10.patch" - "glib-CVE-2021-27219-11.patch" - "glib-CVE-2021-27219-12.patch" - "glib-CVE-2021-27219-13.patch" - "glib-CVE-2021-27219-14.patch" - "glib-CVE-2021-27219-15.patch" - "glib-CVE-2021-27219-16.patch" - "glib-CVE-2021-27219-17.patch" - "glib-CVE-2021-27219-18.patch" - "glib-CVE-2021-28153.patch") - (origin-patches (package-source glib)))))))) + ,@(if (target-x86-32?) + ;; Comment out parts of timer.c that fail on i686 due to + ;; excess precision when building with GCC 10: + ;; <https://gitlab.gnome.org/GNOME/glib/-/issues/820>. + '((substitute* "glib/tests/timer.c" + (("^ g_assert_cmpuint \\(micros.*" all) + (string-append "//" all "\n")) + (("^ g_assert_cmpfloat \\(elapsed, ==.*" all) + (string-append "//" all "\n")))) + '()))) + ;; Python references are not being patched in patch-phase of build, + ;; despite using python-wrapper as input. So we patch them manually. + ;; + ;; These python scripts are both used during build and installed, + ;; so at first, use a python from 'native-inputs', not 'inputs'. When + ;; cross-compiling, the 'patch-shebangs' phase will replace + ;; the native python with a python from 'inputs'. + (add-after 'unpack 'patch-python-references + (lambda* (#:key native-inputs inputs #:allow-other-keys) + (substitute* '("gio/gdbus-2.0/codegen/gdbus-codegen.in" + "glib/gtester-report.in" + "gobject/glib-genmarshal.in" + "gobject/glib-mkenums.in") + (("@PYTHON@") + (search-input-file (or native-inputs inputs) + (string-append + "/bin/python" + ,(version-major+minor + (package-version python)))))))) + (add-before 'check 'pre-check + (lambda* (#:key native-inputs inputs outputs #:allow-other-keys) + ;; For tests/gdatetime.c. + (setenv "TZDIR" + (search-input-directory (or native-inputs inputs) + "share/zoneinfo")) + ;; Some tests want write access there. + (setenv "HOME" (getcwd)) + (setenv "XDG_CACHE_HOME" (getcwd)))) + (add-after 'install 'move-static-libraries + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (static (assoc-ref outputs "static"))) + (mkdir-p (string-append static "/lib")) + (for-each (lambda (a) + (rename-file a (string-append static "/lib/" + (basename a)))) + (find-files out "\\.a$"))))) + (add-after 'install 'patch-pkg-config-files + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + ;; Do not refer to "bindir", which points to "${prefix}/bin". + ;; We don't patch "bindir" to point to "$bin/bin", because that + ;; would create a reference cycle between the "out" and "bin" + ;; outputs. + (substitute* + (list + (string-append out "/lib/pkgconfig/gio-2.0.pc") + (string-append out "/lib/pkgconfig/glib-2.0.pc")) + (("^bindir=.*") + "") + (("=\\$\\{bindir\\}/") + "=")))))))) + (native-inputs + `(("gettext" ,gettext-minimal) + ("m4" ,m4) ; for installing m4 macros + ("perl" ,perl) ; needed by GIO tests + ("pkg-config" ,pkg-config) + ("python" ,python) ; For 'patch-python-references + ("python-wrapper" ,python-wrapper) + ("tzdata" ,tzdata-for-tests))) ; for tests/gdatetime.c + (inputs + (list bash-completion + ;; "python", "python-wrapper" and "bash-minimal" + ;; are for the 'patch-shebangs' phase, to make + ;; sure the installed scripts end up with a correct shebang + ;; when cross-compiling. + python + python-wrapper + bash-minimal + dbus + libelf)) + (propagated-inputs + (list libffi ; in the Requires.private field of gobject-2.0.pc + pcre ; in the Requires.private field of glib-2.0.pc + `(,util-linux "lib") ;for libmount + zlib)) ; in the Requires.private field of glib-2.0.pc + (native-search-paths + ;; This variable is not really "owned" by GLib, but several related + ;; packages refer to it: gobject-introspection's tools use it as a search + ;; path for .gir files, and it's also a search path for schemas produced + ;; by 'glib-compile-schemas'. + (list + (search-path-specification + (variable "XDG_DATA_DIRS") + (files '("share"))) + ;; To load extra gio modules from glib-networking, etc. + (search-path-specification + (variable "GIO_EXTRA_MODULES") + (files '("lib/gio/modules"))))) + (search-paths native-search-paths) + (synopsis "Low-level core library for GNOME projects") + (description "GLib provides the core application building blocks for +libraries and applications written in C. It provides the core object system +used in GNOME, the main loop implementation, and a large set of utility +functions for strings and common data structures.") + (home-page "https://wiki.gnome.org/Projects/GLib") + (license license:lgpl2.1+) + (properties '((hidden? . #t))))) (define-public glib-with-documentation ;; glib's doc must be built in a separate package since it requires gtk-doc, @@ -427,95 +354,146 @@ dynamic loading, and an object system.") (properties (alist-delete 'hidden? (package-properties glib))) (outputs (cons "doc" (package-outputs glib))) ; 20 MiB of GTK-Doc reference (native-inputs - `(("gtk-doc" ,gtk-doc) ; for the doc - ("docbook-xml" ,docbook-xml) + `(("docbook-xml-4.2" ,docbook-xml-4.2) + ("docbook-xml-4.5" ,docbook-xml) + ("docbook-xsl" ,docbook-xsl) + ("gtk-doc" ,gtk-doc) ("libxml2" ,libxml2) + ("xsltproc" ,libxslt) ,@(package-native-inputs glib))) (arguments (substitute-keyword-arguments (package-arguments glib) ((#:configure-flags flags ''()) - `(cons "-Dgtk_doc=true" ,flags)) + #~(cons "-Dgtk_doc=true" + (delete "-Dman=false" #$flags))) ((#:phases phases) `(modify-phases ,phases + (add-after 'unpack 'patch-docbook-xml + (lambda* (#:key inputs #:allow-other-keys) + (with-directory-excursion "docs" + (substitute* (find-files "." "\\.xml$") + (("http://www.oasis-open.org/docbook/xml/4\\.5/") + (string-append (assoc-ref inputs "docbook-xml-4.5") + "/xml/dtd/docbook/")) + (("http://www.oasis-open.org/docbook/xml/4\\.2/") + (string-append (assoc-ref inputs "docbook-xml-4.2") + "/xml/dtd/docbook/")))))) (add-after 'install 'move-doc (lambda* (#:key outputs #:allow-other-keys) - (let ((out (assoc-ref outputs "out")) - (doc (assoc-ref outputs "doc")) - (html (string-append "/share/gtk-doc"))) - (copy-recursively (string-append out html) - (string-append doc html)) - (delete-file-recursively (string-append out html)) - #t))))))))) + (let* ((out (assoc-ref outputs "out")) + (doc (assoc-ref outputs "doc")) + (html (string-append "/share/gtk-doc"))) + (mkdir-p (string-append doc "/share")) + (rename-file + (string-append out html) + (string-append doc html))))))))))) -;;; TODO: Merge into glib as a 'static' output on core-updates. -(define-public glib-static - (hidden-package - (package - (inherit glib) - (name "glib-static") - (outputs '("out")) - (arguments - (substitute-keyword-arguments (package-arguments glib) - ((#:configure-flags flags ''()) - `(cons* "--default-library=static" - "-Dselinux=disabled" - "-Dman=false" - "-Dgtk_doc=false" - "-Dinternal_pcre=false" - ,flags)) - ((#:phases phases) - `(modify-phases ,phases - (delete 'move-executables) - (replace 'install - ;; Only install the static libraries. - (lambda* (#:key outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (lib (string-append out "/lib"))) - (for-each (lambda (f) - (install-file f lib)) - (find-files "." "\\.a$")))))))))))) +(define (python-extension-suffix python triplet) + "Determine the suffix for C extensions for PYTHON when compiled +for TRIPLET." + ;; python uses strings like 'x86_64-linux-gnu' instead of + ;; 'x86_64-unknown-linux-gnu'. + (define normalised-system + (string-replace-substring triplet "-unknown-" "-")) + (define major.minor (version-major+minor (package-version python))) + (define majorminor (string-delete #\. major.minor)) + (string-append + ;; If guix' python package used "--with-pydebug", a #\d would + ;; need to be added, likewise "--with-pymalloc" and "--with-wide-unicode" + ;; would require a #\m and #\u, see cpython's configure.ac. + ".cpython-" majorminor "-" normalised-system + (if (target-mingw? triplet) + ".dll" + ".so"))) + +(define (correct-library-name-phase python name) + "Return a G-exp evaluating to a phase renaming the python extension NAME +from what Meson thinks its name should be to what python expects its name +to be. NAME must not include the platform-specific suffix. This can only +be used when cross-compiling." + #~(lambda _ + (define name #$name) + (define native-suffix + #$(python-extension-suffix python + (nix-system->gnu-triplet (%current-system)))) + (define target-suffix + #$(python-extension-suffix python (%current-target-system))) + (define native-name + (string-append name native-suffix)) + (define target-name + (string-append name target-suffix)) + (rename-file native-name target-name))) (define gobject-introspection (package (name "gobject-introspection") - (version "1.62.0") - (source - (origin - (method url-fetch) - (uri - (string-append "mirror://gnome/sources/" - "gobject-introspection/" (version-major+minor version) - "/gobject-introspection-" version ".tar.xz")) - (sha256 - (base32 "18lhglg9v6y83lhqzyifc1z0wrlawzrhzzxx0a3h1g7xaz97xvmi")) - (patches - (search-patches - "gobject-introspection-cc.patch" - "gobject-introspection-girepository.patch" - "gobject-introspection-absolute-shlib-path.patch")))) + (version "1.66.1") + (source (origin + (method url-fetch) + (uri (string-append "mirror://gnome/sources/" + "gobject-introspection/" (version-major+minor version) + "/gobject-introspection-" version ".tar.xz")) + (sha256 + (base32 "078n0q7b6z682mf4irclrksm73cyixq295mqnqifl9plwmgaai6x")) + (patches (search-patches + "gobject-introspection-cc.patch" + "gobject-introspection-girepository.patch" + "gobject-introspection-absolute-shlib-path.patch")))) (build-system meson-build-system) (arguments - `(#:phases + `(,@(if (%current-target-system) + `(#:configure-flags + '("-Dgi_cross_use_prebuilt_gi=true" + ;; Building introspection data requires running binaries + ;; for ‘host’ on ‘build’, so don't do that. + ;; + ;; TODO: it would be nice to have introspection data anyways + ;; as discussed here: https://issues.guix.gnu.org/50201#60. + "-Dbuild_introspection_data=false")) + '()) + #:phases + ,#~ (modify-phases %standard-phases + #$@(if (%current-target-system) + ;; 'typelibs' is undefined. + `((add-after 'unpack 'set-typelibs + (lambda _ + (substitute* "meson.build" + (("\\bsources: typelibs\\b") + "sources: []"))))) + '()) (add-after 'unpack 'do-not-use-/usr/bin/env (lambda _ (substitute* "tools/g-ir-tool-template.in" (("#!@PYTHON_CMD@") - (string-append "#!" (which "python3")))) - #t))))) + (string-append "#!" (which "python3")))))) + #$@(if (%current-target-system) + ;; Meson gives python extensions an incorrect name, see + ;; <https://github.com/mesonbuild/meson/issues/7049>. + #~((add-after 'install 'rename-library + #$(correct-library-name-phase + (this-package-input "python") + #~(string-append #$output + "/lib/gobject-introspection/giscanner" + "/_giscanner")))) + #~())))) (native-inputs `(("glib" ,glib "bin") - ("pkg-config" ,pkg-config))) + ("pkg-config" ,pkg-config) + ("bison" ,bison) + ("flex" ,flex))) (inputs - `(("bison" ,bison) - ("flex" ,flex) - ("glib" ,glib) - ("python" ,python-wrapper) + `(,@(if (%current-target-system) + `(("python" ,python)) + `(("bison" ,bison) + ("flex" ,flex) + ("python" ,python-wrapper))) ("zlib" ,zlib))) (propagated-inputs - `(;; In practice, GIR users will need libffi when using - ;; gobject-introspection. - ("libffi" ,libffi))) + (list glib + ;; In practice, GIR users will need libffi when using + ;; gobject-introspection. + libffi)) (native-search-paths (list (search-path-specification @@ -551,7 +529,7 @@ provide bindings to call into the C library.") "1karx4sb7bnm2j67q0q74hspkfn6lqprpy5r99vkn5bb36a4viv7")))) (build-system gnu-build-system) (inputs - `(("file" ,file))) + (list file)) (propagated-inputs `(;; Propagate gettext because users expect it to be there, and so does ;; the `intltool-update' script. @@ -599,9 +577,7 @@ The intltool collection can be used to do these things: "1acjgf8zlyk7qckdk19iqaca4jcmywd7vxjbcs1mm6kaf8icqcv2")))) (build-system gnu-build-system) (inputs - `(("libxml2" ,libxml2) - ("python-libxml2" ,python-libxml2) - ("python" ,python))) + (list libxml2 python-libxml2 python)) (arguments '(#:phases (modify-phases %standard-phases @@ -610,7 +586,7 @@ The intltool collection can be used to do these things: (let ((prog (string-append (assoc-ref outputs "out") "/bin/itstool"))) (wrap-program prog - `("PYTHONPATH" = (,(getenv "PYTHONPATH")))) + `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH")))) #t)))))) (home-page "http://www.itstool.org") (synopsis "Tool to translate XML documents with PO files") @@ -647,14 +623,22 @@ translated.") (base32 "09g8swvc95bk1z6j8sw463p2v0dqmgm2zjfndf7i8sbcyq67dr3w")))) (build-system gnu-build-system) + (arguments + (if (%current-target-system) + `(#:configure-flags + ;; Run a native 'dbus-binding-tool' instead of a cross-compiled + ;; 'dbus-binding-tool' when cross-compiling. + ,#~(list + (string-append + "--with-dbus-binding-tool=" + #+(file-append this-package "/bin/dbus-binding-tool")))) + '())) (propagated-inputs ; according to dbus-glib-1.pc - `(("dbus" ,dbus) - ("glib" ,glib))) + (list dbus glib)) (inputs - `(("expat" ,expat))) + (list expat)) (native-inputs - `(("glib" ,glib "bin") - ("pkg-config" ,pkg-config))) + (list `(,glib "bin") pkg-config)) (home-page "https://dbus.freedesktop.org/doc/dbus-glib/") (synopsis "D-Bus GLib bindings") (description @@ -665,66 +649,148 @@ by GDBus included in Glib.") (define libsigc++ (package (name "libsigc++") - (version "2.10.3") + (version "3.0.6") (source (origin - (method url-fetch) - (uri (string-append "mirror://gnome/sources/libsigc++/" - (version-major+minor version) "/" - name "-" version ".tar.xz")) - (sha256 - (base32 - "11j7j1jv4z58d9s7jvl42fnqa1dzl4idgil9r45cjv1w673dys0b")))) - (build-system gnu-build-system) - (native-inputs `(("pkg-config" ,pkg-config) - ("m4" ,m4))) + (method url-fetch) + (uri (string-append "mirror://gnome/sources/libsigc++/" + (version-major+minor version) "/" + name "-" version ".tar.xz")) + (sha256 + (base32 + "1kn57b039lg20182lnchl1ys27vf34brn43f895cal8nc7sdq3mp")))) + (build-system meson-build-system) + (outputs '("out" "doc")) + (arguments + `(#:configure-flags + (list + "-Dbuild-documentation=true") + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'patch-docbook-xml + (lambda* (#:key inputs #:allow-other-keys) + (with-directory-excursion "docs" + (substitute* (find-files "." "\\.xml$") + (("http://www.oasis-open.org/docbook/xml/4\\.1\\.2/") + (string-append (assoc-ref inputs "docbook-xml") + "/xml/dtd/docbook/")))) + #t)) + (add-after 'install 'move-doc + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (doc (assoc-ref outputs "doc"))) + (mkdir-p (string-append doc "/share")) + (rename-file + (string-append out "/share/doc") + (string-append doc "/share/doc")) + #t)))))) + (native-inputs + `(("docbook-xml" ,docbook-xml-4.1.2) + ("docbook-xsl" ,docbook-xsl) + ("dot" ,graphviz) + ("doxygen" ,doxygen) + ("m4" ,m4) + ("mm-common" ,mm-common) + ("perl" ,perl) + ("pkg-config" ,pkg-config) + ("xmllint" ,libxml2) + ("xsltproc" ,libxslt))) + (inputs + (list boost)) (home-page "https://libsigcplusplus.github.io/libsigcplusplus/") (synopsis "Type-safe callback system for standard C++") (description "Libsigc++ implements a type-safe callback system for standard C++. It -allows you to define signals and to connect those signals to any callback -function, either global or a member function, regardless of whether it is -static or virtual. + allows you to define signals and to connect those signals to any callback + function, either global or a member function, regardless of whether it is + static or virtual. -It also contains adaptor classes for connection of dissimilar callbacks and -has an ease of use unmatched by other C++ callback libraries.") - (license license:lgpl2.1+))) + It also contains adaptor classes for connection of dissimilar callbacks and + has an ease of use unmatched by other C++ callback libraries.") + (license license:lgpl3+))) + + (define-public libsigc++-2 + (package + (inherit libsigc++) + (name "libsigc++") + (version "2.9.3") + (source + (origin + (method url-fetch) + (uri + (string-append "mirror://gnome/sources/libsigc++/" + (version-major+minor version) + "/libsigc++-" version ".tar.xz")) + (sha256 + (base32 "0zq963d0sss82q62fdfjs7l9iwbdch51albck18cb631ml0v7y8b")))) + (build-system gnu-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'patch-docbook-xml + (lambda* (#:key inputs #:allow-other-keys) + (with-directory-excursion "docs" + (substitute* (find-files "." "\\.xml$") + (("http://www.oasis-open.org/docbook/xml/4\\.1\\.2/") + (string-append (assoc-ref inputs "docbook-xml") + "/xml/dtd/docbook/")))) + #t)) + (add-after 'install 'move-doc + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (doc (assoc-ref outputs "doc"))) + (mkdir-p (string-append doc "/share")) + (rename-file + (string-append out "/share/doc") + (string-append doc "/share/doc")) + #t)))))))) (define glibmm (package (name "glibmm") - (version "2.62.0") + (version "2.70.0") (source (origin - (method url-fetch) - (uri (string-append "mirror://gnome/sources/glibmm/" - (version-major+minor version) - "/glibmm-" version ".tar.xz")) - (sha256 - (base32 - "1ziwx6r7k7wbvg4qq1rgrv8zninapgrmhn1hs6926a3krh9ryr9n")))) - (build-system gnu-build-system) + (method url-fetch) + (uri (string-append "mirror://gnome/sources/glibmm/" + (version-major+minor version) + "/glibmm-" version ".tar.xz")) + (sha256 + (base32 + "085mzpphz71sh5wh71ppikwnxsgn4pk3s4bzz6ingj6wxn5gs240")))) + (build-system meson-build-system) + (outputs '("out" "doc")) (arguments - `(#:phases + `(#:configure-flags + (list "-Dbuild-documentation=true") + #:phases (modify-phases %standard-phases - (add-before 'build 'pre-build + (add-after 'unpack 'disable-failing-tests (lambda _ - ;; This test uses /etc/fstab as an example file to read - ;; from; choose a better example. - (substitute* "tests/giomm_simple/main.cc" - (("/etc/fstab") - (string-append (getcwd) - "/tests/giomm_simple/main.cc"))) - - ;; This test does a DNS lookup, and then expects to be able - ;; to open a TLS session; just skip it. - (substitute* "tests/giomm_tls_client/main.cc" - (("Gio::init.*$") - "return 77;\n")) - #t))))) - (native-inputs `(("pkg-config" ,pkg-config) - ("glib" ,glib "bin"))) + (substitute* "tests/meson.build" + ;; This test uses /etc/fstab as an example file to read + ;; from; disable it. + (("[ \t]*.*giomm_simple.*$") "") + ;; This test does a DNS lookup, and then expects to be able + ;; to open a TLS session; just skip it. + (("[ \t]*.*giomm_tls_client.*$") "")))) + (add-after 'install 'move-doc + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (doc (assoc-ref outputs "doc"))) + (mkdir-p (string-append doc "/share")) + (rename-file + (string-append out "/share/doc") + (string-append doc "/share/doc")))))))) + (native-inputs + (list graphviz + doxygen + `(,glib "bin") + m4 + mm-common + perl + pkg-config + libxslt)) (propagated-inputs - `(("libsigc++" ,libsigc++) - ("glib" ,glib))) + (list libsigc++ glib)) (home-page "https://gtkmm.org/") (synopsis "C++ interface to the GLib library") (description @@ -736,7 +802,7 @@ useful for C++.") (package (inherit glibmm) (name "glibmm") - (version "2.64.2") + (version "2.64.5") (source (origin (method url-fetch) @@ -745,10 +811,10 @@ useful for C++.") (version-major+minor version) "/glibmm-" version ".tar.xz")) (sha256 - (base32 "1v6lp23fr2qh4zshcnm28sn29j3nzgsvcqj2nhmrnvamipjq4lm7")))) + (base32 "11m37sbx0i18cl17d0fkq0bik4bbzlb5n8kcl651jhci5ipci3sh")))) (propagated-inputs - `(("libsigc++" ,libsigc++) - ("glib" ,glib))))) + (modify-inputs (package-propagated-inputs glibmm) + (replace "libsigc++" libsigc++-2))))) (define-public python2-pygobject-2 (package @@ -778,7 +844,7 @@ useful for C++.") ("python2-pycairo" ,python2-pycairo) ("gobject-introspection" ,gobject-introspection))) (propagated-inputs - `(("libffi" ,libffi))) ;mentioned in pygobject-2.0.pc + (list libffi)) ;mentioned in pygobject-2.0.pc (arguments `(#:tests? #f ;segfaults during tests #:configure-flags '("LIBS=-lcairo-gobject"))) @@ -812,19 +878,24 @@ useful for C++.") '("test_atoms.py" "test_overrides_gtk.py")) #t))))) (build-system meson-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (replace 'check + (lambda* (#:key tests? #:allow-other-keys) + (when tests? + ;; The default 90 seconds can be too low on slower machines. + (invoke "meson" "test" "--timeout-multiplier" "5"))))))) (native-inputs `(("glib-bin" ,glib "bin") ("pkg-config" ,pkg-config) ("python-pytest" ,python-pytest) ("python-wrapper" ,python-wrapper))) ; For patching shebangs (inputs - `(("python" ,python) - ("python-pycairo" ,python-pycairo) - ("gobject-introspection" ,gobject-introspection))) + (list python python-pycairo gobject-introspection)) (propagated-inputs ;; pygobject-3.0.pc refers to all these. - `(("glib" ,glib) - ("libffi" ,libffi))) + (list glib libffi)) ;; For finding typelib files, since gobject-introscpetion isn't propagated. (native-search-paths (package-native-search-paths gobject-introspection)) (home-page "https://live.gnome.org/PyGObject") @@ -877,10 +948,9 @@ useful for C++.") "1q5075d6v2g5sm675hyzrcpxsrh09z83crfci8b0wl3jwmnz0frg")))) (build-system perl-build-system) (native-inputs - `(("perl-extutils-depends" ,perl-extutils-depends) - ("perl-extutils-pkgconfig" ,perl-extutils-pkgconfig))) + (list perl-extutils-depends perl-extutils-pkgconfig)) (propagated-inputs - `(("glib" ,glib))) + (list glib)) (home-page "https://metacpan.org/release/Glib") (synopsis "Perl wrappers for the GLib utility and Object libraries") (description "This module provides perl access to GLib and GLib's GObject @@ -903,12 +973,9 @@ up the Gnome environment, and are used in many unrelated projects.") (base32 "0mxg6pz8qfyipw0ypr54alij0c4adzg94f62702b2a6hkp5jhij6")))) (build-system perl-build-system) (native-inputs - `(("perl-extutils-depends" ,perl-extutils-depends) - ("perl-extutils-pkgconfig" ,perl-extutils-pkgconfig))) + (list perl-extutils-depends perl-extutils-pkgconfig)) (propagated-inputs - `(("gobject-introspection" ,gobject-introspection) - ("perl-cairo-gobject" ,perl-cairo-gobject) - ("perl-glib" ,perl-glib))) + (list gobject-introspection perl-cairo-gobject perl-glib)) (home-page "https://metacpan.org/dist/Glib-Object-Introspection") (synopsis "Dynamically create Perl language bindings") (description "Glib::Object::Introspection uses the gobject-introspection and @@ -919,7 +986,7 @@ libraries. Examples include gtk+, webkit, libsoup and many more.") (define telepathy-glib (package (name "telepathy-glib") - (version "0.24.1") + (version "0.24.2") (source (origin (method url-fetch) @@ -929,19 +996,7 @@ libraries. Examples include gtk+, webkit, libsoup and many more.") "telepathy-glib-" version ".tar.gz")) (sha256 (base32 - "1symyzbjmxvksn2ifdkk50lafjm2llf2sbmky062gq2pz3cg23cy")) - (patches - (list - (search-patch "telepathy-glib-channel-memory-leak.patch") - ;; Don't use the same test name for multiple tests. - ;; <https://bugs.freedesktop.org/show_bug.cgi?id=92245> - (origin - (method url-fetch) - (uri "https://bugs.freedesktop.org/attachment.cgi?id=118608") - (file-name (string-append "telepathy-glib-duplicate-tests.patch")) - (sha256 - (base32 - "0z261fwrszxb28ccg3hsg9rizig4s84zvwmx6y31a4pyv7bvs5w3"))))))) + "1w3kja8j3gz2apal79bi3hq44xk5g78aphrqbw983l6df7bp98xh")))) (build-system gnu-build-system) (arguments '(#:configure-flags '("--enable-vala-bindings") @@ -973,9 +1028,7 @@ libraries. Examples include gtk+, webkit, libsoup and many more.") ("xsltproc" ,libxslt))) (propagated-inputs ;; There are all in the Requires.private field of telepathy-glib.pc. - `(("dbus" ,dbus) - ("dbus-glib" ,dbus-glib) - ("glib" ,glib))) + (list dbus dbus-glib glib)) (home-page "https://telepathy.freedesktop.org/wiki/") (synopsis "GLib Real-time communications framework over D-Bus") (description "Telepathy is a flexible, modular communications framework @@ -1004,14 +1057,11 @@ This package provides the library for GLib applications.") "0qafmy2i6dzx4n1dqp6pygyy6gjljnb7hwjcj2z11c1wgclsq4dw")))) (build-system gnu-build-system) (propagated-inputs - `(("dbus" ,dbus))) ;mentioned in the pkg-config file + (list dbus)) ;mentioned in the pkg-config file (inputs - `(("efl" ,efl) - ("expat" ,expat) - ("glib" ,glib) - ("libunwind" ,libunwind))) + (list efl expat glib libunwind)) (native-inputs - `(("pkg-config" ,pkg-config))) + (list pkg-config)) (arguments `(;; The 'configure' machinery fails to detect that it needs -lpthread. #:configure-flags (list "LDFLAGS=-lpthread") @@ -1046,14 +1096,13 @@ programming language. It also provides the @command{dbusxx-xml2cpp} and `(#:configure-flags '("-DENABLE_TESTS=ON" "-DENABLE_TOOLS=ON" "-DENABLE_GLIBMM=ON"))) - (inputs `(("dbus" ,dbus) - ("libsigc++" ,libsigc++) - ("glibmm" ,glibmm) - ("python" ,python) - ("popt" ,popt) - ("expat" ,expat))) - (native-inputs `(("pkg-config" ,pkg-config) - ("m4" ,m4))) + (inputs (list dbus + libsigc++ + glibmm + python + popt + expat)) + (native-inputs (list pkg-config m4)) (synopsis "C++ wrapper for dbus") (description "Dbus-cxx is a C++ wrapper for dbus.\n It exposes the C API to allow direct manipulation and @@ -1097,7 +1146,7 @@ Some codes examples can be find at: ("gtk+" ,gtk+) ("json-glib" ,json-glib) ("libarchive" ,libarchive) - ("libsoup" ,libsoup))) + ("libsoup" ,libsoup-minimal-2))) (arguments `(#:configure-flags (list "-Ddep11=false" @@ -1136,13 +1185,11 @@ metadata.") "1g0w8i5scmh7kfy9mmvv8q326627qf38z26mvczmn8x1yjgar8g7")))) (build-system perl-build-system) (native-inputs - `(("pkg-config" ,pkg-config) - ("perl-test-pod" ,perl-test-pod) - ("perl-test-pod-coverage" ,perl-test-pod-coverage))) + (list pkg-config perl-test-pod perl-test-pod-coverage)) (inputs - `(("dbus" ,dbus))) + (list dbus)) (propagated-inputs - `(("perl-xml-twig" ,perl-xml-twig))) + (list perl-xml-twig)) (home-page "https://metacpan.org/release/Net-DBus") (synopsis "Extension for the DBus bindings") (description "@code{Net::DBus} provides a Perl XS API to the DBus @@ -1164,9 +1211,9 @@ of the DBus APIs, not concerning itself yet with the GLib or QT wrappers.") "1z4mbv8z0rad604xahijpg5szzi8qak07hbahh230z4jf96fkxvj")))) (build-system perl-build-system) (native-inputs - `(("pkg-config" ,pkg-config))) + (list pkg-config)) (inputs - `(("dbus-glib" ,dbus-glib))) + (list dbus-glib)) (home-page "https://metacpan.org/release/Net-DBus-GLib") (synopsis "Perl extension for the DBus GLib bindings") (description "This package provides an extension to the @code{Net::DBus} @@ -1227,18 +1274,16 @@ simple methods via GObject-Introspection.") "03sj1h0c2l08xa8phw013fnxr4fgav7l2mkjhzf9xk3dykwxcj8p")))) (build-system gnu-build-system) (native-inputs - `(("pkg-config" ,pkg-config) - - ;; For tests. - ("dbus" ,dbus) - - ;; These are required to build the manual. - ("docbook-xml" ,docbook-xml-4.3) - ("docbook-xsl" ,docbook-xsl) - ("libxml2" ,libxml2) - ("xsltproc" ,libxslt))) + (list pkg-config + ;; For tests. + dbus + ;; These are required to build the manual. + docbook-xml-4.3 + docbook-xsl + libxml2 + libxslt)) (inputs - `(("glib" ,glib))) + (list glib)) (home-page "https://github.com/flatpak/xdg-dbus-proxy") (synopsis "D-Bus connection proxy") (description @@ -1276,9 +1321,7 @@ to the host system, optionally with filters applied.") (("/bin/true") (which "true"))) #t))))) (inputs - `(("gtk+" ,gtk+) - ("glib" ,glib) - ("dbus-glib" ,dbus-glib))) + (list gtk+ glib dbus-glib)) (native-inputs `(("glib:bin" ,glib "bin") ("intltool" ,intltool) |