aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarius Bakke <mbakke@fastmail.com>2018-12-12 22:00:52 +0100
committerMarius Bakke <mbakke@fastmail.com>2018-12-12 22:00:52 +0100
commit12878d12acccf83ef3258a53a01f851088f0aa9e (patch)
tree47f875b50bd7714251256475317e96f4e6d73f55
parent17c3e0d85d9c1a6b4c09d09dd9238297b6165a2f (diff)
parent7b046b1bdc0b1cbc50428d4e08136a110f0a12af (diff)
downloadguix-12878d12acccf83ef3258a53a01f851088f0aa9e.tar
guix-12878d12acccf83ef3258a53a01f851088f0aa9e.tar.gz
Merge branch 'master' into staging
-rw-r--r--Makefile.am1
-rw-r--r--build-aux/hydra/gnu-system.scm4
-rw-r--r--doc/guix.texi33
-rw-r--r--gnu/local.mk4
-rw-r--r--gnu/packages/audio.scm10
-rw-r--r--gnu/packages/backup.scm5
-rw-r--r--gnu/packages/bootloaders.scm2
-rw-r--r--gnu/packages/busybox.scm40
-rw-r--r--gnu/packages/check.scm24
-rw-r--r--gnu/packages/easyrpg.scm121
-rw-r--r--gnu/packages/emacs.scm54
-rw-r--r--gnu/packages/fonts.scm16
-rw-r--r--gnu/packages/game-development.scm2
-rw-r--r--gnu/packages/games.scm6
-rw-r--r--gnu/packages/gnuzilla.scm75
-rw-r--r--gnu/packages/ham-radio.scm35
-rw-r--r--gnu/packages/ipfs.scm27
-rw-r--r--gnu/packages/java.scm2
-rw-r--r--gnu/packages/linux.scm12
-rw-r--r--gnu/packages/lisp.scm6
-rw-r--r--gnu/packages/mail.scm4
-rw-r--r--gnu/packages/maths.scm2
-rw-r--r--gnu/packages/messaging.scm55
-rw-r--r--gnu/packages/mtools.scm4
-rw-r--r--gnu/packages/music.scm6
-rw-r--r--gnu/packages/patches/allegro-fix-compilation-mesa-18.2.5-and-later.patch41
-rw-r--r--gnu/packages/patches/borg-respect-storage-quota.patch32
-rw-r--r--gnu/packages/patches/openjdk-10-idlj-reproducibility.patch36
-rw-r--r--gnu/packages/patches/polkit-CVE-2018-19788.patch197
-rw-r--r--gnu/packages/pdf.scm14
-rw-r--r--gnu/packages/polkit.scm1
-rw-r--r--gnu/packages/python.scm179
-rw-r--r--gnu/packages/rust.scm3
-rw-r--r--gnu/packages/security-token.scm34
-rw-r--r--gnu/packages/tls.scm6
-rw-r--r--gnu/packages/tor.scm49
-rw-r--r--gnu/packages/version-control.scm6
-rw-r--r--gnu/packages/video.scm24
-rw-r--r--gnu/services/base.scm10
-rw-r--r--guix/channels.scm122
-rw-r--r--guix/scripts/refresh.scm16
-rw-r--r--tests/channels.scm139
42 files changed, 1249 insertions, 210 deletions
diff --git a/Makefile.am b/Makefile.am
index a7a67e81cf..4a190c4095 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -329,6 +329,7 @@ SCM_TESTS = \
tests/base16.scm \
tests/base32.scm \
tests/base64.scm \
+ tests/channels.scm \
tests/cpan.scm \
tests/cpio.scm \
tests/crate.scm \
diff --git a/build-aux/hydra/gnu-system.scm b/build-aux/hydra/gnu-system.scm
index d6b0132807..05d430df0a 100644
--- a/build-aux/hydra/gnu-system.scm
+++ b/build-aux/hydra/gnu-system.scm
@@ -187,14 +187,14 @@ system.")
(bootloader u-boot-bootloader)
(target #f))))
#:disk-image-size
- (* 1024 MiB))))))
+ (* 1500 MiB))))))
(list (->job 'usb-image
(run-with-store store
(mbegin %store-monad
(set-guile-for-build (default-guile))
(system-disk-image installation-os
#:disk-image-size
- (* 1024 MiB)))))
+ (* 1500 MiB)))))
(->job 'iso9660-image
(run-with-store store
(mbegin %store-monad
diff --git a/doc/guix.texi b/doc/guix.texi
index 1529d888ed..c47ba4e3f6 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -3037,6 +3037,39 @@ the new and upgraded packages that are listed, some like @code{my-gimp} and
@code{my-emacs-with-cool-features} might come from
@code{my-personal-packages}, while others come from the Guix default channel.
+@cindex dependencies, channels
+@cindex meta-data, channels
+@subsection Declaring Channel Dependencies
+
+Channel authors may decide to augment a package collection provided by other
+channels. They can declare their channel to be dependent on other channels in
+a meta-data file @file{.guix-channel}, which is to be placed in the root of
+the channel repository.
+
+The meta-data file should contain a simple S-expression like this:
+
+@lisp
+(channel
+ (version 0)
+ (dependencies
+ (channel
+ (name 'some-collection)
+ (url "https://example.org/first-collection.git"))
+ (channel
+ (name 'some-other-collection)
+ (url "https://example.org/second-collection.git")
+ (branch "testing"))))
+@end lisp
+
+In the above example this channel is declared to depend on two other channels,
+which will both be fetched automatically. The modules provided by the channel
+will be compiled in an environment where the modules of all these declared
+channels are available.
+
+For the sake of reliability and maintainability, you should avoid dependencies
+on channels that you don't control, and you should aim to keep the number of
+dependencies to a minimum.
+
@subsection Replicating Guix
@cindex pinning, channels
diff --git a/gnu/local.mk b/gnu/local.mk
index fe5224c7de..41c94235a7 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -146,6 +146,7 @@ GNU_SYSTEM_MODULES = \
%D%/packages/documentation.scm \
%D%/packages/dunst.scm \
%D%/packages/dvtm.scm \
+ %D%/packages/easyrpg.scm \
%D%/packages/ebook.scm \
%D%/packages/ed.scm \
%D%/packages/education.scm \
@@ -606,7 +607,6 @@ dist_patch_DATA = \
%D%/packages/patches/blast+-fix-makefile.patch \
%D%/packages/patches/blender-newer-ffmpeg.patch \
%D%/packages/patches/boost-fix-icu-build.patch \
- %D%/packages/patches/borg-respect-storage-quota.patch \
%D%/packages/patches/byobu-writable-status.patch \
%D%/packages/patches/calibre-no-updates-dialog.patch \
%D%/packages/patches/calibre-use-packaged-feedparser.patch \
@@ -1007,6 +1007,7 @@ dist_patch_DATA = \
%D%/packages/patches/openbabel-fix-crash-on-nwchem-output.patch \
%D%/packages/patches/opencascade-oce-glibc-2.26.patch \
%D%/packages/patches/openfoam-4.1-cleanup.patch \
+ %D%/packages/patches/openjdk-10-idlj-reproducibility.patch \
%D%/packages/patches/openldap-CVE-2017-9287.patch \
%D%/packages/patches/openocd-nrf52.patch \
%D%/packages/patches/opensmtpd-fix-crash.patch \
@@ -1051,6 +1052,7 @@ dist_patch_DATA = \
%D%/packages/patches/plink-endian-detection.patch \
%D%/packages/patches/plotutils-libpng-jmpbuf.patch \
%D%/packages/patches/podofo-cmake-3.12.patch \
+ %D%/packages/patches/polkit-CVE-2018-19788.patch \
%D%/packages/patches/portaudio-audacity-compat.patch \
%D%/packages/patches/portmidi-modular-build.patch \
%D%/packages/patches/postgresql-disable-resolve_symlinks.patch \
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index b732f7c608..7f72531664 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -2183,7 +2183,7 @@ background file post-processing.")
(define-public supercollider
(package
(name "supercollider")
- (version "3.9.3")
+ (version "3.10.0")
(source (origin
(method url-fetch)
(uri (string-append
@@ -2192,7 +2192,7 @@ background file post-processing.")
"/SuperCollider-" version "-Source-linux.tar.bz2"))
(sha256
(base32
- "1d8ixfl100jvlialxdizp8wqsl1mp5pi2bam25vp97bhjd59cfdr"))))
+ "16j9psa32czx1p1y2vvq0qf2ib0ngrfc604vx35n2b4llyika84v"))))
(build-system cmake-build-system)
(arguments
`(#:configure-flags '("-DSYSTEM_BOOST=on" "-DSYSTEM_YAMLCPP=on"
@@ -2230,13 +2230,13 @@ background file post-processing.")
;; https://github.com/supercollider/supercollider/issues/1736
(add-after 'rm-bundled-libs 'disable-broken-tests
(lambda _
- (substitute* "testsuite/supernova/CMakeLists.txt"
+ (substitute* "testsuite/server/supernova/CMakeLists.txt"
(("server_test.cpp")
"")
(("perf_counter_test.cpp")
""))
- (delete-file "testsuite/supernova/server_test.cpp")
- (delete-file "testsuite/supernova/perf_counter_test.cpp")
+ (delete-file "testsuite/server/supernova/server_test.cpp")
+ (delete-file "testsuite/server/supernova/perf_counter_test.cpp")
(substitute* "testsuite/CMakeLists.txt"
(("add_subdirectory\\(sclang\\)")
""))
diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm
index c927a14673..a9d8286702 100644
--- a/gnu/packages/backup.scm
+++ b/gnu/packages/backup.scm
@@ -491,15 +491,14 @@ detection, and lossless compression.")
(define-public borg
(package
(name "borg")
- (version "1.1.7")
+ (version "1.1.8")
(source
(origin
(method url-fetch)
(uri (pypi-uri "borgbackup" version))
- (patches (search-patches "borg-respect-storage-quota.patch"))
(sha256
(base32
- "1p3zia62vyg9vadkdjzzkzbj4dmgijr7ix5lmhfbxpwy5q9imdgp"))
+ "0qqvcscn1l4y83x4sh3izdpmr8zq38j8chjkpfq4q4d01i470hqb"))
(modules '((guix build utils)))
(snippet
'(begin
diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm
index c155228b4d..2a595fafab 100644
--- a/gnu/packages/bootloaders.scm
+++ b/gnu/packages/bootloaders.scm
@@ -317,6 +317,8 @@ menu to select one of the installed operating systems.")
(home-page "https://www.syslinux.org")
(synopsis "Lightweight Linux bootloader")
(description "Syslinux is a lightweight Linux bootloader.")
+ ;; The Makefile specifically targets i386 and x86_64 using nasm.
+ (supported-systems '("i686-linux" "x86_64-linux"))
(license (list license:gpl2+
license:bsd-3 ; gnu-efi/*
license:bsd-4 ; gnu-efi/inc/* gnu-efi/lib/*
diff --git a/gnu/packages/busybox.scm b/gnu/packages/busybox.scm
index 5f1613bb4c..09812d4a49 100644
--- a/gnu/packages/busybox.scm
+++ b/gnu/packages/busybox.scm
@@ -2,6 +2,7 @@
;;; Copyright © 2014 John Darrington <jmd@gnu.org>
;;; Copyright © 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -25,6 +26,7 @@
#:use-module (guix build-system gnu)
#:use-module (gnu packages)
#:use-module (gnu packages admin)
+ #:use-module (gnu packages algebra)
#:use-module (gnu packages compression)
#:use-module (gnu packages perl))
@@ -102,3 +104,41 @@ any small or embedded system.")
(home-page "https://www.busybox.net")
;; Some files are gplv2+
(license gpl2)))
+
+(define-public toybox
+ (package
+ (name "toybox")
+ (version "0.7.8")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append
+ "https://landley.net/toybox/downloads/toybox-"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "1mlqv5hsvy8ii6m698hq6rc316klwv44jlr034knwg6bk1lf2qj9"))))
+ (build-system gnu-build-system)
+ (arguments
+ '(#:phases
+ (modify-phases %standard-phases
+ (add-before 'configure 'set-environment-variables
+ (lambda _
+ (setenv "CC" (which "gcc"))
+ (setenv "HOSTCC" (which "gcc"))
+ #t))
+ (replace 'configure
+ (lambda _ (invoke "make" "defconfig")))
+ (replace 'install
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out")))
+ (invoke "make"
+ (string-append "PREFIX=" out)
+ "install")))))
+ #:test-target "tests"))
+ (native-inputs `(("bc" ,bc)))
+ (synopsis "Many common UNIX utilities in a single executable")
+ (description "ToyBox combines tiny versions of many common UNIX utilities
+into a single small executable. It provides a fairly complete environment for
+any small or embedded system.")
+ (home-page "https://landley.net/toybox/")
+ (license bsd-2)))
diff --git a/gnu/packages/check.scm b/gnu/packages/check.scm
index 937e4e094c..5bf849d666 100644
--- a/gnu/packages/check.scm
+++ b/gnu/packages/check.scm
@@ -1414,6 +1414,30 @@ normally the case.")
(define-public python2-pytest-subtesthack
(package-with-python2 python-pytest-subtesthack))
+(define-public python-pytest-sugar
+ (package
+ (name "python-pytest-sugar")
+ (version "0.9.2")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "pytest-sugar" version))
+ (sha256
+ (base32
+ "1asq7yc4g8bx2sn7yy974mhc9ywvaihasjab4inkirdwn9s7mn7w"))))
+ (build-system python-build-system)
+ (propagated-inputs
+ `(("python-packaging" ,python-packaging)
+ ("python-pytest" ,python-pytest)
+ ("python-termcolor" ,python-termcolor)))
+ (home-page "https://pivotfinland.com/pytest-sugar/")
+ (synopsis "Plugin for pytest that changes the default look and feel")
+ (description
+ "@code{pytest-sugar} is a plugin for py.test that changes the default
+look and feel of py.test, using a progress bar and showing failures and errors
+instantly.")
+ (license license:bsd-3)))
+
(define-public python-hypothesis
(package
(name "python-hypothesis")
diff --git a/gnu/packages/easyrpg.scm b/gnu/packages/easyrpg.scm
new file mode 100644
index 0000000000..05fd2b11a0
--- /dev/null
+++ b/gnu/packages/easyrpg.scm
@@ -0,0 +1,121 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2018 Sou Bunnbu <iyzsong@member.fsf.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 (gnu packages easyrpg)
+ #:use-module (guix packages)
+ #:use-module ((guix licenses) #:prefix license:)
+ #:use-module (guix download)
+ #:use-module (guix build-system gnu)
+ #:use-module (gnu packages audio)
+ #:use-module (gnu packages compression)
+ #:use-module (gnu packages fontutils)
+ #:use-module (gnu packages gtk)
+ #:use-module (gnu packages icu4c)
+ #:use-module (gnu packages image)
+ #:use-module (gnu packages mp3)
+ #:use-module (gnu packages pkg-config)
+ #:use-module (gnu packages pulseaudio)
+ #:use-module (gnu packages sdl)
+ #:use-module (gnu packages xdisorg)
+ #:use-module (gnu packages xiph)
+ #:use-module (gnu packages xml))
+
+(define-public liblcf
+ (package
+ (name "liblcf")
+ (version "0.5.4")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append
+ "https://easyrpg.org/downloads/player/" version
+ "/liblcf-" version ".tar.gz"))
+ (sha256
+ (base32
+ "1k99bcw5c23801jk3mbz5sj5h18x46w1qxrkknhwhfgqzpvxhwrs"))))
+ (build-system gnu-build-system)
+ (native-inputs
+ `(("pkg-config" ,pkg-config)))
+ (propagated-inputs
+ ;; Required by 'liblcf.pc'.
+ `(("expat" ,expat)
+ ("icu" ,icu4c)))
+ (home-page "https://easyrpg.org/")
+ (synopsis "Library to handle RPG Maker 2000 and 2003 game data")
+ (description
+ "@code{liblcf} is a library to handle RPG Maker 2000 and 2003 game data.
+It can read and write LCF and XML files.")
+ ;; It includes a copy of Boost Preprocessor Cat and Stringize (boost-1.0):
+ ;; src/boost/preprocessor/config.hpp
+ ;; src/boost/preprocessor/cat.hpp
+ ;; src/boost/preprocessor/stringize.hpp
+ ;; and a copy of inih (bsd-3):
+ ;; src/ini.h
+ ;; src/ini.cpp
+ ;; src/inireader.h
+ ;; src/inireader.cpp
+ ;; TODO: Unbundle them.
+ (license license:expat)))
+
+(define-public easyrpg-player
+ (package
+ (name "easyrpg-player")
+ (version "0.5.4")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append
+ "https://easyrpg.org/downloads/player/" version
+ "/easyrpg-player-" version ".tar.gz"))
+ (sha256
+ (base32
+ "0w0idr61slg5828j1q31c1kh1h0ryp8psc006y06jph5pp3qgm48"))))
+ (build-system gnu-build-system)
+ (arguments
+ '(#:configure-flags
+ (list (string-append "--with-bash-completion-dir="
+ %output "/etc/bash_completion.d/"))))
+ (native-inputs
+ `(("pkg-config" ,pkg-config)))
+ (inputs
+ `(("freetype" ,freetype)
+ ("harfbuzz" ,harfbuzz)
+ ("liblcf" ,liblcf)
+ ("libpng" ,libpng)
+ ("libsndfile" ,libsndfile)
+ ("libvorbis" ,libvorbis)
+ ("libxmp" ,libxmp)
+ ("mpg123" ,mpg123)
+ ("opusfile" ,opusfile)
+ ("pixman" ,pixman)
+ ("sdl2-mixer" ,sdl2-mixer)
+ ("sdl2" ,sdl2)
+ ("speexdsp" ,speexdsp)
+ ;; ("wildmidi" ,wildmidi) ; TODO: package it
+ ("zlib" ,zlib)))
+ (home-page "https://easyrpg.org/")
+ (synopsis "Play RPG Maker 2000 and 2003 games")
+ (description
+ "EasyRPG Player is a game interpreter to play RPG Maker 2000, 2003 and
+EasyRPG games. It uses the LCF parser library (liblcf) to read RPG Maker game
+data.")
+ ;; It bundles FMMidi YM2608 FM synthesizer emulator (bsd-3):
+ ;; src/midisynth.h
+ ;; src/midisynth.cpp
+ ;; and PicoJSON JSON parser/serializer (bsd-2):
+ ;; src/picojson.h
+ ;; TODO: Unbundle them.
+ (license license:gpl3+)))
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index 24446bfc9e..be30198ded 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -4807,7 +4807,7 @@ indentation (space indentation only).
(define-public emacs-elpy
(package
(name "emacs-elpy")
- (version "1.26.0")
+ (version "1.27.0")
(source (origin
(method git-fetch)
(uri (git-reference
@@ -4816,7 +4816,7 @@ indentation (space indentation only).
(file-name (string-append name "-" version "-checkout"))
(sha256
(base32
- "0wynzp5xmrgiggmam82n6lfaiqmfl4n3ccpsgnh86r6pbsmssxjk"))))
+ "1b76y0kzk7s9ya8k9bpsgn31i9l0rxs4iz6lg7snhjgh03k0ssgv"))))
(build-system emacs-build-system)
(arguments
`(#:include (cons* "^elpy/[^/]+\\.py$" "^snippets\\/" %default-include)
@@ -5214,26 +5214,28 @@ target will call @code{compile} on it.")
(define-public emacs-cider
(package
(name "emacs-cider")
- (version "0.15.1")
- (source (origin
- (method url-fetch)
- (uri (string-append
- "https://github.com/clojure-emacs/cider/archive/v"
- version ".tar.gz"))
- (file-name (string-append name "-" version ".tar.gz"))
- (sha256
- (base32
- "1j5hlmi14ypszv1f9nvq0jjlz7i742flg0ny3055l7i4x089xx6g"))))
+ (version "0.18.0")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/clojure-emacs/cider.git")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1m9kc88vga3q5d731qnpngnsa0n57pf21k3hll20rw8rggrx4vdn"))))
(build-system emacs-build-system)
(arguments
'(#:exclude ; Don't exclude 'cider-test.el'.
'("^\\.dir-locals\\.el$" "^test/")))
(propagated-inputs
`(("emacs-clojure-mode" ,emacs-clojure-mode)
+ ("emacs-sesman" ,emacs-sesman)
("emacs-spinner" ,emacs-spinner)
("emacs-pkg-info" ,emacs-pkg-info)
("emacs-queue" ,emacs-queue)))
- (home-page "https://cider.readthedocs.org/")
+ (home-page "https://cider.readthedocs.io/")
(synopsis "Clojure development environment for Emacs")
(description
"CIDER (Clojure Interactive Development Environment that Rocks) aims to
@@ -12737,3 +12739,29 @@ Emacs.")
rooms. It also provides an API which allows Emacs to seamlessly create
RPC channels with users and other software.")
(license license:gpl3+))))
+
+(define-public emacs-sesman
+ (package
+ (name "emacs-sesman")
+ (version "0.3.3")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/vspinu/sesman.git")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0r32f8ma9ddczxrrdz0nadp14j3zmk10q1ch02gb82synkx3xdra"))))
+ (build-system emacs-build-system)
+ (arguments
+ `(#:tests? #t
+ #:test-command '("make" "test")))
+ (home-page "https://github.com/vspinu/sesman")
+ (synopsis "Session manager for Emacs based IDEs")
+ (description "Sesman provides facilities for session management and
+interactive session association with the current contexts (project, directory,
+buffers). While sesman can be used to manage arbitrary sessions, it primary
+targets the Emacs based IDEs (CIDER, ESS, Geiser, Robe, SLIME etc.)")
+ (license license:gpl3+)))
diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm
index f9f8428202..b0cb78c5cb 100644
--- a/gnu/packages/fonts.scm
+++ b/gnu/packages/fonts.scm
@@ -622,7 +622,7 @@ languages, plus Greek and Cyrillic.")
(define-public font-gnu-unifont
(package
(name "font-gnu-unifont")
- (version "11.0.02")
+ (version "11.0.03")
(source (origin
(method url-fetch)
(uri (string-append
@@ -630,16 +630,14 @@ languages, plus Greek and Cyrillic.")
version ".tar.gz"))
(sha256
(base32
- "1di8i44c163b9l5f08jcrjfijnqz0j7p7hpfvf8dcms6cm6s4wvy"))))
+ "171zhm52c4rzpn19qcq4n9nyfbcjl38v50zslhvgpjdcmc5jvhav"))))
(build-system gnu-build-system)
- (outputs '("out" ; TrueType version
- "pcf" ; PCF (bitmap) version
- "psf" ; PSF (console) version
- "bin" ; Utilities to manipulate '.hex' format
- ))
+ (outputs '("out" ; TrueType version
+ "pcf" ; PCF (bitmap) version
+ "psf" ; PSF (console) version
+ "bin")) ; Utilities to manipulate '.hex' format
(arguments
- '(#:parallel-build? #f ; parallel build fails
- #:tests? #f ; no check target
+ '(#:tests? #f ; no check target
#:phases
(modify-phases %standard-phases
(replace
diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm
index 34a015bdf7..8a29297805 100644
--- a/gnu/packages/game-development.scm
+++ b/gnu/packages/game-development.scm
@@ -652,6 +652,8 @@ etc.")
(uri (string-append "https://github.com/liballeg/allegro5/releases"
"/download/" version "/allegro-"
version ".tar.gz"))
+ (patches (search-patches
+ "allegro-fix-compilation-mesa-18.2.5-and-later.patch"))
(sha256
(base32
"1w9a5yqi5q03b2qvmx5ff90paz0xbr9cy7i7f0xiqa65ava66q9l"))))
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 7f84e447bb..04521d399a 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -2306,7 +2306,7 @@ world}, @uref{http://evolonline.org, Evol Online} and
(define openttd-engine
(package
(name "openttd-engine")
- (version "1.7.1")
+ (version "1.8.0")
(source
(origin (method url-fetch)
(uri (string-append "http://binaries.openttd.org/releases/"
@@ -2323,7 +2323,7 @@ world}, @uref{http://evolonline.org, Evol Online} and
"02d1xmb75yv4x6rfnvxk3vvq4l3lvvwr2pfsdzn7lzalic51ziqh")))))
(sha256
(base32
- "0dhv5bbbg1dmmq7fi3xss0a9jq2rqgb5sf9fsqzlsjcdm590j6b1"))
+ "0zq8xdg0k92p3s4j9x76591zaqz7k9ra69q008m209vdfffjvly2"))
(modules '((guix build utils)))
(snippet
;; The DOS port contains proprietary software.
@@ -2353,7 +2353,7 @@ world}, @uref{http://evolonline.org, Evol Online} and
configure-flags))))))))
(native-inputs `(("pkg-config" ,pkg-config)))
(inputs
- `(("allegro" ,allegro-4)
+ `(("allegro" ,allegro)
("fontconfig" ,fontconfig)
("freetype" ,freetype)
("icu4c" ,icu4c)
diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm
index 93e470b70d..5582077162 100644
--- a/gnu/packages/gnuzilla.scm
+++ b/gnu/packages/gnuzilla.scm
@@ -62,6 +62,7 @@
#:use-module (gnu packages gl)
#:use-module (gnu packages assembly)
#:use-module (gnu packages rust)
+ #:use-module (gnu packages llvm)
#:use-module (gnu packages icu4c)
#:use-module (gnu packages video)
#:use-module (gnu packages xiph)
@@ -506,16 +507,38 @@ security standards.")
(search-patch "icecat-use-system-media-libs.patch")
(mozilla-patch "icecat-bug-1464061.patch" "d28761dbff18" "1f58rzwx4s1af66fdwn9lgkcd1ksmq8kn8imvf78p90jqi24h7b4")
(mozilla-patch "icecat-bug-1479853.patch" "4faeb696dd06" "12891xx9c15s6kby6d3zk64v5nqgaq7sw597zv1fkd3a6x69hlva")
- (mozilla-patch "icecat-bug-1488295.patch" "12ba39f69876" "1piyq44f0xa0a9z2748aqwpaziaxwp61d86gyhalbyag8lcxfb3p")
- (mozilla-patch "icecat-bug-1500011.patch" "a0adabeedf26" "0f5wazha3zxzhy2j8f93hx62l9p02b1p40vi07qah3ar67h4ccj9")
- (mozilla-patch "icecat-bug-1503082.patch" "19604eb26230" "1wqxgph4z14ijhk2j2m4av5p6gx72d02lzz83q6yy0k065kw8psb")
- (mozilla-patch "icecat-bug-1499861.patch" "98737ab09270" "0fyl6wv0jxcxpkfpsff46y93k49n8lrw0k7c1p45g8da015dx27a")
- (mozilla-patch "icecat-bug-1504452.patch" "1cf7d80355d5" "19jp4x32vyxam54d1r9fm7jwf6krhhf3xazfqmxb9aw4iwdil7dl")
- (mozilla-patch "icecat-bug-1494752.patch" "c264774b8913" "1hxyi131x8jwawrq90cgkph833iv9ixrdrgzl1r978gbzwq10xz2")
+ (mozilla-patch "icecat-CVE-2018-17466.patch" "12ba39f69876" "1piyq44f0xa0a9z2748aqwpaziaxwp61d86gyhalbyag8lcxfb3p")
+ (mozilla-patch "icecat-CVE-2018-18498.patch" "a0adabeedf26" "0f5wazha3zxzhy2j8f93hx62l9p02b1p40vi07qah3ar67h4ccj9")
+ (mozilla-patch "icecat-CVE-2018-12405-pt01.patch" "19604eb26230" "1wqxgph4z14ijhk2j2m4av5p6gx72d02lzz83q6yy0k065kw8psb")
+ (mozilla-patch "icecat-CVE-2018-18492.patch" "98737ab09270" "0fyl6wv0jxcxpkfpsff46y93k49n8lrw0k7c1p45g8da015dx27a")
+ (mozilla-patch "icecat-CVE-2018-18493.patch" "1cf7d80355d5" "19jp4x32vyxam54d1r9fm7jwf6krhhf3xazfqmxb9aw4iwdil7dl")
+ (mozilla-patch "icecat-CVE-2018-12405-pt02.patch" "c264774b8913" "1hxyi131x8jwawrq90cgkph833iv9ixrdrgzl1r978gbzwq10xz2")
(mozilla-patch "icecat-bug-1477773.patch" "ec13fda7c9b0" "0zj7aylgw55g0y7plaafn5gq8jwcsdr1bpdxacs0hq914nm8zy9z")
- (mozilla-patch "icecat-bug-1500759.patch" "5e1a9644aeef" "1qimrpgyrd8zkiri7w57j0aymk20y9b34am5w7rvr6qj1lhrbfla")
+ (mozilla-patch "icecat-CVE-2018-12405-pt03.patch" "5e1a9644aeef" "1qimrpgyrd8zkiri7w57j0aymk20y9b34am5w7rvr6qj1lhrbfla")
(mozilla-patch "icecat-bug-1485655.patch" "9055726e2d89" "1pppxr94zqh6zmi2mn1ih21qap09vk5ivbhnwxqr8iszvygjg44g")
- (mozilla-patch "icecat-bug-1410214.patch" "9e641345e2ef" "0542xss2jdb8drh4g50cfy32l300x69dyywgx3dqs03vgr3qplxy")))
+ (mozilla-patch "icecat-bug-1410214.patch" "9e641345e2ef" "0542xss2jdb8drh4g50cfy32l300x69dyywgx3dqs03vgr3qplxy")
+
+ (mozilla-patch "icecat-CVE-2018-12405-pt04.patch" "6398541ec302" "1c2yi7mkg3d5afxsgj9fp3zq8yhkmphrll5d60d5xsdv88kqqiyf")
+ (mozilla-patch "icecat-bug-1496736.patch" "3bed863ee656" "038k7jk3yp16410crwfdvhyb2vis49c6bplrfr83v51885cqldar")
+ (mozilla-patch "icecat-bug-1498765.patch" "a08c8493ba19" "0bwg4vg03j962lb9q8ihpiy4rmygykf1q9ij8x7h34q7hg43yjya")
+ (mozilla-patch "icecat-CVE-2018-12405-pt05.patch" "ee204e26690e" "1scs45xhlr1mwv6x2q6n22363f42by8cjmifqwzlikggs21f5mcq")
+ (mozilla-patch "icecat-bug-1507035.patch" "cec8b58ab3fe" "1f131ibpkrhsa44l822hnm5qgvapbs3i9pj25iimdwvr933winz8")
+ (mozilla-patch "icecat-bug-1501680.patch" "282c6bb81562" "1zgw7l5zmni8468y3f6cip1nlw63cfdd9vv9b00cbrgy96d1q2cp")
+ (mozilla-patch "icecat-bug-1500310.patch" "b3a439a26186" "0mrjxcmrlv04fyl36dwxk97dw08g2hlikvw2hfa1l0y8zsc4bgw8")
+ (mozilla-patch "icecat-bug-1500366.patch" "abd59256c4e3" "1jgwh2v4kwb6kf2h7mwf128w1k1jj119bfhlgqpmn9ami35wpzf3")
+ (mozilla-patch "icecat-bug-1493080.patch" "a7cabf306d05" "1n7wv67rcaz8wj31jc77ssjdj3kb61gdg7pigj828c5z2cgns1k5")
+ (mozilla-patch "icecat-CVE-2018-12405-pt06.patch" "8bbf80948b50" "1nvc69zgz9nvbw1pwxkil1fx4cxxpr6bsjrpp6l2kv7jhgax1bqk")
+ (mozilla-patch "icecat-bug-1507564.patch" "60619cc47b10" "09fanqr08kqgraw4xp7y2az4jc7ia8nn200rqjfj20vmkyjz97j3")
+ (mozilla-patch "icecat-bug-1507730.patch" "dd0f01818b9c" "14ziq1bm72n58xrvsgzpjj5z6ifpvi70r5jfhbkbj69mf4y4cx2z")
+ (mozilla-patch "icecat-CVE-2018-12405-pt07.patch" "a73a46ddc848" "1bvvyav3xyn6rgn6haicinxn0dasl9dyc1i37fyb7wr5wcpahybs")
+
+ (mozilla-patch "icecat-CVE-2018-18494.patch" "a72ec8e21577" "095zghmwdcbaid5426p9vpl757d8sfbsvgn201bjm7nhm03m4z7i")
+ (mozilla-patch "icecat-CVE-2018-12405-pt08.patch" "b6d0fc61fd0b" "0059avawxi4s4747plybjsjq8j2h4z7amw05p28xyg95a2njwnaa")
+ (mozilla-patch "icecat-bug-1499028.patch" "a62ede2dd3bc" "0ikmnibni8bdvpr9p42wskyyic08vzqdz5qr028bqzyg5119gily")
+ (mozilla-patch "icecat-bug-1426574.patch" "0db86656655b" "0kmccb4ccdzbzncwklx7w1bg7r61zwl2wnfp67vl27hm9xykbck7")
+ (mozilla-patch "icecat-CVE-2018-12405-pt09.patch" "20e31905de62" "0b5a441645wy3q4asaygvdq0inrxmxrh33cpgdp6ngflq9p2i6h0")
+ (mozilla-patch "icecat-CVE-2018-12405-pt10.patch" "c2832f98fe51" "0b4jfjfdyrihwjdfavd54hn9kdg2f017lmfr7mj2llp71flxwwj7")
+ (mozilla-patch "icecat-bug-1511495.patch" "d428d2b8f585" "1f9xs0bjhbphvkv60cnvz34sr2rv38jzvi47wh3nablg41yjpdrk")))
(modules '((guix build utils)))
(snippet
'(begin
@@ -620,6 +643,8 @@ security standards.")
;; Icecat 60 checkes for rust>=1.24
`(("rust" ,rust-1.24)
("cargo" ,rust-1.24 "cargo")
+ ("llvm" ,llvm-3.9.1)
+ ("clang" ,clang-3.9.1)
("perl" ,perl)
("python" ,python-2) ; Python 3 not supported
("python2-pysqlite" ,python2-pysqlite)
@@ -639,7 +664,7 @@ security standards.")
#:imported-modules ,%cargo-build-system-modules ;for `generate-checksums'
- #:configure-flags '("--enable-default-toolkit=cairo-gtk3"
+ #:configure-flags `("--enable-default-toolkit=cairo-gtk3"
"--with-distribution-id=org.gnu"
@@ -653,14 +678,25 @@ security standards.")
"--disable-eme"
"--disable-gconf"
- ;; Stylo requires LLVM/clang. For now, disable it.
- "--disable-stylo"
-
;; Building with debugging symbols takes ~5GiB, so
;; disable it.
"--disable-debug"
"--disable-debug-symbols"
+ ;; Clang is needed to build Stylo, Mozilla's new
+ ;; CSS engine. We must specify the clang paths
+ ;; manually, because otherwise the Mozilla build
+ ;; system looks in the directories returned by
+ ;; llvm-config --bindir and llvm-config --libdir,
+ ;; which return paths in the llvm package where
+ ;; clang is not found.
+ ,(string-append "--with-clang-path="
+ (assoc-ref %build-inputs "clang")
+ "/bin/clang")
+ ,(string-append "--with-libclang-path="
+ (assoc-ref %build-inputs "clang")
+ "/lib")
+
;; Hack to work around missing
;; "unofficial" branding in icecat.
"--enable-official-branding"
@@ -754,6 +790,20 @@ security standards.")
(generate-checksums dir null-file)))
(find-files "third_party/rust" ".cargo-checksum.json")))
#t))
+ (add-before 'configure 'augment-CPLUS_INCLUDE_PATH
+ (lambda* (#:key build inputs #:allow-other-keys)
+ ;; Here, we add additional entries to CPLUS_INCLUDE_PATH, to work
+ ;; around a problem that otherwise occurs when attempting to
+ ;; build Stylo, which requires Rust and Clang. Without these
+ ;; additional entries, errors occur during the build indicating
+ ;; that the <cstddef> and "c++config.h" headers cannot be found.
+ ;; Note that the 'build' keyword argument contains the GNU
+ ;; triplet, e.g. "x86_64-unknown-linux-gnu".
+ (let ((gcc (assoc-ref inputs "gcc")))
+ (setenv "CPLUS_INCLUDE_PATH"
+ (string-append gcc "/include/c++" ":"
+ gcc "/include/c++/" build ":"
+ (getenv "CPLUS_INCLUDE_PATH"))))))
(replace
'configure
;; configure does not work followed by both "SHELL=..." and
@@ -770,6 +820,7 @@ security standards.")
(setenv "SHELL" bash)
(setenv "CONFIG_SHELL" bash)
(setenv "AUTOCONF" (which "autoconf")) ; must be autoconf-2.13
+ (setenv "CC" "gcc") ; apparently needed when Stylo is enabled
(mkdir "../build")
(chdir "../build")
(format #t "build directory: ~s~%" (getcwd))
diff --git a/gnu/packages/ham-radio.scm b/gnu/packages/ham-radio.scm
index 0f96553c65..b73671c8bc 100644
--- a/gnu/packages/ham-radio.scm
+++ b/gnu/packages/ham-radio.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2017, 2018 Arun Isaac <arunisaac@systemreboot.net>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -20,9 +20,13 @@
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix packages)
#:use-module (guix download)
+ #:use-module (gnu packages gtk)
#:use-module (gnu packages libusb)
#:use-module (gnu packages pkg-config)
- #:use-module (guix build-system cmake))
+ #:use-module (gnu packages python)
+ #:use-module (gnu packages xml)
+ #:use-module (guix build-system cmake)
+ #:use-module (guix build-system python))
(define-public rtl-sdr
(package
@@ -50,3 +54,30 @@
cheap software defined radio, since the chip allows transferring the raw I/Q
samples to the host. @code{rtl-sdr} provides drivers for this purpose.")
(license license:gpl2+)))
+
+(define-public chirp
+ (package
+ (name "chirp")
+ (version "20181205")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "https://trac.chirp.danplanet.com/chirp_daily/daily-"
+ version "/chirp-daily-" version ".tar.gz"))
+ (sha256
+ (base32
+ "1cp280b95j39xaxs50zn55jigg7pyfpm9n098hmsyxrplqn8z43c"))))
+ (build-system python-build-system)
+ (inputs
+ `(("python2-libxml2" ,python2-libxml2)
+ ("python2-pygtk" ,python2-pygtk)
+ ("python2-pyserial" ,python2-pyserial)))
+ (arguments
+ `(#:python ,python-2))
+ (home-page "https://chirp.danplanet.com")
+ (synopsis "Cross-radio programming tool")
+ (description "Chirp is a cross-radio programming tool. It supports a
+growing list of radios across several manufacturers and allows transferring of
+memory contents between them.")
+ (license (list license:gpl3+
+ license:lgpl3+)))) ; chirp/elib_intl.py
diff --git a/gnu/packages/ipfs.scm b/gnu/packages/ipfs.scm
index f40c1180ae..82ef0ea028 100644
--- a/gnu/packages/ipfs.scm
+++ b/gnu/packages/ipfs.scm
@@ -20,6 +20,7 @@
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix packages)
#:use-module (guix git-download)
+ #:use-module (guix download)
#:use-module (guix build-system go)
#:use-module (gnu packages golang))
@@ -210,3 +211,29 @@ powerful and simple.")
(description "A subtool for the @command{gx} package manager for packages
written in Go.")
(license license:expat)))
+
+(define-public go-ipfs
+ (package
+ (name "go-ipfs")
+ (version "0.4.18")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append
+ "https://dist.ipfs.io/go-ipfs/v" version
+ "/go-ipfs-source.tar.gz"))
+ (sha256
+ (base32
+ "19hfgbyn5sr1bw0cwm3gsjz0w3b3vh3mmkax1906raah30lavj1x"))))
+ (build-system go-build-system)
+ (arguments
+ '(#:unpack-path "github.com/ipfs/go-ipfs"
+ #:import-path "github.com/ipfs/go-ipfs/cmd/ipfs"))
+ (home-page "https://ipfs.io")
+ (synopsis "Go implementation of IPFS, a peer-to-peer hypermedia protocol")
+ (description "IPFS is a global, versioned, peer-to-peer filesystem. It
+combines good ideas from Git, BitTorrent, Kademlia, SFS, and the Web. It is
+like a single bittorrent swarm, exchanging git objects. IPFS provides an
+interface as simple as the HTTP web, but with permanence built in. You can
+also mount the world at @code{/ipfs}.")
+ (license license:expat)))
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index a09bcfabe5..951c1f4fd3 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -1820,6 +1820,8 @@ new Date();"))
(sha256
(base32
"0zywq2203b4hx4jms9vbwvjcj1d3k2v3qpx4s33729fkpmid97r4"))
+ (patches (search-patches
+ "openjdk-10-idlj-reproducibility.patch"))
(modules '((guix build utils)))
(snippet
`(begin
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index 24653dfbe2..18a95eda28 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -400,8 +400,8 @@ It has been modified to remove all non-free binary blobs.")
;; supports qemu "virt" machine and possibly a large number of ARM boards.
;; See : https://wiki.debian.org/DebianKernel/ARMMP.
-(define %linux-libre-version "4.19.7")
-(define %linux-libre-hash "1fj038hz6b7g9gdiw9kggydryf8dvrdsfn81snns9bn5b01yp67n")
+(define %linux-libre-version "4.19.8")
+(define %linux-libre-hash "1rmgf3sbcyb47s3sagac7zrrpznq0vlcbzjzlzir95biy7lbswb3")
(define %linux-libre-4.19-patches
(list %boot-logo-patch
@@ -423,8 +423,8 @@ It has been modified to remove all non-free binary blobs.")
#:patches %linux-libre-4.19-patches
#:configuration-file kernel-config))
-(define %linux-libre-4.14-version "4.14.86")
-(define %linux-libre-4.14-hash "1w98drq4ns2awwrbbkd6vy9fh219w8bfjfni5zndfycs5yh5hg65")
+(define %linux-libre-4.14-version "4.14.87")
+(define %linux-libre-4.14-hash "1013h3qbsq76vlhrbl3gci25jbwydzm7k0bg08fbq42qrhjq92ak")
(define-public linux-libre-4.14
(make-linux-libre %linux-libre-4.14-version
@@ -433,8 +433,8 @@ It has been modified to remove all non-free binary blobs.")
#:configuration-file kernel-config))
(define-public linux-libre-4.9
- (make-linux-libre "4.9.143"
- "0vg6hs7vc09riyki8lyy73p3ghl6k9q4xfv7dals4s9q61i6b6d6"
+ (make-linux-libre "4.9.144"
+ "1jckikf1j294gr3sf43bfy3h34q3yqbqgqbj9l0px427h3n2vgkk"
%intel-compatible-systems
#:configuration-file kernel-config))
diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm
index 120d0d5e17..d1c0a2ef37 100644
--- a/gnu/packages/lisp.scm
+++ b/gnu/packages/lisp.scm
@@ -84,8 +84,8 @@
,lisp))))
(define-public gcl
- (let ((commit "5956140b1083e2302a59d7ce2054b0b7c2cbb417")
- (revision "1")) ;Guix package revision
+ (let ((commit "d3335e2b3deb63f930eb0328e9b05377744c9512")
+ (revision "2")) ;Guix package revision
(package
(name "gcl")
(version (string-append "2.6.12-" revision "."
@@ -98,7 +98,7 @@
(commit commit)))
(file-name (string-append "gcl-" version "-checkout"))
(sha256
- (base32 "0mwclf2879mh3d9xqkqhghf58lwy7srsnsq9x0f1cc6j302sy4hb"))))
+ (base32 "05v86lhvsby05nzvcd3c4k0wljvgdgd0i6arzd2fx1yd67dl6fgj"))))
(build-system gnu-build-system)
(arguments
`(#:parallel-build? #f ; The build system seems not to be thread safe.
diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index 261d1f013d..794ae7909d 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -1068,7 +1068,7 @@ which can add many functionalities to the base client.")
(define-public msmtp
(package
(name "msmtp")
- (version "1.8.0")
+ (version "1.8.1")
(source
(origin
(method url-fetch)
@@ -1076,7 +1076,7 @@ which can add many functionalities to the base client.")
"/msmtp-" version ".tar.xz"))
(sha256
(base32
- "1k9wwlapkxk9ql3xq05y6vwn6ziqk9b1v8lyhj1866qd02zhqwxx"))))
+ "1nm4vizrnrrnknc4mc8nr7grz9q76m1vraa0hsl5rfm34gnsg8ph"))))
(build-system gnu-build-system)
(inputs
`(("libsecret" ,libsecret)
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 7c0273bad6..8e98f929f7 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -1775,7 +1775,7 @@ scientific applications modeled by partial differential equations.")
("mumps" ,mumps-openmpi)
("openmpi" ,openmpi)
("scalapack" ,scalapack)
- ("scotch" ,pt-scotch)
+ ("scotch" ,pt-scotch32)
,@(package-inputs petsc)))
(arguments
(substitute-keyword-arguments (package-arguments petsc)
diff --git a/gnu/packages/messaging.scm b/gnu/packages/messaging.scm
index e34f725a40..1500be43b0 100644
--- a/gnu/packages/messaging.scm
+++ b/gnu/packages/messaging.scm
@@ -93,6 +93,7 @@
#:use-module (guix build-system meson)
#:use-module (guix build-system perl)
#:use-module (guix build-system python)
+ #:use-module (guix build-system trivial)
#:use-module (guix download)
#:use-module (guix git-download)
#:use-module ((guix licenses) #:prefix license:)
@@ -588,6 +589,12 @@ was initially a fork of xmpppy, but uses non-blocking sockets.")
`(#:test-target "test_nogui"
#:phases
(modify-phases %standard-phases
+ (add-after 'unpack 'add-plugin-dirs
+ (lambda _
+ (substitute* "gajim/common/configpaths.py"
+ (("_paths\\['PLUGINS_USER'\\]")
+ "_paths['PLUGINS_USER'],os.getenv('GAJIM_PLUGIN_PATH')"))
+ #t))
(add-after 'install 'wrap-gi-typelib-path
(lambda* (#:key outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out")))
@@ -625,6 +632,18 @@ was initially a fork of xmpppy, but uses non-blocking sockets.")
(,(string-append (assoc-ref inputs "gtk+")
"/share/glib-2.0/schemas"))))
#t)))))
+ (native-search-paths
+ (list (search-path-specification
+ (variable "GAJIM_PLUGIN_PATH")
+ (separator #f) ;single entry
+ (files '("share/gajim/plugins")))
+ ;; Gajim needs to use the propagated inputs of its plugins.
+ (search-path-specification
+ (variable "PYTHONPATH")
+ (files (list (string-append
+ "lib/python"
+ (version-major+minor (package-version python))
+ "/site-packages"))))))
(native-inputs
`(("intltool" ,intltool)
("python-docutils" ,python-docutils)
@@ -636,7 +655,6 @@ was initially a fork of xmpppy, but uses non-blocking sockets.")
("gtkspell3" ,gtkspell3)
("hicolor-icon-theme" ,hicolor-icon-theme)
("libsecret" ,libsecret)
- ("python-axolotl" ,python-axolotl)
("python-cssutils" ,python-cssutils)
("python-dbus" ,python-dbus)
("python-gnupg" ,python-gnupg)
@@ -657,6 +675,41 @@ transformation; audio and video conferences; file transfer; TLS, GPG and
end-to-end encryption support; XML console.")
(license license:gpl3)))
+(define-public gajim-omemo
+ (package
+ (name "gajim-omemo")
+ (version "2.6.23")
+ (source (origin
+ (method url-fetch/zipbomb)
+ (uri (string-append
+ "https://ftp.gajim.org/plugins_releases/omemo_"
+ version ".zip"))
+ (sha256
+ (base32
+ "134zbscbcnhx4smad0ryvx3ngkqlsspafqf0kk8y2d3vcd9bf3pa"))))
+ (build-system trivial-build-system)
+ (arguments
+ `(#:modules ((guix build utils))
+ #:builder
+ (begin
+ (use-modules (guix build utils))
+ (let* ((out (assoc-ref %outputs "out"))
+ (share (in-vicinity out "share/gajim/plugins"))
+ (source (assoc-ref %build-inputs "source")))
+ (mkdir-p share)
+ (copy-recursively source share)
+ #t))))
+ (propagated-inputs
+ `(("python-axolotl" ,python-axolotl)))
+ (home-page
+ "https://dev.gajim.org/gajim/gajim-plugins/wikis/OmemoGajimPlugin")
+ (synopsis "Gajim OMEMO plugin")
+ (description
+ "This package provides the Gajim OMEMO plugin. OMEMO is an XMPP
+Extension Protocol (XEP) for secure multi-client end-to-end encryption based
+on Axolotl and PEP.")
+ (license license:gpl3+)))
+
(define-public dino
;; The only release tarball is for version 0.0, but it is very old and fails
;; to build.
diff --git a/gnu/packages/mtools.scm b/gnu/packages/mtools.scm
index 32eb1dba47..5be3da0137 100644
--- a/gnu/packages/mtools.scm
+++ b/gnu/packages/mtools.scm
@@ -28,7 +28,7 @@
(define-public mtools
(package
(name "mtools")
- (version "4.0.21")
+ (version "4.0.23")
(source
(origin
(method url-fetch)
@@ -36,7 +36,7 @@
version ".tar.bz2"))
(sha256
(base32
- "1kybydx74qgbwpnjvjn49msf8zipchl43d4cq8zzwcyvfkdzw7h2"))))
+ "1qwfxzr964fasxlzhllahk8mzh7c82s808wvly95dsqsflkdp27i"))))
(build-system gnu-build-system)
(home-page "https://www.gnu.org/software/mtools/")
(synopsis "Access MS-DOS disks without mounting")
diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index 37fcf019bc..e16e64af73 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -3942,9 +3942,9 @@ OSC connections.")
(lambda* (#:key inputs #:allow-other-keys)
(with-directory-excursion "faust"
(delete-file "main.cpp")
- (zero? (system* "faust" "-i"
- "-a" "lv2synth.cpp"
- "-o" "main.cpp" "main.dsp"))))))))
+ (invoke "faust" "-i"
+ "-a" "lv2synth.cpp"
+ "-o" "main.cpp" "main.dsp")))))))
(inputs
`(("boost" ,boost)
("lv2" ,lv2)
diff --git a/gnu/packages/patches/allegro-fix-compilation-mesa-18.2.5-and-later.patch b/gnu/packages/patches/allegro-fix-compilation-mesa-18.2.5-and-later.patch
new file mode 100644
index 0000000000..fa273a5dfa
--- /dev/null
+++ b/gnu/packages/patches/allegro-fix-compilation-mesa-18.2.5-and-later.patch
@@ -0,0 +1,41 @@
+Fixes compilation with Mesa >= 18.2.5.
+
+Taken from upstream:
+
+https://github.com/liballeg/allegro5/commit/a40d30e21802ecf5c9382cf34af9b01bd3781e47
+
+diff --git a/include/allegro5/allegro_opengl.h b/include/allegro5/allegro_opengl.h
+index 0f86a6768..652dd024e 100644
+--- a/include/allegro5/allegro_opengl.h
++++ b/include/allegro5/allegro_opengl.h
+@@ -103,10 +103,14 @@
+
+ /* HACK: Prevent both Mesa and SGI's broken headers from screwing us */
+ #define __glext_h_
++#define __gl_glext_h_
+ #define __glxext_h_
++#define __glx_glxext_h_
+ #include <GL/gl.h>
+ #undef __glext_h_
++#undef __gl_glext_h_
+ #undef __glxext_h_
++#undef __glx_glxext_h_
+
+ #endif /* ALLEGRO_MACOSX */
+
+diff --git a/include/allegro5/opengl/GLext/glx_ext_defs.h b/include/allegro5/opengl/GLext/glx_ext_defs.h
+index 49c502091..fba8aea5d 100644
+--- a/include/allegro5/opengl/GLext/glx_ext_defs.h
++++ b/include/allegro5/opengl/GLext/glx_ext_defs.h
+@@ -1,7 +1,9 @@
+ /* HACK: Prevent both Mesa and SGI's broken headers from screwing us */
+ #define __glxext_h_
++#define __glx_glxext_h_
+ #include <GL/glx.h>
+ #undef __glxext_h_
++#undef __glx_glxext_h_
+
+ #ifndef GLX_VERSION_1_3
+ #define _ALLEGRO_GLX_VERSION_1_3
+--
+2.20.0
diff --git a/gnu/packages/patches/borg-respect-storage-quota.patch b/gnu/packages/patches/borg-respect-storage-quota.patch
deleted file mode 100644
index d23d1ffc01..0000000000
--- a/gnu/packages/patches/borg-respect-storage-quota.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-Make sure the client respects the storage quota set by the server:
-
-https://github.com/borgbackup/borg/issues/4093
-
-Patch copied from upstream source repository:
-
-https://github.com/borgbackup/borg/commit/975cc33206e0e3644626fb7204c34d2157715b61
-
-From 975cc33206e0e3644626fb7204c34d2157715b61 Mon Sep 17 00:00:00 2001
-From: Manu <manu@snapdragon.cc>
-Date: Wed, 3 Oct 2018 23:47:36 +0800
-Subject: [PATCH] Add storage_quota for forced_result if set by serve command.
-
----
- src/borg/archiver.py | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/borg/archiver.py b/src/borg/archiver.py
-index 916725e7..279194c1 100644
---- a/src/borg/archiver.py
-+++ b/src/borg/archiver.py
-@@ -4276,6 +4276,7 @@ def get_args(self, argv, cmd):
- result.restrict_to_paths = forced_result.restrict_to_paths
- result.restrict_to_repositories = forced_result.restrict_to_repositories
- result.append_only = forced_result.append_only
-+ result.storage_quota = forced_result.storage_quota
- return result
-
- def parse_args(self, args=None):
---
-2.19.1
-
diff --git a/gnu/packages/patches/openjdk-10-idlj-reproducibility.patch b/gnu/packages/patches/openjdk-10-idlj-reproducibility.patch
new file mode 100644
index 0000000000..b29a06f272
--- /dev/null
+++ b/gnu/packages/patches/openjdk-10-idlj-reproducibility.patch
@@ -0,0 +1,36 @@
+From a0a0c6a43b88d946f2b5484892cf0209bd7c0e68 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?G=C3=A1bor=20Boskovits?= <boskovits@gmail.com>
+Date: Sat, 8 Dec 2018 21:25:31 +0100
+Subject: [PATCH] Make idlj respect SOURCE_DATE_EPOCH.
+
+---
+ .../sun/tools/corba/se/idl/toJavaPortable/Util.java | 13 ++++++++++++-
+ 1 file changed, 12 insertions(+), 1 deletion(-)
+
+diff --git a/src/java.corba/share/classes/com/sun/tools/corba/se/idl/toJavaPortable/Util.java b/src/java.corba/share/classes/com/sun/tools/corba/se/idl/toJavaPortable/Util.java
+index 7397619f2..583d6b8e4 100644
+--- a/src/java.corba/share/classes/com/sun/tools/corba/se/idl/toJavaPortable/Util.java
++++ b/src/java.corba/share/classes/com/sun/tools/corba/se/idl/toJavaPortable/Util.java
+@@ -1146,7 +1146,18 @@ public class Util extends com.sun.tools.corba.se.idl.Util
+ else
+ formatter.setTimeZone (java.util.TimeZone.getDefault ());
+
+- stream.println ("* " + formatter.format (new Date ()));
++ try {
++ String epoch = System.getenv("SOURCE_DATE_EPOCH");
++ if(epoch != null) {
++ long unixTime = Long.parseLong(epoch);
++ stream.println ("* " + formatter.format (new Date (unixTime*1000L)));
++ } else {
++ stream.println ("* " + formatter.format (new Date ()));
++ }
++ } catch (Exception e) {
++ //in case of error fall back to default
++ stream.println ("* " + formatter.format (new Date ()));
++ }
+
+ // <daz>
+ ///////////////
+--
+2.19.2
+
diff --git a/gnu/packages/patches/polkit-CVE-2018-19788.patch b/gnu/packages/patches/polkit-CVE-2018-19788.patch
new file mode 100644
index 0000000000..58cde6c5dc
--- /dev/null
+++ b/gnu/packages/patches/polkit-CVE-2018-19788.patch
@@ -0,0 +1,197 @@
+Fix CVE-2018-19788:
+
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-19788
+https://gitlab.freedesktop.org/polkit/polkit/issues/74
+
+Patch copied from upstream source repository:
+
+https://gitlab.freedesktop.org/polkit/polkit/commit/2cb40c4d5feeaa09325522bd7d97910f1b59e379
+
+From 2cb40c4d5feeaa09325522bd7d97910f1b59e379 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Mon, 3 Dec 2018 10:28:58 +0100
+Subject: [PATCH] Allow negative uids/gids in PolkitUnixUser and Group objects
+
+(uid_t) -1 is still used as placeholder to mean "unset". This is OK, since
+there should be no users with such number, see
+https://systemd.io/UIDS-GIDS#special-linux-uids.
+
+(uid_t) -1 is used as the default value in class initialization.
+
+When a user or group above INT32_MAX is created, the numeric uid or
+gid wraps around to negative when the value is assigned to gint, and
+polkit gets confused. Let's accept such gids, except for -1.
+
+A nicer fix would be to change the underlying type to e.g. uint32 to
+not have negative values. But this cannot be done without breaking the
+API, so likely new functions will have to be added (a
+polkit_unix_user_new variant that takes a unsigned, and the same for
+_group_new, _set_uid, _get_uid, _set_gid, _get_gid, etc.). This will
+require a bigger patch.
+
+Fixes https://gitlab.freedesktop.org/polkit/polkit/issues/74.
+---
+ src/polkit/polkitunixgroup.c | 15 +++++++++++----
+ src/polkit/polkitunixprocess.c | 12 ++++++++----
+ src/polkit/polkitunixuser.c | 13 ++++++++++---
+ 3 files changed, 29 insertions(+), 11 deletions(-)
+
+diff --git a/src/polkit/polkitunixgroup.c b/src/polkit/polkitunixgroup.c
+index c57a1aa..309f689 100644
+--- a/src/polkit/polkitunixgroup.c
++++ b/src/polkit/polkitunixgroup.c
+@@ -71,6 +71,7 @@ G_DEFINE_TYPE_WITH_CODE (PolkitUnixGroup, polkit_unix_group, G_TYPE_OBJECT,
+ static void
+ polkit_unix_group_init (PolkitUnixGroup *unix_group)
+ {
++ unix_group->gid = -1; /* (git_t) -1 is not a valid GID under Linux */
+ }
+
+ static void
+@@ -100,11 +101,14 @@ polkit_unix_group_set_property (GObject *object,
+ GParamSpec *pspec)
+ {
+ PolkitUnixGroup *unix_group = POLKIT_UNIX_GROUP (object);
++ gint val;
+
+ switch (prop_id)
+ {
+ case PROP_GID:
+- unix_group->gid = g_value_get_int (value);
++ val = g_value_get_int (value);
++ g_return_if_fail (val != -1);
++ unix_group->gid = val;
+ break;
+
+ default:
+@@ -131,9 +135,9 @@ polkit_unix_group_class_init (PolkitUnixGroupClass *klass)
+ g_param_spec_int ("gid",
+ "Group ID",
+ "The UNIX group ID",
+- 0,
++ G_MININT,
+ G_MAXINT,
+- 0,
++ -1,
+ G_PARAM_CONSTRUCT |
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_NAME |
+@@ -166,9 +170,10 @@ polkit_unix_group_get_gid (PolkitUnixGroup *group)
+ */
+ void
+ polkit_unix_group_set_gid (PolkitUnixGroup *group,
+- gint gid)
++ gint gid)
+ {
+ g_return_if_fail (POLKIT_IS_UNIX_GROUP (group));
++ g_return_if_fail (gid != -1);
+ group->gid = gid;
+ }
+
+@@ -183,6 +188,8 @@ polkit_unix_group_set_gid (PolkitUnixGroup *group,
+ PolkitIdentity *
+ polkit_unix_group_new (gint gid)
+ {
++ g_return_val_if_fail (gid != -1, NULL);
++
+ return POLKIT_IDENTITY (g_object_new (POLKIT_TYPE_UNIX_GROUP,
+ "gid", gid,
+ NULL));
+diff --git a/src/polkit/polkitunixprocess.c b/src/polkit/polkitunixprocess.c
+index 972b777..b02b258 100644
+--- a/src/polkit/polkitunixprocess.c
++++ b/src/polkit/polkitunixprocess.c
+@@ -159,9 +159,14 @@ polkit_unix_process_set_property (GObject *object,
+ polkit_unix_process_set_pid (unix_process, g_value_get_int (value));
+ break;
+
+- case PROP_UID:
+- polkit_unix_process_set_uid (unix_process, g_value_get_int (value));
++ case PROP_UID: {
++ gint val;
++
++ val = g_value_get_int (value);
++ g_return_if_fail (val != -1);
++ polkit_unix_process_set_uid (unix_process, val);
+ break;
++ }
+
+ case PROP_START_TIME:
+ polkit_unix_process_set_start_time (unix_process, g_value_get_uint64 (value));
+@@ -239,7 +244,7 @@ polkit_unix_process_class_init (PolkitUnixProcessClass *klass)
+ g_param_spec_int ("uid",
+ "User ID",
+ "The UNIX user ID",
+- -1,
++ G_MININT,
+ G_MAXINT,
+ -1,
+ G_PARAM_CONSTRUCT |
+@@ -303,7 +308,6 @@ polkit_unix_process_set_uid (PolkitUnixProcess *process,
+ gint uid)
+ {
+ g_return_if_fail (POLKIT_IS_UNIX_PROCESS (process));
+- g_return_if_fail (uid >= -1);
+ process->uid = uid;
+ }
+
+diff --git a/src/polkit/polkitunixuser.c b/src/polkit/polkitunixuser.c
+index 8bfd3a1..234a697 100644
+--- a/src/polkit/polkitunixuser.c
++++ b/src/polkit/polkitunixuser.c
+@@ -72,6 +72,7 @@ G_DEFINE_TYPE_WITH_CODE (PolkitUnixUser, polkit_unix_user, G_TYPE_OBJECT,
+ static void
+ polkit_unix_user_init (PolkitUnixUser *unix_user)
+ {
++ unix_user->uid = -1; /* (uid_t) -1 is not a valid UID under Linux */
+ unix_user->name = NULL;
+ }
+
+@@ -112,11 +113,14 @@ polkit_unix_user_set_property (GObject *object,
+ GParamSpec *pspec)
+ {
+ PolkitUnixUser *unix_user = POLKIT_UNIX_USER (object);
++ gint val;
+
+ switch (prop_id)
+ {
+ case PROP_UID:
+- unix_user->uid = g_value_get_int (value);
++ val = g_value_get_int (value);
++ g_return_if_fail (val != -1);
++ unix_user->uid = val;
+ break;
+
+ default:
+@@ -144,9 +148,9 @@ polkit_unix_user_class_init (PolkitUnixUserClass *klass)
+ g_param_spec_int ("uid",
+ "User ID",
+ "The UNIX user ID",
+- 0,
++ G_MININT,
+ G_MAXINT,
+- 0,
++ -1,
+ G_PARAM_CONSTRUCT |
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_NAME |
+@@ -182,6 +186,7 @@ polkit_unix_user_set_uid (PolkitUnixUser *user,
+ gint uid)
+ {
+ g_return_if_fail (POLKIT_IS_UNIX_USER (user));
++ g_return_if_fail (uid != -1);
+ user->uid = uid;
+ }
+
+@@ -196,6 +201,8 @@ polkit_unix_user_set_uid (PolkitUnixUser *user,
+ PolkitIdentity *
+ polkit_unix_user_new (gint uid)
+ {
++ g_return_val_if_fail (uid != -1, NULL);
++
+ return POLKIT_IDENTITY (g_object_new (POLKIT_TYPE_UNIX_USER,
+ "uid", uid,
+ NULL));
+--
+2.18.1
+
diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm
index d5e23f6c9e..5a9bc2d64b 100644
--- a/gnu/packages/pdf.scm
+++ b/gnu/packages/pdf.scm
@@ -429,6 +429,7 @@ using the DjVuLibre library.")
(inputs
`(("jbig2dec" ,jbig2dec)
("libjpeg" ,libjpeg)
+ ("mujs", mujs)
("mupdf" ,mupdf)
("openjpeg" ,openjpeg)
("openssl" ,openssl)
@@ -438,7 +439,18 @@ using the DjVuLibre library.")
`(#:tests? #f ; package does not contain tests
#:configure-flags (list (string-append "-Dplugindir="
(assoc-ref %outputs "out")
- "/lib/zathura"))))
+ "/lib/zathura")
+ "-Dlink-external=true")
+ #:phases
+ (modify-phases %standard-phases
+ (add-before 'configure 'add-mujs-to-dependencies
+ (lambda _
+ ;; Add mujs to the 'build_dependencies'.
+ (substitute* "meson.build"
+ (("^ libopenjp2 = dependency.*" x)
+ (string-append x " mujs = cc.find_library('mujs')\n"))
+ (("^ libopenjp2")
+ " libopenjp2, mujs")))))))
(home-page "https://pwmt.org/projects/zathura-pdf-mupdf/")
(synopsis "PDF support for zathura (mupdf backend)")
(description "The zathura-pdf-mupdf plugin adds PDF support to zathura
diff --git a/gnu/packages/polkit.scm b/gnu/packages/polkit.scm
index 7cc5205faa..830006d439 100644
--- a/gnu/packages/polkit.scm
+++ b/gnu/packages/polkit.scm
@@ -49,6 +49,7 @@
(uri (string-append
"https://www.freedesktop.org/software/polkit/releases/"
name "-" version ".tar.gz"))
+ (patches (search-patches "polkit-CVE-2018-19788.patch"))
(sha256
(base32
"0c91y61y4gy6p91cwbzg32dhavw4b7fflg370rimqhdxpzdfr1rg"))
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index 9472a441ef..fd13339ccc 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -908,6 +908,29 @@ version identifier.")
(define-public python2-semantic-version
(package-with-python2 python-semantic-version))
+(define-public python-serpent
+ (package
+ (name "python-serpent")
+ (version "1.27")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "serpent" version))
+ (sha256
+ (base32
+ "04p9dsrm5pv8vhk3flvih55kgvlzpi38hlaykdiakddmgwqw93bg"))))
+ (build-system python-build-system)
+ (home-page "https://github.com/irmen/Serpent")
+ (synopsis "Serializer for literal Python expressions")
+ (description
+ "Serpent provides ast.literal_eval() compatible object tree
+serialization. It serializes an object tree into bytes (utf-8 encoded string)
+that can be decoded and then passed as-is to ast.literal_eval() to rebuild it
+as the original object tree. As such it is safe to send serpent data to other
+machines over the network for instance (because only safe literals are
+encoded).")
+ (license license:expat)))
+
(define-public python-setuptools
(package
(name "python-setuptools")
@@ -1048,6 +1071,32 @@ for additional processing.")
(define-public python2-capturer
(package-with-python2 python-capturer))
+(define-public python-case
+ (package
+ (name "python-case")
+ (version "1.5.3")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "case" version))
+ (sha256
+ (base32
+ "1cagg06vfph864s6l5jb0zqliwxh647bki8j6lf4a4qrv40jnhs8"))))
+ (build-system python-build-system)
+ (propagated-inputs
+ `(("python-mock" ,python-mock)
+ ("python-nose" ,python-nose)
+ ("python-six" ,python-six)
+ ("python-unittest2" ,python-unittest2)))
+ (native-inputs
+ `(("python-coverage" ,python-coverage)))
+ (home-page "https://github.com/celery/case")
+ (synopsis "Unittest utilities and convenience methods")
+ (description
+ "The @code{case} package provides utilities on top of unittest, including
+some helpful Python 2 compatibility convenience methods.")
+ (license license:bsd-3)))
+
(define-public python-verboselogs
(package
(name "python-verboselogs")
@@ -2268,6 +2317,30 @@ object.")
(define-public python2-pyyaml
(package-with-python2 python-pyyaml))
+(define-public python-vine
+ (package
+ (name "python-vine")
+ (version "1.1.4")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "vine" version))
+ (sha256
+ (base32
+ "0wkskb2hb494v9gixqnf4bl972p4ibcmxdykzpwjlfa5picns4aj"))))
+ (build-system python-build-system)
+ (native-inputs
+ `(("python-pytest" ,python-pytest)
+ ("python-case" ,python-case)))
+ (home-page "https://github.com/celery/vine")
+ (synopsis "Promises for Python")
+ (description
+ "@code{vine} provides a special implementation of promises in that it can
+be used both for \"promise of a value\" and lazy evaluation. The biggest
+upside for this is that everything in a promise can also be a promise,
+e.g. filters, callbacks and errbacks can all be promises.")
+ (license license:bsd-3)))
+
(define-public python-virtualenv
(package
(name "python-virtualenv")
@@ -8196,18 +8269,21 @@ and provides a uniform API regardless of which JSON implementation is used.")
(define-public python-amqp
(package
(name "python-amqp")
- (version "1.4.9")
+ (version "2.3.2")
(source
(origin
(method url-fetch)
(uri (pypi-uri "amqp" version))
(sha256
(base32
- "06n6q0kxhjnbfz3vn8x9yz09lwmn1xi9d6wxp31h5jbks0b4vsid"))))
+ "1sv600dgqwpimr6i1g59y9hpn50mc236gdqkr7zin13kvlpx0g87"))))
(build-system python-build-system)
(native-inputs
- `(("python-nose" ,python-nose)
+ `(("python-case" ,python-case)
+ ("python-pytest-sugar" ,python-pytest-sugar)
("python-mock" ,python-mock)))
+ (propagated-inputs
+ `(("python-vine" ,python-vine)))
(home-page "https://github.com/celery/py-amqp")
(synopsis
"Low-level AMQP client for Python (fork of amqplib)")
@@ -8261,23 +8337,26 @@ applications.")
(define-public python-kombu
(package
(name "python-kombu")
- (version "3.0.37")
+ (version "4.2.2")
(source
(origin
(method url-fetch)
(uri (pypi-uri "kombu" version))
(sha256
(base32
- "0l16chb314gpq2v7fh94a22c30lcv6w3ylmhsa60bldlcq6a0r70"))))
+ "15k8f7mzqr049sg9vi48m19vjykviafk3f0p5xzgw9by0x0kyxjj"))))
(build-system python-build-system)
(native-inputs
`(("python-mock" ,python-mock)
- ("python-nose" ,python-nose)))
+ ("python-case" ,python-case)
+ ("python-pyro4" ,python-pyro4)
+ ("python-pytest-sugar" ,python-pytest-sugar)
+ ("python-pytz" ,python-pytz)))
(propagated-inputs
`(("python-anyjson" ,python-anyjson)
("python-amqp" ,python-amqp)
("python-redis" ,python-redis)))
- (home-page "http://kombu.readthedocs.org")
+ (home-page "https://kombu.readthedocs.io")
(synopsis "Message passing library for Python")
(description "The aim of Kombu is to make messaging in Python as easy as
possible by providing an idiomatic high-level interface for the AMQ protocol,
@@ -8303,17 +8382,18 @@ RabbitMQ messaging server is the most popular implementation.")
(define-public python-billiard
(package
(name "python-billiard")
- (version "3.3.0.23")
+ (version "3.5.0.5")
(source
(origin
(method url-fetch)
(uri (pypi-uri "billiard" version))
(sha256
(base32
- "02wxsc6bhqvzh8j6w758kvgqbnj14l796mvmrcms8fgfamd2lak9"))))
+ "03msmapj3s5zgqk87d646mafz7a01h5bm2wijalgpi0s80ks5na2"))))
(build-system python-build-system)
(native-inputs
- `(("python-nose" ,python-nose)))
+ `(("python-case" ,python-case)
+ ("python-pytest" ,python-pytest)))
(home-page "https://github.com/celery/billiard")
(synopsis
"Python multiprocessing fork with improvements and bugfixes")
@@ -8337,31 +8417,35 @@ Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.")
(define-public python-celery
(package
(name "python-celery")
- (version "3.1.24")
+ (version "4.2.1")
(source
(origin
(method url-fetch)
(uri (pypi-uri "celery" version))
(sha256
(base32
- "0yh2prhdnx2dgkb67a5drj12hh2zvzx5f611p7mqqg01ydghif4r"))))
+ "0y66rz7z8dfcgs3s0qxmdddlaq57bzbgxgfz896nbp14grkv9nkp"))))
(build-system python-build-system)
(arguments
- `(#:phases
+ '(;; TODO The tests fail with Python 3.7
+ ;; https://github.com/celery/celery/issues/4849
+ #:tests? #f
+ #:phases
(modify-phases %standard-phases
- ;; These tests break with Python 3.5:
- ;; https://github.com/celery/celery/issues/2897#issuecomment-253066295
- (replace 'check
+ (add-after 'unpack 'patch-requirements
(lambda _
- (zero?
- (system* "nosetests" "--exclude=^test_safe_to_remove.*")))))))
+ (substitute* "requirements/test.txt"
+ (("pytest>=3\\.0,<3\\.3")
+ "pytest>=3.0"))
+ #t)))))
(native-inputs
- `(("python-nose" ,python-nose)))
+ `(("python-case" ,python-case)
+ ("python-pytest" ,python-pytest)))
(propagated-inputs
`(("python-pytz" ,python-pytz)
("python-billiard" ,python-billiard)
("python-kombu" ,python-kombu)))
- (home-page "http://celeryproject.org")
+ (home-page "https://celeryproject.org")
(synopsis "Distributed Task Queue")
(description "Celery is an asynchronous task queue/job queue based on
distributed message passing. It is focused on real-time operation, but
@@ -9226,6 +9310,13 @@ graphviz.")
(setenv "CPATH"
(string-append greenlet "/" python)))))
#t))
+ (add-before 'check 'skip-timer-test
+ (lambda _
+ ;; XXX: Skip 'TestTimerResolution', which appears to be
+ ;; unreliable.
+ (substitute* "src/greentest/test__core_timer.py"
+ (("not greentest.RUNNING_ON_CI") "False"))
+ #t))
(replace 'check
(lambda _
;; Make sure the build directory is on PYTHONPATH.
@@ -9266,17 +9357,6 @@ to provide a high-level synchronous API on top of the libev event loop.")
(strip-python2-variant python-gevent))))
(package
(inherit base)
- (arguments
- (substitute-keyword-arguments (package-arguments base)
- ((#:phases phases)
- `(modify-phases ,phases
- (add-before 'check 'skip-timer-test
- (lambda _
- ;; XXX: Skip 'TestTimerResolution', which appears to be
- ;; unreliable.
- (substitute* "src/greentest/test__core_timer.py"
- (("not greentest.RUNNING_ON_CI") "False"))
- #t))))))
(native-inputs `(,@(package-native-inputs python-gevent)
("python-mock" ,python2-mock))))))
@@ -9841,20 +9921,25 @@ characters, mouse support, and auto suggestions.")
(define-public python-jedi
(package
(name "python-jedi")
- (version "0.12.1")
+ (version "0.13.1")
(source
(origin
(method url-fetch)
(uri (pypi-uri "jedi" version))
(sha256
(base32
- "1h8ypnjisn57kiv1zqrkj1im6sbfnhxllqaa8znh39qkd47ys2dl"))))
+ "0j11q42g5vjkyhhjpyy8nb0gdxs78m3rpjai7p1hvgpyl9rkyjdp"))))
(build-system python-build-system)
(arguments
- `(#:phases
+ `( ;; Many tests are failing with Python 3.7.x as of version 0.13.1 (see:
+ ;; https://github.com/davidhalter/jedi/issues/1263)
+ #:tests? #f
+ #:phases
(modify-phases %standard-phases
- (replace 'check (lambda _
- (invoke "py.test" "-vv"))))))
+ (replace 'check
+ (lambda* (#:key tests? #:allow-other-keys)
+ (when tests?
+ (invoke "py.test" "-vv")))))))
(native-inputs
`(("python-pytest" ,python-pytest)
("python-docopt" ,python-docopt)))
@@ -13258,6 +13343,28 @@ such as figshare or Zenodo.")
(define-public python2-semver
(package-with-python2 python-semver))
+(define-public python-pyro4
+ (package
+ (name "python-pyro4")
+ (version "4.74")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "Pyro4" version))
+ (sha256
+ (base32
+ "0pzp7c6q3vvkxq0wy9lr6wd5wky40sajz69g697i5rb2q497pvc9"))))
+ (build-system python-build-system)
+ (propagated-inputs
+ `(("python-serpent" ,python-serpent)))
+ (home-page "https://pyro4.readthedocs.io")
+ (synopsis "Distributed object middleware for Python")
+ (description
+ "Pyro enables you to build applications in which objects can talk to each
+other over the network. You can just use normal Python method calls to call
+objects on other machines, also known as remote procedure calls (RPC).")
+ (license license:expat)))
+
(define-public python2-pyro
(package
(name "python2-pyro")
diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm
index ef40431733..501736d898 100644
--- a/gnu/packages/rust.scm
+++ b/gnu/packages/rust.scm
@@ -191,6 +191,8 @@ safety and thread safety guarantees.")
(source (rust-source version "0l8c14qsf42rmkqy92ahij4vf356dbyspxcips1aswpvad81y8qm"
#:patches '("rust-1.19-mrustc.patch")))
(outputs '("out" "cargo"))
+ (properties '((timeout . 72000) ;20 hours
+ (max-silent-time . 18000))) ;5 hours (for armel)
(arguments
`(#:imported-modules ,%cargo-build-system-modules ;for `generate-checksums'
#:modules ((guix build utils) (ice-9 match) (guix build gnu-build-system))
@@ -427,6 +429,7 @@ safety and thread safety guarantees.")
(package
(inherit base-rust)
(outputs '("out" "doc" "cargo"))
+ (properties '())
(arguments
(substitute-keyword-arguments (package-arguments rust-1.19)
((#:phases phases)
diff --git a/gnu/packages/security-token.scm b/gnu/packages/security-token.scm
index 400c053048..fb2526c04a 100644
--- a/gnu/packages/security-token.scm
+++ b/gnu/packages/security-token.scm
@@ -51,6 +51,7 @@
#:use-module (gnu packages tex)
#:use-module (gnu packages perl)
#:use-module (gnu packages pkg-config)
+ #:use-module (gnu packages web)
#:use-module (gnu packages xml))
(define-public ccid
@@ -307,3 +308,36 @@ and other operations. It includes a library and a command-line tool.")
;; license for that one file. Please see it for details. The vast
;; majority of files are licensed under bsd-2.
(license license:bsd-2)))
+
+(define-public yubikey-personalization
+ (package
+ (name "yubikey-personalization")
+ (version "1.19.0")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append
+ "https://developers.yubico.com/" name
+ "/Releases/ykpers-" version ".tar.gz"))
+ (sha256
+ (base32
+ "104lc0nnqdr365fa7c4vrq67rxp1dp8idndsh9jlhnj9dnhszj1b"))))
+ (build-system gnu-build-system)
+ (arguments
+ '(#:configure-flags (list (string-append "--with-udevrulesdir="
+ (assoc-ref %outputs "out")
+ "/lib/udev/rules.d"))))
+ (inputs
+ `(("json-c" ,json-c)
+ ("libusb" ,libusb)
+ ;; The library "libyubikey" is also known as "yubico-c".
+ ("libyubikey" ,libyubikey)))
+ (native-inputs
+ `(("pkg-config" ,pkg-config)
+ ("eudev" ,eudev)))
+ (home-page "https://developers.yubico.com/yubikey-personalization/")
+ (synopsis "Library and tools to personalize YubiKeys")
+ (description
+ "The YubiKey Personalization package contains a C library and command
+line tools for personalizing YubiKeys. You can use these to set an AES key,
+retrieve a YubiKey's serial number, and so forth.")
+ (license license:bsd-2)))
diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm
index 73be90d0d3..acd175fe09 100644
--- a/gnu/packages/tls.scm
+++ b/gnu/packages/tls.scm
@@ -529,13 +529,13 @@ netcat implementation that supports TLS.")
(package
(name "python-acme")
;; Remember to update the hash of certbot when updating python-acme.
- (version "0.28.0")
+ (version "0.29.1")
(source (origin
(method url-fetch)
(uri (pypi-uri "acme" version))
(sha256
(base32
- "11dvcbdifn5d02p4k5li8r6r39bl3p5ap9p3zjwvasm24hf2yz5z"))))
+ "0z5l966b1asbcdzl77bmywf22c1q0xill00jj7qyml9wx2nh7qm2"))))
(build-system python-build-system)
(arguments
`(#:phases
@@ -586,7 +586,7 @@ netcat implementation that supports TLS.")
(uri (pypi-uri name version))
(sha256
(base32
- "02h959qkq7z0s13ivgf7jyl3gnc55wcck6n546k0kh155bpf5qri"))))
+ "14i6yrcb9s7ygy99gccfc8jscymi24xb72s5lgg9b2y40z909ikg"))))
(build-system python-build-system)
(arguments
`(,@(substitute-keyword-arguments (package-arguments python-acme)
diff --git a/gnu/packages/tor.scm b/gnu/packages/tor.scm
index a9bbebcd13..764ee52b0a 100644
--- a/gnu/packages/tor.scm
+++ b/gnu/packages/tor.scm
@@ -4,7 +4,7 @@
;;; Copyright © 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2016, 2017 Nils Gillmann <ng0@n0.is>
;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2017 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2017, 2018 Eric Bavier <bavier@member.fsf.org>
;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
;;;
@@ -162,7 +162,7 @@ networks.")
(define-public onionshare
(package
(name "onionshare")
- (version "0.9.2")
+ (version "1.3.1")
(source
(origin
(method git-fetch)
@@ -172,7 +172,7 @@ networks.")
(file-name (git-file-name name version))
(sha256
(base32
- "1nzr6m3jp04p1i8b652s27zv0xhybl3zwcn5r6l9h0f7d7x4iglv"))))
+ "02zic4cxwrcfdg22dq9c2rzni3l18wynjxd38scc59s37vlw7w2r"))))
(build-system python-build-system)
(arguments
`(#:phases
@@ -181,55 +181,24 @@ networks.")
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(onionshare (string-append out "/share/onionshare")))
- (substitute* "onionshare/strings.py"
- ;; correct the locale directory
- (("helpers.get_resource_path\\('locale'\\)")
- (string-append "'" onionshare "/locale'")))
- (substitute* "onionshare/helpers.py"
- ;; correct the location of version.txt
- (("get_resource_path\\('version.txt'\\)")
- (string-append "'" onionshare "/version.txt'"))
- (("get_resource_path\\('wordlist.txt'\\)")
- (string-append "'" onionshare "/wordlist.txt'")))
- (substitute* "onionshare/web.py"
- ;; fix the location of the html files
- (("helpers.get_resource_path\\('html/denied.html'\\)")
- (string-append "'" onionshare "/html/denied.html'"))
- (("helpers.get_resource_path\\('html/404.html'\\)")
- (string-append "'" onionshare "/html/404.html'"))
- (("helpers.get_resource_path\\('html/index.html'\\)")
- (string-append "'" onionshare "/html/index.html'")))
- (substitute* "onionshare_gui/file_selection.py"
- ;; fancy box image in the GUI
- (("helpers.get_resource_path\\('images/drop_files.png'\\)")
- (string-append "'" onionshare "/images/drop_files.png'")))
- (substitute* "onionshare_gui/server_status.py"
- (("helpers.get_resource_path\\('images/server_stopped.png'\\)")
- (string-append "'" onionshare "/images/server_stopped.png'"))
- (("helpers.get_resource_path\\('images/server_working.png'\\)")
- (string-append "'" onionshare "/images/server_working.png'"))
- (("helpers.get_resource_path\\('images/server_started.png'\\)")
- (string-append "'" onionshare "/images/server_started.png'")))
- (substitute* "onionshare_gui/onionshare_gui.py"
- ;; for the icon on the GUI
- (("helpers.get_resource_path\\('images/logo.png'\\)")
- (string-append "'" onionshare "/images/logo.png'")))
- (substitute* '("setup.py" "onionshare/helpers.py")
+ (substitute* '("setup.py" "onionshare/common.py")
(("sys.prefix,") (string-append "'" out "',")))
(substitute* "setup.py"
;; for the nautilus plugin
(("/usr/share/nautilus") "share/nautilus"))
- #t)))
+ (substitute* "install/onionshare.desktop"
+ (("/usr") out))
+ #t)))
(delete 'check)
(add-before 'strip 'tests
;; After all the patching we run the tests after installing.
;; This is also a known issue:
;; https://github.com/micahflee/onionshare/issues/284
(lambda _
- (invoke "nosetests" "test")
+ (invoke "pytest" "test")
#t)))))
(native-inputs
- `(("python-nose" ,python-nose)))
+ `(("python-pytest" ,python-pytest)))
(inputs
`(("python-flask" ,python-flask)
("python-nautilus" ,python-nautilus)
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index d068c30735..f37936ee5e 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -146,14 +146,14 @@ as well as the classic centralized workflow.")
(name "git")
;; XXX When updating Git, check if the special 'git-source' input to cgit
;; needs to be updated as well.
- (version "2.19.2")
+ (version "2.20.0")
(source (origin
(method url-fetch)
(uri (string-append "mirror://kernel.org/software/scm/git/git-"
version ".tar.xz"))
(sha256
(base32
- "1scbggzghkzzfqg4ky3qh7h9w87c3zya4ls5disz7dbx56is7sgw"))))
+ "07yq186wb3wqvvmzhhsca57m979p7jprkk4h2a516jz1fd87755w"))))
(build-system gnu-build-system)
(native-inputs
`(("native-perl" ,perl)
@@ -166,7 +166,7 @@ as well as the classic centralized workflow.")
version ".tar.xz"))
(sha256
(base32
- "1sqhllkabylm46paswg0j54fiar44fmcdmkjkysmjn2gj6hqpz95"))))
+ "141n20migxaazy0vfkivjk6bzazi3ydyq7qkf6wmkg186l4amgbr"))))
;; For subtree documentation.
("asciidoc" ,asciidoc)
("docbook-xsl" ,docbook-xsl)
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index 18fdffeb98..d039bfe048 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -1496,7 +1496,7 @@ audio, images) from the Web. It can use either mpv or vlc for playback.")
(define-public youtube-viewer
(package
(name "youtube-viewer")
- (version "3.4.1")
+ (version "3.5.0")
(source (origin
(method git-fetch)
(uri (git-reference
@@ -1505,7 +1505,7 @@ audio, images) from the Web. It can use either mpv or vlc for playback.")
(file-name (git-file-name name version))
(sha256
(base32
- "0axgb95lx81psgrb2a5rfdd8gl4mhsrzf41jas6l58d1xkaj54ri"))))
+ "1s7hv2a46cx2nbdykrijqfh8hdkf3zqn6q8sg3ajnnc5agaspyrg"))))
(build-system perl-build-system)
(native-inputs
`(("perl-module-build" ,perl-module-build)))
@@ -3264,3 +3264,23 @@ API. It includes bindings for Python, Ruby, and other languages.")
helps you create the film you have always dreamed of. Easily add sub-titles,
transitions, and effects and then export your film to many common formats.")
(license license:gpl3+)))
+
+(define-public dav1d
+ (package
+ (name "dav1d")
+ (version "0.1.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "https://downloads.videolan.org/pub/videolan/"
+ "dav1d/" version "/dav1d-" version ".tar.xz"))
+ (sha256
+ (base32
+ "0dw0liday8cbyrirhm6bgzhxg4cdy66nspfkdlq338gdsfqcvrsc"))))
+ (build-system meson-build-system)
+ (native-inputs `(("nasm" ,nasm)))
+ (home-page "https://code.videolan.org/videolan/dav1d")
+ (synopsis "AV1 decoder")
+ (description "dav1d is a new AV1 cross-platform decoder, and focused on
+speed and correctness.")
+ (license license:bsd-2)))
diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index 89e39f7690..b10f5cbaf1 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -1604,7 +1604,15 @@ failed to register public key '~a': ~a~%" key status)))))))
'())
#$@(if tmpdir
(list (string-append "TMPDIR=" tmpdir))
- '()))
+ '())
+
+ ;; Make sure we run in a UTF-8 locale so that 'guix
+ ;; offload' correctly restores nars that contain UTF-8
+ ;; file names such as 'nss-certs'. See
+ ;; <https://bugs.gnu.org/32942>.
+ (string-append "GUIX_LOCPATH="
+ #$glibc-utf8-locales "/lib/locale")
+ "LC_ALL=en_US.utf8")
#:log-file #$log-file))
(stop #~(make-kill-destructor))))))
diff --git a/guix/channels.scm b/guix/channels.scm
index e57da68149..75503bb0ae 100644
--- a/guix/channels.scm
+++ b/guix/channels.scm
@@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -27,6 +28,7 @@
#:use-module (guix store)
#:use-module (guix i18n)
#:use-module (srfi srfi-1)
+ #:use-module (srfi srfi-2)
#:use-module (srfi srfi-9)
#:use-module (srfi srfi-11)
#:autoload (guix self) (whole-package)
@@ -73,7 +75,6 @@
(commit channel-commit (default #f))
(location channel-location
(default (current-source-location)) (innate)))
-;; TODO: Add a way to express dependencies among channels.
(define %default-channels
;; Default list of channels.
@@ -93,6 +94,12 @@
(commit channel-instance-commit)
(checkout channel-instance-checkout))
+(define-record-type <channel-metadata>
+ (channel-metadata version dependencies)
+ channel-metadata?
+ (version channel-metadata-version)
+ (dependencies channel-metadata-dependencies))
+
(define (channel-reference channel)
"Return the \"reference\" for CHANNEL, an sexp suitable for
'latest-repository-commit'."
@@ -100,20 +107,90 @@
(#f `(branch . ,(channel-branch channel)))
(commit `(commit . ,(channel-commit channel)))))
-(define (latest-channel-instances store channels)
+(define (read-channel-metadata instance)
+ "Return a channel-metadata record read from the channel INSTANCE's
+description file, or return #F if the channel instance does not include the
+file."
+ (let* ((source (channel-instance-checkout instance))
+ (meta-file (string-append source "/.guix-channel")))
+ (and (file-exists? meta-file)
+ (and-let* ((raw (call-with-input-file meta-file read))
+ (version (and=> (assoc-ref raw 'version) first))
+ (dependencies (or (assoc-ref raw 'dependencies) '())))
+ (channel-metadata
+ version
+ (map (lambda (item)
+ (let ((get (lambda* (key #:optional default)
+ (or (and=> (assoc-ref item key) first) default))))
+ (and-let* ((name (get 'name))
+ (url (get 'url))
+ (branch (get 'branch "master")))
+ (channel
+ (name name)
+ (branch branch)
+ (url url)
+ (commit (get 'commit))))))
+ dependencies))))))
+
+(define (channel-instance-dependencies instance)
+ "Return the list of channels that are declared as dependencies for the given
+channel INSTANCE."
+ (match (read-channel-metadata instance)
+ (#f '())
+ (($ <channel-metadata> version dependencies)
+ dependencies)))
+
+(define* (latest-channel-instances store channels #:optional (previous-channels '()))
"Return a list of channel instances corresponding to the latest checkouts of
-CHANNELS."
- (map (lambda (channel)
- (format (current-error-port)
- (G_ "Updating channel '~a' from Git repository at '~a'...~%")
- (channel-name channel)
- (channel-url channel))
- (let-values (((checkout commit)
- (latest-repository-commit store (channel-url channel)
- #:ref (channel-reference
- channel))))
- (channel-instance channel commit checkout)))
- channels))
+CHANNELS and the channels on which they depend. PREVIOUS-CHANNELS is a list
+of previously processed channels."
+ ;; Only process channels that are unique, or that are more specific than a
+ ;; previous channel specification.
+ (define (ignore? channel others)
+ (member channel others
+ (lambda (a b)
+ (and (eq? (channel-name a) (channel-name b))
+ (or (channel-commit b)
+ (not (or (channel-commit a)
+ (channel-commit b))))))))
+ ;; Accumulate a list of instances. A list of processed channels is also
+ ;; accumulated to decide on duplicate channel specifications.
+ (match (fold (lambda (channel acc)
+ (match acc
+ ((#:channels previous-channels #:instances instances)
+ (if (ignore? channel previous-channels)
+ acc
+ (begin
+ (format (current-error-port)
+ (G_ "Updating channel '~a' from Git repository at '~a'...~%")
+ (channel-name channel)
+ (channel-url channel))
+ (let-values (((checkout commit)
+ (latest-repository-commit store (channel-url channel)
+ #:ref (channel-reference
+ channel))))
+ (let ((instance (channel-instance channel commit checkout)))
+ (let-values (((new-instances new-channels)
+ (latest-channel-instances
+ store
+ (channel-instance-dependencies instance)
+ previous-channels)))
+ `(#:channels
+ ,(append (cons channel new-channels)
+ previous-channels)
+ #:instances
+ ,(append (cons instance new-instances)
+ instances))))))))))
+ `(#:channels ,previous-channels #:instances ())
+ channels)
+ ((#:channels channels #:instances instances)
+ (let ((instance-name (compose channel-name channel-instance-channel)))
+ ;; Remove all earlier channel specifications if they are followed by a
+ ;; more specific one.
+ (values (delete-duplicates instances
+ (lambda (a b)
+ (eq? (instance-name a) (instance-name b))))
+ channels)))))
(define* (checkout->channel-instance checkout
#:key commit
@@ -235,8 +312,21 @@ INSTANCES."
(lambda (instance)
(if (eq? instance core-instance)
(return core)
- (build-channel-instance instance
- (cons core dependencies))))
+ (match (channel-instance-dependencies instance)
+ (()
+ (build-channel-instance instance
+ (cons core dependencies)))
+ (channels
+ (mlet %store-monad ((dependencies-derivation
+ (latest-channel-derivation
+ ;; %default-channels is used here to
+ ;; ensure that the core channel is
+ ;; available for channels declared as
+ ;; dependencies.
+ (append channels %default-channels))))
+ (build-channel-instance instance
+ (cons dependencies-derivation
+ (cons core dependencies))))))))
instances)))
(define (whole-package-for-legacy name modules)
diff --git a/guix/scripts/refresh.scm b/guix/scripts/refresh.scm
index 60e822b16b..1d86f949c8 100644
--- a/guix/scripts/refresh.scm
+++ b/guix/scripts/refresh.scm
@@ -179,24 +179,24 @@ specified with `--select'.\n"))
(let* ((packages (fold-packages cons '()))
(total (length packages)))
- (define covered
- (fold (lambda (updater covered)
- (let ((matches (count (upstream-updater-predicate updater)
- packages)))
+ (define uncovered
+ (fold (lambda (updater uncovered)
+ (let ((matches (filter (upstream-updater-predicate updater)
+ packages)))
;; TRANSLATORS: The parenthetical expression here is rendered
;; like "(42% coverage)" and denotes the fraction of packages
;; covered by the given updater.
(format #t (G_ " - ~a: ~a (~2,1f% coverage)~%")
(upstream-updater-name updater)
(G_ (upstream-updater-description updater))
- (* 100. (/ matches total)))
- (+ covered matches)))
- 0
+ (* 100. (/ (length matches) total)))
+ (lset-difference eq? uncovered matches)))
+ packages
(force %updaters)))
(newline)
(format #t (G_ "~2,1f% of the packages are covered by these updaters.~%")
- (* 100. (/ covered total))))
+ (* 100. (/ (- total (length uncovered)) total))))
(exit 0))
(define (warn-no-updater package)
diff --git a/tests/channels.scm b/tests/channels.scm
new file mode 100644
index 0000000000..f3fc383ac3
--- /dev/null
+++ b/tests/channels.scm
@@ -0,0 +1,139 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
+;;;
+;;; 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 (test-channels)
+ #:use-module (guix channels)
+ #:use-module ((guix build syscalls) #:select (mkdtemp!))
+ #:use-module (guix tests)
+ #:use-module (srfi srfi-1)
+ #:use-module (srfi srfi-64)
+ #:use-module (ice-9 match))
+
+(test-begin "channels")
+
+(define* (make-instance #:key
+ (name 'fake)
+ (commit "cafebabe")
+ (spec #f))
+ (define instance-dir (mkdtemp! "/tmp/checkout.XXXXXX"))
+ (and spec
+ (with-output-to-file (string-append instance-dir "/.guix-channel")
+ (lambda _ (format #t "~a" spec))))
+ ((@@ (guix channels) channel-instance)
+ name commit instance-dir))
+
+(define instance--boring (make-instance))
+(define instance--no-deps
+ (make-instance #:spec
+ '(channel
+ (version 0)
+ (dependencies
+ (channel
+ (name test-channel)
+ (url "https://example.com/test-channel"))))))
+(define instance--simple
+ (make-instance #:spec
+ '(channel
+ (version 0)
+ (dependencies
+ (channel
+ (name test-channel)
+ (url "https://example.com/test-channel"))))))
+(define instance--with-dupes
+ (make-instance #:spec
+ '(channel
+ (version 0)
+ (dependencies
+ (channel
+ (name test-channel)
+ (url "https://example.com/test-channel"))
+ (channel
+ (name test-channel)
+ (url "https://example.com/test-channel")
+ (commit "abc1234"))
+ (channel
+ (name test-channel)
+ (url "https://example.com/test-channel-elsewhere"))))))
+
+(define read-channel-metadata
+ (@@ (guix channels) read-channel-metadata))
+
+
+(test-equal "read-channel-metadata returns #f if .guix-channel does not exist"
+ #f
+ (read-channel-metadata instance--boring))
+
+(test-assert "read-channel-metadata returns <channel-metadata>"
+ (every (@@ (guix channels) channel-metadata?)
+ (map read-channel-metadata
+ (list instance--no-deps
+ instance--simple
+ instance--with-dupes))))
+
+(test-assert "read-channel-metadata dependencies are channels"
+ (let ((deps ((@@ (guix channels) channel-metadata-dependencies)
+ (read-channel-metadata instance--simple))))
+ (match deps
+ (((? channel? dep)) #t)
+ (_ #f))))
+
+(test-assert "latest-channel-instances includes channel dependencies"
+ (let* ((channel (channel
+ (name 'test)
+ (url "test")))
+ (test-dir (channel-instance-checkout instance--simple)))
+ (mock ((guix git) latest-repository-commit
+ (lambda* (store url #:key ref)
+ (match url
+ ("test" (values test-dir 'whatever))
+ (_ (values "/not-important" 'not-important)))))
+ (let ((instances (latest-channel-instances #f (list channel))))
+ (and (eq? 2 (length instances))
+ (lset= eq?
+ '(test test-channel)
+ (map (compose channel-name channel-instance-channel)
+ instances)))))))
+
+(test-assert "latest-channel-instances excludes duplicate channel dependencies"
+ (let* ((channel (channel
+ (name 'test)
+ (url "test")))
+ (test-dir (channel-instance-checkout instance--with-dupes)))
+ (mock ((guix git) latest-repository-commit
+ (lambda* (store url #:key ref)
+ (match url
+ ("test" (values test-dir 'whatever))
+ (_ (values "/not-important" 'not-important)))))
+ (let ((instances (latest-channel-instances #f (list channel))))
+ (and (eq? 2 (length instances))
+ (lset= eq?
+ '(test test-channel)
+ (map (compose channel-name channel-instance-channel)
+ instances))
+ ;; only the most specific channel dependency should remain,
+ ;; i.e. the one with a specified commit.
+ (find (lambda (instance)
+ (and (eq? (channel-name
+ (channel-instance-channel instance))
+ 'test-channel)
+ (eq? (channel-commit
+ (channel-instance-channel instance))
+ 'abc1234)))
+ instances))))))
+
+(test-end "channels")