gnu: linux-libre: Update to 3.18.8
[jackhill/guix/guix.git] / gnu / packages / glib.scm
index 3190ea5..66ee4fa 100644 (file)
@@ -1,7 +1,8 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
+;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
+;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages glib)
-  #:use-module ((guix licenses)
-                #:renamer (symbol-prefix-proc 'license:))
+  #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix utils)
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages bison)
   #:use-module (gnu packages compression)
-  #:use-module ((gnu packages gettext)
-                #:renamer (symbol-prefix-proc 'guix:))
+  #:use-module (gnu packages flex)
+  #:use-module (gnu packages gettext)
+  #:use-module (gnu packages gtk)
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages xml)
-  #:use-module (gnu packages bash))
+  #:use-module (gnu packages bash)
+  #:use-module (gnu packages file)
+  #:use-module (gnu packages which)
+  #:use-module (gnu packages xorg)
+  #:use-module (gnu packages m4)
 
-(define-public dbus
+  ;; Export variables up-front to allow circular dependency with the 'xorg'
+  ;; module.
+  #:export (dbus
+            glib
+            gobject-introspection
+            dbus-glib
+            intltool
+            itstool
+            libsigc++
+            glibmm
+            telepathy-glib))
+
+(define dbus
   (package
     (name "dbus")
-    (version "1.6.4")
+    (version "1.8.12")
     (source (origin
              (method url-fetch)
              (uri
                              version ".tar.gz"))
              (sha256
               (base32
-               "1wacqyfkcpayg7f8rvx9awqg275n5pksxq5q7y21lxjx85x6pfjz"))))
+               "07jhcalg00i2rx5zrgk73rg0vm7lzi5q5z2gscrbl999ipr2h569"))
+             (patches (list (search-patch "dbus-localstatedir.patch")))))
     (build-system gnu-build-system)
+    (arguments
+     '(#:configure-flags (list ;; Install the system bus socket under /var.
+                               "--localstatedir=/var"
+
+                               ;; XXX: Fix the following to allow system-wide
+                               ;; config.
+                               ;; "--sysconfdir=/etc"
+
+                               "--with-session-socket-dir=/tmp")
+       #:phases (alist-cons-after
+                 'install 'post-install
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   ;; 'dbus-launch' bails out if the 'session.d' directory
+                   ;; below is missing, so create it along with its companion.
+                   (let ((out (assoc-ref outputs "out")))
+                     (mkdir (string-append out "/etc/dbus-1/session.d"))
+                     (mkdir (string-append out "/etc/dbus-1/system.d"))
+                     #t))
+                 %standard-phases)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
     (inputs
      `(("expat" ,expat)
-       ("pkg-config" ,pkg-config)))
+
+       ;; Add a dependency on libx11 so that 'dbus-launch' has support for
+       ;; '--autolaunch'.
+       ("libx11" ,libx11)))
+
     (home-page "http://dbus.freedesktop.org/")
     (synopsis "Message bus for inter-process communication (IPC)")
     (description
      "D-Bus is a message bus system, a simple way for applications to
-talk to one another. In addition to interprocess communication, D-Bus
+talk to one another.  In addition to interprocess communication, D-Bus
 helps coordinate process lifecycle; it makes it simple and reliable to
 code a \"single instance\" application or daemon, and to launch
 applications and daemons on demand when their services are needed.
@@ -64,51 +109,49 @@ applications and daemons on demand when their services are needed.
 D-Bus supplies both a system daemon (for events such as \"new hardware
 device added\" or \"printer queue changed\") and a
 per-user-login-session daemon (for general IPC needs among user
-applications). Also, the message bus is built on top of a general
+applications).  Also, the message bus is built on top of a general
 one-to-one message passing framework, which can be used by any two apps
 to communicate directly (without going through the message bus
-daemon). Currently the communicating applications are on one computer,
+daemon).  Currently the communicating applications are on one computer,
 or through unencrypted TCP/IP suitable for use behind a firewall with
 shared NFS home directories.")
     (license license:gpl2+)))                     ; or Academic Free License 2.1
 
-(define-public glib
+(define glib
   (package
    (name "glib")
-   (version "2.37.1")
+   (version "2.42.1")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnome/sources/"
-                                name "/2.37/"
+                                name "/" (string-take version 4) "/"
                                 name "-" version ".tar.xz"))
             (sha256
-             (base32 "1lp705q0g9jlfj24x8fpgjh7awmmara5iyj9kz5lhd49sr9s813k"))))
+             (base32
+              "16pqvikrps1fvwwqvk0qi4a13mfg7gw6w5qfhk7bhi8f51jhhgwg"))
+            (patches (list (search-patch "glib-tests-homedir.patch")
+                           (search-patch "glib-tests-desktop.patch")
+                           (search-patch "glib-tests-prlimit.patch")
+                           (search-patch "glib-tests-timer.patch")
+                           (search-patch "glib-tests-gapplication.patch")))))
    (build-system gnu-build-system)
-   (outputs '("out"                        ; everything
-              "doc"))                      ; 20 MiB of GTK-Doc reference
+   (outputs '("out"           ; everything
+              "bin"           ; glib-mkenums, gtester, etc.; depends on Python
+              "doc"))         ; 20 MiB of GTK-Doc reference
    (inputs
     `(("coreutils" ,coreutils)
-      ("gettext" ,guix:gettext)
       ("libffi" ,libffi)
-      ("pkg-config" ,pkg-config)
-      ("python" ,python)
       ("zlib" ,zlib)
-      ("perl" ,perl)                              ; needed by GIO tests
+      ("tzdata" ,tzdata)))     ; for tests/gdatetime.c
+   (native-inputs
+    `(("gettext" ,gnu-gettext)
       ("dbus" ,dbus)                              ; for GDBus tests
-      ("bash" ,bash)
-      ("tzdata" ,tzdata)                          ; for tests/gdatetime.c
-
-      ("patch/tests-homedir"
-       ,(search-patch "glib-tests-homedir.patch"))
-      ("patch/tests-desktop"
-       ,(search-patch "glib-tests-desktop.patch"))
-      ("patch/tests-prlimit"
-       ,(search-patch "glib-tests-prlimit.patch"))))
+      ("pkg-config" ,pkg-config)
+      ("python" ,python-wrapper)
+      ("perl" ,perl)                              ; needed by GIO tests
+      ("bash" ,bash)))
    (arguments
-    '(#:patches (list (assoc-ref %build-inputs "patch/tests-homedir")
-                      (assoc-ref %build-inputs "patch/tests-desktop")
-                      (assoc-ref %build-inputs "patch/tests-prlimit"))
-      #:phases (alist-cons-before
+    '(#:phases (alist-cons-before
                 'build 'pre-build
                 (lambda* (#:key inputs outputs #:allow-other-keys)
                   ;; For tests/gdatetime.c.
@@ -125,17 +168,31 @@ shared NFS home directories.")
                     (("/bin/sh")
                      (string-append (assoc-ref inputs "bash") "/bin/sh")))
 
-                  ;; Honor $(TESTS_ENVIRONMENT).
-                  (substitute* (find-files "." "^Makefile(\\.in)?$")
-                    (("^GTESTER[[:blank:]]*=(.*)$" _ rest)
-                     (string-append "GTESTER = $(TESTS_ENVIRONMENT) "
-                                    rest))))
+                  ;; Disable a test that requires dbus.
+                  (substitute* "gio/tests/gdbus-serialization.c"
+                    (("g_test_add_func \\(\"/gdbus/message-serialize/double-array\", test_double_array\\);" all)
+                     (string-append "/* " all " */"))))
                 %standard-phases)
 
       ;; Note: `--docdir' and `--htmldir' are not honored, so work around it.
       #:configure-flags (list (string-append "--with-html-dir="
                                              (assoc-ref %outputs "doc")
-                                             "/share/gtk-doc"))))
+                                             "/share/gtk-doc"))
+
+      ;; In 'gio/tests', 'gdbus-test-codegen-generated.h' is #included in a
+      ;; file that gets compiled possibly before it has been fully generated.
+      #:parallel-tests? #f))
+
+   (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")))))
+   (search-paths native-search-paths)
+
    (synopsis "Thread-safe general utility library; basis of GTK+ and GNOME")
    (description
     "GLib provides data structure handling for C, portability wrappers,
@@ -144,7 +201,65 @@ dynamic loading, and an object system.")
    (home-page "http://developer.gnome.org/glib/")
    (license license:lgpl2.0+)))                        ; some files are under lgpl2.1+
 
-(define-public intltool
+(define gobject-introspection
+  (package
+    (name "gobject-introspection")
+    (version "1.42.0")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append "http://ftp.gnome.org/pub/GNOME/sources/"
+                   "gobject-introspection/" (version-major+minor version)
+                   "/gobject-introspection-" version ".tar.xz"))
+             (sha256
+              (base32 "1xwm7wmr9r9wp6xljb3bckx3a4siybavaq39w46ly7gpskxfv8iv"))
+             (patches (list 
+                       (search-patch "gobject-introspection-cc.patch")
+                       (search-patch
+                        "gobject-introspection-girepository.patch")
+                       (search-patch 
+                        "gobject-introspection-absolute-shlib-path.patch")))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("bison" ,bison)
+       ("cairo" ,cairo)
+       ("flex" ,flex)
+       ("glib" ,glib)
+       ("pkg-config" ,pkg-config)
+       ("python-2" ,python-2)))
+    (native-inputs
+     `(("glib" ,glib "bin")))
+    (propagated-inputs
+     `(;; In practice, GIR users will need libffi when using
+       ;; gobject-introspection.
+       ("libffi" ,libffi)))
+    (native-search-paths
+     (list (search-path-specification
+            (variable "GI_TYPELIB_PATH")
+            (files '("lib/girepository-1.0")))))
+    (search-paths native-search-paths)
+    (arguments
+     `(;; The patch 'gobject-introspection-absolute-shlib-path.patch' causes
+       ;; some tests to fail.
+       #:tests? #f
+       #:phases
+        (alist-cons-before
+         'configure 'patch-paths
+         (lambda _
+           (substitute* "giscanner/sourcescanner.py"
+             (("GUIX_GCC_PATH") (which "gcc"))))
+         %standard-phases)))
+    (home-page "https://wiki.gnome.org/GObjectIntrospection")
+    (synopsis "Generate interface introspection data for GObject libraries")
+    (description
+     "GObject introspection is a middleware layer between C libraries (using
+GObject) and language bindings.  The C library can be scanned at compile time
+and generate a metadata file, in addition to the actual native C library.  Then
+at runtime, language bindings can read this metadata and automatically provide
+bindings to call into the C library.")
+    ; Some bits are distributed under the LGPL2+, others under the GPL2+
+    (license license:gpl2+)))
+
+(define intltool
   (package
     (name "intltool")
     (version "0.50.2")
@@ -157,17 +272,27 @@ dynamic loading, and an object system.")
               (base32
                "01j4yd7i84n9nk4ccs6yifg84pp68nr9by57jdbhj7dpdxf5rwk7"))))
     (build-system gnu-build-system)
+    (inputs
+     `(("file" ,file)))
     (propagated-inputs
      `(;; Propagate gettext because users expect it to be there, and so does
        ;; the `intltool-update' script.
-       ("gettext" ,guix:gettext)
+       ("gettext" ,gnu-gettext)
 
        ("perl-xml-parser" ,perl-xml-parser)
        ("perl" ,perl)))
+    (arguments
+     `(#:phases (alist-cons-after
+                 'unpack 'patch-file-references
+                 (lambda* (#:key inputs #:allow-other-keys)
+                   (let ((file (assoc-ref inputs "file")))
+                     (substitute* "intltool-update.in"
+                       (("`file") (string-append "`" file "/bin/file")))))
+                 %standard-phases)))
     (home-page "https://launchpad.net/intltool/+download")
     (synopsis "Tools to centralise translations of different file formats")
     (description
-     "intltool is a set of tools to centralise translations of many different
+     "Intltool is a set of tools to centralise translations of many different
 file formats using GNU gettext-compatible PO files.
 
 The intltool collection can be used to do these things:
@@ -179,5 +304,262 @@ The intltool collection can be used to do these things:
     source files (.c, .h) in po/$(PACKAGE).pot.
 
     Merge back the translations from .po files into .xml, .desktop and
-    oaf files. This merge step will happen at build resp. installation time.")
+    oaf files.  This merge step will happen at build resp. installation time.")
     (license license:gpl2+)))
+
+(define itstool
+  (package
+    (name "itstool")
+    (version "1.2.0")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append "http://files.itstool.org/itstool/itstool-"
+                                 version ".tar.bz2"))
+             (sha256
+              (base32
+               "1akq75aflihm3y7js8biy7b5mw2g11vl8yq90gydnwlwp0zxdzj6"))))
+    (build-system gnu-build-system)
+    (propagated-inputs
+     `(("libxml2" ,libxml2)
+       ("python-2" ,python-2)))
+    (home-page "http://www.itstool.org")
+    (synopsis "Tool to translate XML documents with PO files")
+    (description
+     "ITS Tool allows you to translate your XML documents with PO files, using
+rules from the W3C Internationalization Tag Set (ITS) to determine what to
+translate and how to separate it into PO file messages.
+
+PO files are the standard translation format for GNU and other Unix-like
+systems.  They present translatable information as discrete messages, allowing
+each message to be translated independently.  In contrast to whole-page
+translation, translating with a message-based format like PO means you can
+easily track changes to the source document down to the paragraph.  When new
+strings are added or existing strings are modified, you only need to update the
+corresponding messages.
+
+ITS Tool is designed to make XML documents translatable through PO files by
+applying standard ITS rules, as well as extension rules specific to ITS Tool.
+ITS also provides an industry standard way for authors to override translation
+information in their documents, such as whether a particular element should be
+translated.")
+    (license license:gpl3+)))
+
+(define dbus-glib
+  (package
+    (name "dbus-glib")
+    (version "0.102")
+    (source (origin
+             (method url-fetch)
+             (uri
+              (string-append "http://dbus.freedesktop.org/releases/dbus-glib/dbus-glib-"
+                             version ".tar.gz"))
+             (sha256
+              (base32
+               "177j5p2vrvpmzk2xrrj6akn73kvpbvnmsjvlmca9l55qbdcfsr39"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("dbus" ,dbus)
+       ("expat" ,expat)
+       ("glib" ,glib)))
+    (native-inputs
+     `(("glib" ,glib "bin")
+       ("pkg-config" ,pkg-config)))
+    (home-page "http://dbus.freedesktop.org/doc/dbus-glib/")
+    (synopsis "D-Bus GLib bindings")
+    (description
+     "GLib bindings for D-Bus.  The package is obsolete and superseded
+by GDBus included in Glib.")
+    (license license:gpl2)))                     ; or Academic Free License 2.1
+
+(define libsigc++
+  (package
+    (name "libsigc++")
+    (version "2.3.1")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append "mirror://gnome/sources/libsigc++/2.3/libsigc++-"
+                                 version ".tar.xz"))
+             (sha256
+              (base32
+               "14q3sq6d43f6wfcmwhw4v1aal4ba0h5x9v6wkxy2dnqznd95il37"))))
+    (build-system gnu-build-system)
+    (native-inputs `(("pkg-config" ,pkg-config)
+                     ("m4" ,m4)))
+    (home-page "http://libsigc.sourceforge.net/")
+    (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.
+
+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+)))
+
+(define glibmm
+  (package
+    (name "glibmm")
+    (version "2.42.0")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append "mirror://gnome/sources/glibmm/"
+                                 (version-major+minor version)
+                                 "/glibmm-" version ".tar.xz"))
+             (sha256
+              (base32
+               "15rk3az8jh3rdwlc3lxjljbnh60drj3ka9574zd39lkqfgcq6l4q"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases (alist-cons-before
+                 'build 'pre-build
+                 (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")))
+                 %standard-phases)))
+    (native-inputs `(("pkg-config" ,pkg-config)
+                     ("glib" ,glib "bin")))
+    (propagated-inputs
+     `(("libsigc++" ,libsigc++)
+       ("glib" ,glib)))
+    (home-page "http://gtkmm.org/")
+    (synopsis "C++ interface to the GLib library")
+    (description
+     "Glibmm provides a C++ programming interface to the part of GLib that are
+useful for C++.")
+    (license license:lgpl2.1+)))
+
+(define-public python2-pygobject-2
+  (package
+    (name "python2-pygobject")
+    ;; This was the last version to declare the 2.0 platform number, i.e. its
+    ;; pkg-config files were named pygobject-2.0.pc
+    (version "2.28.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://gnome/sources/pygobject/"
+                           (version-major+minor version)
+                           "/pygobject-" version ".tar.xz"))
+       (sha256
+        (base32
+         "1f5dfxjnil2glfwxnqr14d2cjfbkghsbsn8n04js2c2icr7iv2pv"))
+       (patches
+        (list (search-patch
+               "python2-pygobject-2-gi-info-type-error-domain.patch")))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("which" ,which)
+       ("glib-bin" ,glib "bin")         ;for tests: glib-compile-schemas
+       ("pkg-config" ,pkg-config)
+       ("dbus" ,dbus)))                 ;for tests
+    (inputs
+     `(("python" ,python-2)
+       ("glib"   ,glib)
+       ("python2-py2cairo" ,python2-py2cairo)
+       ("gobject-introspection" ,gobject-introspection)))
+    (propagated-inputs
+     `(("libffi" ,libffi)))             ;mentioned in pygobject-2.0.pc
+    (arguments
+     `(#:tests? #f                      ;segfaults during tests
+       #:configure-flags '("LIBS=-lcairo-gobject")))
+    (home-page "https://pypi.python.org/pypi/PyGObject")
+    (synopsis "Python bindings for GObject")
+    (description
+     "Python bindings for GLib, GObject, and GIO.")
+    (license license:lgpl2.1+)))
+
+(define-public python-pygobject
+  (package
+    (name "python-pygobject")
+    (version "3.12.2")                  ;last version that works with
+                                        ;gobject-introspection 1.38
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://gnome/sources/pygobject/"
+                           (version-major+minor version)
+                           "/pygobject-" version ".tar.xz"))
+       (sha256
+        (base32
+         "08m5yad1hjdax4g39w6lgjk4124mcwpa8fc5iyvb8nygk8s3syky"))))
+    ;; 3.14.0: 0m1d75iwxa6k1xbkn6c6yq5r10pxnf7i5c2a5yvwsnab7ylzz7kp
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("which" ,which)
+       ("glib-bin" ,glib "bin")         ;for tests: glib-compile-schemas
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("python" ,python)
+       ("glib"   ,glib)
+       ("python-pycairo" ,python-pycairo)
+       ("gobject-introspection" ,gobject-introspection)
+       ("libffi" ,libffi)))
+    (arguments
+     ;; TODO: failing tests: test_native_calls_async
+     ;; test_native_calls_async_errors test_native_calls_sync
+     ;; test_native_calls_sync_errors test_python_calls_async
+     ;; test_python_calls_async_error test_python_calls_async_error_result
+     ;; test_python_calls_sync test_python_calls_sync_errors
+     ;; test_python_calls_sync_noargs test_callback_user_data_middle_none
+     ;; test_callback_user_data_middle_single
+     ;; test_callback_user_data_middle_tuple
+     '(#:tests? #f))
+    (home-page "https://pypi.python.org/pypi/PyGObject")
+    (synopsis "Python bindings for GObject")
+    (description
+     "Python bindings for GLib, GObject, and GIO.")
+    (license license:lgpl2.1+)))
+
+(define telepathy-glib
+  (package
+    (name "telepathy-glib")
+    (version "0.24.1")
+    (source
+     (origin
+      (method url-fetch)
+       (uri
+        (string-append
+         "http://telepathy.freedesktop.org/releases/telepathy-glib/"
+         "telepathy-glib-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1symyzbjmxvksn2ifdkk50lafjm2llf2sbmky062gq2pz3cg23cy"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:phases (alist-cons-before
+                 'build 'set-cc
+                 (lambda _
+                   ;; Set $CC so that g-ir-scanner works.
+                   (setenv "CC" "gcc")
+                   #t)
+                 %standard-phases)))
+    (native-inputs
+     `(("glib" ,glib "bin") ; uses glib-mkenums
+       ("pkg-config" ,pkg-config)
+       ("python" ,python-2)))
+    (inputs
+     `(("dbus" ,dbus)
+       ("dbus-glib" ,dbus-glib)
+       ("glib" ,glib)
+       ("gobject-introspection" ,gobject-introspection)
+       ("libxslt" ,libxslt)))
+    (home-page "http://telepathy.freedesktop.org/wiki/")
+    (synopsis "GLib Real-time communications framework over D-Bus")
+    (description "Telepathy is a flexible, modular communications framework
+that enables real-time communication over D-Bus via pluggable protocol
+backends.  Telepathy is a communications service that can be accessed by
+many applications simultaneously.
+
+This package provides the library for GLib applications.")
+    (license license:lgpl2.1+)))