~ruther/guix-local

9f1d112d1282216f16b2f673c8213d2839e39b7a — Marius Bakke 8 years ago 859620e + cb1e0cf
Merge branch 'master' into staging
M Makefile.am => Makefile.am +1 -0
@@ 194,6 194,7 @@ MODULES +=					\
  guix/import/crate.scm				\
  guix/import/gem.scm				\
  guix/import/github.scm   			\
  guix/import/gnome.scm				\
  guix/import/json.scm				\
  guix/import/pypi.scm				\
  guix/import/stackage.scm			\

M README => README +19 -19
@@ 1,42 1,42 @@
-*- mode: org -*-

[[http://www.gnu.org/software/guix/][GNU Guix]] (IPA: /ɡiːks/) is a purely functional package manager, and
associated free software distribution, for the [[http://www.gnu.org/gnu/gnu.html][GNU system]].  In addition
[[https://www.gnu.org/software/guix/][GNU Guix]] (IPA: /ɡiːks/) is a purely functional package manager, and
associated free software distribution, for the [[https://www.gnu.org/gnu/gnu.html][GNU system]].  In addition
to standard package management features, Guix supports transactional
upgrades and roll-backs, unprivileged package management, per-user
profiles, and garbage collection.

It provides [[http://www.gnu.org/software/guile/][Guile]] Scheme APIs, including a high-level embedded
It provides [[https://www.gnu.org/software/guile/][Guile]] Scheme APIs, including a high-level embedded
domain-specific languages (EDSLs) to describe how packages are to be
built and composed.

A user-land free software distribution for GNU/Linux comes as part of
Guix.

Guix is based on the [[http://nixos.org/nix/][Nix]] package manager.
Guix is based on the [[https://nixos.org/nix/][Nix]] package manager.


* Requirements

GNU Guix currently depends on the following packages:

  - [[http://gnu.org/software/guile/][GNU Guile 2.2.x or 2.0.x]], version 2.0.9 or later
  - [[http://gnupg.org/][GNU libgcrypt]]
  - [[http://www.gnu.org/software/make/][GNU Make]]
  - optionally [[http://savannah.nongnu.org/projects/guile-json/][Guile-JSON]], for the 'guix import pypi' command
  - optionally [[http://www.gnutls.org][GnuTLS]] compiled with guile support enabled, for HTTPS support
  - [[https://gnu.org/software/guile/][GNU Guile 2.2.x or 2.0.x]], version 2.0.9 or later
  - [[https://gnupg.org/][GNU libgcrypt]]
  - [[https://www.gnu.org/software/make/][GNU Make]]
  - optionally [[https://savannah.nongnu.org/projects/guile-json/][Guile-JSON]], for the 'guix import pypi' command
  - optionally [[https://www.gnutls.org][GnuTLS]] compiled with guile support enabled, for HTTPS support
    in the 'guix download' command.  Note that 'guix import pypi' requires
    this functionality.

Unless `--disable-daemon' was passed, the following packages are needed:

  - [[http://sqlite.org/][SQLite 3]]
  - [[https://sqlite.org/][SQLite 3]]
  - [[http://www.bzip.org][libbz2]]
  - [[http://gcc.gnu.org][GCC's g++]]
  - [[https://gcc.gnu.org][GCC's g++]]

When `--disable-daemon' was passed, you instead need the following:

  - [[http://nixos.org/nix/][Nix]]
  - [[https://nixos.org/nix/][Nix]]

* Installation



@@ 44,7 44,7 @@ See the manual for the installation instructions, either by running

  info -f doc/guix.info "Installation"

or by checking the [[http://www.gnu.org/software/guix/manual/guix.html#Installation][web copy of the manual]].
or by checking the [[https://www.gnu.org/software/guix/manual/guix.html#Installation][web copy of the manual]].

For information on installation from a Git checkout, please see the section
"Building from Git" in the manual.


@@ 109,7 109,7 @@ Join #guix on irc.freenode.net.

* Guix & Nix

GNU Guix is based on [[http://nixos.org/nix/][the Nix package manager]].  It implements the same
GNU Guix is based on [[https://nixos.org/nix/][the Nix package manager]].  It implements the same
package deployment paradigm, and in fact it reuses some of its code.
Yet, different engineering decisions were made for Guix, as described
below.


@@ 132,7 132,7 @@ the store.  Guix produces such derivations, which are then interpreted
by the daemon to perform the build.  Thus, Guix derivations can use
derivations produced by Nix (and vice versa).

With Nix and the [[http://nixos.org/nixpkgs][Nixpkgs]] distribution, package composition happens at
With Nix and the [[https://nixos.org/nixpkgs][Nixpkgs]] distribution, package composition happens at
the Nix language level, but builders are usually written in Bash.
Conversely, Guix encourages the use of Scheme for both package
composition and builders.  Likewise, the core functionality of Nix is


@@ 141,13 141,13 @@ but exposes all the API as Scheme.

* Related software

  - [[http://nixos.org][Nix, Nixpkgs, and NixOS]], functional package manager and associated
  - [[https://nixos.org][Nix, Nixpkgs, and NixOS]], functional package manager and associated
    software distribution, are the inspiration of Guix
  - [[http://www.gnu.org/software/stow/][GNU Stow]] builds around the idea of one directory per prefix, and a
  - [[https://www.gnu.org/software/stow/][GNU Stow]] builds around the idea of one directory per prefix, and a
    symlink tree to create user environments
  - [[http://www.pvv.ntnu.no/~arnej/store/storedoc_6.html][STORE]] shares the same idea
  - [[https://www.pvv.ntnu.no/~arnej/store/storedoc_6.html][STORE]] shares the same idea
  - [[https://live.gnome.org/OSTree/][GNOME's OSTree]] allows bootable system images to be built from a
    specified set of packages
  - The [[http://www.gnu.org/s/gsrc/][GNU Source Release Collection]] (GSRC) is a user-land software
  - The [[https://www.gnu.org/s/gsrc/][GNU Source Release Collection]] (GSRC) is a user-land software
    distribution; unlike Guix, it relies on core tools available on the
    host system

M doc/guix.texi => doc/guix.texi +4 -0
@@ 15414,6 15414,10 @@ added specifications.
@item @code{port} (default: @code{8081})
Port number used by the HTTP server.

@item --listen=@var{host}
Listen on the network interface for @var{host}.  The default is to
accept connections from localhost.

@item @code{specifications} (default: @code{#~'()})
A gexp (@pxref{G-Expressions}) that evaluates to a list of specifications,
where a specification is an association list

M gnu/local.mk => gnu/local.mk +0 -4
@@ 552,7 552,6 @@ dist_patch_DATA =						\
  %D%/packages/patches/ceph-disable-unittest-throttle.patch	\
  %D%/packages/patches/ceph-skip-collect-sys-info-test.patch	\
  %D%/packages/patches/ceph-skip-unittest_blockdev.patch	\
  %D%/packages/patches/python-acme-dont-use-openssl-rand.patch	\
  %D%/packages/patches/chicken-CVE-2017-6949.patch		\
  %D%/packages/patches/chicken-CVE-2017-11343.patch		\
  %D%/packages/patches/chmlib-inttypes.patch			\


@@ 587,7 586,6 @@ dist_patch_DATA =						\
  %D%/packages/patches/doc++-segfault-fix.patch			\
  %D%/packages/patches/doxygen-test.patch			\
  %D%/packages/patches/dvd+rw-tools-add-include.patch 		\
  %D%/packages/patches/e2fsprogs-32bit-quota-warnings.patch	\
  %D%/packages/patches/elfutils-tests-ptrace.patch		\
  %D%/packages/patches/elixir-disable-failing-tests.patch	\
  %D%/packages/patches/einstein-build.patch			\


@@ 615,7 613,6 @@ dist_patch_DATA =						\
  %D%/packages/patches/flint-ldconfig.patch			\
  %D%/packages/patches/fltk-shared-lib-defines.patch		\
  %D%/packages/patches/fltk-xfont-on-demand.patch		\
  %D%/packages/patches/fontforge-svg-modtime.patch		\
  %D%/packages/patches/foomatic-filters-CVE-2015-8327.patch	\
  %D%/packages/patches/foomatic-filters-CVE-2015-8560.patch	\
  %D%/packages/patches/freeimage-CVE-2015-0852.patch		\


@@ 808,7 805,6 @@ dist_patch_DATA =						\
  %D%/packages/patches/libtirpc-CVE-2017-8779.patch		\
  %D%/packages/patches/libtorrent-rasterbar-boost-compat.patch	\
  %D%/packages/patches/libtool-skip-tests2.patch		\
  %D%/packages/patches/libunwind-CVE-2015-3239.patch		\
  %D%/packages/patches/libunistring-gnulib-multi-core.patch	\
  %D%/packages/patches/libusb-0.1-disable-tests.patch		\
  %D%/packages/patches/libvpx-CVE-2016-2818.patch		\

M gnu/packages/ci.scm => gnu/packages/ci.scm +3 -3
@@ 187,8 187,8 @@ their dependencies.")
      (license l:gpl3+))))

(define-public cuirass
  (let ((commit "87ad259dba7de38b6e3ab954cd7b2f655358d877")
        (revision "8"))
  (let ((commit "2a4d493e28100b8eca7d23300dd872c9f99e1f16")
        (revision "9"))
    (package
      (name "cuirass")
      (version (string-append "0.0.1-" revision "." (string-take commit 7)))


@@ 200,7 200,7 @@ their dependencies.")
                (file-name (string-append name "-" version))
                (sha256
                 (base32
                  "127pvbxbh6b6ar43cdgia9qpzzpldq4wm3igsxb1ycxfsdqnjrnz"))))
                  "0hi7x25ya8wydrfj9jd9zb351mw8pgxxxwgxxdn5kds7qvhxr26v"))))
      (build-system gnu-build-system)
      (arguments
       '(#:modules ((guix build utils)

M gnu/packages/electronics.scm => gnu/packages/electronics.scm +3 -2
@@ 242,9 242,10 @@ format support.")
     `(("boost" ,boost)
       ("glib" ,glib)
       ("glibmm" ,glibmm)
       ("qt" ,qt)
       ("libsigrok" ,libsigrok)
       ("libsigrokdecode" ,libsigrokdecode)))
       ("libsigrokdecode" ,libsigrokdecode)
       ("qtbase" ,qtbase)
       ("qtsvg" ,qtsvg)))
    (build-system cmake-build-system)
    (home-page "http://www.sigrok.org/wiki/PulseView")
    (synopsis "Qt based logic analyzer, oscilloscope and MSO GUI for sigrok")

M gnu/packages/fontutils.scm => gnu/packages/fontutils.scm +8 -29
@@ 396,7 396,7 @@ and returns a sequence of positioned glyphids from the font.")
(define-public potrace
  (package
    (name "potrace")
    (version "1.14")
    (version "1.15")
    (source
     (origin
      (method url-fetch)


@@ 404,7 404,7 @@ and returns a sequence of positioned glyphids from the font.")
                          "/potrace-" version ".tar.gz"))
      (sha256
       (base32
        "0znr9i0ljb818qiwm22zw63g11a4v08gc5xkh0wbdp6g259vcwnv"))))
        "17ajildjp14shsy339xarh1lw1p0k60la08ahl638a73mh23kcx9"))))
    (build-system gnu-build-system)
    (native-inputs `(("ghostscript" ,ghostscript))) ;for tests
    (inputs `(("zlib" ,zlib)))


@@ 498,26 498,14 @@ definitions.")
(define-public fontforge
  (package
   (name "fontforge")
   (version "20160404")
   (version "20170731")
   (source (origin
            (method url-fetch)
            (uri (string-append
                  "https://github.com/fontforge/fontforge/releases/download/"
                  version "/fontforge-dist-" version ".tar.gz"))
                  version "/fontforge-dist-" version ".tar.xz"))
            (sha256 (base32
                     "1kavnhbkzc1hk6f39fynq9s0haama81ddrbld4b5x60d0dbaawvc"))
            (modules '((guix build utils)))
            (snippet
             '(begin
               ;; Make builds bit-reproducible by using fixed date strings.
               (substitute* "configure"
                 (("^FONTFORGE_MODTIME=.*$")
                  "FONTFORGE_MODTIME=\"1459819518L\"\n")
                 (("^FONTFORGE_MODTIME_STR=.*$")
                  "FONTFORGE_MODTIME_STR=\"20:25 CDT  4-Apr-2016\"\n")
                 (("^FONTFORGE_VERSIONDATE=.*$")
                  "FONTFORGE_VERSIONDATE=\"20160404\"\n"))))
            (patches (list (search-patch "fontforge-svg-modtime.patch")))))
                     "08l8h3yvk4v7652jvmd3ls7nf5miybkx2fmkf1mpwwfixpxxw2l4"))))
   (build-system gnu-build-system)
   (native-inputs
    `(("pkg-config" ,pkg-config)))


@@ 541,20 529,11 @@ definitions.")
             ("libxml2"         ,libxml2)
             ("pango"           ,pango)
             ("potrace"         ,potrace)
             ("python"          ,python)
             ("python"          ,python-wrapper)
             ("zlib"            ,zlib)))
   (arguments
    '(#:tests? #f
      #:phases
    '(#:phases
      (modify-phases %standard-phases
        (add-after 'build 'build-contrib
          (lambda* (#:key outputs #:allow-other-keys)
            (let* ((out (assoc-ref outputs "out"))
                   (bin (string-append out "/bin")))
              (and (zero? (system* "make" "-Ccontrib/fonttools"
                                   "CC=gcc" "showttf"))
                   (begin (install-file "contrib/fonttools/showttf" bin)
                          #t)))))
        (add-after 'install 'set-library-path
          (lambda* (#:key inputs outputs #:allow-other-keys)
            (let ((out (assoc-ref outputs "out"))


@@ 576,4 555,4 @@ definitions.")
opentype fonts.  You can save fonts in many different outline formats, and
generate bitmaps.")
   (license license:gpl3+)
   (home-page "http://fontforge.org/")))
   (home-page "https://fontforge.github.io/en-US/")))

M gnu/packages/ftp.scm => gnu/packages/ftp.scm +2 -2
@@ 46,7 46,7 @@
(define-public lftp
  (package
    (name "lftp")
    (version "4.8.1")
    (version "4.8.2")
    (source (origin
              (method url-fetch)
              ;; See https://lftp.tech/get.html for mirrors.


@@ 58,7 58,7 @@
                                        "ftp/lftp/lftp-" version ".tar.xz")))
              (sha256
               (base32
                "09vvwn5w3n8ahx57b7n6qvg1abnw9w7mm4d8p381pliab6jxlw77"))))
                "176d90amkm1klwjpfpzdsvmjnyri8f74bv4fpip8app0fs25p1sw"))))
    (build-system gnu-build-system)
    (native-inputs
     `(("pkg-config" ,pkg-config)))

M gnu/packages/gnome.scm => gnu/packages/gnome.scm +2 -2
@@ 5302,7 5302,7 @@ providing graphical log-ins and managing local and remote displays.")
(define-public libgtop
  (package
    (name "libgtop")
    (version "2.36.0")
    (version "2.38.0")
    (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnome/sources/" name "/"


@@ 5310,7 5310,7 @@ providing graphical log-ins and managing local and remote displays.")
                                  name "-" version ".tar.xz"))
              (sha256
               (base32
                "0ax17c7nplghxgsf8zl92nmhkbnggj62wwzl7nq00aqb2m6f7gqk"))))
                "04mnxgzyb26wqk6qij4iw8cxwl82r8pcsna5dg8vz2j3pdi0wv2g"))))
    (build-system gnu-build-system)
    (native-inputs
     `(("gobject-introspection" ,gobject-introspection)

M gnu/packages/gnupg.scm => gnu/packages/gnupg.scm +29 -1
@@ 7,7 7,7 @@
;;; Copyright © 2015, 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2015, 2016 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2016 Christopher Allan Webber <cwebber@dustycloud.org>
;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
;;; Copyright © 2016, 2017 ng0 <ng0@infotropique.org>
;;; Copyright © 2016 Christopher Baines <mail@cbaines.net>
;;; Copyright © 2016 Mike Gerwitz <mtg@gnu.org>
;;; Copyright © 2016 Troy Sankey <sankeytms@gmail.com>


@@ 822,3 822,31 @@ qualities.  To reconstruct a secret key, you re-enter those
bytes (whether by hand, OCR, QR code, or the like) and paperkey can use
them to transform your existing public key into a secret key.")
    (license license:gpl2+)))

(define-public gpa
  (package
    (name "gpa")
    (version "0.9.10")
    (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnupg/gpa/"
                                  name "-" version ".tar.bz2"))
              (sha256
               (base32
                "09xphbi2456qynwqq5n0yh0zdmdi2ggrj3wk4hsyh5lrzlvcrff3"))))
    (build-system gnu-build-system)
    (native-inputs
     `(("pkg-config" ,pkg-config)))
    (inputs
     `(("gnupg" ,gnupg)
       ("gpgme" ,gpgme)
       ("libassuan" ,libassuan)
       ("libgpg-error" ,libgpg-error)
       ("gtk+-2" ,gtk+-2)))
    (home-page "https://gnupg.org/software/gpa/")
    (synopsis "Graphical user interface for GnuPG")
    (description
     "GPA, the GNU Privacy Assistant, is a graphical user interface for
@uref{https://gnupg.org, GnuPG}.  It can be used to encrypt, decrypt, and sign
files, to verify signatures, and to manage the private and public keys.")
    (license license:gpl3+)))

M gnu/packages/libunwind.scm => gnu/packages/libunwind.scm +4 -4
@@ 27,18 27,18 @@
(define-public libunwind
  (package
    (name "libunwind")
    (version "1.1")
    (version "1.2.1")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://savannah/libunwind/libunwind-"
                                 version ".tar.gz"))
             (sha256
              (base32
               "16nhx2pahh9d62mvszc88q226q5lwjankij276fxwrm8wb50zzlx"))
             (patches (search-patches "libunwind-CVE-2015-3239.patch"))))
               "1jsslwkilwrsj959dc8b479qildawz67r8m4lzxm7glcwa8cngiz"))))
    (build-system gnu-build-system)
    (arguments
     ;; FIXME: As of glibc 2.17, we get 3 out of 34 test failures.
     ;; FIXME: As of glibc 2.25, we get 1 out of 34 test failures (2 are
     ;; expected to fail).
     ;; Report them upstream.
     '(#:tests? #f))
    (home-page "http://www.nongnu.org/libunwind")

M gnu/packages/linux.scm => gnu/packages/linux.scm +17 -12
@@ 693,17 693,16 @@ slabtop, and skill.")
(define-public e2fsprogs
  (package
    (name "e2fsprogs")
    (version "1.43.5")
    (version "1.43.6")
    (source (origin
             (method url-fetch)
             (uri (string-append
                   "mirror://kernel.org/linux/kernel/people/tytso/"
                   name "/v" version "/"
                   name "-" version ".tar.xz"))
             (patches (search-patches "e2fsprogs-32bit-quota-warnings.patch"))
             (sha256
              (base32
               "05ssjpmy0fpv2ik6ibm1f47wr6794nf0q50r581vygrqvsd3s7r6"))))
               "00ilv65dzcgiap435j89xk86shf7rrav3wsik7cahy789qijdcn9"))))
    (build-system gnu-build-system)
    (inputs `(("util-linux" ,util-linux)))
    (native-inputs `(("pkg-config" ,pkg-config)


@@ 1566,16 1565,16 @@ devices.  It replaces @code{iwconfig}, which is deprecated.")
(define-public powertop
  (package
    (name "powertop")
    (version "2.8")
    (version "2.9")
    (source
     (origin
       (method url-fetch)
       (uri (string-append
             "https://01.org/sites/default/files/downloads/powertop/powertop-"
             "https://01.org/sites/default/files/downloads/powertop/powertop-v"
             version ".tar.gz"))
       (sha256
        (base32
         "0nlwazxbnn0k6q5f5b09wdhw0f194lpzkp3l7vxansqhfczmcyx8"))))
         "0l4jjlf05li2mc6g8nrss3h435wjhmnqd8m7v3kha3x0x7cbfzxa"))))
    (build-system gnu-build-system)
    (arguments
     '(#:phases


@@ 2369,11 2368,16 @@ country-specific regulations for the wireless spectrum.")
                     ("flex" ,flex)
                     ("bison" ,bison)
                     ("which" ,which)))
    (outputs '("lib"              ;avoid perl in closure
               "out"))
    (arguments
     `(#:tests? #f  ; no 'check' target
       #:make-flags (list (string-append "PREFIX=" %output)
                          (string-append "ETCDIR=" %output "/etc")
                          (string-append "MANDIR=" %output "/share/man"))
                          (string-append "ETCDIR=" (assoc-ref %outputs "lib") "/etc")
                          (string-append "INCLUDEDIR="
                                         (assoc-ref %outputs "lib") "/include")
                          (string-append "MANDIR=" %output "/share/man")
                          (string-append "LIBDIR=" (assoc-ref %outputs "lib") "/lib"))
       #:phases
       (modify-phases %standard-phases
         (delete 'configure)


@@ 2462,7 2466,7 @@ SMBus access.")
               (base32
                "1siplsfgvcxamyqf44h71jx6jdfmvhfm7mh0y1q8ps4zs6pj2zwh"))))
    (build-system gnu-build-system)
    (inputs `(("lm-sensors" ,lm-sensors)
    (inputs `(("lm-sensors" ,lm-sensors "lib")
              ("gtk" ,gtk+-2)))
    (native-inputs `(("pkg-config" ,pkg-config)))
    (arguments


@@ 3159,7 3163,7 @@ and copy/paste text in the console and in xterm.")
(define-public btrfs-progs
  (package
    (name "btrfs-progs")
    (version "4.13")
    (version "4.13.1")
    (source (origin
              (method url-fetch)
              (uri (string-append "mirror://kernel.org/linux/kernel/"


@@ 3167,7 3171,7 @@ and copy/paste text in the console and in xterm.")
                                  "btrfs-progs-v" version ".tar.xz"))
              (sha256
               (base32
                "17m67jm29phfvkmd72lxb1z9nymn9a9pqnja8zfb1mvflsqwbz3m"))))
                "1clavvrlkswgicqsm2yfsxqw04lsn8dra0db84jqm6j2apz80kz0"))))
    (build-system gnu-build-system)
    (outputs '("out"
               "static"))      ; static versions of the binaries in "out"


@@ 3195,8 3199,9 @@ and copy/paste text in the console and in xterm.")
              ("libblkid:static" ,util-linux "static")
              ("libuuid" ,util-linux)
              ("libuuid:static" ,util-linux "static")
              ("lzo" ,lzo)
              ("zlib" ,zlib)
              ("lzo" ,lzo)))
              ("zstd" ,zstd)))
    (native-inputs `(("pkg-config" ,pkg-config)
                     ("asciidoc" ,asciidoc)
                     ("xmlto" ,xmlto)

M gnu/packages/lxqt.scm => gnu/packages/lxqt.scm +30 -0
@@ 3,6 3,7 @@
;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
;;; Copyright © 2016 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2017 ng0 <ng0@infotropique.org>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 26,6 27,7 @@
  #:use-module (guix utils)
  #:use-module (guix build-system cmake)
  #:use-module (gnu packages)
  #:use-module (gnu packages glib)
  #:use-module (gnu packages kde-frameworks)
  #:use-module (gnu packages pkg-config)
  #:use-module (gnu packages qt))


@@ 188,3 190,31 @@ desktop environment.")
    (description "lxqt-session provides the standard session manager
for the LXQt desktop environment.")
    (license lgpl2.1+)))

(define-public lxqt-build-tools
  (package
    (name "lxqt-build-tools")
    (version "0.4.0")
    (source
     (origin
       (method url-fetch)
       (uri (string-append "https://github.com/lxde/lxqt-build-tools/releases/"
                           "download/" version "/" name "-" version ".tar.xz"))
       (file-name (string-append name "-" version ".tar.xz"))
       (sha256
        (base32
         "1llbrjbgabxlq933a8cpg03b3mdmvd8983csnd4f7vrcj51nv0xh"))))
    (build-system cmake-build-system)
    (arguments
     `(#:tests? #f)) ;No tests
    (native-inputs
     `(("pkg-config" ,pkg-config)
       ("glib" ,glib)))
    (inputs
     `(("qtbase" ,qtbase)))
    (synopsis "LXQt Build tools")
    (description
     "Lxqt-build-tools is providing several tools needed to build LXQt
itself as well as other components maintained by the LXQt project.")
    (home-page "http://lxqt.org")
    (license lgpl2.1+)))

M gnu/packages/music.scm => gnu/packages/music.scm +3 -1
@@ 677,7 677,9 @@ Sega Master System/Mark III, Sega Genesis/Mega Drive, BBC Micro
              (("SHELL=/bin/sh") "SHELL=sh")
              ;; When checking the fontforge version do not consider the
              ;; version string that's part of the directory.
              (("head -n") "tail -n"))
              (("head -n") "tail -n")
              ;; Also allow for SOURCE_DATE_EPOCH = 0 in fontforge.
              (("20110222") "19700101"))
            (setenv "out" "www")
            (setenv "conf" "www")
            #t))

M gnu/packages/ntp.scm => gnu/packages/ntp.scm +3 -3
@@ 3,7 3,7 @@
;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
;;; Copyright © 2015 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 98,14 98,14 @@ computers over a network.")
(define-public openntpd
  (package
    (name "openntpd")
    (version "6.1p1")
    (version "6.2p2")
    (source (origin
              (method url-fetch)
              (uri (string-append
                    "mirror://openbsd/OpenNTPD/" name "-" version ".tar.gz"))
              (sha256
               (base32
                "1ykx9ga76k5m54h7k5x4ds2clxsyfniss5vmf88pxnrip5bx6if8"))))
                "1chghbh1bnwhxdgkqki51w94nwvlyj1a9q8716r4v2h0gc9s822q"))))
    (build-system gnu-build-system)
    (home-page "http://www.openntpd.org/")
    (synopsis "NTP client and server by the OpenBSD Project")

D gnu/packages/patches/e2fsprogs-32bit-quota-warnings.patch => gnu/packages/patches/e2fsprogs-32bit-quota-warnings.patch +0 -46
@@ 1,46 0,0 @@
Fix a test failure on 32-bit platforms.

Patch copied from upstream source repository:

https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git/commit/?id=9e31a5696c4b699bf000a07b86601c1fb91c0493

diff --git a/lib/support/mkquota.c b/lib/support/mkquota.c
index 00f3a40..931a839 100644
--- a/lib/support/mkquota.c
+++ b/lib/support/mkquota.c
@@ -50,11 +50,13 @@ static void print_dquot(const char *desc, struct dquot *dq)
 {
 	if (desc)
 		fprintf(stderr, "%s: ", desc);
-	fprintf(stderr, "%u %ld:%ld:%ld %ld:%ld:%ld\n",
-		dq->dq_id, dq->dq_dqb.dqb_curspace,
-		dq->dq_dqb.dqb_bsoftlimit, dq->dq_dqb.dqb_bhardlimit,
-		dq->dq_dqb.dqb_curinodes,
-		dq->dq_dqb.dqb_isoftlimit, dq->dq_dqb.dqb_ihardlimit);
+	fprintf(stderr, "%u %lld:%lld:%lld %lld:%lld:%lld\n",
+		dq->dq_id, (long long) dq->dq_dqb.dqb_curspace,
+		(long long) dq->dq_dqb.dqb_bsoftlimit,
+		(long long) dq->dq_dqb.dqb_bhardlimit,
+		(long long) dq->dq_dqb.dqb_curinodes,
+		(long long) dq->dq_dqb.dqb_isoftlimit,
+		(long long) dq->dq_dqb.dqb_ihardlimit);
 }
 #else
 static void print_dquot(const char *desc EXT2FS_ATTR((unused)),
@@ -524,11 +526,11 @@ static int scan_dquots_callback(struct dquot *dquot, void *cb_data)
 	    dq->dq_dqb.dqb_curinodes != dquot->dq_dqb.dqb_curinodes) {
 		scan_data->usage_is_inconsistent = 1;
 		fprintf(stderr, "[QUOTA WARNING] Usage inconsistent for ID %u:"
-			"actual (%ld, %ld) != expected (%ld, %ld)\n",
-			dq->dq_id, dq->dq_dqb.dqb_curspace,
-			dq->dq_dqb.dqb_curinodes,
-			dquot->dq_dqb.dqb_curspace,
-			dquot->dq_dqb.dqb_curinodes);
+			"actual (%lld, %lld) != expected (%lld, %lld)\n",
+			dq->dq_id, (long long) dq->dq_dqb.dqb_curspace,
+			(long long) dq->dq_dqb.dqb_curinodes,
+			(long long) dquot->dq_dqb.dqb_curspace,
+			(long long) dquot->dq_dqb.dqb_curinodes);
 	}
 
 	if (scan_data->update_limits) {

D gnu/packages/patches/fontforge-svg-modtime.patch => gnu/packages/patches/fontforge-svg-modtime.patch +0 -35
@@ 1,35 0,0 @@
Propagate source font modification time to svg during conversion.  Similar to
what upstream commit 95a470e941d9a20fbdaca51334e8b6b9d93cfae4 did for TTF
files.

Submitted upstream at http://github.com/fontforge/fontforge/pull/2696

--- a/fontforge/svg.c
+++ b/fontforge/svg.c
@@ -27,7 +27,6 @@
 #include "fontforgevw.h"
 #include <unistd.h>
 #include <math.h>
-#include <time.h>
 #include <locale.h>
 #include <utype.h>
 #include <chardata.h>
@@ -62,7 +61,6 @@ static int svg_outfontheader(FILE *file, SplineFont *sf,int layer) {
     BlueData bd;
     char *hash, *hasv, ch;
     int minu, maxu, i;
-    time_t now;
     const char *author = GetAuthor();
 
     memset(&info,0,sizeof(info));
@@ -78,9 +76,8 @@ static int svg_outfontheader(FILE *file, SplineFont *sf,int layer) {
 	fprintf( file, "\n-->\n" );
     }
     fprintf( file, "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" version=\"1.1\">\n" );
-    time(&now);
     fprintf( file, "<metadata>\nCreated by FontForge %d at %s",
-	    FONTFORGE_VERSIONDATE_RAW, ctime(&now) );
+	    FONTFORGE_VERSIONDATE_RAW, ctime((time_t*)&sf->modificationtime) );
     if ( author!=NULL )
 	fprintf(file," By %s\n", author);
     else

D gnu/packages/patches/libunwind-CVE-2015-3239.patch => gnu/packages/patches/libunwind-CVE-2015-3239.patch +0 -17
@@ 1,17 0,0 @@
Copied from Fedora.

https://bugzilla.redhat.com/show_bug.cgi?id=1232265
http://pkgs.fedoraproject.org/cgit/libunwind.git/tree/libunwind-1.1-fix-CVE-2015-3239.patch

diff -up libunwind-1.1/include/dwarf_i.h.CVE20153239 libunwind-1.1/include/dwarf_i.h
--- libunwind-1.1/include/dwarf_i.h.CVE20153239	2015-07-10 13:38:36.404996748 -0400
+++ libunwind-1.1/include/dwarf_i.h	2015-07-10 13:39:25.050707613 -0400
@@ -20,7 +20,7 @@
 extern const uint8_t dwarf_to_unw_regnum_map[DWARF_REGNUM_MAP_LENGTH];
 /* REG is evaluated multiple times; it better be side-effects free!  */
 # define dwarf_to_unw_regnum(reg)					  \
-  (((reg) <= DWARF_REGNUM_MAP_LENGTH) ? dwarf_to_unw_regnum_map[reg] : 0)
+  (((reg) < DWARF_REGNUM_MAP_LENGTH) ? dwarf_to_unw_regnum_map[reg] : 0)
 #endif
 
 #ifdef UNW_LOCAL_ONLY

D gnu/packages/patches/python-acme-dont-use-openssl-rand.patch => gnu/packages/patches/python-acme-dont-use-openssl-rand.patch +0 -28
@@ 1,28 0,0 @@
Fix build with PyOpenSSL > 17.2.0.

See <https://github.com/certbot/certbot/issues/5111>.

Patch copied from upstream source repository:
https://github.com/certbot/certbot/commit/f6be07da74c664b57ac8c053585f919c79f9af44

diff --git a/acme/crypto_util.py b/acme/crypto_util.py
index de15284c03..b8fba03488 100644
--- a/acme/crypto_util.py
+++ b/acme/crypto_util.py
@@ -2,6 +2,7 @@
 import binascii
 import contextlib
 import logging
+import os
 import re
 import socket
 import sys
@@ -243,7 +244,7 @@ def gen_ss_cert(key, domains, not_before=None,
     """
     assert domains, "Must provide one or more hostnames for the cert."
     cert = OpenSSL.crypto.X509()
-    cert.set_serial_number(int(binascii.hexlify(OpenSSL.rand.bytes(16)), 16))
+    cert.set_serial_number(int(binascii.hexlify(os.urandom(16)), 16))
     cert.set_version(2)
 
     extensions = [

M gnu/packages/samba.scm => gnu/packages/samba.scm +18 -3
@@ 34,6 34,7 @@
  #:use-module (gnu packages crypto)
  #:use-module (gnu packages cups)
  #:use-module (gnu packages databases)
  #:use-module (gnu packages docbook)
  #:use-module (gnu packages tls)
  #:use-module (gnu packages popt)
  #:use-module (gnu packages pkg-config)


@@ 42,7 43,8 @@
  #:use-module (gnu packages kerberos)
  #:use-module (gnu packages linux)
  #:use-module (gnu packages perl)
  #:use-module (gnu packages python))
  #:use-module (gnu packages python)
  #:use-module (gnu packages xml))

(define-public cifs-utils
  (package


@@ 159,8 161,19 @@ anywhere.")
               "0pap686cl0j5c9v1v09krpqdk416x3851fbcap5ysp1zajrfw7aq"))))
    (build-system gnu-build-system)
    (arguments
     '(#:phases
     `(#:phases
       (modify-phases %standard-phases
         (add-before 'configure 'locate-docbook-stylesheets
           (lambda* (#:key inputs #:allow-other-keys)
             ;; XXX for some reason XML_CATALOG_FILES is not respected.
             (substitute* '("buildtools/wafsamba/samba_conftests.py"
                            "buildtools/wafsamba/wafsamba.py"
                            "docs-xml/xslt/man.xsl")
               (("http://docbook.sourceforge.net/release/xsl/current/")
                (string-append (assoc-ref inputs "docbook-xsl")
                               "/xml/xsl/docbook-xsl-"
                               ,(package-version docbook-xsl) "/")))
             #t))
         (replace 'configure
           ;; samba uses a custom configuration script that runs waf.
           (lambda* (#:key outputs #:allow-other-keys)


@@ 203,7 216,9 @@ anywhere.")
       ("tevent" ,tevent)
       ("tdb" ,tdb)))
    (native-inputs
     `(("perl" ,perl)
     `(("docbook-xsl" ,docbook-xsl)    ;for generating manpages
       ("xsltproc" ,libxslt)           ;ditto
       ("perl" ,perl)
       ("pkg-config" ,pkg-config)
       ("python" ,python-2))) ; incompatible with Python 3
    (home-page "https://www.samba.org/")

M gnu/packages/tcl.scm => gnu/packages/tcl.scm +45 -0
@@ 248,6 248,51 @@ interfaces (GUIs) in the Tcl language.")
utility functions and modules all written in high-level Tcl.")
    (license (package-license tcl))))

(define-public tklib
  (package
    (name "tklib")
    (version "0.6")
    (source (origin
              (method url-fetch)
              (uri (string-append "https://core.tcl.tk/tklib/tarball/tklib-"
                                  version ".tar.gz?uuid=tklib-0-6"))
              (sha256
               (base32
                "03y0bzgwbh7nnyqkh8n00bbkq2fyblq39s3bdb6mawna0bbn0wwg"))))
    (build-system gnu-build-system)
    (native-inputs
     `(("tcl" ,tcl)))
    (propagated-inputs
     `(("tcllib" ,tcllib)
       ("tk" ,tk))) ; for "wish"
    (native-search-paths
     (list (search-path-specification
            (variable "TCLLIBPATH")
            (separator " ")
            (files (list (string-append "lib/tklib" version))))))
    (home-page "https://www.tcl.tk/software/tklib/")
    (synopsis "Tk utility modules for Tcl")
    (description "Tklib is a collection of common utility functions and
modules for Tk, all written in high-level Tcl.  Examples of provided widgets:
@enumerate
@item @code{chatwidget}
@item @code{datefield}
@item @code{tooltip}
@item @code{cursor}
@item @code{ipentry}
@item @code{tablelist}
@item @code{history}
@item @code{tkpiechart}
@item @code{ico}
@item @code{crosshair}
@item @code{ntext}
@item @code{plotchart}
@item @code{ctext}
@item @code{autosscroll}
@item @code{canvas}
@end enumerate")
    (license (package-license tcl))))

(define-public tclxml
  (package
    (name "tclxml")

M gnu/packages/tls.scm => gnu/packages/tls.scm +3 -4
@@ 486,14 486,13 @@ netcat implementation that supports TLS.")
  (package
    (name "python-acme")
    ;; Remember to update the hash of certbot when updating python-acme.
    (version "0.18.1")
    (version "0.18.2")
    (source (origin
              (method url-fetch)
              (uri (pypi-uri "acme" version))
              (patches (search-patches "python-acme-dont-use-openssl-rand.patch"))
              (sha256
               (base32
                "0ry6vhfkhds28sg232hngwfnkqihsxv9r8w92c6nz45r7w56qk0y"))))
                "1xiy8m7501g5l9kpdmyvyz72nfnl72l19qkrf76fyvby7adzm3ki"))))
    (build-system python-build-system)
    (arguments
     `(#:phases


@@ 541,7 540,7 @@ netcat implementation that supports TLS.")
              (uri (pypi-uri name version))
              (sha256
               (base32
                "0k3bqfkjxyg0qivs4a6iz6gyqx8li4hgn8m268r72lxgq46ay2mf"))))
                "16lw4n7kwnkvh9sz2f97c7ad1wwp33mg5fc332lpy5n17zpfc8h1"))))
    (build-system python-build-system)
    (arguments
     `(,@(substitute-keyword-arguments (package-arguments python-acme)

M gnu/packages/version-control.scm => gnu/packages/version-control.scm +3 -3
@@ 124,14 124,14 @@ as well as the classic centralized workflow.")
   (name "git")
   ;; XXX When updating Git, check if the special 'git:src' input to cgit needs
   ;; to be updated as well.
   (version "2.14.1")
   (version "2.14.2")
   (source (origin
            (method url-fetch)
            (uri (string-append "mirror://kernel.org/software/scm/git/git-"
                                version ".tar.xz"))
            (sha256
             (base32
              "1iic3wiihxp3l3k6d4z886v3869c3dzgddjxnd5124wy1rnlqwkg"))))
              "18f70gfzwqd210806hmf94blcd7yv5h9ka6xqkpd2jhijqwp5sah"))))
   (build-system gnu-build-system)
   (native-inputs
    `(("native-perl" ,perl)


@@ 145,7 145,7 @@ as well as the classic centralized workflow.")
          (sha256

           (base32
            "1whlsiicayalym4hkf01zdiqpw37gdf7c52gw9ki7bv2x3hf3g3y"))))))
            "1z05a7hxxndyby3dbj3gaw91sjwmky5d1yph96jmj0fhx78m1lvd"))))))
   (inputs
    `(("curl" ,curl)
      ("expat" ,expat)

M gnu/packages/wm.scm => gnu/packages/wm.scm +2 -2
@@ 168,14 168,14 @@ commands would.")
(define-public i3-wm
  (package
    (name "i3-wm")
    (version "4.14")
    (version "4.14.1")
    (source (origin
              (method url-fetch)
              (uri (string-append "https://i3wm.org/downloads/i3-"
                                  version ".tar.bz2"))
              (sha256
               (base32
                "1mm5jazwv4dz3k8vl1lfrcw86agpws5k9lmav1ly51qvmzivsfmf"))))
                "1cazmfbbx6n8c81h6x6pdayq3mxs2ml3adz165z8vapkc72kl1nh"))))
    (build-system gnu-build-system)
    (arguments
     `(#:make-flags

M gnu/packages/xorg.scm => gnu/packages/xorg.scm +98 -0
@@ 13,6 13,7 @@
;;; Copyright © 2016, 2017 John Darrington <jmd@gnu.org>
;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 39,10 40,12 @@
  #:use-module (guix build-system python)
  #:use-module (guix utils)
  #:use-module (gnu packages)
  #:use-module (gnu packages anthy)
  #:use-module (gnu packages autotools)
  #:use-module (gnu packages bison)
  #:use-module (gnu packages check)
  #:use-module (gnu packages compression)
  #:use-module (gnu packages emacs)
  #:use-module (gnu packages flex)
  #:use-module (gnu packages fontutils)
  #:use-module (gnu packages freedesktop)


@@ 54,6 57,7 @@
  #:use-module (gnu packages gtk)
  #:use-module (gnu packages image)
  #:use-module (gnu packages libbsd)
  #:use-module (gnu packages libedit)
  #:use-module (gnu packages linux)
  #:use-module (gnu packages llvm)
  #:use-module (gnu packages m4)


@@ 62,6 66,7 @@
  #:use-module (gnu packages perl)
  #:use-module (gnu packages pkg-config)
  #:use-module (gnu packages python)
  #:use-module (gnu packages qt)
  #:use-module (gnu packages spice)
  #:use-module (gnu packages video)
  #:use-module (gnu packages xiph)


@@ 5982,3 5987,96 @@ disconnect from these programs and reconnect from the same or another machine,
without losing any state.  It can also be used to forward full desktops from
X11 servers, Windows, or macOS.")
    (license license:gpl2+)))

(define-public uim
  (package
    (name "uim")
    (version "1.8.6")
    (source
     (origin
       (method url-fetch)
       (uri (string-append "https://github.com/uim/uim/releases/download/uim-"
                           version "/uim-" version ".tar.bz2"))
       (sha256
        (base32
         "0pr3rfqpxha8p6cxzdjsxbbmmr76riklzw36f68phd1zqw1sh7kv"))))
    (build-system gnu-build-system)
    (inputs
     `(("anthy" ,anthy)
       ("libedit" ,libedit)
       ("libxft" ,libxft)
       ("m17n-lib" ,m17n-lib)))
    (native-inputs
     `(("emacs" ,emacs-minimal)
       ("intltool" ,intltool)
       ("pkg-config" ,pkg-config)))
    (arguments
     `(#:modules ((guix build gnu-build-system)
                  (guix build utils)
                  (guix build emacs-utils))
       #:imported-modules (,@%gnu-build-system-modules
                           (guix build emacs-utils))
       #:configure-flags
       (list "--with-anthy-utf8"
             (string-append "--with-lispdir=" %output
                            "/share/emacs/site-lisp/guix.d")
             ;; Set proper runpath
             (string-append "LDFLAGS=-Wl,-rpath=" %output "/lib"))
       #:phases
       (modify-phases %standard-phases
         ;; Set path of uim-el-agent and uim-el-helper-agent executables
         (add-after 'configure 'configure-uim-el
           (lambda* (#:key outputs #:allow-other-keys)
             (substitute* "emacs/uim-var.el"
               (("\"(uim-el-agent|uim-el-helper-agent)\"" _ executable)
                (string-append "\"" (assoc-ref outputs "out")
                               "/bin/" executable "\"")))
             #t))
         ;; Generate emacs autoloads for uim.el
         (add-after 'install 'make-autoloads
           (lambda* (#:key outputs #:allow-other-keys)
             (emacs-generate-autoloads
              ,name (string-append (assoc-ref outputs "out")
                                   "/share/emacs/site-lisp"))
             #t)))))
    (home-page "https://github.com/uim/uim")
    (synopsis "Multilingual input method framework")
    (description "Uim is a multilingual input method library and environment.
It provides a simple, easily extensible and high code-quality input method
development platform, and useful input method environment for users of desktop
and embedded platforms.")
    (license (list license:lgpl2.1+ ; scm/py.scm, pixmaps/*.{svg,png} (see pixmaps/README)
                   license:gpl2+ ; scm/pinyin-big5.scm
                   license:gpl3+ ; scm/elatin-rules.cm
                   license:public-domain ; scm/input-parse.scm, scm/match.scm
                   ;; gtk2/toolbar/eggtrayicon.{ch},
                   ;; qt3/chardict/kseparator.{cpp,h},
                   ;; qt3/pref/kseparator.{cpp,h}
                   license:lgpl2.0+
                   ;; pixmaps/*.{svg,png} (see pixmaps/README),
                   ;; all other files
                   license:bsd-3))))

(define-public uim-gtk
  (package
    (inherit uim)
    (name "uim-gtk")
    (inputs
     `(("gtk" ,gtk+)
       ("gtk" ,gtk+-2)
       ,@(package-inputs uim)))
    (synopsis "Multilingual input method framework (GTK+ support)")))

(define-public uim-qt
  (package
    (inherit uim)
    (name "uim-qt")
    (inputs
     `(("qt" ,qt-4)
       ,@(package-inputs uim)))
    (arguments
     (substitute-keyword-arguments (package-arguments uim)
       ((#:configure-flags configure-flags)
        (append configure-flags (list "--with-qt4-immodule"
                                      "--with-qt4")))))
    (synopsis "Multilingual input method framework (Qt support)")))

M gnu/services/cuirass.scm => gnu/services/cuirass.scm +5 -0
@@ 2,6 2,7 @@
;;; Copyright © 2016 Mathieu Lirzin <mthl@gnu.org>
;;; Copyright © 2016, 2017 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
;;; Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 61,6 62,8 @@
                    (default "/var/run/cuirass/cuirass.db"))
  (port             cuirass-configuration-port ;integer (port)
                    (default 8081))
  (host             cuirass-configuration-host ;string
                    (default "localhost"))
  (specifications   cuirass-configuration-specifications)
                                  ;gexp that evaluates to specification-alist
  (use-substitutes? cuirass-configuration-use-substitutes? ;boolean


@@ 84,6 87,7 @@
         (interval         (cuirass-configuration-interval config))
         (database         (cuirass-configuration-database config))
         (port             (cuirass-configuration-port config))
         (host             (cuirass-configuration-host config))
         (specs            (cuirass-configuration-specifications config))
         (use-substitutes? (cuirass-configuration-use-substitutes? config))
         (one-shot?        (cuirass-configuration-one-shot? config))


@@ 100,6 104,7 @@
                            #$(scheme-file "cuirass-specs.scm" specs)
                            "--database" #$database
                            "--port" #$(number->string port)
                            "--listen" #$host
                            "--interval" #$(number->string interval)
                            #$@(if use-substitutes? '("--use-substitutes") '())
                            #$@(if one-shot? '("--one-shot") '())

M gnu/tests/base.scm => gnu/tests/base.scm +4 -4
@@ 544,11 544,11 @@ in a loop.  See <http://bugs.gnu.org/26931>.")
               (>= gid 100))))

          ;; Last, the job that uses a command; allows us to test whether
          ;; $PATH is sane.  (Note that 'marionette-eval' stringifies objects
          ;; that don't have a read syntax, hence the string.)
          ;; $PATH is sane.
          (test-equal "root's job with command"
            "#<eof>"
            (wait-for-file "/root/witness-touch" marionette))
            ""
            (wait-for-file "/root/witness-touch" marionette
                           #:read '(@ (ice-9 rdelim) read-string)))

          (test-end)
          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))

M gnu/tests/install.scm => gnu/tests/install.scm +5 -1
@@ 127,7 127,11 @@
  "Return a variant of OS where ROOTS are registered as GC roots."
  (operating-system
    (inherit os)
    (services (cons (service gc-root-service-type roots)

    ;; We use this procedure for the installation OS, which already defines GC
    ;; roots.  Add ROOTS to those.
    (services (cons (simple-service 'extra-root
                                    gc-root-service-type roots)
                    (operating-system-user-services os)))))



M guix/build-system/meson.scm => guix/build-system/meson.scm +1 -1
@@ 67,7 67,7 @@
                #:key source inputs native-inputs outputs system target
                (meson (default-meson))
                (ninja (default-ninja))
                (glib-or-gtk #f)
                (glib-or-gtk? #f)
                #:allow-other-keys
                #:rest arguments)
  "Return a bag for NAME."

M guix/gnu-maintenance.scm => guix/gnu-maintenance.scm +3 -69
@@ 61,7 61,6 @@

            %gnu-updater
            %gnu-ftp-updater
            %gnome-updater
            %kde-updater
            %xorg-updater
            %kernel.org-updater))


@@ 512,6 511,9 @@ list available from %GNU-FILE-LIST-URI over HTTP(S)."
        (values name+version #f)
        (values (match:substring match 1) (match:substring match 2)))))

(define gnome-package?
  (url-prefix-predicate "mirror://gnome/"))

(define (pure-gnu-package? package)
  "Return true if PACKAGE is a non-Emacs and non-GNOME GNU package.  This
excludes AucTeX, for instance, whose releases are now uploaded to


@@ 522,70 524,9 @@ releases are on gnu.org."
       (not (gnome-package? package))
       (gnu-package? package)))

(define (url-prefix-predicate prefix)
  "Return a predicate that returns true when passed a package where one of its
source URLs starts with PREFIX."
  (lambda (package)
    (define matching-uri?
      (match-lambda
        ((? string? uri)
         (string-prefix? prefix uri))
        (_
         #f)))

    (match (package-source package)
      ((? origin? origin)
       (match (origin-uri origin)
         ((? matching-uri?) #t)
         (_                 #f)))
      (_ #f))))

(define gnu-hosted?
  (url-prefix-predicate "mirror://gnu/"))

(define gnome-package?
  (url-prefix-predicate "mirror://gnome/"))

(define (latest-gnome-release package)
  "Return the latest release of PACKAGE, the name of a GNOME package."
  (define %not-dot
    (char-set-complement (char-set #\.)))

  (define (even-minor-version? version)
    (match (string-tokenize version %not-dot)
      (((= string->number major) (= string->number minor) . rest)
       (and minor (even? minor)))
      (_
       #t)))                                      ;cross fingers

  (define (even-numbered? file)
    ;; Return true if FILE somehow denotes an even-numbered file name.  The
    ;; trick here is that we want this to match both directories such as
    ;; "3.18.6" and actual file names such as "gtk+-3.18.6.tar.bz2".
    (let-values (((name version) (package-name->name+version file)))
      (even-minor-version? (or version name))))

  (define upstream-name
    ;; Some packages like "NetworkManager" have camel-case names.
    (package-upstream-name package))

  (false-if-ftp-error
   (latest-ftp-release upstream-name
                       #:server "ftp.gnome.org"
                       #:directory (string-append "/pub/gnome/sources/"
                                                  upstream-name)


                       ;; <https://www.gnome.org/gnome-3/source/> explains
                       ;; that odd minor version numbers represent development
                       ;; releases, which we are usually not interested in.
                       #:keep-file? even-numbered?

                       ;; ftp.gnome.org provides no signatures, only
                       ;; checksums.
                       #:file->signature (const #f))))


(define (latest-kde-release package)
  "Return the latest release of PACKAGE, the name of an KDE.org package."
  (let ((uri (string->uri (origin-uri (package-source package)))))


@@ 642,13 583,6 @@ source URLs starts with PREFIX."
                (pure-gnu-package? package))))
   (latest latest-release*)))

(define %gnome-updater
  (upstream-updater
   (name 'gnome)
   (description "Updater for GNOME packages")
   (pred gnome-package?)
   (latest latest-gnome-release)))

(define %kde-updater
  (upstream-updater
    (name 'kde)

M guix/http-client.scm => guix/http-client.scm +3 -1
@@ 321,7 321,9 @@ Raise an '&http-get-error' condition if downloading fails."
      ;; Update the cache and return an input port.
      (guard (c ((http-get-error? c)
                 (if (= 304 (http-get-error-code c)) ;"Not Modified"
                     cache-port
                     (begin
                       (utime file)               ;update FILE's mtime
                       cache-port)
                     (raise c))))
        (let ((port (http-fetch uri #:text? text?
                                #:headers headers)))

A guix/import/gnome.scm => guix/import/gnome.scm +112 -0
@@ 0,0 1,112 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2017 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (guix import gnome)
  #:use-module (guix upstream)
  #:use-module (guix utils)
  #:use-module (guix packages)
  #:use-module (guix http-client)
  #:use-module (json)
  #:use-module (srfi srfi-1)
  #:use-module (srfi srfi-11)
  #:use-module (srfi srfi-34)
  #:use-module (web uri)
  #:use-module (ice-9 match)
  #:export (%gnome-updater))

;;; Commentary:
;;;
;;; This package provides not an actual importer but simply an updater for
;;; GNOME packages.  It grabs package meta-data from 'cache.json' files
;;; available on ftp.gnome.org.
;;;
;;; Code:

(define (jsonish->upstream-source name jsonish)
  "Return an <upstream-source> object for package NAME, using JSONISH as the
source for metadata."
  (match jsonish
    ((version . dictionary)
     (upstream-source
      (package name)
      (version version)
      (urls (filter-map (lambda (extension)
                          (match (hash-ref dictionary extension)
                            (#f
                             #f)
                            ((? string? relative-url)
                             (string-append "mirror://gnome/sources/"
                                            name "/" relative-url))))
                        '("tar.lz" "tar.xz" "tar.bz2" "tar.gz")))))))

(define (latest-gnome-release package)
  "Return the latest release of PACKAGE, a GNOME package, or #f if it could
not be determined."
  (define %not-dot
    (char-set-complement (char-set #\.)))

  (define (even-minor-version? version)
    (match (string-tokenize version %not-dot)
      (((= string->number major) (= string->number minor) . rest)
       (and minor (even? minor)))
      (_
       #t)))                                      ;cross fingers

  (define upstream-name
    ;; Some packages like "NetworkManager" have camel-case names.
    (package-upstream-name package))

  (guard (c ((http-get-error? c)
             (if (= 404 (http-get-error-code c))
                 #f
                 (raise c))))
    (let* ((port (http-fetch/cached
                  (string->uri (string-append
                                "https://ftp.gnome.org/pub/gnome/sources/"
                                upstream-name "/cache.json"))

                  ;; ftp.gnome.org supports 'if-Modified-Since', so the local
                  ;; cache can expire early.
                  #:ttl (* 60 10)))
           (json (json->scm port)))
      (close-port port)
      (match json
        ((4 (? hash-table? releases) _ ...)
         (let* ((releases (hash-ref releases upstream-name))
                (latest   (hash-fold (lambda (key value result)
                                       (cond ((even-minor-version? key)
                                              (match result
                                                (#f
                                                 (cons key value))
                                                ((newest . _)
                                                 (if (version>? key newest)
                                                     (cons key value)
                                                     result))))
                                             (else
                                              result)))
                                     #f
                                     releases)))
           (and latest
                (jsonish->upstream-source upstream-name latest))))))))

(define %gnome-updater
  (upstream-updater
   (name 'gnome)
   (description "Updater for GNOME packages")
   (pred (url-prefix-predicate "mirror://gnome/"))
   (latest latest-gnome-release)))

M guix/upstream.scm => guix/upstream.scm +19 -0
@@ 45,6 45,7 @@
            upstream-source-signature-urls
            upstream-source-archive-types

            url-prefix-predicate
            coalesce-sources

            upstream-updater


@@ 81,6 82,24 @@
  (signature-urls upstream-source-signature-urls  ;#f | list of strings
                  (default #f)))

(define (url-prefix-predicate prefix)
  "Return a predicate that returns true when passed a package where one of its
source URLs starts with PREFIX."
  (lambda (package)
    (define matching-uri?
      (match-lambda
        ((? string? uri)
         (string-prefix? prefix uri))
        (_
         #f)))

    (match (package-source package)
      ((? origin? origin)
       (match (origin-uri origin)
         ((? matching-uri?) #t)
         (_                 #f)))
      (_ #f))))

(define (upstream-source-archive-types release)
  "Return the available types of archives for RELEASE---a list of strings such
as \"gz\" or \"xz\"."