diff options
author | Marius Bakke <mbakke@fastmail.com> | 2017-05-22 14:56:50 +0200 |
---|---|---|
committer | Marius Bakke <mbakke@fastmail.com> | 2017-05-22 14:56:50 +0200 |
commit | e4cddbbcac752090585baed5b15e2eb4af713284 (patch) | |
tree | 7a103d8d96beeb4ae5a28b1f575a70a0b6514501 | |
parent | 98bb983ca7ea2b393021bfee155a72b1c6183f72 (diff) | |
parent | 74297231be34afbd9d0182651a75f40c60973ec3 (diff) | |
download | guix-e4cddbbcac752090585baed5b15e2eb4af713284.tar guix-e4cddbbcac752090585baed5b15e2eb4af713284.tar.gz |
Merge branch 'master' into staging
106 files changed, 5098 insertions, 1507 deletions
diff --git a/.dir-locals.el b/.dir-locals.el index 4aaeae95c9..04b58d2ce0 100644 --- a/.dir-locals.el +++ b/.dir-locals.el @@ -17,6 +17,7 @@ (eval . (put 'call-with-prompt 'scheme-indent-function 1)) (eval . (put 'test-assert 'scheme-indent-function 1)) (eval . (put 'test-assertm 'scheme-indent-function 1)) + (eval . (put 'test-equalm 'scheme-indent-function 1)) (eval . (put 'test-equal 'scheme-indent-function 1)) (eval . (put 'test-eq 'scheme-indent-function 1)) (eval . (put 'call-with-input-string 'scheme-indent-function 1)) diff --git a/Makefile.am b/Makefile.am index 4b5a29a72d..7c07d1b2b9 100644 --- a/Makefile.am +++ b/Makefile.am @@ -5,6 +5,7 @@ # Copyright © 2016 Mathieu Lirzin <mthl@gnu.org> # Copyright © 2016, 2017 Mark H Weaver <mhw@netris.org> # Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com> +# Copyright © 2017 Leo Famulari <leo@famulari.name> # # This file is part of GNU Guix. # @@ -160,7 +161,6 @@ MODULES = \ guix/scripts/import/gnu.scm \ guix/scripts/import/nix.scm \ guix/scripts/import/hackage.scm \ - guix/scripts/import/stackage.scm \ guix/scripts/import/elpa.scm \ guix/scripts/environment.scm \ guix/scripts/publish.scm \ @@ -185,7 +185,8 @@ MODULES += \ guix/import/stackage.scm \ guix/scripts/import/crate.scm \ guix/scripts/import/gem.scm \ - guix/scripts/import/pypi.scm + guix/scripts/import/pypi.scm \ + guix/scripts/import/stackage.scm endif @@ -224,7 +225,8 @@ AUX_FILES = \ EXAMPLES = \ gnu/system/examples/bare-bones.tmpl \ gnu/system/examples/desktop.tmpl \ - gnu/system/examples/lightweight-desktop.tmpl + gnu/system/examples/lightweight-desktop.tmpl \ + gnu/system/examples/vm-image.tmpl GOBJECTS = $(MODULES:%.scm=%.go) guix/config.go $(dist_noinst_DATA:%.scm=%.go) @@ -571,12 +573,21 @@ BINARY_TARBALLS = \ # Systems supported by GuixSD. GUIXSD_SUPPORTED_SYSTEMS ?= x86_64-linux i686-linux +# Systems for which we build GuixSD VMs. +GUIXSD_VM_SYSTEMS ?= x86_64-linux + # Prefix of the GuixSD installation image file name. GUIXSD_IMAGE_BASE = guixsd-usb-install-$(PACKAGE_VERSION) +# Prefix of the GuixSD VM image file name. +GUIXSD_VM_IMAGE_BASE = guixsd-vm-image-$(PACKAGE_VERSION) + # Size of the installation image (for x86_64 typically). GUIXSD_INSTALLATION_IMAGE_SIZE ?= 950MiB +# Size of the VM image (for x86_64 typically). +GUIXSD_VM_IMAGE_SIZE ?= 2GiB + # The release process works in several phases: # # 0. We assume the developer created a 'vX.Y' tag. @@ -589,7 +600,10 @@ GUIXSD_INSTALLATION_IMAGE_SIZE ?= 950MiB # # This 'release' target takes care of everything and copies the resulting # files to $(releasedir). -release: distcheck +# +# XXX: Depend on 'dist' rather than 'distcheck' to work around the Gettext +# issue described at <https://savannah.gnu.org/bugs/index.php?51027>. +release: dist cd po; git checkout . @if ! git diff-index --quiet HEAD; then \ echo "There are uncommitted changes; stopping." >&2 ; \ @@ -617,6 +631,7 @@ release: distcheck for system in $(GUIXSD_SUPPORTED_SYSTEMS) ; do \ image=`$(top_builddir)/pre-inst-env \ guix system disk-image \ + --system=$$system \ --image-size=$(GUIXSD_INSTALLATION_IMAGE_SIZE) \ gnu/system/install.scm` ; \ if [ ! -f "$$image" ] ; then \ @@ -627,6 +642,20 @@ release: distcheck mv "$(releasedir)/$(GUIXSD_IMAGE_BASE).$$system.xz.tmp" \ "$(releasedir)/$(GUIXSD_IMAGE_BASE).$$system.xz" ; \ done + for system in $(GUIXSD_VM_SYSTEMS) ; do \ + image=`$(top_builddir)/pre-inst-env \ + guix system vm-image \ + --system=$$system \ + --image-size=$(GUIXSD_VM_IMAGE_SIZE) \ + gnu/system/examples/vm-image.tmpl` ; \ + if [ ! -f "$$image" ] ; then \ + echo "failed to produced GuixSD VM image for $$system" >&2 ; \ + exit 1 ; \ + fi ; \ + xz < "$$image" > "$(releasedir)/$(GUIXSD_VM_IMAGE_BASE).$$system.xz.tmp" ; \ + mv "$(releasedir)/$(GUIXSD_VM_IMAGE_BASE).$$system.xz.tmp" \ + "$(releasedir)/$(GUIXSD_VM_IMAGE_BASE).$$system.xz" ; \ + done @echo @echo "Congratulations! All the release files are now in $(releasedir)." @echo diff --git a/build-aux/hydra/gnu-system.scm b/build-aux/hydra/gnu-system.scm index 507c6abe0e..b1faa2265a 100644 --- a/build-aux/hydra/gnu-system.scm +++ b/build-aux/hydra/gnu-system.scm @@ -111,7 +111,7 @@ SYSTEM." ;; chain.) (list gcc-4.8 gcc-4.9 gcc-5 glibc binutils gmp mpfr mpc coreutils findutils diffutils patch sed grep - gawk gnu-gettext hello guile-2.0 zlib gzip xz + gawk gnu-gettext hello guile-2.0 guile-2.2 zlib gzip xz %bootstrap-binaries-tarball %binutils-bootstrap-tarball (%glibc-bootstrap-tarball) diff --git a/doc/guix.texi b/doc/guix.texi index 5227ad4ba0..b4a59e793a 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -35,7 +35,9 @@ Copyright @copyright{} 2017 Mathieu Othacehe@* Copyright @copyright{} 2017 Federico Beffa@* Copyright @copyright{} 2017 Carlo Zancanaro@* Copyright @copyright{} 2017 Thomas Danckaert@* -Copyright @copyright{} 2017 humanitiesNerd +Copyright @copyright{} 2017 humanitiesNerd@* +Copyright @copyright{} 2017 Christopher Allan Webber@* +Copyright @copyright{} 2017 Marius Bakke Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or @@ -2892,6 +2894,10 @@ package definition using the @command{guix edit} command more information on how to test package definitions, and @ref{Invoking guix lint}, for information on how to check a definition for style conformance. +@vindex GUIX_PACKAGE_PATH +Lastly, @pxref{Package Modules}, for information +on how to extend the distribution by adding your own package definitions +to @code{GUIX_PACKAGE_PATH}. Finally, updating the package definition to a new upstream version can be partly automated by the @command{guix refresh} command @@ -3353,23 +3359,8 @@ These build systems can also be used to produce executable programs, or lisp images which contain a set of packages pre-loaded. The build system uses naming conventions. For binary packages, the -package itself as well as its run-time dependencies should begin their -name with the lisp implementation, such as @code{sbcl-} for -@code{asdf-build-system/sbcl}. Beginning the input name with this -prefix will allow the build system to encode its location into the -resulting library, so that the input can be found at run-time. - -If dependencies are used only for tests, it is convenient to use a -different prefix in order to avoid having a run-time dependency on such -systems. For example, - -@example -(define-public sbcl-bordeaux-threads - (package - ... - (native-inputs `(("tests:cl-fiveam" ,sbcl-fiveam))) - ...)) -@end example +package name should be prefixed with the lisp implementation, such as +@code{sbcl-} for @code{asdf-build-system/sbcl}. Additionally, the corresponding source package should be labeled using the same convention as python packages (see @ref{Python Modules}), using @@ -3389,7 +3380,16 @@ expressions to be passed as the @code{#:entry-program} argument. If the system is not defined within its own @code{.asd} file of the same name, then the @code{#:asd-file} parameter should be used to specify -which file the system is defined in. +which file the system is defined in. Furthermore, if the package +defines a system for its tests in a separate file, it will be loaded +before the tests are run if it is specified by the +@code{#:test-asd-file} parameter. If it is not set, the files +@code{<system>-tests.asd}, @code{<system>-test.asd}, @code{tests.asd}, +and @code{test.asd} will be tried if they exist. + +If for some reason the package must be named in a different way than the +naming conventions suggest, the @code{#:asd-system-name} parameter can +be used to specify the name of the system. @end defvr @@ -7315,14 +7315,15 @@ copy the image with: @example dd if=guixsd-usb-install-@value{VERSION}.x86_64 of=/dev/sdX +sync @end example Access to @file{/dev/sdX} usually requires root privileges. @end enumerate Once this is done, you should be able to reboot the system and boot from -the USB stick. The latter usually requires you to get in the BIOS' boot -menu, where you can choose to boot from the USB stick. +the USB stick. The latter usually requires you to get in the BIOS' or +UEFI boot menu, where you can choose to boot from the USB stick. @xref{Installing GuixSD in a VM}, if, instead, you would like to install GuixSD in a virtual machine (VM). @@ -7446,6 +7447,17 @@ ping -c 3 gnu.org Setting up network access is almost always a requirement because the image does not contain all the software and tools that may be needed. +@cindex installing over SSH +If you want to, you can continue the installation remotely by starting +an SSH server: + +@example +herd start ssh-daemon +@end example + +Make sure to either set a password with @command{passwd}, or configure +OpenSSH public key authentication before logging in. + @subsubsection Disk Partitioning Unless this has already been done, the next step is to partition, and @@ -7465,6 +7477,17 @@ install BIOS-based GRUB (which is the default), make sure a BIOS Boot Partition is available (@pxref{BIOS installation,,, grub, GNU GRUB manual}). +@cindex EFI, installation +@cindex UEFI, installation +@cindex ESP, EFI system partition +If you instead wish to use EFI-based GRUB, a FAT32 @dfn{EFI System Partition} +(ESP) is required. This partition should be mounted at @file{/boot/efi} and +must have the @code{esp} flag set. E.g., for @command{parted}: + +@example +parted /dev/sda set 1 esp on +@end example + Once you are done partitioning the target hard disk drive, you have to create a file system on the relevant partition(s)@footnote{Currently GuixSD only supports ext4 and btrfs file systems. In particular, code @@ -7504,6 +7527,11 @@ root partition): mount LABEL=my-root /mnt @end example +Also mount any other partitions you would like to use on the target +system relative to this path. If you have @file{/boot} on a separate +partition for example, mount it at @file{/mnt/boot} now so it is found +by @code{guix system init} afterwards. + Finally, if you plan to use one or more swap partitions (@pxref{Memory Concepts, swap space,, libc, The GNU C Library Reference Manual}), make sure to initialize them with @command{mkswap}. Assuming you have one @@ -7578,7 +7606,8 @@ in particular: @itemize @item Make sure the @code{grub-configuration} form refers to the device you -want to install GRUB on. +want to install GRUB on. You also need to specify the @code{grub-efi} +package if you wish to use native UEFI boot. @item Be sure that your partition labels match the value of their respective @@ -7628,8 +7657,11 @@ good. @subsection Installing GuixSD in a Virtual Machine @cindex virtual machine, GuixSD installation -If you'd like to install GuixSD in a virtual machine (VM) rather than on -your beloved machine, this section is for you. +@cindex virtual private server (VPS) +@cindex VPS (virtual private server) +If you'd like to install GuixSD in a virtual machine (VM) or on a +virtual private server (VPS) rather than on your beloved machine, this +section is for you. To boot a @uref{http://qemu.org/,QEMU} VM for installing GuixSD in a disk image, follow these steps: @@ -7864,7 +7896,7 @@ management, power management, and more, would look like this: @include os-config-desktop.texi @end lisp -A graphical environment with a choice of lightweight window managers +A graphical UEFI system with a choice of lightweight window managers instead of full-blown desktop environments would look like this: @lisp @@ -14617,6 +14649,31 @@ Defaults to @samp{#f}. @end deftypevr + +The @code{(gnu services pm)} module provides an interface to +thermald, a CPU frequency scaling service which helps prevent overheating. + +@defvr {Scheme Variable} thermald-service-type +This is the service type for +@uref{https://01.org/linux-thermal-daemon/, thermald}, the Linux +Thermal Daemon, which is responsible for controlling the thermal state +of processors and preventing overheating. +@end defvr + +@deftp {Data Type} thermald-configuration +Data type representing the configuration of @code{thermald-service-type}. + +@table @asis +@item @code{ignore-cpuid-check?} (default: @code{#f}) +Ignore cpuid check for supported CPU models. + +@item @code{thermald} (default: @var{thermald}) +Package object of thermald. + +@end table +@end deftp + + @node Miscellaneous Services @subsubsection Miscellaneous Services @@ -14906,6 +14963,19 @@ $ export SSL_CERT_FILE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt" $ export GIT_SSL_CAINFO="$SSL_CERT_FILE" @end example +As another example, R requires the @code{CURL_CA_BUNDLE} environment +variable to point to a certificate bundle, so you would have to run +something like this: + +@example +$ guix package -i nss-certs +$ export CURL_CA_BUNDLE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt" +@end example + +For other applications you may want to look up the required environment +variable in the relevant documentation. + + @node Name Service Switch @subsection Name Service Switch @@ -15224,7 +15294,38 @@ The number of seconds to wait for keyboard input before booting. Set to The @code{grub-theme} object describing the theme to use. @item @code{grub} (default: @code{grub}) -The GRUB package to use. +@cindex EFI, bootloader +@cindex UEFI, bootloader +@cindex BIOS, bootloader +The GRUB package to use. Currently either @code{grub}, for ``legacy'' +x86 BIOS systems, or @code{grub-efi}, for modern systems using the +@dfn{Unified Extensible Firmware Interface} (UEFI). + +@item @code{terminal-outputs} (default: @code{'gfxterm}) +The output terminals used for the GRUB boot menu, as a list of symbols. +These values are accepted: @code{console}, @code{serial}, +@code{serial_@{0-3@}}, @code{gfxterm}, @code{vga_text}, @code{mda_text}, +@code{morse}, and @code{pkmodem}. This field corresponds to the GRUB +variable GRUB_TERMINAL_OUTPUT (@pxref{Simple configuration,,, grub,GNU +GRUB manual}). + +@item @code{terminal-inputs} (default: @code{'()}) +The input terminals used for the GRUB boot menu, as a list of symbols. +The default is the native platform terminal as determined by GRUB at +run-time. These values are accepted: @code{console}, @code{serial}, +@code{serial_@{0-3@}}, @code{at_keyboard}, and @code{usb_keyboard}. +This field corresponds to the GRUB variable GRUB_TERMINAL_INPUT +(@pxref{Simple configuration,,, grub,GNU GRUB manual}). + +@item @code{serial-unit} (default: @code{#f}) +The serial unit used by GRUB, as an integer from 0 to 3. The default +value is chosen by GRUB at run-time; currently GRUB chooses 0, which +corresponds to COM1 (@pxref{Serial terminal,,, grub,GNU GRUB manual}). + +@item @code{serial-speed} (default: @code{#f}) +The speed of the serial interface, as an integer. The default value is +chosen by GRUB at run-time; currently GRUB chooses 9600@tie{}bps +(@pxref{Serial terminal,,, grub,GNU GRUB manual}). @end table @end deftp @@ -15623,17 +15724,21 @@ example graph. @subsection Running GuixSD in a Virtual Machine @cindex virtual machine -One way to run GuixSD in a virtual machine (VM) is to build a GuixSD -virtual machine image using @command{guix system vm-image} -(@pxref{Invoking guix system}). The returned image is in qcow2 format, -which the @uref{http://qemu.org/, QEMU emulator} can efficiently use. +To run GuixSD in a virtual machine (VM), one can either use the +pre-built GuixSD VM image distributed at +@indicateurl{ftp://alpha.gnu.org/guix/guixsd-vm-image-@value{VERSION}.@var{system}.tar.xz} +, or build their own virtual machine image using @command{guix system +vm-image} (@pxref{Invoking guix system}). The returned image is in +qcow2 format, which the @uref{http://qemu.org/, QEMU emulator} can +efficiently use. @cindex QEMU -To run the image in QEMU, copy it out of the store (@pxref{The Store}) -and give yourself permission to write to the copy. When invoking QEMU, -you must choose a system emulator that is suitable for your hardware -platform. Here is a minimal QEMU invocation that will boot the result -of @command{guix system vm-image} on x86_64 hardware: +If you built your own image, you must copy it out of the store +(@pxref{The Store}) and give yourself permission to write to the copy +before you can use it. When invoking QEMU, you must choose a system +emulator that is suitable for your hardware platform. Here is a minimal +QEMU invocation that will boot the result of @command{guix system +vm-image} on x86_64 hardware: @example $ qemu-system-x86_64 \ @@ -15679,7 +15784,7 @@ to your system definition and start the VM using @command{`guix system vm config.scm` -net user}. An important caveat of using @command{-net user} for networking is that @command{ping} will not work, because it uses the ICMP protocol. You'll have to use a different command to check for -network connectivity, like for example @command{curl}. +network connectivity, for example @command{guix download}. @subsubsection Connecting Through SSH @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2015 Joshua S. Grant <jgrant@parenthetical.io> +;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -34,7 +35,8 @@ '((gnu system) (gnu system mapped-devices) (gnu system file-systems) - (gnu system grub) ; 'grub-configuration' + (gnu bootloader) + (gnu bootloader grub) (gnu system pam) (gnu system shadow) ; 'user-account' (gnu system linux-initrd) diff --git a/gnu/bootloader.scm b/gnu/bootloader.scm new file mode 100644 index 0000000000..4e77974d31 --- /dev/null +++ b/gnu/bootloader.scm @@ -0,0 +1,127 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2017 David Craven <david@craven.ch> +;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com> +;;; Copyright © 2017 Leo Famulari <leo@famulari.name> +;;; +;;; 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 bootloader) + #:use-module (guix discovery) + #:use-module (guix records) + #:use-module (guix ui) + #:use-module (srfi srfi-1) + #:export (bootloader + bootloader? + bootloader-name + bootloader-package + bootloader-installer + bootloader-configuration-file + bootloader-configuration-file-generator + + bootloader-configuration + bootloader-configuration? + bootloader-configuration-bootloader + bootloader-configuration-device + bootloader-configuration-menu-entries + bootloader-configuration-default-entry + bootloader-configuration-timeout + bootloader-configuration-theme + bootloader-configuration-terminal-outputs + bootloader-configuration-terminal-inputs + bootloader-configuration-serial-unit + bootloader-configuration-serial-speed + bootloader-configuration-additional-configuration + + %bootloaders + lookup-bootloader-by-name)) + + +;;; +;;; Bootloader record. +;;; + +;; The <bootloader> record contains fields expressing how the bootloader +;; should be installed. Every bootloader in gnu/bootloader/ directory +;; has to be described by this record. + +(define-record-type* <bootloader> + bootloader make-bootloader + bootloader? + (name bootloader-name) + (package bootloader-package) + (installer bootloader-installer) + (configuration-file bootloader-configuration-file) + (configuration-file-generator bootloader-configuration-file-generator)) + + +;;; +;;; Bootloader configuration record. +;;; + +;; The <bootloader-configuration> record contains bootloader independant +;; configuration used to fill bootloader configuration file. + +(define-record-type* <bootloader-configuration> + bootloader-configuration make-bootloader-configuration + bootloader-configuration? + (bootloader bootloader-configuration-bootloader) ; <bootloader> + (device bootloader-configuration-device ; string + (default #f)) + (menu-entries bootloader-configuration-menu-entries ; list of <boot-parameters> + (default '())) + (default-entry bootloader-configuration-default-entry ; integer + (default 0)) + (timeout bootloader-configuration-timeout ; seconds as integer + (default 5)) + (theme bootloader-configuration-theme ; bootloader-specific theme + (default #f)) + (terminal-outputs bootloader-configuration-terminal-outputs ; list of symbols + (default '(gfxterm))) + (terminal-inputs bootloader-configuration-terminal-inputs ; list of symbols + (default '())) + (serial-unit bootloader-configuration-serial-unit ; integer | #f + (default #f)) + (serial-speed bootloader-configuration-serial-speed ; integer | #f + (default #f)) + (additional-configuration bootloader-configuration-additional-configuration ; record + (default #f))) + + +;;; +;;; Bootloaders. +;;; + +(define (bootloader-modules) + "Return the list of bootloader modules." + (all-modules (map (lambda (entry) + `(,entry . "gnu/bootloader")) + %load-path))) + +(define %bootloaders + ;; The list of publically-known bootloaders. + (delay (fold-module-public-variables (lambda (obj result) + (if (bootloader? obj) + (cons obj result) + result)) + '() + (bootloader-modules)))) + +(define (lookup-bootloader-by-name name) + "Return the bootloader called NAME." + (or (find (lambda (bootloader) + (eq? name (bootloader-name bootloader))) + (force %bootloaders)) + (leave (G_ "~a: no such bootloader~%") name))) diff --git a/gnu/bootloader/extlinux.scm b/gnu/bootloader/extlinux.scm new file mode 100644 index 0000000000..67b8815d40 --- /dev/null +++ b/gnu/bootloader/extlinux.scm @@ -0,0 +1,120 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2017 David Craven <david@craven.ch> +;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com> +;;; +;;; 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 bootloader extlinux) + #:use-module (gnu bootloader) + #:use-module (gnu system) + #:use-module (gnu packages bootloaders) + #:use-module (guix gexp) + #:use-module (guix monads) + #:use-module (guix records) + #:use-module (guix utils) + #:export (extlinux-bootloader)) + +(define* (extlinux-configuration-file config entries + #:key + (system (%current-system)) + (old-entries '())) + "Return the U-Boot configuration file corresponding to CONFIG, a +<u-boot-configuration> object, and where the store is available at STORE-FS, a +<file-system> object. OLD-ENTRIES is taken to be a list of menu entries +corresponding to old generations of the system." + + (define all-entries + (append entries (bootloader-configuration-menu-entries config))) + + (define (boot-parameters->gexp params) + (let ((label (boot-parameters-label params)) + (kernel (boot-parameters-kernel params)) + (kernel-arguments (boot-parameters-kernel-arguments params)) + (initrd (boot-parameters-initrd params))) + #~(format port "LABEL ~a + MENU LABEL ~a + KERNEL ~a + FDTDIR ~a/lib/dtbs + INITRD ~a + APPEND ~a +~%" + #$label #$label + #$kernel #$kernel #$initrd + (string-join (list #$@kernel-arguments))))) + + (define builder + #~(call-with-output-file #$output + (lambda (port) + (let ((timeout #$(bootloader-configuration-timeout config))) + (format port "# This file was generated from your GuixSD configuration. Any changes +# will be lost upon reconfiguration. +UI menu.c32 +PROMPT ~a +TIMEOUT ~a~%" + (if (> timeout 0) 1 0) + ;; timeout is expressed in 1/10s of seconds. + (* 10 timeout)) + #$@(map boot-parameters->gexp all-entries) + + #$@(if (pair? old-entries) + #~((format port "~%") + #$@(map boot-parameters->gexp old-entries) + (format port "~%")) + #~()))))) + + (gexp->derivation "extlinux.conf" builder)) + + + + +;;; +;;; Install procedures. +;;; + +(define dd + #~(lambda (bs count if of) + (zero? (system* "dd" + (string-append "bs=" (number->string bs)) + (string-append "count=" (number->string count)) + (string-append "if=" if) + (string-append "of=" of))))) + +(define install-extlinux + #~(lambda (bootloader device mount-point) + (let ((extlinux (string-append bootloader "/sbin/extlinux")) + (install-dir (string-append mount-point "/boot/extlinux")) + (syslinux-dir (string-append bootloader "/share/syslinux"))) + (for-each (lambda (file) + (install-file file install-dir)) + (find-files syslinux-dir "\\.c32$")) + + (unless (and (zero? (system* extlinux "--install" install-dir)) + (#$dd 440 1 (string-append syslinux-dir "/mbr.bin") device)) + (error "failed to install SYSLINUX"))))) + + + +;;; +;;; Bootloader definitions. +;;; + +(define extlinux-bootloader + (bootloader + (name 'extlinux) + (package syslinux) + (installer install-extlinux) + (configuration-file "/boot/extlinux/extlinux.conf") + (configuration-file-generator extlinux-configuration-file))) diff --git a/gnu/system/grub.scm b/gnu/bootloader/grub.scm index 58096429fe..49616b7164 100644 --- a/gnu/system/grub.scm +++ b/gnu/bootloader/grub.scm @@ -1,6 +1,8 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2016 Chris Marusich <cmmarusich@gmail.com> +;;; Copyright © 2017 Leo Famulari <leo@famulari.name> +;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -17,7 +19,7 @@ ;;; 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 system grub) +(define-module (gnu bootloader grub) #:use-module (guix store) #:use-module (guix packages) #:use-module (guix derivations) @@ -27,6 +29,7 @@ #:use-module (guix download) #:use-module (gnu artwork) #:use-module (gnu system) + #:use-module (gnu bootloader) #:use-module (gnu system file-systems) #:autoload (gnu packages bootloaders) (grub) #:autoload (gnu packages compression) (gzip) @@ -49,15 +52,10 @@ %background-image %default-theme - grub-configuration - grub-configuration? - grub-configuration-device - grub-configuration-grub + grub-bootloader + grub-efi-bootloader - menu-entry - menu-entry? - - grub-configuration-file)) + grub-configuration)) ;;; Commentary: ;;; @@ -105,21 +103,6 @@ denoting a file name." (color-highlight '((fg . yellow) (bg . black))) (color-normal '((fg . light-gray) (bg . black))))) ;XXX: #x303030 -(define-record-type* <grub-configuration> - grub-configuration make-grub-configuration - grub-configuration? - (grub grub-configuration-grub ; package - (default (@ (gnu packages bootloaders) grub))) - (device grub-configuration-device) ; string - (menu-entries grub-configuration-menu-entries ; list - (default '())) - (default-entry grub-configuration-default-entry ; integer - (default 0)) - (timeout grub-configuration-timeout ; integer - (default 5)) - (theme grub-configuration-theme ; <grub-theme> - (default %default-theme))) - (define-record-type* <menu-entry> menu-entry make-menu-entry menu-entry? @@ -138,6 +121,11 @@ denoting a file name." ;;; Background image & themes. ;;; +(define (bootloader-theme config) + "Return user defined theme in CONFIG if defined or %default-theme +otherwise." + (or (bootloader-configuration-theme config) %default-theme)) + (define* (svg->png svg #:key width height) "Build a PNG of HEIGHT x WIDTH from SVG." (gexp->derivation "grub-image.png" @@ -162,7 +150,8 @@ WIDTH/HEIGHT, or #f if none was found." (let* ((ratio (/ width height)) (image (find (lambda (image) (= (grub-image-aspect-ratio image) ratio)) - (grub-theme-images (grub-configuration-theme config))))) + (grub-theme-images + (bootloader-theme config))))) (if image (svg->png (grub-image-file image) #:width width #:height height) @@ -199,13 +188,18 @@ system string---e.g., \"x86_64-linux\"." insmod vbe insmod vga fi - - terminal_output gfxterm " "")) + (define (setup-gfxterm config font-file) + (if (memq 'gfxterm (bootloader-configuration-terminal-outputs config)) + #~(format #f "if loadfont ~a; then + setup_gfxterm +fi~%" #$font-file) + "")) + (define (theme-colors type) - (let* ((theme (grub-configuration-theme config)) + (let* ((theme (bootloader-theme config)) (colors (type theme))) (string-append (symbol->string (assoc-ref colors 'fg)) "/" (symbol->string (assoc-ref colors 'bg))))) @@ -222,9 +216,8 @@ function setup_gfxterm {~a} # Set 'root' to the partition that contains /gnu/store. ~a -if loadfont ~a; then - setup_gfxterm -fi +~a +~a insmod png if background_image ~a; then @@ -236,7 +229,8 @@ else fi~%" #$setup-gfxterm-body #$(grub-root-search store-device font-file) - #$font-file + #$(setup-gfxterm config font-file) + #$(grub-setup-io config) #$(strip-mount-point store-mount-point image) #$(theme-colors grub-theme-color-normal) @@ -247,6 +241,57 @@ fi~%" ;;; Configuration file. ;;; +(define (grub-setup-io config) + "Return GRUB commands to configure the input / output interfaces. The result +is a string that can be inserted in grub.cfg." + (let* ((symbols->string (lambda (list) + (string-join (map symbol->string list) " "))) + (outputs (bootloader-configuration-terminal-outputs config)) + (inputs (bootloader-configuration-terminal-inputs config)) + (unit (bootloader-configuration-serial-unit config)) + (speed (bootloader-configuration-serial-speed config)) + + ;; Respectively, GRUB_TERMINAL_OUTPUT and GRUB_TERMINAL_INPUT, + ;; as documented in GRUB manual section "Simple Configuration + ;; Handling". + (valid-outputs '(console serial serial_0 serial_1 serial_2 serial_3 + gfxterm vga_text mda_text morse spkmodem)) + (valid-inputs '(console serial serial_0 serial_1 serial_2 serial_3 + at_keyboard usb_keyboard)) + + (io (string-append + "terminal_output " + (symbols->string + (map + (lambda (output) + (if (memq output valid-outputs) output #f)) outputs)) "\n" + (if (null? inputs) + "" + (string-append + "terminal_input " + (symbols->string + (map + (lambda (input) + (if (memq input valid-inputs) input #f)) inputs)) "\n")) + ;; UNIT and SPEED are arguments to the same GRUB command + ;; ("serial"), so we process them together. + (if (or unit speed) + (string-append + "serial" + (if unit + ;; COM ports 1 through 4 + (if (and (exact-integer? unit) (<= unit 3) (>= unit 0)) + (string-append " --unit=" (number->string unit)) + #f) + "") + (if speed + (if (exact-integer? speed) + (string-append " --speed=" (number->string speed)) + #f) + "")) + "")))) + (format #f "~a" io))) + (define (grub-root-search device file) "Return the GRUB 'search' command to look for DEVICE, which contains FILE, a gexp. The result is a gexp that can be inserted in the grub.cfg-generation @@ -282,12 +327,13 @@ code." (system (%current-system)) (old-entries '())) "Return the GRUB configuration file corresponding to CONFIG, a -<grub-configuration> object, and where the store is available at STORE-FS, a -<file-system> object. OLD-ENTRIES is taken to be a list of menu entries -corresponding to old generations of the system." +<bootloader-configuration> object, and where the store is available at +STORE-FS, a <file-system> object. OLD-ENTRIES is taken to be a list of menu +entries corresponding to old generations of the system." (define all-entries - (append (map boot-parameters->menu-entry entries) - (grub-configuration-menu-entries config))) + (map boot-parameters->menu-entry + (append entries + (bootloader-configuration-menu-entries config)))) (define entry->gexp (match-lambda @@ -326,8 +372,8 @@ corresponding to old generations of the system." (format port " set default=~a set timeout=~a~%" - #$(grub-configuration-default-entry config) - #$(grub-configuration-timeout config)) + #$(bootloader-configuration-default-entry config) + #$(bootloader-configuration-timeout config)) #$@(map entry->gexp all-entries) #$@(if (pair? old-entries) @@ -339,4 +385,64 @@ submenu \"GNU system, old configurations...\" {~%") (gexp->derivation "grub.cfg" builder))) + + +;;; +;;; Install procedures. +;;; + +(define install-grub + #~(lambda (bootloader device mount-point) + ;; Install GRUB on DEVICE which is mounted at MOUNT-POINT. + (let ((grub (string-append bootloader "/sbin/grub-install")) + (install-dir (string-append mount-point "/boot"))) + ;; Tell 'grub-install' that there might be a LUKS-encrypted /boot or + ;; root partition. + (setenv "GRUB_ENABLE_CRYPTODISK" "y") + + (unless (zero? (system* grub "--no-floppy" + "--boot-directory" install-dir + device)) + (error "failed to install GRUB"))))) + + + +;;; +;;; Bootloader definitions. +;;; + +(define grub-bootloader + (bootloader + (name 'grub) + (package grub) + (installer install-grub) + (configuration-file "/boot/grub/grub.cfg") + (configuration-file-generator grub-configuration-file))) + +(define* grub-efi-bootloader + (bootloader + (inherit grub-bootloader) + (name 'grub-efi) + (package grub-efi))) + + +;;; +;;; Compatibility macros. +;;; + +(define-syntax grub-configuration + (syntax-rules (grub) + ((_ (grub package) fields ...) + (if (eq? package grub) + (bootloader-configuration + (bootloader grub-bootloader) + fields ...) + (bootloader-configuration + (bootloader grub-efi-bootloader) + fields ...))) + ((_ fields ...) + (bootloader-configuration + (bootloader grub-bootloader) + fields ...)))) + ;;; grub.scm ends here diff --git a/gnu/build/activation.scm b/gnu/build/activation.scm index beee56d437..a1d2a9cc7d 100644 --- a/gnu/build/activation.scm +++ b/gnu/build/activation.scm @@ -227,7 +227,11 @@ numeric gid or #f." #:supplementary-groups supplementary-groups #:comment comment #:home home + + ;; Home directories of non-system accounts are created by + ;; 'activate-user-home'. #:create-home? (and create-home? system?) + #:shell shell #:password password) @@ -282,7 +286,10 @@ they already exist." (match-lambda ((name uid group supplementary-groups comment home create-home? shell password system?) - (unless (or (not home) (directory-exists? home)) + ;; The home directories of system accounts are created during + ;; activation, not here. + (unless (or (not home) (not create-home?) system? + (directory-exists? home)) (let* ((pw (getpwnam name)) (uid (passwd:uid pw)) (gid (passwd:gid pw))) diff --git a/gnu/build/install.scm b/gnu/build/install.scm index 5cb6055a0c..9e30c0d23e 100644 --- a/gnu/build/install.scm +++ b/gnu/build/install.scm @@ -22,8 +22,7 @@ #:use-module (guix build store-copy) #:use-module (srfi srfi-26) #:use-module (ice-9 match) - #:export (install-grub - install-grub-config + #:export (install-boot-config evaluate-populate-directive populate-root-file-system reset-timestamps @@ -39,36 +38,17 @@ ;;; ;;; Code: -(define (install-grub grub.cfg device mount-point) - "Install GRUB with GRUB.CFG on DEVICE, which is assumed to be mounted on -MOUNT-POINT. - -Note that the caller must make sure that GRUB.CFG is registered as a GC root -so that the fonts, background images, etc. referred to by GRUB.CFG are not -GC'd." - (install-grub-config grub.cfg mount-point) - - ;; Tell 'grub-install' that there might be a LUKS-encrypted /boot or root - ;; partition. - (setenv "GRUB_ENABLE_CRYPTODISK" "y") - - (unless (zero? (system* "grub-install" "--no-floppy" - "--boot-directory" - (string-append mount-point "/boot") - device)) - (error "failed to install GRUB"))) - -(define (install-grub-config grub.cfg mount-point) - "Atomically copy GRUB.CFG into boot/grub/grub.cfg on the MOUNT-POINT. Note -that the caller must make sure that GRUB.CFG is registered as a GC root so -that the fonts, background images, etc. referred to by GRUB.CFG are not GC'd." - (let* ((target (string-append mount-point "/boot/grub/grub.cfg")) +(define (install-boot-config bootcfg bootcfg-location mount-point) + "Atomically copy BOOTCFG into BOOTCFG-LOCATION on the MOUNT-POINT. Note +that the caller must make sure that BOOTCFG is registered as a GC root so +that the fonts, background images, etc. referred to by BOOTCFG are not GC'd." + (let* ((target (string-append mount-point bootcfg-location)) (pivot (string-append target ".new"))) (mkdir-p (dirname target)) - ;; Copy GRUB.CFG instead of just symlinking it, because symlinks won't + ;; Copy BOOTCFG instead of just symlinking it, because symlinks won't ;; work when /boot is on a separate partition. Do that atomically. - (copy-file grub.cfg pivot) + (copy-file bootcfg pivot) (rename-file pivot target))) (define (evaluate-populate-directive directive target) diff --git a/gnu/build/vm.scm b/gnu/build/vm.scm index 1eb9a4c45e..57619764ce 100644 --- a/gnu/build/vm.scm +++ b/gnu/build/vm.scm @@ -3,6 +3,7 @@ ;;; Copyright © 2016 Christopher Allan Webber <cwebber@dustycloud.org> ;;; Copyright © 2016 Leo Famulari <leo@famulari.name> ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com> +;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -26,6 +27,7 @@ #:use-module (gnu build linux-boot) #:use-module (gnu build install) #:use-module (guix records) + #:use-module (ice-9 format) #:use-module (ice-9 match) #:use-module (ice-9 regex) #:use-module (srfi srfi-1) @@ -41,7 +43,7 @@ partition-size partition-file-system partition-label - partition-bootable? + partition-flags partition-initializer root-partition-initializer @@ -141,7 +143,7 @@ the #:references-graphs parameter of 'derivation'." (size partition-size) (file-system partition-file-system (default "ext4")) (label partition-label (default #f)) - (bootable? partition-bootable? (default #f)) + (flags partition-flags (default '())) (initializer partition-initializer (default (const #t)))) (define (fold2 proc seed1 seed2 lst) ;TODO: factorize @@ -168,9 +170,10 @@ actual /dev name based on DEVICE." (cons* "mkpart" "primary" "ext2" (format #f "~aB" offset) (format #f "~aB" (+ offset (partition-size part))) - (if (partition-bootable? part) - `("set" ,(number->string index) "boot" "on") - '()))) + (append-map (lambda (flag) + (list "set" (number->string index) + (symbol->string flag) "on")) + (partition-flags part)))) (define (options partitions offset) (let loop ((partitions partitions) @@ -211,10 +214,10 @@ actual /dev name based on DEVICE." (define MS_BIND 4096) ; <sys/mounts.h> again! -(define* (format-partition partition type - #:key label) - "Create a file system TYPE on PARTITION. If LABEL is true, use that as the -volume name." +(define* (create-ext-file-system partition type + #:key label) + "Create an ext-family filesystem of TYPE on PARTITION. If LABEL is true, +use that as the volume name." (format #t "creating ~a partition...\n" type) (unless (zero? (apply system* (string-append "mkfs." type) "-F" partition @@ -223,6 +226,28 @@ volume name." '()))) (error "failed to create partition"))) +(define* (create-fat-file-system partition + #:key label) + "Create a FAT filesystem on PARTITION. The number of File Allocation Tables +will be determined based on filesystem size. If LABEL is true, use that as the +volume name." + (format #t "creating FAT partition...\n") + (unless (zero? (apply system* "mkfs.fat" partition + (if label + `("-n" ,label) + '()))) + (error "failed to create FAT partition"))) + +(define* (format-partition partition type + #:key label) + "Create a file system TYPE on PARTITION. If LABEL is true, use that as the +volume name." + (cond ((string-prefix? "ext" type) + (create-ext-file-system partition type #:label label)) + ((or (string-prefix? "fat" type) (string= "vfat" type)) + (create-fat-file-system partition #:label label)) + (else (error "Unsupported file system.")))) + (define (initialize-partition partition) "Format PARTITION, a <partition> object with a non-#f 'device' field, mount it, run its initializer, and unmount it." @@ -285,23 +310,65 @@ SYSTEM-DIRECTORY is the name of the directory of the 'system' derivation." (unless register-closures? (reset-timestamps target)))) -(define (register-grub.cfg-root target bootcfg) +(define (register-bootcfg-root target bootcfg) "On file system TARGET, register BOOTCFG as a GC root." (let ((directory (string-append target "/var/guix/gcroots"))) (mkdir-p directory) - (symlink bootcfg (string-append directory "/grub.cfg")))) + (symlink bootcfg (string-append directory "/bootcfg")))) + +(define (install-efi grub esp config-file) + "Write a self-contained GRUB EFI loader to the mounted ESP using CONFIG-FILE." + (let* ((system %host-type) + ;; Hard code the output location to a well-known path recognized by + ;; compliant firmware. See "3.5.1.1 Removable Media Boot Behaviour": + ;; http://www.uefi.org/sites/default/files/resources/UEFI%20Spec%202_6.pdf + (grub-mkstandalone (string-append grub "/bin/grub-mkstandalone")) + (efi-directory (string-append esp "/EFI/BOOT")) + ;; Map grub target names to boot file names. + (efi-targets (cond ((string-prefix? "x86_64" system) + '("x86_64-efi" . "BOOTX64.EFI")) + ((string-prefix? "i686" system) + '("i386-efi" . "BOOTIA32.EFI")) + ((string-prefix? "armhf" system) + '("arm-efi" . "BOOTARM.EFI")) + ((string-prefix? "aarch64" system) + '("arm64-efi" . "BOOTAA64.EFI"))))) + ;; grub-mkstandalone requires a TMPDIR to prepare the firmware image. + (setenv "TMPDIR" esp) + + (mkdir-p efi-directory) + (unless (zero? (system* grub-mkstandalone "-O" (car efi-targets) + "-o" (string-append efi-directory "/" + (cdr efi-targets)) + ;; Graft the configuration file onto the image. + (string-append "boot/grub/grub.cfg=" config-file))) + (error "failed to create GRUB EFI image")))) (define* (initialize-hard-disk device #:key - grub.cfg + bootloader-package + bootcfg + bootcfg-location + bootloader-installer + (grub-efi #f) (partitions '())) "Initialize DEVICE as a disk containing all the <partition> objects listed in PARTITIONS, and using BOOTCFG as its bootloader configuration file. Each partition is initialized by calling its 'initializer' procedure, passing it a directory name where it is mounted." + + (define (partition-bootable? partition) + "Return the first partition found with the boot flag set." + (member 'boot (partition-flags partition))) + + (define (partition-esp? partition) + "Return the first EFI System Partition." + (member 'esp (partition-flags partition))) + (let* ((partitions (initialize-partition-table device partitions)) (root (find partition-bootable? partitions)) + (esp (find partition-esp? partitions)) (target "/fs")) (unless root (error "no bootable partition specified" partitions)) @@ -311,10 +378,38 @@ passing it a directory name where it is mounted." (display "mounting root partition...\n") (mkdir-p target) (mount (partition-device root) target (partition-file-system root)) - (install-grub grub.cfg device target) - - ;; Register GRUB.CFG as a GC root. - (register-grub.cfg-root target grub.cfg) + (install-boot-config bootcfg bootcfg-location target) + (when bootloader-installer + (display "installing bootloader...\n") + (bootloader-installer bootloader-package device target)) + + (when esp + ;; Mount the ESP somewhere and install GRUB UEFI image. + (let ((mount-point (string-append target "/boot/efi")) + (grub-config (string-append target "/tmp/grub-standalone.cfg"))) + (display "mounting EFI system partition...\n") + (mkdir-p mount-point) + (mount (partition-device esp) mount-point + (partition-file-system esp)) + + ;; Create a tiny configuration file telling the embedded grub + ;; where to load the real thing. + (call-with-output-file grub-config + (lambda (port) + (format port + "insmod part_msdos~@ + search --set=root --label gnu-disk-image~@ + configfile /boot/grub/grub.cfg~%"))) + + (display "creating EFI firmware image...") + (install-efi grub-efi mount-point grub-config) + (display "done.\n") + + (delete-file grub-config) + (umount mount-point))) + + ;; Register BOOTCFG as a GC root. + (register-bootcfg-root target bootcfg) (umount target))) diff --git a/gnu/local.mk b/gnu/local.mk index 28a283ab70..3ca546913c 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -36,6 +36,9 @@ GNU_SYSTEM_MODULES = \ gnu.scm \ %D%/artwork.scm \ + %D%/bootloader.scm \ + %D%/bootloader/grub.scm \ + %D%/bootloader/extlinux.scm \ %D%/packages.scm \ %D%/packages/abduco.scm \ %D%/packages/abiword.scm \ @@ -194,6 +197,7 @@ GNU_SYSTEM_MODULES = \ %D%/packages/idris.scm \ %D%/packages/idutils.scm \ %D%/packages/image.scm \ + %D%/packages/image-processing.scm \ %D%/packages/image-viewers.scm \ %D%/packages/imagemagick.scm \ %D%/packages/indent.scm \ @@ -356,6 +360,7 @@ GNU_SYSTEM_MODULES = \ %D%/packages/speech.scm \ %D%/packages/spice.scm \ %D%/packages/ssh.scm \ + %D%/packages/sssd.scm \ %D%/packages/stalonetray.scm \ %D%/packages/statistics.scm \ %D%/packages/storage.scm \ @@ -441,7 +446,6 @@ GNU_SYSTEM_MODULES = \ \ %D%/system.scm \ %D%/system/file-systems.scm \ - %D%/system/grub.scm \ %D%/system/install.scm \ %D%/system/linux-container.scm \ %D%/system/linux-initrd.scm \ @@ -497,6 +501,7 @@ dist_patch_DATA = \ %D%/packages/patches/antiword-CVE-2014-8123.patch \ %D%/packages/patches/apr-skip-getservbyname-test.patch \ %D%/packages/patches/artanis-fix-Makefile.in.patch \ + %D%/packages/patches/aspell-default-dict-dir.patch \ %D%/packages/patches/ath9k-htc-firmware-binutils.patch \ %D%/packages/patches/ath9k-htc-firmware-gcc.patch \ %D%/packages/patches/ath9k-htc-firmware-objcopy.patch \ @@ -515,7 +520,9 @@ dist_patch_DATA = \ %D%/packages/patches/byobu-writable-status.patch \ %D%/packages/patches/cairo-CVE-2016-9082.patch \ %D%/packages/patches/calibre-drop-unrar.patch \ + %D%/packages/patches/calibre-dont-load-remote-icons.patch \ %D%/packages/patches/calibre-no-updates-dialog.patch \ + %D%/packages/patches/calibre-use-packaged-feedparser.patch \ %D%/packages/patches/cdparanoia-fpic.patch \ %D%/packages/patches/cdrtools-3.01-mkisofs-isoinfo.patch \ %D%/packages/patches/ceph-disable-cpu-optimizations.patch \ @@ -641,12 +648,15 @@ dist_patch_DATA = \ %D%/packages/patches/graphite2-non-linear-classes-even-number.patch \ %D%/packages/patches/grep-timing-sensitive-test.patch \ %D%/packages/patches/gsl-test-i686.patch \ + %D%/packages/patches/gspell-dash-test.patch \ %D%/packages/patches/guile-1.8-cpp-4.5.patch \ %D%/packages/patches/guile-default-utf8.patch \ %D%/packages/patches/guile-linux-syscalls.patch \ %D%/packages/patches/guile-present-coding.patch \ %D%/packages/patches/guile-relocatable.patch \ %D%/packages/patches/guile-rsvg-pkgconfig.patch \ + %D%/packages/patches/guile-ssh-rexec-bug.patch \ + %D%/packages/patches/guile-ssh-double-free.patch \ %D%/packages/patches/gtk2-respect-GUIX_GTK2_PATH.patch \ %D%/packages/patches/gtk2-respect-GUIX_GTK2_IM_MODULE_FILE.patch \ %D%/packages/patches/gtk2-theme-paths.patch \ @@ -679,6 +689,9 @@ dist_patch_DATA = \ %D%/packages/patches/jasper-CVE-2017-6850.patch \ %D%/packages/patches/jbig2dec-ignore-testtest.patch \ %D%/packages/patches/jbig2dec-CVE-2016-9601.patch \ + %D%/packages/patches/jbig2dec-CVE-2017-7885.patch \ + %D%/packages/patches/jbig2dec-CVE-2017-7975.patch \ + %D%/packages/patches/jbig2dec-CVE-2017-7976.patch \ %D%/packages/patches/jq-CVE-2015-8863.patch \ %D%/packages/patches/kdbusaddons-kinit-file-name.patch \ %D%/packages/patches/khmer-use-libraries.patch \ @@ -834,8 +847,6 @@ dist_patch_DATA = \ %D%/packages/patches/netsurf-system-utf8proc.patch \ %D%/packages/patches/netsurf-y2038-tests.patch \ %D%/packages/patches/netsurf-longer-test-timeout.patch \ - %D%/packages/patches/networkmanager-qt-activeconnection-test-1.patch \ - %D%/packages/patches/networkmanager-qt-activeconnection-test-2.patch \ %D%/packages/patches/ngircd-handle-zombies.patch \ %D%/packages/patches/ninja-zero-mtime.patch \ %D%/packages/patches/node-9077.patch \ @@ -938,7 +949,9 @@ dist_patch_DATA = \ %D%/packages/patches/python2-pygobject-2-gi-info-type-error-domain.patch \ %D%/packages/patches/python-pygpgme-fix-pinentry-tests.patch \ %D%/packages/patches/python2-subprocess32-disable-input-test.patch \ + %D%/packages/patches/qemu-CVE-2017-7493.patch \ %D%/packages/patches/qt4-ldflags.patch \ + %D%/packages/patches/qtscript-disable-tests.patch \ %D%/packages/patches/quickswitch-fix-dmenu-check.patch \ %D%/packages/patches/rapicorn-isnan.patch \ %D%/packages/patches/ratpoison-shell.patch \ @@ -961,8 +974,6 @@ dist_patch_DATA = \ %D%/packages/patches/screen-fix-info-syntax-error.patch \ %D%/packages/patches/sdl-libx11-1.6.patch \ %D%/packages/patches/seq24-rename-mutex.patch \ - %D%/packages/patches/shadow-4.4-su-snprintf-fix.patch \ - %D%/packages/patches/shadow-CVE-2017-2616.patch \ %D%/packages/patches/slim-session.patch \ %D%/packages/patches/slim-config.patch \ %D%/packages/patches/slim-sigusr1.patch \ diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm index ef7bff10f3..aa6ccc0a73 100644 --- a/gnu/packages/admin.scm +++ b/gnu/packages/admin.scm @@ -17,6 +17,7 @@ ;;; Copyright © 2016 John Darrington <jmd@gnu.org> ;;; Copyright © 2017 Ben Sturmfels <ben@sturm.com.au> ;;; Copyright © 2017 Ethan R. Jones <doubleplusgood23@gmail.com> +;;; Copyright © 2017 Christopher Allan Webber <cwebber@dustycloud.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -80,7 +81,8 @@ #:use-module (gnu packages autotools) #:use-module (gnu packages gnome) #:use-module (gnu packages kerberos) - #:use-module (gnu packages gtk)) + #:use-module (gnu packages gtk) + #:use-module (gnu packages xml)) (define-public aide (package @@ -279,17 +281,15 @@ client and server, a telnet client and server, and an rsh client and server.") (define-public shadow (package (name "shadow") - (version "4.4") + (version "4.5") (source (origin (method url-fetch) (uri (string-append "https://github.com/shadow-maint/shadow/releases/" "download/" version "/shadow-" version ".tar.xz")) - (patches (search-patches "shadow-4.4-su-snprintf-fix.patch" - "shadow-CVE-2017-2616.patch")) (sha256 (base32 - "0g7hf55ar2pafg5g3ldx0fwzjk36wf4xb21p4ndanbjm3c2a9ab1")))) + "0hdpai78n63l3v3fgr3kkiqzhd0awrpfnnzz4mf7lmxdh61qb37w")))) (build-system gnu-build-system) (arguments '(;; Assume System V `setpgrp (void)', which is the default on GNU @@ -2180,3 +2180,53 @@ navigation, opening files and running tasks. There is no config file and mime associations are hard-coded. The incredible user-friendliness and speed make it a perfect utility on modern distros.") (license license:bsd-2))) + +(define-public thermald + (package + (name "thermald") + (version "1.6") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/01org/thermal_daemon/archive/v" + version ".tar.gz")) + (sha256 (base32 + "14klz9fnvi9jdlaqwrp61xa5nh051n8ykrs1fh1wxd7j66qf2fn6")))) + (build-system gnu-build-system) + (arguments + `(#:phases (modify-phases %standard-phases + (add-after + 'unpack 'autogen.sh-and-fix-paths + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + ;; upstartconfir is hardcoded to /etc/init and the build + ;; system tries to mkdir that. We don't even need upstart + ;; files at all; this is a fast and kludgy workaround + (substitute* "data/Makefile.am" + (("upstartconfdir = /etc/init") + (string-append "upstartconfdir = " + out "/etc/init"))) + ;; Now run autogen + (zero? (system* "sh" "autogen.sh")))))) + #:configure-flags + (let ((out (assoc-ref %outputs "out"))) + (list (string-append "--sysconfdir=" + out "/etc") + (string-append "--with-udev-dir=" + out "/lib/udev") + (string-append "--with-dbus-sys-dir=" + out "/etc/dbus-1/system.d") + "--localstatedir=/var")))) + (native-inputs + `(("autoconf" ,autoconf) + ("automake" ,automake) + ("glib" ,glib "bin") ; for glib-genmarshal, etc. + ("pkg-config" ,pkg-config))) + (inputs + `(("dbus-glib" ,dbus-glib) + ("libxml2" ,libxml2))) + (home-page "https://01.org/linux-thermal-daemon/") + (synopsis "CPU scaling for thermal management") + (description "The Linux Thermal Daemon helps monitor and control temperature +on systems running the Linux kernel.") + (license license:gpl2+))) diff --git a/gnu/packages/aspell.scm b/gnu/packages/aspell.scm index 06ba2ce472..509d428f64 100644 --- a/gnu/packages/aspell.scm +++ b/gnu/packages/aspell.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2013, 2014, 2015, 2017 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2015, 2016 Alex Kost <alezost@gmail.com> ;;; Copyright © 2016 John Darrington <jmd@gnu.org> ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il> @@ -26,6 +26,7 @@ #:use-module (guix download) #:use-module (guix build-system gnu) #:use-module (guix licenses) + #:use-module (gnu packages) #:use-module (gnu packages perl) #:use-module (gnu packages base)) @@ -40,7 +41,8 @@ version ".tar.gz")) (sha256 (base32 - "1qgn5psfyhbrnap275xjfrzppf5a83fb67gpql0kfqv37al869gm")))) + "1qgn5psfyhbrnap275xjfrzppf5a83fb67gpql0kfqv37al869gm")) + (patches (search-patches "aspell-default-dict-dir.patch")))) (build-system gnu-build-system) (arguments `(#:phases @@ -53,6 +55,15 @@ '("ASPELL_CONF" "" = ("${ASPELL_CONF:-\"dict-dir ${GUIX_PROFILE:-$HOME/.guix-profile}/lib/aspell\"}"))))))))) (inputs `(("perl" ,perl))) + + (native-search-paths + ;; This is a Guix-specific environment variable that takes a single + ;; entry, not an actual search path. + (list (search-path-specification + (variable "ASPELL_DICT_DIR") + (separator #f) + (files '("lib/aspell"))))) + (home-page "http://aspell.net/") (synopsis "Spell checker") (description @@ -66,7 +77,8 @@ dictionaries, including personal ones.") ;;; Dictionaries. ;;; ;;; Use 'export ASPELL_CONF="dict-dir $HOME/.guix-profile/lib/aspell"' to use -;;; them. +;;; them, or set the Guix-specific 'ASPELL_DICT_DIR', or just do nothing (as +;;; long as 'HOME' is set, that's fine!). ;;; (define* (aspell-dictionary dict-name full-name diff --git a/gnu/packages/aux-files/linux-libre/4.11-i686.conf b/gnu/packages/aux-files/linux-libre/4.11-i686.conf index 6234a980ae..93c1f1747b 100644 --- a/gnu/packages/aux-files/linux-libre/4.11-i686.conf +++ b/gnu/packages/aux-files/linux-libre/4.11-i686.conf @@ -935,8 +935,7 @@ CONFIG_XFRM_STATISTICS=y CONFIG_XFRM_IPCOMP=m CONFIG_NET_KEY=m # CONFIG_NET_KEY_MIGRATE is not set -CONFIG_SMC=m -CONFIG_SMC_DIAG=m +# CONFIG_SMC is not set CONFIG_INET=y CONFIG_IP_MULTICAST=y CONFIG_IP_ADVANCED_ROUTER=y diff --git a/gnu/packages/aux-files/linux-libre/4.11-x86_64.conf b/gnu/packages/aux-files/linux-libre/4.11-x86_64.conf index d47a5d1226..ea6e5cc899 100644 --- a/gnu/packages/aux-files/linux-libre/4.11-x86_64.conf +++ b/gnu/packages/aux-files/linux-libre/4.11-x86_64.conf @@ -919,8 +919,7 @@ CONFIG_XFRM_STATISTICS=y CONFIG_XFRM_IPCOMP=m CONFIG_NET_KEY=m # CONFIG_NET_KEY_MIGRATE is not set -CONFIG_SMC=m -CONFIG_SMC_DIAG=m +# CONFIG_SMC is not set CONFIG_INET=y CONFIG_IP_MULTICAST=y CONFIG_IP_ADVANCED_ROUTER=y diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm index d5cb5783ab..5f0e84beed 100644 --- a/gnu/packages/backup.scm +++ b/gnu/packages/backup.scm @@ -118,7 +118,7 @@ spying and/or modification by the server.") (define-public par2cmdline (package (name "par2cmdline") - (version "0.6.14") + (version "0.7.0") (source (origin (method url-fetch) (uri (string-append "https://github.com/Parchive/par2cmdline/archive/v" @@ -126,21 +126,14 @@ spying and/or modification by the server.") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "0ykfb7ar0x0flfdgf6i8xphyv5b93dalbjj2jb6hx7sdjax33n1g")) - ;; This test merely needs a file to test recovery on, but - ;; /dev/random is essentially /dev/urandom plus minimum entropy - ;; locking, making the test hang indefinitely. This change is - ;; already upstream: remove on upgrade to future 0.6.15. - ;; https://github.com/Parchive/par2cmdline/commit/27723a678f780da82c79b98592592009c779a4fb - (modules '((guix build utils))) - (snippet - '(substitute* "tests/test20" (("if=/dev/random") "if=/dev/urandom"))))) + "1m9vnv3pg0nds47raq2rd2kfpaad1sc10hv40hll5byksqlbfxyq")))) (native-inputs `(("automake" ,automake) ("autoconf" ,autoconf))) (build-system gnu-build-system) (arguments - `(#:phases + `(#:parallel-tests? #f + #:phases (modify-phases %standard-phases (add-after 'unpack 'autoreconf (lambda _ (zero? (system* "autoreconf" "-vfi"))))))) diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm index 59a9acd67e..d135a18bf8 100644 --- a/gnu/packages/base.scm +++ b/gnu/packages/base.scm @@ -778,35 +778,98 @@ with the Linux kernel.") ((#:phases original-phases) ;; Add libmachuser.so and libhurduser.so to libc.so's search path. ;; See <http://lists.gnu.org/archive/html/bug-hurd/2015-07/msg00051.html>. - `(alist-cons-after - 'install 'augment-libc.so - (lambda* (#:key outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out"))) - (substitute* (string-append out "/lib/libc.so") - (("/[^ ]+/lib/libc.so.0.3") - (string-append out "/lib/libc.so.0.3" " libmachuser.so" " libhurduser.so")))) - #t) - (alist-cons-after - 'pre-configure 'pre-configure-set-pwd - (lambda _ - ;; Use the right 'pwd'. - (substitute* "configure" - (("/bin/pwd") "pwd"))) - (alist-replace - 'build - (lambda _ - ;; Force mach/hurd/libpthread subdirs to build first in order to avoid - ;; linking errors. - ;; See <https://lists.gnu.org/archive/html/bug-hurd/2016-11/msg00045.html> - (let ((-j (list "-j" (number->string (parallel-job-count))))) - (let-syntax ((make (syntax-rules () - ((_ target) - (zero? (apply system* "make" target -j)))))) - (and (make "mach/subdir_lib") - (make "hurd/subdir_lib") - (make "libpthread/subdir_lib") - (zero? (apply system* "make" -j)))))) - ,original-phases)))) + `(modify-phases ,original-phases + ;; TODO: This is almost an exact copy of the phase of the same name + ;; in glibc/linux. The only difference is that the i686 patch is + ;; not applied here. In the next update cycle the patch moves to + ;; the patches field and this overwritten phase won't be needed any + ;; more. + (replace 'pre-configure + (lambda* (#:key inputs native-inputs outputs + #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bin (string-append out "/bin")) + ;; FIXME: Normally we would look it up only in INPUTS + ;; but cross-base uses it as a native input. + (bash (or (assoc-ref inputs "static-bash") + (assoc-ref native-inputs "static-bash")))) + ;; Install the rpc data base file under `$out/etc/rpc'. + ;; FIXME: Use installFlags = [ "sysconfdir=$(out)/etc" ]; + (substitute* "sunrpc/Makefile" + (("^\\$\\(inst_sysconfdir\\)/rpc(.*)$" _ suffix) + (string-append out "/etc/rpc" suffix "\n")) + (("^install-others =.*$") + (string-append "install-others = " out "/etc/rpc\n"))) + + (substitute* "Makeconfig" + ;; According to + ;; <http://www.linuxfromscratch.org/lfs/view/stable/chapter05/glibc.html>, + ;; linking against libgcc_s is not needed with GCC + ;; 4.7.1. + ((" -lgcc_s") "")) + + ;; Have `system' use that Bash. + (substitute* "sysdeps/posix/system.c" + (("#define[[:blank:]]+SHELL_PATH.*$") + (format #f "#define SHELL_PATH \"~a/bin/bash\"\n" + bash))) + + ;; Same for `popen'. + (substitute* "libio/iopopen.c" + (("/bin/sh") + (string-append bash "/bin/sh"))) + + ;; Same for the shell used by the 'exec' functions for + ;; scripts that lack a shebang. + (substitute* (find-files "." "^paths\\.h$") + (("#define[[:blank:]]+_PATH_BSHELL[[:blank:]].*$") + (string-append "#define _PATH_BSHELL \"" + bash "/bin/sh\"\n"))) + + ;; Nscd uses __DATE__ and __TIME__ to create a string to + ;; make sure the client and server come from the same + ;; libc. Use something deterministic instead. + (substitute* "nscd/nscd_stat.c" + (("static const char compilation\\[21\\] =.*$") + (string-append + "static const char compilation[21] = \"" + (string-take (basename out) 20) "\";\n"))) + + ;; Make sure we don't retain a reference to the + ;; bootstrap Perl. + (substitute* "malloc/mtrace.pl" + (("^#!.*") + ;; The shebang can be omitted, because there's the + ;; "bilingual" eval/exec magic at the top of the file. + "") + (("exec @PERL@") + "exec perl"))))) + (add-after 'install 'augment-libc.so + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out"))) + (substitute* (string-append out "/lib/libc.so") + (("/[^ ]+/lib/libc.so.0.3") + (string-append out "/lib/libc.so.0.3" " libmachuser.so" " libhurduser.so")))) + #t)) + (add-after 'pre-configure 'pre-configure-set-pwd + (lambda _ + ;; Use the right 'pwd'. + (substitute* "configure" + (("/bin/pwd") "pwd")) + #t)) + (replace 'build + (lambda _ + ;; Force mach/hurd/libpthread subdirs to build first in order to avoid + ;; linking errors. + ;; See <https://lists.gnu.org/archive/html/bug-hurd/2016-11/msg00045.html> + (let ((-j (list "-j" (number->string (parallel-job-count))))) + (let-syntax ((make (syntax-rules () + ((_ target) + (zero? (apply system* "make" target -j)))))) + (and (make "mach/subdir_lib") + (make "hurd/subdir_lib") + (make "libpthread/subdir_lib") + (zero? (apply system* "make" -j))))))))) ((#:configure-flags original-configure-flags) `(append (list "--host=i586-pc-gnu" diff --git a/gnu/packages/benchmark.scm b/gnu/packages/benchmark.scm index ab5da5ffc5..136f141d8b 100644 --- a/gnu/packages/benchmark.scm +++ b/gnu/packages/benchmark.scm @@ -30,7 +30,7 @@ (define-public fio (package (name "fio") - (version "2.19") + (version "2.20") (source (origin (method url-fetch) (uri (string-append @@ -38,7 +38,7 @@ "fio-" version ".tar.bz2")) (sha256 (base32 - "0dwx2dpbsg3xyd8jzm64gazy6ij4zirlfdrbgcxr1a0z5smcmcw1")))) + "15vgbzlcjd21bi9ahlbs8h9ca4raw5qgi711n802qmagjdjbmlxw")))) (build-system gnu-build-system) (arguments '(#:test-target "test" @@ -78,8 +78,8 @@ (dst (string-append newbin "/" file))) (link src dst) (delete-file src))) - '("fio2gnuplot" "fio_latency2csv.py" - "fiologparser_hist.py" "fiologparser.py")) + '("fio2gnuplot" "fiologparser_hist.py" + "fiologparser.py")) ;; Make sure numpy et.al is found. (wrap-program (string-append newbin "/fiologparser_hist.py") `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))) diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm index 9f5d8141d8..9b4afbfcfb 100644 --- a/gnu/packages/bioinformatics.scm +++ b/gnu/packages/bioinformatics.scm @@ -614,7 +614,7 @@ Python.") (define-public python-biom-format (package (name "python-biom-format") - (version "2.1.5") + (version "2.1.6") (source (origin (method url-fetch) @@ -625,14 +625,15 @@ Python.") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "1n25w3p1rixbpac8iysmzcja6m4ip5r6sz19l8y6wlwi49hxn278")))) + "08cr7wpahk6zb31h4bs7jmzpvxcqv9s13xz40h6y2h656jvdvnpj")))) (build-system python-build-system) (propagated-inputs `(("python-numpy" ,python-numpy) ("python-scipy" ,python-scipy) ("python-future" ,python-future) ("python-click" ,python-click) - ("python-h5py" ,python-h5py))) + ("python-h5py" ,python-h5py) + ("python-pandas" ,python-pandas))) (native-inputs `(("python-nose" ,python-nose))) (home-page "http://www.biom-format.org") @@ -2092,7 +2093,7 @@ identify enrichments with functional annotations of the genome.") (define-public diamond (package (name "diamond") - (version "0.8.38") + (version "0.9.0") (source (origin (method url-fetch) (uri (string-append @@ -2101,7 +2102,7 @@ identify enrichments with functional annotations of the genome.") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "0q2z6z5f7c0kbbzpjamkcyqg0rc6h5rxfp97qbmb0wxaycr7jajq")))) + "19lvz661mmgikbry0nvnsjc01fdxqbw9rl2868dvjfraxbcx9ras")))) (build-system cmake-build-system) (arguments '(#:tests? #f ; no "check" target @@ -2121,8 +2122,7 @@ translated DNA query sequences against a protein reference database (BLASTP and BLASTX alignment mode). The speedup over BLAST is up to 20,000 on short reads at a typical sensitivity of 90-99% relative to BLAST depending on the data and settings.") - (license (license:non-copyleft "file://src/COPYING" - "See src/COPYING in the distribution.")))) + (license license:agpl3+))) (define-public discrover (package @@ -2417,7 +2417,7 @@ similarity of community members.") (define-public fasttree (package (name "fasttree") - (version "2.1.9") + (version "2.1.10") (source (origin (method url-fetch) (uri (string-append @@ -2425,7 +2425,7 @@ similarity of community members.") version ".c")) (sha256 (base32 - "0ljvvw8i1als1wbfzvrf15c3ii2vw9db20a259g6pzg34xyyb97k")))) + "0vcjdvy1j4m702vmak4svbfkrpcw63k7wymfksjp9a982zy8kjsl")))) (build-system gnu-build-system) (arguments `(#:tests? #f ; no "check" target @@ -2551,7 +2551,7 @@ Illumina, Roche 454, and the SOLiD platform.") (define-public fraggenescan (package (name "fraggenescan") - (version "1.20") + (version "1.30") (source (origin (method url-fetch) @@ -2559,7 +2559,7 @@ Illumina, Roche 454, and the SOLiD platform.") (string-append "mirror://sourceforge/fraggenescan/" "FragGeneScan" version ".tar.gz")) (sha256 - (base32 "1zzigqmvqvjyqv4945kv6nc5ah2xxm1nxgrlsnbzav3f5c0n0pyj")))) + (base32 "158dcnwczgcyhwm4qlx19sanrwgdpzf6bn2y57mbpx55lkgz1mzj")))) (build-system gnu-build-system) (arguments `(#:phases @@ -2574,6 +2574,7 @@ Illumina, Roche 454, and the SOLiD platform.") (string-append "system(\"" (which "rm"))) (("system\\(\"mv") (string-append "system(\"" (which "mv"))) + (("\\\"awk") (string-append "\"" (which "awk"))) ;; This script and other programs expect the training files ;; to be in the non-standard location bin/train/XXX. Change ;; this to be share/fraggenescan/train/XXX instead. @@ -2583,10 +2584,7 @@ Illumina, Roche 454, and the SOLiD platform.") "train/\".$FGS_train_file;"))) (substitute* "run_hmm.c" (("^ strcat\\(train_dir, \\\"train/\\\"\\);") - (string-append " strcpy(train_dir, \"" share "/train/\");"))) - (substitute* "post_process.pl" - (("^my \\$dir = substr.*") - (string-append "my $dir = \"" share "\";")))) + (string-append " strcpy(train_dir, \"" share "/train/\");")))) #t)) (replace 'build (lambda _ (and (zero? (system* "make" "clean")) @@ -2598,8 +2596,6 @@ Illumina, Roche 454, and the SOLiD platform.") (share (string-append out "/share/fraggenescan/train"))) (install-file "run_FragGeneScan.pl" bin) (install-file "FragGeneScan" bin) - (install-file "FGS_gff.py" bin) - (install-file "post_process.pl" bin) (copy-recursively "train" share)))) (delete 'check) (add-after 'install 'post-install-check @@ -2607,8 +2603,9 @@ Illumina, Roche 454, and the SOLiD platform.") ;; output files gets created. (lambda* (#:key outputs #:allow-other-keys) (let* ((out (string-append (assoc-ref outputs "out"))) - (bin (string-append out "/bin/"))) - (and (zero? (system* (string-append bin "run_FragGeneScan.pl") + (bin (string-append out "/bin/")) + (frag (string-append bin "run_FragGeneScan.pl"))) + (and (zero? (system* frag ; Test complete genome. "-genome=./example/NC_000913.fna" "-out=./test2" "-complete=1" @@ -2616,7 +2613,13 @@ Illumina, Roche 454, and the SOLiD platform.") (file-exists? "test2.faa") (file-exists? "test2.ffn") (file-exists? "test2.gff") - (file-exists? "test2.out")))))))) + (file-exists? "test2.out") + (zero? (system* ; Test incomplete sequences. + frag + "-genome=./example/NC_000913-fgs.ffn" + "-out=out" + "-complete=0" + "-train=454_30"))))))))) (inputs `(("perl" ,perl) ("python" ,python-2))) ;not compatible with python 3. @@ -2696,6 +2699,46 @@ comment or quality sections.") (supported-systems '("x86_64-linux")) (license license:expat)))) +(define-public gemma + (package + (name "gemma") + (version "0.96") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/xiangzhou/GEMMA/archive/v" + version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "055ynn16gd12pf78n4vr2a9jlwsbwzajpdnf2y2yilg1krfff222")))) + (inputs + `(("gsl" ,gsl) + ("lapack" ,lapack) + ("zlib" ,zlib))) + (build-system gnu-build-system) + (arguments + `(#:make-flags '("FORCE_DYNAMIC=1") ; use shared libs + #:phases + (modify-phases %standard-phases + (delete 'configure) + (add-before 'build 'bin-mkdir + (lambda _ + (mkdir-p "bin"))) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (install-file "bin/gemma" + (string-append + out "/bin")))))) + #:tests? #f)) ; no tests included yet + (home-page "https://github.com/xiangzhou/GEMMA") + (synopsis "Tool for genome-wide efficient mixed model association") + (description + "Genome-wide Efficient Mixed Model Association (GEMMA) provides a +standard linear mixed model resolver with application in genome-wide +association studies (GWAS).") + (license license:gpl3))) + (define-public grit (package (name "grit") @@ -4054,7 +4097,7 @@ partial genes, and identifies translation initiation sites.") (define-public roary (package (name "roary") - (version "3.7.0") + (version "3.8.2") (source (origin (method url-fetch) @@ -4063,7 +4106,7 @@ partial genes, and identifies translation initiation sites.") version ".tar.gz")) (sha256 (base32 - "0x2hpb3nfsc6x2nq1788w0fhqfzc7cn2dp4xwyva9m3k6xlz0m43")))) + "03dfr2cd5fp80bcr65923zpdzrasvcxl7c2vgh8373v25a1yfap7")))) (build-system perl-build-system) (arguments `(#:phases @@ -5396,18 +5439,13 @@ Cuffdiff or Ballgown programs.") (define-public taxtastic (package (name "taxtastic") - (version "0.5.7") - ;; Versions after 0.5.4 do not appear to be distributed on PyPI so we - ;; download the package from GitHub. + (version "0.6.4") (source (origin (method url-fetch) - (uri (string-append - "https://github.com/fhcrc/taxtastic/archive/v" - version ".tar.gz")) - (file-name (string-append name "-" version ".tar.gz")) + (uri (pypi-uri "taxtastic" version)) (sha256 (base32 - "1s0h5y1lds1c40jhir5585ffm6yjyn8h5aqimpgv64rhqhfv56xx")))) + "0s79z8kfl853x7l4h8ms05k31q87aw62nrchlk20w9n227j35929")))) (build-system python-build-system) (arguments `(#:python ,python-2 @@ -7904,14 +7942,14 @@ library implementing most of the pipeline's features.") (define-public r-mutationalpatterns (package (name "r-mutationalpatterns") - (version "1.2.0") + (version "1.2.1") (source (origin (method url-fetch) (uri (bioconductor-uri "MutationalPatterns" version)) (sha256 (base32 - "00jh1qklj8jb9j7mwvkfybq368h2wg9yc2cwkgb7yb9vsw72r61d")))) + "1s50diwh1j6vg3mgahh6bczvq74mfdbmwjrad4d5lh723gnc5pjg")))) (build-system r-build-system) (propagated-inputs `(("r-biocgenerics" ,r-biocgenerics) diff --git a/gnu/packages/dns.scm b/gnu/packages/dns.scm index 1fb552de15..7937c67781 100644 --- a/gnu/packages/dns.scm +++ b/gnu/packages/dns.scm @@ -88,7 +88,9 @@ and BOOTP/TFTP for network booting of diskless machines.") ;; Source files only say GPL2 and GPL3 are allowed. (license (list license:gpl2 license:gpl3)))) -(define-public bind +;; 'bind' is the name of a built-in Guile procedure, which is why we choose a +;; different name here. +(define-public isc-bind (package (name "bind") (version "9.11.1") diff --git a/gnu/packages/ebook.scm b/gnu/packages/ebook.scm index 0a53e6ca99..1d64e9b69f 100644 --- a/gnu/packages/ebook.scm +++ b/gnu/packages/ebook.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2015, 2016 Andreas Enge <andreas@enge.fr> ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2016, 2017 Alex Griffin <a@ajgrf.com> +;;; Copyright © 2017 Brendan Tildesley <brendan.tildesley@openmailbox.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -19,7 +20,7 @@ ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (gnu packages ebook) - #:use-module ((guix licenses) #:select (gpl3 lgpl2.1+)) + #:use-module ((guix licenses) #:prefix license:) #:use-module (guix packages) #:use-module (guix download) #:use-module (guix build-system gnu) @@ -27,8 +28,10 @@ #:use-module (guix build-system python) #:use-module (gnu packages) #:use-module (gnu packages databases) + #:use-module (gnu packages fonts) #:use-module (gnu packages fontutils) #:use-module (gnu packages freedesktop) + #:use-module (gnu packages gnome) #:use-module (gnu packages glib) #:use-module (gnu packages icu4c) #:use-module (gnu packages image) @@ -38,6 +41,7 @@ #:use-module (gnu packages python) #:use-module (gnu packages qt) #:use-module (gnu packages tls) + #:use-module (gnu packages web) #:use-module (gnu packages xorg)) (define-public chmlib @@ -56,12 +60,12 @@ (home-page "http://www.jedrea.com/chmlib/") (synopsis "Library for CHM files") (description "CHMLIB is a library for dealing with ITSS/CHM format files.") - (license lgpl2.1+))) + (license license:lgpl2.1+))) (define-public calibre (package (name "calibre") - (version "2.76.0") + (version "2.85.1") (source (origin (method url-fetch) @@ -70,33 +74,35 @@ version ".tar.xz")) (sha256 (base32 - "1xfm586n6gm44mkyn25mbiyhj6w9ji9yl6fvmnr4zk1q6qcga3v8")) + "1g8s0kp1gj05yysfgqpp2lgrxvzc0fsny1hwzx5jh9hvqn0b53cc")) ;; Remove non-free or doubtful code, see ;; https://lists.gnu.org/archive/html/guix-devel/2015-02/msg00478.html (modules '((guix build utils))) (snippet '(begin + (delete-file-recursively "src/calibre/ebooks/markdown") (delete-file-recursively "src/unrar") - (delete-file "src/odf/thumbnail.py"))) + (delete-file "src/odf/thumbnail.py") + (delete-file-recursively "resources/fonts/liberation") + (delete-file-recursively "src/chardet") + (substitute* (find-files "." "\\.py") + (("calibre\\.ebooks\\.markdown") "markdown")) + #t)) (patches (search-patches "calibre-drop-unrar.patch" + "calibre-use-packaged-feedparser.patch" + "calibre-dont-load-remote-icons.patch" "calibre-no-updates-dialog.patch")))) (build-system python-build-system) (native-inputs `(("pkg-config" ,pkg-config) + ("font-liberation" ,font-liberation) ("qtbase" ,qtbase) ; for qmake ;; xdg-utils is supposed to be used for desktop integration, but it ;; also creates lots of messages ;; mkdir: cannot create directory '/homeless-shelter': Permission denied + ("python2-flake8" ,python2-flake8) ("xdg-utils" ,xdg-utils))) - ;; FIXME: The following are missing inputs according to the documentation, - ;; but the package can apparently be used without them, - ;; They may need to be added if a deficiency is detected. - ;; BeautifulSoup >= 3.0.5 - ;; dnspython >= 1.6.0 - ;; poppler >= 0.20.2 - ;; libwmf >= 0.2.8 - ;; psutil >= 0.6.1 - ;; python-pygments >= 2.0.1 ; used for ebook editing + ;; Beautifulsoup3 is bundled but obsolete and not packaged, so just leave it bundled. (inputs `(("chmlib" ,chmlib) ("fontconfig" ,fontconfig) @@ -108,16 +114,22 @@ ("libxrender" ,libxrender) ("openssl" ,openssl) ("podofo" ,podofo) + ("poppler" ,poppler) ("python" ,python-2) ("python2-apsw" ,python2-apsw) + ("python2-chardet" ,python2-chardet) ("python2-cssselect" ,python2-cssselect) ("python2-cssutils" ,python2-cssutils) ("python2-dateutil" ,python2-dateutil) ("python2-dbus" ,python2-dbus) + ("python2-dnspython" ,python2-dnspython) + ("python2-feedparser" ,python2-feedparser) ("python2-lxml" ,python2-lxml) + ("python2-markdown" ,python2-markdown) ("python2-mechanize" ,python2-mechanize) ("python2-netifaces" ,python2-netifaces) ("python2-pillow" ,python2-pillow) + ("python2-pygments" ,python2-pygments) ("python2-pyqt" ,python2-pyqt) ("python2-sip" ,python2-sip) ("sqlite" ,sqlite))) @@ -130,6 +142,12 @@ #:use-setuptools? #f #:phases (modify-phases %standard-phases + (add-after 'unpack 'patch-source + (lambda _ + (substitute* "src/calibre/linux.py" + ;; We can't use the uninstaller in Guix. Don't build it. + (("self\\.create_uninstaller()") "")) + #t)) (add-before 'build 'configure (lambda* (#:key inputs #:allow-other-keys) (let ((podofo (assoc-ref inputs "podofo")) @@ -137,7 +155,17 @@ (substitute* "setup/build_environment.py" (("sys.prefix") (string-append "'" pyqt "'"))) (setenv "PODOFO_INC_DIR" (string-append podofo "/include/podofo")) - (setenv "PODOFO_LIB_DIR" (string-append podofo "/lib")))))))) + (setenv "PODOFO_LIB_DIR" (string-append podofo "/lib"))))) + (add-after 'install 'install-font-liberation + (lambda* (#:key inputs outputs #:allow-other-keys) + (for-each (lambda (file) + (install-file file (string-append + (assoc-ref outputs "out") + "/share/calibre/fonts/liberation"))) + (find-files (string-append + (assoc-ref inputs "font-liberation") + "/share/fonts/truetype"))) + #t))))) (home-page "http://calibre-ebook.com/") (synopsis "E-book library management software") (description "Calibre is an ebook library manager. It can view, convert @@ -145,4 +173,16 @@ and catalog ebooks in most of the major ebook formats. It can also talk to many ebook reader devices. It can go out to the Internet and fetch metadata for books. It can download newspapers and convert them into ebooks for convenient reading.") - (license gpl3))) ; some files are under various other licenses, see COPYRIGHT + ;; Calibre is largely GPL3+, but includes a number of components covered + ;; by other licenses. See COPYRIGHT for more details. + (license (list license:gpl3+ + license:gpl2+ + license:lgpl2.1+ + license:lgpl2.1 + license:bsd-3 + license:expat + license:zpl2.1 + license:asl2.0 + license:public-domain + license:silofl1.1 + license:cc-by-sa3.0)))) diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm index 3d9e83713e..4a0d20c9f1 100644 --- a/gnu/packages/emacs.scm +++ b/gnu/packages/emacs.scm @@ -1156,14 +1156,14 @@ rather than the contents of files.") (define-public emacs-async (package (name "emacs-async") - (version "1.9") + (version "1.9.2") (source (origin (method url-fetch) (uri (string-append "https://elpa.gnu.org/packages/async-" version ".tar")) (sha256 (base32 - "1ip5nc8xyln5szvqwp6wqva9xr84pn8ssn3nnphrszr19y4js2bm")))) + "17fnvrj7jww29sav6a6jpizclg4w2962m6h37akpii71gf0vrffw")))) (build-system emacs-build-system) (home-page "https://elpa.gnu.org/packages/async.html") (synopsis "Asynchronous processing in Emacs") @@ -3361,7 +3361,7 @@ Dust.js, React/JSX, Angularjs, ejs, etc.") (define-public emacs-helm (package (name "emacs-helm") - (version "1.9.8") + (version "2.7.0") (source (origin (method url-fetch) (uri (string-append @@ -3370,7 +3370,7 @@ Dust.js, React/JSX, Angularjs, ejs, etc.") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "019dpzr6l83k1fgxn40aqxjvrpz4dl5d9vi7fc5wjnifmxaqxia6")))) + "1scdirpclgq3pi1j2c90gqaaqg1pgvasp98f4jqw8c5xbqcr7jdw")))) (build-system emacs-build-system) (propagated-inputs `(("emacs-async" ,emacs-async) @@ -3387,6 +3387,55 @@ considered to be its successor. Helm sets out to clean up the legacy code in not tied in the trap of backward compatibility.") (license license:gpl3+))) +(define-public emacs-helm-swoop + (package + (name "emacs-helm-swoop") + (version "1.7.2") + (source (origin + (method url-fetch) + (uri (string-append + "https://github.com/ShingoFukuyama/helm-swoop/archive/" + version + ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1z34pfi0gsk054pxr906ilaalaw0xz3s536163gf9ykkwmc2356d")))) + (build-system emacs-build-system) + (propagated-inputs + `(("emacs-helm" ,emacs-helm))) + (home-page "https://github.com/ShingoFukuyama/helm-swoop") + (synopsis "Filter and jump to lines in an Emacs buffer using Helm") + (description + "This package builds on the Helm interface to provide several commands +for search-based navigation of buffers.") + (license license:gpl2+))) + +(define-public emacs-helm-projectile + (package + (name "emacs-helm-projectile") + (version "0.14.0") + (source (origin + (method url-fetch) + (uri (string-append + "https://github.com/bbatsov/helm-projectile/archive/v" + version + ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "19cfmilqh8kbab3b2hmx6lyrj73q6vfmn3p730x95g23iz16mnd5")))) + (build-system emacs-build-system) + (propagated-inputs + `(("emacs-dash" ,emacs-dash) + ("emacs-helm" ,emacs-helm) + ("emacs-projectile" ,emacs-projectile))) + (home-page "https://github.com/bbatsov/helm-projectile") + (synopsis "Helm integration for Projectile") + (description + "This Emacs library provides a Helm interface for Projectile.") + (license license:gpl3+))) + (define-public emacs-cider (package (name "emacs-cider") @@ -3579,14 +3628,14 @@ passive voice.") (define-public emacs-org (package (name "emacs-org") - (version "20170502") + (version "20170515") (source (origin (method url-fetch) (uri (string-append "http://elpa.gnu.org/packages/org-" version ".tar")) (sha256 (base32 - "12inz804j55ycprb2m3ay54d1bhwhjssmn5nrfm7cfklyhfsy27s")))) + "0lfapcxil69x1a63cszgq72lqks1z3gpyxw7vcllqlgi7n7a4y6f")))) (build-system emacs-build-system) (home-page "http://orgmode.org/") (synopsis "Outline-based notes management and organizer") @@ -4145,7 +4194,7 @@ jQuery and Bootstrap resources included via osscdn.") (define-public emacspeak (package (name "emacspeak") - (version "45.0") + (version "46.0") (source (origin (method url-fetch) @@ -4154,7 +4203,11 @@ jQuery and Bootstrap resources included via osscdn.") version "/emacspeak-" version ".tar.bz2")) (sha256 (base32 - "0npcr867xbbhwa0i7v26hnk4z2d51522jwcfwc594j74kbv3g6ka")))) + "15x4yfp3wl2fxm1nkx6pz3clw6zyw3argcsqxgcx6pa28sivlg2n")) + (modules '((guix build utils))) + (snippet + ;; Delete the bundled byte-compiled elisp files. + '(for-each delete-file (find-files "lisp" "\\.elc$"))))) (build-system gnu-build-system) (arguments '(#:make-flags (list (string-append "prefix=" @@ -4162,25 +4215,35 @@ jQuery and Bootstrap resources included via osscdn.") #:phases (modify-phases %standard-phases (replace 'configure - (lambda* (#:key outputs #:allow-other-keys) - (substitute* "Makefile" - (("\\$\\(INSTALL\\) -d \\$\\(libdir\\)/servers/linux-outloud") - "") - (("\\$\\(INSTALL\\) -m 755 \\$\\{OUTLOUD\\}.*$") "") - (("\\*info\\*") "*")) - (substitute* "etc/emacspeak.sh.def" - (("<emacspeak-dir>") - (string-append (assoc-ref outputs "out") - "/share/emacs/site-lisp/emacspeak/lisp"))) + (lambda _ + ;; Configure Emacspeak according to etc/install.org. (zero? (system* "make" "config")))) - (add-after 'install 'install-espeak-server + (add-after 'build 'build-espeak + (lambda _ + (zero? (system* "make" "espeak")))) + (replace 'install (lambda* (#:key outputs #:allow-other-keys) - (let ((out (assoc-ref outputs "out"))) - (with-directory-excursion "servers/linux-espeak" - (and (zero? (system* "make")) - (zero? (system* "make" "install" - (string-append "PREFIX=" out)))))))) - (add-after 'install-espeak-server 'wrap-program + (let* ((out (assoc-ref outputs "out")) + (bin (string-append out "/bin")) + (lisp (string-append out "/share/emacs/site-lisp/emacspeak")) + (info (string-append out "/share/info"))) + ;; According to etc/install.org, the Emacspeak directory should + ;; be copied to its installation destination. + (for-each + (lambda (file) + (copy-recursively file (string-append lisp "/" file))) + '("etc" "info" "lisp" "media" "servers" "sounds" "stumpwm" + "xsl")) + ;; Make sure emacspeak is loaded from the correct directory. + (substitute* "etc/emacspeak.sh" + (("exec emacs.*$") + (string-append "exec emacs -l " lisp + "/lisp/emacspeak-setup.el $CL_ALL"))) + ;; Install the convenient startup script. + (mkdir-p bin) + (copy-file "etc/emacspeak.sh" (string-append bin "/emacspeak"))) + #t)) + (add-after 'install 'wrap-program (lambda* (#:key inputs outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) (emacspeak (string-append out "/bin/emacspeak")) diff --git a/gnu/packages/engineering.scm b/gnu/packages/engineering.scm index 362860e17d..7ad93653e9 100644 --- a/gnu/packages/engineering.scm +++ b/gnu/packages/engineering.scm @@ -108,7 +108,8 @@ `(("boost" ,boost) ("muparser" ,muparser) ("freetype" ,freetype) - ("qt" ,qt))) + ("qtbase" ,qtbase) + ("qtsvg" ,qtsvg))) (native-inputs `(("pkg-config" ,pkg-config) ("which" ,which))) diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm index 3517f06acf..fc1e3dcf37 100644 --- a/gnu/packages/games.scm +++ b/gnu/packages/games.scm @@ -1059,14 +1059,14 @@ reference interpreter, using the Glk API.") (define-public fizmo (package (name "fizmo") - (version "0.7.9") + (version "0.8.4") (source (origin (method url-fetch) (uri (string-append "https://christoph-ender.de/fizmo/source/" name "-" version ".tar.gz")) (sha256 (base32 - "1w7cgyjrhgkadjrazijzhq7zh0pl5bfc6wl7mdpgh020y4kp46d7")))) + "1sd988db2302r7cbfcfghbmg8ck43c6hvnlnlpb0rqxb7pm9cwyy")))) (build-system gnu-build-system) (arguments '(#:configure-flags @@ -1079,12 +1079,13 @@ reference interpreter, using the Glk API.") (native-inputs `(("pkg-config" ,pkg-config))) (inputs - `(("libjpeg" ,libjpeg) + `(("freetype" ,freetype) + ("libjpeg" ,libjpeg) ("libpng" ,libpng) ("libsndfile" ,libsndfile) ("libxml2" ,libxml2) ("ncurses" ,ncurses) - ("sdl" ,sdl))) + ("sdl2" ,sdl2))) (home-page "https://christoph-ender.de/fizmo/") (synopsis "Z-machine interpreter") (description @@ -1410,14 +1411,14 @@ older games.") (define-public gamine (package (name "gamine") - (version "1.4") + (version "1.5") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/gamine-game/" "gamine-" version ".tar.gz")) (sha256 (base32 - "1iny959i1kl2ab6z5xi4s66mrvrwcarxyvjfp2k1sx532s8knk8h")))) + "08wnk7w84c2413hwny89j2cn89cvfdf67bfc6wl0bf475if0mf4h")))) (build-system gnu-build-system) (native-inputs `(("pkg-config" ,pkg-config) @@ -1490,7 +1491,7 @@ is programmed in Haskell.") (define-public manaplus (package (name "manaplus") - (version "1.7.3.4") + (version "1.7.5.14") (source (origin (method url-fetch) (uri (string-append @@ -1498,7 +1499,7 @@ is programmed in Haskell.") version "/manaplus-" version ".tar.xz")) (sha256 (base32 - "0mbxzsgjg16pqa3jnxkd7wwvw1lrx455r7fvwjfhzp0yv7acrn10")))) + "1b5q79jkdrck5lq8lvhnpq2mly257r8lylp7b8sp8xn4365f86ch")))) (build-system gnu-build-system) (arguments '(#:configure-flags @@ -1512,7 +1513,6 @@ is programmed in Haskell.") ("curl" ,curl) ("libxml2" ,libxml2) ("mesa" ,mesa) - ("physfs" ,physfs) ("sdl-union" ,(sdl-union)))) (home-page "http://manaplus.org") (synopsis "Client for 'The Mana World' and similar games") @@ -2160,14 +2160,14 @@ and a game metadata scraper.") (define openttd-engine (package (name "openttd-engine") - (version "1.6.1") + (version "1.7.0") (source (origin (method url-fetch) (uri (string-append "http://binaries.openttd.org/releases/" version "/openttd-" version "-source.tar.xz")) (sha256 (base32 - "1ak32fj5xkk2fvmm3g8i7wzmk4bh2ijsp8fzvvw5wj6365p9j24v")) + "1q4r5860dpkkw4fpfz3f8mvdd8xjpnwwzr9zybgmgb255bs0g4yz")) (modules '((guix build utils))) (snippet ;; The DOS port contains proprietary software. @@ -2207,8 +2207,8 @@ and a game metadata scraper.") passengers by land, water and air. It is a re-implementation of Transport Tycoon Deluxe with many enhancements including multiplayer mode, internationalization support, conditional orders and the ability to clone, -autoreplace and autoupdate vehicles. This package only includes the game engine. When you start -it you will be prompted to download a graphics set.") +autoreplace and autoupdate vehicles. This package only includes the game +engine. When you start it you will be prompted to download a graphics set.") (home-page "http://openttd.org/") ;; This package is GPLv2, except for a few files located in ;; "src/3rdparty/" which are under the 3-clause BSD, LGPLv2.1+ and Zlib diff --git a/gnu/packages/ghostscript.scm b/gnu/packages/ghostscript.scm index 4e8736cd71..1cb651c96b 100644 --- a/gnu/packages/ghostscript.scm +++ b/gnu/packages/ghostscript.scm @@ -132,6 +132,7 @@ printing, and psresize, for adjusting page sizes.") (name "ghostscript") (replacement ghostscript/fixed) (version "9.14.0") + ;; XXX Try removing the bundled copy of jbig2dec. (source (origin (method url-fetch) (uri (string-append "mirror://gnu/ghostscript/gnu-ghostscript-" diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm index 81c747ce14..d53d15894f 100644 --- a/gnu/packages/gnome.scm +++ b/gnu/packages/gnome.scm @@ -51,6 +51,7 @@ #:use-module (guix build-system trivial) #:use-module (gnu packages) #:use-module (gnu packages admin) + #:use-module (gnu packages aspell) #:use-module (gnu packages autotools) #:use-module (gnu packages avahi) #:use-module (gnu packages base) @@ -6130,3 +6131,56 @@ accessibility infrastructure.") via speech and refreshable braille. Orca works with applications and toolkits that support the Assistive Technology Service Provider Interface (AT-SPI).") (license license:lgpl2.1+))) + +(define-public gspell + (package + (name "gspell") + (version "1.3.2") + (source (origin + (method url-fetch) + (uri (string-append "mirror://gnome/sources/" name "/" + (version-major+minor version) "/" + name "-" version ".tar.xz")) + (sha256 + (base32 + "1n4kd5i11l79h8bpvx3cz79ww0b4z89y99h4czvyg80qlarn585w")) + (patches (search-patches "gspell-dash-test.patch")))) + (build-system glib-or-gtk-build-system) + (arguments + '(#:phases + (modify-phases %standard-phases + (add-before 'check 'pre-check + (lambda* (#:key inputs #:allow-other-keys) + ;; Tests require a running X server. + (system "Xvfb :1 &") + (setenv "DISPLAY" ":1") + + ;; For the missing /etc/machine-id. + (setenv "DBUS_FATAL_WARNINGS" "0") + + ;; Allow Enchant and its Aspell backend to find the en_US + ;; dictionary. + (setenv "ASPELL_DICT_DIR" + (string-append (assoc-ref inputs "aspell-dict-en") + "/lib/aspell")) + #t))))) + (inputs + `(("enchant" ,enchant) + ("iso-codes" ,iso-codes) + ("gtk+" ,gtk+) + ("glib" ,glib))) + (native-inputs + `(("glib" ,glib "bin") + ("pkg-config" ,pkg-config) + ("xmllint" ,libxml2) + + ;; For tests. + ("xorg-server" ,xorg-server) + ("aspell-dict-en" ,aspell-dict-en))) + (home-page "https://wiki.gnome.org/Projects/gspell") + (synopsis "GNOME's alternative spell checker") + (description + "gspell provides a flexible API to add spell-checking to a GTK+ +application. It provides a GObject API, spell-checking to text entries and +text views, and buttons to choose the language.") + (license license:gpl2+))) diff --git a/gnu/packages/gnupg.scm b/gnu/packages/gnupg.scm index 3edb157704..440e7d550f 100644 --- a/gnu/packages/gnupg.scm +++ b/gnu/packages/gnupg.scm @@ -192,16 +192,14 @@ specifications are building blocks of S/MIME and TLS.") (define-public npth (package (name "npth") - (version "1.3") + (version "1.4") (source (origin (method url-fetch) - (uri (string-append - "mirror://gnupg/npth/npth-" - version ".tar.bz2")) + (uri (string-append "mirror://gnupg/npth/npth-" version ".tar.bz2")) (sha256 (base32 - "0am86vblapwz84254qpmhz0chk70g6qzh3wdxcs0gvba8d01ka5w")))) + "1wpijvxg5svj893q9vp5r83d9ipwhpbyphb55m89l5m36qc185c9")))) (build-system gnu-build-system) (home-page "https://www.gnupg.org") (synopsis "Non-preemptive thread library") @@ -217,14 +215,14 @@ compatible to GNU Pth.") (define-public gnupg (package (name "gnupg") - (version "2.1.20") + (version "2.1.21") (source (origin (method url-fetch) (uri (string-append "mirror://gnupg/gnupg/gnupg-" version ".tar.bz2")) (sha256 (base32 - "03cnd6gz8f4lf69inskssw57idrswcdimhccdyglmrlv6rlrmkr4")))) + "1p97limv29p01y79mgnzpwixa50lv53wgdl3ymk9idkmpaldisks")))) (build-system gnu-build-system) (native-inputs `(("pkg-config" ,pkg-config))) diff --git a/gnu/packages/icu4c.scm b/gnu/packages/icu4c.scm index 9f465b1022..3e96520054 100644 --- a/gnu/packages/icu4c.scm +++ b/gnu/packages/icu4c.scm @@ -3,6 +3,7 @@ ;;; Copyright © 2015, 2016 Mark H Weaver <mhw@netris.org> ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org> +;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net> ;;; ;;; This file is part of GNU Guix. ;;; @@ -25,6 +26,7 @@ #:use-module (guix licenses) #:use-module (guix packages) #:use-module (guix download) + #:use-module (guix build-system ant) #:use-module (guix build-system gnu)) (define-public icu4c @@ -75,3 +77,30 @@ C/C++ part.") (patches (search-patches "icu4c-CVE-2017-7867-CVE-2017-7868.patch" "icu4c-reset-keyword-list-iterator.patch")))))) + +(define-public java-icu4j + (package + (name "java-icu4j") + (version "59.1") + (source (origin + (method url-fetch) + (uri (string-append "http://download.icu-project.org/files/icu4j/" + version "/icu4j-" + (string-map (lambda (x) + (if (char=? x #\.) #\_ x)) + version) + "-src.jar")) + (sha256 + (base32 + "0bgxsvgi0qcwj60pvcxrf7a3fbk7aksyxnfwpbzavyfrfzixqh0c")))) + (build-system ant-build-system) + (arguments + `(#:tests? #f ; no tests included + #:jar-name "icu4j.jar")) + (home-page "http://site.icu-project.org/") + (synopsis "International Components for Unicode") + (description + "ICU is a set of C/C++ and Java libraries providing Unicode and +globalisation support for software applications. This package contains the +Java part.") + (license x11))) diff --git a/gnu/packages/image-processing.scm b/gnu/packages/image-processing.scm new file mode 100644 index 0000000000..1753b926c6 --- /dev/null +++ b/gnu/packages/image-processing.scm @@ -0,0 +1,130 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2017 John Darrington <jmd@gnu.org> +;;; Copyright © 2017 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 (gnu packages image-processing) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (guix packages) + #:use-module (guix utils) + #:use-module (guix download) + #:use-module (guix build-system cmake) + #:use-module (guix build-system gnu) + #:use-module (gnu packages) + #:use-module (gnu packages algebra) + #:use-module (gnu packages boost) + #:use-module (gnu packages compression) + #:use-module (gnu packages documentation) + #:use-module (gnu packages gnome) + #:use-module (gnu packages graphics) + #:use-module (gnu packages graphviz) + #:use-module (gnu packages image) + #:use-module (gnu packages maths) + #:use-module (gnu packages perl) + #:use-module (gnu packages pkg-config) + #:use-module (gnu packages python) + #:use-module (gnu packages xml) + #:use-module (gnu packages vtk)) + +;; We use the latest snapshot of this package because the latest release is +;; from 2011 and has known vulnerabilities that cannot easily be fixed by +;; applying patches. +(define-public dcmtk + (package + (name "dcmtk") + (version "3.6.1_20170228") + (source (origin + (method url-fetch) + (uri (string-append "ftp://dicom.offis.de/pub/dicom/offis/" + "software/dcmtk/snapshot/dcmtk-" + version ".tar.gz")) + (sha256 + (base32 + "04cwfx8yrscqcd59mxk2fh6314ckayi9cp68iql5a57pf2pg5qld")))) + (build-system gnu-build-system) + (inputs + `(("libtiff" ,libtiff) + ("libpng" ,libpng) + ("doxygen" ,doxygen) + ("zlib" ,zlib))) + (native-inputs + `(("perl" ,perl))) + (home-page "http://dcmtk.org") + (synopsis "Libraries and programs implementing parts of the DICOM standard") + (description "DCMTK is a collection of libraries and applications +implementing large parts the DICOM standard. It includes software for +examining, constructing and converting DICOM image files, handling offline +media, sending and receiving images over a network connection, as well as +demonstrative image storage and worklist servers.") + (license (license:fsf-free + "file://COPYRIGHT" + "A union of the Apache 2.0 licence and various non-copyleft +licences similar to the Modified BSD licence.")))) + +(define-public mia + (package + (name "mia") + (version "2.4.4") + (source (origin + (method url-fetch) + (uri (string-append "mirror://sourceforge/mia/mia/" + (version-major+minor version) + "/mia-" version ".tar.xz")) + (sha256 + (base32 + "124gvf8nkls59mlnx8ynq00n9zrah7a54gsywafx7qmfr0y95ra7")))) + (build-system cmake-build-system) + (arguments + `(#:configure-flags + (list "-DMIA_CREATE_NIPYPE_INTERFACES=0" + (string-append "-DCMAKE_INSTALL_LIBDIR=" + (assoc-ref %outputs "out") "/lib") + "-DCMAKE_CXX_FLAGS=-fpermissive"))) + (inputs + `(("boost" ,boost) + ("dcmtk" ,dcmtk) + ("doxygen" ,doxygen) + ("eigen" ,eigen) + ("fftw" ,fftw) + ("fftwf" ,fftwf) + ("gsl" ,gsl) + ("gts" ,gts) + ("hdf5" ,hdf5) + ("itpp" ,itpp) + ("libjpeg" ,libjpeg) + ("libpng" ,libpng) + ("libtiff" ,libtiff) + ("libxml" ,libxml2) + ("libxml++" ,libxml++) + ("maxflow" ,maxflow) + ("niftilib" ,niftilib) + ("nlopt" ,nlopt) + ("openexr" ,openexr) + ("python-lxml" ,python2-lxml) + ("vtk" ,vtk))) + (native-inputs + `(("pkg-config" ,pkg-config) + ("python" ,python-2))) + (home-page "http://mia.sourceforge.net") + (synopsis "Toolkit for gray scale medical image analysis") + (description "MIA provides a combination of command line tools, plug-ins, +and libraries that make it possible run image processing tasks interactively +in a command shell and to prototype using the shell's scripting language. It +is built around a plug-in structure that makes it easy to add functionality +without compromising the original code base and it makes use of a wide variety +of external libraries that provide additional functionality.") + (license license:gpl3+))) diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm index de8043d236..86902d5680 100644 --- a/gnu/packages/image.scm +++ b/gnu/packages/image.scm @@ -509,7 +509,10 @@ arithmetic ops.") (sha256 (base32 "04akiwab8iy5iy34razcvh9mcja9wy737civ3sbjxk4j143s1b2s")) (patches (search-patches "jbig2dec-ignore-testtest.patch" - "jbig2dec-CVE-2016-9601.patch")))) + "jbig2dec-CVE-2016-9601.patch" + "jbig2dec-CVE-2017-7885.patch" + "jbig2dec-CVE-2017-7975.patch" + "jbig2dec-CVE-2017-7976.patch")))) (build-system gnu-build-system) (synopsis "Decoder of the JBIG2 image compression format") diff --git a/gnu/packages/imagemagick.scm b/gnu/packages/imagemagick.scm index 48902bbfd0..bde3ebe402 100644 --- a/gnu/packages/imagemagick.scm +++ b/gnu/packages/imagemagick.scm @@ -46,14 +46,14 @@ ;; The 7 release series has an incompatible API, while the 6 series is still ;; maintained. Don't update to 7 until we've made sure that the ImageMagick ;; users are ready for the 7-series API. - (version "6.9.8-4") + (version "6.9.8-6") (source (origin (method url-fetch) (uri (string-append "mirror://imagemagick/ImageMagick-" version ".tar.xz")) (sha256 (base32 - "04fb0x8zc9z11127wsnxlzg0jcgs4xwlx8fxy4jac2y3mmmlzhm6")))) + "1sxg2wx3nrzbymh5wcqiv1x401nrz95xkrqgk3x446vx8lq7ln6w")))) (build-system gnu-build-system) (arguments `(#:configure-flags '("--with-frozenpaths" "--without-gcc-arch") diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm index 13e261438d..e86c904e71 100644 --- a/gnu/packages/java.scm +++ b/gnu/packages/java.scm @@ -45,6 +45,7 @@ #:use-module (gnu packages ghostscript) ;lcms #:use-module (gnu packages gnome) #:use-module (gnu packages gtk) + #:use-module (gnu packages icu4c) #:use-module (gnu packages image) #:use-module (gnu packages linux) ;alsa #:use-module (gnu packages wget) @@ -340,12 +341,12 @@ build process and its dependencies, whereas Make uses Makefile format.") (license license:asl2.0))) (define-public icedtea-7 - (let* ((version "2.6.9") + (let* ((version "2.6.10") (drop (lambda (name hash) (origin (method url-fetch) (uri (string-append - "http://icedtea.classpath.org/download/drops/" + "http://icedtea.classpath.org/download/drops" "/icedtea7/" version "/" name ".tar.bz2")) (sha256 (base32 hash)))))) (package @@ -358,7 +359,7 @@ build process and its dependencies, whereas Make uses Makefile format.") version ".tar.xz")) (sha256 (base32 - "1slmajiakq7sk137vgqq9c93r5s620a46lw2jwbnzxhysjw3wkwf")) + "0am945k2zqrka2xn7lb5grmkad4lwncnhnwk8iq6f269birzsj8w")) (modules '((guix build utils))) (snippet '(substitute* "Makefile.in" @@ -769,25 +770,25 @@ build process and its dependencies, whereas Make uses Makefile format.") (native-inputs `(("openjdk-src" ,(drop "openjdk" - "08a4d1sg5m9l99lc7gafc7dmzmf4d8jvij5pffxv8rf6pk7psk24")) + "02klsxp9hlf5sial6mxpiq53hmrhlrg6x774j7bjjfhb7hpdvadh")) ("corba-drop" ,(drop "corba" - "12br49cfrqgvms0bnaij7fvnakvb6q8dlpqja64rg5q5r3x4gps8")) + "1vbly6khri241xda05gnwkpf2fk41d96ls96ximi084mx0a3w5rd")) ("jaxp-drop" ,(drop "jaxp" - "07v2y3pll6z2wma94qilgffwyn2n4jna01mrhqwkb27whfpjfkmz")) + "0s8zln64vdwdxwlw1vpfzm8xbpyhgsv3nqjmnv7y36qpsszg27a5")) ("jaxws-drop" ,(drop "jaxws" - "18rw64jjpq14v56d0q1xvz8knl0kf02rcday7fvlaxrbbj19km55")) + "0myd66bv8ib8krzgqv754bc564rd8xwpwabvf7my1apyb86vap3n")) ("jdk-drop" ,(drop "jdk" - "1ig7xipi3vzm6cphy5fdraxi72p27xsg2qb51yqx9qwsmlrv1zj4")) + "10b4lfv10vba07zblw0wii7mhrfhf32pf7410x5nz2q0smgszl2h")) ("langtools-drop" ,(drop "langtools" - "0sn9qv9nnhaan2smbhrv54lfhwsjhgd3b3h736p5d2hzpw8kicry")) + "0lvncxb5qzrlqkflrnd0l8vwy155cwj1jb07rkq10z2vx0bq7lq2")) ("hotspot-drop" ,(drop "hotspot" - "16ijxy8br8dla339m4i90wr9xpf7s8z3nrhfyxm7jahr8injpzyl")) + "0q6mdgbbd3681y3n0z1v783irdjhhi73z6sn5csczpyhjm318axb")) ("ant" ,ant) ("attr" ,attr) ("autoconf" ,autoconf) @@ -839,16 +840,16 @@ IcedTea build harness.") (license license:gpl2+)))) (define-public icedtea-8 - (let* ((version "3.3.0") + (let* ((version "3.4.0") (drop (lambda (name hash) (origin (method url-fetch) (uri (string-append - "http://icedtea.classpath.org/download/drops/" + "http://icedtea.classpath.org/download/drops" "/icedtea8/" version "/" name ".tar.xz")) (sha256 (base32 hash)))))) (package (inherit icedtea-7) - (version "3.3.0") + (version "3.4.0") (source (origin (method url-fetch) (uri (string-append @@ -856,7 +857,7 @@ IcedTea build harness.") version ".tar.xz")) (sha256 (base32 - "02vmxa6gc6gizcri1fy797qmmm9y77vgi7gy9pwkk4agcw4zyr5p")) + "16if055973y6yw7n5gczp8iksvc31cy4p5by9lkbniadqj4z665m")) (modules '((guix build utils))) (snippet '(begin @@ -928,31 +929,34 @@ IcedTea build harness.") `(("jdk" ,icedtea-7 "jdk") ("openjdk-src" ,(drop "openjdk" - "0889n19w6rvpzxgmmk9hlgzdh9ya95qkc2ajgpnzr3h69g15nz48")) + "0va5i3zr8y8ncv914rz914jda9d88gq0viww3smdqnln8n78rszi")) + ("aarch32-drop" + ,(drop "aarch32" + "0cway5a5hcfyh4pzl9zz5xr7lil4gsliy6r5iqbaasd2d9alvqiq")) ("corba-drop" ,(drop "corba" - "0qcb72hhlsjgp6h9wd048qgyc88b7lfnxyc51xfyav0nhpfjnj8r")) + "1l9zr97a3kq00bj4i8wcdsjlz3xlfldxd8zhkcxikinwd5n0n8a7")) ("jaxp-drop" ,(drop "jaxp" - "1vyc7dw10x5k45jmi348y8min6sg651ns12zzn30fjzhpfi36nds")) + "0lqxrsr3xlpwm2na6f2rpl7znrz34dkb9dg3zjmympyjy4kqljn7")) ("jaxws-drop" ,(drop "jaxws" - "1dki6p39z1ms94cjvj5hd9q75q75g244c0xib82pma3q74jg6hx4")) + "1b3chckk10dzrpa7cswmcf1jvryaiwkj8lihfqjr5j7l668jwr4h")) ("jdk-drop" ,(drop "jdk" - "17czby3nylcglp7l3d90a4pz1izc1sslifv8hrmynm9hn4m9d3k8")) + "15lq0k2jv2x26x6vqkbljdcxk35i3b60pcsw3j1sdfmlk1xy6wgc")) ("langtools-drop" ,(drop "langtools" - "1h4azc21k58g9gn2y686wrvn9ahgac0ii7jhrrrmb5c1kjs0y2qv")) + "17xkb8ahkg04ri0bp5wblcp1a2lp8j7c83ic5zdbggvgm339k5s8")) ("hotspot-drop" ,(drop "hotspot" - "12bfgwhrjfhgj6a2dsysdwhirg0jx88pi44y7s8a1bdan1mp03r8")) + "0xpx8ykaq0ki6r0dl3dzca2xgp1p82z8mvsxcs2931ib667ncgcp")) ("nashorn-drop" ,(drop "nashorn" - "0bg9r16jffc64fhyczn4jpx7bkfw7w62prw65mh66vshqk4lbh0f")) + "1bnn4731lhlvg8axy4mjxgvh646yl22hp52wipx8cfca4vkn2f1z")) ("shenandoah-drop" ,(drop "shenandoah" - "0abjlsvz669i06mlks28wnh11mm55y5613990pn5j7hfbw8a34q5")) + "0fpxl8zlii1hpm777r875ys2cr5ih3gb6p1nm9jfa6krjrccrxv1")) ,@(fold alist-delete (package-native-inputs icedtea-7) '("gcj" "openjdk-src" "corba-drop" "jaxp-drop" "jaxws-drop" "jdk-drop" "langtools-drop" "hotspot-drop"))))))) @@ -1975,6 +1979,1010 @@ logging implementations. A library that uses the commons-logging API can be used with any logging implementation at runtime.") (license license:asl2.0))) +;; This is the last release of the 1.x series. +(define-public java-mockito-1 + (package + (name "java-mockito") + (version "1.10.19") + (source (origin + (method url-fetch) + (uri (string-append "http://repo1.maven.org/maven2/" + "org/mockito/mockito-core/" version + "/mockito-core-" version "-sources.jar")) + (sha256 + (base32 + "0vmiwnwpf83g2q7kj1rislmja8fpvqkixjhawh7nxnygx6pq11kc")))) + (build-system ant-build-system) + (arguments + `(#:jar-name "mockito.jar" + #:tests? #f ; no tests included + ;; FIXME: patch-and-repack does not support jars, so we have to apply + ;; patches in build phases. + #:phases + (modify-phases %standard-phases + ;; Mockito was developed against a different version of hamcrest, + ;; which does not require matcher implementations to provide an + ;; implementation of the "describeMismatch" method. We add this + ;; simple definition to pass the build with our version of hamcrest. + (add-after 'unpack 'fix-hamcrest-build-error + (lambda _ + (substitute* "src/org/mockito/internal/matchers/LocalizedMatcher.java" + (("public Matcher getActualMatcher\\(\\) .*" line) + (string-append " + public void describeMismatch(Object item, Description description) { + actualMatcher.describeMismatch(item, description); + }" + line))) + #t)) + ;; Mockito bundles cglib. We have a cglib package, so let's use + ;; that instead. + (add-after 'unpack 'use-system-libraries + (lambda _ + (with-directory-excursion "src/org/mockito/internal/creation/cglib" + (substitute* '("CGLIBHacker.java" + "CglibMockMaker.java" + "ClassImposterizer.java" + "DelegatingMockitoMethodProxy.java" + "MethodInterceptorFilter.java" + "MockitoNamingPolicy.java" + "SerializableMockitoMethodProxy.java" + "SerializableNoOp.java") + (("import org.mockito.cglib") "import net.sf.cglib"))) + #t))))) + (inputs + `(("java-junit" ,java-junit) + ("java-objenesis" ,java-objenesis) + ("java-cglib" ,java-cglib) + ("java-hamcrest-core" ,java-hamcrest-core))) + (home-page "http://mockito.org") + (synopsis "Mockito is a mock library for Java") + (description "Mockito is a mocking library for Java which lets you write +tests with a clean and simple API. It generates mocks using reflection, and +it records all mock invocations, including methods arguments.") + (license license:asl2.0))) + +(define-public java-httpcomponents-httpcore + (package + (name "java-httpcomponents-httpcore") + (version "4.4.6") + (source (origin + (method url-fetch) + (uri (string-append "mirror://apache//httpcomponents/httpcore/" + "source/httpcomponents-core-" + version "-src.tar.gz")) + (sha256 + (base32 + "02bwcf38y4vgwq7kj2s6q7qrmma641r5lacivm16kgxvb2j6h1vy")))) + (build-system ant-build-system) + (arguments + `(#:jar-name "httpcomponents-httpcore.jar" + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'chdir + (lambda _ (chdir "httpcore") #t))))) + (inputs + `(("java-commons-logging-minimal" ,java-commons-logging-minimal) + ("java-commons-lang3" ,java-commons-lang3))) + (native-inputs + `(("java-junit" ,java-junit) + ("java-mockito" ,java-mockito-1))) + (home-page "https://hc.apache.org/httpcomponents-core-4.4.x/index.html") + (synopsis "Low level HTTP transport components") + (description "HttpCore is a set of low level HTTP transport components +that can be used to build custom client and server side HTTP services with a +minimal footprint. HttpCore supports two I/O models: blocking I/O model based +on the classic Java I/O and non-blocking, event driven I/O model based on Java +NIO. + +This package provides the blocking I/O model library.") + (license license:asl2.0))) + +(define-public java-httpcomponents-httpcore-nio + (package (inherit java-httpcomponents-httpcore) + (name "java-httpcomponents-httpcore-nio") + (arguments + `(#:jar-name "httpcomponents-httpcore-nio.jar" + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'chdir + (lambda _ (chdir "httpcore-nio") #t))))) + (inputs + `(("java-httpcomponents-httpcore" ,java-httpcomponents-httpcore) + ("java-hamcrest-core" ,java-hamcrest-core) + ,@(package-inputs java-httpcomponents-httpcore))) + (description "HttpCore is a set of low level HTTP transport components +that can be used to build custom client and server side HTTP services with a +minimal footprint. HttpCore supports two I/O models: blocking I/O model based +on the classic Java I/O and non-blocking, event driven I/O model based on Java +NIO. + +This package provides the non-blocking I/O model library based on Java +NIO."))) + +(define-public java-httpcomponents-httpcore-ab + (package (inherit java-httpcomponents-httpcore) + (name "java-httpcomponents-httpcore-ab") + (arguments + `(#:jar-name "httpcomponents-httpcore-ab.jar" + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'chdir + (lambda _ (chdir "httpcore-ab") #t))))) + (inputs + `(("java-httpcomponents-httpcore" ,java-httpcomponents-httpcore) + ("java-commons-cli" ,java-commons-cli) + ("java-hamcrest-core" ,java-hamcrest-core) + ,@(package-inputs java-httpcomponents-httpcore))) + (synopsis "Apache HttpCore benchmarking tool") + (description "This package provides the HttpCore benchmarking tool. It is +an Apache AB clone based on HttpCore."))) + +(define-public java-httpcomponents-httpclient + (package + (name "java-httpcomponents-httpclient") + (version "4.5.3") + (source (origin + (method url-fetch) + (uri (string-append "mirror://apache/httpcomponents/httpclient/" + "source/httpcomponents-client-" + version "-src.tar.gz")) + (sha256 + (base32 + "1428399s7qy3cim5wc6f3ks4gl9nf9vkjpfmnlap3jflif7g2pj1")))) + (build-system ant-build-system) + (arguments + `(#:jar-name "httpcomponents-httpclient.jar" + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'chdir + (lambda _ (chdir "httpclient") #t))))) + (inputs + `(("java-commons-logging-minimal" ,java-commons-logging-minimal) + ("java-commons-codec" ,java-commons-codec) + ("java-hamcrest-core" ,java-hamcrest-core) + ("java-httpcomponents-httpcore" ,java-httpcomponents-httpcore) + ("java-mockito" ,java-mockito-1) + ("java-junit" ,java-junit))) + (home-page "https://hc.apache.org/httpcomponents-client-ga/") + (synopsis "HTTP client library for Java") + (description "Although the @code{java.net} package provides basic +functionality for accessing resources via HTTP, it doesn't provide the full +flexibility or functionality needed by many applications. @code{HttpClient} +seeks to fill this void by providing an efficient, up-to-date, and +feature-rich package implementing the client side of the most recent HTTP +standards and recommendations.") + (license license:asl2.0))) + +(define-public java-httpcomponents-httpmime + (package (inherit java-httpcomponents-httpclient) + (name "java-httpcomponents-httpmime") + (arguments + `(#:jar-name "httpcomponents-httpmime.jar" + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'chdir + (lambda _ (chdir "httpmime") #t))))) + (inputs + `(("java-httpcomponents-httpclient" ,java-httpcomponents-httpclient) + ("java-httpcomponents-httpcore" ,java-httpcomponents-httpcore) + ("java-junit" ,java-junit) + ("java-hamcrest-core" ,java-hamcrest-core))))) + +(define-public java-commons-net + (package + (name "java-commons-net") + (version "3.6") + (source (origin + (method url-fetch) + (uri (string-append "mirror://apache/commons/net/source/" + "commons-net-" version "-src.tar.gz")) + (sha256 + (base32 + "0n0cmnddk9qdqhjvka8pc6hd9mn2qi3166f1s6xk32h7rfy1adxr")))) + (build-system ant-build-system) + (arguments + `(;; FIXME: MainTest.java tries to read "examples.properties" (which + ;; should be "resources/examples/examples.properties"), but gets "null" + ;; instead. + #:tests? #f + #:jar-name "commons-net.jar")) + (native-inputs + `(("java-junit" ,java-junit) + ("java-hamcrest-core" ,java-hamcrest-core))) + (home-page "http://commons.apache.org/net/") + (synopsis "Client library for many basic Internet protocols") + (description "The Apache Commons Net library implements the client side of +many basic Internet protocols. The purpose of the library is to provide +fundamental protocol access, not higher-level abstractions.") + (license license:asl2.0))) + +(define-public java-jsch + (package + (name "java-jsch") + (version "0.1.54") + (source (origin + (method url-fetch) + (uri (string-append "mirror://sourceforge/jsch/jsch/" + version "/jsch-" version ".zip")) + (sha256 + (base32 + "029rdddyq1mh3ghryh3ki99kba1xkf1d1swjv2vi6lk6zzjy2wdb")))) + (build-system ant-build-system) + (arguments + `(#:build-target "dist" + #:tests? #f ; no tests included + #:phases + (modify-phases %standard-phases + (replace 'install (install-jars "dist"))))) + (native-inputs + `(("unzip" ,unzip))) + (home-page "http://www.jcraft.com/jsch/") + (synopsis "Pure Java implementation of SSH2") + (description "JSch is a pure Java implementation of SSH2. JSch allows you +to connect to an SSH server and use port forwarding, X11 forwarding, file +transfer, etc., and you can integrate its functionality into your own Java +programs.") + (license license:bsd-3))) + +(define-public java-commons-compress + (package + (name "java-commons-compress") + (version "1.13") + (source (origin + (method url-fetch) + (uri (string-append "mirror://apache/commons/compress/source/" + "commons-compress-" version "-src.tar.gz")) + (sha256 + (base32 + "1vjqvavrn0babffn1kciz6v52ibwq2vwhzlb95hazis3lgllnxc8")))) + (build-system ant-build-system) + (arguments + `(#:jar-name "commons-compress.jar" + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'delete-bad-tests + (lambda _ + (with-directory-excursion "src/test/java/org/apache/commons/compress/" + ;; FIXME: These tests really should not fail. Maybe they are + ;; indicative of problems with our Java packaging work. + + ;; This test fails with a null pointer exception. + (delete-file "archivers/sevenz/SevenZOutputFileTest.java") + ;; This test fails to open test resources. + (delete-file "archivers/zip/ExplodeSupportTest.java") + + ;; FIXME: This test adds a dependency on powermock, which is hard to + ;; package at this point. + ;; https://github.com/powermock/powermock + (delete-file "archivers/sevenz/SevenZNativeHeapTest.java")) + #t))))) + (inputs + `(("java-junit" ,java-junit) + ("java-hamcrest-core" ,java-hamcrest-core) + ("java-mockito" ,java-mockito-1) + ("java-xz" ,java-xz))) + (home-page "https://commons.apache.org/proper/commons-compress/") + (synopsis "Java library for working with compressed files") + (description "The Apache Commons Compress library defines an API for +working with compressed files such as ar, cpio, Unix dump, tar, zip, gzip, XZ, +Pack200, bzip2, 7z, arj, lzma, snappy, DEFLATE, lz4 and Z files.") + (license license:asl2.0))) + +(define-public java-commons-net + (package + (name "java-commons-net") + (version "3.6") + (source (origin + (method url-fetch) + (uri (string-append "mirror://apache/commons/net/source/" + "commons-net-" version "-src.tar.gz")) + (sha256 + (base32 + "0n0cmnddk9qdqhjvka8pc6hd9mn2qi3166f1s6xk32h7rfy1adxr")))) + (build-system ant-build-system) + (arguments + `(;; FIXME: MainTest.java tries to read "examples.properties" (which + ;; should be "resources/examples/examples.properties"), but gets "null" + ;; instead. + #:tests? #f + #:jar-name "commons-net.jar")) + (native-inputs + `(("java-junit" ,java-junit) + ("java-hamcrest-core" ,java-hamcrest-core))) + (home-page "http://commons.apache.org/net/") + (synopsis "Client library for many basic Internet protocols") + (description "The Apache Commons Net library implements the client side of +many basic Internet protocols. The purpose of the library is to provide +fundamental protocol access, not higher-level abstractions.") + (license license:asl2.0))) + +(define-public java-osgi-annotation + (package + (name "java-osgi-annotation") + (version "6.0.0") + (source (origin + (method url-fetch) + (uri (string-append "https://repo1.maven.org/maven2/" + "org/osgi/org.osgi.annotation/" version "/" + "org.osgi.annotation-" version "-sources.jar")) + (sha256 + (base32 + "1q718mb7gqg726rh6pc2hcisn8v50nv35abbir0jypmffhiii85w")))) + (build-system ant-build-system) + (arguments + `(#:tests? #f ; no tests + #:jar-name "osgi-annotation.jar")) + (home-page "http://www.osgi.org") + (synopsis "Annotation module of OSGi framework") + (description + "OSGi, for Open Services Gateway initiative framework, is a module system +and service platform for the Java programming language. This package contains +the OSGi annotation module, providing additional services to help dynamic +components.") + (license license:asl2.0))) + +(define-public java-osgi-core + (package + (name "java-osgi-core") + (version "6.0.0") + (source (origin + (method url-fetch) + (uri (string-append "https://repo1.maven.org/maven2/" + "org/osgi/org.osgi.core/" version "/" + "org.osgi.core-" version "-sources.jar")) + (sha256 + (base32 + "19bpf5jx32jq9789gyhin35q5v7flmw0p9mk7wbgqpxqfmxyiabv")))) + (build-system ant-build-system) + (arguments + `(#:tests? #f ; no tests + #:jar-name "osgi-core.jar")) + (inputs + `(("java-osgi-annotation" ,java-osgi-annotation))) + (home-page "http://www.osgi.org") + (synopsis "Core module of OSGi framework") + (description + "OSGi, for Open Services Gateway initiative framework, is a module system +and service platform for the Java programming language. This package contains +the OSGi Core module.") + (license license:asl2.0))) + +(define-public java-osgi-service-event + (package + (name "java-osgi-service-event") + (version "1.3.1") + (source (origin + (method url-fetch) + (uri (string-append "https://repo1.maven.org/maven2/" + "org/osgi/org.osgi.service.event/" + version "/org.osgi.service.event-" + version "-sources.jar")) + (sha256 + (base32 + "1nyhlgagwym75bycnjczwbnpymv2iw84zbhvvzk84g9q736i6qxm")))) + (build-system ant-build-system) + (arguments + `(#:tests? #f ; no tests + #:jar-name "osgi-service-event.jar")) + (inputs + `(("java-osgi-annotation" ,java-osgi-annotation) + ("java-osgi-core" ,java-osgi-core))) + (home-page "http://www.osgi.org") + (synopsis "OSGi service event module") + (description + "OSGi, for Open Services Gateway initiative framework, is a module system +and service platform for the Java programming language. This package contains +the OSGi @code{org.osgi.service.event} module.") + (license license:asl2.0))) + +(define-public java-eclipse-osgi + (package + (name "java-eclipse-osgi") + (version "3.11.3") + (source (origin + (method url-fetch) + (uri (string-append "https://repo1.maven.org/maven2/" + "org/eclipse/platform/org.eclipse.osgi/" + version "/org.eclipse.osgi-" + version "-sources.jar")) + (sha256 + (base32 + "00cqc6lb29n0zv68b4l842vzkwawvbr7gshfdygsk8sicvcq2c7b")))) + (build-system ant-build-system) + (arguments + `(#:tests? #f ; no tests included + #:jar-name "eclipse-equinox-osgi.jar")) + (inputs + `(("java-osgi-annotation" ,java-osgi-annotation))) + (home-page "http://www.eclipse.org/equinox/") + (synopsis "Eclipse Equinox OSGi framework") + (description "This package provides an implementation of the OSGi Core +specification.") + (license license:epl1.0))) + +(define-public java-eclipse-equinox-common + (package + (name "java-eclipse-equinox-common") + (version "3.8.0") + (source (origin + (method url-fetch) + (uri (string-append "https://repo1.maven.org/maven2/" + "org/eclipse/platform/org.eclipse.equinox.common/" + version "/org.eclipse.equinox.common-" + version "-sources.jar")) + (sha256 + (base32 + "12aazpkgw46r1qj0pr421jzwhbmsizd97r37krd7njnbrdgfzksc")))) + (build-system ant-build-system) + (arguments + `(#:tests? #f ; no tests included + #:jar-name "eclipse-equinox-common.jar")) + (inputs + `(("java-eclipse-osgi" ,java-eclipse-osgi))) + (home-page "http://www.eclipse.org/equinox/") + (synopsis "Common Eclipse runtime") + (description "This package provides the common Eclipse runtime.") + (license license:epl1.0))) + +(define-public java-eclipse-core-jobs + (package + (name "java-eclipse-core-jobs") + (version "3.8.0") + (source (origin + (method url-fetch) + (uri (string-append "https://repo1.maven.org/maven2/" + "org/eclipse/platform/org.eclipse.core.jobs/" + version "/org.eclipse.core.jobs-" + version "-sources.jar")) + (sha256 + (base32 + "0395b8lh0km8vhzjnchvs1rii1qz48hyvb2wqfaq4yhklbwihq4b")))) + (build-system ant-build-system) + (arguments + `(#:tests? #f ; no tests included + #:jar-name "eclipse-core-jobs.jar")) + (inputs + `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common) + ("java-eclipse-osgi" ,java-eclipse-osgi))) + (home-page "http://www.eclipse.org/equinox/") + (synopsis "Eclipse jobs mechanism") + (description "This package provides the Eclipse jobs mechanism.") + (license license:epl1.0))) + +(define-public java-eclipse-equinox-registry + (package + (name "java-eclipse-equinox-registry") + (version "3.6.100") + (source (origin + (method url-fetch) + (uri (string-append "https://repo1.maven.org/maven2/" + "org/eclipse/platform/org.eclipse.equinox.registry/" + version "/org.eclipse.equinox.registry-" + version "-sources.jar")) + (sha256 + (base32 + "1i9sgymh2fy5vdgk5y7s3qvrlbgh4l93ddqi3v4zmca7hwrlhf9k")))) + (build-system ant-build-system) + (arguments + `(#:tests? #f ; no tests included + #:jar-name "eclipse-equinox-registry.jar")) + (inputs + `(("java-eclipse-core-jobs" ,java-eclipse-core-jobs) + ("java-eclipse-equinox-common" ,java-eclipse-equinox-common) + ("java-eclipse-osgi" ,java-eclipse-osgi))) + (home-page "http://www.eclipse.org/equinox/") + (synopsis "Eclipse extension registry support") + (description "This package provides support for the Eclipse extension +registry.") + (license license:epl1.0))) + +(define-public java-eclipse-equinox-app + (package + (name "java-eclipse-equinox-app") + (version "1.3.400") + (source (origin + (method url-fetch) + (uri (string-append "https://repo1.maven.org/maven2/" + "org/eclipse/platform/org.eclipse.equinox.app/" + version "/org.eclipse.equinox.app-" + version "-sources.jar")) + (sha256 + (base32 + "0nhvbp93y203ar7y59gb0mz3w2d3jlqhr0c9hii9bcfpmr7imdab")))) + (build-system ant-build-system) + (arguments + `(#:tests? #f ; no tests included + #:jar-name "eclipse-equinox-app.jar")) + (inputs + `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common) + ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry) + ("java-eclipse-osgi" ,java-eclipse-osgi) + ("java-osgi-service-event" ,java-osgi-service-event))) + (home-page "http://www.eclipse.org/equinox/") + (synopsis "Equinox application container") + (description "This package provides the Equinox application container for +Eclipse.") + (license license:epl1.0))) + +(define-public java-eclipse-equinox-preferences + (package + (name "java-eclipse-equinox-preferences") + (version "3.6.1") + (source (origin + (method url-fetch) + (uri (string-append "https://repo1.maven.org/maven2/" + "org/eclipse/platform/org.eclipse.equinox.preferences/" + version "/org.eclipse.equinox.preferences-" + version "-sources.jar")) + (sha256 + (base32 + "0k7w6c141sqym4fy3af0qkwpy4pdh2vsjpjba6rp5fxyqa24v0a2")))) + (build-system ant-build-system) + (arguments + `(#:tests? #f ; no tests included + #:jar-name "eclipse-equinox-preferences.jar")) + (inputs + `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common) + ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry) + ("java-eclipse-osgi" ,java-eclipse-osgi))) + (home-page "http://www.eclipse.org/equinox/") + (synopsis "Eclipse preferences mechanism") + (description "This package provides the Eclipse preferences mechanism with +the module @code{org.eclipse.equinox.preferences}.") + (license license:epl1.0))) + +(define-public java-eclipse-core-contenttype + (package + (name "java-eclipse-core-contenttype") + (version "3.5.100") + (source (origin + (method url-fetch) + (uri (string-append "https://repo1.maven.org/maven2/" + "org/eclipse/platform/org.eclipse.core.contenttype/" + version "/org.eclipse.core.contenttype-" + version "-sources.jar")) + (sha256 + (base32 + "1wcqcv7ijwv5rh748vz3x9pkmjl9w1r0k0026k56n8yjl4rrmspi")))) + (build-system ant-build-system) + (arguments + `(#:tests? #f ; no tests included + #:jar-name "eclipse-core-contenttype.jar")) + (inputs + `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common) + ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences) + ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry) + ("java-eclipse-osgi" ,java-eclipse-osgi))) + (home-page "http://www.eclipse.org/") + (synopsis "Eclipse content mechanism") + (description "This package provides the Eclipse content mechanism in the +@code{org.eclipse.core.contenttype} module.") + (license license:epl1.0))) + +(define-public java-eclipse-core-runtime + (package + (name "java-eclipse-core-runtime") + (version "3.12.0") + (source (origin + (method url-fetch) + (uri (string-append "https://repo1.maven.org/maven2/" + "org/eclipse/platform/org.eclipse.core.runtime/" + version "/org.eclipse.core.runtime-" + version "-sources.jar")) + (sha256 + (base32 + "16mkf8jgj35pgzms7w1gyfq0gfm4ixw6c5xbbxzdj1la56c758ya")))) + (build-system ant-build-system) + (arguments + `(#:tests? #f ; no tests included + #:jar-name "eclipse-core-runtime.jar")) + (inputs + `(("java-eclipse-core-contenttype" ,java-eclipse-core-contenttype) + ("java-eclipse-core-jobs" ,java-eclipse-core-jobs) + ("java-eclipse-equinox-app" ,java-eclipse-equinox-app) + ("java-eclipse-equinox-common" ,java-eclipse-equinox-common) + ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry) + ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences) + ("java-eclipse-osgi" ,java-eclipse-osgi))) + (home-page "https://www.eclipse.org/") + (synopsis "Eclipse core runtime") + (description "This package provides the Eclipse core runtime with the +module @code{org.eclipse.core.runtime}.") + (license license:epl1.0))) + +(define-public java-eclipse-core-filesystem + (package + (name "java-eclipse-core-filesystem") + (version "1.6.1") + (source (origin + (method url-fetch) + (uri (string-append "https://repo1.maven.org/maven2/" + "org/eclipse/platform/org.eclipse.core.filesystem/" + version "/org.eclipse.core.filesystem-" + version "-sources.jar")) + (sha256 + (base32 + "0km1bhwjim4rfy3pkvjhvy31kgsyf2ncx0mlkmbf5n6g57pphdyj")))) + (build-system ant-build-system) + (arguments + `(#:tests? #f ; no tests included + #:jar-name "eclipse-core-filesystem.jar")) + (inputs + `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common) + ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry) + ("java-eclipse-osgi" ,java-eclipse-osgi))) + (home-page "https://www.eclipse.org/") + (synopsis "Eclipse core file system") + (description "This package provides the Eclipse core file system with the +module @code{org.eclipse.core.filesystem}.") + (license license:epl1.0))) + +(define-public java-eclipse-core-expressions + (package + (name "java-eclipse-core-expressions") + (version "3.5.100") + (source (origin + (method url-fetch) + (uri (string-append "https://repo1.maven.org/maven2/" + "org/eclipse/platform/org.eclipse.core.expressions/" + version "/org.eclipse.core.expressions-" + version "-sources.jar")) + (sha256 + (base32 + "18bw2l875gmygvpagpgk9l24qzbdjia4ag12nw6fi8v8yaq4987f")))) + (build-system ant-build-system) + (arguments + `(#:tests? #f ; no tests included + #:jar-name "eclipse-core-expressions.jar")) + (inputs + `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common) + ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry) + ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences) + ("java-eclipse-core-runtime" ,java-eclipse-core-runtime) + ("java-eclipse-osgi" ,java-eclipse-osgi))) + (home-page "https://www.eclipse.org/") + (synopsis "Eclipse core expression language") + (description "This package provides the Eclipse core expression language +with the @code{org.eclipse.core.expressions} module.") + (license license:epl1.0))) + +(define-public java-eclipse-core-variables + (package + (name "java-eclipse-core-variables") + (version "3.3.0") + (source (origin + (method url-fetch) + (uri (string-append "https://repo1.maven.org/maven2/" + "org/eclipse/platform/org.eclipse.core.variables/" + version "/org.eclipse.core.variables-" + version "-sources.jar")) + (sha256 + (base32 + "12dirh03zi4n5x5cj07vzrhkmnqy6h9q10h9j605pagmpmifyxmy")))) + (build-system ant-build-system) + (arguments + `(#:tests? #f ; no tests included + #:jar-name "eclipse-core-variables.jar")) + (inputs + `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common) + ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry) + ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences) + ("java-eclipse-core-runtime" ,java-eclipse-core-runtime) + ("java-eclipse-osgi" ,java-eclipse-osgi))) + (home-page "https://www.eclipse.org/platform") + (synopsis "Eclipse core variables") + (description "This package provides the Eclipse core variables module +@code{org.eclipse.core.variables}.") + (license license:epl1.0))) + +(define-public java-eclipse-ant-core + (package + (name "java-eclipse-ant-core") + (version "3.4.100") + (source (origin + (method url-fetch) + (uri (string-append "https://repo1.maven.org/maven2/" + "org/eclipse/platform/org.eclipse.ant.core/" + version "/org.eclipse.ant.core-" + version "-sources.jar")) + (sha256 + (base32 + "11g3if794qjlk98mz9zch22rr56sd7z63vn4i7k2icr8cq5bfqg7")))) + (build-system ant-build-system) + (arguments + `(#:tests? #f ; no tests included + #:jar-name "eclipse-ant-core.jar")) + (inputs + `(("java-eclipse-equinox-app" ,java-eclipse-equinox-app) + ("java-eclipse-equinox-common" ,java-eclipse-equinox-common) + ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry) + ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences) + ("java-eclipse-core-contenttype" ,java-eclipse-core-contenttype) + ("java-eclipse-core-runtime" ,java-eclipse-core-runtime) + ("java-eclipse-core-variables" ,java-eclipse-core-variables) + ("java-eclipse-osgi" ,java-eclipse-osgi))) + (home-page "https://www.eclipse.org/platform") + (synopsis "Ant build tool core libraries") + (description "This package provides the ant build tool core libraries with +the module @code{org.eclipse.ant.core}.") + (license license:epl1.0))) + +(define-public java-eclipse-core-resources + (package + (name "java-eclipse-core-resources") + (version "3.11.1") + (source (origin + (method url-fetch) + (uri (string-append "https://repo1.maven.org/maven2/" + "org/eclipse/platform/org.eclipse.core.resources/" + version "/org.eclipse.core.resources-" + version "-sources.jar")) + (sha256 + (base32 + "1hrfxrll6cpcagfksk2na1ypvkcnsp0fk6n3vcsrn97qayf9mx9l")))) + (build-system ant-build-system) + (arguments + `(#:tests? #f ; no tests included + #:jar-name "eclipse-core-resources.jar")) + (inputs + `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common) + ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences) + ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry) + ("java-eclipse-core-contenttype" ,java-eclipse-core-contenttype) + ("java-eclipse-core-expressions" ,java-eclipse-core-expressions) + ("java-eclipse-core-filesystem" ,java-eclipse-core-filesystem) + ("java-eclipse-core-jobs" ,java-eclipse-core-jobs) + ("java-eclipse-core-runtime" ,java-eclipse-core-runtime) + ("java-eclipse-ant-core" ,java-eclipse-ant-core) + ("java-eclipse-osgi" ,java-eclipse-osgi))) + (home-page "https://www.eclipse.org/") + (synopsis "Eclipse core resource management") + (description "This package provides the Eclipse core resource management +module @code{org.eclipse.core.resources}.") + (license license:epl1.0))) + +(define-public java-eclipse-compare-core + (package + (name "java-eclipse-compare-core") + (version "3.6.0") + (source (origin + (method url-fetch) + (uri (string-append "https://repo1.maven.org/maven2/" + "org/eclipse/platform/org.eclipse.compare.core/" + version "/org.eclipse.compare.core-" + version "-sources.jar")) + (sha256 + (base32 + "10g37r0pbiffyv2wk35c6g5lwzkdipkl0kkjp41v84dln46xm4dg")))) + (build-system ant-build-system) + (arguments + `(#:tests? #f ; no tests included + #:jar-name "eclipse-compare-core.jar")) + (inputs + `(("java-eclipse-core-runtime" ,java-eclipse-core-runtime) + ("java-eclipse-equinox-common" ,java-eclipse-equinox-common) + ("java-eclipse-osgi" ,java-eclipse-osgi) + ("java-icu4j" ,java-icu4j))) + (home-page "https://www.eclipse.org/") + (synopsis "Eclipse core compare support") + (description "This package provides the Eclipse core compare support +module @code{org.eclipse.compare.core}.") + (license license:epl1.0))) + +(define-public java-eclipse-team-core + (package + (name "java-eclipse-team-core") + (version "3.8.0") + (source (origin + (method url-fetch) + (uri (string-append "https://repo1.maven.org/maven2/" + "org/eclipse/platform/org.eclipse.team.core/" + version "/org.eclipse.team.core-" + version "-sources.jar")) + (sha256 + (base32 + "02j2jzqgb26zx2d5ahxmvijw6j4r0la90zl5c3i65x6z19ciyam7")))) + (build-system ant-build-system) + (arguments + `(#:tests? #f ; no tests included + #:jar-name "eclipse-team-core.jar")) + (inputs + `(("java-eclipse-compare-core" ,java-eclipse-compare-core) + ("java-eclipse-core-contenttype" ,java-eclipse-core-contenttype) + ("java-eclipse-core-filesystem" ,java-eclipse-core-filesystem) + ("java-eclipse-core-jobs" ,java-eclipse-core-jobs) + ("java-eclipse-core-resources" ,java-eclipse-core-resources) + ("java-eclipse-core-runtime" ,java-eclipse-core-runtime) + ("java-eclipse-equinox-common" ,java-eclipse-equinox-common) + ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry) + ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences) + ("java-eclipse-osgi" ,java-eclipse-osgi))) + (home-page "https://www.eclipse.org/platform") + (synopsis "Eclipse team support core") + (description "This package provides the Eclipse team support core module +@code{org.eclipse.team.core}.") + (license license:epl1.0))) + +(define-public java-eclipse-core-commands + (package + (name "java-eclipse-core-commands") + (version "3.8.1") + (source (origin + (method url-fetch) + (uri (string-append "https://repo1.maven.org/maven2/" + "org/eclipse/platform/org.eclipse.core.commands/" + version "/org.eclipse.core.commands-" + version "-sources.jar")) + (sha256 + (base32 + "0yjn482qndcfrsq3jd6vnhcylp16420f5aqkrwr8spsprjigjcr9")))) + (build-system ant-build-system) + (arguments + `(#:tests? #f ; no tests included + #:jar-name "eclipse-core-commands.jar")) + (inputs + `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common))) + (home-page "https://www.eclipse.org/platform") + (synopsis "Eclipse core commands") + (description "This package provides Eclipse core commands in the module +@code{org.eclipse.core.commands}.") + (license license:epl1.0))) + +(define-public java-eclipse-text + (package + (name "java-eclipse-text") + (version "3.6.0") + (source (origin + (method url-fetch) + (uri (string-append "https://repo1.maven.org/maven2/" + "org/eclipse/platform/org.eclipse.text/" + version "/org.eclipse.text-" + version "-sources.jar")) + (sha256 + (base32 + "0scz70vzz5qs5caji9f5q01vkqnvip7dpri1q07l8wbbdcxn4cq1")))) + (build-system ant-build-system) + (arguments + `(#:tests? #f ; no tests included + #:jar-name "eclipse-text.jar" + #:phases + (modify-phases %standard-phases + ;; When creating a new category we must make sure that the new list + ;; matches List<Position>. By default it seems to be too generic + ;; (ArrayList<Object>), so we specialize it to ArrayList<Position>. + ;; Without this we get this error: + ;; + ;; [javac] .../src/org/eclipse/jface/text/AbstractDocument.java:376: + ;; error: method put in interface Map<K,V> cannot be applied to given types; + ;; [javac] fPositions.put(category, new ArrayList<>()); + ;; [javac] ^ + ;; [javac] required: String,List<Position> + ;; [javac] found: String,ArrayList<Object> + ;; [javac] reason: actual argument ArrayList<Object> cannot be converted + ;; to List<Position> by method invocation conversion + ;; [javac] where K,V are type-variables: + ;; [javac] K extends Object declared in interface Map + ;; [javac] V extends Object declared in interface Map + ;; + ;; I don't know if this is a good fix. I suspect it is not, but it + ;; seems to work. + (add-after 'unpack 'fix-compilation-error + (lambda _ + (substitute* "src/org/eclipse/jface/text/AbstractDocument.java" + (("Positions.put\\(category, new ArrayList<>\\(\\)\\);") + "Positions.put(category, new ArrayList<Position>());")) + #t))))) + (inputs + `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common) + ("java-eclipse-core-commands" ,java-eclipse-core-commands) + ("java-icu4j" ,java-icu4j))) + (home-page "http://www.eclipse.org/platform") + (synopsis "Eclipse text library") + (description "Platform Text is part of the Platform UI project and +provides the basic building blocks for text and text editors within Eclipse +and contributes the Eclipse default text editor.") + (license license:epl1.0))) + +(define-public java-eclipse-jdt-core + (package + (name "java-eclipse-jdt-core") + (version "3.12.3") + (source (origin + (method url-fetch) + (uri (string-append "https://repo1.maven.org/maven2/" + "org/eclipse/jdt/org.eclipse.jdt.core/" + version "/org.eclipse.jdt.core-" + version "-sources.jar")) + (sha256 + (base32 + "191xw4lc7mjjkprh4ji5vnpjvr5r4zvbpwkriy4bvsjqrz35vh1j")))) + (build-system ant-build-system) + (arguments + `(#:tests? #f ; no tests included + #:jar-name "eclipse-jdt-core.jar")) + (inputs + `(("java-eclipse-core-contenttype" ,java-eclipse-core-contenttype) + ("java-eclipse-core-filesystem" ,java-eclipse-core-filesystem) + ("java-eclipse-core-jobs" ,java-eclipse-core-jobs) + ("java-eclipse-core-resources" ,java-eclipse-core-resources) + ("java-eclipse-core-runtime" ,java-eclipse-core-runtime) + ("java-eclipse-equinox-app" ,java-eclipse-equinox-app) + ("java-eclipse-equinox-common" ,java-eclipse-equinox-common) + ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences) + ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry) + ("java-eclipse-osgi" ,java-eclipse-osgi) + ("java-eclipse-text" ,java-eclipse-text))) + (home-page "https://www.eclipse.org/jdt") + (synopsis "Java development tools core libraries") + (description "This package provides the core libraries of the Eclipse Java +development tools.") + (license license:epl1.0))) + +(define-public java-javax-mail + (package + (name "java-javax-mail") + (version "1.5.6") + (source (origin + (method url-fetch) + (uri (string-append "https://repo1.maven.org/maven2/" + "com/sun/mail/javax.mail/" + version "/javax.mail-" + version "-sources.jar")) + (sha256 + (base32 + "0sdlfgsc2b5s89xv1261y8i0jijcja019k2x1c8ngfn582w4jly9")))) + (build-system ant-build-system) + (arguments + `(#:tests? #f ; no tests + #:jar-name "javax-mail.jar")) + (home-page "https://javamail.java.net") + (synopsis "Reference implementation of the JavaMail API") + (description + "This package provides versions of the JavaMail API implementation, IMAP, +SMTP, and POP3 service providers, some examples, and documentation for the +JavaMail API.") + ;; GPLv2 only with "classpath exception". + (license license:gpl2))) + +(define-public java-log4j-api + (package + (name "java-log4j-api") + (version "2.4.1") + (source (origin + (method url-fetch) + (uri (string-append "mirror://apache/logging/log4j/" version + "/apache-log4j-" version "-src.tar.gz")) + (sha256 + (base32 + "0j5p9gik0jysh37nlrckqbky12isy95cpwg2gv5fas1rcdqbraxd")))) + (build-system ant-build-system) + (arguments + `(#:tests? #f ; tests require unpackaged software + #:jar-name "log4j-api.jar" + #:make-flags + (list (string-append "-Ddist.dir=" (assoc-ref %outputs "out") + "/share/java")) + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'enter-dir + (lambda _ (chdir "log4j-api") #t)) + ;; FIXME: The tests require additional software that has not been + ;; packaged yet, such as + ;; * org.apache.maven + ;; * org.apache.felix + (add-after 'enter-dir 'delete-tests + (lambda _ (delete-file-recursively "src/test") #t))))) + (inputs + `(("java-osgi-core" ,java-osgi-core) + ("java-hamcrest-core" ,java-hamcrest-core) + ("java-junit" ,java-junit))) + (home-page "http://logging.apache.org/log4j/2.x/") + (synopsis "API module of the Log4j logging framework for Java") + (description + "This package provides the API module of the Log4j logging framework for +Java.") + (license license:asl2.0))) + (define-public java-commons-cli (package (name "java-commons-cli") @@ -2105,49 +3113,30 @@ This is a part of the Apache Commons Project.") (substitute* "lib/cpp/antlr/CharScanner.hpp" (("#include <map>") (string-append - "#include <map>\n" - "#define EOF (-1)\n" - "#include <strings.h>"))) + "#include <map>\n" + "#define EOF (-1)\n" + "#include <strings.h>"))) (substitute* "configure" - (("/bin/sh") "sh")))))) + (("/bin/sh") "sh")) + #t)))) (build-system gnu-build-system) (arguments - `(#:tests? #f + `(#:tests? #f ; no test target + #:imported-modules ((guix build ant-build-system) + (guix build syscalls) + ,@%gnu-build-system-modules) + #:modules (((guix build ant-build-system) #:prefix ant:) + (guix build gnu-build-system) + (guix build utils)) #:phases (modify-phases %standard-phases (add-after 'install 'strip-jar-timestamps - (lambda* (#:key outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (jar1 (string-append out "/lib/antlr.jar")) - (jar2 (string-append out "/share/antlr-2.7.7/antlr.jar"))) - ;; XXX: copied from (guix build ant-build-system) - (define (strip-jar jar dir) - (let ((manifest (string-append dir "/META-INF/MANIFEST.MF"))) - (mkdir-p dir) - (and (with-directory-excursion dir - (zero? (system* "jar" "xf" jar))) - (delete-file jar) - (for-each (lambda (file) - (let ((s (lstat file))) - (unless (eq? (stat:type s) 'symlink) - (utime file 0 0 0 0)))) - (find-files dir #:directories? #t)) - (with-directory-excursion dir - (let* ((files (find-files "." ".*" #:directories? #t))) - (unless (zero? (apply system* - `("zip" "-X" ,jar ,manifest - ,@files))) - (error "'zip' failed")))) - (utime jar 0 0) - #t))) - (strip-jar jar1 "temp1") - (strip-jar jar2 "temp2")))) + (assoc-ref ant:%standard-phases 'strip-jar-timestamps)) (add-after 'configure 'fix-bin-ls (lambda _ - (for-each (lambda (file) - (substitute* file - (("/bin/ls") "ls"))) - (find-files "." "Makefile"))))))) + (substitute* (find-files "." "Makefile") + (("/bin/ls") "ls")) + #t))))) (native-inputs `(("which" ,which) ("zip" ,zip) @@ -2163,9 +3152,9 @@ C++, or Python actions. ANTLR provides excellent support for tree construction, tree walking, and translation.") (license license:public-domain))) -(define-public stringtemplate3 +(define-public java-stringtemplate-3 (package - (name "stringtemplate3") + (name "java-stringtemplate") (version "3.2.1") (source (origin (method url-fetch) @@ -2177,21 +3166,30 @@ tree walking, and translation.") "086yj68np1vqhkj7483diz3km6s6y4gmwqswa7524a0ca6vxn2is")))) (build-system ant-build-system) (arguments - `(#:jar-name "stringtemplate-3.2.1.jar" - #:tests? #f + `(#:jar-name (string-append ,name "-" ,version ".jar") + #:test-dir "test" + #:modules ((guix build ant-build-system) + (guix build utils) + (srfi srfi-1)) #:phases (modify-phases %standard-phases + (add-before 'check 'fix-tests + (lambda _ + (substitute* "build.xml" + (("\\$\\{test.home\\}/java") + "${test.home}/org")) + #t)) (add-before 'build 'generate-grammar (lambda _ - (let ((dir "src/org/antlr/stringtemplate/language/")) - (for-each (lambda (file) - (display file) - (newline) - (system* "antlr" "-o" dir (string-append dir file))) - '("template.g" "angle.bracket.template.g" "action.g" - "eval.g" "group.g" "interface.g")))))))) + (with-directory-excursion "src/org/antlr/stringtemplate/language/" + (every (lambda (file) + (format #t "~a\n" file) + (zero? (system* "antlr" file))) + '("template.g" "angle.bracket.template.g" "action.g" + "eval.g" "group.g" "interface.g")))))))) (native-inputs - `(("antlr" ,antlr2))) + `(("antlr" ,antlr2) + ("java-junit" ,java-junit))) (home-page "http://www.stringtemplate.org") (synopsis "Template engine to generate formatted text output") (description "StringTemplate is a java template engine (with ports for C#, @@ -2215,9 +3213,9 @@ StringTemplate also powers ANTLR.") ;; only grammar files with the antlr2 syntax. ;; So we build antlr3.1 -> antlr3.3 -> ST4.0.6 -> antlr3-bootstrap -> ST4 -> antlr3. -(define-public stringtemplate4 - (package - (name "stringtemplate4") +(define-public java-stringtemplate + (package (inherit java-stringtemplate-3) + (name "java-stringtemplate") (version "4.0.8") (source (origin (method url-fetch) @@ -2229,36 +3227,36 @@ StringTemplate also powers ANTLR.") "1pri8hqa95rfdkjy55icl5q1m09zwp5k67ib14abas39s4v3w087")))) (build-system ant-build-system) (arguments - `(#:tests? #f - #:jar-name (string-append ,name "-" ,version ".jar") + `(#:jar-name (string-append ,name "-" ,version ".jar") + #:tests? #f ; FIXME: tests fail for unknown reasons + #:test-dir "test" + #:modules ((guix build ant-build-system) + (guix build utils) + (srfi srfi-1)) #:phases (modify-phases %standard-phases + (add-before 'check 'fix-test-target + (lambda _ + (substitute* "build.xml" + (("\\$\\{test.home\\}/java") "${test.home}/") + (("\\*Test.java") "Test*.java")) + #t)) (add-before 'build 'generate-grammar - (lambda* (#:key inputs #:allow-other-keys) - (chdir "src/org/stringtemplate/v4/compiler/") - (for-each (lambda (file) - (display file) - (newline) - (system* "antlr3" file)) - '("STParser.g" "Group.g" "CodeGenerator.g")) - (chdir "../../../../..")))))) + (lambda _ + (with-directory-excursion "src/org/stringtemplate/v4/compiler/" + (every (lambda (file) + (format #t "~a\n" file) + (zero? (system* "antlr3" file))) + '("STParser.g" "Group.g" "CodeGenerator.g")))))))) (inputs `(("antlr3" ,antlr3-bootstrap) ("antlr2" ,antlr2) - ("stringtemplate" ,stringtemplate3))) - (home-page "http://www.stringtemplate.org") - (synopsis "Template engine to generate formatted text output") - (description "StringTemplate is a java template engine (with ports for C#, -Objective-C, JavaScript, Scala) for generating source code, web pages, emails, -or any other formatted text output. StringTemplate is particularly good at -code generators, multiple site skins, and internationalization / localization. -StringTemplate also powers ANTLR.") - (license license:bsd-3))) + ("java-stringtemplate" ,java-stringtemplate-3) + ("java-junit" ,java-junit))))) -(define stringtemplate4-4.0.6 - (package - (inherit stringtemplate4) - (name "stringtemplate4") +(define java-stringtemplate-4.0.6 + (package (inherit java-stringtemplate) + (name "java-stringtemplate") (version "4.0.6") (source (origin (method url-fetch) @@ -2271,7 +3269,7 @@ StringTemplate also powers ANTLR.") (inputs `(("antlr3" ,antlr3-3.3) ("antlr2" ,antlr2) - ("stringtemplate" ,stringtemplate3))))) + ("java-stringtemplate" ,java-stringtemplate-3))))) (define-public antlr3 (package @@ -2358,12 +3356,12 @@ import org.antlr.grammar.v3.ANTLRTreePrinter;")) ("antlr3" ,antlr3-bootstrap))) (inputs `(("junit" ,java-junit) - ("stringtemplate" ,stringtemplate3) - ("stringtemplate4" ,stringtemplate4))) + ("stringtemplate" ,java-stringtemplate-3) + ("stringtemplate4" ,java-stringtemplate))) (propagated-inputs - `(("stringtemplate" ,stringtemplate3) + `(("stringtemplate" ,java-stringtemplate-3) ("antlr" ,antlr2) - ("stringtemplate4" ,stringtemplate4-4.0.6))) + ("stringtemplate4" ,java-stringtemplate-4.0.6))) (home-page "http://www.antlr3.org") (synopsis "Framework for constructing recognizers, compilers, and translators") (description "ANTLR, ANother Tool for Language Recognition, (formerly PCCTS) @@ -2414,7 +3412,7 @@ tree walking, and translation.") (string-append "#!" (which "sh") "\n" "java -cp " jar "/antlr3-3.3.jar:" (string-concatenate - (find-files (assoc-ref inputs "stringtemplate") + (find-files (assoc-ref inputs "java-stringtemplate") ".*\\.jar")) ":" (string-concatenate @@ -2464,7 +3462,7 @@ import org.antlr.grammar.v2.ANTLRTreePrinter;")))) (inputs `(("junit" ,java-junit))) (propagated-inputs - `(("stringtemplate" ,stringtemplate3) + `(("java-stringtemplate" ,java-stringtemplate-3) ("antlr" ,antlr2) ("antlr3" ,antlr3-3.1))))) @@ -2536,4 +3534,48 @@ import org.antlr.grammar.v2.ANTLRTreePrinter;")))) (inputs `(("junit" ,java-junit))) (propagated-inputs - `(("stringtemplate" ,stringtemplate3))))) + `(("stringtemplate" ,java-stringtemplate-3))))) + +(define-public java-asm + (package + (name "java-asm") + (version "5.2") + (source (origin + (method url-fetch) + (uri (string-append "http://download.forge.ow2.org/asm/" + "asm-" version ".tar.gz")) + (sha256 + (base32 + "0kxvmv5275rnjl7jv0442k3wjnq03ngkb7sghs78avf45pzm4qgr")))) + (build-system ant-build-system) + (arguments + `(#:build-target "compile" + #:test-target "test" + ;; The tests require an old version of Janino, which no longer compiles + ;; with the JDK7. + #:tests? #f + ;; We don't need these extra ant tasks, but the build system asks us to + ;; provide a path anyway. + #:make-flags (list (string-append "-Dobjectweb.ant.tasks.path=foo")) + #:phases + (modify-phases %standard-phases + (add-before 'install 'build-jars + (lambda* (#:key make-flags #:allow-other-keys) + ;; We cannot use the "jar" target because it depends on a couple + ;; of unpackaged, complicated tools. + (mkdir "dist") + (zero? (system* "jar" + "-cf" (string-append "dist/asm-" ,version ".jar") + "-C" "output/build/tmp" ".")))) + (replace 'install + (install-jars "dist"))))) + (native-inputs + `(("java-junit" ,java-junit))) + (home-page "http://asm.ow2.org/") + (synopsis "Very small and fast Java bytecode manipulation framework") + (description "ASM is an all purpose Java bytecode manipulation and +analysis framework. It can be used to modify existing classes or dynamically +generate classes, directly in binary form. The provided common +transformations and analysis algorithms allow to easily assemble custom +complex transformations and code analysis tools.") + (license license:bsd-3))) diff --git a/gnu/packages/kde-frameworks.scm b/gnu/packages/kde-frameworks.scm index 2ec176422c..07943e1e5e 100644 --- a/gnu/packages/kde-frameworks.scm +++ b/gnu/packages/kde-frameworks.scm @@ -44,13 +44,18 @@ #:use-module (gnu packages gnome) #:use-module (gnu packages gnupg) #:use-module (gnu packages gstreamer) + #:use-module (gnu packages image) #:use-module (gnu packages linux) + #:use-module (gnu packages mp3) + #:use-module (gnu packages pdf) #:use-module (gnu packages perl) #:use-module (gnu packages pkg-config) #:use-module (gnu packages polkit) #:use-module (gnu packages python) #:use-module (gnu packages qt) + #:use-module (gnu packages textutils) #:use-module (gnu packages version-control) + #:use-module (gnu packages video) #:use-module (gnu packages web) #:use-module (gnu packages xml) #:use-module (gnu packages xorg) @@ -59,7 +64,7 @@ (define-public extra-cmake-modules (package (name "extra-cmake-modules") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -68,7 +73,7 @@ name "-" version ".tar.xz")) (sha256 (base32 - "1iqakxzr6bcs9wgyi8if1smpq6px0bvlcyddyk0hxhindzl7pn5i")))) + "1r3dyvrv77xrpjlzpa6yazwkknirvx1ccvdyj9x0mlk4vfi05nh5")))) (build-system cmake-build-system) (native-inputs `(("qtbase" ,qtbase))) ; For tests (needs qmake) @@ -240,7 +245,7 @@ Phonon-GStreamer is a backend based on the GStreamer multimedia library.") (define-public attica (package (name "attica") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -249,7 +254,7 @@ Phonon-GStreamer is a backend based on the GStreamer multimedia library.") name "-" version ".tar.xz")) (sha256 (base32 - "16vl3gpwqcvfms82grv1bvqlxj085bqssv5ixjx007826pd8qhp5")))) + "0l8gmsmpwzg6nzwwlnsdl6r6qkhnhirpmrkag9xpd2sbmy734x53")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules))) @@ -272,7 +277,7 @@ http://freedesktop.org/wiki/Specifications/open-collaboration-services/") (define-public bluez-qt (package (name "bluez-qt") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -281,7 +286,7 @@ http://freedesktop.org/wiki/Specifications/open-collaboration-services/") name "-" version ".tar.xz")) (sha256 (base32 - "0pl6cp0rgjkh7d06ik35rw7qd96j5sh2flgjx4vi21zl5vf3vgyh")))) + "040gs2a1fx996gqdx2pwxh00szb1vb85055z946nqvqfn01921df")))) (build-system cmake-build-system) (native-inputs `(("dbus" ,dbus) @@ -306,7 +311,7 @@ Bluetooth stack. It is used by the KDE Bluetooth stack, BlueDevil.") (define-public breeze-icons (package (name "breeze-icons") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -315,7 +320,7 @@ Bluetooth stack. It is used by the KDE Bluetooth stack, BlueDevil.") name "-" version ".tar.xz")) (sha256 (base32 - "1n51kahzk09v52yhi7k4kqgavqlz3ghqv5cx2ssz2djpyavs18r3")))) + "1znzlggb6yrkw5rr2n75g7cfv9x5p9d55hss09c4i79lxrh1bk4a")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules) @@ -335,7 +340,7 @@ It is the default icon theme for the KDE Plasma 5 desktop.") (define-public kapidox (package (name "kapidox") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -344,7 +349,7 @@ It is the default icon theme for the KDE Plasma 5 desktop.") name "-" version ".tar.xz")) (sha256 (base32 - "1z6hdsppwrmqkcanrppxhqcrjvblg9i02rh3bz5m3pn66wwz0sdw")))) + "190d5z6i71jrvfna6vnlim2p9rgc33s1fxl0zarn276683i1rwvg")))) (build-system cmake-build-system) (arguments `(#:tests? #f)) ; has no test target @@ -377,7 +382,7 @@ documentation.") (define-public karchive (package (name "karchive") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -386,7 +391,7 @@ documentation.") name "-" version ".tar.xz")) (sha256 (base32 - "1dzvphqnc09mmaydqggpxg6zwwyr56p6l4jdf1rf6ns90fzxy0m4")))) + "0g8jskdar2znviwh9bs3kia093wgfnhl04x4jcg2rvh78ylkpvxw")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules))) @@ -411,7 +416,7 @@ GZip format, via a subclass of QIODevice.") (define-public kcodecs (package (name "kcodecs") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -420,7 +425,7 @@ GZip format, via a subclass of QIODevice.") name "-" version ".tar.xz")) (sha256 (base32 - "0yybkp52i8nm4qjady6jqswn6v70cqbvjqwgrghjnc88b2cly253")))) + "0k51s4qlf0kq6i8f3wrsz5lrkzjqb1j26hrmlmg57vn91r58iash")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules) @@ -446,7 +451,7 @@ Internet).") (define-public kconfig (package (name "kconfig") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -455,7 +460,7 @@ Internet).") name "-" version ".tar.xz")) (sha256 (base32 - "1pajh1l08b995shp6l75ri9z4vr6wjapvrkmrmv8hksnxvfi97dp")))) + "0blbx6b3fk6p8cv2iywk2avn9w1411bb0g5wwv456a9ggi01988x")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules) @@ -513,7 +518,7 @@ propagate their changes to their respective configuration files.") (define-public kcoreaddons (package (name "kcoreaddons") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -522,7 +527,7 @@ propagate their changes to their respective configuration files.") name "-" version ".tar.xz")) (sha256 (base32 - "1n1xzvwwji9pwyxrvwp4rmpc7qzp9nlis26xmn81k607jn587ksx")))) + "1ybr4bv8rhp4cxpf8mfsc4dk0klzrfh1z8g2cw6zasmksxmmwi90")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules) @@ -551,7 +556,7 @@ many more.") (define-public kdbusaddons (package (name "kdbusaddons") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -560,7 +565,7 @@ many more.") name "-" version ".tar.xz")) (sha256 (base32 - "1a15jjsrkza0ll2viyk834pgdxsdgdacm0982xxwl5z937f75609")) + "1skblxfnjhbyiwavsfhksc2ybc2sikw3xr0js6mlfbpmvqzghn6h")) (patches (search-patches "kdbusaddons-kinit-file-name.patch")))) (build-system cmake-build-system) (native-inputs @@ -596,7 +601,7 @@ as well as an API to create KDED modules.") (define-public kdnssd (package (name "kdnssd") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -605,7 +610,7 @@ as well as an API to create KDED modules.") name "-" version ".tar.xz")) (sha256 (base32 - "1xakbs2wm627zn01ni8fyrz64xl5jw4by0pdrb70aad7w37dijrw")))) + "082mdim9wykdap4fmjfayk443rbarsk1p8cn3mspx2nw047yja80")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules) @@ -623,7 +628,7 @@ infrastructure.") (define-public kguiaddons (package (name "kguiaddons") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -632,7 +637,7 @@ infrastructure.") name "-" version ".tar.xz")) (sha256 (base32 - "0rbfd0rykmwl9hs1q22pqg2by8vi9y1pgs2ishgnan4sc4w87wjb")))) + "1nmlwvy2jdmh0m6bmahvk68vl2rs9s28c10dkncpi6gvhsdkigqx")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules) @@ -656,7 +661,7 @@ interfaces in the areas of colors, fonts, text, images, keyboard input.") (define-public ki18n (package (name "ki18n") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -665,7 +670,7 @@ interfaces in the areas of colors, fonts, text, images, keyboard input.") name "-" version ".tar.xz")) (sha256 (base32 - "068xvw2hy4hlpj85wgjjdj0nc37fygpd8wb1dnpqcvzzy8rc1rsf")))) + "0glvmmy01mp6hnix79aichgwjq842kgf5q5zynkg6mch85y4ary7")))) (build-system cmake-build-system) (propagated-inputs `(("gettext" ,gettext-minimal) @@ -699,7 +704,7 @@ translation scripting.") (define-public kidletime (package (name "kidletime") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -708,7 +713,7 @@ translation scripting.") name "-" version ".tar.xz")) (sha256 (base32 - "0rkxx3bnspjwm4vcy4rdfahk6vcfpkh8fldww0zfdn7s7pigqwch")))) + "0z8x6iz52y2m8llsp2q4qayxswkzay7ksimzy47crfag442bw24g")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules))) @@ -726,7 +731,7 @@ or user activity.") (define-public kitemmodels (package (name "kitemmodels") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -735,7 +740,7 @@ or user activity.") name "-" version ".tar.xz")) (sha256 (base32 - "0lxld7jdixpq23sycv8n4ckzmdr34aycrsf2zffziw6r59f0mzki")))) + "1liq1ppa7xb1dcncv25c2a0xy3l9bvb2a56cff90c0b0vwr239q5")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules) @@ -787,7 +792,7 @@ model to observers (define-public kitemviews (package (name "kitemviews") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -796,7 +801,7 @@ model to observers name "-" version ".tar.xz")) (sha256 (base32 - "1h1zgawdi4vbgymdl5215lx7hpcx9jqxy7vjf5hwgs6b2cls1sws")))) + "054accbis471zj1gbfxbc99062r2hvpb04i6w3r8fa4ml8s6brqk")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules) @@ -828,7 +833,7 @@ to flat and hierarchical lists.") (define-public kplotting (package (name "kplotting") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -837,7 +842,7 @@ to flat and hierarchical lists.") name "-" version ".tar.xz")) (sha256 (base32 - "0a0pfmdlx84526lb2jvx94i2pf85km57fm2ygis4z5mjgbzsmb6v")))) + "1ffy9b08128ym024wlfgnzk52vpy0mbaa91dhndpr40qcz0i67sh")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules) @@ -866,7 +871,7 @@ pixel units.") (define-public ksyntaxhighlighting (package (name "ksyntaxhighlighting") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -875,7 +880,7 @@ pixel units.") "syntax-highlighting-" version ".tar.xz")) (sha256 (base32 - "1d9m7x53mwggwmhhba1c7b8v4f8qjql889y674ldpzs2nrk5y7x3")))) + "0ryfwblvzj9rd5jj7l8scmbb49ygzk77ng05hrznsipczin2cjw8")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules) @@ -914,7 +919,7 @@ integration with a custom editor as well as a ready-to-use (define-public kwayland (package (name "kwayland") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -923,7 +928,7 @@ integration with a custom editor as well as a ready-to-use name "-" version ".tar.xz")) (sha256 (base32 - "1kzvq7qx102rfdv975x5sd37lsl6wn0mzm2m1f9fnnn2rvii3h5d")))) + "1zxb9ram47vbiik8h0czyvacrdiijhnslkpcm61l4r1rb0ybb0ib")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules) @@ -953,7 +958,7 @@ represented by a QPoint or a QSize.") (define-public kwidgetsaddons (package (name "kwidgetsaddons") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -962,7 +967,7 @@ represented by a QPoint or a QSize.") name "-" version ".tar.xz")) (sha256 (base32 - "1aksy326ppdfcx20zl9hxsd8j0br32j6dlx4i1xxbd976csys9b2")))) + "0hw87iig75mfgl5p3ph6zkwap31h357bm7rlyv5d9nnp10bq0hfg")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules) @@ -1001,7 +1006,7 @@ configuration pages, message boxes, and password requests.") (define-public kwindowsystem (package (name "kwindowsystem") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -1010,7 +1015,7 @@ configuration pages, message boxes, and password requests.") name "-" version ".tar.xz")) (sha256 (base32 - "1c3kd23c4wwzdhfcyhv41czw3y2kk1492xn6ah9n3r98akrhgar1")))) + "1sp2x7afhw19vmhdp2qyrmljz8h0875xjk95n8c5gzypk7sr0l83")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules) @@ -1041,7 +1046,7 @@ lower level classes for interaction with the X Windowing System.") (define-public modemmanager-qt (package (name "modemmanager-qt") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -1050,7 +1055,7 @@ lower level classes for interaction with the X Windowing System.") name "-" version ".tar.xz")) (sha256 (base32 - "0ywyiq1kj4ya5knn0r12j9m1ig9mlyfypnrzihlvipddjrqs7jyd")))) + "1cf5nsc8h7djvr19fm5dphzplh1wm3asvn0a7r71spg0i7lzi89h")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules) @@ -1079,7 +1084,7 @@ messages.") (define-public networkmanager-qt (package (name "networkmanager-qt") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -1088,12 +1093,7 @@ messages.") name "-" version ".tar.xz")) (sha256 (base32 - "0bcy7nzfvx2xah3kxklmrjn08qbjddiny7wf7nkxsbc3kkhrxqyd")) - ;; TODO: Remove these patches when updating to 5.33. - (patches - (search-patches - "networkmanager-qt-activeconnection-test-1.patch" - "networkmanager-qt-activeconnection-test-2.patch")))) + "05s0irvkg0g57acriablyha2wb9c7w3xhq223vdddjqpcdx0pnkl")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules) @@ -1123,7 +1123,7 @@ which are used in DBus communication.") (define-public oxygen-icons (package (name "oxygen-icons") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -1132,7 +1132,7 @@ which are used in DBus communication.") name "5" "-" version ".tar.xz")) (sha256 (base32 - "05v3blgs4qbjl8s6470baahy9a98cfi3mplzp462axcgkqdj1nwf")))) + "0cmxxssir5zbp5nlxq81h2xfd6wrxbbkydyw93dby7r56isl7ga5")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules) @@ -1148,7 +1148,7 @@ which are used in DBus communication.") (define-public solid (package (name "solid") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -1157,10 +1157,18 @@ which are used in DBus communication.") name "-" version ".tar.xz")) (sha256 (base32 - "1jhymivravgix0sa0szkax50j09l5fl55xi3fbyjxlb4cil114v5")))) + "02kz21p3p1s1rg7gf34fr6ynhji6x97yvsfdpvbfxbhijabbh4ib")))) (build-system cmake-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (replace 'check + (lambda _ + (setenv "DBUS_FATAL_WARNINGS" "0") + (zero? (system* "dbus-launch" "ctest" "."))))))) (native-inputs `(("bison" ,bison) + ("dbus" ,dbus) ("extra-cmake-modules" ,extra-cmake-modules) ("flex" ,flex) ("qttools" ,qttools))) @@ -1177,7 +1185,7 @@ system.") (define-public sonnet (package (name "sonnet") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -1186,7 +1194,7 @@ system.") name "-" version ".tar.xz")) (sha256 (base32 - "17sjv48b3z5fgplsy16ilcw6p7mlqjs61ib6jqd1mqzv4xrr27yi")))) + "06gxrh8rb75ydkqxk5dhlmwndnczp264jx588ryfwlf3vlnk99vs")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules) @@ -1203,7 +1211,7 @@ ASpell and HUNSPELL.") (define-public threadweaver (package (name "threadweaver") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -1212,7 +1220,7 @@ ASpell and HUNSPELL.") name "-" version ".tar.xz")) (sha256 (base32 - "1qpy2rzqyd4ap5fibkfk87z66ijh2h79cd7f0h506jh2dbx20g0h")))) + "1gylpl283qf1jcfyib4q5xwnpdq13hnd2cp2i7xjazdw2jp40zhr")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules))) @@ -1233,7 +1241,7 @@ uses a job-based interface to queue tasks and execute them in an efficient way." (define-public kauth (package (name "kauth") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -1242,7 +1250,7 @@ uses a job-based interface to queue tasks and execute them in an efficient way." name "-" version ".tar.xz")) (sha256 (base32 - "00kdq16n9w6nf1bpwzl5lp5c2xq74g8nn6081kvnjcd4ld66ncmq")))) + "06cw1bsp7inh5wglajm8aahy17p35ixgnijb7d74gjqzbj4cv93d")))) (build-system cmake-build-system) (native-inputs `(("dbus" ,dbus) @@ -1280,7 +1288,7 @@ utilities.") (define-public kcompletion (package (name "kcompletion") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -1289,7 +1297,7 @@ utilities.") name "-" version ".tar.xz")) (sha256 (base32 - "0fn8imr3m219r38a0rafbnylcpjq4rqhz1w66mx80sc7l10mhcni")))) + "18hvdk5b1nkh6b3vx0jajri57rl266b0qjsiwirh5wmjc81xbpcw")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules) @@ -1317,7 +1325,7 @@ integrated it into your application's other widgets.") (define-public kcrash (package (name "kcrash") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -1326,7 +1334,7 @@ integrated it into your application's other widgets.") name "-" version ".tar.xz")) (sha256 (base32 - "1zrkjrpj88ymdy5vbn9db73vxppswvmbn2gkn4gpx773dsmflhz3")))) + "1cshay7dhbqgh62nq85vd9sm20gq9s9f70mdnzjjh1q7cajybkp3")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules) @@ -1355,7 +1363,7 @@ application crashes.") (define-public kdoctools (package (name "kdoctools") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -1364,7 +1372,7 @@ application crashes.") name "-" version ".tar.xz")) (sha256 (base32 - "0i7zgg7iw6w0sdr6cv3yf4blcr61i8zczgmyqa964ka6p3ywwjs9")))) + "145jjhsd0whmcj91zbjz2b1jyj4wasw60hbwyd4xvqds8cp0l02h")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules))) @@ -1403,7 +1411,7 @@ from DocBook files.") (define-public kfilemetadata (package (name "kfilemetadata") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -1412,8 +1420,23 @@ from DocBook files.") name "-" version ".tar.xz")) (sha256 (base32 - "01d91gmrxlax0g13ib841vc4qwmv6r4qdr10wfs77rrxsvw7z08f")))) + "1rvlg6by8daiq5ff3qlxcw9k2iq4qicsj0c8a00xfy3w4h9ip9h5")))) (build-system cmake-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + ;; Need to check after install and to set QT_PLUGIN_PATH for the test + ;; suite to finds the plugins. + (delete 'check) + (add-after 'install 'check + (assoc-ref %standard-phases 'check)) + (add-before 'check 'check-setup + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (setenv "QT_PLUGIN_PATH" + (string-append out "/lib/plugins:" + (getenv "QT_PLUGIN_PATH")))) + #t))))) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules) ("python-2" ,python-2))) @@ -1421,7 +1444,14 @@ from DocBook files.") `(("attr" ,attr) ("karchive" ,karchive) ("ki18n" ,ki18n) - ("qtbase" ,qtbase))) + ("qtbase" ,qtbase) + ;; Required run-time packages + ("catdoc" ,catdoc) + ;; Optional run-time packages + ("exiv2" ,exiv2) + ("ffmpeg" ,ffmpeg) + ("poppler" ,poppler) + ("taglib" ,taglib))) (home-page "https://community.kde.org/Frameworks") (synopsis "Extract metadata from different fileformats") (description "KFileMetaData provides a simple library for extracting the @@ -1433,7 +1463,7 @@ by applications to write metadata.") (define-public kimageformats (package (name "kimageformats") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -1442,7 +1472,7 @@ by applications to write metadata.") name "-" version ".tar.xz")) (sha256 (base32 - "05hn8n4sc3rj5c30ki068f76k1gfgvq19zcw5jlqpnn1l5db5fvz")))) + "0q9ng4clqk2dqw43nk1pmq1d61rahc3qr4dmg4y3kjvz3ahnnijw")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules) @@ -1470,7 +1500,7 @@ formats.") (define-public kjobwidgets (package (name "kjobwidgets") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -1479,7 +1509,7 @@ formats.") name "-" version ".tar.xz")) (sha256 (base32 - "0lhv3mg2liija0g8x14jpv1mdhb0zjh868p1cs24bs9xrw1l8984")))) + "0lrx761vf947mb2q1l2jgi0wgwj8cz2nn1xg0j38bh99sgddmzpf")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules) @@ -1498,7 +1528,7 @@ asynchronous jobs.") (define-public knotifications (package (name "knotifications") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -1507,7 +1537,7 @@ asynchronous jobs.") name "-" version ".tar.xz")) (sha256 (base32 - "06ap7m8c2py49pqrnhadbyl69y3nsyamzahbpwipqgh9k62sy34y")))) + "12z5hza0n5zr6mv3gkwhzb8zkrmk6dvgq8hrzwm8rzkgphjr6pi9")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules) @@ -1541,7 +1571,7 @@ covers feedback and persistent events.") (define-public kpackage (package (name "kpackage") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -1550,7 +1580,7 @@ covers feedback and persistent events.") name "-" version ".tar.xz")) (sha256 (base32 - "070zasl5c58n01fk18mjgccfizymc9griwicxizqjgzzbgvkns3r")))) + "0wdymhcrjggxb7andz36cfk9f240vvbq5yahlxyhfp9z69lriw5q")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules))) @@ -1578,7 +1608,7 @@ were traditional plugins.") (define-public kpty (package (name "kpty") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -1587,7 +1617,7 @@ were traditional plugins.") name "-" version ".tar.xz")) (sha256 (base32 - "0h4318rc9902cvqj69capb8lh7s84y44jd59d11fyhq21jhy152s")))) + "00k5hhz7nf3nf47xb003ni1chi03imyrfajap6ay4zp90l8fr950")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules))) @@ -1614,7 +1644,7 @@ and communicating with them using a pty.") (define-public kunitconversion (package (name "kunitconversion") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -1623,7 +1653,7 @@ and communicating with them using a pty.") name "-" version ".tar.xz")) (sha256 (base32 - "0crc8riwafcx6fwhgrc8vfbwmdygd6vlz1fbbgni09gamm8mbcin")))) + "0v4x0flbfavrzfiqh71mdkqgp1fzk4f52msvq6w60i2s3sz7hcsm")))) (build-system cmake-build-system) (arguments `(#:phases @@ -1657,7 +1687,7 @@ gallons).") (define-public baloo (package (name "baloo") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -1666,7 +1696,7 @@ gallons).") name "-" version ".tar.xz")) (sha256 (base32 - "0a4qwinkp4gmcbx4j0qxbj5qb40h7594s39za7sc7bymadicasy1")))) + "0z53lnniq9xdk09d73z0p1xs1qmaf71m4znm4hmq956yg4yqa1ya")))) (build-system cmake-build-system) (propagated-inputs `(("kcoreaddons" ,kcoreaddons) @@ -1715,7 +1745,7 @@ maintaining an index of the contents of your files.") (define-public kactivities (package (name "kactivities") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -1724,7 +1754,7 @@ maintaining an index of the contents of your files.") name "-" version ".tar.xz")) (sha256 (base32 - "0xin4shaj0zsfsww84mwk5n4ldaqy730jhc369px2j2nq57sg9g7")))) + "0dg6bkdxf4sicij4szmi55npn6chp0sfmw27qi1s582ymqzjgf5m")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules))) @@ -1762,7 +1792,7 @@ with other frameworks.") (define-public kactivities-stats (package (name "kactivities-stats") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -1771,7 +1801,7 @@ with other frameworks.") name "-" version ".tar.xz")) (sha256 (base32 - "1b3z7bcap3vjc0155y0a9xkbd477fklmpj8dr3rs0ccyc6qxxbvw")))) + "1dfaq4hsd9wm1ka45dkxbl9wwr7s5ixbnnghqwxhl7a60imc680r")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules))) @@ -1792,7 +1822,7 @@ by which applications, and what documents have been linked to which activity.") (define-public kbookmarks (package (name "kbookmarks") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -1801,7 +1831,7 @@ by which applications, and what documents have been linked to which activity.") name "-" version ".tar.xz")) (sha256 (base32 - "03a024phcjv46afbp5lbmj2p8hb6srfzyaslc6ln6ms473bf5k4w")))) + "0ggn4rz8ch82ph64q6yik9fb1mp6kmsd7n33p769zl1lw7fldn0v")))) (build-system cmake-build-system) (propagated-inputs `(("kwidgetsaddons" ,kwidgetsaddons))) @@ -1835,7 +1865,7 @@ using the XBEL format.") (define-public kcmutils (package (name "kcmutils") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -1844,7 +1874,7 @@ using the XBEL format.") name "-" version ".tar.xz")) (sha256 (base32 - "1mr9h7wc22bfrbm92ajsjfcs16c5xpkrxbxzcma3a0s7jhy6qrm9")))) + "1b52lwn7qjqrn06va7j1jswlzs6bx0drs90myf3607k52ffbf4hy")))) (build-system cmake-build-system) (propagated-inputs `(("kconfigwidgets" ,kconfigwidgets) @@ -1874,7 +1904,7 @@ KCModules can be created with the KConfigWidgets framework.") (define-public kconfigwidgets (package (name "kconfigwidgets") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -1883,7 +1913,7 @@ KCModules can be created with the KConfigWidgets framework.") name "-" version ".tar.xz")) (sha256 (base32 - "1cq0a3k6pvl9f098ssqqk2rddxh0xn1kk4p5kfyd7w0m3c604zw3")))) + "0h4kappsffrp2qgg8wza1ybgah2dlcgpz591llfvaz31ldsml9hk")))) (build-system cmake-build-system) (propagated-inputs `(("kauth" ,kauth) @@ -1916,7 +1946,7 @@ their settings.") (define-public kdeclarative (package (name "kdeclarative") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -1925,7 +1955,7 @@ their settings.") name "-" version ".tar.xz")) (sha256 (base32 - "1y5g3yi1l0g1mkqhhakg265r25zm23qc2fqg55rq0g7l9ss7w7g9")))) + "1mfj32p631zvwz9ldk8536ifb4n825zxbhx69bfllhw2vn1am7z2")))) (build-system cmake-build-system) (propagated-inputs `(("kconfig" ,kconfig) @@ -1976,7 +2006,7 @@ that offer bindings to some of the Frameworks.") (define-public kded (package (name "kded") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -1985,7 +2015,7 @@ that offer bindings to some of the Frameworks.") name "-" version ".tar.xz")) (sha256 (base32 - "0pmmsvqwkw86yvxxf9i6lg13vg80m0kmhjjs88lbm60cgvr5jhq6")))) + "0qy4w7bcg60gyf6y6c11kqcshnld55a8w4fzglpwgqfbliyi5yzq")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules))) @@ -2009,7 +2039,7 @@ started on demand.") (define-public kdesignerplugin (package (name "kdesignerplugin") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -2018,7 +2048,7 @@ started on demand.") name "-" version ".tar.xz")) (sha256 (base32 - "1hapj8x8nky3m6lx2ianmxwprf00jqyjsknjz3pi4vk3i714vhnf")))) + "1jnarg7wrhdjfq73q4wplazxsz927mpf0l6m0i4akq4dlp1b7aah")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules) @@ -2047,7 +2077,7 @@ ini-style description files.") (define-public kdesu (package (name "kdesu") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -2056,7 +2086,7 @@ ini-style description files.") name "-" version ".tar.xz")) (sha256 (base32 - "0zsy1hivy5bbczrpkpgj72mlx0km2nm53kpgrj2hfdy3ss0vn3hl")))) + "04mx0d6kf8slgkkgbna3cyv4c491jvlwcwqxc7zikz0i03l341id")))) (build-system cmake-build-system) (propagated-inputs `(("kpty" ,kpty))) @@ -2078,7 +2108,7 @@ with su and ssh respectively.") (define-public kemoticons (package (name "kemoticons") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -2087,7 +2117,7 @@ with su and ssh respectively.") name "-" version ".tar.xz")) (sha256 (base32 - "1ncjs9iy6z6rhk83ff7fj1b68rkylnry0h698rh4jvs98gpw8sgj")))) + "02h12qy0w6mcgkczi3md1znnvp7r47l8h416nd080ljpsydalgx8")))) (build-system cmake-build-system) (propagated-inputs `(("kservice" ,kservice))) @@ -2119,7 +2149,7 @@ emoticons coming from different providers.") (define-public kglobalaccel (package (name "kglobalaccel") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -2128,7 +2158,7 @@ emoticons coming from different providers.") name "-" version ".tar.xz")) (sha256 (base32 - "0dxwjznnqlgnvn15pl34rxlzk3i21cvzn8xbgqmxakny8qiib9ry")))) + "1i32dq70qxjbfvlw0wqxvqvl6ysydmpg3zbiflff4z1qrmvmpw6a")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules) @@ -2162,7 +2192,7 @@ window does not need focus for them to be activated.") (define-public kiconthemes (package (name "kiconthemes") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -2171,7 +2201,7 @@ window does not need focus for them to be activated.") name "-" version ".tar.xz")) (sha256 (base32 - "00azbyk5y3jgdqv03a2nd0627kdkhq1bkghvw7w62kcnih9k8lq5")))) + "0hbl82r6qc8dh9v9n9xjkx966czkq5yjxx2rx7sbilj2p9v3saii")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules) @@ -2210,7 +2240,7 @@ in applications using the KDE Frameworks.") (define-public kinit (package (name "kinit") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -2219,7 +2249,7 @@ in applications using the KDE Frameworks.") name "-" version ".tar.xz")) (sha256 (base32 - "0103lflppdw55l9xiqs68lzaq9897m5qnkmy6fp7dm9wfh9aplqn")))) + "08429kjihpaip73wszr3rsii8sdlwgm3kxx7g0hpjhkj9d2jq3m1")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules))) @@ -2254,7 +2284,7 @@ makes starting KDE applications faster and reduces memory consumption.") (define-public kio (package (name "kio") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -2263,7 +2293,7 @@ makes starting KDE applications faster and reduces memory consumption.") name "-" version ".tar.xz")) (sha256 (base32 - "19da02l0aj0l07x9bbklhvx9slci3v1d8q80jvam4vyzs4qdyjin")))) + "1i23ld5b9gafh2x3lv79jbggbd92xyhk7rg3n765w3bsfpg2ijva")))) (build-system cmake-build-system) (propagated-inputs `(("kbookmarks" ,kbookmarks) @@ -2327,7 +2357,7 @@ KIO enabled infrastructure.") (define-public knewstuff (package (name "knewstuff") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -2336,7 +2366,7 @@ KIO enabled infrastructure.") name "-" version ".tar.xz")) (sha256 (base32 - "1i3ldy9wwnjhpgdd2d0bg4304k88riin89zqzdl52lpqa6hjl3fp")))) + "19d53ylwr92dzl9agk4j765zvb897rcm55z7pr6841aj58jk9b82")))) (build-system cmake-build-system) (propagated-inputs `(("attica" ,attica) @@ -2384,7 +2414,7 @@ specification.") (define-public knotifyconfig (package (name "knotifyconfig") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -2393,7 +2423,7 @@ specification.") name "-" version ".tar.xz")) (sha256 (base32 - "14qc6wj4j5i45vzqsvl2wlc07c6x30hb2680gwfqsvwgiaszkzv4")))) + "0lwl22vq770jyp45j32s0ss8yiqdwbink6cdhkbapg3pzbiwklyk")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules))) @@ -2426,7 +2456,7 @@ notifications which can be embedded in your application.") (define-public kparts (package (name "kparts") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -2435,7 +2465,7 @@ notifications which can be embedded in your application.") name "-" version ".tar.xz")) (sha256 (base32 - "0hrx0mdvw301nbdyw5fkvgkw60ya6kmfw6hfzmj48bws8mi33rs5")))) + "1a5n0f7ljdc2bm6vggzwbvpblyxjqn9m9pam70iab964pqqalgp7")))) (build-system cmake-build-system) (propagated-inputs `(("kio" ,kio) @@ -2477,7 +2507,7 @@ widgets with a user-interface defined in terms of actions.") (define-public kpeople (package (name "kpeople") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -2486,7 +2516,7 @@ widgets with a user-interface defined in terms of actions.") name "-" version ".tar.xz")) (sha256 (base32 - "1xqi8zr76hajgyv016iaqlmnr5b84s71fbx412q153g92jglp4mk")))) + "0krm74dl80s48nhiygga4dvkvqqimxdx4nczbk4qvj7j1g9p2rsh")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules))) @@ -2520,7 +2550,7 @@ to easily extend the contacts collection.") (define-public krunner (package (name "krunner") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -2529,7 +2559,7 @@ to easily extend the contacts collection.") name "-" version ".tar.xz")) (sha256 (base32 - "1k4rg9vqr6h5aj7v51fx3i5z9kxlfpacahs81hkwksi6if8ik4kr")))) + "0n527p708k719zgmvvbmp20xmg72f85cll05q05p4h317g7wz6i5")))) (build-system cmake-build-system) (propagated-inputs `(("plasma-framework" ,plasma-framework))) @@ -2575,7 +2605,7 @@ typed.") (define-public kservice (package (name "kservice") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -2584,7 +2614,7 @@ typed.") name "-" version ".tar.xz")) (sha256 (base32 - "02xk3ajspprmx964zhwh2l3axm4gns9h0m0pvcb1v5j8pfh9v70q")))) + "0sikwn49s2iq1nj518q55m2p0hvdvwm98cpf0dkjb1z1v6fgjc37")))) (build-system cmake-build-system) (propagated-inputs `(("kconfig" ,kconfig) @@ -2620,7 +2650,7 @@ types or handled by application specific code.") (define-public ktexteditor (package (name "ktexteditor") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -2629,7 +2659,7 @@ types or handled by application specific code.") name "-" version ".tar.xz")) (sha256 (base32 - "1sybw8k3f36mcs5qh3b51v7ynbqn4pbiiabkyxfmyi82i09m2jgw")))) + "182a0swfgdqr0faq3ksk6hlfvdi1afd0hpys5vayjjf263m19xxw")))) (build-system cmake-build-system) (propagated-inputs `(("kparts" ,kparts))) @@ -2688,7 +2718,7 @@ library.") (define-public ktextwidgets (package (name "ktextwidgets") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -2697,7 +2727,7 @@ library.") name "-" version ".tar.xz")) (sha256 (base32 - "1s2fd4n4hfkzscxv0cdfjynjzi1f57pfi9a3fp6rrm5c5645zk7r")))) + "1hri34b373bww5gv14qli2nm77k05pk170nbb2vv2zvzv93g25gw")))) (build-system cmake-build-system) (propagated-inputs `(("ki18n" ,ki18n) @@ -2734,7 +2764,7 @@ It supports rich text as well as plain text.") (define-public kwallet (package (name "kwallet") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -2743,7 +2773,7 @@ It supports rich text as well as plain text.") name "-" version ".tar.xz")) (sha256 (base32 - "0psc4n6lck9gbx2nn7mgv33x4z2r0xp1mx1xcsgy8smvalrfv5xa")))) + "08z3ddsam5n5qn2svscp4hgksf6qd1h8lqw1v382p01nnmhxadz5")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules))) @@ -2775,7 +2805,7 @@ the passwords on KDE work spaces.") (define-public kxmlgui (package (name "kxmlgui") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -2784,7 +2814,7 @@ the passwords on KDE work spaces.") name "-" version ".tar.xz")) (sha256 (base32 - "1pxi4z7z3bzwcnfwq0pvjsmds401fkisyr353lyxf4rvcpwj3a65")))) + "1v8m6qzjqg3ic14a5ki37bf13kifzcbhly68zcxgs5b92hr953iy")))) (build-system cmake-build-system) (propagated-inputs `(("kconfig" ,kconfig) @@ -2827,7 +2857,7 @@ descriptions for integrating actions from plugins.") (define-public kxmlrpcclient (package (name "kxmlrpcclient") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -2836,7 +2866,7 @@ descriptions for integrating actions from plugins.") name "-" version ".tar.xz")) (sha256 (base32 - "1kaczibdfdph5mpg1dldsmqb1six57w7ch3v0v7av5h6j6sx0xaq")))) + "0kp3ab50m5jl2jgw883ip67s6gs0l3saprzrqa9r3hydn2c4s3md")))) (build-system cmake-build-system) (propagated-inputs `(("kio" ,kio))) @@ -2870,7 +2900,7 @@ setUrl, setUserAgent and call.") (define-public plasma-framework (package (name "plasma-framework") - (version "5.32.0") + (version "5.34.0") (source (origin (method url-fetch) (uri (string-append @@ -2879,7 +2909,7 @@ setUrl, setUserAgent and call.") name "-" version ".tar.xz")) (sha256 (base32 - "1hrnmilc30d1kh20cky329i5ji3qyy7m4f8jzax5cgl7nrjca31h")))) + "0waicqskfwc8xpmrym165hwlfv6nzbwc783sac5vrhbyk4bwk8x9")))) (build-system cmake-build-system) (propagated-inputs `(("kpackage" ,kpackage) diff --git a/gnu/packages/libusb.scm b/gnu/packages/libusb.scm index 4c80de2369..ffbe5b1a88 100644 --- a/gnu/packages/libusb.scm +++ b/gnu/packages/libusb.scm @@ -2,7 +2,7 @@ ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org> ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr> ;;; Copyright © 2015 Andy Wingo <wingo@igalia.com> -;;; Copyright © 2015, 2016 Ricardo Wurmus <rekado@elephly.net> +;;; Copyright © 2015, 2016, 2017 Ricardo Wurmus <rekado@elephly.net> ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2016 Theodoros Foradis <theodoros.for@openmailbox.org> ;;; @@ -27,12 +27,16 @@ #:use-module (guix packages) #:use-module (guix utils) #:use-module (guix download) + #:use-module (guix git-download) + #:use-module (guix build-system ant) + #:use-module (guix build-system cmake) #:use-module (guix build-system gnu) #:use-module (guix build-system glib-or-gtk) #:use-module (guix build-system python) #:use-module (gnu packages autotools) #:use-module (gnu packages gnupg) #:use-module (gnu packages gtk) + #:use-module (gnu packages java) #:use-module (gnu packages linux) #:use-module (gnu packages mp3) #:use-module (gnu packages pkg-config) @@ -91,6 +95,100 @@ devices on various operating systems.") version of libusb to run with newer libusb.") (license lgpl2.1+))) +(define-public libusb4java + ;; There is no public release so we take the latest version from git. + (let ((commit "396d642a57678a0d9663b062c980fe100cc0ea1e") + (revision "1")) + (package + (name "libusb4java") + (version (string-append "0-" revision "." (string-take commit 9))) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/usb4java/libusb4java.git") + (commit commit))) + (sha256 + (base32 + "0wqgapalhfh9v38ycbl6i2f5lh1wpr6fzwn5dwd0rdacypkd1gml")))) + (build-system cmake-build-system) + (arguments + `(#:tests? #f ; there are no tests + #:phases + (modify-phases %standard-phases + (add-before 'configure 'set-JAVA_HOME + (lambda* (#:key inputs #:allow-other-keys) + (setenv "JAVA_HOME" (assoc-ref inputs "jdk")) + #t))))) + (inputs + `(("libusb" ,libusb))) + (native-inputs + `(("jdk" ,icedtea "jdk"))) + (home-page "https://github.com/usb4java/libusb4java/") + (synopsis "JNI bindings to libusb") + (description + "This package provides Java JNI bindings to the libusb library for use +with usb4java.") + (license expat)))) + +(define-public java-usb4java + (package + (name "java-usb4java") + (version "1.2.0") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/usb4java/usb4java/" + "archive/usb4java-" version ".tar.gz")) + (sha256 + (base32 + "0gzpsnzwgsdyra3smq288yvxnwrgvdwxr6g8jbknnsk56kv6wc34")))) + (build-system ant-build-system) + (arguments + `(#:jar-name "usb4java.jar" + #:phases + (modify-phases %standard-phases + ;; Usually, native libusb4java libraries for all supported systems + ;; would be included in the jar and extracted at runtime. Since we + ;; build everything from source we cannot just bundle pre-built + ;; binaries for other systems. Instead, we patch the loader to + ;; directly return the appropriate library for this system. The + ;; downside is that the jar will only work on the same architecture + ;; that it was built on. + (add-after 'unpack 'copy-libusb4java + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "src/main/java/org/usb4java/Loader.java" + (("private static String extractLibrary" line) + (string-append + line "(final String a, final String b) {" + "return \"" + (assoc-ref inputs "libusb4java") "/lib/libusb4java.so" + "\"; }\n" + "private static String _extractLibrary"))) + #t)) + (add-after 'unpack 'disable-broken-tests + (lambda _ + (with-directory-excursion "src/test/java/org/usb4java" + ;; These tests should only be run when USB devices are present. + (substitute* '("LibUsbGlobalTest.java" + "TransferTest.java") + (("this.context = new Context\\(\\);") + "this.context = null;") + (("LibUsb.init") "//")) + (substitute* "DeviceListIteratorTest.java" + (("this.iterator.remove" line) + (string-append "assumeUsbTestsEnabled();" line)))) + #t))))) + (inputs + `(("libusb4java" ,libusb4java) + ("java-commons-lang3" ,java-commons-lang3) + ("java-junit" ,java-junit) + ("java-hamcrest-core" ,java-hamcrest-core))) + (home-page "http://usb4java.org/") + (synopsis "USB library for Java") + (description + "This package provides a USB library for Java based on libusb and +implementing @code{javax.usb} (JSR-80).") + (license expat))) + (define-public python-pyusb (package (name "python-pyusb") diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm index 75da0d420f..9db748ebee 100644 --- a/gnu/packages/linux.scm +++ b/gnu/packages/linux.scm @@ -354,8 +354,8 @@ It has been modified to remove all non-free binary blobs.") (define %intel-compatible-systems '("x86_64-linux" "i686-linux")) -(define %linux-libre-version "4.11") -(define %linux-libre-hash "0j1bzzq9iq5i1zm7gnig8v0clr8wq303kvcdsaifc0r0ggz1mx1n") +(define %linux-libre-version "4.11.2") +(define %linux-libre-hash "0vp6hjc7cb6q6bhbg6jcf08r27xbf293cdib2vfng15ygvxpyfij") (define-public linux-libre (make-linux-libre %linux-libre-version @@ -364,14 +364,14 @@ 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.27" - "1b39zijjkv21kya359y4g88w5ff110v95pvc4wfvc83dvik9hny5" + (make-linux-libre "4.9.29" + "0yj4gajdzilxnh9lhb2zl0hs654lagdfx8cp7bv2w4q41bnmc3l9" %intel-compatible-systems #:configuration-file kernel-config)) (define-public linux-libre-4.4 - (make-linux-libre "4.4.67" - "1nadmrd26llc17ipig7bx7rf2gwns94g86a3ilcvgdk17hq5riss" + (make-linux-libre "4.4.69" + "14q5lqsfmwyiilbhffr3bwsm6i3z1jv6y09rg8x3faibcg766wny" %intel-compatible-systems #:configuration-file kernel-config)) @@ -1568,7 +1568,12 @@ UnionFS-FUSE additionally supports copy-on-write.") (exe (string-append out "/bin/unionfs"))) ;; By default, 'unionfs' keeps references to ;; $glibc/share/locale and similar stuff. Remove them. - (remove-store-references exe))) + (remove-store-references exe) + + ;; 'unionfsctl' has references to glibc as well. Since + ;; we don't need it, remove it. + (delete-file (string-append out "/bin/unionfsctl")) + #t)) %standard-phases))) (inputs `(("fuse" ,fuse-static))))) @@ -2859,7 +2864,7 @@ and copy/paste text in the console and in xterm.") (define-public btrfs-progs (package (name "btrfs-progs") - (version "4.10.2") + (version "4.11") (source (origin (method url-fetch) (uri (string-append "mirror://kernel.org/linux/kernel/" @@ -2867,7 +2872,7 @@ and copy/paste text in the console and in xterm.") "btrfs-progs-v" version ".tar.xz")) (sha256 (base32 - "02p63nz78lrr156cmbb759z76cn95hv6mmz7v592lmiq0dkxy2gd")))) + "03mzv89f08gdsqv4ima793g44kdavcfyjialf5dr0zd2ab66hyp1")))) (build-system gnu-build-system) (outputs '("out" "static")) ; static versions of binaries in "out" (~16MiB!) @@ -3320,14 +3325,14 @@ the default @code{nsswitch} and the experimental @code{umich_ldap}.") (define-public mcelog (package (name "mcelog") - (version "149") + (version "150") (source (origin (method url-fetch) (uri (string-append "https://git.kernel.org/cgit/utils/cpu/mce/" "mcelog.git/snapshot/v" version ".tar.gz")) (sha256 (base32 - "08hd8bl9rgss990icb69srarrfwcg8k7py979ak753j92ybbkhdm")) + "1skfiracl3a1afmml8mvnccr4rym4ibv33c342rkyxn0j3088h24")) (file-name (string-append name "-" version ".tar.gz")) (modules '((guix build utils))) (snippet diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm index 57d0191b70..64acc75e59 100644 --- a/gnu/packages/lisp.scm +++ b/gnu/packages/lisp.scm @@ -4,7 +4,7 @@ ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org> ;;; Copyright © 2016 Federico Beffa <beffa@fbengineering.ch> ;;; Copyright © 2016, 2017 ng0 <contact.ng0@cryptolab.net> -;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca> +;;; Copyright © 2016, 2017 Andy Patterson <ajpatter@uwaterloo.ca> ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net> ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il> ;;; @@ -659,7 +659,7 @@ portable between implementations.") (sha256 (base32 "0f48pcbhqs3wwwzjl5nk57d4hcbib4l9xblxc66b8c2fhvhmhxnv")) (file-name (string-append "fiveam-" version ".tar.gz")))) - (inputs `(("sbcl-alexandria" ,sbcl-alexandria))) + (inputs `(("alexandria" ,sbcl-alexandria))) (build-system asdf-build-system/sbcl) (synopsis "Common Lisp testing framework") (description "FiveAM is a simple (as far as writing and running tests @@ -687,8 +687,8 @@ interactive development model in mind.") (base32 "10ryrcx832fwqdawb6jmknymi7wpdzhi30qzx7cbrk0cpnka71w2")) (file-name (string-append "bordeaux-threads-" version ".tar.gz")))) - (inputs `(("sbcl-alexandria" ,sbcl-alexandria))) - (native-inputs `(("tests:cl-fiveam" ,sbcl-fiveam))) + (inputs `(("alexandria" ,sbcl-alexandria))) + (native-inputs `(("fiveam" ,sbcl-fiveam))) (build-system asdf-build-system/sbcl) (synopsis "Portable shared-state concurrency library for Common Lisp") (description "BORDEAUX-THREADS is a proposed standard for a minimal @@ -749,7 +749,7 @@ thin compatibility layer for gray streams.") (base32 "16grnxvs7vqm5s6myf8a5s7vwblzq1kgwj8i7ahz8vwvihm9gzfi")) (file-name (string-append "flexi-streams-" version ".tar.gz")))) (build-system asdf-build-system/sbcl) - (inputs `(("sbcl-trivial-gray-streams" ,sbcl-trivial-gray-streams))) + (inputs `(("trivial-gray-streams" ,sbcl-trivial-gray-streams))) (synopsis "Implementation of virtual bivalent streams for Common Lisp") (description "Flexi-streams is an implementation of \"virtual\" bivalent streams that can be layered atop real binary or bivalent streams and that can @@ -779,7 +779,7 @@ streams which are similar to string streams.") (base32 "1i7daxf0wnydb0pgwiym7qh2wy70n14lxd6dyv28sy0naa8p31gd")) (file-name (string-append "cl-ppcre-" version ".tar.gz")))) (build-system asdf-build-system/sbcl) - (native-inputs `(("tests:cl-flexi-streams" ,sbcl-flexi-streams))) + (native-inputs `(("flexi-streams" ,sbcl-flexi-streams))) (synopsis "Portable regular expression library for Common Lisp") (description "CL-PPCRE is a portable regular expression library for Common Lisp, which is compatible with perl. It is pretty fast, thread-safe, and @@ -793,6 +793,51 @@ compatible with ANSI-compliant Common Lisp implementations.") (define-public ecl-cl-ppcre (sbcl-package->ecl-package sbcl-cl-ppcre)) +(define sbcl-cl-unicode-base + (let ((revision "1") + (commit "9fcd06fba1ddc9e66aed2f2d6c32dc9b764f03ea")) + (package + (name "sbcl-cl-unicode-base") + (version (string-append "0.1.5-" revision "." (string-take commit 7))) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/edicl/cl-unicode.git") + (commit commit))) + (file-name (string-append "cl-unicode-" version "-checkout")) + (sha256 + (base32 + "1jicprb5b3bv57dy1kg03572gxkcaqdjhak00426s76g0plmx5ki")))) + (build-system asdf-build-system/sbcl) + (arguments + '(#:asd-file "cl-unicode.asd" + #:asd-system-name "cl-unicode/base")) + (inputs + `(("cl-ppcre" ,sbcl-cl-ppcre))) + (home-page "http://weitz.de/cl-unicode/") + (synopsis "Portable Unicode library for Common Lisp") + (description "CL-UNICODE is a portable Unicode library Common Lisp, which +is compatible with perl. It is pretty fast, thread-safe, and compatible with +ANSI-compliant Common Lisp implementations.") + (license license:bsd-2)))) + +(define-public sbcl-cl-unicode + (package + (inherit sbcl-cl-unicode-base) + (name "sbcl-cl-unicode") + (inputs + `(("cl-unicode/base" ,sbcl-cl-unicode-base) + ,@(package-inputs sbcl-cl-unicode-base))) + (native-inputs + `(("flexi-streams" ,sbcl-flexi-streams))) + (arguments '()))) + +(define-public ecl-cl-unicode + (sbcl-package->ecl-package sbcl-cl-unicode)) + +(define-public cl-unicode + (sbcl-package->cl-source-package sbcl-cl-unicode)) + (define-public sbcl-clx (let ((revision "1") (commit "1c62774b03c1cf3fe6e5cb532df8b14b44c96b95")) @@ -822,8 +867,6 @@ compatible with ANSI-compliant Common Lisp implementations.") (substitute* "clx.asd" (("\\(:file \"trapezoid\"\\)") "")))))) (build-system asdf-build-system/sbcl) - (arguments - '(#:special-dependencies '("sb-bsd-sockets"))) (home-page "http://www.cliki.net/portable-clx") (synopsis "X11 client library for Common Lisp") (description "CLX is an X11 client library for Common Lisp. The code was @@ -851,31 +894,27 @@ from other CLXes around the net.") (base32 "1maxp98gh64az3d9vz9br6zdd6rc9fmj2imvax4by85g6kxvdz1i")) (file-name (string-append "stumpwm-" version ".tar.gz")))) (build-system asdf-build-system/sbcl) - (inputs `(("sbcl-cl-ppcre" ,sbcl-cl-ppcre) - ("sbcl-clx" ,sbcl-clx))) - (outputs '("out" "bin")) + (inputs `(("cl-ppcre" ,sbcl-cl-ppcre) + ("clx" ,sbcl-clx))) + (outputs '("out" "lib")) (arguments - '(#:special-dependencies '("sb-posix") - #:phases + '(#:phases (modify-phases %standard-phases (add-after 'create-symlinks 'build-program - (lambda* (#:key lisp outputs inputs #:allow-other-keys) + (lambda* (#:key outputs #:allow-other-keys) (build-program - lisp - (string-append (assoc-ref outputs "bin") "/bin/stumpwm") - #:inputs inputs + (string-append (assoc-ref outputs "out") "/bin/stumpwm") + outputs #:entry-program '((stumpwm:stumpwm) 0)))) (add-after 'build-program 'create-desktop-file - (lambda* (#:key outputs lisp binary? #:allow-other-keys) - (let ((output (or (assoc-ref outputs "bin") - (assoc-ref outputs "out"))) - (xsessions "/share/xsessions")) - (mkdir-p (string-append output xsessions)) - (with-output-to-file - (string-append output xsessions - "/stumpwm.desktop") - (lambda _ - (format #t + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (xsessions (string-append out "/share/xsessions"))) + (mkdir-p xsessions) + (call-with-output-file + (string-append xsessions "/stumpwm.desktop") + (lambda (file) + (format file "[Desktop Entry]~@ Name=stumpwm~@ Comment=The Stump Window Manager~@ @@ -883,7 +922,7 @@ from other CLXes around the net.") TryExec=~@*~a/bin/stumpwm~@ Icon=~@ Type=Application~%" - output))) + out))) #t)))))) (synopsis "Window manager written in Common Lisp") (description "Stumpwm is a window manager written entirely in Common Lisp. @@ -904,11 +943,15 @@ productive, customizable lisp based systems.") (outputs '("out")) (arguments '())))) +;; The slynk that users expect to install includes all of slynk's contrib +;; modules. Therefore, we build the base module and all contribs first; then +;; we expose the union of these as `sbcl-slynk'. The following variable +;; describes the base module. (define sbcl-slynk-boot0 (let ((revision "1") (commit "5706cd45d484a4f25795abe8e643509d31968aa2")) (package - (name "sbcl-slynk") + (name "sbcl-slynk-boot0") (version (string-append "1.0.0-beta-" revision "." (string-take commit 7))) (source (origin @@ -948,19 +991,22 @@ productive, customizable lisp based systems.") (scandir "slynk")))))) (build-system asdf-build-system/sbcl) (arguments - `(#:tests? #f)) ; No test suite + `(#:tests? #f ; No test suite + #:asd-system-name "slynk")) (synopsis "Common Lisp IDE for Emacs") - (description "SLY is a fork of SLIME. It also features a completely -redesigned REPL based on Emacs's own full-featured comint.el, live code -annotations, and a consistent interactive button interface. Everything can be -copied to the REPL. One can create multiple inspectors with independent -history.") + (description "SLY is a fork of SLIME, an IDE backend for Common Lisp. +It also features a completely redesigned REPL based on Emacs's own +full-featured comint.el, live code annotations, and a consistent interactive +button interface. Everything can be copied to the REPL. One can create +multiple inspectors with independent history.") (home-page "https://github.com/joaotavora/sly") (license license:public-domain) (properties `((cl-source-variant . ,(delay cl-slynk))))))) (define-public cl-slynk - (sbcl-package->cl-source-package sbcl-slynk-boot0)) + (package + (inherit (sbcl-package->cl-source-package sbcl-slynk-boot0)) + (name "cl-slynk"))) (define ecl-slynk-boot0 (sbcl-package->ecl-package sbcl-slynk-boot0)) @@ -969,10 +1015,11 @@ history.") (package (inherit sbcl-slynk-boot0) (name "sbcl-slynk-arglists") - (inputs `(("sbcl-slynk" ,sbcl-slynk-boot0))) + (inputs `(("slynk" ,sbcl-slynk-boot0))) (arguments - `(#:asd-file "slynk.asd" - ,@(package-arguments sbcl-slynk-boot0))))) + (substitute-keyword-arguments (package-arguments sbcl-slynk-boot0) + ((#:asd-file _ "") "slynk.asd") + ((#:asd-system-name _ #f) #f))))) (define ecl-slynk-arglists (sbcl-package->ecl-package sbcl-slynk-arglists)) @@ -989,7 +1036,7 @@ history.") (package (inherit sbcl-slynk-arglists) (name "sbcl-slynk-fancy-inspector") - (inputs `(("sbcl-slynk-util" ,sbcl-slynk-util) + (inputs `(("slynk-util" ,sbcl-slynk-util) ,@(package-inputs sbcl-slynk-arglists))))) (define ecl-slynk-fancy-inspector @@ -1067,6 +1114,7 @@ history.") (define-public sbcl-slynk (package (inherit sbcl-slynk-boot0) + (name "sbcl-slynk") (inputs `(("slynk" ,sbcl-slynk-boot0) ("slynk-util" ,sbcl-slynk-util) @@ -1104,12 +1152,15 @@ history.") (prepend-to-source-registry (string-append (assoc-ref %outputs "out") "//")) - (build-image "sbcl" - (string-append - (assoc-ref %outputs "image") - "/bin/slynk") - #:inputs %build-inputs - #:dependencies ',slynk-systems)))))) + + (parameterize ((%lisp-type "sbcl") + (%lisp (string-append (assoc-ref %build-inputs "sbcl") + "/bin/sbcl"))) + (build-image (string-append + (assoc-ref %outputs "image") + "/bin/slynk") + %outputs + #:dependencies ',slynk-systems))))))) (define-public ecl-slynk (package @@ -1138,28 +1189,30 @@ history.") (inherit sbcl-stumpwm) (name "sbcl-stumpwm-with-slynk") (outputs '("out")) - (native-inputs - `(("stumpwm" ,sbcl-stumpwm) + (inputs + `(("stumpwm" ,sbcl-stumpwm "lib") ("slynk" ,sbcl-slynk))) (arguments (substitute-keyword-arguments (package-arguments sbcl-stumpwm) ((#:phases phases) `(modify-phases ,phases (replace 'build-program - (lambda* (#:key lisp inputs outputs #:allow-other-keys) + (lambda* (#:key inputs outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) (program (string-append out "/bin/stumpwm"))) - (build-program lisp program - #:inputs inputs + (build-program program outputs #:entry-program '((stumpwm:stumpwm) 0) #:dependencies '("stumpwm" - ,@slynk-systems)) + ,@slynk-systems) + #:dependency-prefixes + (map (lambda (input) (assoc-ref inputs input)) + '("stumpwm" "slynk"))) ;; Remove unneeded file. (delete-file (string-append out "/bin/stumpwm-exec.fasl")) #t))) (delete 'copy-source) (delete 'build) (delete 'check) - (delete 'link-dependencies) + (delete 'create-asd-file) (delete 'cleanup) (delete 'create-symlinks))))))) diff --git a/gnu/packages/logging.scm b/gnu/packages/logging.scm index 2523d65f61..7501f1e5db 100644 --- a/gnu/packages/logging.scm +++ b/gnu/packages/logging.scm @@ -109,6 +109,21 @@ command line.") `(("python-pyyaml" ,python-pyyaml) ("python-sockjs-tornado" ,python-sockjs-tornado) ("python-tornado" ,python-tornado))) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'patch-commands.py + (lambda args + (substitute* "tailon/commands.py" + (("self\\.first_in_path\\('grep'\\)") + (string-append"'" (which "grep") "'")) + (("self\\.first_in_path\\('gawk', 'awk'\\)") + (string-append"'" (which "gawk") "'")) + (("self\\.first_in_path\\('gsed', 'sed'\\)") + (string-append"'" (which "sed") "'")) + (("self\\.first_in_path\\('gtail', 'tail'\\)") + (string-append"'" (which "tail") "'"))) + #t))))) (home-page "https://tailon.readthedocs.io/") (synopsis "Webapp for looking at and searching through log files") diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm index 39d394140b..b4dfef6ec0 100644 --- a/gnu/packages/mail.scm +++ b/gnu/packages/mail.scm @@ -1608,13 +1608,13 @@ maintained.") (define-public khard (package (name "khard") - (version "0.11.3") + (version "0.11.4") (source (origin (method url-fetch) (uri (pypi-uri name version)) (sha256 (base32 - "1v66khq5w17xdbkpb00pf9xbl84dlzx4lq286fvzskb949b3y4yn")))) + "1shhlq6ljbd8095hd82v4mw56rjcfxf1ymmgknbgh8gix02nsxw1")))) (build-system python-build-system) (arguments `(#:phases diff --git a/gnu/packages/mc.scm b/gnu/packages/mc.scm index 3cdc542157..bae12439f1 100644 --- a/gnu/packages/mc.scm +++ b/gnu/packages/mc.scm @@ -1,7 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org> ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il> -;;; Copyright © 2016 ng0 <ng0@libertad.pw> +;;; Copyright © 2016, 2017 ng0 <ng0@no-reply.pragmatique.xyz> ;;; ;;; This file is part of GNU Guix. ;;; @@ -30,7 +30,8 @@ #:use-module (gnu packages ssh) #:use-module (gnu packages pkg-config) #:use-module (gnu packages check) - #:use-module (gnu packages perl)) + #:use-module (gnu packages perl) + #:use-module (gnu packages zip)) (define-public mc (package @@ -51,7 +52,8 @@ ("ncurses" ,ncurses) ("libssh2" ,libssh2) ("glib" ,glib) - ("check" ,check))) + ("check" ,check) + ("unzip" ,unzip))) (arguments `(#:configure-flags '("--with-screen=ncurses" "--enable-aspell") diff --git a/gnu/packages/mes.scm b/gnu/packages/mes.scm index 84d6f8ff78..1e233a852d 100644 --- a/gnu/packages/mes.scm +++ b/gnu/packages/mes.scm @@ -54,30 +54,35 @@ extensive examples, including parsers for the Javascript and C99 languages.") (license (list gpl3+ lgpl3+)))) (define-public mes - (let ((commit "a437c173b9da1949ad966fd50dd4f26e522a910a") + (let ((commit "d4420bbcc9f994e2cce430cf156f383dc4092bca") (revision "0") - (triplet "i686-unknown-linux-gnu")) + (triplet "i686-unknown-linux-gnu") + (version "0.6")) (package (name "mes") - (version (string-append "0.5-" revision "." (string-take commit 7))) + (version (string-append version "-" revision "." (string-take commit 7))) (source (origin (method git-fetch) (uri (git-reference (url "https://gitlab.com/janneke/mes") (commit commit))) (file-name (string-append name "-" version)) - ;; TODO: Unbundle nyacc. (sha256 - (base32 "1ynr0hc0k15307sgzv09k3y5rvy46h0wbh7zcblx1f9v7y8k90zv")))) + (base32 "0qqywk3siyhf08v7xac08lqldklrqfndlp495wgy6ii9fn93197k")))) (build-system gnu-build-system) - (supported-systems '("x86_64-linux")) + (supported-systems '("i686-linux" "x86_64-linux")) + (propagated-inputs + `(("nyacc" ,nyacc))) (native-inputs `(("guile" ,guile-2.2) - ;; Use cross-compiler rather than #:system "i686-linux" to get - ;; MesCC 64 bit .go files installed ready for use with Guile. - ("i686-linux-binutils" ,(cross-binutils triplet)) - ("i686-linux-gcc" ,(let ((triplet triplet)) (cross-gcc triplet))) - ("perl" ,perl))) ;build-aux/gitlog-to-changelog + ,@(if (string-prefix? "x86_64-linux" (or (%current-target-system) + (%current-system))) + ;; Use cross-compiler rather than #:system "i686-linux" to get + ;; MesCC 64 bit .go files installed ready for use with Guile. + `(("i686-linux-binutils" ,(cross-binutils triplet)) + ("i686-linux-gcc" ,(cross-gcc triplet))) + '()) + ("perl" ,perl))) ;build-aux/gitlog-to-changelog (arguments `(#:phases (modify-phases %standard-phases diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm index 3002d27a6e..d4a72df1d8 100644 --- a/gnu/packages/music.scm +++ b/gnu/packages/music.scm @@ -786,6 +786,57 @@ session management. NSM clients use a well-specified OSC protocol to communicate with the session management daemon.") (license license:gpl2+))) +(define-public non-mixer + (package (inherit non-sequencer) + (name "non-mixer") + (arguments + (substitute-keyword-arguments (package-arguments non-sequencer) + ((#:configure-flags flags) + `(cons "--project=mixer" + (delete "--project=sequencer" ,flags))))) + (inputs + `(("jack" ,jack-1) + ("liblo" ,liblo) + ("ladspa" ,ladspa) + ("lrdf" ,lrdf) + ("ntk" ,ntk))) + (native-inputs + `(("pkg-config" ,pkg-config))) + (home-page "http://non.tuxfamily.org/wiki/Non%20Mixer") + (synopsis "Modular digital audio mixer") + (description + "The Non Mixer is a powerful, reliable and fast modular digital audio +mixer. It utilizes JACK for inter-application audio I/O and the NTK GUI +toolkit for a fast and lightweight user interface. Non Mixer can be used +alone or in concert with Non Timeline and Non Sequencer to form a complete +studio.") + (license license:gpl2+))) + +(define-public non-timeline + (package (inherit non-sequencer) + (name "non-timeline") + (arguments + (substitute-keyword-arguments (package-arguments non-sequencer) + ((#:configure-flags flags) + `(cons "--project=timeline" + (delete "--project=sequencer" ,flags))))) + (inputs + `(("jack" ,jack-1) + ("liblo" ,liblo) + ("libsndfile" ,libsndfile) + ("ntk" ,ntk))) + (native-inputs + `(("pkg-config" ,pkg-config))) + (home-page "http://non.tuxfamily.org/wiki/Non%20Timeline") + (synopsis "Modular digital audio timeline arranger") + (description + "The Non Timeline is a powerful, reliable and fast modular digital audio +timeline arranger. It utilizes JACK for inter-application audio I/O and the +NTK GUI toolkit for a fast and lightweight user interface. Non Timeline can +be used alone or in concert with Non Mixer and Non Sequencer to form a +complete studio.") + (license license:gpl2+))) + (define-public solfege (package (name "solfege") diff --git a/gnu/packages/nano.scm b/gnu/packages/nano.scm index f0344d7481..61ff3ced06 100644 --- a/gnu/packages/nano.scm +++ b/gnu/packages/nano.scm @@ -29,7 +29,7 @@ (define-public nano (package (name "nano") - (version "2.8.2") + (version "2.8.4") (source (origin (method url-fetch) @@ -37,7 +37,7 @@ version ".tar.xz")) (sha256 (base32 - "1q5rxkvsv974085xrd2k11ffazadabcb9cnpfra0shmj71xqlgh2")))) + "04bvmimrw40cbcnm3xm5l5lir0qy7cncfkmwrlzg8jiy1x7jdky7")))) (build-system gnu-build-system) (inputs `(("gettext" ,gettext-minimal) diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm index 8ebf6b0578..3438d370e0 100644 --- a/gnu/packages/package-management.scm +++ b/gnu/packages/package-management.scm @@ -52,6 +52,7 @@ #:use-module (gnu packages tls) #:use-module (gnu packages ssh) #:use-module (gnu packages vim) + #:use-module (srfi srfi-1) #:use-module (ice-9 match)) (define (boot-guile-uri arch) @@ -73,8 +74,8 @@ ;; Note: the 'update-guix-package.scm' script expects this definition to ;; start precisely like this. (let ((version "0.12.0") - (commit "ba2260dbbc5a3c915e2cbd54d93f2f3af2a864c3") - (revision 10)) + (commit "ce92d269fea0a2bfac0ac20414f77127d2f07500") + (revision 11)) (package (name "guix") @@ -90,7 +91,7 @@ (commit commit))) (sha256 (base32 - "0nkwbblsnl7kv2n8jf8c6rl3a7dynaqxizhhni18vbnmvza35c79")) + "17l9r2mdzzv8vfxb3bc5zkdqkl472q979iwsarp7lcqss1jxys7w")) (file-name (string-append "guix-" version "-checkout")))) (build-system gnu-build-system) (arguments @@ -265,6 +266,18 @@ the Nix package manager.") ;; Alias for backward compatibility. (define-public guix-devel guix) +(define-public guile2.0-guix + (package + (inherit guix) + (name "guile2.0-guix") + (inputs + `(("guile" ,guile-2.0) + ,@(alist-delete "guile" (package-inputs guix)))) + (propagated-inputs + `(("gnutls" ,gnutls) + ("guile-json" ,guile2.0-json) + ("guile-ssh" ,guile2.0-ssh))))) + (define (source-file? file stat) "Return true if FILE is likely a source file, false if it is a typical generated file." diff --git a/gnu/packages/patches/aspell-default-dict-dir.patch b/gnu/packages/patches/aspell-default-dict-dir.patch new file mode 100644 index 0000000000..17a6ff606f --- /dev/null +++ b/gnu/packages/patches/aspell-default-dict-dir.patch @@ -0,0 +1,20 @@ +This patch changes the default value of 'dict-dir' to correspond +to ~/.guix-profile/lib/aspell rather than $prefix/lib/aspell-X.Y. + +This is not strictly necessary for the 'aspell' program itself since +one can simply set "ASPELL_CONF=dict-dir $HOME/.guix-profile/lib/aspell". +However it is necessary for applications that use libaspell since +'ASPELL_CONF' is not honored in this case. See <https://bugs.gnu.org/25836>. + +--- a/common/config.cpp ++++ b/common/config.cpp +@@ -1349,6 +1349,9 @@ namespace acommon { + # define REPL ".aspell.<lang>.prepl" + #endif + ++#undef DICT_DIR ++#define DICT_DIR "<$ASPELL_DICT_DIR|home-dir/.guix-profile/lib/aspell>" ++ + static const KeyInfo config_keys[] = { + // the description should be under 50 chars + {"actual-dict-dir", KeyInfoString, "<dict-dir^master>", 0} diff --git a/gnu/packages/patches/calibre-dont-load-remote-icons.patch b/gnu/packages/patches/calibre-dont-load-remote-icons.patch new file mode 100644 index 0000000000..2168263072 --- /dev/null +++ b/gnu/packages/patches/calibre-dont-load-remote-icons.patch @@ -0,0 +1,45 @@ +From: Martin Pitt <mpitt@debian.org> +Date: Mon, 14 Nov 2016 22:41:24 +0100 +Subject: content-server: Don't load external URLs for privacy + +Spotted by lintian. +--- + resources/content_server/browse/browse.html | 4 +--- + resources/content_server/index.html | 2 +- + 2 files changed, 2 insertions(+), 4 deletions(-) + +diff --git a/resources/content_server/browse/browse.html b/resources/content_server/browse/browse.html +index 36f7199..e615707 100644 +--- a/resources/content_server/browse/browse.html ++++ b/resources/content_server/browse/browse.html +@@ -7,7 +7,7 @@ + <title>..:: calibre {library} ::.. {title}</title> + <meta http-equiv="X-UA-Compatible" content="IE=100" /> + <meta name="robots" content="noindex" /> +- <link rel="icon" type="image/x-icon" href="//calibre-ebook.com/favicon.ico" /> ++ <link rel="icon" type="image/x-icon" href="favicon.ico" /> + + <link rel="stylesheet" type="text/css" href="{prefix}/static/browse/browse.css" /> + <link type="text/css" href="{prefix}/static/jquery_ui/css/humanity-custom/jquery-ui-1.8.5.custom.css" rel="stylesheet" /> +@@ -63,8 +63,6 @@ + <input type="image" + src="{prefix}/static/button-donate.png" + name="submit"></input> +- <img alt="" src="https://www.paypal.com/en_US/i/scr/pixel.gif" +- width="1" height="1"></img> + </div> + </form> + <div id="calibre-home-link" title="Go to the calibre website"></div> +diff --git a/resources/content_server/index.html b/resources/content_server/index.html +index 51cc33a..e71d0e8 100644 +--- a/resources/content_server/index.html ++++ b/resources/content_server/index.html +@@ -9,7 +9,7 @@ + <script type="text/javascript" src="{prefix}/static/date.js" charset="utf-8"></script> + <script type="text/javascript" src="{prefix}/static/jquery.js" charset="utf-8"></script> + <script type="text/javascript" src="{prefix}/static/gui.js" charset="utf-8"></script> +- <link rel="icon" href="//calibre-ebook.com/favicon.ico" type="image/x-icon" /> ++ <link rel="icon" href="favicon.ico" type="image/x-icon" /> + </head> + <body> + <div id="banner"> diff --git a/gnu/packages/patches/calibre-drop-unrar.patch b/gnu/packages/patches/calibre-drop-unrar.patch index 4eb64404f6..adf977b183 100644 --- a/gnu/packages/patches/calibre-drop-unrar.patch +++ b/gnu/packages/patches/calibre-drop-unrar.patch @@ -1,15 +1,20 @@ -Taken from Debian. Updated by Alex Griffin. +Recreated old debian patch on the latest calibre version -Author: Dmitry Shachnev <mitya57@gmail.com> -Description: do not build unrar extension as we strip unrar from the tarball -Forwarded: not-needed -Last-Update: 2013-04-04 +From 6764e4c211e50d4f4633dbabfba7cbc3089c51dc Mon Sep 17 00:00:00 2001 +From: Brendan Tildesley <brendan.tildesley@openmailbox.org> +Date: Sat, 13 May 2017 21:12:12 +1000 +Subject: [PATCH] Remove unrar extension -Index: calibre/setup/extensions.py -=================================================================== ---- calibre.orig/setup/extensions.json 2016-07-21 21:21:05.000000000 -0500 -+++ calibre/setup/extensions.json 2016-07-27 11:22:17.167710112 -0500 -@@ -211,14 +211,5 @@ +--- + setup/extensions.json | 11 ----------- + src/calibre/ebooks/metadata/archive.py | 2 +- + 2 files changed, 1 insertion(+), 12 deletions(-) + +diff --git a/setup/extensions.json b/setup/extensions.json +index 1f6d1fb5fd..127390450f 100644 +--- a/setup/extensions.json ++++ b/setup/extensions.json +@@ -211,16 +211,5 @@ "sources": "calibre/devices/mtp/unix/devices.c calibre/devices/mtp/unix/libmtp.c", "headers": "calibre/devices/mtp/unix/devices.h calibre/devices/mtp/unix/upstream/music-players.h calibre/devices/mtp/unix/upstream/device-flags.h", "libraries": "mtp" @@ -20,22 +25,25 @@ Index: calibre/setup/extensions.py - "inc_dirs": "unrar", - "defines": "SILENT RARDLL UNRAR _FILE_OFFSET_BITS=64 _LARGEFILE_SOURCE", - "windows_defines": "SILENT RARDLL UNRAR", +- "haiku_defines": "LITTLE_ENDIAN SILENT RARDLL UNRAR _FILE_OFFSET_BITS=64 _LARGEFILE_SOURCE _BSD_SOURCE", +- "haiku_libraries": "bsd", - "optimize_level": 2, - "windows_libraries": "User32 Advapi32 kernel32 Shell32" } ] - - -Index: calibre/src/calibre/ebooks/metadata/archive.py -=================================================================== ---- calibre.orig/src/calibre/ebooks/metadata/archive.py 2016-07-21 21:21:05.000000000 -0500 -+++ calibre/src/calibre/ebooks/metadata/archive.py 2016-07-27 11:21:07.793616039 -0500 -@@ -42,7 +42,7 @@ - description = _('Extract common e-book formats from archives ' - '(zip/rar) files. Also try to autodetect if they are actually ' - 'cbz/cbr files.') +diff --git a/src/calibre/ebooks/metadata/archive.py b/src/calibre/ebooks/metadata/archive.py +index f5c0b7bed3..32257dcdae 100644 +--- a/src/calibre/ebooks/metadata/archive.py ++++ b/src/calibre/ebooks/metadata/archive.py +@@ -44,7 +44,7 @@ class ArchiveExtract(FileTypePlugin): + description = _('Extract common e-book formats from archive files ' + '(ZIP/RAR). Also try to autodetect if they are actually ' + 'CBZ/CBR files.') - file_types = set(['zip', 'rar']) + file_types = set(['zip']) supported_platforms = ['windows', 'osx', 'linux'] on_import = True +-- +2.12.2 + diff --git a/gnu/packages/patches/calibre-use-packaged-feedparser.patch b/gnu/packages/patches/calibre-use-packaged-feedparser.patch new file mode 100644 index 0000000000..8f4bbc8248 --- /dev/null +++ b/gnu/packages/patches/calibre-use-packaged-feedparser.patch @@ -0,0 +1,51 @@ +From: Martin Pitt <mpitt@debian.org> +Date: Mon, 14 Nov 2016 22:41:23 +0100 +Subject: Use packaged instead of bundled feedparser Python module + +--- + recipes/lenta_ru.recipe | 4 +++- + src/calibre/web/feeds/__init__.py | 4 +++- + 2 files changed, 6 insertions(+), 2 deletions(-) + +diff --git a/recipes/lenta_ru.recipe b/recipes/lenta_ru.recipe +index aa4dac4..4b6710c 100644 +--- a/recipes/lenta_ru.recipe ++++ b/recipes/lenta_ru.recipe +@@ -4,11 +4,13 @@ + Lenta.ru + ''' + +-from calibre.web.feeds.feedparser import parse + from calibre.ebooks.BeautifulSoup import Tag + from calibre.web.feeds.news import BasicNewsRecipe ++from feedparser import parse ++from functools import partial + import re + ++parse = partial(parse, agent='Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2.11) Gecko/20101012 Firefox/3.6.11') + + class LentaRURecipe(BasicNewsRecipe): + title = u'Lenta.ru: \u041d\u043e\u0432\u043e\u0441\u0442\u0438' +diff --git a/src/calibre/web/feeds/__init__.py b/src/calibre/web/feeds/__init__.py +index 8c9d748..f262604 100644 +--- a/src/calibre/web/feeds/__init__.py ++++ b/src/calibre/web/feeds/__init__.py +@@ -11,7 +11,10 @@ from calibre.utils.logging import default_log + from calibre import entity_to_unicode, strftime, force_unicode + from calibre.utils.date import dt_factory, utcnow, local_tz + from calibre.utils.cleantext import clean_ascii_chars, clean_xml_chars ++from feedparser import parse ++from functools import partial + ++parse = partial(parse, agent='Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2.11) Gecko/20101012 Firefox/3.6.11') + + class Article(object): + +@@ -334,7 +337,6 @@ def feed_from_xml(raw_xml, title=None, oldest_article=7, + max_articles_per_feed=100, + get_article_url=lambda item: item.get('link', None), + log=default_log): +- from calibre.web.feeds.feedparser import parse + # Handle unclosed escaped entities. They trip up feedparser and HBR for one + # generates them + raw_xml = re.sub(r'(&#\d+)([^0-9;])', r'\1;\2', raw_xml) diff --git a/gnu/packages/patches/gspell-dash-test.patch b/gnu/packages/patches/gspell-dash-test.patch new file mode 100644 index 0000000000..e737921c4b --- /dev/null +++ b/gnu/packages/patches/gspell-dash-test.patch @@ -0,0 +1,16 @@ +Somehow, Aspell 0.60.6.1 and aspell-dict-en-2016.11.20-0 don't consider +this a valid spelling. Skip it. + +--- gspell-1.3.2/testsuite/test-checker.c 2017-05-17 16:02:40.832415940 +0200 ++++ gspell-1.3.2/testsuite/test-checker.c 2017-05-17 16:02:50.768351895 +0200 +@@ -101,9 +101,6 @@ test_dashes (void) + + checker = gspell_checker_new (lang); + +- correctly_spelled = gspell_checker_check_word (checker, "spell-checking", -1, &error); +- g_assert_no_error (error); +- g_assert (correctly_spelled); + + correctly_spelled = gspell_checker_check_word (checker, "nrst-auie", -1, &error); + g_assert_no_error (error); + diff --git a/gnu/packages/patches/guile-ssh-double-free.patch b/gnu/packages/patches/guile-ssh-double-free.patch new file mode 100644 index 0000000000..9692b81d39 --- /dev/null +++ b/gnu/packages/patches/guile-ssh-double-free.patch @@ -0,0 +1,37 @@ +Fix a double-free or use-after-free issue with Guile-SSH used +with Guile 2.2. See <https://bugs.gnu.org/26976>. + +diff --git a/libguile-ssh/channel-type.c b/libguile-ssh/channel-type.c +index 3dd641f..0839854 100644 +--- a/libguile-ssh/channel-type.c ++++ b/libguile-ssh/channel-type.c +@@ -229,10 +229,11 @@ ptob_close (SCM channel) + ssh_channel_free (ch->ssh_channel); + } + ++ SCM_SETSTREAM (channel, NULL); ++ + #if USING_GUILE_BEFORE_2_2 + scm_gc_free (pt->write_buf, pt->write_buf_size, "port write buffer"); + scm_gc_free (pt->read_buf, pt->read_buf_size, "port read buffer"); +- SCM_SETSTREAM (channel, NULL); + + return 0; + #endif +diff --git a/libguile-ssh/sftp-file-type.c b/libguile-ssh/sftp-file-type.c +index 8879924..f87cf03 100644 +--- a/libguile-ssh/sftp-file-type.c ++++ b/libguile-ssh/sftp-file-type.c +@@ -224,10 +224,11 @@ ptob_close (SCM sftp_file) + sftp_close (fd->file); + } + ++ SCM_SETSTREAM (sftp_file, NULL); ++ + #if USING_GUILE_BEFORE_2_2 + scm_gc_free (pt->write_buf, pt->write_buf_size, "port write buffer"); + scm_gc_free (pt->read_buf, pt->read_buf_size, "port read buffer"); +- SCM_SETSTREAM (sftp_file, NULL); + + return 1; + #endif diff --git a/gnu/packages/patches/guile-ssh-rexec-bug.patch b/gnu/packages/patches/guile-ssh-rexec-bug.patch new file mode 100644 index 0000000000..363fea38c9 --- /dev/null +++ b/gnu/packages/patches/guile-ssh-rexec-bug.patch @@ -0,0 +1,16 @@ +Fix a bug whereby 'node-guile-version' would pass a node instead of +a session to 'rexec'. + +diff --git a/modules/ssh/dist/node.scm b/modules/ssh/dist/node.scm +index 9c065c7..29a3906 100644 +--- a/modules/ssh/dist/node.scm ++++ b/modules/ssh/dist/node.scm +@@ -411,7 +411,8 @@ procedure returns the 1st evaluated value if multiple values were returned." + "Get Guile version installed on a NODE, return the version string. Return + #f if Guile is not installed." + (receive (result rc) +- (rexec node "which guile > /dev/null && guile --version") ++ (rexec (node-session node) ++ "which guile > /dev/null && guile --version") + (and (zero? rc) + (car result)))) diff --git a/gnu/packages/patches/jbig2dec-CVE-2017-7885.patch b/gnu/packages/patches/jbig2dec-CVE-2017-7885.patch new file mode 100644 index 0000000000..a598392765 --- /dev/null +++ b/gnu/packages/patches/jbig2dec-CVE-2017-7885.patch @@ -0,0 +1,38 @@ +Fix CVE-2017-7885: + +https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-7885 +https://bugs.ghostscript.com/show_bug.cgi?id=697703 + +Patch copied from upstream source repository: + +https://git.ghostscript.com/?p=jbig2dec.git;a=commit;h=258290340bb657c9efb44457f717b0d8b49f4aa3 + +From 258290340bb657c9efb44457f717b0d8b49f4aa3 Mon Sep 17 00:00:00 2001 +From: Shailesh Mistry <shailesh.mistry@hotmail.co.uk> +Date: Wed, 3 May 2017 22:06:01 +0100 +Subject: [PATCH] Bug 697703: Prevent integer overflow vulnerability. + +Add extra check for the offset being greater than the size +of the image and hence reading off the end of the buffer. + +Thank you to Dai Ge for finding this issue and suggesting a patch. +--- + jbig2_symbol_dict.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/jbig2_symbol_dict.c b/jbig2_symbol_dict.c +index 4acaba9..36225cb 100644 +--- a/jbig2_symbol_dict.c ++++ b/jbig2_symbol_dict.c +@@ -629,7 +629,7 @@ jbig2_decode_symbol_dict(Jbig2Ctx *ctx, + byte *dst = image->data; + + /* SumatraPDF: prevent read access violation */ +- if (size - jbig2_huffman_offset(hs) < image->height * stride) { ++ if ((size - jbig2_huffman_offset(hs) < image->height * stride) || (size < jbig2_huffman_offset(hs))) { + jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "not enough data for decoding (%d/%d)", image->height * stride, + size - jbig2_huffman_offset(hs)); + jbig2_image_release(ctx, image); +-- +2.13.0 + diff --git a/gnu/packages/patches/jbig2dec-CVE-2017-7975.patch b/gnu/packages/patches/jbig2dec-CVE-2017-7975.patch new file mode 100644 index 0000000000..c83fe9d9f2 --- /dev/null +++ b/gnu/packages/patches/jbig2dec-CVE-2017-7975.patch @@ -0,0 +1,40 @@ +Fix CVE-2017-7975: + +https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-7975 +https://bugs.ghostscript.com/show_bug.cgi?id=697693 + +Patch copied from upstream source repository: + +https://git.ghostscript.com/?p=jbig2dec.git;a=commit;h=f8992b8fe65c170c8624226f127c5c4bfed42c66 + +From f8992b8fe65c170c8624226f127c5c4bfed42c66 Mon Sep 17 00:00:00 2001 +From: Shailesh Mistry <shailesh.mistry@hotmail.co.uk> +Date: Wed, 26 Apr 2017 22:12:14 +0100 +Subject: [PATCH] Bug 697693: Prevent SEGV due to integer overflow. + +While building a Huffman table, the start and end points were susceptible +to integer overflow. + +Thank you to Jiaqi for finding this issue and suggesting a patch. +--- + jbig2_huffman.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/jbig2_huffman.c b/jbig2_huffman.c +index 511e461..b4189a1 100644 +--- a/jbig2_huffman.c ++++ b/jbig2_huffman.c +@@ -421,8 +421,8 @@ jbig2_build_huffman_table(Jbig2Ctx *ctx, const Jbig2HuffmanParams *params) + + if (PREFLEN == CURLEN) { + int RANGELEN = lines[CURTEMP].RANGELEN; +- int start_j = CURCODE << shift; +- int end_j = (CURCODE + 1) << shift; ++ uint32_t start_j = CURCODE << shift; ++ uint32_t end_j = (CURCODE + 1) << shift; + byte eflags = 0; + + if (end_j > max_j) { +-- +2.13.0 + diff --git a/gnu/packages/patches/jbig2dec-CVE-2017-7976.patch b/gnu/packages/patches/jbig2dec-CVE-2017-7976.patch new file mode 100644 index 0000000000..2fe02358b8 --- /dev/null +++ b/gnu/packages/patches/jbig2dec-CVE-2017-7976.patch @@ -0,0 +1,122 @@ +Fix CVE-2017-7976: + +https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-7976 +https://bugs.ghostscript.com/show_bug.cgi?id=697683 + +In order to make the bug-fix patch apply, we also include an earlier commit +that it depends on. + +Patches copied from upstream source repository: + +Earlier commit, creating context for the CVE fix: +https://git.ghostscript.com/?p=jbig2dec.git;a=commit;h=9d2c4f3bdb0bd003deae788e7187c0f86e624544 + +CVE-2017-7976 bug fix: +https://git.ghostscript.com/?p=jbig2dec.git;a=commit;h=cfa054925de49675ac5445515ebf036fa9379ac6 + +From 9d2c4f3bdb0bd003deae788e7187c0f86e624544 Mon Sep 17 00:00:00 2001 +From: Tor Andersson <tor.andersson@artifex.com> +Date: Wed, 14 Dec 2016 15:56:31 +0100 +Subject: [PATCH] Fix warnings: remove unsigned < 0 tests that are always + false. + +--- + jbig2_image.c | 2 +- + jbig2_mmr.c | 2 +- + jbig2_symbol_dict.c | 9 ++------- + 3 files changed, 4 insertions(+), 9 deletions(-) + +diff --git a/jbig2_image.c b/jbig2_image.c +index 94e5a4c..00f966b 100644 +--- a/jbig2_image.c ++++ b/jbig2_image.c +@@ -256,7 +256,7 @@ jbig2_image_compose(Jbig2Ctx *ctx, Jbig2Image *dst, Jbig2Image *src, int x, int + /* general OR case */ + s = ss; + d = dd = dst->data + y * dst->stride + leftbyte; +- if (d < dst->data || leftbyte > dst->stride || h * dst->stride < 0 || d - leftbyte + h * dst->stride > dst->data + dst->height * dst->stride) { ++ if (d < dst->data || leftbyte > dst->stride || d - leftbyte + h * dst->stride > dst->data + dst->height * dst->stride) { + return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "preventing heap overflow in jbig2_image_compose"); + } + if (leftbyte == rightbyte) { +diff --git a/jbig2_mmr.c b/jbig2_mmr.c +index 390e27c..da54934 100644 +--- a/jbig2_mmr.c ++++ b/jbig2_mmr.c +@@ -977,7 +977,7 @@ jbig2_decode_mmr_line(Jbig2MmrCtx *mmr, const byte *ref, byte *dst) + if (b1 < 2) + break; + if (c) { +- if (b1 - 2 < a0 || a0 < 0) ++ if (a0 == MINUS1 || b1 - 2 < a0) + return -1; + jbig2_set_bits(dst, a0, b1 - 2); + } +diff --git a/jbig2_symbol_dict.c b/jbig2_symbol_dict.c +index 11a2252..4acaba9 100644 +--- a/jbig2_symbol_dict.c ++++ b/jbig2_symbol_dict.c +@@ -92,11 +92,6 @@ jbig2_sd_new(Jbig2Ctx *ctx, uint32_t n_symbols) + { + Jbig2SymbolDict *new_dict = NULL; + +- if (n_symbols < 0) { +- jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "Negative number of symbols in symbol dict: %d", n_symbols); +- return NULL; +- } +- + new_dict = jbig2_new(ctx, Jbig2SymbolDict, 1); + if (new_dict != NULL) { + new_dict->glyphs = jbig2_new(ctx, Jbig2Image *, n_symbols); +@@ -613,7 +608,7 @@ jbig2_decode_symbol_dict(Jbig2Ctx *ctx, + uint32_t j; + int x; + +- if (code || (BMSIZE < 0)) { ++ if (code) { + jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "error decoding size of collective bitmap!"); + goto cleanup4; + } +@@ -716,7 +711,7 @@ jbig2_decode_symbol_dict(Jbig2Ctx *ctx, + code = jbig2_arith_int_decode(IAEX, as, (int32_t *)&exrunlength); + /* prevent infinite loop */ + zerolength = exrunlength > 0 ? 0 : zerolength + 1; +- if (code || (exrunlength > limit - i) || (exrunlength < 0) || (zerolength > 4) || (exflag && (exrunlength + j > params->SDNUMEXSYMS))) { ++ if (code || (exrunlength > limit - i) || (zerolength > 4) || (exflag && (exrunlength + j > params->SDNUMEXSYMS))) { + if (code) + jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode exrunlength for exported symbols"); + else if (exrunlength <= 0) +-- +2.13.0 + +From cfa054925de49675ac5445515ebf036fa9379ac6 Mon Sep 17 00:00:00 2001 +From: Shailesh Mistry <shailesh.mistry@hotmail.co.uk> +Date: Wed, 10 May 2017 17:50:39 +0100 +Subject: [PATCH] Bug 697683: Bounds check before reading from image source + data. + +Add extra check to prevent reading off the end of the image source +data buffer. + +Thank you to Dai Ge for finding this issue and suggesting a patch. +--- + jbig2_image.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/jbig2_image.c b/jbig2_image.c +index 661d0a5..ae161b9 100644 +--- a/jbig2_image.c ++++ b/jbig2_image.c +@@ -263,7 +263,8 @@ jbig2_image_compose(Jbig2Ctx *ctx, Jbig2Image *dst, Jbig2Image *src, int x, int + /* general OR case */ + s = ss; + d = dd = dst->data + y * dst->stride + leftbyte; +- if (d < dst->data || leftbyte > dst->stride || d - leftbyte + h * dst->stride > dst->data + dst->height * dst->stride) { ++ if (d < dst->data || leftbyte > dst->stride || d - leftbyte + h * dst->stride > dst->data + dst->height * dst->stride || ++ s - leftbyte + (h - 1) * src->stride + rightbyte > src->data + src->height * src->stride) { + return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "preventing heap overflow in jbig2_image_compose"); + } + if (leftbyte == rightbyte) { +-- +2.13.0 + diff --git a/gnu/packages/patches/networkmanager-qt-activeconnection-test-1.patch b/gnu/packages/patches/networkmanager-qt-activeconnection-test-1.patch deleted file mode 100644 index 2dd39294ea..0000000000 --- a/gnu/packages/patches/networkmanager-qt-activeconnection-test-1.patch +++ /dev/null @@ -1,60 +0,0 @@ -From 61337983ba74361938b7d5323de5d2819a235fdc Mon Sep 17 00:00:00 2001 -From: Jan Grulich <jgrulich@redhat.com> -Date: Mon, 3 Apr 2017 12:53:12 +0200 -Subject: Fix unit test for active connections - -Instead of sending PropertiesChanged signal for an active connection we -added recently we should set all properties initially and just advertise -that we have a new active connection once everything is set ---- - src/fakenetwork/fakenetwork.cpp | 26 +++++++------------------- - 1 file changed, 7 insertions(+), 19 deletions(-) - -diff --git a/src/fakenetwork/fakenetwork.cpp b/src/fakenetwork/fakenetwork.cpp -index bc1144e..261fe8e 100644 ---- a/src/fakenetwork/fakenetwork.cpp -+++ b/src/fakenetwork/fakenetwork.cpp -@@ -215,8 +215,14 @@ void FakeNetwork::unregisterService() - - QDBusObjectPath FakeNetwork::ActivateConnection(const QDBusObjectPath &connection, const QDBusObjectPath &device, const QDBusObjectPath &specific_object) - { -- ActiveConnection *newActiveConnection = new ActiveConnection(this); - QString newActiveConnectionPath = QString("/org/kde/fakenetwork/ActiveConnection/") + QString::number(m_activeConnectionsCounter++); -+ ActiveConnection *newActiveConnection = new ActiveConnection(this); -+ newActiveConnection->addDevice(device); -+ newActiveConnection->setActiveConnectionPath(newActiveConnectionPath); -+ newActiveConnection->setConnection(connection); -+ newActiveConnection->setSpecificObject(specific_object); -+ newActiveConnection->setState(NetworkManager::ActiveConnection::Activating); -+ - m_activeConnections.insert(QDBusObjectPath(newActiveConnectionPath), newActiveConnection); - QDBusConnection::sessionBus().registerObject(newActiveConnectionPath, newActiveConnection, QDBusConnection::ExportScriptableContents); - -@@ -227,24 +233,6 @@ QDBusObjectPath FakeNetwork::ActivateConnection(const QDBusObjectPath &connectio - map.insert(QLatin1Literal("ActivatingConnection"), QVariant::fromValue(QDBusObjectPath(newActiveConnectionPath))); - Q_EMIT PropertiesChanged(map); - -- newActiveConnection->addDevice(device); -- newActiveConnection->setActiveConnectionPath(newActiveConnectionPath); -- newActiveConnection->setConnection(connection); -- newActiveConnection->setSpecificObject(specific_object); -- newActiveConnection->setState(NetworkManager::ActiveConnection::Activating); -- -- map.clear(); -- const QList<QDBusObjectPath> deviceList { device }; -- map.insert(QLatin1Literal("Devices"), QVariant::fromValue<QList<QDBusObjectPath> >(deviceList)); -- map.insert(QLatin1Literal("Connection"), QVariant::fromValue<QDBusObjectPath>(connection)); -- if (!specific_object.path().isEmpty()) { -- map.insert(QLatin1Literal("SpecificObject"), QVariant::fromValue<QDBusObjectPath>(connection)); -- } -- map.insert(QLatin1Literal("State"), NetworkManager::ActiveConnection::Activating); -- QDBusMessage message = QDBusMessage::createSignal(newActiveConnectionPath, QLatin1Literal("org.kde.fakenetwork.Connection.Active"), QLatin1Literal("PropertiesChanged")); -- message << map; -- QDBusConnection::sessionBus().send(message); -- - Device *usedDevice = static_cast<Device *>(QDBusConnection::sessionBus().objectRegisteredAt(device.path())); - if (usedDevice) { - m_activatedDevice = usedDevice->devicePath(); --- -cgit v0.11.2 - diff --git a/gnu/packages/patches/networkmanager-qt-activeconnection-test-2.patch b/gnu/packages/patches/networkmanager-qt-activeconnection-test-2.patch deleted file mode 100644 index af3cdff729..0000000000 --- a/gnu/packages/patches/networkmanager-qt-activeconnection-test-2.patch +++ /dev/null @@ -1,57 +0,0 @@ -From 3f6155389abc8e2b3dafc5eefa1ce0c929b007fa Mon Sep 17 00:00:00 2001 -From: Jan Grulich <jgrulich@redhat.com> -Date: Mon, 3 Apr 2017 14:13:54 +0200 -Subject: One more attempt to fix unit test for active connections - ---- - src/activeconnection.cpp | 10 ++++++++++ - 1 file changed, 10 insertions(+) - -diff --git a/src/activeconnection.cpp b/src/activeconnection.cpp -index 05582fa..3a8e6b2 100644 ---- a/src/activeconnection.cpp -+++ b/src/activeconnection.cpp -@@ -79,11 +79,13 @@ NetworkManager::ActiveConnection::ActiveConnection(const QString &path, QObject - connect(&d->iface, &OrgFreedesktopNetworkManagerConnectionActiveInterface::PropertiesChanged, d, &ActiveConnectionPrivate::propertiesChanged); - #endif - -+#ifndef NMQT_STATIC - /* - * Workaround: Re-check connection state before we watch changes in case it gets changed too quickly - * BUG:352326 - */ - d->recheckProperties(); -+#endif - } - - NetworkManager::ActiveConnection::ActiveConnection(ActiveConnectionPrivate &dd, QObject *parent) -@@ -91,18 +93,26 @@ NetworkManager::ActiveConnection::ActiveConnection(ActiveConnectionPrivate &dd, - { - Q_D(ActiveConnection); - -+#ifndef NMQT_STATIC - #if NM_CHECK_VERSION(1, 4, 0) - QDBusConnection::systemBus().connect(NetworkManagerPrivate::DBUS_SERVICE, d->path, NetworkManagerPrivate::FDO_DBUS_PROPERTIES, - QLatin1String("PropertiesChanged"), d, SLOT(dbusPropertiesChanged(QString,QVariantMap,QStringList))); - #else - connect(&d->iface, &OrgFreedesktopNetworkManagerConnectionActiveInterface::PropertiesChanged, d, &ActiveConnectionPrivate::propertiesChanged); - #endif -+#endif -+ -+#ifdef NMQT_STATIC -+ connect(&d->iface, &OrgFreedesktopNetworkManagerConnectionActiveInterface::PropertiesChanged, d, &ActiveConnectionPrivate::propertiesChanged); -+#endif - -+#ifndef NMQT_STATIC - /* - * Workaround: Re-check connection state before we watch changes in case it gets changed too quickly - * BUG:352326 - */ - d->recheckProperties(); -+#endif - } - - NetworkManager::ActiveConnection::~ActiveConnection() --- -cgit v0.11.2 - diff --git a/gnu/packages/patches/qemu-CVE-2017-7493.patch b/gnu/packages/patches/qemu-CVE-2017-7493.patch new file mode 100644 index 0000000000..67b26fad81 --- /dev/null +++ b/gnu/packages/patches/qemu-CVE-2017-7493.patch @@ -0,0 +1,182 @@ +Fix CVE-2017-7493: + +https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-7493 + +Patch copied from upstream source repository: + +http://git.qemu.org/?p=qemu.git;a=commit;h=7a95434e0ca8a037fd8aa1a2e2461f92585eb77b + +From 7a95434e0ca8a037fd8aa1a2e2461f92585eb77b Mon Sep 17 00:00:00 2001 +From: Greg Kurz <groug@kaod.org> +Date: Fri, 5 May 2017 14:48:08 +0200 +Subject: [PATCH] 9pfs: local: forbid client access to metadata (CVE-2017-7493) + +When using the mapped-file security mode, we shouldn't let the client mess +with the metadata. The current code already tries to hide the metadata dir +from the client by skipping it in local_readdir(). But the client can still +access or modify it through several other operations. This can be used to +escalate privileges in the guest. + +Affected backend operations are: +- local_mknod() +- local_mkdir() +- local_open2() +- local_symlink() +- local_link() +- local_unlinkat() +- local_renameat() +- local_rename() +- local_name_to_path() + +Other operations are safe because they are only passed a fid path, which +is computed internally in local_name_to_path(). + +This patch converts all the functions listed above to fail and return +EINVAL when being passed the name of the metadata dir. This may look +like a poor choice for errno, but there's no such thing as an illegal +path name on Linux and I could not think of anything better. + +This fixes CVE-2017-7493. + +Reported-by: Leo Gaspard <leo@gaspard.io> +Signed-off-by: Greg Kurz <groug@kaod.org> +Reviewed-by: Eric Blake <eblake@redhat.com> +--- + hw/9pfs/9p-local.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- + 1 file changed, 56 insertions(+), 2 deletions(-) + +diff --git a/hw/9pfs/9p-local.c b/hw/9pfs/9p-local.c +index f3ebca4f7a..a2486566af 100644 +--- a/hw/9pfs/9p-local.c ++++ b/hw/9pfs/9p-local.c +@@ -452,6 +452,11 @@ static off_t local_telldir(FsContext *ctx, V9fsFidOpenState *fs) + return telldir(fs->dir.stream); + } + ++static bool local_is_mapped_file_metadata(FsContext *fs_ctx, const char *name) ++{ ++ return !strcmp(name, VIRTFS_META_DIR); ++} ++ + static struct dirent *local_readdir(FsContext *ctx, V9fsFidOpenState *fs) + { + struct dirent *entry; +@@ -465,8 +470,8 @@ again: + if (ctx->export_flags & V9FS_SM_MAPPED) { + entry->d_type = DT_UNKNOWN; + } else if (ctx->export_flags & V9FS_SM_MAPPED_FILE) { +- if (!strcmp(entry->d_name, VIRTFS_META_DIR)) { +- /* skp the meta data directory */ ++ if (local_is_mapped_file_metadata(ctx, entry->d_name)) { ++ /* skip the meta data directory */ + goto again; + } + entry->d_type = DT_UNKNOWN; +@@ -559,6 +564,12 @@ static int local_mknod(FsContext *fs_ctx, V9fsPath *dir_path, + int err = -1; + int dirfd; + ++ if (fs_ctx->export_flags & V9FS_SM_MAPPED_FILE && ++ local_is_mapped_file_metadata(fs_ctx, name)) { ++ errno = EINVAL; ++ return -1; ++ } ++ + dirfd = local_opendir_nofollow(fs_ctx, dir_path->data); + if (dirfd == -1) { + return -1; +@@ -605,6 +616,12 @@ static int local_mkdir(FsContext *fs_ctx, V9fsPath *dir_path, + int err = -1; + int dirfd; + ++ if (fs_ctx->export_flags & V9FS_SM_MAPPED_FILE && ++ local_is_mapped_file_metadata(fs_ctx, name)) { ++ errno = EINVAL; ++ return -1; ++ } ++ + dirfd = local_opendir_nofollow(fs_ctx, dir_path->data); + if (dirfd == -1) { + return -1; +@@ -694,6 +711,12 @@ static int local_open2(FsContext *fs_ctx, V9fsPath *dir_path, const char *name, + int err = -1; + int dirfd; + ++ if (fs_ctx->export_flags & V9FS_SM_MAPPED_FILE && ++ local_is_mapped_file_metadata(fs_ctx, name)) { ++ errno = EINVAL; ++ return -1; ++ } ++ + /* + * Mark all the open to not follow symlinks + */ +@@ -752,6 +775,12 @@ static int local_symlink(FsContext *fs_ctx, const char *oldpath, + int err = -1; + int dirfd; + ++ if (fs_ctx->export_flags & V9FS_SM_MAPPED_FILE && ++ local_is_mapped_file_metadata(fs_ctx, name)) { ++ errno = EINVAL; ++ return -1; ++ } ++ + dirfd = local_opendir_nofollow(fs_ctx, dir_path->data); + if (dirfd == -1) { + return -1; +@@ -826,6 +855,12 @@ static int local_link(FsContext *ctx, V9fsPath *oldpath, + int ret = -1; + int odirfd, ndirfd; + ++ if (ctx->export_flags & V9FS_SM_MAPPED_FILE && ++ local_is_mapped_file_metadata(ctx, name)) { ++ errno = EINVAL; ++ return -1; ++ } ++ + odirfd = local_opendir_nofollow(ctx, odirpath); + if (odirfd == -1) { + goto out; +@@ -1096,6 +1131,12 @@ static int local_lremovexattr(FsContext *ctx, V9fsPath *fs_path, + static int local_name_to_path(FsContext *ctx, V9fsPath *dir_path, + const char *name, V9fsPath *target) + { ++ if (ctx->export_flags & V9FS_SM_MAPPED_FILE && ++ local_is_mapped_file_metadata(ctx, name)) { ++ errno = EINVAL; ++ return -1; ++ } ++ + if (dir_path) { + v9fs_path_sprintf(target, "%s/%s", dir_path->data, name); + } else if (strcmp(name, "/")) { +@@ -1116,6 +1157,13 @@ static int local_renameat(FsContext *ctx, V9fsPath *olddir, + int ret; + int odirfd, ndirfd; + ++ if (ctx->export_flags & V9FS_SM_MAPPED_FILE && ++ (local_is_mapped_file_metadata(ctx, old_name) || ++ local_is_mapped_file_metadata(ctx, new_name))) { ++ errno = EINVAL; ++ return -1; ++ } ++ + odirfd = local_opendir_nofollow(ctx, olddir->data); + if (odirfd == -1) { + return -1; +@@ -1206,6 +1254,12 @@ static int local_unlinkat(FsContext *ctx, V9fsPath *dir, + int ret; + int dirfd; + ++ if (ctx->export_flags & V9FS_SM_MAPPED_FILE && ++ local_is_mapped_file_metadata(ctx, name)) { ++ errno = EINVAL; ++ return -1; ++ } ++ + dirfd = local_opendir_nofollow(ctx, dir->data); + if (dirfd == -1) { + return -1; +-- +2.13.0 + diff --git a/gnu/packages/patches/qtscript-disable-tests.patch b/gnu/packages/patches/qtscript-disable-tests.patch new file mode 100644 index 0000000000..41a017d864 --- /dev/null +++ b/gnu/packages/patches/qtscript-disable-tests.patch @@ -0,0 +1,64 @@ +In all of these tests the result wraps around and comes out the negative of the exptected value. + +--- + tests/auto/qscriptjstestsuite/tests/ecma/Expressions/11.4.7-02.js | 2 +- + tests/auto/qscriptjstestsuite/tests/ecma/TypeConversion/9.3.1-3.js | 5 ++++- + 2 files changed, 5 insertions(+), 2 deletions(-) + +diff --git a/tests/auto/qscriptjstestsuite/tests/ecma/Expressions/11.4.7-02.js b/tests/auto/qscriptjstestsuite/tests/ecma/Expressions/11.4.7-02.js +index 43bd923..103f251 100644 +--- a/tests/auto/qscriptjstestsuite/tests/ecma/Expressions/11.4.7-02.js ++++ b/tests/auto/qscriptjstestsuite/tests/ecma/Expressions/11.4.7-02.js +@@ -74,7 +74,7 @@ test_negation(-1073741823, 1073741823); + + //2147483648 == (1 << 31) + test_negation(2147483648, -2147483648); +-test_negation(-2147483648, 2147483648); ++//test_negation(-2147483648, 2147483648); + + //2147483648 == (1 << 31) - 1 + test_negation(2147483647, -2147483647); +diff --git a/tests/auto/qscriptjstestsuite/tests/ecma/TypeConversion/9.3.1-3.js b/tests/auto/qscriptjstestsuite/tests/ecma/TypeConversion/9.3.1-3.js +index dc56427..c1a4bf3 100644 +--- a/tests/auto/qscriptjstestsuite/tests/ecma/TypeConversion/9.3.1-3.js ++++ b/tests/auto/qscriptjstestsuite/tests/ecma/TypeConversion/9.3.1-3.js +@@ -86,11 +86,12 @@ new TestCase( + // test cases from bug http://scopus.mcom.com/bugsplat/show_bug.cgi?id=122882 + + +- ++/* + new TestCase( SECTION, + '- -"0x80000000"', + 2147483648, + - -"0x80000000" ); ++*/ + + new TestCase( SECTION, + '- -"0x100000000"', +@@ -280,10 +281,12 @@ new TestCase( SECTION, + 305419896, + 0x12345678 ); + ++/* + new TestCase( SECTION, + "0x80000000", + 2147483648, + 0x80000000 ); ++*/ + + new TestCase( SECTION, + "0xffffffff", +@@ -681,10 +681,12 @@ new TestCase( SECTION, + NaN, + -"+Infiniti" ); + ++/* + new TestCase( SECTION, + "- -\"0x80000000\"", + 2147483648, + - -"0x80000000" ); ++*/ + + new TestCase( SECTION, + "- -\"0x100000000\"", diff --git a/gnu/packages/patches/ruby-concurrent-test-arm.patch b/gnu/packages/patches/ruby-concurrent-test-arm.patch index 75e6365565..06d5657814 100644 --- a/gnu/packages/patches/ruby-concurrent-test-arm.patch +++ b/gnu/packages/patches/ruby-concurrent-test-arm.patch @@ -5,27 +5,27 @@ Work around two test suite failures on ARM: The regexps here assume addresses like "0x1234" but on ARM (32-bit) we get something like "0x-7db1e810" (notice the dash). -diff --git a/spec/concurrent/edge/future_spec.rb b/spec/concurrent/edge/future_spec.rb -index a48fd29..4344d7e 100644 ---- b/spec/concurrent/edge/future_spec.rb -+++ a/spec/concurrent/edge/future_spec.rb -@@ -322,9 +322,9 @@ +diff --git a/spec/concurrent/edge/promises_spec.rb b/spec/concurrent/edge/promises_spec.rb +index 727210f..149f7cd 100644 +--- a/spec/concurrent/edge/promises_spec.rb ++++ b/spec/concurrent/edge/promises_spec.rb +@@ -371,9 +371,9 @@ describe 'Concurrent::Promises' do four = three.delay.then(&:succ) # meaningful to_s and inspect defined for Future and Promise -- expect(head.to_s).to match /<#Concurrent::Edge::Future:0x[\da-f]+ pending>/ -+ expect(head.to_s).to match /<#Concurrent::Edge::Future:0x-?[\da-f]+ pending>/ +- expect(head.to_s).to match /<#Concurrent::Promises::Future:0x[\da-f]+ pending>/ ++ expect(head.to_s).to match /<#Concurrent::Promises::Future:0x-?[\da-f]+ pending>/ expect(head.inspect).to( -- match(/<#Concurrent::Edge::Future:0x[\da-f]+ pending blocks:\[<#Concurrent::Edge::ThenPromise:0x[\da-f]+ pending>\]>/)) -+ match(/<#Concurrent::Edge::Future:0x-?[\da-f]+ pending blocks:\[<#Concurrent::Edge::ThenPromise:0x-?[\da-f]+ pending>\]>/)) +- match(/<#Concurrent::Promises::Future:0x[\da-f]+ pending>/)) ++ match(/<#Concurrent::Promises::Future:0x-?[\da-f]+ pending>/)) # evaluates only up to three, four is left unevaluated expect(three.value!).to eq 3 diff --git a/spec/concurrent/map_spec.rb b/spec/concurrent/map_spec.rb -index 13fd5b7..1c82ebe 100644 ---- b/spec/concurrent/map_spec.rb -+++ a/spec/concurrent/map_spec.rb -@@ -827,7 +827,7 @@ +index c4050be..0a9095d 100644 +--- a/spec/concurrent/map_spec.rb ++++ b/spec/concurrent/map_spec.rb +@@ -794,7 +794,7 @@ module Concurrent end it '#inspect' do diff --git a/gnu/packages/patches/shadow-4.4-su-snprintf-fix.patch b/gnu/packages/patches/shadow-4.4-su-snprintf-fix.patch deleted file mode 100644 index 3f357c4924..0000000000 --- a/gnu/packages/patches/shadow-4.4-su-snprintf-fix.patch +++ /dev/null @@ -1,31 +0,0 @@ -Patch copied from upstream source repository: - -https://github.com/shadow-maint/shadow/commit/67d2bb6e0a5ac124ce1f026dd5723217b1493194 - -From 67d2bb6e0a5ac124ce1f026dd5723217b1493194 Mon Sep 17 00:00:00 2001 -From: Serge Hallyn <serge@hallyn.com> -Date: Sun, 18 Sep 2016 21:31:18 -0500 -Subject: [PATCH] su.c: fix missing length argument to snprintf - ---- - src/su.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/su.c b/src/su.c -index 0c50a9456afd..93ffd2fbe2b4 100644 ---- a/src/su.c -+++ b/src/su.c -@@ -373,8 +373,8 @@ static void prepare_pam_close_session (void) - stderr); - (void) kill (-pid_child, caught); - -- snprintf (kill_msg, _(" ...killed.\n")); -- snprintf (wait_msg, _(" ...waiting for child to terminate.\n")); -+ snprintf (kill_msg, 256, _(" ...killed.\n")); -+ snprintf (wait_msg, 256, _(" ...waiting for child to terminate.\n")); - - (void) signal (SIGALRM, kill_child); - (void) alarm (2); --- -2.11.0.rc2 - diff --git a/gnu/packages/patches/shadow-CVE-2017-2616.patch b/gnu/packages/patches/shadow-CVE-2017-2616.patch deleted file mode 100644 index f88aac40bc..0000000000 --- a/gnu/packages/patches/shadow-CVE-2017-2616.patch +++ /dev/null @@ -1,72 +0,0 @@ -Fix CVE-2017-2616: - -https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-2616 -http://seclists.org/oss-sec/2017/q1/490 -http://seclists.org/oss-sec/2017/q1/474 - -Patch copied from upstream source repository: - -https://github.com/shadow-maint/shadow/commit/08fd4b69e84364677a10e519ccb25b71710ee686 - -From 08fd4b69e84364677a10e519ccb25b71710ee686 Mon Sep 17 00:00:00 2001 -From: Tobias Stoeckmann <tobias@stoeckmann.org> -Date: Thu, 23 Feb 2017 09:47:29 -0600 -Subject: [PATCH] su: properly clear child PID - -If su is compiled with PAM support, it is possible for any local user -to send SIGKILL to other processes with root privileges. There are -only two conditions. First, the user must be able to perform su with -a successful login. This does NOT have to be the root user, even using -su with the same id is enough, e.g. "su $(whoami)". Second, SIGKILL -can only be sent to processes which were executed after the su process. -It is not possible to send SIGKILL to processes which were already -running. I consider this as a security vulnerability, because I was -able to write a proof of concept which unlocked a screen saver of -another user this way. ---- - src/su.c | 19 +++++++++++++++++-- - 1 file changed, 17 insertions(+), 2 deletions(-) - -diff --git a/src/su.c b/src/su.c -index f20d230..d86aa86 100644 ---- a/src/su.c -+++ b/src/su.c -@@ -379,11 +379,13 @@ static void prepare_pam_close_session (void) - /* wake child when resumed */ - kill (pid, SIGCONT); - stop = false; -+ } else { -+ pid_child = 0; - } - } while (!stop); - } - -- if (0 != caught) { -+ if (0 != caught && 0 != pid_child) { - (void) fputs ("\n", stderr); - (void) fputs (_("Session terminated, terminating shell..."), - stderr); -@@ -393,9 +395,22 @@ static void prepare_pam_close_session (void) - snprintf (wait_msg, sizeof wait_msg, _(" ...waiting for child to terminate.\n")); - - (void) signal (SIGALRM, kill_child); -+ (void) signal (SIGCHLD, catch_signals); - (void) alarm (2); - -- (void) wait (&status); -+ sigemptyset (&ourset); -+ if ((sigaddset (&ourset, SIGALRM) != 0) -+ || (sigprocmask (SIG_BLOCK, &ourset, NULL) != 0)) { -+ fprintf (stderr, _("%s: signal masking malfunction\n"), Prog); -+ kill_child (0); -+ } else { -+ while (0 == waitpid (pid_child, &status, WNOHANG)) { -+ sigsuspend (&ourset); -+ } -+ pid_child = 0; -+ (void) sigprocmask (SIG_UNBLOCK, &ourset, NULL); -+ } -+ - (void) fputs (_(" ...terminated.\n"), stderr); - } - diff --git a/gnu/packages/php.scm b/gnu/packages/php.scm index ab277ed973..1b55cd4eb9 100644 --- a/gnu/packages/php.scm +++ b/gnu/packages/php.scm @@ -53,7 +53,7 @@ (define-public php (package (name "php") - (version "7.1.4") + (version "7.1.5") (home-page "https://secure.php.net/") (source (origin (method url-fetch) @@ -61,7 +61,7 @@ name "-" version ".tar.xz")) (sha256 (base32 - "02rh1lcfj2hakyls73gwn6w00yblnfh4883w13gn7sgkmn346lbi")) + "1b7njiqgy66ga5c8wsm78mqqjr7lj3hlpwbbvksi2mn4jv1s6jfi")) (modules '((guix build utils))) (snippet '(with-directory-excursion "ext" @@ -169,12 +169,6 @@ "ext/standard/tests/general_functions/proc_open.phpt") (("/bin/cat") (which "cat"))) - ;; These tests fail because they include a file whose modification - ;; time is 0. Touch them to make the test pass. The issue is reported - ;; upstream as #74137. - (utime "sapi/phpdbg/tests/include.inc" 1 1) - (utime "sapi/phpdbg/tests/phpdbg_get_executable_stream_wrapper.inc" 1 1) - ;; The encoding of this file is not recognized, so we simply drop it. (delete-file "ext/mbstring/tests/mb_send_mail07.phpt") diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm index 57a67de416..54dc493904 100644 --- a/gnu/packages/python.scm +++ b/gnu/packages/python.scm @@ -10717,14 +10717,14 @@ development version of CPython that are not available in older releases.") (define-public python-future (package (name "python-future") - (version "0.15.2") + (version "0.16.0") (source (origin (method url-fetch) (uri (pypi-uri "future" version)) (sha256 (base32 - "15wvcfzssc68xqnqi1dq4fhd0848hwi9jn42hxyvlqna40zijfrx")))) + "1nzy1k4m9966sikp0qka7lirh8sqrsyainyf8rk97db7nwdfv773")))) (build-system python-build-system) ;; Many tests connect to the network or are otherwise flawed. ;; https://github.com/PythonCharmers/python-future/issues/210 diff --git a/gnu/packages/qemu.scm b/gnu/packages/qemu.scm index 30b9908aa0..0734b6d0f7 100644 --- a/gnu/packages/qemu.scm +++ b/gnu/packages/qemu.scm @@ -74,6 +74,7 @@ (method url-fetch) (uri (string-append "http://wiki.qemu-project.org/download/qemu-" version ".tar.xz")) + (patches (search-patches "qemu-CVE-2017-7493.patch")) (sha256 (base32 "08mhfs0ndbkyqgw7fjaa9vjxf4dinrly656f6hjzvmaz7hzc677h")))) diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm index 074ef0b466..d94c652ab2 100644 --- a/gnu/packages/qt.scm +++ b/gnu/packages/qt.scm @@ -47,7 +47,7 @@ #:use-module (gnu packages icu4c) #:use-module (gnu packages image) #:use-module (gnu packages linux) - #:use-module (gnu packages databases) + #:use-module (gnu packages maths) #:use-module (gnu packages pciutils) #:use-module (gnu packages pcre) #:use-module (gnu packages perl) @@ -349,7 +349,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") (define-public qtbase (package (name "qtbase") - (version "5.7.1") + (version "5.8.0") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -358,7 +358,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") version ".tar.xz")) (sha256 (base32 - "0zjmcrmnnmaz1lr9wc5i6y565hsvl8ycn790ivqaz62dv54zbkgd")) + "01f07yjly7y24njl2h4hyknmi7pf8yd9gky23szcfkd40ap12wf1")) (modules '((guix build utils))) (snippet '(begin @@ -375,6 +375,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") `(("alsa-lib" ,alsa-lib) ("cups" ,cups) ("dbus" ,dbus) + ("double-conversion" ,double-conversion) ("eudev" ,eudev) ("expat" ,expat) ("fontconfig" ,fontconfig) @@ -467,19 +468,15 @@ developers using C++ or QML, a CSS & JavaScript like language.") "-openssl-linked" ;; explicitly link with dbus instead of dlopening it "-dbus-linked" - ;; drop special machine instructions not supported - ;; on all instances of the target + ;; don't use the precompiled headers + "-no-pch" + ;; drop special machine instructions that do not have + ;; runtime detection ,@(if (string-prefix? "x86_64" (or (%current-target-system) (%current-system))) '() '("-no-sse2")) - "-no-sse3" - "-no-ssse3" - "-no-sse4.1" - "-no-sse4.2" - "-no-avx" - "-no-avx2" "-no-mips_dsp" "-no-mips_dspr2"))))) (add-after 'install 'patch-qt_config.prf @@ -532,7 +529,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") (define-public qtsvg (package (inherit qtbase) (name "qtsvg") - (version "5.7.1") + (version "5.8.0") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -541,7 +538,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") version ".tar.xz")) (sha256 (base32 - "0irr9h566hl9nx8p919rz276zbfvvd6vqdb6i9g6b3piikdigw5h")))) + "12fwzbp28szqw1sk3flb8i6xnxgl94siwyy41ffdmd0s44f1jwwq")))) (propagated-inputs `()) (native-inputs `(("perl" ,perl))) (inputs @@ -575,7 +572,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") (define-public qtimageformats (package (inherit qtsvg) (name "qtimageformats") - (version "5.7.1") + (version "5.8.0") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -584,11 +581,10 @@ developers using C++ or QML, a CSS & JavaScript like language.") version ".tar.xz")) (sha256 (base32 - "1x3p1xmw7spxa4bwriyrwsfrq31jabsdjsi5fras9y39naia55sg")) + "0vv0wh5q5sih294x661djzwvgdwy7r6xpnxsc111k5hwq7m5w13m")) (modules '((guix build utils))) (snippet - '(begin - (delete-file-recursively "src/3rdparty"))))) + '(delete-file-recursively "src/3rdparty")))) (native-inputs `()) (inputs `(("jasper" ,jasper) @@ -602,7 +598,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") (define-public qtx11extras (package (inherit qtsvg) (name "qtx11extras") - (version "5.7.1") + (version "5.8.0") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -611,7 +607,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") version ".tar.xz")) (sha256 (base32 - "09z49jm70f5i0gcdz9a16z00pg96x8pz7vri5wpirh3fqqn0qnjz")))) + "03i8lk9qcdf8h2k4f3rkqqkzbrlnyaspv9mgjkn4k61s2asz5mxy")))) (arguments (substitute-keyword-arguments (package-arguments qtsvg) ((#:tests? _ #f) #f))) ; TODO: Enable the tests @@ -623,7 +619,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") (define-public qtxmlpatterns (package (inherit qtsvg) (name "qtxmlpatterns") - (version "5.7.1") + (version "5.8.0") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -632,7 +628,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") version ".tar.xz")) (sha256 (base32 - "1rgqnpg64gn5agmvjwy0am8hp5fpxl3cdkixr1yrsdxi5a6961d8")))) + "016s75j2cml7kc8scdm9a6pmxm8jhs424lml2h9znm1flmgadzvv")))) (arguments (substitute-keyword-arguments (package-arguments qtsvg) ((#:phases phases) @@ -640,7 +636,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") (add-after 'unpack 'disable-network-tests (lambda _ (substitute* "tests/auto/auto.pro" (("qxmlquery") "# qxmlquery") - (("xmlpatterns") "# xmlpatterns")) + (("xmlpatterns ") "# xmlpatterns")) #t)))))) (native-inputs `(("perl" ,perl))) (inputs `(("qtbase" ,qtbase))))) @@ -648,7 +644,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") (define-public qtdeclarative (package (inherit qtsvg) (name "qtdeclarative") - (version "5.7.1") + (version "5.8.0") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -657,7 +653,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") version ".tar.xz")) (sha256 (base32 - "0mjxfwnplpx60jc6y94krg00isddl9bfwc7dayl981njb4qds4zx")))) + "0ilaf2sprpk9fg2j3905hxnhm0xbnm88ppk4zifp7n0jmnwix51j")))) (arguments (substitute-keyword-arguments (package-arguments qtsvg) ((#:tests? _ #f) #f))) ; TODO: Enable the tests @@ -674,7 +670,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") (define-public qtconnectivity (package (inherit qtsvg) (name "qtconnectivity") - (version "5.7.1") + (version "5.8.0") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -683,7 +679,18 @@ developers using C++ or QML, a CSS & JavaScript like language.") version ".tar.xz")) (sha256 (base32 - "0rmr7bd4skby7bax9hpj2sid2bq3098nkw7xm02mdp04hc3bks5k")))) + "1w97na5s420y08dcydqinbqb0rd9h4pfdnjbwslr0qvzsvlh2bbv")))) + (arguments + (substitute-keyword-arguments (package-arguments qtsvg) + ((#:phases phases) + `(modify-phases ,phases + (add-after 'unpack 'disable-failing-tests + ;; this test fails on armhf and aarch64 + (lambda _ + (substitute* "tests/auto/qndefnfcsmartposterrecord/tst_qndefnfcsmartposterrecord.cpp" + (("QCOMPARE\\(record.action\\(\\), QNdefNfcSmartPosterRecord::UnspecifiedAction") + "//QCOMPARE(record.action(), QNdefNfcSmartPosterRecord::UnspecifiedAction")) + #t)))))) (native-inputs `(("perl" ,perl) ("pkg-config" ,pkg-config) @@ -695,7 +702,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") (define-public qtwebsockets (package (inherit qtsvg) (name "qtwebsockets") - (version "5.7.1") + (version "5.8.0") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -704,7 +711,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") version ".tar.xz")) (sha256 (base32 - "1laj0slwibs0bg69kgrdhc9k1s6yisq3pcsr0r9rhbkzisv7aajw")))) + "1xa5p36grqxz3fa08amn7r3dy6k28g6y0gkc6jgj7lyhjzr0l4da")))) (arguments (substitute-keyword-arguments (package-arguments qtsvg) ((#:tests? _ #f) #f))) ; TODO: Enable the tests @@ -716,7 +723,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") (define-public qtsensors (package (inherit qtsvg) (name "qtsensors") - (version "5.7.1") + (version "5.8.0") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -725,7 +732,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") version ".tar.xz")) (sha256 (base32 - "041v1x8pwfzpyk6y0sy5zgm915pi15xdhiy18fd5wqayvcp99cyc")))) + "15p7bp21yj4cdl5yfc9qnn4lhhiwiwx3b71lrb431kgqxhwhcp9s")))) (native-inputs `(("perl" ,perl) ("qtdeclarative" ,qtdeclarative))) @@ -734,7 +741,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") (define-public qtmultimedia (package (inherit qtsvg) (name "qtmultimedia") - (version "5.7.1") + (version "5.8.0") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -743,7 +750,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") version ".tar.xz")) (sha256 (base32 - "1vvxmgmvjnz9w1h2ph1j2fy77ij141ycx5fric60lq02pxzifax5")) + "01sakngvsqr90qhrxyghfqdpddpxwbjyzzhm34k0hlpr6i409g58")) (modules '((guix build utils))) (snippet '(begin @@ -769,7 +776,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") (define-public qtwayland (package (inherit qtsvg) (name "qtwayland") - (version "5.7.1") + (version "5.8.0") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -778,7 +785,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") version ".tar.xz")) (sha256 (base32 - "1iq1c89y4ggq0dxjlf62jyhh8a9l3x7y914x84w5pby8h3hwagzj")))) + "06ilh55vaxbkyv7irw0n11gxgc34ypx2qhqawxzy7kllzg9zcl7z")))) (native-inputs `(("glib" ,glib) ("perl" ,perl) @@ -800,7 +807,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") (define-public qtserialport (package (inherit qtsvg) (name "qtserialport") - (version "5.7.1") + (version "5.8.0") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -809,7 +816,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") version ".tar.xz")) (sha256 (base32 - "09jsryc0z49cz9783kq48rkn42f10c6krzivp812ddwjsfdy3mbn")))) + "1b86al3zn1pxyk0n59vh8bqxrpz2m0j33ygclaqbxl1sszg7ycaj")))) (native-inputs `(("perl" ,perl))) (inputs `(("qtbase" ,qtbase) @@ -818,7 +825,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") (define-public qtserialbus (package (inherit qtsvg) (name "qtserialbus") - (version "5.7.1") + (version "5.8.0") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -827,7 +834,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") version ".tar.xz")) (sha256 (base32 - "0mxi43l2inpbar8rmg21qjg33bv3f1ycxjgvzjf12ncnybhdnzkj")))) + "02n1b1wrvfg6c7z15c5c5gv9r5gd4pp58jrd1a8d8fg3ybcksd2q")))) (inputs `(("qtbase" ,qtbase) ("qtserialport" ,qtserialport))))) @@ -835,7 +842,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") (define-public qtwebchannel (package (inherit qtsvg) (name "qtwebchannel") - (version "5.7.1") + (version "5.8.0") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -844,7 +851,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") version ".tar.xz")) (sha256 (base32 - "16rij92dxy4k5231l3dpmhy7cnz0cjkn50cpzaf014zrdz3kmav3")))) + "0jhbgp9rdp5lpwjrykxmg4lb60wk7gm3dldz5kp3b8ms2dab3xav")))) (native-inputs `(("perl" ,perl) ("qtdeclarative" ,qtdeclarative) @@ -854,7 +861,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") (define-public qtlocation (package (inherit qtsvg) (name "qtlocation") - (version "5.7.1") + (version "5.8.0") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -863,7 +870,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") version ".tar.xz")) (sha256 (base32 - "17zkzffzwbg6aqhsggs23cmwzq4y45m938842lsc423hfm7fdsgr")))) + "1fqssa8rhq83lnxjcdh4ijqck3lmqglpk8yax8x17w49v6gf78a8")))) (arguments (substitute-keyword-arguments (package-arguments qtsvg) ((#:tests? _ #f) #f))) ; TODO: Enable the tests @@ -877,7 +884,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") (define-public qttools (package (inherit qtsvg) (name "qttools") - (version "5.7.1") + (version "5.8.0") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -886,7 +893,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") version ".tar.xz")) (sha256 (base32 - "1b6zqa5690b8lqms7rrhb8rcq0xg5hp117v3m08qngbcd0i706b4")))) + "10wx4vydj91yag30457c7azx4ihrwky42l7zzwkbmdlksdv8xv4m")))) (arguments (substitute-keyword-arguments (package-arguments qtsvg) ((#:tests? _ #f) #f))) ; TODO: Enable the tests @@ -900,7 +907,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") (define-public qtscript (package (inherit qtsvg) (name "qtscript") - (version "5.7.1") + (version "5.8.0") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -909,7 +916,8 @@ developers using C++ or QML, a CSS & JavaScript like language.") version ".tar.xz")) (sha256 (base32 - "09m41n95448pszr7inlg03ycb66s1a9hzfylaka92382acf1myav")))) + "1lssbsjf2p2ag02fjq6k6vk7vywhj4jsl286r2fqi78q5lfvjfi9")) + (patches (search-patches "qtscript-disable-tests.patch")))) (native-inputs `(("perl" ,perl) ("qttools" ,qttools))) @@ -919,7 +927,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") (define-public qtquickcontrols (package (inherit qtsvg) (name "qtquickcontrols") - (version "5.7.1") + (version "5.8.0") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -928,7 +936,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") version ".tar.xz")) (sha256 (base32 - "17cyfyqzjbm9dhq9pjscz36y84y16rmxwk6h826gjfprddrimsvg")))) + "09mkswxw7wa2l8xz9fbblxr1pbi86hggis55j4k8ifnrrw60vrq4")))) (arguments (substitute-keyword-arguments (package-arguments qtsvg) ((#:tests? _ #f) #f))) ; TODO: Enable the tests @@ -939,7 +947,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") (define-public qtquickcontrols2 (package (inherit qtsvg) (name "qtquickcontrols2") - (version "5.7.1") + (version "5.8.0") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -948,7 +956,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") version ".tar.xz")) (sha256 (base32 - "1v77ydy4k15lksp3bi2kgha2h7m79g4n7c2qhbr09xnvpb8ars7j")))) + "06yy98x4vic2yrlpp83gf4kvl7kd93q62k178w0cy4sgqxp8d6dh")))) (arguments (substitute-keyword-arguments (package-arguments qtsvg) ((#:tests? _ #f) #f))) ; TODO: Enable the tests @@ -959,7 +967,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") (define-public qtgraphicaleffects (package (inherit qtsvg) (name "qtgraphicaleffects") - (version "5.7.1") + (version "5.8.0") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -968,7 +976,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") version ".tar.xz")) (sha256 (base32 - "1j2drnx7zp3w6cgvy7bn00fyk5v7vw1j1hidaqcg78lzb6zgls1c")))) + "06frknb7m8bgg55rs7jjm61iziisy2ykzrrc5dy3vj0aad89najz")))) (arguments (substitute-keyword-arguments (package-arguments qtsvg) ((#:tests? _ #f) #f))) ; TODO: Enable the tests @@ -977,6 +985,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") ("qtdeclarative" ,qtdeclarative))))) (define-public qtdeclarative-render2d + ;; As of Qt-5.8.0 this module has been merged into qtdeclarative (package (inherit qtsvg) (name "qtdeclarative-render2d") (version "5.7.1") @@ -995,12 +1004,13 @@ developers using C++ or QML, a CSS & JavaScript like language.") (native-inputs `()) (inputs `(("qtbase" ,qtbase) - ("qtdeclarative" ,qtdeclarative))))) + ("qtdeclarative" ,qtdeclarative))) + (properties `((superseded . ,qtdeclarative))))) (define-public qtgamepad (package (inherit qtsvg) (name "qtgamepad") - (version "5.7.1") + (version "5.8.0") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -1009,7 +1019,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") version ".tar.xz")) (sha256 (base32 - "10lijbsg9xx5ddbbjymdgl41nxz99yn1qgiww2kkggxwwdjj2axv")))) + "0dwcrq60h802z694h4108figlr3yvp8fpzhwjzbjm503v8yaxw5j")))) (native-inputs `(("perl" ,perl) ("pkg-config" ,pkg-config))) @@ -1024,7 +1034,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") (define-public qtscxml (package (inherit qtsvg) (name "qtscxml") - (version "5.7.1") + (version "5.8.0") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -1033,7 +1043,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") version ".tar.xz")) (sha256 (base32 - "135kknqdmib2cjryfmvfgv7a2qx9pyba3m7i7nkbc5d742r4mbcx")) + "1i4xl24q4i32mbhyndrwaz0xj79d9n84s320gmkf5rwnfcwrvfxn")) (modules '((guix build utils))) (snippet '(begin @@ -1048,7 +1058,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") (define-public qtpurchasing (package (inherit qtsvg) (name "qtpurchasing") - (version "5.7.1") + (version "5.8.0") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -1057,7 +1067,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") version ".tar.xz")) (sha256 (base32 - "0hkvrgafz1hx9q4yc3nskv3pd3fszghvvd5a7mj33ynf55wpb57n")))) + "0mdkw73yx1csz9mf3wl0w1x1b8cv9j5px4nvakrknkjzaa9qgzdk")))) (inputs `(("qtbase" ,qtbase) ("qtdeclarative" ,qtdeclarative))))) @@ -1065,7 +1075,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") (define-public qtcanvas3d (package (inherit qtsvg) (name "qtcanvas3d") - (version "5.7.1") + (version "5.8.0") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -1074,7 +1084,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") version ".tar.xz")) (sha256 (base32 - "1d5xpq3mhjg4ipxzap7s2vnlfcd02d3yq720npv10xxp2ww0i1x8")) + "18yaikbwk4d7sh09psi3kjn1mxjp4d2f3qchfzgq5x96yn8gfijl")) (modules '((guix build utils))) (snippet '(delete-file-recursively "examples/canvas3d/3rdparty")))) @@ -1099,7 +1109,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") (define-public qtcharts (package (inherit qtsvg) (name "qtcharts") - (version "5.7.1") + (version "5.8.0") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -1108,7 +1118,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") version ".tar.xz")) (sha256 (base32 - "1qrzcddwff2hxsbxrraff16j4abah2zkra2756s1mvydj9lyxzl5")))) + "11m5g1fxip6z2xk1z6g6h4rq7v282qbkxflan8hs87hadnzars03")))) (arguments (substitute-keyword-arguments (package-arguments qtsvg) ((#:tests? _ #f) #f))) ; TODO: Enable the tests @@ -1119,7 +1129,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") (define-public qtdatavis3d (package (inherit qtsvg) (name "qtdatavis3d") - (version "5.7.1") + (version "5.8.0") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -1128,7 +1138,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") version ".tar.xz")) (sha256 (base32 - "1y00p0wyj5cw9c2925y537vpmmg9q3kpf7qr1s7sv67dvvf8bzqv")))) + "1n2vdf6n7pr9xrjwbvbar899q74shx6cy19x32adxfn2iilygwbp")))) (arguments (substitute-keyword-arguments (package-arguments qtsvg) ((#:tests? _ #f) #f))) ; TODO: Enable the tests @@ -1139,7 +1149,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") (define-public python-sip (package (name "python-sip") - (version "4.18.1") + (version "4.19.2") (source (origin (method url-fetch) @@ -1148,7 +1158,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") "sip-" version "/sip-" version ".tar.gz")) (sha256 (base32 - "1452zy3g0qv4fpd9c0y4gq437kn0xf7bbfniibv5n43zpwnpmklv")))) + "0cq5r21fmjyw5v7a6l4sfbaj3zgm7k5b2cryj6bnjki54nnllas3")))) (build-system gnu-build-system) (native-inputs `(("python" ,python-wrapper))) @@ -1202,7 +1212,7 @@ module provides support functions to the automatically generated code.") (define-public python-pyqt (package (name "python-pyqt") - (version "5.7") + (version "5.8.2") (source (origin (method url-fetch) @@ -1212,7 +1222,7 @@ module provides support functions to the automatically generated code.") version ".tar.gz")) (sha256 (base32 - "01avscn1bir0h8zzfh1jvpljgwg6qkax5nk142xrm63rbyx969l9")) + "1s1nalcspam9dc7f63jkqn1i2sv9lrqn57p2zsc61g8bncahbmzb")) (patches (search-patches "pyqt-configure.patch")))) (build-system gnu-build-system) (native-inputs @@ -1292,17 +1302,17 @@ contain over 620 classes.") (define-public python-pyqt-4 (package (inherit python-pyqt) (name "python-pyqt") - (version "4.11.4") + (version "4.12") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/pyqt/PyQt4/" - "PyQt-" version "/PyQt-x11-gpl-" + "PyQt-" version "/PyQt4_gpl_x11-" version ".tar.gz")) (sha256 (base32 - "01zlviy5lq8g6db84wnvvpsrfnip9lbcpxagsyqa6as3jmsff7zw")))) + "1nw8r88a5g2d550yvklawlvns8gd5slw53yy688kxnsa65aln79w")))) (native-inputs `(("python-sip" ,python-sip) ("qt" ,qt-4))) @@ -1431,19 +1441,19 @@ different kinds of sliders, and much more.") (define-public qtwebkit (package (name "qtwebkit") - (version "5.7.1") + (version "5.8.0") (source (origin (method url-fetch) (uri (string-append "http://download.qt.io/community_releases/" (version-major+minor version) - "/" version "/qtwebkit-opensource-src-" version - ".tar.xz")) + "/" version "-final/qtwebkit-opensource-src-" + version ".tar.xz")) ;; Note: since Qt 5.6, Qt no longer officially supports qtwebkit: ;; <http://lists.qt-project.org/pipermail/development/2016-May/025923.html>. (sha256 (base32 - "00szgcra6pf2myfjrdbsr1gmrxycpbjqlzkplna5yr1rjg4gfv54")))) + "1v0vj6slyh19mjrrpbqdzb47fr0f4xk7bc8803xjzybb11h8dbkr")))) (build-system gnu-build-system) (native-inputs `(("perl" ,perl) diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm index 4977337517..1df7d60a36 100644 --- a/gnu/packages/ruby.scm +++ b/gnu/packages/ruby.scm @@ -446,13 +446,13 @@ expectations and mocks frameworks.") (define-public bundler (package (name "bundler") - (version "1.14.5") + (version "1.14.6") (source (origin (method url-fetch) (uri (rubygems-uri "bundler" version)) (sha256 (base32 - "0635s6naz9hn4iqbvkhnm1by4j4spvv13mb7nzwwimnpbqgx663i")))) + "0h3x2csvlz99v2ryj1w72vn6kixf7rl35lhdryvh7s49brnj0cgl")))) (build-system ruby-build-system) (arguments '(#:tests? #f)) ; avoid dependency cycles @@ -2910,7 +2910,7 @@ differences (added or removed nodes) between two XML/HTML documents.") (define-public ruby-rack (package (name "ruby-rack") - (version "2.0.1") + (version "2.0.3") (source (origin (method url-fetch) @@ -2922,7 +2922,7 @@ differences (added or removed nodes) between two XML/HTML documents.") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "00k62v8lpyjzghkn0h0awrnqj1jmlcs2wp57py27m43y65v89cp3")) + "12bnqrcg43x9hsswjqg31qqwk8cwj2fh0d2m179y20bjghhn54kx")) ;; Ignore test which fails inside the build environment but works ;; outside. (patches (search-patches "ruby-rack-ignore-failing-test.patch")))) @@ -4106,7 +4106,7 @@ call.") (define-public ruby-concurrent (package (name "ruby-concurrent") - (version "1.0.2") + (version "1.0.5") (source (origin (method url-fetch) @@ -4119,7 +4119,7 @@ call.") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "1x3g2admp14ykwfxidsicqbhlfsnxh9wyc806np4i15hws4if1d8")) + "0qhv0qzsby4iijgwa4s9r88zj8123pmyz1dwaqzdk57xgqll9pny")) ;; Exclude failing test reported at ;; https://github.com/ruby-concurrency/concurrent-ruby/issues/534 (patches (search-patches "ruby-concurrent-ignore-broken-test.patch" diff --git a/gnu/packages/security-token.scm b/gnu/packages/security-token.scm index 7bce8c5aa7..5873d85b55 100644 --- a/gnu/packages/security-token.scm +++ b/gnu/packages/security-token.scm @@ -35,15 +35,15 @@ (define-public ccid (package (name "ccid") - (version "1.4.26") + (version "1.4.27") (source (origin (method url-fetch) (uri (string-append - "https://alioth.debian.org/frs/download.php/file/4205/" + "https://alioth.debian.org/frs/download.php/file/4218/" "ccid-" version ".tar.bz2")) (sha256 (base32 - "0bxy835c133ajalpj4gx60nqkjvpf9y1n97n04pw105pi9qbyrrj")))) + "0dyikpmhsph36ndgd61bs4yx437v5y0bmm8ahjacp1k9c1ly4q56")))) (build-system gnu-build-system) (arguments `(#:configure-flags (list (string-append "--enable-usbdropdir=" %output @@ -93,15 +93,15 @@ the low-level development kit for the Yubico YubiKey authentication device.") (define-public pcsc-lite (package (name "pcsc-lite") - (version "1.8.20") + (version "1.8.21") (source (origin (method url-fetch) (uri (string-append - "https://alioth.debian.org/frs/download.php/file/4203/" + "https://alioth.debian.org/frs/download.php/file/4216/" "pcsc-lite-" version ".tar.bz2")) (sha256 (base32 - "1ckb0jf4n585a4j26va3jm2nrv3c1y38974514f8qy3c04a02zgc")))) + "1b8kwl81f6s3y7qh68ahr8sp8a0w6m464v9b3s4zxq2cgpmnaczy")))) (build-system gnu-build-system) (arguments `(#:configure-flags '("--enable-usbdropdir=/var/lib/pcsc/drivers"))) diff --git a/gnu/packages/shells.scm b/gnu/packages/shells.scm index 4e684e8c81..47d3a46148 100644 --- a/gnu/packages/shells.scm +++ b/gnu/packages/shells.scm @@ -32,6 +32,7 @@ #:use-module (gnu packages bison) #:use-module (gnu packages documentation) #:use-module (gnu packages groff) + #:use-module (gnu packages libbsd) #:use-module (gnu packages libedit) #:use-module (gnu packages ncurses) #:use-module (gnu packages pcre) @@ -457,3 +458,39 @@ components: a process notation for running programs and setting up pipelines and redirections, and a complete syscall library for low-level access to the operating system.") (license bsd-3)))) + +(define-public loksh + (package + (name "loksh") + (version "6.1") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/dimkr/loksh/archive/" + version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1wg7ds56yr8fgg1m149bi53bvrwccwiashmwknggza1sqgj9m2lq")))) + (build-system gnu-build-system) + (inputs + `(("libbsd" ,libbsd))) + (native-inputs + `(("pkg-config" ,pkg-config))) + (arguments + `(#:tests? #f ;No tests included + #:make-flags (list "CC=gcc" "HAVE_LIBBSD=1" + (string-append "DESTDIR=" + (assoc-ref %outputs "out")) + "PREFIX=") + #:phases + (modify-phases %standard-phases + (delete 'configure)))) ;No configure script + (home-page "https://github.com/dimkr/loksh") + (synopsis "Korn Shell from OpenBSD") + (description + "loksh is a Linux port of OpenBSD's @command{ksh}. It is a small, +interactive POSIX shell targeted at resource-constrained systems.") + ;; The file 'LEGAL' says it is the public domain, and the 2 + ;; exceptions which are listed are not included in this port. + (license public-domain))) diff --git a/gnu/packages/ssh.scm b/gnu/packages/ssh.scm index 1fd395049a..c96ed0a72b 100644 --- a/gnu/packages/ssh.scm +++ b/gnu/packages/ssh.scm @@ -68,6 +68,7 @@ (base32 "03bcp9ksqp0s1pmwfmzhcknvkxay5k0mjzzxp3rjlifbng1vxq9r")))) (build-system cmake-build-system) + (outputs '("out" "debug")) (arguments '(#:configure-flags '("-DWITH_GCRYPT=ON") @@ -226,6 +227,8 @@ Additionally, various channel-specific options can be negotiated.") (sha256 (base32 "0r261i8kc3avbmbwgyzak2vnqwssjlgz37g2y2fwm80w9bmn2m7j")) + (patches (search-patches "guile-ssh-rexec-bug.patch" + "guile-ssh-double-free.patch")) (modules '((guix build utils))) (snippet ;; 'configure.ac' mistakenly tries to link files from examples/ @@ -236,6 +239,7 @@ Additionally, various channel-specific options can be negotiated.") "], [chmod +x examples/" file "])\n")))))) (build-system gnu-build-system) + (outputs '("out" "debug")) (arguments '(#:phases (modify-phases %standard-phases (add-after 'unpack 'autoreconf @@ -378,7 +382,7 @@ especially over Wi-Fi, cellular, and long-distance links.") (define-public dropbear (package (name "dropbear") - (version "2016.74") + (version "2017.75") (source (origin (method url-fetch) (uri (string-append @@ -386,7 +390,7 @@ especially over Wi-Fi, cellular, and long-distance links.") name "-" version ".tar.bz2")) (sha256 (base32 - "14c8f4gzixf0j9fkx68jgl85q7b05852kk0vf09gi6h0xmafl817")))) + "1309cm2aw62n9m3h38prvgsqr8bj85hfasgnvwkd42cp3k5ivg3c")))) (build-system gnu-build-system) (arguments `(#:tests? #f)) ; There is no "make check" or anything similar (inputs `(("zlib" ,zlib))) diff --git a/gnu/packages/sssd.scm b/gnu/packages/sssd.scm new file mode 100644 index 0000000000..2afef03055 --- /dev/null +++ b/gnu/packages/sssd.scm @@ -0,0 +1,173 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2016, 2017 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 (gnu packages sssd) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (guix packages) + #:use-module (guix download) + #:use-module (guix utils) + #:use-module (guix build-system gnu) + #:use-module (gnu packages) + #:use-module (gnu packages) + #:use-module (gnu packages adns) + #:use-module (gnu packages augeas) + #:use-module (gnu packages check) + #:use-module (gnu packages curl) + #:use-module (gnu packages cyrus-sasl) + #:use-module (gnu packages databases) + #:use-module (gnu packages dns) + #:use-module (gnu packages docbook) + #:use-module (gnu packages documentation) + #:use-module (gnu packages glib) + #:use-module (gnu packages gnuzilla) + #:use-module (gnu packages libunistring) + #:use-module (gnu packages linux) + #:use-module (gnu packages kerberos) + #:use-module (gnu packages openldap) + #:use-module (gnu packages tls) + #:use-module (gnu packages pcre) + #:use-module (gnu packages popt) + #:use-module (gnu packages pkg-config) + #:use-module (gnu packages samba) + #:use-module (gnu packages selinux) + #:use-module (gnu packages web) + #:use-module (gnu packages xml)) + +(define-public ding-libs + (package + (name "ding-libs") + (version "0.6.0") + (source (origin + (method url-fetch) + (uri (string-append "https://releases.pagure.org/SSSD/ding-libs/" + "ding-libs-" version ".tar.gz")) + (sha256 + (base32 + "1bczkvq7cblp75kqn6r2d7j5x7brfw6wxirzc6d2rkyb80gj2jkn")))) + (build-system gnu-build-system) + (home-page "https://pagure.io/SSSD/ding-libs/") + (synopsis "Libraries for SSSD") + (description + "DING-LIBS (DING Is Not Glib) are a set of small, useful libraries that +the @dfn{System Security Services Daemon} (SSSD) uses and makes available to +other projects. They include: libdhash, an implementation of a dynamic hash +table which will dynamically resize to achieve optimal storage and access time +properties; ini_config, a library for parsing and managing @code{INI} files; +path_utils, a library to manage UNIX paths and subsets of paths; collection, a +generic, hierarchical grouping mechanism for complex data sets; ref_array, a +dynamically-growing, reference-counted array; libbasicobjects, a set of +fundamental object types for C.") + (license license:lgpl3+))) + +;; Note: This package installs modules for ldb and nss. For the former we +;; need to set LDB_MODULES_PATH. For the latter LD_PRELOAD or LD_LIBRARY_PATH +;; is needed. +(define-public sssd + (package + (name "sssd") + (version "1.15.2") + (source (origin + (method url-fetch) + (uri (string-append "http://releases.pagure.org/SSSD/sssd/" + "sssd-" version ".tar.gz")) + (sha256 + (base32 + "0r6j28f7vjb1aw65gkw4nz2l3jy605h7wsr1k815hynp2jrzrmac")))) + (build-system gnu-build-system) + (arguments + `(#:make-flags + (list (string-append "DOCBOOK_XSLT=" + (assoc-ref %build-inputs "docbook-xsl") + "/xml/xsl/docbook-xsl-" + ,(package-version docbook-xsl) + "/manpages/docbook.xsl") + ;; Remove "--postvalid" option, because that requires access to + ;; online DTDs. + "XMLLINT_FLAGS = --catalogs --nonet --noent --xinclude --noout") + #:configure-flags + (list "--disable-cifs-idmap-plugin" + "--without-nfsv4-idmapd-plugin" + "--without-python2-bindings" + "--without-python3-bindings" + (string-append "--with-plugin-path=" + (assoc-ref %outputs "out") + "/lib/sssd") + (string-append "--with-krb5-plugin-path=" + (assoc-ref %outputs "out") + "/lib/krb5/plugins/libkrb5") + (string-append "--with-cifs-plugin-path=" + (assoc-ref %outputs "out") + "/lib/cifs-utils") + (string-append "--with-init-dir=" + (assoc-ref %outputs "out") + "/etc/init.d") + (string-append "--with-ldb-lib-dir=" + (assoc-ref %outputs "out") + "/lib/ldb/modules/ldb") + (string-append "--with-xml-catalog-path=" + (assoc-ref %build-inputs "docbook-xml") + "/xml/dtd/docbook/catalog.xml")) + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'disable-failing-test + (lambda _ + (substitute* "src/tests/responder_socket_access-tests.c" + (("tcase_add_test\\(tc_utils, resp_str_to_array_test\\);") "")) + #t))))) + (inputs + `(("augeas" ,augeas) + ("bind" ,isc-bind "utils") + ("c-ares" ,c-ares) + ("curl" ,curl) + ("cyrus-sasl" ,cyrus-sasl) + ("dbus" ,dbus) + ("ding-libs" ,ding-libs) + ("glib" ,glib) + ("gnutls" ,gnutls) + ("http-parser" ,http-parser) + ("jansson" ,jansson) + ("ldb" ,ldb) + ("libselinux" ,libselinux) + ("libsemanage" ,libsemanage) + ("libunistring" ,libunistring) + ("linux-pam" ,linux-pam) + ("mit-krb5" ,mit-krb5) + ("nss" ,nss) + ("openldap" ,openldap) + ("openssl" ,openssl) + ("pcre" ,pcre) + ("popt" ,popt) + ("samba" ,samba) + ("talloc" ,talloc) + ("tdb" ,tdb) + ("tevent" ,tevent))) + (native-inputs + `(("check" ,check) + ("docbook-xsl" ,docbook-xsl) + ("docbook-xml" ,docbook-xml) + ("libxslt" ,libxslt) + ("pkg-config" ,pkg-config))) + (home-page "https://pagure.io/SSSD/sssd/") + (synopsis "System security services daemon") + (description "SSSD is a system daemon. Its primary function is to provide +access to identity and authentication remote resource through a common +framework that can provide caching and offline support to the system. It +provides PAM and NSS modules, and in the future will D-BUS based interfaces +for extended user information. It also provides a better database to store +local users as well as extended user data.") + (license license:gpl3+))) diff --git a/gnu/packages/textutils.scm b/gnu/packages/textutils.scm index dbd71c2e8f..7bc2fc47fa 100644 --- a/gnu/packages/textutils.scm +++ b/gnu/packages/textutils.scm @@ -1,6 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com> -;;; Copyright © 2015, 2016 Ricardo Wurmus <rekado@elephly.net> +;;; Copyright © 2015, 2016, 2017 Ricardo Wurmus <rekado@elephly.net> ;;; Copyright © 2015, 2016 Ben Woodcroft <donttrustben@gmail.com> ;;; Copyright © 2015 Roel Janssen <roel@gnu.org> ;;; Copyright © 2016 Jelle Licht <jlicht@fsfe.org> @@ -10,6 +10,7 @@ ;;; Copyright © 2016 Marius Bakke <mbakke@fastmail.com> ;;; Copyright © 2017 Eric Bavier <bavier@member.fsf.org> ;;; Copyright © 2017 Rene Saavedra <rennes@openmailbox.org> +;;; Copyright © 2017 Hartmut Goebel <h.goebel@crazy-compilers.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -31,11 +32,13 @@ #:use-module (guix packages) #:use-module (guix download) #:use-module (guix git-download) + #:use-module (guix build-system ant) #:use-module (guix build-system gnu) #:use-module (guix build-system cmake) #:use-module (guix build-system trivial) #:use-module (gnu packages) #:use-module (gnu packages autotools) + #:use-module (gnu packages java) #:use-module (gnu packages ncurses) #:use-module (gnu packages perl) #:use-module (gnu packages pkg-config) @@ -368,6 +371,45 @@ to everybody, because they believe that everybody runs Windows and therefore runs Word\".") (license license:gpl2+))) +(define-public catdoc + (package + (name "catdoc") + (version "0.95") + (source (origin + (method url-fetch) + (uri (string-append "http://ftp.wagner.pp.ru/pub/catdoc/" + "catdoc-" version ".tar.gz")) + (sha256 + (base32 + "15h7v3bmwfk4z8r78xs5ih6vd0pskn0rj90xghvbzdjj0cc88jji")))) + (build-system gnu-build-system) + ;; TODO: Also build `wordview` which requires `tk` – make a separate + ;; package for this. + (arguments + '(#:tests? #f ; There are no tests + #:configure-flags '("--disable-wordview") + #:phases + (modify-phases %standard-phases + (add-before 'install 'fix-install + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (mkdir-p (string-append out "/share/man/man1")))))))) + (home-page "http://www.wagner.pp.ru/~vitus/software/catdoc/") + (synopsis "MS-Word to TeX or plain text converter") + (description "@command{catdoc} extracts text from MS-Word files, trying to +preserve as many special printable characters as possible. It supports +everything up to Word-97. Also supported are MS Write documents and RTF files. + +@command{catdoc} does not preserve complex word formatting, but it can +translate some non-ASCII characters into TeX escape codes. It's goal is to +extract plain text and allow you to read it and, probably, reformat with TeX, +according to TeXnical rules. + +This package also provides @command{xls2csv}, which extracts data from Excel +spreadsheets and outputs it in comma-separated-value format, and +@command{catppt}, which extracts data from PowerPoint presentations.") + (license license:gpl2+))) + (define-public utfcpp (package (name "utfcpp") @@ -518,3 +560,35 @@ categories.") "C library for creating and parsing configuration files.") (license (list license:lgpl2.1 ; Main distribution. license:asl1.1)))) ; src/readdir.{c,h} + +(define-public java-rsyntaxtextarea + (package + (name "java-rsyntaxtextarea") + (version "2.6.1") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/bobbylight/" + "RSyntaxTextArea/archive/" + version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "0c5mqg2klj5rvf8fhycrli8rf6s37l9p7a8knw9gpp65r1c120q2")))) + (build-system ant-build-system) + (arguments + `(;; FIXME: some tests fail because locale resources cannot be found. + ;; Even when I add them to the class path, + ;; RSyntaxTextAreaEditorKitDumbCompleteWordActionTest fails. + #:tests? #f + #:jar-name "rsyntaxtextarea.jar")) + (native-inputs + `(("java-junit" ,java-junit) + ("java-hamcrest-core" ,java-hamcrest-core))) + (home-page "https://bobbylight.github.io/RSyntaxTextArea/") + (synopsis "Syntax highlighting text component for Java Swing") + (description "RSyntaxTextArea is a syntax highlighting, code folding text +component for Java Swing. It extends @code{JTextComponent} so it integrates +completely with the standard @code{javax.swing.text} package. It is fast and +efficient, and can be used in any application that needs to edit or view +source code.") + (license license:bsd-3))) diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm index 1516fb8527..ebf9a47302 100644 --- a/gnu/packages/tls.scm +++ b/gnu/packages/tls.scm @@ -474,15 +474,14 @@ security, and applying best practice development processes.") (package (name "python-acme") ;; Remember to update the hash of certbot when updating python-acme. - (version "0.14.0") + (version "0.14.1") (source (origin (method url-fetch) (uri (pypi-uri "acme" version)) (sha256 (base32 - "0hrmh28rrc0fsiw6nqfwbkwb1s4nkl54x50c0g0xlnp86752nzff")))) + "0asmkfkzbswnkrvbj5m01xgy4f6g1fjbj2nir1hhrn3ipcdrsv8f")))) (build-system python-build-system) - (arguments `(#:phases (modify-phases %standard-phases @@ -540,7 +539,7 @@ security, and applying best practice development processes.") (uri (pypi-uri name version)) (sha256 (base32 - "0hbp3njss01a0d3brvcfzja0w0j9plwrv6l70jsfvnhy3rrd7bcq")))) + "0rdby57hw35qdrbl7kigscphnz4kqb608bqzrcb73nb99092i6si")))) (build-system python-build-system) (arguments `(#:python ,python-2 diff --git a/gnu/packages/tor.scm b/gnu/packages/tor.scm index 83e49a1536..b31b58a26f 100644 --- a/gnu/packages/tor.scm +++ b/gnu/packages/tor.scm @@ -1,7 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org> -;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il> +;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2016, 2017 ng0 <contact.ng0@cryptolab.net> ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2017 Eric Bavier <bavier@member.fsf.org> @@ -43,14 +43,14 @@ (define-public tor (package (name "tor") - (version "0.3.0.6") + (version "0.3.0.7") (source (origin (method url-fetch) (uri (string-append "https://dist.torproject.org/tor-" version ".tar.gz")) (sha256 (base32 - "057vq8wagppmrlg85dgbsrk1v67yqpbi9n87s8gn0mdm7kli5rd3")))) + "00kxa83bn0axh7479fynp6r8znq5wy26kvb8ghixgjpkir2c8h4n")))) (build-system gnu-build-system) (arguments `(#:configure-flags (list "--enable-expensive-hardening" diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm index dde4041449..b7c26a0424 100644 --- a/gnu/packages/video.scm +++ b/gnu/packages/video.scm @@ -273,7 +273,7 @@ H.264 (MPEG-4 AVC) video streams.") (define-public x265 (package (name "x265") - (version "2.3") + (version "2.4") (source (origin (method url-fetch) @@ -281,7 +281,7 @@ H.264 (MPEG-4 AVC) video streams.") "x265_" version ".tar.gz")) (sha256 (base32 - "07z4ydxg0lk6j43h0wlh2xddb91cy4y4mny2ln71d4278b1hllj7")) + "0afp0xlk0fb4q6j4sh3hyvjnjccdp61sn21zg3fyqvwgswcafalw")) (modules '((guix build utils))) (snippet '(delete-file-recursively "source/compat/getopt")))) @@ -458,14 +458,14 @@ standards (MPEG-2, MPEG-4 ASP/H.263, MPEG-4 AVC/H.264, and VC-1/VMW3).") (define-public ffmpeg (package (name "ffmpeg") - (version "3.3") + (version "3.3.1") (source (origin (method url-fetch) (uri (string-append "https://ffmpeg.org/releases/ffmpeg-" version ".tar.xz")) (sha256 (base32 - "17anx7rnbi63if1ndr61836lf76dpn47n0y424hc48bj05y7z7jr")))) + "0bwgm6z6k3khb91qh9xv15inykkfchpkm0lcdckkxhkacpyaf0mp")))) (build-system gnu-build-system) (inputs `(("fontconfig" ,fontconfig) @@ -646,7 +646,7 @@ audio/video codec library.") (define-public vlc (package (name "vlc") - (version "2.2.4") + (version "2.2.5.1") (source (origin (method url-fetch) (uri (string-append @@ -654,14 +654,7 @@ audio/video codec library.") version "/vlc-" version ".tar.xz")) (sha256 (base32 - "1gjkrwlg8ab3skzl67cxb9qzg4187ifckd1z9kpy11q058fyjchn")) - (modules '((guix build utils))) - (snippet - ;; There are two occurrences where __DATE__ and __TIME__ are - ;; used to capture the build time and show it to the user. - '(substitute* (find-files "." "help\\.c(pp)?$") - (("__DATE__") "\"2016\"") - (("__TIME__") "\"00:00\""))))) + "1k51vm6piqlrnld7sxyg0s4kdkd3lan97lmy3v5wdh3qyll8m2xj")))) (build-system gnu-build-system) (native-inputs `(("git" ,git) ; needed for a test @@ -1599,14 +1592,14 @@ tools, XML authoring components, and an extensible plug-in based API.") (define-public v4l-utils (package (name "v4l-utils") - (version "1.12.3") + (version "1.12.5") (source (origin (method url-fetch) (uri (string-append "https://linuxtv.org/downloads/v4l-utils" "/v4l-utils-" version ".tar.bz2")) (sha256 (base32 - "0vpl3jl0x441y7b5cn7zhdsyi954hp9h2p30jhnr1zkx1rpxsiss")))) + "03g2b4rivrilimcp57mwrlsa3qvrxmk4sza08mygwmqbvcnic606")))) (build-system gnu-build-system) (arguments '(#:configure-flags @@ -1816,14 +1809,14 @@ specifications.") (define-public libaacs (package (name "libaacs") - (version "0.8.1") + (version "0.9.0") (source (origin (method url-fetch) (uri (string-append "ftp://ftp.videolan.org/pub/videolan/libaacs/" version "/" name "-" version ".tar.bz2")) (sha256 - (base32 "1s5v075hnbs57995r6lljm79wgrip3gnyf55a0y7bja75jh49hwm")))) + (base32 "1kms92i0c7i1yl659kqjf19lm8172pnpik5lsxp19xphr74vvq27")))) (inputs `(("libgcrypt" ,libgcrypt))) (native-inputs diff --git a/gnu/packages/vim.scm b/gnu/packages/vim.scm index 697c7dedc7..27c0b0da9c 100644 --- a/gnu/packages/vim.scm +++ b/gnu/packages/vim.scm @@ -60,7 +60,7 @@ (define-public vim (package (name "vim") - (version "8.0.0566") + (version "8.0.0600") (source (origin (method url-fetch) (uri (string-append "https://github.com/vim/vim/archive/v" @@ -68,7 +68,7 @@ (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "0qq9pj8391sikzaahlqi289l5wdkbvsdhz8qb6np268yqizpg4p2")))) + "1ifaj0lfzqn06snkcd83l58m9r6lg7lk3wspx71k5ycvypyfi67s")))) (build-system gnu-build-system) (arguments `(#:test-target "test" @@ -138,6 +138,10 @@ configuration files.") ;; https://github.com/vim/vim/issues/1460 (substitute* "src/testdir/test_cmdline.vim" (("call assert_equal\\(.+getcmd.+\\(\\)\\)") "")) + ;; FIXME: This test broke after GCC-5 core-updates merge. + ;; "Test_system_exmode line 7: Expected '0' but got '/'" + (substitute* "src/testdir/test_system.vim" + (("call assert_equal\\('0', a\\[0\\]\\)") "")) #t)) (add-before 'check 'start-xserver (lambda* (#:key inputs #:allow-other-keys) diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm index efaa1b5742..bcc20bfdde 100644 --- a/gnu/packages/web.scm +++ b/gnu/packages/web.scm @@ -4552,3 +4552,35 @@ into your tests. It automatically starts up a HTTP server in a separate thread (define-public python2-pytest-httpbin (package-with-python2 python-pytest-httpbin)) + +(define-public http-parser + (package + (name "http-parser") + (version "2.7.1") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/nodejs/http-parser/" + "archive/v" version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1cw6nf8xy4jhib1w0jd2y0gpqjbdasg8b7pkl2k2vpp54k9rlh3h")))) + (build-system gnu-build-system) + (arguments + `(#:test-target "test" + #:make-flags + (list (string-append "PREFIX=" + (assoc-ref %outputs "out")) + "CC=gcc" "library") + #:phases + (modify-phases %standard-phases + (delete 'configure)))) + (home-page "https://github.com/nodejs/http-parser") + (synopsis "HTTP request/response parser for C") + (description "This is a parser for HTTP messages written in C. It parses +both requests and responses. The parser is designed to be used in +high-performance HTTP applications. It does not make any syscalls nor +allocations, it does not buffer data, it can be interrupted at anytime. +Depending on your architecture, it only requires about 40 bytes of data per +message stream (in a web server that is per connection).") + (license l:expat))) diff --git a/gnu/packages/xml.scm b/gnu/packages/xml.scm index 79210d44d0..9635413b8f 100644 --- a/gnu/packages/xml.scm +++ b/gnu/packages/xml.scm @@ -44,6 +44,7 @@ #:use-module ((guix licenses) #:prefix license:) #:use-module (guix packages) #:use-module (guix download) + #:use-module (guix build-system ant) #:use-module (guix build-system cmake) #:use-module (guix build-system gnu) #:use-module (guix build-system perl) @@ -1175,3 +1176,33 @@ to read and write XML data. A shared library is provided for parsing, generating, manipulating, and validating XML documents using the DOM, SAX, and SAX2 APIs.") (license license:asl2.0))) + +(define-public java-simple-xml + (package + (name "java-simple-xml") + (version "2.7.1") + (source (origin + (method url-fetch) + (uri (string-append "mirror://sourceforge/simple/simple-xml-" + version ".zip")) + (sha256 + (base32 + "0w19k1awslmihpwsxwjbg89hv0vjhk4k3i0vrfchy3mqknd988y5")))) + (build-system ant-build-system) + (arguments + `(#:build-target "build" + #:test-target "test" + #:phases + (modify-phases %standard-phases + (replace 'install (install-jars "jar"))))) + (native-inputs + `(("unzip" ,unzip))) + (home-page "http://simple.sourceforge.net/") + (synopsis "XML serialization framework for Java") + (description "Simple is a high performance XML serialization and +configuration framework for Java. Its goal is to provide an XML framework +that enables rapid development of XML configuration and communication systems. +This framework aids the development of XML systems with minimal effort and +reduced errors. It offers full object serialization and deserialization, +maintaining each reference encountered.") + (license license:asl2.0))) diff --git a/gnu/services/base.scm b/gnu/services/base.scm index c244174fd3..7cd9a34ca2 100644 --- a/gnu/services/base.scm +++ b/gnu/services/base.scm @@ -1332,7 +1332,8 @@ failed to register hydra.gnu.org public key: ~a~%" status)))))))) (define %default-authorized-guix-keys ;; List of authorized substitute keys. - (list (file-append guix "/share/guix/hydra.gnu.org.pub"))) + (list (file-append guix "/share/guix/hydra.gnu.org.pub") + (file-append guix "/share/guix/bayfront.guixsd.org.pub"))) (define-record-type* <guix-configuration> guix-configuration make-guix-configuration diff --git a/gnu/services/pm.scm b/gnu/services/pm.scm index 3cefe1874a..d40cb993e2 100644 --- a/gnu/services/pm.scm +++ b/gnu/services/pm.scm @@ -20,6 +20,7 @@ #:use-module (guix gexp) #:use-module (guix packages) #:use-module (guix records) + #:use-module (gnu packages admin) #:use-module (gnu packages linux) #:use-module (gnu services) #:use-module (gnu services base) @@ -27,7 +28,10 @@ #:use-module (gnu services shepherd) #:use-module (gnu system shadow) #:export (tlp-service-type - tlp-configuration)) + tlp-configuration + + thermald-configuration + thermald-service-type)) (define (uglify-field-name field-name) (let ((str (symbol->string field-name))) @@ -403,3 +407,38 @@ shutdown on system startup.")) (generate-documentation `((tlp-configuration ,tlp-configuration-fields)) 'tlp-configuration)) + + + +;;; +;;; thermald +;;; +;;; This service implements cpu scaling. Helps prevent overheating! + +(define-record-type* <thermald-configuration> + thermald-configuration make-thermald-configuration + thermald-configuration? + (ignore-cpuid-check? thermald-ignore-cpuid-check? ;boolean + (default #f)) + (thermald thermald-thermald ;package + (default thermald))) + +(define (thermald-shepherd-service config) + (list + (shepherd-service + (provision '(thermald)) + (documentation "Run thermald cpu frequency scaling.") + (start #~(make-forkexec-constructor + '(#$(file-append (thermald-thermald config) "/sbin/thermald") + "--no-daemon" + #$@(if (thermald-ignore-cpuid-check? config) + '("--ignore-cpuid-check") + '())))) + (stop #~(make-kill-destructor))))) + +(define thermald-service-type + (service-type + (name 'thermald) + (extensions (list (service-extension shepherd-root-service-type + thermald-shepherd-service))) + (default-value (thermald-configuration)))) diff --git a/gnu/services/ssh.scm b/gnu/services/ssh.scm index 9917c311c7..2a6c8d45c2 100644 --- a/gnu/services/ssh.scm +++ b/gnu/services/ssh.scm @@ -385,7 +385,7 @@ The other options should be self-descriptive." (list (shepherd-service (documentation "OpenSSH server.") - (requirement '(networking syslogd)) + (requirement '(syslogd)) (provision '(ssh-daemon)) (start #~(make-forkexec-constructor #$openssh-command #:pid-file #$pid-file)) diff --git a/gnu/system.scm b/gnu/system.scm index f9a0da9a75..0076f2fcb1 100644 --- a/gnu/system.scm +++ b/gnu/system.scm @@ -48,6 +48,7 @@ #:use-module (gnu services) #:use-module (gnu services shepherd) #:use-module (gnu services base) + #:use-module (gnu bootloader) #:use-module (gnu system shadow) #:use-module (gnu system nss) #:use-module (gnu system locale) @@ -103,6 +104,7 @@ boot-parameters? boot-parameters-label boot-parameters-root-device + boot-parameters-boot-name boot-parameters-store-device boot-parameters-store-mount-point boot-parameters-kernel @@ -139,7 +141,7 @@ booted from ROOT-DEVICE" (default linux-libre)) (kernel-arguments operating-system-user-kernel-arguments (default '())) ; list of gexps/strings - (bootloader operating-system-bootloader) ; <grub-configuration> + (bootloader operating-system-bootloader) ; <bootloader-configuration> (initrd operating-system-initrd ; (list fs) -> M derivation (default base-initrd)) @@ -213,6 +215,7 @@ directly by the user." ;; exactly to the device field of the <file-system> object representing the ;; OS's root file system, so it might be a device path like "/dev/sda3". (root-device boot-parameters-root-device) + (boot-name boot-parameters-boot-name) (store-device boot-parameters-store-device) (store-mount-point boot-parameters-store-mount-point) (kernel boot-parameters-kernel) @@ -231,6 +234,11 @@ directly by the user." (label label) (root-device root) + (boot-name + (match (assq 'boot-name rest) + ((_ args) args) + (#f 'grub))) ; for compatibility reasons. + ;; In the past, we would store the directory name of the kernel instead ;; of the absolute file name of its image. Detect that and correct it. (kernel (if (string=? linux (direct-store-path linux)) @@ -494,7 +502,7 @@ explicitly appear in OS." ;; The packages below are also in %FINAL-INPUTS, so take them from ;; there to avoid duplication. (map canonical-package - (list guile-2.0 bash coreutils-8.27 findutils grep sed + (list guile-2.2 bash coreutils-8.27 findutils grep sed diffutils patch gawk tar gzip bzip2 xz lzip)))) (define %default-issue @@ -847,12 +855,11 @@ populate the \"old entries\" menu." (root-device -> (if (eq? 'uuid (file-system-title root-fs)) (uuid->string (file-system-device root-fs)) (file-system-device root-fs))) - (entry (operating-system-boot-parameters os system root-device))) - ((module-ref (resolve-interface '(gnu system grub)) - 'grub-configuration-file) - (operating-system-bootloader os) - (list entry) - #:old-entries old-entries))) + (entry (operating-system-boot-parameters os system root-device)) + (bootloader-conf -> (operating-system-bootloader os))) + ((bootloader-configuration-file-generator + (bootloader-configuration-bootloader bootloader-conf)) + bootloader-conf (list entry) #:old-entries old-entries))) (define (fs->boot-device fs) "Given FS, a <file-system> object, return a value suitable for use as the @@ -869,6 +876,9 @@ kernel arguments for that derivation to <boot-parameters>." (mlet* %store-monad ((initrd (operating-system-initrd-file os)) (store -> (operating-system-store-file-system os)) + (bootloader -> (bootloader-configuration-bootloader + (operating-system-bootloader os))) + (boot-name -> (bootloader-name bootloader)) (label -> (kernel->boot-label (operating-system-kernel os)))) (return (boot-parameters (label label) @@ -879,6 +889,7 @@ kernel arguments for that derivation to <boot-parameters>." (operating-system-kernel-arguments os system.drv root-device) (operating-system-user-kernel-arguments os))) (initrd initrd) + (boot-name boot-name) (store-device (fs->boot-device store)) (store-mount-point (file-system-mount-point store)))))) @@ -904,6 +915,7 @@ being stored into the \"parameters\" file)." (kernel-arguments #$(boot-parameters-kernel-arguments params)) (initrd #$(boot-parameters-initrd params)) + (boot-name #$(boot-parameters-boot-name params)) (store (device #$(boot-parameters-store-device params)) (mount-point #$(boot-parameters-store-mount-point params)))) diff --git a/gnu/system/examples/lightweight-desktop.tmpl b/gnu/system/examples/lightweight-desktop.tmpl index 389ec8574b..6fb6283d29 100644 --- a/gnu/system/examples/lightweight-desktop.tmpl +++ b/gnu/system/examples/lightweight-desktop.tmpl @@ -4,23 +4,31 @@ (use-modules (gnu) (gnu system nss)) (use-service-modules desktop) -(use-package-modules wm ratpoison certs suckless) +(use-package-modules bootloaders certs ratpoison suckless wm) (operating-system (host-name "antelope") (timezone "Europe/Paris") (locale "en_US.utf8") - ;; Assuming /dev/sdX is the target hard disk, and "my-root" - ;; is the label of the target root file system. - (bootloader (grub-configuration (device "/dev/sdX"))) - - (file-systems (cons (file-system - (device "my-root") - (title 'label) - (mount-point "/") - (type "ext4")) - %base-file-systems)) + ;; Use the UEFI variant of GRUB with the EFI System + ;; Partition on /dev/sda1. + (bootloader (grub-configuration (grub grub-efi) + (device "/dev/sda1"))) + + ;; Assume the target root file system is labelled "my-root". + (file-systems (cons* (file-system + (device "my-root") + (title 'label) + (mount-point "/") + (type "ext4")) + (file-system + ;; Specify partition here since FAT + ;; labels are currently unsupported. + (device "/dev/sda1") + (mount-point "/boot/efi") + (type "vfat")) + %base-file-systems)) (users (cons (user-account (name "alice") diff --git a/gnu/system/examples/vm-image.tmpl b/gnu/system/examples/vm-image.tmpl new file mode 100644 index 0000000000..57ac71c535 --- /dev/null +++ b/gnu/system/examples/vm-image.tmpl @@ -0,0 +1,53 @@ +;;; This is an operating system configuration template for a "bare-bones" setup, +;;; suitable for booting in a virtualized environment, including virtual private +;;; servers (VPS). + +(use-modules (gnu)) +(use-package-modules bootloaders disk nvi) + +(define vm-image-motd (plain-file "motd" " +This is the GNU system. Welcome! + +This instance of GuixSD is a bare-bones template for virtualized environments. + +You will probably want to do these things first if you booted in a virtual +private server (VPS): + +* Set a password for 'root'. +* Set up networking. +* Expand the root partition to fill the space available by 0) deleting and +recreating the partition with fdisk, 1) reloading the partition table with +partprobe, and then 2) resizing the filesystem with resize2fs.\n")) + +(operating-system + (host-name "gnu") + (timezone "Etc/UTC") + (locale "en_US.utf8") + + ;; Assuming /dev/sdX is the target hard disk, and "my-root" is + ;; the label of the target root file system. + (bootloader (grub-configuration (device "/dev/sda") + (terminal-outputs '(console)))) + (file-systems (cons (file-system + (device "my-root") + (title 'label) + (mount-point "/") + (type "ext4")) + %base-file-systems)) + + ;; This is where user accounts are specified. The "root" + ;; account is implicit, and is initially created with the + ;; empty password. + (users %base-user-accounts) + + ;; Globally-installed packages. + (packages (cons* nvi fdisk + grub ; mostly so xrefs to its manual work + parted ; partprobe + %base-packages)) + + (services (modify-services %base-services + (login-service-type config => + (login-configuration + (inherit config) + (motd vm-image-motd)))))) diff --git a/gnu/system/install.scm b/gnu/system/install.scm index 191ccf1680..9a6febfeba 100644 --- a/gnu/system/install.scm +++ b/gnu/system/install.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org> ;;; Copyright © 2016 Andreas Enge <andreas@enge.fr> +;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -25,6 +26,7 @@ #:use-module (guix monads) #:use-module ((guix store) #:select (%store-prefix)) #:use-module (gnu services shepherd) + #:use-module (gnu services ssh) #:use-module (gnu packages admin) #:use-module (gnu packages bash) #:use-module (gnu packages bootloaders) @@ -262,6 +264,16 @@ You have been warned. Thanks for being so brave. ;; To facilitate copy/paste. (gpm-service) + ;; Add an SSH server to facilitate remote installs. + (service openssh-service-type + (openssh-configuration + (port-number 22) + (permit-root-login #t) + ;; The root account is passwordless, so make sure + ;; a password is set before allowing logins. + (allow-empty-passwords? #f) + (password-authentication? #t))) + ;; Since this is running on a USB stick with a unionfs as the root ;; file system, use an appropriate cache configuration. (nscd-service (nscd-configuration diff --git a/gnu/system/linux-initrd.scm b/gnu/system/linux-initrd.scm index dfe198e43e..3a5e76034a 100644 --- a/gnu/system/linux-initrd.scm +++ b/gnu/system/linux-initrd.scm @@ -268,6 +268,7 @@ loaded at boot time in the order in which they appear." "usbhid" "hid-generic" "hid-apple" ;keyboards during early boot "dm-crypt" "xts" "serpent_generic" "wp512" ;for encrypted root partitions "nvme" ;for new SSD NVMe devices + "nls_iso8859-1" ;for `mkfs.fat`, et.al ,@(if (string-match "^(x86_64|i[3-6]86)-" (%current-system)) '("pata_acpi" "pata_atiixp" ;for ATA controllers "isci") ;for SAS controllers like Intel C602 @@ -281,9 +282,6 @@ loaded at boot time in the order in which they appear." ,@(if (find (file-system-type-predicate "9p") file-systems) virtio-9p-modules '()) - ,@(if (find (file-system-type-predicate "vfat") file-systems) - '("nls_iso8859-1") - '()) ,@(if (find (file-system-type-predicate "btrfs") file-systems) '("btrfs") '()) diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm index 2c8b954c80..ad5e6b75bb 100644 --- a/gnu/system/vm.scm +++ b/gnu/system/vm.scm @@ -3,6 +3,7 @@ ;;; Copyright © 2016 Christopher Allan Webber <cwebber@dustycloud.org> ;;; Copyright © 2016 Leo Famulari <leo@famulari.name> ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com> +;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -46,10 +47,11 @@ #:select (%guile-static-stripped)) #:use-module (gnu packages admin) + #:use-module (gnu bootloader) #:use-module (gnu system shadow) #:use-module (gnu system pam) #:use-module (gnu system linux-initrd) - #:use-module (gnu system grub) + #:use-module (gnu bootloader) #:use-module (gnu system file-systems) #:use-module (gnu system) #:use-module (gnu services) @@ -176,8 +178,9 @@ made available under the /xchg CIFS share." (disk-image-format "qcow2") (file-system-type "ext4") file-system-label - os-derivation - grub-configuration + os-drv + bootcfg-drv + bootloader (register-closures? #t) (inputs '()) copy-inputs?) @@ -201,7 +204,7 @@ the image." (guix build utils)) (let ((inputs - '#$(append (list qemu parted grub e2fsprogs) + '#$(append (list qemu parted e2fsprogs dosfstools) (map canonical-package (list sed grep coreutils findutils gawk)) (if register-closures? (list guix) '()))) @@ -223,17 +226,36 @@ the image." #:closures graphs #:copy-closures? #$copy-inputs? #:register-closures? #$register-closures? - #:system-directory #$os-derivation)) + #:system-directory #$os-drv)) (partitions (list (partition (size #$(- disk-image-size - (* 10 (expt 2 20)))) + (* 50 (expt 2 20)))) (label #$file-system-label) (file-system #$file-system-type) - (bootable? #t) - (initializer initialize))))) + (flags '(boot)) + (initializer initialize)) + ;; Append a small EFI System Partition for + ;; use with UEFI bootloaders. + (partition + ;; The standalone grub image is about 10MiB, but + ;; leave some room for custom or multiple images. + (size (* 40 (expt 2 20))) + (label "GNU-ESP") ;cosmetic only + ;; Use "vfat" here since this property is used + ;; when mounting. The actual FAT-ness is based + ;; on filesystem size (16 in this case). + (file-system "vfat") + (flags '(esp)))))) (initialize-hard-disk "/dev/vda" #:partitions partitions - #:grub.cfg #$grub-configuration) + #:grub-efi #$grub-efi + #:bootloader-package + #$(bootloader-package bootloader) + #:bootcfg #$bootcfg-drv + #:bootcfg-location + #$(bootloader-configuration-file bootloader) + #:bootloader-installer + #$(bootloader-installer bootloader)) (reboot))))) #:system system #:make-disk-image? #t @@ -287,8 +309,10 @@ to USB sticks meant to be read-only." (mlet* %store-monad ((os-drv (operating-system-derivation os)) (bootcfg (operating-system-bootcfg os))) (qemu-image #:name name - #:os-derivation os-drv - #:grub-configuration bootcfg + #:os-drv os-drv + #:bootcfg-drv bootcfg + #:bootloader (bootloader-configuration-bootloader + (operating-system-bootloader os)) #:disk-image-size disk-image-size #:disk-image-format "raw" #:file-system-type file-system-type @@ -330,8 +354,10 @@ of the GNU system as described by OS." (mlet* %store-monad ((os-drv (operating-system-derivation os)) (bootcfg (operating-system-bootcfg os))) - (qemu-image #:os-derivation os-drv - #:grub-configuration bootcfg + (qemu-image #:os-drv os-drv + #:bootcfg-drv bootcfg + #:bootloader (bootloader-configuration-bootloader + (operating-system-bootloader os)) #:disk-image-size disk-image-size #:file-system-type file-system-type #:inputs `(("system" ,os-drv) @@ -429,8 +455,10 @@ bootloader refers to: OS kernel, initrd, bootloader data, etc." ;; BOOTCFG and all its dependencies, including the output of OS-DRV. ;; This is more than needed (we only need the kernel, initrd, GRUB for its ;; font, and the background image), but it's hard to filter that. - (qemu-image #:os-derivation os-drv - #:grub-configuration bootcfg + (qemu-image #:os-drv os-drv + #:bootcfg-drv bootcfg + #:bootloader (bootloader-configuration-bootloader + (operating-system-bootloader os)) #:disk-image-size disk-image-size #:inputs (if full-boot? `(("bootcfg" ,bootcfg)) @@ -471,7 +499,7 @@ with '-virtfs' options for the host file systems listed in SHARED-FS." (mappings '()) full-boot? (disk-image-size - (* (if full-boot? 500 30) + (* (if full-boot? 500 70) (expt 2 20)))) "Return a derivation that builds a script to run a virtual machine image of OS that shares its store with the host. diff --git a/gnu/tests.scm b/gnu/tests.scm index 810711ab91..2886a982f4 100644 --- a/gnu/tests.scm +++ b/gnu/tests.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2016, 2017 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -20,8 +21,8 @@ #:use-module (guix gexp) #:use-module (guix utils) #:use-module (guix records) + #:use-module (gnu bootloader grub) #:use-module (gnu system) - #:use-module (gnu system grub) #:use-module (gnu system file-systems) #:use-module (gnu system shadow) #:use-module (gnu services) diff --git a/gnu/tests/base.scm b/gnu/tests/base.scm index 37aab8ef67..e5ac320b74 100644 --- a/gnu/tests/base.scm +++ b/gnu/tests/base.scm @@ -199,6 +199,28 @@ info --version") ',users+homes)) marionette))) + (test-equal "no extra home directories" + '() + + ;; Make sure the home directories that are not supposed to be + ;; created are indeed not created. + (let ((nonexistent + '#$(filter-map (lambda (user) + (and (not + (user-account-create-home-directory? + user)) + (user-account-home-directory user))) + (operating-system-user-accounts os)))) + (marionette-eval + `(begin + (use-modules (srfi srfi-1)) + + ;; Note: Do not flag "/var/empty". + (filter file-exists? + ',(remove (cut string-prefix? "/var/" <>) + nonexistent))) + marionette))) + (test-equal "login on tty1" "root\n" (begin diff --git a/gnu/tests/nfs.scm b/gnu/tests/nfs.scm index 1f28f5a5b8..9e1ac1d55a 100644 --- a/gnu/tests/nfs.scm +++ b/gnu/tests/nfs.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2016 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2016 John Darrington <jmd@gnu.org> +;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -19,8 +20,8 @@ (define-module (gnu tests nfs) #:use-module (gnu tests) + #:use-module (gnu bootloader grub) #:use-module (gnu system) - #:use-module (gnu system grub) #:use-module (gnu system file-systems) #:use-module (gnu system shadow) #:use-module (gnu system vm) diff --git a/guix/build-system/asdf.scm b/guix/build-system/asdf.scm index f28c098ea2..ec8b64497f 100644 --- a/guix/build-system/asdf.scm +++ b/guix/build-system/asdf.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca> +;;; Copyright © 2016, 2017 Andy Patterson <ajpatter@uwaterloo.ca> ;;; ;;; This file is part of GNU Guix. ;;; @@ -22,6 +22,9 @@ #:use-module (guix packages) #:use-module (guix derivations) #:use-module (guix search-paths) + #:use-module ((guix build utils) + #:select ((package-name->name+version + . hyphen-separated-name->name+version))) #:use-module (guix build-system) #:use-module (guix build-system gnu) #:use-module (ice-9 match) @@ -163,39 +166,40 @@ set up using CL source package conventions." (match-lambda ((name content . rest) (let* ((is-package? (package? content)) - (new-content (if is-package? (transform content) content)) - (new-name (if (and is-package? - (string-prefix? from-prefix name)) - (package-name new-content) - name))) - `(,new-name ,new-content ,@rest))))) + (new-content (if is-package? (transform content) content))) + `(,name ,new-content ,@rest))))) ;; Special considerations for source packages: CL inputs become - ;; propagated, and un-handled arguments are removed. Native inputs are - ;; removed as are extraneous outputs. + ;; propagated, and un-handled arguments are removed. + (define new-propagated-inputs (if target-is-source? (map rewrite - (filter (match-lambda - ((_ input . _) - (has-from-build-system? input))) - (package-inputs pkg))) - '())) - - (define new-inputs + (append + (filter (match-lambda + ((_ input . _) + (has-from-build-system? input))) + (append (package-inputs pkg) + ;; The native inputs might be needed just + ;; to load the system. + (package-native-inputs pkg))) + (package-propagated-inputs pkg))) + + (map rewrite (package-propagated-inputs pkg)))) + + (define (new-inputs inputs-getter) (if target-is-source? (map rewrite (filter (match-lambda ((_ input . _) (not (has-from-build-system? input)))) - (package-inputs pkg))) - (map rewrite (package-inputs pkg)))) + (inputs-getter pkg))) + (map rewrite (inputs-getter pkg)))) (define base-arguments (if target-is-source? (strip-keyword-arguments - '(#:tests? #:special-dependencies #:asd-file - #:test-only-systems #:lisp) + '(#:tests? #:asd-file #:lisp #:asd-system-name #:test-asd-file) (package-arguments pkg)) (package-arguments pkg))) @@ -213,11 +217,9 @@ set up using CL source package conventions." (arguments (substitute-keyword-arguments base-arguments ((#:phases phases) (list phases-transformer phases)))) - (inputs new-inputs) + (inputs (new-inputs package-inputs)) (propagated-inputs new-propagated-inputs) - (native-inputs (if target-is-source? - '() - (map rewrite (package-native-inputs pkg)))) + (native-inputs (new-inputs package-native-inputs)) (outputs (if target-is-source? '("out") (package-outputs pkg))))) @@ -233,10 +235,10 @@ set up using CL source package conventions." (properties (alist-delete variant properties))) pkg)) -(define (lower lisp-implementation) +(define (lower lisp-type) (lambda* (name #:key source inputs outputs native-inputs system target - (lisp (default-lisp (string->symbol lisp-implementation))) + (lisp (default-lisp (string->symbol lisp-type))) #:allow-other-keys #:rest arguments) "Return a bag for NAME" @@ -252,20 +254,19 @@ set up using CL source package conventions." '()) ,@inputs ,@(standard-packages))) - (build-inputs `((,lisp-implementation ,lisp) + (build-inputs `((,lisp-type ,lisp) ,@native-inputs)) (outputs outputs) - (build (asdf-build lisp-implementation)) + (build (asdf-build lisp-type)) (arguments (strip-keyword-arguments private-keywords arguments)))))) -(define (asdf-build lisp-implementation) +(define (asdf-build lisp-type) (lambda* (store name inputs #:key source outputs (tests? #t) - (special-dependencies ''()) (asd-file #f) - (test-only-systems ''()) - (lisp lisp-implementation) + (asd-system-name #f) + (test-asd-file #f) (phases '(@ (guix build asdf-build-system) %standard-phases)) (search-paths '()) @@ -274,26 +275,36 @@ set up using CL source package conventions." (imported-modules %asdf-build-system-modules) (modules %asdf-build-modules)) + (define system-name + (or asd-system-name + (string-drop + ;; NAME is the value returned from `package-full-name'. + (hyphen-separated-name->name+version name) + (1+ (string-length lisp-type))))) ; drop the "<lisp>-" prefix. + (define builder `(begin (use-modules ,@modules) - (asdf-build #:name ,name - #:source ,(match (assoc-ref inputs "source") - (((? derivation? source)) - (derivation->output-path source)) - ((source) source) - (source source)) - #:lisp ,lisp - #:special-dependencies ,special-dependencies - #:asd-file ,asd-file - #:test-only-systems ,test-only-systems - #:system ,system - #:tests? ,tests? - #:phases ,phases - #:outputs %outputs - #:search-paths ',(map search-path-specification->sexp - search-paths) - #:inputs %build-inputs))) + (parameterize ((%lisp (string-append + (assoc-ref %build-inputs ,lisp-type) + "/bin/" ,lisp-type)) + (%lisp-type ,lisp-type)) + (asdf-build #:name ,name + #:source ,(match (assoc-ref inputs "source") + (((? derivation? source)) + (derivation->output-path source)) + ((source) source) + (source source)) + #:asd-file ,(or asd-file (string-append system-name ".asd")) + #:asd-system-name ,system-name + #:test-asd-file ,test-asd-file + #:system ,system + #:tests? ,tests? + #:phases ,phases + #:outputs %outputs + #:search-paths ',(map search-path-specification->sexp + search-paths) + #:inputs %build-inputs)))) (define guile-for-build (match guile diff --git a/guix/build/asdf-build-system.scm b/guix/build/asdf-build-system.scm index 085d073dea..c5e820a00a 100644 --- a/guix/build/asdf-build-system.scm +++ b/guix/build/asdf-build-system.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca> +;;; Copyright © 2016, 2017 Andy Patterson <ajpatter@uwaterloo.ca> ;;; ;;; This file is part of GNU Guix. ;;; @@ -21,6 +21,7 @@ #:use-module (guix build utils) #:use-module (guix build lisp-utils) #:use-module (srfi srfi-1) + #:use-module (srfi srfi-11) #:use-module (srfi srfi-26) #:use-module (ice-9 rdelim) #:use-module (ice-9 receive) @@ -42,50 +43,42 @@ (define %object-prefix "/lib") -(define (source-install-prefix lisp) - (string-append %install-prefix "/" lisp "-source")) +(define (%lisp-source-install-prefix) + (string-append %source-install-prefix "/" (%lisp-type) "-source")) (define %system-install-prefix - (string-append %install-prefix "/systems")) + (string-append %source-install-prefix "/systems")) -(define (output-path->package-name path) - (package-name->name+version (strip-store-file-name path))) - -(define (outputs->name outputs) - (output-path->package-name - (assoc-ref outputs "out"))) - -(define (lisp-source-directory output lisp name) - (string-append output (source-install-prefix lisp) "/" name)) +(define (lisp-source-directory output name) + (string-append output (%lisp-source-install-prefix) "/" name)) (define (source-directory output name) - (string-append output %install-prefix "/source/" name)) + (string-append output %source-install-prefix "/source/" name)) -(define (library-directory output lisp) +(define (library-directory output) (string-append output %object-prefix - "/" lisp)) + "/" (%lisp-type))) (define (output-translation source-path - object-output - lisp) + object-output) "Return a translation for the system's source path to it's binary output." `((,source-path :**/ :*.*.*) - (,(library-directory object-output lisp) + (,(library-directory object-output) :**/ :*.*.*))) -(define (source-asd-file output lisp name asd-file) - (string-append (lisp-source-directory output lisp name) "/" asd-file)) - -(define (copy-files-to-output outputs output name) - "Copy all files from OUTPUT to \"out\". Create an extra link to any -system-defining files in the source to a convenient location. This is done -before any compiling so that the compiled source locations will be valid." - (let* ((out (assoc-ref outputs output)) - (source (getcwd)) - (target (source-directory out name)) - (system-path (string-append out %system-install-prefix))) +(define (source-asd-file output name asd-file) + (string-append (lisp-source-directory output name) "/" asd-file)) + +(define (copy-files-to-output out name) + "Copy all files from the current directory to OUT. Create an extra link to +any system-defining files in the source to a convenient location. This is +done before any compiling so that the compiled source locations will be +valid." + (let ((source (getcwd)) + (target (source-directory out name)) + (system-path (string-append out %system-install-prefix))) (copy-recursively source target) (mkdir-p system-path) (for-each @@ -97,45 +90,38 @@ before any compiling so that the compiled source locations will be valid." (define* (install #:key outputs #:allow-other-keys) "Copy and symlink all the source files." - (copy-files-to-output outputs "out" (outputs->name outputs))) - -(define* (copy-source #:key outputs lisp #:allow-other-keys) - "Copy the source to \"out\"." - (let* ((out (assoc-ref outputs "out")) - (name (remove-lisp-from-name (output-path->package-name out) lisp)) - (install-path (string-append out %install-prefix))) - (copy-files-to-output outputs "out" name) + (define output (assoc-ref outputs "out")) + (copy-files-to-output output + (package-name->name+version + (strip-store-file-name output)))) + +(define* (copy-source #:key outputs asd-system-name #:allow-other-keys) + "Copy the source to the library output." + (let* ((out (library-output outputs)) + (install-path (string-append out %source-install-prefix))) + (copy-files-to-output out asd-system-name) ;; Hide the files from asdf (with-directory-excursion install-path - (rename-file "source" (string-append lisp "-source")) + (rename-file "source" (string-append (%lisp-type) "-source")) (delete-file-recursively "systems"))) #t) -(define* (build #:key outputs inputs lisp asd-file +(define* (build #:key outputs inputs asd-file asd-system-name #:allow-other-keys) "Compile the system." - (let* ((out (assoc-ref outputs "out")) - (name (remove-lisp-from-name (output-path->package-name out) lisp)) - (source-path (lisp-source-directory out lisp name)) + (let* ((out (library-output outputs)) + (source-path (lisp-source-directory out asd-system-name)) (translations (wrap-output-translations `(,(output-translation source-path - out - lisp)))) - (asd-file (and=> asd-file (cut source-asd-file out lisp name <>)))) + out)))) + (asd-file (source-asd-file out asd-system-name asd-file))) (setenv "ASDF_OUTPUT_TRANSLATIONS" (replace-escaped-macros (format #f "~S" translations))) - ;; We don't need this if we have the asd file, and it can mess with the - ;; load ordering we're trying to enforce - (unless asd-file - (prepend-to-source-registry (string-append source-path "//"))) - (setenv "HOME" out) ; ecl's asdf sometimes wants to create $HOME/.cache - (parameterize ((%lisp (string-append - (assoc-ref inputs lisp) "/bin/" lisp))) - (compile-system name lisp asd-file)) + (compile-system asd-system-name asd-file) ;; As above, ecl will sometimes create this even though it doesn't use it @@ -144,56 +130,48 @@ before any compiling so that the compiled source locations will be valid." (delete-file-recursively cache-directory)))) #t) -(define* (check #:key lisp tests? outputs inputs asd-file +(define* (check #:key tests? outputs inputs asd-file asd-system-name + test-asd-file #:allow-other-keys) "Test the system." - (let* ((name (remove-lisp-from-name (outputs->name outputs) lisp)) - (out (assoc-ref outputs "out")) - (asd-file (and=> asd-file (cut source-asd-file out lisp name <>)))) + (let* ((out (library-output outputs)) + (asd-file (source-asd-file out asd-system-name asd-file)) + (test-asd-file + (and=> test-asd-file + (cut source-asd-file out asd-system-name <>)))) (if tests? - (parameterize ((%lisp (string-append - (assoc-ref inputs lisp) "/bin/" lisp))) - (test-system name lisp asd-file)) + (test-system asd-system-name asd-file test-asd-file) (format #t "test suite not run~%"))) #t) -(define* (patch-asd-files #:key outputs +(define* (create-asd-file #:key outputs inputs - lisp - special-dependencies - test-only-systems + asd-file + asd-system-name #:allow-other-keys) - "Patch any asd files created by the compilation process so that they can -find their dependencies. Exclude any TEST-ONLY-SYSTEMS which were only -included to run tests. Add any SPECIAL-DEPENDENCIES which the LISP -implementation itself provides." - (let* ((out (assoc-ref outputs "out")) - (name (remove-lisp-from-name (output-path->package-name out) lisp)) - (registry (lset-difference - (lambda (input system) - (match input - ((name . path) (string=? name system)))) - (lisp-dependencies lisp inputs) - test-only-systems)) - (lisp-systems (map first registry))) - - (for-each - (lambda (asd-file) - (patch-asd-file asd-file registry lisp - (append lisp-systems special-dependencies))) - (find-files out "\\.asd$"))) + "Create a system definition file for the built system." + (let*-values (((out) (library-output outputs)) + ((_ version) (package-name->name+version + (strip-store-file-name out))) + ((new-asd-file) (string-append + (library-directory out) + "/" (normalize-string asd-system-name) + ".asd"))) + + (make-asd-file new-asd-file + #:system asd-system-name + #:version version + #:inputs inputs + #:system-asd-file asd-file)) #t) -(define* (symlink-asd-files #:key outputs lisp #:allow-other-keys) +(define* (symlink-asd-files #:key outputs #:allow-other-keys) "Create an extra reference to the system in a convenient location." - (let* ((out (assoc-ref outputs "out"))) + (let* ((out (library-output outputs))) (for-each (lambda (asd-file) - (substitute* asd-file - ((";;; Built for.*") "") ; remove potential non-determinism - (("^\\(DEFSYSTEM(.*)$" all end) (string-append "(asdf:defsystem" end))) (receive (new-asd-file asd-file-directory) - (bundle-asd-file out asd-file lisp) + (bundle-asd-file out asd-file) (mkdir-p asd-file-directory) (symlink asd-file new-asd-file) ;; Update the source registry for future phases which might want to @@ -201,15 +179,14 @@ implementation itself provides." (prepend-to-source-registry (string-append asd-file-directory "/")))) - (find-files (string-append out %object-prefix) "\\.asd$")) -) + (find-files (string-append out %object-prefix) "\\.asd$"))) #t) -(define* (cleanup-files #:key outputs lisp - #:allow-other-keys) +(define* (cleanup-files #:key outputs + #:allow-other-keys) "Remove any compiled files which are not a part of the final bundle." - (let ((out (assoc-ref outputs "out"))) - (match lisp + (let ((out (library-output outputs))) + (match (%lisp-type) ("sbcl" (for-each (lambda (file) @@ -219,10 +196,9 @@ implementation itself provides." ("ecl" (for-each delete-file (append (find-files out "\\.fas$") - (find-files out "\\.o$") - (find-files out "\\.a$"))))) + (find-files out "\\.o$"))))) - (with-directory-excursion (library-directory out lisp) + (with-directory-excursion (library-directory out) (for-each (lambda (file) (rename-file file @@ -237,9 +213,9 @@ implementation itself provides." (string<> ".." file))))))) #t) -(define* (strip #:key lisp #:allow-other-keys #:rest args) +(define* (strip #:rest args) ;; stripping sbcl binaries removes their entry program and extra systems - (or (string=? lisp "sbcl") + (or (string=? (%lisp-type) "sbcl") (apply (assoc-ref gnu:%standard-phases 'strip) args))) (define %standard-phases/source @@ -257,8 +233,8 @@ implementation itself provides." (add-before 'build 'copy-source copy-source) (replace 'check check) (replace 'strip strip) - (add-after 'check 'link-dependencies patch-asd-files) - (add-after 'link-dependencies 'cleanup cleanup-files) + (add-after 'check 'create-asd-file create-asd-file) + (add-after 'create-asd-file 'cleanup cleanup-files) (add-after 'cleanup 'create-symlinks symlink-asd-files))) (define* (asdf-build #:key inputs diff --git a/guix/build/lisp-utils.scm b/guix/build/lisp-utils.scm index 55a07c7207..21cb620d59 100644 --- a/guix/build/lisp-utils.scm +++ b/guix/build/lisp-utils.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca> +;;; Copyright © 2016, 2017 Andy Patterson <ajpatter@uwaterloo.ca> ;;; ;;; This file is part of GNU Guix. ;;; @@ -18,13 +18,15 @@ (define-module (guix build lisp-utils) #:use-module (ice-9 format) + #:use-module (ice-9 hash-table) #:use-module (ice-9 match) #:use-module (ice-9 regex) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) #:use-module (guix build utils) #:export (%lisp - %install-prefix + %lisp-type + %source-install-prefix lisp-eval-program compile-system test-system @@ -32,15 +34,16 @@ generate-executable-wrapper-system generate-executable-entry-point generate-executable-for-system - patch-asd-file - bundle-install-prefix - lisp-dependencies + %bundle-install-prefix bundle-asd-file - remove-lisp-from-name wrap-output-translations prepend-to-source-registry build-program - build-image)) + build-image + make-asd-file + valid-char-set + normalize-string + library-output)) ;;; Commentary: ;;; @@ -54,102 +57,164 @@ ;; File name of the Lisp compiler. (make-parameter "lisp")) -(define %install-prefix "/share/common-lisp") - -(define (bundle-install-prefix lisp) - (string-append %install-prefix "/" lisp "-bundle-systems")) +(define %lisp-type + ;; String representing the class of implementation being used. + (make-parameter "lisp")) -(define (remove-lisp-from-name name lisp) - (string-drop name (1+ (string-length lisp)))) +;; The common parent for Lisp source files, as will as the symbolic +;; link farm for system definition (.asd) files. +(define %source-install-prefix "/share/common-lisp") + +(define (%bundle-install-prefix) + (string-append %source-install-prefix "/" (%lisp-type) "-bundle-systems")) + +(define (library-output outputs) + "If a `lib' output exists, build things there. Otherwise use `out'." + (or (assoc-ref outputs "lib") (assoc-ref outputs "out"))) + +;; See nix/libstore/store-api.cc#checkStoreName. +(define valid-char-set + (string->char-set + "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+-._?=")) + +(define (normalize-string str) + "Replace invalid characters in STR with a hyphen." + (string-join (string-tokenize str valid-char-set) "-")) + +(define (inputs->asd-file-map inputs) + "Produce a hash table of the form (system . asd-file), where system is the +name of an ASD system, and asd-file is the full path to its definition." + (alist->hash-table + (filter-map + (match-lambda + ((_ . path) + (let ((prefix (string-append path (%bundle-install-prefix)))) + (and (directory-exists? prefix) + (match (find-files prefix "\\.asd$") + ((asd-file) + (cons + (string-drop-right (basename asd-file) 4) ; drop ".asd" + asd-file)) + (_ #f)))))) + inputs))) (define (wrap-output-translations translations) `(:output-translations ,@translations :inherit-configuration)) -(define (lisp-eval-program lisp program) +(define (lisp-eval-program program) "Evaluate PROGRAM with a given LISP implementation." (unless (zero? (apply system* - (lisp-invoke lisp (format #f "~S" program)))) - (error "lisp-eval-program failed!" lisp program))) - -(define (lisp-invoke lisp program) + (lisp-invocation program))) + (error "lisp-eval-program failed!" (%lisp) program))) + +(define (spread-statements program argument-name) + "Return a list with the statements from PROGRAM spread between +ARGUMENT-NAME, a string representing the argument a lisp implementation uses +to accept statements to be evaluated before starting." + (append-map (lambda (statement) + (list argument-name (format #f "~S" statement))) + program)) + +(define (lisp-invocation program) "Return a list of arguments for system* determining how to invoke LISP with PROGRAM." - (match lisp - ("sbcl" `(,(%lisp) "--non-interactive" "--eval" ,program)) - ("ecl" `(,(%lisp) "-eval" ,program "-eval" "(quit)")))) + (match (%lisp-type) + ("sbcl" `(,(%lisp) "--non-interactive" + ,@(spread-statements program "--eval"))) + ("ecl" `(,(%lisp) + ,@(spread-statements program "--eval") + "--eval" "(quit)")) + (_ (error "The LISP provided is not supported at this time.")))) (define (asdf-load-all systems) (map (lambda (system) - `(funcall - (find-symbol - (symbol-name :load-system) - (symbol-name :asdf)) - ,system)) + `(asdf:load-system ,system)) systems)) -(define (compile-system system lisp asd-file) +(define (compile-system system asd-file) "Use a lisp implementation to compile SYSTEM using asdf. Load ASD-FILE -first if SYSTEM is defined there." - (lisp-eval-program lisp - `(progn - (require :asdf) - (in-package :asdf) - ,@(if asd-file - `((load ,asd-file)) - '()) - (in-package :cl-user) - (funcall (find-symbol - (symbol-name :operate) - (symbol-name :asdf)) - (find-symbol - (symbol-name :compile-bundle-op) - (symbol-name :asdf)) - ,system) - (funcall (find-symbol - (symbol-name :operate) - (symbol-name :asdf)) - (find-symbol - (symbol-name :deliver-asd-op) - (symbol-name :asdf)) - ,system)))) - -(define (test-system system lisp asd-file) - "Use a lisp implementation to test SYSTEM using asdf. Load ASD-FILE first -if SYSTEM is defined there." - (lisp-eval-program lisp - `(progn - (require :asdf) - (in-package :asdf) - ,@(if asd-file - `((load ,asd-file)) - '()) - (in-package :cl-user) - (funcall (find-symbol - (symbol-name :test-system) - (symbol-name :asdf)) - ,system)))) +first." + (lisp-eval-program + `((require :asdf) + (let ((*package* (find-package :asdf))) + (load ,asd-file)) + (asdf:operate 'asdf:compile-bundle-op ,system)))) + +(define (system-dependencies system asd-file) + "Return the dependencies of SYSTEM, as reported by +asdf:system-depends-on. First load the system's ASD-FILE." + (define deps-file ".deps.sexp") + (define program + `((require :asdf) + (let ((*package* (find-package :asdf))) + (load ,asd-file)) + (with-open-file + (stream ,deps-file :direction :output) + (format stream + "~s~%" + (asdf:system-depends-on + (asdf:find-system ,system)))))) + + (dynamic-wind + (lambda _ + (lisp-eval-program program)) + (lambda _ + (call-with-input-file deps-file read)) + (lambda _ + (when (file-exists? deps-file) + (delete-file deps-file))))) + +(define (compiled-system system) + (let ((system (basename system))) ; this is how asdf handles slashes + (match (%lisp-type) + ("sbcl" (string-append system "--system")) + (_ system)))) + +(define* (generate-system-definition system + #:key version dependencies) + `(asdf:defsystem + ,(normalize-string system) + :class asdf/bundle:prebuilt-system + :version ,version + :depends-on ,dependencies + :components ((:compiled-file ,(compiled-system system))) + ,@(if (string=? "ecl" (%lisp-type)) + `(:lib ,(string-append system ".a")) + '()))) + +(define (test-system system asd-file test-asd-file) + "Use a lisp implementation to test SYSTEM using asdf. Load ASD-FILE first. +Also load TEST-ASD-FILE if necessary." + (lisp-eval-program + `((require :asdf) + (let ((*package* (find-package :asdf))) + (load ,asd-file) + ,@(if test-asd-file + `((load ,test-asd-file)) + ;; Try some likely files. + (map (lambda (file) + `(when (uiop:file-exists-p ,file) + (load ,file))) + (list + (string-append system "-tests.asd") + (string-append system "-test.asd") + "tests.asd" + "test.asd")))) + (asdf:test-system ,system)))) (define (string->lisp-keyword . strings) "Return a lisp keyword for the concatenation of STRINGS." (string->symbol (apply string-append ":" strings))) -(define (generate-executable-for-system type system lisp) - "Use LISP to generate an executable, whose TYPE can be \"image\" or -\"program\". The latter will always be standalone. Depends on having created -a \"SYSTEM-exec\" system which contains the entry program." +(define (generate-executable-for-system type system) + "Use LISP to generate an executable, whose TYPE can be 'asdf:image-op or +'asdf:program-op. The latter will always be standalone. Depends on having +created a \"SYSTEM-exec\" system which contains the entry program." (lisp-eval-program - lisp - `(progn - (require :asdf) - (funcall (find-symbol - (symbol-name :operate) - (symbol-name :asdf)) - (find-symbol - (symbol-name ,(string->lisp-keyword type "-op")) - (symbol-name :asdf)) - ,(string-append system "-exec"))))) + `((require :asdf) + (asdf:operate ',type ,(string-append system "-exec"))))) (define (generate-executable-wrapper-system system dependencies) "Generates a system which can be used by asdf to produce an image or program @@ -183,65 +248,59 @@ ENTRY-PROGRAM for SYSTEM within the current directory." (declare (ignorable arguments)) ,@entry-program)))))))) -(define (wrap-perform-method lisp registry dependencies file-name) - "Creates a wrapper method which allows the system to locate its dependent -systems from REGISTRY, an alist of the same form as %outputs, which contains -lisp systems which the systems is dependent on. All DEPENDENCIES which the -system depends on will the be loaded before this system." - (let* ((system (string-drop-right (basename file-name) 4)) - (system-symbol (string->lisp-keyword system))) - - `(defmethod asdf:perform :before - (op (c (eql (asdf:find-system ,system-symbol)))) - (asdf/source-registry:ensure-source-registry) - ,@(map (match-lambda - ((name . path) - (let ((asd-file (string-append path - (bundle-install-prefix lisp) - "/" name ".asd"))) - `(setf - (gethash ,name - asdf/source-registry:*source-registry*) - ,(string->symbol "#p") - ,(bundle-asd-file path asd-file lisp))))) - registry) - ,@(map (lambda (system) - `(asdf:load-system ,(string->lisp-keyword system))) - dependencies)))) - -(define (patch-asd-file asd-file registry lisp dependencies) - "Patches ASD-FILE with a perform method as described in WRAP-PERFORM-METHOD." - (chmod asd-file #o644) - (let ((port (open-file asd-file "a"))) - (dynamic-wind - (lambda _ #t) - (lambda _ - (display - (replace-escaped-macros - (format #f "~%~y~%" - (wrap-perform-method lisp registry - dependencies asd-file))) - port)) - (lambda _ (close-port port)))) - (chmod asd-file #o444)) - -(define (lisp-dependencies lisp inputs) - "Determine which inputs are lisp system dependencies, by using the convention -that a lisp system dependency will resemble \"system-LISP\"." - (filter-map (match-lambda - ((name . value) - (and (string-prefix? lisp name) - (string<> lisp name) - `(,(remove-lisp-from-name name lisp) - . ,value)))) - inputs)) - -(define (bundle-asd-file output-path original-asd-file lisp) +(define (generate-dependency-links registry system) + "Creates a program which populates asdf's source registry from REGISTRY, an +alist of dependency names to corresponding asd files. This allows the system +to locate its dependent systems." + `(progn + (asdf/source-registry:ensure-source-registry) + ,@(map (match-lambda + ((name . asd-file) + `(setf + (gethash ,name + asdf/source-registry:*source-registry*) + ,(string->symbol "#p") + ,asd-file))) + registry))) + +(define* (make-asd-file asd-file + #:key system version inputs + (system-asd-file #f)) + "Create an ASD-FILE for SYSTEM@VERSION, appending a program to allow the +system to find its dependencies, as described by GENERATE-DEPENDENCY-LINKS." + (define dependencies + (let ((deps + (system-dependencies system system-asd-file))) + (if (eq? 'NIL deps) + '() + (map normalize-string deps)))) + + (define lisp-input-map + (inputs->asd-file-map inputs)) + + (define registry + (filter-map hash-get-handle + (make-list (length dependencies) + lisp-input-map) + dependencies)) + + (call-with-output-file asd-file + (lambda (port) + (display + (replace-escaped-macros + (format #f "~y~%~y~%" + (generate-system-definition system + #:version version + #:dependencies dependencies) + (generate-dependency-links registry system))) + port)))) + +(define (bundle-asd-file output-path original-asd-file) "Find the symlinked bundle file for ORIGINAL-ASD-FILE by looking in OUTPUT-PATH/share/common-lisp/LISP-bundle-systems/<system>.asd. Returns two values: the asd file itself and the directory in which it resides." (let ((bundle-asd-path (string-append output-path - (bundle-install-prefix lisp)))) + (%bundle-install-prefix)))) (values (string-append bundle-asd-path "/" (basename original-asd-file)) bundle-asd-path))) @@ -256,19 +315,22 @@ which are not nested." (setenv "CL_SOURCE_REGISTRY" (string-append path ":" (or (getenv "CL_SOURCE_REGISTRY") "")))) -(define* (build-program lisp program #:key inputs +(define* (build-program program outputs #:key + (dependency-prefixes (list (library-output outputs))) (dependencies (list (basename program))) entry-program #:allow-other-keys) "Generate an executable program containing all DEPENDENCIES, and which will execute ENTRY-PROGRAM. The result is placed in PROGRAM. When executed, it will run ENTRY-PROGRAM, a list of Common Lisp expressions in which `arguments' -has been bound to the command-line arguments which were passed." - (generate-executable lisp program - #:inputs inputs +has been bound to the command-line arguments which were passed. Link in any +asd files from DEPENDENCY-PREFIXES to ensure references to those libraries are +retained." + (generate-executable program #:dependencies dependencies + #:dependency-prefixes dependency-prefixes #:entry-program entry-program - #:type "program") + #:type 'asdf:program-op) (let* ((name (basename program)) (bin-directory (dirname program))) (with-directory-excursion bin-directory @@ -276,16 +338,18 @@ has been bound to the command-line arguments which were passed." name))) #t) -(define* (build-image lisp image #:key inputs +(define* (build-image image outputs #:key + (dependency-prefixes (list (library-output outputs))) (dependencies (list (basename image))) #:allow-other-keys) "Generate an image, possibly standalone, which contains all DEPENDENCIES, -placing the result in IMAGE.image." - (generate-executable lisp image - #:inputs inputs +placing the result in IMAGE.image. Link in any asd files from +DEPENDENCY-PREFIXES to ensure references to those libraries are retained." + (generate-executable image #:dependencies dependencies + #:dependency-prefixes dependency-prefixes #:entry-program '(nil) - #:type "image") + #:type 'asdf:image-op) (let* ((name (basename image)) (bin-directory (dirname image))) (with-directory-excursion bin-directory @@ -293,14 +357,16 @@ placing the result in IMAGE.image." (string-append name ".image")))) #t) -(define* (generate-executable lisp out-file #:key inputs +(define* (generate-executable out-file #:key dependencies + dependency-prefixes entry-program type #:allow-other-keys) - "Generate an executable by using asdf's TYPE-op, containing whithin the + "Generate an executable by using asdf operation TYPE, containing whithin the image all DEPENDENCIES, and running ENTRY-PROGRAM in the case of an -executable." +executable. Link in any asd files from DEPENDENCY-PREFIXES to ensure +references to those libraries are retained." (let* ((bin-directory (dirname out-file)) (name (basename out-file))) (mkdir-p bin-directory) @@ -319,9 +385,25 @@ executable." `(((,bin-directory :**/ :*.*.*) (,bin-directory :**/ :*.*.*))))))) - (parameterize ((%lisp (string-append - (assoc-ref inputs lisp) "/bin/" lisp))) - (generate-executable-for-system type name lisp)) + (generate-executable-for-system type name) + + (let* ((after-store-prefix-index + (string-index out-file #\/ + (1+ (string-length (%store-directory))))) + (output (string-take out-file after-store-prefix-index)) + (hidden-asd-links (string-append output "/.asd-files"))) + + (mkdir-p hidden-asd-links) + (for-each + (lambda (path) + (for-each + (lambda (asd-file) + (symlink asd-file + (string-append hidden-asd-links + "/" (basename asd-file)))) + (find-files (string-append path (%bundle-install-prefix)) + "\\.asd$"))) + dependency-prefixes)) (delete-file (string-append bin-directory "/" name "-exec.asd")) (delete-file (string-append bin-directory "/" name "-exec.lisp")))) diff --git a/guix/build/union.scm b/guix/build/union.scm index a2ea72e1f5..18167fa3e3 100644 --- a/guix/build/union.scm +++ b/guix/build/union.scm @@ -47,31 +47,34 @@ (loop (cons file files))))))) (define (file-is-directory? file) - (eq? 'directory (stat:type (stat file)))) + (match (stat file #f) + (#f #f) ;maybe a dangling symlink + (st (eq? 'directory (stat:type st))))) (define (file=? file1 file2) "Return #t if FILE1 and FILE2 are regular files and their contents are identical, #f otherwise." - (let ((st1 (stat file1)) - (st2 (stat file2))) + (let ((st1 (stat file1 #f)) + (st2 (stat file2 #f))) ;; When deduplication is enabled, identical files share the same inode. - (or (= (stat:ino st1) (stat:ino st2)) - (and (eq? (stat:type st1) 'regular) - (eq? (stat:type st2) 'regular) - (= (stat:size st1) (stat:size st2)) - (call-with-input-file file1 - (lambda (port1) - (call-with-input-file file2 - (lambda (port2) - (define len 8192) - (define buf1 (make-bytevector len)) - (define buf2 (make-bytevector len)) - (let loop () - (let ((n1 (get-bytevector-n! port1 buf1 0 len)) - (n2 (get-bytevector-n! port2 buf2 0 len))) - (and (equal? n1 n2) - (or (eof-object? n1) - (loop))))))))))))) + (and st1 st2 + (or (= (stat:ino st1) (stat:ino st2)) + (and (eq? (stat:type st1) 'regular) + (eq? (stat:type st2) 'regular) + (= (stat:size st1) (stat:size st2)) + (call-with-input-file file1 + (lambda (port1) + (call-with-input-file file2 + (lambda (port2) + (define len 8192) + (define buf1 (make-bytevector len)) + (define buf2 (make-bytevector len)) + (let loop () + (let ((n1 (get-bytevector-n! port1 buf1 0 len)) + (n2 (get-bytevector-n! port2 buf2 0 len))) + (and (equal? n1 n2) + (or (eof-object? n1) + (loop)))))))))))))) (define* (union-build output inputs #:key (log-port (current-error-port)) diff --git a/guix/download.scm b/guix/download.scm index 5a25725b49..bed1f502cf 100644 --- a/guix/download.scm +++ b/guix/download.scm @@ -213,7 +213,6 @@ ;; mirrors keeping old versions at the top level "ftp://sunsite.icm.edu.pl/packages/ImageMagick/" ;; mirrors moving old versions to "legacy" - "http://mirrors-au.go-parts.com/mirrors/ImageMagick/" "ftp://mirror.aarnet.edu.au/pub/imagemagick/" "http://mirror.checkdomain.de/imagemagick/" "ftp://ftp.kddlabs.co.jp/graphics/ImageMagick/" @@ -222,9 +221,7 @@ "http://ftp.surfnet.nl/pub/ImageMagick/" "http://mirror.searchdaimon.com/ImageMagick" "ftp://ftp.tpnet.pl/pub/graphics/ImageMagick/" - "http://mirrors-ru.go-parts.com/mirrors/ImageMagick/" "http://mirror.is.co.za/pub/imagemagick/" - "http://mirrors-uk.go-parts.com/mirrors/ImageMagick/" "http://mirrors-usa.go-parts.com/mirrors/ImageMagick/" "ftp://ftp.fifi.org/pub/ImageMagick/" "http://www.imagemagick.org/download/" diff --git a/guix/import/cran.scm b/guix/import/cran.scm index a94051655c..8d963a7475 100644 --- a/guix/import/cran.scm +++ b/guix/import/cran.scm @@ -45,7 +45,12 @@ bioconductor->guix-package recursive-import %cran-updater - %bioconductor-updater)) + %bioconductor-updater + + cran-package? + bioconductor-package? + bioconductor-data-package? + bioconductor-experiment-package?)) ;;; Commentary: ;;; @@ -125,17 +130,19 @@ package definition." ;; The latest Bioconductor release is 3.5. Bioconductor packages should be ;; updated together. -(define %bioconductor-svn-url - (string-append "https://readonly:readonly@" - "hedgehog.fhcrc.org/bioconductor/branches/RELEASE_3_5/" - "madman/Rpacks/")) - +(define (bioconductor-mirror-url name) + (string-append "https://raw.githubusercontent.com/Bioconductor-mirror/" + name "/release-3.5")) -(define (fetch-description base-url name) +(define (fetch-description repository name) "Return an alist of the contents of the DESCRIPTION file for the R package -NAME, or #f in case of failure. NAME is case-sensitive." +NAME in the given REPOSITORY, or #f in case of failure. NAME is +case-sensitive." ;; This API always returns the latest release of the module. - (let ((url (string-append base-url name "/DESCRIPTION"))) + (let ((url (string-append (case repository + ((cran) (string-append %cran-url name)) + ((bioconductor) (bioconductor-mirror-url name))) + "/DESCRIPTION"))) (guard (c ((http-get-error? c) (format (current-error-port) "error: failed to retrieve package information \ @@ -200,17 +207,16 @@ empty list when the FIELD cannot be found." (check "*.f95") (check "*.f"))) -(define (needs-zlib? tarball) - "Return #T if any of the Makevars files in the src directory of the TARBALL -contain a zlib linker flag." +(define (tarball-files-match-pattern? tarball regexp . file-patterns) + "Return #T if any of the files represented by FILE-PATTERNS in the TARBALL +match the given REGEXP." (call-with-temporary-directory (lambda (dir) - (let ((pattern (make-regexp "-lz"))) + (let ((pattern (make-regexp regexp))) (parameterize ((current-error-port (%make-void-port "rw+"))) - (system* "tar" - "xf" tarball "-C" dir - "--wildcards" - "*/src/Makevars*" "*/src/configure*" "*/configure*")) + (apply system* "tar" + "xf" tarball "-C" dir + `("--wildcards" ,@file-patterns))) (any (lambda (file) (call-with-input-file file (lambda (port) @@ -219,10 +225,23 @@ contain a zlib linker flag." (cond ((eof-object? line) #f) ((regexp-exec pattern line) #t) - (else (loop))))))) - #t) + (else (loop)))))))) (find-files dir)))))) +(define (needs-zlib? tarball) + "Return #T if any of the Makevars files in the src directory of the TARBALL +contain a zlib linker flag." + (tarball-files-match-pattern? + tarball "-lz" + "*/src/Makevars*" "*/src/configure*" "*/configure*")) + +(define (needs-pkg-config? tarball) + "Return #T if any of the Makevars files in the src directory of the TARBALL +reference the pkg-config tool." + (tarball-files-match-pattern? + tarball "pkg-config" + "*/src/Makevars*" "*/src/configure*" "*/configure*")) + (define (description->package repository meta) "Return the `package' s-expression for an R package published on REPOSITORY from the alist META, which was derived from the R package's DESCRIPTION file." @@ -272,11 +291,12 @@ from the alist META, which was derived from the R package's DESCRIPTION file." (build-system r-build-system) ,@(maybe-inputs sysdepends) ,@(maybe-inputs (map guix-name propagate) 'propagated-inputs) - ,@(if (needs-fortran? tarball) - `((native-inputs (,'quasiquote - ,(list "gfortran" - (list 'unquote 'gfortran))))) - '()) + ,@(maybe-inputs + `(,@(if (needs-fortran? tarball) + '("gfortran") '()) + ,@(if (needs-pkg-config? tarball) + '("pkg-config") '())) + 'native-inputs) (home-page ,(if (string-null? home-page) (string-append base-url name) home-page)) @@ -291,11 +311,8 @@ from the alist META, which was derived from the R package's DESCRIPTION file." (lambda* (package-name #:optional (repo 'cran)) "Fetch the metadata for PACKAGE-NAME from REPO and return the `package' s-expression corresponding to that package, or #f on failure." - (let* ((url (case repo - ((cran) %cran-url) - ((bioconductor) %bioconductor-svn-url))) - (module-meta (fetch-description url package-name))) - (and=> module-meta (cut description->package repo <>)))))) + (and=> (fetch-description repo package-name) + (cut description->package repo <>))))) (define* (recursive-import package-name #:optional (repo 'cran)) "Generate a stream of package expressions for PACKAGE-NAME and all its @@ -386,7 +403,7 @@ dependencies." (package->upstream-name package)) (define meta - (fetch-description %cran-url upstream-name)) + (fetch-description 'cran upstream-name)) (and meta (let ((version (assoc-ref meta "Version"))) @@ -403,7 +420,7 @@ dependencies." (package->upstream-name package)) (define meta - (fetch-description %bioconductor-svn-url upstream-name)) + (fetch-description 'bioconductor upstream-name)) (and meta (let ((version (assoc-ref meta "Version"))) @@ -430,8 +447,13 @@ dependencies." "Return true if PACKAGE is an R package from Bioconductor." (let ((predicate (lambda (uri) (and (string-prefix? "http://bioconductor.org" uri) - ;; Data packages are not listed in SVN - (not (string-contains uri "/data/annotation/")))))) + ;; Data packages are neither listed in SVN nor on + ;; the Github mirror, so we have to exclude them + ;; from the set of bioconductor packages that can be + ;; updated automatically. + (not (string-contains uri "/data/annotation/")) + ;; Experiment packages are in a separate repository. + (not (string-contains uri "/data/experiment/")))))) (and (string-prefix? "r-" (package-name package)) (match (and=> (package-source package) origin-uri) ((? string? uri) @@ -453,6 +475,19 @@ dependencies." (any predicate uris)) (_ #f))))) +(define (bioconductor-experiment-package? package) + "Return true if PACKAGE is an R experiment package from Bioconductor." + (let ((predicate (lambda (uri) + (and (string-prefix? "http://bioconductor.org" uri) + (string-contains uri "/data/experiment/"))))) + (and (string-prefix? "r-" (package-name package)) + (match (and=> (package-source package) origin-uri) + ((? string? uri) + (predicate uri)) + ((? list? uris) + (any predicate uris)) + (_ #f))))) + (define %cran-updater (upstream-updater (name 'cran) diff --git a/guix/licenses.scm b/guix/licenses.scm index a95f89a7bf..8396b1a3c6 100644 --- a/guix/licenses.scm +++ b/guix/licenses.scm @@ -43,6 +43,7 @@ artistic2.0 clarified-artistic copyleft-next cpl1.0 + edl1.0 epl1.0 expat freetype @@ -231,6 +232,11 @@ at URI, which may be a file:// URI pointing the package's tree." "http://directory.fsf.org/wiki/License:CPLv1.0" "https://www.gnu.org/licenses/license-list#CommonPublicLicense10")) +(define edl1.0 + (license "EDL 1.0" + "http://directory.fsf.org/wiki/License:EDLv1.0" + "https://eclipse.org/org/documents/edl-v10.php")) + (define epl1.0 (license "EPL 1.0" "http://directory.fsf.org/wiki/License:EPLv1.0" diff --git a/guix/modules.scm b/guix/modules.scm index 8c63f21a97..24b5903579 100644 --- a/guix/modules.scm +++ b/guix/modules.scm @@ -95,11 +95,16 @@ depends on." (('gnu _ ...) #t) (_ #f))) +(define %source-less-modules + ;; These are modules that have no corresponding source files or a source + ;; file different from what you'd expect. + '((system syntax) ;2.0, defined in boot-9 + (ice-9 ports internal) ;2.2, defined in (ice-9 ports) + (system syntax internal))) ;2.2, defined in boot-9 + (define* (source-module-dependencies module #:optional (load-path %load-path)) "Return the modules used by MODULE by looking at its source code." - ;; The (system syntax) module is a special-case because it has no - ;; corresponding source file (as of Guile 2.0.) - (if (equal? module '(system syntax)) + (if (member module %source-less-modules) '() (module-file-dependencies (search-path load-path diff --git a/guix/profiles.scm b/guix/profiles.scm index eb172ef450..6733f105e3 100644 --- a/guix/profiles.scm +++ b/guix/profiles.scm @@ -957,6 +957,7 @@ the entries in MANIFEST." #~(begin (use-modules (guix build utils) (srfi srfi-1) + (srfi srfi-19) (srfi srfi-26)) (define entries @@ -1011,16 +1012,23 @@ the entries in MANIFEST." (mkdir-p man-directory) (setenv "MANPATH" (string-join entries ":")) - (format #t "creating manual page database for ~a packages...~%" + (format #t "Creating manual page database for ~a packages... " (length entries)) (force-output) - - (zero? (system* #+(file-append man-db "/bin/mandb") - "--quiet" "--create" - "-C" "man_db.conf")))) + (let* ((start-time (current-time)) + (exit-status (system* #+(file-append man-db "/bin/mandb") + "--quiet" "--create" + "-C" "man_db.conf")) + (duration (time-difference (current-time) start-time))) + (format #t "done in ~,3f s~%" + (+ (time-second duration) + (* (time-nanosecond duration) (expt 10 -9)))) + (force-output) + (zero? exit-status)))) (gexp->derivation "manual-database" build #:modules '((guix build utils) + (srfi srfi-19) (srfi srfi-26)) #:local-build? #t)) diff --git a/guix/scripts/lint.scm b/guix/scripts/lint.scm index f2720f669e..6f30d371a2 100644 --- a/guix/scripts/lint.scm +++ b/guix/scripts/lint.scm @@ -255,7 +255,8 @@ of a package, and INPUT-NAMES, a list of package specifications such as ;; native inputs. (let ((inputs (package-inputs package)) (input-names - '("pkg-config" + '("pkg-config" + "cmake" "extra-cmake-modules" "glib:bin" "intltool" diff --git a/guix/scripts/pack.scm b/guix/scripts/pack.scm index 1595be1f52..1273c09f54 100644 --- a/guix/scripts/pack.scm +++ b/guix/scripts/pack.scm @@ -35,7 +35,7 @@ #:autoload (gnu packages base) (tar) #:autoload (gnu packages package-management) (guix) #:autoload (gnu packages gnupg) (libgcrypt) - #:autoload (gnu packages guile) (guile-json) + #:autoload (gnu packages guile) (guile2.0-json guile-json) #:use-module (srfi srfi-1) #:use-module (srfi srfi-9) #:use-module (srfi srfi-37) @@ -217,6 +217,13 @@ the image." (define %libgcrypt #+(file-append libgcrypt "/lib/libgcrypt")))))) + (define json + ;; Pick the guile-json package that corresponds to the Guile used to build + ;; derivations. + (if (string-prefix? "2.0" (package-version (default-guile))) + guile2.0-json + guile-json)) + (define build (with-imported-modules `(,@(source-module-closure '((guix docker)) #:select? not-config?) @@ -224,7 +231,7 @@ the image." #~(begin ;; Guile-JSON is required by (guix docker). (add-to-load-path - (string-append #$guile-json "/share/guile/site/" + (string-append #+json "/share/guile/site/" (effective-version))) (use-modules (guix docker) (srfi srfi-19)) diff --git a/guix/scripts/publish.scm b/guix/scripts/publish.scm index 8da75cb825..db7f6a957e 100644 --- a/guix/scripts/publish.scm +++ b/guix/scripts/publish.scm @@ -481,7 +481,8 @@ requested using POOL." (%private-key) #:nar-path nar-path #:compression compression - #:file-size (stat:size (stat nar))) + #:file-size (and=> (stat nar #f) + stat:size)) port)))))) ;; XXX: Declare the 'Guix-Compression' HTTP header, which is in fact for diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm index 9c09767508..5e4574f7c7 100644 --- a/guix/scripts/system.scm +++ b/guix/scripts/system.scm @@ -38,10 +38,10 @@ #:use-module (guix build utils) #:use-module (gnu build install) #:use-module (gnu system) + #:use-module (gnu bootloader) #:use-module (gnu system file-systems) #:use-module (gnu system linux-container) #:use-module (gnu system vm) - #:use-module (gnu system grub) #:use-module (gnu services) #:use-module (gnu services shepherd) #:use-module (gnu services herd) @@ -147,36 +147,45 @@ TARGET, and register them." (map (cut copy-item <> target #:log-port log-port) to-copy)))) -(define (install-grub* grub.cfg device target) - "This is a variant of 'install-grub' with error handling, lifted in -%STORE-MONAD" - (let* ((gc-root (string-append target %gc-roots-directory - "/grub.cfg")) - (temp-gc-root (string-append gc-root ".new")) - (delete-file (lift1 delete-file %store-monad)) - (make-symlink (lift2 switch-symlinks %store-monad)) - (rename (lift2 rename-file %store-monad))) - (mbegin %store-monad - ;; Prepare the symlink to GRUB.CFG to make sure that it's a GC root when - ;; 'install-grub' completes (being a bit paranoid.) - (make-symlink temp-gc-root grub.cfg) - - (munless (false-if-exception (install-grub grub.cfg device target)) +(define* (install-bootloader installer-drv + #:key + bootcfg bootcfg-file + device target) + "Call INSTALLER-DRV with error handling, in %STORE-MONAD." + (with-monad %store-monad + (let* ((gc-root (string-append target %gc-roots-directory + "/bootcfg")) + (temp-gc-root (string-append gc-root ".new")) + (install (and installer-drv + (derivation->output-path installer-drv))) + (bootcfg (derivation->output-path bootcfg))) + ;; Prepare the symlink to bootloader config file to make sure that it's + ;; a GC root when 'installer-drv' completes (being a bit paranoid.) + (switch-symlinks temp-gc-root bootcfg) + + (unless (false-if-exception + (begin + (install-boot-config bootcfg bootcfg-file target) + (when install + (save-load-path-excursion (primitive-load install))))) (delete-file temp-gc-root) - (leave (G_ "failed to install GRUB on device '~a'~%") device)) + (leave (G_ "failed to install bootloader on device ~a '~a'~%") install device)) - ;; Register GRUB.CFG as a GC root so that its dependencies (background - ;; image, font, etc.) are not reclaimed. - (rename temp-gc-root gc-root)))) + ;; Register bootloader config file as a GC root so that its dependencies + ;; (background image, font, etc.) are not reclaimed. + (rename-file temp-gc-root gc-root) + (return #t)))) (define* (install os-drv target #:key (log-port (current-output-port)) - grub? grub.cfg device) - "Copy the closure of GRUB.CFG, which includes the output of OS-DRV, to + bootloader-installer install-bootloader? + bootcfg bootcfg-file + device) + "Copy the closure of BOOTCFG, which includes the output of OS-DRV, to directory TARGET. TARGET must be an absolute directory name since that's what 'guix-register' expects. -When GRUB? is true, install GRUB on DEVICE, using GRUB.CFG." +When INSTALL-BOOTLOADER? is true, install bootloader on DEVICE, using BOOTCFG." (define (maybe-copy to-copy) (with-monad %store-monad (if (string=? target "/") @@ -205,16 +214,21 @@ the ownership of '~a' may be incorrect!~%") (populate (lift2 populate-root-file-system %store-monad))) (mbegin %store-monad - ;; Copy the closure of GRUB.CFG, which includes OS-DIR, GRUB's - ;; background image and so on. - (maybe-copy grub.cfg) + ;; Copy the closure of BOOTCFG, which includes OS-DIR, + ;; eventual background image and so on. + (maybe-copy + (derivation->output-path bootcfg)) ;; Create a bunch of additional files. (format log-port "populating '~a'...~%" target) (populate os-dir target) - (mwhen grub? - (install-grub* grub.cfg device target))))) + (mwhen install-bootloader? + (install-bootloader bootloader-installer + #:bootcfg bootcfg + #:bootcfg-file bootcfg-file + #:device device + #:target target))))) ;;; @@ -398,49 +412,58 @@ connection to the store." ;;; (define (switch-to-system-generation store spec) "Switch the system profile to the generation specified by SPEC, and -re-install grub with a grub configuration file that uses the specified system +re-install bootloader with a configuration file that uses the specified system generation as its default entry. STORE is an open connection to the store." (let ((number (relative-generation-spec->number %system-profile spec))) (if number (begin - (reinstall-grub store number) + (reinstall-bootloader store number) (switch-to-generation* %system-profile number)) (leave (G_ "cannot switch to system generation '~a'~%") spec)))) -(define (reinstall-grub store number) - "Re-install grub for existing system profile generation NUMBER. STORE is an -open connection to the store." +(define* (system-bootloader-name #:optional (system %system-profile)) + "Return the bootloader name stored in SYSTEM's \"parameters\" file." + (let ((params (unless-file-not-found + (read-boot-parameters-file system)))) + (boot-parameters-boot-name params))) + +(define (reinstall-bootloader store number) + "Re-install bootloader for existing system profile generation NUMBER. +STORE is an open connection to the store." (let* ((generation (generation-file-name %system-profile number)) (params (unless-file-not-found (read-boot-parameters-file generation))) - (root-device (boot-parameters-root-device params)) - ;; We don't currently keep track of past menu entries' details. The - ;; default values will allow the system to boot, even if they differ - ;; from the actual past values for this generation's entry. - (grub-config (grub-configuration (device root-device))) + ;; Detect the bootloader used in %system-profile. + (bootloader (lookup-bootloader-by-name (system-bootloader-name))) + + ;; Use the detected bootloader with default configuration. + ;; It will be enough to allow the system to boot. + (bootloader-config (bootloader-configuration + (bootloader bootloader))) + ;; Make the specified system generation the default entry. (entries (profile-boot-parameters %system-profile (list number))) (old-generations (delv number (generation-numbers %system-profile))) - (old-entries (profile-boot-parameters %system-profile old-generations)) - (grub.cfg (run-with-store store - (grub-configuration-file grub-config - entries - #:old-entries old-entries)))) - (show-what-to-build store (list grub.cfg)) - (build-derivations store (list grub.cfg)) - ;; This is basically the same as install-grub*, but for now we avoid - ;; re-installing the GRUB boot loader itself onto a device, mainly because - ;; we don't in general have access to the same version of the GRUB package - ;; which was used when installing this other system generation. - (let* ((grub.cfg-path (derivation->output-path grub.cfg)) - (gc-root (string-append %gc-roots-directory "/grub.cfg")) - (temp-gc-root (string-append gc-root ".new"))) - (switch-symlinks temp-gc-root grub.cfg-path) - (unless (false-if-exception (install-grub-config grub.cfg-path "/")) - (delete-file temp-gc-root) - (leave (G_ "failed to re-install GRUB configuration file: '~a'~%") - grub.cfg-path)) - (rename-file temp-gc-root gc-root)))) + (old-entries (profile-boot-parameters + %system-profile old-generations))) + (run-with-store store + (mlet* %store-monad + ((bootcfg ((bootloader-configuration-file-generator bootloader) + bootloader-config entries + #:old-entries old-entries)) + (bootcfg-file -> (bootloader-configuration-file bootloader)) + (target -> "/") + (drvs -> (list bootcfg))) + (mbegin %store-monad + (show-what-to-build* drvs) + (built-derivations drvs) + ;; Only install bootloader configuration file. Thus, no installer + ;; nor device is provided here. + (install-bootloader #f + #:bootcfg bootcfg + #:bootcfg-file bootcfg-file + #:device #f + #:target target)))))) ;;; @@ -498,6 +521,7 @@ list of services." (let* ((generation (generation-file-name profile number)) (params (read-boot-parameters-file generation)) (label (boot-parameters-label params)) + (boot-name (boot-parameters-boot-name params)) (root (boot-parameters-root-device params)) (root-device (if (bytevector? root) (uuid->string root) @@ -508,6 +532,7 @@ list of services." (format #t (G_ " canonical file name: ~a~%") (readlink* generation)) ;; TRANSLATORS: Please preserve the two-space indentation. (format #t (G_ " label: ~a~%") label) + (format #t (G_ " bootloader: ~a~%") boot-name) (format #t (G_ " root device: ~a~%") root-device) (format #t (G_ " kernel: ~a~%") kernel)))) @@ -570,17 +595,29 @@ PATTERN, a string. When PATTERN is #f, display all the system generations." (warning (G_ "Consider running 'guix pull' before 'reconfigure'.~%")) (warning (G_ "Failing to do that may downgrade your system!~%")))) +(define (bootloader-installer-derivation installer + bootloader device target) + "Return a file calling INSTALLER gexp with given BOOTLOADER, DEVICE +and TARGET arguments." + (with-monad %store-monad + (gexp->file "bootloader-installer" + (with-imported-modules '((guix build utils)) + #~(begin + (use-modules (guix build utils)) + (#$installer #$bootloader #$device #$target)))))) + (define* (perform-action action os - #:key bootloader? dry-run? derivations-only? + #:key install-bootloader? + dry-run? derivations-only? use-substitutes? device target image-size full-boot? (mappings '()) (gc-root #f)) - "Perform ACTION for OS. GRUB? specifies whether to install GRUB; DEVICE is -the target devices for GRUB; TARGET is the target root directory; IMAGE-SIZE -is the size of the image to be built, for the 'vm-image' and 'disk-image' -actions. FULL-BOOT? is used for the 'vm' action; it determines whether to -boot directly to the kernel or to the bootloader. + "Perform ACTION for OS. INSTALL-BOOTLOADER? specifies whether to install +bootloader; DEVICE is the target devices for bootloader; TARGET is the target +root directory; IMAGE-SIZE is the size of the image to be built, for the +'vm-image' and 'disk-image' actions. FULL-BOOT? is used for the 'vm' action; +it determines whether to boot directly to the kernel or to the bootloader. When DERIVATIONS-ONLY? is true, print the derivation file name(s) without building anything. @@ -598,22 +635,37 @@ output when building a system derivation, such as a disk image." #:image-size image-size #:full-boot? full-boot? #:mappings mappings)) - (grub (package->derivation (grub-configuration-grub - (operating-system-bootloader os)))) - (grub.cfg (if (eq? 'container action) - (return #f) - (operating-system-bootcfg os - (if (eq? 'init action) - '() - (profile-boot-parameters))))) - - ;; For 'init' and 'reconfigure', always build GRUB.CFG, even if - ;; --no-grub is passed, because GRUB.CFG because we then use it as a GC - ;; root. See <http://bugs.gnu.org/21068>. + (bootloader -> (bootloader-configuration-bootloader + (operating-system-bootloader os))) + (bootloader-package + (let ((package (bootloader-package bootloader))) + (if package + (package->derivation package) + (return #f)))) + (bootcfg (if (eq? 'container action) + (return #f) + (operating-system-bootcfg + os + (if (eq? 'init action) + '() + (profile-boot-parameters))))) + (bootcfg-file -> (bootloader-configuration-file bootloader)) + (bootloader-installer + (let ((installer (bootloader-installer bootloader)) + (target (or target "/"))) + (bootloader-installer-derivation installer + bootloader-package + device target))) + + ;; For 'init' and 'reconfigure', always build BOOTCFG, even if + ;; --no-bootloader is passed, because we then use it as a GC root. + ;; See <http://bugs.gnu.org/21068>. (drvs -> (if (memq action '(init reconfigure)) - (if bootloader? - (list sys grub.cfg grub) - (list sys grub.cfg)) + (if (and install-bootloader? bootloader-package) + (list sys bootcfg + bootloader-package + bootloader-installer) + (list sys bootcfg)) (list sys))) (% (if derivations-only? (return (for-each (compose println derivation-file-name) @@ -627,27 +679,25 @@ output when building a system derivation, such as a disk image." (for-each (compose println derivation->output-path) drvs) - ;; Make sure GRUB is accessible. - (when bootloader? - (let ((prefix (derivation->output-path grub))) - (setenv "PATH" - (string-append prefix "/bin:" prefix "/sbin:" - (getenv "PATH"))))) - (case action ((reconfigure) (mbegin %store-monad (switch-to-system os) - (mwhen bootloader? - (install-grub* (derivation->output-path grub.cfg) - device "/")))) + (mwhen install-bootloader? + (install-bootloader bootloader-installer + #:bootcfg bootcfg + #:bootcfg-file bootcfg-file + #:device device + #:target "/")))) ((init) (newline) (format #t (G_ "initializing operating system under '~a'...~%") target) (install sys (canonicalize-path target) - #:grub? bootloader? - #:grub.cfg (derivation->output-path grub.cfg) + #:install-bootloader? install-bootloader? + #:bootcfg bootcfg + #:bootcfg-file bootcfg-file + #:bootloader-installer bootloader-installer #:device device)) (else ;; All we had to do was to build SYS and maybe register an @@ -832,7 +882,7 @@ resulting from command-line parsing." ((first second) second) (_ #f))) (device (and bootloader? - (grub-configuration-device + (bootloader-configuration-device (operating-system-bootloader os))))) (with-store store @@ -861,7 +911,7 @@ resulting from command-line parsing." m) (_ #f)) opts) - #:bootloader? bootloader? + #:install-bootloader? bootloader? #:target target #:device device #:gc-root (assoc-ref opts 'gc-root))))) #:system system)))) diff --git a/guix/ui.scm b/guix/ui.scm index edd04daa81..9e0fa26d19 100644 --- a/guix/ui.scm +++ b/guix/ui.scm @@ -302,6 +302,13 @@ exiting. ARGS is the list of arguments received by the 'throw' handler." (define (initialize-guix) "Perform the usual initialization for stand-alone Guix commands." + ;; By default don't annoy users with deprecation warnings. In practice, + ;; 'define-deprecated' in (ice-9 deprecated) arranges so that those warnings + ;; are emitted at expansion-time only, but there are cases where they could + ;; slip through, for instance when interpreting code. + (unless (getenv "GUILE_WARN_DEPRECATED") + (debug-disable 'warn-deprecated)) + (install-locale) (textdomain %gettext-domain) diff --git a/guix/utils.scm b/guix/utils.scm index 3fefa49607..9bf1cc893f 100644 --- a/guix/utils.scm +++ b/guix/utils.scm @@ -512,7 +512,7 @@ minor version numbers from version-string." (define (compressed-file? file) "Return true if FILE denotes a compressed file." (->bool (member (file-extension file) - '("gz" "bz2" "xz" "lz" "tgz" "tbz2" "zip")))) + '("gz" "bz2" "xz" "lz" "lzma" "tgz" "tbz2" "zip")))) (define (switch-symlinks link target) "Atomically switch LINK, a symbolic link, to point to TARGET. Works diff --git a/tests/profiles.scm b/tests/profiles.scm index d0b1e14a86..093422792f 100644 --- a/tests/profiles.scm +++ b/tests/profiles.scm @@ -50,6 +50,12 @@ (run-with-store %store exp #:guile-for-build (%guile-for-build)))) +(define-syntax-rule (test-equalm name value exp) + (test-equal name + value + (run-with-store %store exp + #:guile-for-build (%guile-for-build)))) + ;; Example manifest entries. (define guile-1.8.8 @@ -366,6 +372,29 @@ get-string-all) "foo!")))))) +(test-equalm "union vs. dangling symlink" ;<https://bugs.gnu.org/26949> + "does-not-exist" + (mlet* %store-monad + ((thing1 -> (dummy-package "dummy" + (build-system trivial-build-system) + (arguments + `(#:guile ,%bootstrap-guile + #:builder + (let ((out (assoc-ref %outputs "out"))) + (mkdir out) + (symlink "does-not-exist" + (string-append out "/dangling")) + #t))))) + (thing2 -> (package (inherit thing1) (name "dummy2"))) + (drv (profile-derivation (packages->manifest + (list thing1 thing2)) + #:hooks '() + #:locales? #f)) + (profile -> (derivation->output-path drv))) + (mbegin %store-monad + (built-derivations (list drv)) + (return (readlink (readlink (string-append profile "/dangling"))))))) + (test-end "profiles") ;;; Local Variables: diff --git a/tests/publish.scm b/tests/publish.scm index 268c324551..31043f71fa 100644 --- a/tests/publish.scm +++ b/tests/publish.scm @@ -98,6 +98,18 @@ (connect conn AF_INET (inet-pton AF_INET "127.0.0.1") port)) (loop))))) +(define (wait-for-file file) + ;; Wait until FILE shows up. + (let loop ((i 20)) + (cond ((file-exists? file) + #t) + ((zero? i) + (error "file didn't show up" file)) + (else + (pk 'wait-for-file file) + (sleep 1) + (loop (- i 1)))))) + ;; Wait until the two servers are ready. (wait-until-ready 6789) @@ -331,14 +343,6 @@ FileSize: ~a~%" 200) ;nar/… (call-with-temporary-directory (lambda (cache) - (define (wait-for-file file) - (let loop ((i 20)) - (or (file-exists? file) - (begin - (pk 'wait-for-file file) - (sleep 1) - (loop (- i 1)))))) - (let ((thread (with-separate-output-ports (call-with-new-thread (lambda () @@ -384,4 +388,55 @@ FileSize: ~a~%" (stat:size (stat nar))) (response-code uncompressed))))))))) +(unless (zlib-available?) + (test-skip 1)) +(let ((item (add-text-to-store %store "fake-compressed-thing.tar.gz" + (random-text)))) + (test-equal "with cache, uncompressed" + (list #f + `(("StorePath" . ,item) + ("URL" . ,(string-append "nar/" (basename item))) + ("Compression" . "none")) + 200 ;nar/… + (path-info-nar-size + (query-path-info %store item)) ;FileSize + 404) ;nar/gzip/… + (call-with-temporary-directory + (lambda (cache) + (let ((thread (with-separate-output-ports + (call-with-new-thread + (lambda () + (guix-publish "--port=6796" "-C2" + (string-append "--cache=" cache))))))) + (wait-until-ready 6796) + (let* ((base "http://localhost:6796/") + (part (store-path-hash-part item)) + (url (string-append base part ".narinfo")) + (cached (string-append cache "/none/" + (basename item) ".narinfo")) + (nar (string-append cache "/none/" + (basename item) ".nar")) + (response (http-get url))) + (and (= 404 (response-code response)) + + (wait-for-file cached) + (let* ((body (http-get-port url)) + (compressed (http-get (string-append base "nar/gzip/" + (basename item)))) + (uncompressed (http-get (string-append base "nar/" + (basename item)))) + (narinfo (recutils->alist body))) + (list (file-exists? nar) + (filter (lambda (item) + (match item + (("Compression" . _) #t) + (("StorePath" . _) #t) + (("URL" . _) #t) + (_ #f))) + narinfo) + (response-code uncompressed) + (string->number + (assoc-ref narinfo "FileSize")) + (response-code compressed)))))))))) + (test-end "publish") |