diff --git a/Makefile.am b/Makefile.am index 817421069b..affeb8dda7 100644 --- a/Makefile.am +++ b/Makefile.am @@ -133,6 +133,7 @@ MODULES = \ guix/build/utils.scm \ guix/build/union.scm \ guix/build/profiles.scm \ + guix/build/compile.scm \ guix/build/pull.scm \ guix/build/rpath.scm \ guix/build/cvs.scm \ diff --git a/build-aux/build-self.scm b/build-aux/build-self.scm index 4933e02712..ed8ff5f4ce 100644 --- a/build-aux/build-self.scm +++ b/build-aux/build-self.scm @@ -245,6 +245,7 @@ Please upgrade to an intermediate version first, for instance with: (gexp->derivation "guix-latest" builder #:modules '((guix build pull) (guix build utils) + (guix build compile) ;; Closure of (guix modules). (guix modules) diff --git a/build-aux/compile-all.scm b/build-aux/compile-all.scm index fe25c5d065..c7ca5a6f67 100644 --- a/build-aux/compile-all.scm +++ b/build-aux/compile-all.scm @@ -17,21 +17,13 @@ ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Guix. If not, see . -(use-modules (system base target) - (system base message) - (ice-9 match) +(use-modules (ice-9 match) (ice-9 threads) + (srfi srfi-1) + (guix build compile) (guix build utils)) -(define warnings - ;; FIXME: 'format' is missing because it reports "non-literal format - ;; strings" due to the fact that we use 'G_' instead of '_'. We'll need - ;; help from Guile to solve this. - '(unsupported-warning unbound-variable arity-mismatch - macro-use-before-definition)) ;new in 2.2 - (define host (getenv "host")) - (define srcdir (getenv "srcdir")) (define (relative-file file) @@ -53,61 +45,38 @@ (or (not (file-exists? go)) (file-mtimemodule file) - (let* ((relative (relative-file file)) - (module-path (string-drop-right relative 4))) - (map string->symbol - (string-split module-path #\/)))) - -;;; To work around (FIXME), we want to load all -;;; files to be compiled first. We do this via resolve-interface so that the -;;; top-level of each file (module) is only executed once. -(define (load-module-file file) - (let ((module (file->module file))) - (format #t " LOAD ~a~%" module) - (resolve-interface module))) - -(cond-expand - (guile-2.2 (use-modules (language tree-il optimize) - (language cps optimize))) - (else #f)) - -(define %default-optimizations - ;; Default optimization options (equivalent to -O2 on Guile 2.2). - (cond-expand - (guile-2.2 (append (tree-il-default-optimization-options) - (cps-default-optimization-options))) - (else '()))) - -(define %lightweight-optimizations - ;; Lightweight optimizations (like -O0, but with partial evaluation). - (let loop ((opts %default-optimizations) - (result '())) - (match opts - (() (reverse result)) - ((#:partial-eval? _ rest ...) - (loop rest `(#t #:partial-eval? ,@result))) - ((kw _ rest ...) - (loop rest `(#f ,kw ,@result)))))) - -(define (optimization-options file) - (if (string-contains file "gnu/packages/") - %lightweight-optimizations ;build faster - '())) - -(define (compile-file* file output-mutex) - (let ((go (scm->go file))) - (with-mutex output-mutex - (format #t " GUILEC ~a~%" go) - (force-output)) - (mkdir-p (dirname go)) - (with-fluids ((*current-warning-prefix* "")) - (with-target host - (lambda () - (compile-file file - #:output-file go - #:opts `(#:warnings ,warnings - ,@(optimization-options file)))))))) +(define* (parallel-job-count #:optional (flags (getenv "MAKEFLAGS"))) + "Return the number of parallel jobs as determined by FLAGS, the flags passed +to 'make'." + (match flags + (#f (current-processor-count)) + (flags + (let ((initial-flags (string-tokenize flags))) + (let loop ((flags initial-flags)) + (match flags + (() + ;; Note: GNU make prior to version 4.2 would hide "-j" flags from + ;; $MAKEFLAGS. Thus, check for a "--jobserver" flag here and + ;; assume we're using all cores if specified. + (if (any (lambda (flag) + (string-prefix? "--jobserver" flag)) + initial-flags) + (current-processor-count) ;GNU make < 4.2 + 1)) ;sequential make + (("-j" (= string->number count) _ ...) + (if (integer? count) + count + (current-processor-count))) + ((head tail ...) + (if (string-prefix? "-j" head) + (match (string-drop head 2) + ("" + (current-processor-count)) + ((= string->number count) + (if (integer? count) + count + (current-processor-count)))) + (loop tail))))))))) ;; Install a SIGINT handler to give unwind handlers in 'compile-file' an ;; opportunity to run upon SIGINT and to remove temporary output files. @@ -117,16 +86,14 @@ (match (command-line) ((_ . files) - (let ((files (filter file-needs-compilation? files))) - (for-each load-module-file files) - (let ((mutex (make-mutex))) - ;; Make sure compilation related modules are loaded before starting to - ;; compile files in parallel. - (compile #f) - (par-for-each (lambda (file) - (compile-file* file mutex)) - files))))) - -;;; Local Variables: -;;; eval: (put 'with-target 'scheme-indent-function 1) -;;; End: + (compile-files srcdir (getcwd) + (filter file-needs-compilation? files) + #:workers (parallel-job-count) + #:host host + #:report-load (lambda (file total completed) + (when file + (format #t " LOAD ~a~%" file))) + #:report-compilation (lambda (file total completed) + (when file + (format #t " GUILEC ~a~%" + (scm->go file))))))) diff --git a/doc/guix.texi b/doc/guix.texi index 7d7d556697..d7fabe9599 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -4990,6 +4990,34 @@ as in: This is the declarative counterpart of @code{text-file*}. @end deffn +@deffn {Scheme Procedure} file-union @var{name} @var{files} +Return a @code{} that builds a directory containing all of @var{files}. +Each item in @var{files} must be a two-element list where the first element is the +file name to use in the new directory, and the second element is a gexp +denoting the target file. Here's an example: + +@example +(file-union "etc" + `(("hosts" ,(plain-file "hosts" + "127.0.0.1 localhost")) + ("bashrc" ,(plain-file "bashrc" + "alias ls='ls --color'")))) +@end example + +This yields an @code{etc} directory containing these two files. +@end deffn + +@deffn {Scheme Procedure} directory-union @var{name} @var{things} +Return a directory that is the union of @var{things}, where @var{things} is a list of +file-like objects denoting directories. For example: + +@example +(directory-union "guile+emacs" (list guile emacs)) +@end example + +yields a directory that is the union of the @code{guile} and @code{emacs} packages. +@end deffn + @deffn {Scheme Procedure} file-append @var{obj} @var{suffix} @dots{} Return a file-like object that expands to the concatenation of @var{obj} and @var{suffix}, where @var{obj} is a lowerable object and each @@ -9790,35 +9818,112 @@ Return a service that runs the Guix build daemon according to @var{config}. @end deffn -@cindex udev-service -@cindex udev-rule -@deffn {Scheme Procedure} udev-service [#:udev @var{udev}] [#:rules @var{'()}] +@deffn {Scheme Procedure} udev-service [#:udev @var{eudev} #:rules @code{'()}] Run @var{udev}, which populates the @file{/dev} directory dynamically. -Additional udev rules can be provided as a list of files through the -@var{rules} variable. The procedure @var{udev-rule} simplifies the -creation of these rule files. +udev rules can be provided as a list of files through the @var{rules} +variable. The procedures @var{udev-rule} and @var{file->udev-rule} from +@code{(gnu services base)} simplify the creation of such rule files. + +@deffn {Scheme Procedure} udev-rule [@var{file-name} @var{contents}] +Return a udev-rule file named @var{file-name} containing the rules +defined by the @var{contents} literal. In the following example, a rule for a USB device is defined to be -stored in the file @file{90-usb-thing.rules}, and the default -@var{udev-service} is extended with it. The rule runs a script upon -detecting a USB device with a given product identifier. +stored in the file @file{90-usb-thing.rules}. The rule runs a script +upon detecting a USB device with a given product identifier. @example (define %example-udev-rule - (udev-rule "90-usb-thing.rules" - "ACTION==\"add\", SUBSYSTEM==\"usb\", ATTR@{product@}==\"Example\", RUN+=\"/path/to/script\"")) - -(operating-system - ;; @dots{} - (services (modify-services %desktop-services - (udev-service-type config => - (udev-configuration (inherit config) - (rules (append (udev-configuration-rules config) - (list %example-udev-rule)))))))) + (udev-rule + "90-usb-thing.rules" + (string-append "ACTION==\"add\", SUBSYSTEM==\"usb\", " + "ATTR@{product@}==\"Example\", " + "RUN+=\"/path/to/script\""))) @end example @end deffn -@deffn {Scheme Procedure} urandom-seed-service @var{#f} +Here we show how the default @var{udev-service} can be extended with it. + +@example +(operating-system + ;; @dots{} + (services + (modify-services %desktop-services + (udev-service-type config => + (udev-configuration (inherit config) + (rules (append (udev-configuration-rules config) + (list %example-udev-rule)))))))) +@end example + +@deffn {Scheme Procedure} file->udev-rule [@var{file-name} @var{file}] +Return a udev file named @var{file-name} containing the rules defined +within @var{file}, a file-like object. + +The following example showcases how we can use an existing rule file. + +@example +(use-modules (guix download) ;for url-fetch + (guix packages) ;for origin + ;; @dots{}) + +(define %android-udev-rules + (file->udev-rule + "51-android-udev.rules" + (let ((version "20170910")) + (origin + (method url-fetch) + (uri (string-append "https://raw.githubusercontent.com/M0Rf30/" + "android-udev-rules/" version "/51-android.rules")) + (sha256 + (base32 "0lmmagpyb6xsq6zcr2w1cyx9qmjqmajkvrdbhjx32gqf1d9is003")))))) +@end example +@end deffn + +Additionally, Guix package definitions can be included in @var{rules} in +order to extend the udev rules with the definitions found under their +@file{lib/udev/rules.d} sub-directory. In lieu of the previous +@var{file->udev-rule} example, we could have used the +@var{android-udev-rules} package which exists in Guix in the @code{(gnu +packages android)} module. + +The following example shows how to use the @var{android-udev-rules} +package so that the Android tool @command{adb} can detect devices +without root privileges. It also details how to create the +@code{adbusers} group, which is required for the proper functioning of +the rules defined within the @var{android-udev-rules} package. To +create such a group, we must define it both as part of the +@var{supplementary-groups} of our @var{user-account} declaration, as +well as in the @var{groups} field of the @var{operating-system} record. + +@example +(use-modules (gnu packages android) ;for android-udev-rules + (gnu system shadow) ;for user-group + ;; @dots{}) + +(operating-system + ;; @dots{} + (users (cons (user-acount + ;; @dots{} + (supplementary-groups + '("adbusers" ;for adb + "wheel" "netdev" "audio" "video")) + ;; @dots{}))) + + (groups (cons (user-group (system? #t) (name "adbusers")) + %base-groups)) + + ;; @dots{} + + (services + (modify-services %desktop-services + (udev-service-type config => + (udev-configuration (inherit config) + (rules (cons* android-udev-rules + (udev-configuration-rules config)))))))) +@end example +@end deffn + +@deffn {Scheme Procedure} urandom-seed-service Save some entropy in @var{%random-seed-file} to seed @file{/dev/urandom} when rebooting. @end deffn @@ -9930,7 +10035,7 @@ to add @var{device} to the kernel's entropy pool. The service will fail if @cindex session limits @cindex ulimit @cindex priority -@deffn {Scheme Procedure} pam-limits-service [#:limits @var{limits}] +@deffn {Scheme Procedure} pam-limits-service [#:limits @code{'()}] Return a service that installs a configuration file for the @uref{http://linux-pam.org/Linux-PAM-html/sag-pam_limits.html, diff --git a/gnu/local.mk b/gnu/local.mk index 5639db1f75..060357ea8f 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -662,6 +662,7 @@ dist_patch_DATA = \ %D%/packages/patches/glibc-CVE-2017-1000366-pt1.patch \ %D%/packages/patches/glibc-CVE-2017-1000366-pt2.patch \ %D%/packages/patches/glibc-CVE-2017-1000366-pt3.patch \ + %D%/packages/patches/glibc-CVE-2017-15670-15671.patch \ %D%/packages/patches/glibc-bootstrap-system.patch \ %D%/packages/patches/glibc-ldd-x86_64.patch \ %D%/packages/patches/glibc-locales.patch \ @@ -729,6 +730,7 @@ dist_patch_DATA = \ %D%/packages/patches/hydra-disable-darcs-test.patch \ %D%/packages/patches/icecat-avoid-bundled-libraries.patch \ %D%/packages/patches/icu4c-CVE-2017-7867-CVE-2017-7868.patch \ + %D%/packages/patches/icu4c-CVE-2017-14952.patch \ %D%/packages/patches/icu4c-reset-keyword-list-iterator.patch \ %D%/packages/patches/id3lib-CVE-2007-4460.patch \ %D%/packages/patches/ilmbase-fix-tests.patch \ @@ -866,6 +868,9 @@ dist_patch_DATA = \ %D%/packages/patches/mozjs38-version-detection.patch \ %D%/packages/patches/mumps-build-parallelism.patch \ %D%/packages/patches/mupdf-build-with-openjpeg-2.1.patch \ + %D%/packages/patches/mupdf-CVE-2017-14685.patch \ + %D%/packages/patches/mupdf-CVE-2017-14686.patch \ + %D%/packages/patches/mupdf-CVE-2017-14687.patch \ %D%/packages/patches/mupdf-CVE-2017-15587.patch \ %D%/packages/patches/mupen64plus-ui-console-notice.patch \ %D%/packages/patches/mutt-store-references.patch \ diff --git a/gnu/packages/animation.scm b/gnu/packages/animation.scm index faa0d17230..952d3bab0d 100644 --- a/gnu/packages/animation.scm +++ b/gnu/packages/animation.scm @@ -19,6 +19,7 @@ (define-module (gnu packages animation) #:use-module (guix packages) #:use-module (guix download) + #:use-module (guix git-download) #:use-module (guix utils) #:use-module ((guix licenses) #:prefix license:) #:use-module (guix build-system gnu) @@ -34,6 +35,8 @@ #:use-module (gnu packages image) #:use-module (gnu packages imagemagick) #:use-module (gnu packages pkg-config) + #:use-module (gnu packages pulseaudio) + #:use-module (gnu packages qt) #:use-module (gnu packages video)) (define-public etl @@ -185,3 +188,71 @@ be capable of producing feature-film quality animation. It eliminates the need for tweening, preventing the need to hand-draw each frame. This package contains the graphical user interface for synfig.") (license license:gpl3+))) + +(define-public papagayo + (let ((commit "e143684b30e59fe4a554f965cb655d23cbe93ee7") + (revision "1")) + (package + (name "papagayo") + (version (string-append "2.0b1-" revision "." (string-take commit 9))) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/LostMoho/Papagayo.git") + (commit commit))) + (sha256 + (base32 + "1p9gffjhbph34jhrvgpg93yha75bf88vkvlnk06x1r9601ph5321")) + (modules '((guix build utils))) + ;; Delete bundled libsndfile sources. + (snippet + '(begin + (delete-file-recursively "libsndfile_1.0.19") + (delete-file-recursively "libsndfile_1.0.25") + #t)))) + (build-system gnu-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (replace 'configure + (lambda* (#:key inputs outputs #:allow-other-keys) + (let ((libsndfile (assoc-ref inputs "libsndfile"))) + ;; Do not use bundled libsndfile sources + (substitute* "Papagayo.pro" + (("else \\{") + (string-append "\nINCLUDEPATH += " libsndfile + "/include" + "\nLIBS +=" libsndfile + "/lib/libsndfile.so\n" + "win32 {")))) + (zero? (system* "qmake" + (string-append "DESTDIR=" + (assoc-ref outputs "out") + "/bin"))))) + ;; Ensure that all required Qt plugins are found at runtime. + (add-after 'install 'wrap-executable + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (qt '("qt" "qtmultimedia"))) + (wrap-program (string-append out "/bin/Papagayo") + `("QT_PLUGIN_PATH" ":" prefix + ,(map (lambda (label) + (string-append (assoc-ref inputs label) + "/lib/qt5/plugins/")) + qt))) + #t)))))) + (inputs + `(("qt" ,qtbase) + ("qtmultimedia" ,qtmultimedia) + ("libsndfile" ,libsndfile))) + (native-inputs + `(("qttools" ,qttools))) + (home-page "http://www.lostmarble.com/papagayo/") + (synopsis "Lip-syncing for animations") + (description + "Papagayo is a lip-syncing program designed to help you line up +phonemes with the actual recorded sound of actors speaking. Papagayo makes it +easy to lip sync animated characters by making the process very simple – just +type in the words being spoken, then drag the words on top of the sound’s +waveform until they line up with the proper sounds.") + (license license:gpl3+)))) diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm index aaac1c357e..35b60511bc 100644 --- a/gnu/packages/audio.scm +++ b/gnu/packages/audio.scm @@ -1065,20 +1065,35 @@ PS, and DAB+.") (define-public faust-2 (package (inherit faust) - (version "2.0.a51") + (version "2.1.0") (source (origin - (method url-fetch) - (uri (string-append - "mirror://sourceforge/faudiostream/faust-" version ".tgz")) + (method git-fetch) + (uri (git-reference + (url "https://github.com/grame-cncm/faust.git") + (commit (string-append "v" + (string-map (lambda (c) + (if (char=? c #\.) #\- c)) + version))))) (sha256 (base32 - "1yryjqfqmxs7lxy95hjgmrncvl9kig3rcsmg0v49ghzz7vs7haxf")))) + "06km0ygwxxwgw1lqldccqidxhmjfz8ck0wnbd95qk5sg8sbpc068")))) (build-system gnu-build-system) (arguments (substitute-keyword-arguments (package-arguments faust) ((#:make-flags flags) `(list (string-append "prefix=" (assoc-ref %outputs "out")) - "world")))) + "world")) + ((#:phases phases) + `(modify-phases ,phases + ;; Files appear under $out/share/faust that are read-only. The + ;; install phase tries to overwrite them and fails, so we change + ;; the permissions first. + (add-before 'install 'fix-permissions + (lambda* (#:key outputs #:allow-other-keys) + (for-each (lambda (file) + (chmod file #o644)) + (find-files "architecture/max-msp" ".*")) + #t)))))) (native-inputs `(("llvm" ,llvm-with-rtti) ("which" ,which) diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm index 781cc26078..00328cb344 100644 --- a/gnu/packages/backup.scm +++ b/gnu/packages/backup.scm @@ -449,13 +449,13 @@ detection, and lossless compression.") (define-public borg (package (name "borg") - (version "1.1.0") + (version "1.1.1") (source (origin (method url-fetch) (uri (pypi-uri "borgbackup" version)) (sha256 (base32 - "0vwyg0b4kxb0rspqwhvgi5c78dzimgkydf03wif27a40qhh1235l")) + "0iik5lq349cl87imlwra2pp0j36wjhpn8r1d3778azvvqpyjq2d5")) (modules '((guix build utils))) (snippet '(for-each @@ -505,7 +505,7 @@ detection, and lossless compression.") "and not test_fuse " "and not test_fuse_allow_damaged_files")))))) (add-after 'install 'install-doc - (lambda* (#:key outputs #:allow-other-keys) + (lambda* (#:key inputs outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) (man (string-append out "/share/man/man1")) (misc (string-append out "/share/borg/misc"))) @@ -513,11 +513,11 @@ detection, and lossless compression.") '("docs/misc/create_chunker-params.txt" "docs/misc/internals-picture.txt" "docs/misc/prune-example.txt")) + (add-installed-pythonpath inputs outputs) (and - (zero? (system* "python3" "setup.py" "build_ext" "--inplace")) - (zero? (system* "make" "-C" "docs" "man")) + (zero? (system* "python3" "setup.py" "build_man")) (begin - (install-file "docs/_build/man/borg.1" man) + (copy-recursively "docs/man" man) #t)))))))) (native-inputs `(("python-cython" ,python-cython) diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm index 7e1177db9d..16c6a15a58 100644 --- a/gnu/packages/base.scm +++ b/gnu/packages/base.scm @@ -509,6 +509,7 @@ store.") (package (name "glibc") (version "2.25") + (replacement glibc/fixed) (source (origin (method url-fetch) (uri (string-append "mirror://gnu/glibc/glibc-" @@ -812,6 +813,15 @@ GLIBC/HURD for a Hurd host" (define-syntax glibc (identifier-syntax (glibc-for-target))) +(define glibc/fixed + (package + (inherit glibc) + (source (origin + (inherit (package-source glibc)) + (patches (append + (origin-patches (package-source glibc)) + (search-patches "glibc-CVE-2017-15670-15671.patch"))))))) + ;; Below are old libc versions, which we use mostly to build locale data in ;; the old format (which the new libc cannot cope with.) @@ -831,6 +841,7 @@ GLIBC/HURD for a Hurd host" "glibc-o-largefile.patch" "glibc-vectorized-strcspn-guards.patch" "glibc-CVE-2015-5180.patch" + "glibc-CVE-2017-15670-15671.patch" "glibc-CVE-2017-1000366-pt1.patch" "glibc-CVE-2017-1000366-pt2.patch" "glibc-CVE-2017-1000366-pt3.patch")))))) @@ -854,6 +865,7 @@ GLIBC/HURD for a Hurd host" "glibc-CVE-2016-3075.patch" "glibc-CVE-2016-3706.patch" "glibc-CVE-2016-4429.patch" + "glibc-CVE-2017-15670-15671.patch" "glibc-CVE-2017-1000366-pt1.patch" "glibc-CVE-2017-1000366-pt2.patch" "glibc-CVE-2017-1000366-pt3.patch")))))) @@ -876,6 +888,7 @@ GLIBC/HURD for a Hurd host" "glibc-CVE-2016-3075.patch" "glibc-CVE-2016-3706.patch" "glibc-CVE-2016-4429.patch" + "glibc-CVE-2017-15670-15671.patch" "glibc-CVE-2017-1000366-pt1.patch" "glibc-CVE-2017-1000366-pt2.patch" "glibc-CVE-2017-1000366-pt3.patch")))) diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm index bb8a0f8d40..aaf8b613e0 100644 --- a/gnu/packages/bioinformatics.scm +++ b/gnu/packages/bioinformatics.scm @@ -7,6 +7,7 @@ ;;; Copyright © 2016, 2017 Efraim Flashner ;;; Copyright © 2016 Marius Bakke ;;; Copyright © 2016 Raoul Bonnal +;;; Copyright © 2017 Tobias Geerinckx-Rice ;;; ;;; This file is part of GNU Guix. ;;; @@ -3615,7 +3616,7 @@ assembled metagenomic sequence.") (define-public miso (package (name "miso") - (version "0.5.3") + (version "0.5.4") (source (origin (method url-fetch) (uri (string-append @@ -3623,7 +3624,7 @@ assembled metagenomic sequence.") version ".tar.gz")) (sha256 (base32 - "0x446867az8ir0z8c1vjqffkp0ma37wm4sylixnkhgawllzx8v5w")) + "1z3x0vd8ma7pdrnywj7i3kgwl89sdkwrrn62zl7r5calqaq2hyip")) (modules '((guix build utils))) (snippet '(substitute* "setup.py" diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm index ab4f86d526..9a1b628809 100644 --- a/gnu/packages/compression.scm +++ b/gnu/packages/compression.scm @@ -18,6 +18,7 @@ ;;; Copyright © 2017 Manolis Fragkiskos Ragkousis ;;; Copyright © 2017 Theodoros Foradis ;;; Copyright © 2017 Stefan Reichör +;;; Copyright © 2017 Petter ;;; ;;; This file is part of GNU Guix. ;;; @@ -1612,3 +1613,24 @@ extract files to standard out). As @command{atool} invokes external programs to handle the archives, not all commands may be supported for a certain type of archives.") (license license:gpl2+))) + +(define-public perl-archive-extract + (package + (name "perl-archive-extract") + (version "0.80") + (source + (origin + (method url-fetch) + (uri (string-append "mirror://cpan/authors/id/B/BI/BINGOS/Archive-Extract-" + version ".tar.gz")) + (sha256 + (base32 + "1x15j1q6w6z8hqyqgap0lz4qbq2174wfhksy1fdd653ccbaw5jr5")))) + (build-system perl-build-system) + (home-page "http://search.cpan.org/dist/Archive-Extract/") + (synopsis "Generic archive extracting mechanism") + (description "It allows you to extract any archive file of the type .tar, +.tar.gz, .gz, .Z, tar.bz2, .tbz, .bz2, .zip, .xz,, .txz, .tar.xz or .lzma +without having to worry how it does so, or use different interfaces for each +type by using either Perl modules, or command-line tools on your system.") + (license license:perl-license))) diff --git a/gnu/packages/curl.scm b/gnu/packages/curl.scm index df2310b37c..cad2d6f796 100644 --- a/gnu/packages/curl.scm +++ b/gnu/packages/curl.scm @@ -44,6 +44,7 @@ (package (name "curl") (version "7.56.0") + (replacement curl-7.56.1) (source (origin (method url-fetch) (uri (string-append "https://curl.haxx.se/download/curl-" @@ -130,3 +131,16 @@ tunneling, and so on.") (license (license:non-copyleft "file://COPYING" "See COPYING in the distribution.")) (home-page "https://curl.haxx.se/"))) + +(define-public curl-7.56.1 + (package + (inherit curl) + (version "7.56.1") + (source + (origin + (method url-fetch) + (uri (string-append "https://curl.haxx.se/download/curl-" + version ".tar.xz")) + (sha256 + (base32 + "1l9r386qz7l7h4n5lysrf1wq93lyc72a7shgg9b8s5d0ycn2ivcf")))))) diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm index 2d6baea9fa..8ccbba2b1a 100644 --- a/gnu/packages/databases.scm +++ b/gnu/packages/databases.scm @@ -1582,14 +1582,14 @@ on another machine, accessed via TCP/IP.") (define-public python-peewee (package (name "python-peewee") - (version "2.8.3") + (version "2.10.2") (source (origin (method url-fetch) (uri (pypi-uri "peewee" version)) (sha256 (base32 - "1605bk11s7aap2q4qyba93rx7yfh8b11kk0cqi08z8klx2iar8yd")))) + "10f2mrd5hw6rjklrzaix2lsxlgc8vx3xak54arcy6yd791zhchi3")))) (build-system python-build-system) (arguments `(#:tests? #f)) ; Fails to import test data @@ -1728,13 +1728,13 @@ etc., and an SQL engine for performing simple SQL queries.") (define-public python-lmdb (package (name "python-lmdb") - (version "0.92") + (version "0.93") (source (origin (method url-fetch) (uri (pypi-uri "lmdb" version)) (sha256 (base32 - "01nw6r08jkipx6v92kw49z34wmwikrpvc5j9xawdiyg1n2526wrx")) + "0xdpb298fyl68acadbwv5801wcwfpnhc7sm4bnrq1x4bd5dhhsql")) (modules '((guix build utils))) (snippet ;; Delete bundled lmdb source files. diff --git a/gnu/packages/django.scm b/gnu/packages/django.scm index c70c074938..f983b1aa10 100644 --- a/gnu/packages/django.scm +++ b/gnu/packages/django.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2016 Hartmut Goebel ;;; Copyright © 2016 Efraim Flashner ;;; Copyright © 2017 ng0 +;;; Copyright © 2017 Tobias Geerinckx-Rice ;;; ;;; This file is part of GNU Guix. ;;; @@ -150,7 +151,7 @@ with arguments to the field constructor.") `(("python-django" ,python-django) ("python-setuptools-scm" ,python-setuptools-scm))) (propagated-inputs - `(("python-pytest" ,python-pytest))) + `(("python-pytest" ,python-pytest-3.0))) (home-page "http://pytest-django.readthedocs.org/") (synopsis "Django plugin for py.test") (description "Pytest-django is a plugin for py.test that provides a set of diff --git a/gnu/packages/embedded.scm b/gnu/packages/embedded.scm index e89f5570b0..033d0032e7 100644 --- a/gnu/packages/embedded.scm +++ b/gnu/packages/embedded.scm @@ -42,6 +42,8 @@ #:use-module (gnu packages libusb) #:use-module (gnu packages perl) #:use-module (gnu packages pkg-config) + #:use-module (gnu packages python) + #:use-module (gnu packages swig) #:use-module (gnu packages texinfo) #:use-module (srfi srfi-1)) @@ -867,3 +869,66 @@ the Raspberry Pi chip.") (synopsis "GCC for VC4") (description "This package provides @code{gcc} for VideoCore IV, the Raspberry Pi chip.")))) + +(define-public python2-libmpsse + (package + (name "python2-libmpsse") + (version "1.3") + (source + (origin + (method url-fetch) + (uri (string-append "https://storage.googleapis.com/" + "google-code-archive-downloads/v2/" + "code.google.com/libmpsse/" + "libmpsse-" version ".tar.gz")) + (sha256 + (base32 + "0jq7nhqq3na8675jnpfcar3pd3dp3adhhc4lw900swkla01a1wh8")))) + (build-system gnu-build-system) + (inputs + `(("libftdi" ,libftdi) + ("python" ,python-2))) + (native-inputs + `(("pkg-config" ,pkg-config) + ("swig" ,swig) + ("which" ,base:which))) + (arguments + `(#:tests? #f ; No tests exist. + #:make-flags + (list (string-append "CFLAGS=-Wall -fPIC -fno-strict-aliasing -g -O2 " + "$(shell pkg-config --cflags libftdi1)")) + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'set-environment-up + (lambda* (#:key inputs outputs #:allow-other-keys) + (chdir "src") + (setenv "PYDEV" (string-append (assoc-ref inputs "python") + "/include/python2.7")) + #t)) + (add-after 'unpack 'patch-global-variable + (lambda _ + ;; fast_rw_buf was defined in a header file which was making + ;; the build not reproducible. + (substitute* "src/fast.c" + (("^int fast_build_block_buffer") " + +unsigned char fast_rw_buf[SPI_RW_SIZE + CMD_SIZE]; +int fast_build_block_buffer")) + (substitute* "src/mpsse.h" + (("unsigned char fast_rw_buf.*") " +")) + #t)) + (replace 'install + (lambda* (#:key outputs make-flags #:allow-other-keys #:rest args) + (let* ((out (assoc-ref outputs "out")) + (out-python (string-append out + "/lib/python2.7/site-packages")) + (install (assoc-ref %standard-phases 'install))) + (install #:make-flags (cons (string-append "PYLIB=" out-python) + make-flags)))))))) + (home-page "https://code.google.com/archive/p/libmpsse/") + (synopsis "Python library for MPSSE SPI I2C JTAG adapter by FTDI") + (description "This package provides a library in order to support the +MPSSE (Multi-Protocol Synchronous Serial Engine) adapter by FTDI that can do +SPI, I2C, JTAG.") + (license license:gpl2+))) diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm index 6709f02923..61eed39ef0 100644 --- a/gnu/packages/games.scm +++ b/gnu/packages/games.scm @@ -267,7 +267,8 @@ the others like yourself, that want what you have.") (lambda* (#:key outputs #:allow-other-keys) (zero? (system* "sh" "install.sh" (assoc-ref outputs "out"))))) - (replace 'check + (delete 'check) + (add-after 'install 'check (lambda* (#:key outputs #:allow-other-keys) (zero? (system* (string-append (assoc-ref outputs "out") "/bin/cowsay") diff --git a/gnu/packages/gnupg.scm b/gnu/packages/gnupg.scm index 70c133881c..e8a44f20b8 100644 --- a/gnu/packages/gnupg.scm +++ b/gnu/packages/gnupg.scm @@ -5,13 +5,14 @@ ;;; Copyright © 2014, 2015, 2016 Mark H Weaver ;;; Copyright © 2015 Paul van der Walt ;;; Copyright © 2015, 2016, 2017 Efraim Flashner -;;; Copyright © 2015, 2016 Ricardo Wurmus +;;; Copyright © 2015, 2016, 2017 Ricardo Wurmus ;;; Copyright © 2016 Christopher Allan Webber ;;; Copyright © 2016, 2017 ng0 ;;; Copyright © 2016 Christopher Baines ;;; Copyright © 2016 Mike Gerwitz ;;; Copyright © 2016 Troy Sankey ;;; Copyright © 2017 Leo Famulari +;;; Copyright © 2017 Petter ;;; ;;; This file is part of GNU Guix. ;;; @@ -837,3 +838,40 @@ them to transform your existing public key into a secret key.") @uref{https://gnupg.org, GnuPG}. It can be used to encrypt, decrypt, and sign files, to verify signatures, and to manage the private and public keys.") (license license:gpl3+))) + +(define-public perl-gnupg-interface + (package + (name "perl-gnupg-interface") + (version "0.52") + (source (origin + (method url-fetch) + (uri (string-append "mirror://cpan/authors/id/A/AL/ALEXMV/" + "GnuPG-Interface-" version ".tar.gz")) + (sha256 + (base32 + "0dgx8yhdsmhkazcrz14n4flrk1afv7azgl003hl4arxvi1d9yyi4")))) + (build-system perl-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + ;; FIXME: This test fails for unknown reasons + (add-after 'unpack 'delete-broken-test + (lambda _ + (delete-file "t/encrypt_symmetrically.t") + #t))))) + (inputs + `(("gnupg" ,gnupg-1))) + (propagated-inputs + `(("perl-moo" ,perl-moo) + ("perl-moox-handlesvia" ,perl-moox-handlesvia) + ("perl-moox-late" ,perl-moox-late))) + (native-inputs + `(("which" ,which) + ("perl-module-install" ,perl-module-install))) + (home-page "http://search.cpan.org/dist/GnuPG-Interface/") + (synopsis "Perl interface to GnuPG") + (description "@code{GnuPG::Interface} and its associated modules are +designed to provide an object-oriented method for interacting with GnuPG, +being able to perform functions such as but not limited to encrypting, +signing, decryption, verification, and key-listing parsing.") + (license license:perl-license))) diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm index da74a8dd95..2d607360c2 100644 --- a/gnu/packages/gnuzilla.scm +++ b/gnu/packages/gnuzilla.scm @@ -441,7 +441,16 @@ standards.") (mozilla-patch "icecat-bug-1368269.patch" "0cff5e66e0f4" "0jb0wqi7c0ih4441s1908j6gv18v4inh7k2w47h3c9nhz4rgyrw7") (mozilla-patch "icecat-CVE-2017-7793.patch" "6ff3c82962f0" "0bw82034kdmrpznigbavzzsiybzrw8giyf8v0z2cxf6mwl72bf9k") (mozilla-patch "icecat-bug-1400399.patch" "d6f78b1349b7" "0i3gwr2al3xl65yfa3nimvy8dp0jzpx21f6bjw18xwn7zkkh9j54") - (mozilla-patch "icecat-bug-1400721.patch" "285cde398833" "0a1i32zl30wfyw7zkqj595s94n6wdlg5c495m0910pd05pjg3qam"))) + (mozilla-patch "icecat-bug-1400721.patch" "285cde398833" "0a1i32zl30wfyw7zkqj595s94n6wdlg5c495m0910pd05pjg3qam") + (mozilla-patch "icecat-bug-1395138.patch" "98b3988592a6" "03wy173lj6mvmh5q92brf596h8676h0zasgqfnndpvsmsiaih120") + (mozilla-patch "icecat-bug-1369561.patch" "47590f0c274b" "0zsys6dcyhfb4a8k2dhsls7425jg6r1ijlrsn1lc5smwyf62zx5v") + (mozilla-patch "icecat-bug-1375146.patch" "55b435cbbb55" "1gcasaqrxa13a55v05bkxl3d1md829kpfhqiaws83wn08x28l0my") + (mozilla-patch "icecat-bug-1394530.patch" "8549cf2dab3e" "168gs32ncavaj9xn4gwhh9i01cbpnhgx9yn333apsrc1gwknpvsr") + (mozilla-patch "icecat-bug-1400554.patch" "349acf56ff49" "1vwn87rdryfjsn809pl50xmr82q98gz3vz9h6clkd905vbd9rwz7") + (mozilla-patch "icecat-bug-1400003.patch" "3af5bf8bdea0" "07az28dnpxr36j7i3llxkrlkrmg0bwk4f3sm75x1f0r1v5575p3p") + (mozilla-patch "icecat-bug-1407751.patch" "592df6088926" "1gy27idik4b6wcg4szww08cmpcljssja8wql6w1d807h7ni65lr7") + (mozilla-patch "icecat-bug-1261175.patch" "77a2d4610275" "13ysbwflnysj4rs45ibckd621s0vyg1s8dvannlvanvrz1g72zcz") + (mozilla-patch "icecat-bug-1394265.patch" "2b30335d0b95" "0hs5cwickvfw7r5dn7y148jgr2b21hl613qp83k56634d0y64qwp"))) (modules '((guix build utils))) (snippet '(begin diff --git a/gnu/packages/graphviz.scm b/gnu/packages/graphviz.scm index 5f2fcb8602..c71fb74cfb 100644 --- a/gnu/packages/graphviz.scm +++ b/gnu/packages/graphviz.scm @@ -3,6 +3,7 @@ ;;; Copyright © 2015 Efraim Flashner ;;; Copyright © 2016 Theodoros Foradis ;;; Copyright © 2017 Ricardo Wurmus +;;; Copyright © 2017 Tobias Geerinckx-Rice ;;; ;;; This file is part of GNU Guix. ;;; @@ -112,13 +113,13 @@ interfaces for other technical domains.") (define-public python-graphviz (package (name "python-graphviz") - (version "0.8") + (version "0.8.1") (source (origin (method url-fetch) (uri (pypi-uri "graphviz" version ".zip")) (sha256 (base32 - "0i738qb32w93hraxzjwkvnxmrfwcalhjd14fdbah9f2mk46p5748")))) + "00rzqsmq25b0say05vix5xivchdvsv83jl2i8pkryqd0nz4bxzvb")))) (build-system python-build-system) (native-inputs `(("unzip" ,unzip))) diff --git a/gnu/packages/haskell.scm b/gnu/packages/haskell.scm index 6864b7df6d..87e60a8861 100644 --- a/gnu/packages/haskell.scm +++ b/gnu/packages/haskell.scm @@ -11,6 +11,7 @@ ;;; Copyright © 2017 Danny Milosavljevic ;;; Copyright © 2017 Peter Mikkelsen ;;; Copyright © 2017 Alex Vong +;;; Copyright © 2017 rsiddharth ;;; ;;; This file is part of GNU Guix. ;;; @@ -4282,7 +4283,7 @@ command line options in Haskell.") (define-public ghc-base-orphans (package (name "ghc-base-orphans") - (version "0.4.4") + (version "0.6") (source (origin (method url-fetch) @@ -4292,7 +4293,7 @@ command line options in Haskell.") ".tar.gz")) (sha256 (base32 - "0hhgpwjvx7jhvlhsygmmf0q5hv2ymijzz4bjilicw99bmv13qcpl")))) + "03mdww5j0gwai7aqlx3m71ldmjcr99jzpkcclzjfclk6a6kjla67")))) (build-system haskell-build-system) (native-inputs `(("ghc-quickcheck" ,ghc-quickcheck) @@ -5918,14 +5919,14 @@ of a JSON value into a @code{Data.Aeson.Value}.") (define-public ghc-conduit (package (name "ghc-conduit") - (version "1.2.5.1") + (version "1.2.12.1") (source (origin (method url-fetch) (uri (string-append "https://hackage.haskell.org/package/" "conduit/conduit-" version ".tar.gz")) (sha256 (base32 - "0aq6wswd5dkhdmy7sjhd99mldpq33dqpgbdcwpm94ahvckqxs7v5")))) + "0zl6gflh7y36y2vypjhqx13nhkk5y3h12c1zj7kjfclrmwnvnwh0")))) (build-system haskell-build-system) (inputs `(("ghc-exceptions" ,ghc-exceptions) @@ -5938,15 +5939,16 @@ of a JSON value into a @code{Data.Aeson.Value}.") (native-inputs `(("ghc-quickcheck" ,ghc-quickcheck) ("ghc-hspec" ,ghc-hspec) - ("ghc-safe" ,ghc-safe))) + ("ghc-safe" ,ghc-safe) + ("ghc-split" ,ghc-split))) (home-page "https://github.com/snoyberg/conduit") (synopsis "Streaming data library ") (description - "conduit is a solution to the streaming data problem, allowing for -production, transformation, and consumption of streams of data in constant -memory. It is an alternative to lazy I/O which guarantees deterministic -resource handling, and fits in the same general solution space as -enumerator/iteratee and pipes." ) + "The conduit package is a solution to the streaming data problem, +allowing for production, transformation, and consumption of streams of data +in constant memory. It is an alternative to lazy I/O which guarantees +deterministic resource handling, and fits in the same general solution +space as enumerator/iteratee and pipes.") (license license:expat))) (define-public ghc-logging-facade @@ -9005,4 +9007,1096 @@ contents of the HTTP connection. It also provides higher-level functions which allow you to avoid direct usage of conduits.") (license license:bsd-3))) +(define-public ghc-errors + (package + (name "ghc-errors") + (version "2.2.2") + (source + (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/" + "errors-" version "/" + "errors-" version ".tar.gz")) + (sha256 + (base32 + "13sflhglcm5skwrxb48fw96skdcx7ydiy4zg22200733pxhjncpn")))) + (build-system haskell-build-system) + (inputs + `(("ghc-exceptions" ,ghc-exceptions) + ("ghc-text" ,ghc-text) + ("ghc-transformers-compat" ,ghc-transformers-compat) + ("ghc-unexceptionalio" ,ghc-unexceptionalio) + ("ghc-safe" ,ghc-safe))) + (home-page "https://github.com/gabriel439/haskell-errors-library") + (synopsis "Error handling library for Haskell") + (description "This library encourages an error-handling style that +directly uses the type system, rather than out-of-band exceptions.") + (license license:bsd-3))) + +(define-public ghc-vector-th-unbox + (package + (name "ghc-vector-th-unbox") + (version "0.2.1.6") + (source + (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/" + "vector-th-unbox-" version "/" + "vector-th-unbox-" version ".tar.gz")) + (sha256 + (base32 + "0d82x55f5vvr1jvaia382m23rs690lg55pvavv8f4ph0y6kd91xy")))) + (build-system haskell-build-system) + (inputs + `(("ghc-vector" ,ghc-vector) + ("ghc-data-default" ,ghc-data-default))) + (home-page "https://github.com/liyang/vector-th-unbox") + (synopsis "Deriver for Data.Vector.Unboxed using Template Haskell") + (description "This Haskell library provides a Template Haskell +deriver for unboxed vectors, given a pair of coercion functions to +and from some existing type with an Unbox instance.") + (license license:bsd-3))) + +(define-public ghc-erf + (package + (name "ghc-erf") + (version "2.0.0.0") + (source + (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/" + "erf-" version "/" + "erf-" version ".tar.gz")) + (sha256 + (base32 + "0dxk2r32ajmmc05vaxcp0yw6vgv4lkbmh8jcshncn98xgsfbgw14")))) + (build-system haskell-build-system) + (home-page "https://hackage.haskell.org/package/erf") + (synopsis "The error function, erf, and related functions for Haskell") + (description "This Haskell library provides a type class for the +error function, erf, and related functions. Instances for Float and +Double.") + (license license:bsd-3))) + +(define-public ghc-math-functions + (package + (name "ghc-math-functions") + (version "0.2.1.0") + (source + (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/" + "math-functions-" version "/" + "math-functions-" version ".tar.gz")) + (sha256 + (base32 + "1sv5vabsx332v1lpb6v3jv4zrzvpx1n7yprzd8wlcda5vsc5a6zp")))) + (build-system haskell-build-system) + (inputs + `(("ghc-vector" ,ghc-vector) + ("ghc-vector-th-unbox" ,ghc-vector-th-unbox))) + (native-inputs + `(("ghc-hunit" ,ghc-hunit) + ("ghc-quickcheck" ,ghc-quickcheck) + ("ghc-erf" ,ghc-erf) + ("ghc-test-framework" ,ghc-test-framework) + ("ghc-test-framework-hunit" ,ghc-test-framework-hunit) + ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2))) + (home-page "https://github.com/bos/math-functions") + (synopsis "Special functions and Chebyshev polynomials for Haskell") + (description "This Haskell library provides implementations of +special mathematical functions and Chebyshev polynomials. These +functions are often useful in statistical and numerical computing.") + (license license:bsd-3))) + +(define-public ghc-mwc-random + (package + (name "ghc-mwc-random") + (version "0.13.6.0") + (source + (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/" + "mwc-random-" version "/" + "mwc-random-" version ".tar.gz")) + (sha256 + (base32 + "05j7yh0hh9nxic3dijmzv44kc6gzclvamdph7sq7w19wq57k6pq6")))) + (build-system haskell-build-system) + (inputs + `(("ghc-primitive" ,ghc-primitive) + ("ghc-vector" ,ghc-vector) + ("ghc-math-functions" ,ghc-math-functions))) + (arguments + `(#:tests? #f)) ; FIXME: Test-Suite `spec` fails. + (native-inputs + `(("ghc-hunit" ,ghc-hunit) + ("ghc-quickcheck" ,ghc-quickcheck) + ("ghc-test-framework" ,ghc-test-framework) + ("ghc-test-framework-hunit" ,ghc-test-framework-hunit) + ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2))) + (home-page "https://github.com/bos/mwc-random") + (synopsis "Random number generation library for Haskell") + (description "This Haskell package contains code for generating +high quality random numbers that follow either a uniform or normal +distribution. The generated numbers are suitable for use in +statistical applications. + +The uniform PRNG uses Marsaglia's MWC256 (also known as MWC8222) +multiply-with-carry generator, which has a period of 2^{8222} and +fares well in tests of randomness. It is also extremely fast, +between 2 and 3 times faster than the Mersenne Twister.") + (license license:bsd-3))) + +(define-public ghc-vector-algorithms + (package + (name "ghc-vector-algorithms") + (version "0.7.0.1") + (source + (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/" + "vector-algorithms-" version "/" + "vector-algorithms-" version ".tar.gz")) + (sha256 + (base32 + "0w4hf598lpxfg58rnimcqxrbnpqq2jmpjx82qa5md3q6r90hlipd")))) + (build-system haskell-build-system) + (inputs + `(("ghc-vector" ,ghc-vector) + ("ghc-mtl" ,ghc-mtl) + ("ghc-mwc-random" ,ghc-mwc-random))) + (native-inputs + `(("ghc-quickcheck" ,ghc-quickcheck))) + (home-page "https://github.com/bos/math-functions") + (synopsis "Algorithms for vector arrays in Haskell") + (description "This Haskell library algorithms for vector arrays.") + (license license:bsd-3))) + +(define-public ghc-language-haskell-extract + (package + (name "ghc-language-haskell-extract") + (version "0.2.4") + (source + (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/" + "language-haskell-extract-" version "/" + "language-haskell-extract-" version ".tar.gz")) + (sha256 + (base32 + "1nxcs7g8a1sp91bzpy4cj6s31k5pvc3gvig04cbrggv5cvjidnhl")))) + (build-system haskell-build-system) + (inputs + `(("ghc-regex-posix" ,ghc-regex-posix))) + (home-page "https://github.com/finnsson/template-helper") + (synopsis "Haskell module to automatically extract functions from +the local code") + (description "This package contains helper functions on top of +Template Haskell. + +For example, @code{functionExtractor} extracts all functions after a +regexp-pattern, which can be useful if you wish to extract all functions +beginning with @code{test} (for a test framework) or all functions beginning +with @code{wc} (for a web service).") + (license license:bsd-3))) + +(define-public ghc-test-framework-th + (package + (name "ghc-test-framework-th") + (version "0.2.4") + (source + (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/" + "test-framework-th-" version "/" + "test-framework-th-" version ".tar.gz")) + (sha256 + (base32 + "12lw7yj02jb9s0i7rb98jjam43j2h0gzmnbj9zi933fx7sg0sy4b")))) + (build-system haskell-build-system) + (inputs + `(("ghc-test-framework" ,ghc-test-framework) + ("ghc-language-haskell-extract" ,ghc-language-haskell-extract) + ("ghc-haskell-src-exts" ,ghc-haskell-src-exts) + ("ghc-regex-posix" ,ghc-regex-posix))) + (home-page "https://github.com/finnsson/test-generator") + (synopsis "Auto generate the HUnit- and Quickcheck-bulk-code +using Template Haskell") + (description "This library contains two functions: +@code{defaultMainGenerator} and @code{testGroupGenerator}. + +@code{defaultMainGenerator} will extract all functions beginning with +@code{case_}, @code{prop_}, or @code{test_} in the module and put them in a +@code{testGroup}. + +@code{testGroupGenerator} is like @code{defaultMainGenerator} but without +@code{defaultMain}. It is useful if you need a function for the testgroup +\(e.g. if you want to be able to call the testgroup from another module).") + (license license:bsd-3))) + +(define-public ghc-abstract-par + (package + (name "ghc-abstract-par") + (version "0.3.3") + (source + (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/" + "abstract-par-" version "/" + "abstract-par-" version ".tar.gz")) + (sha256 + (base32 + "0q6qsniw4wks2pw6wzncb1p1j3k6al5njnvm2v5n494hplwqg2i4")))) + (build-system haskell-build-system) + (home-page "https://github.com/simonmar/monad-par") + (synopsis "Abstract parallelization interface for Haskell") + (description "This Haskell package is an abstract interface +only. It provides a number of type clasess, but not an +implementation. The type classes separate different levels +of @code{Par} functionality. See the @code{Control.Monad.Par.Class} +module for more details.") + (license license:bsd-3))) + +(define-public ghc-monad-par-extras + (package + (name "ghc-monad-par-extras") + (version "0.3.3") + (source + (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/" + "monad-par-extras-" version "/" + "monad-par-extras-" version ".tar.gz")) + (sha256 + (base32 + "0bl4bd6jzdc5zm20q1g67ppkfh6j6yn8fwj6msjayj621cck67p2")))) + (build-system haskell-build-system) + (inputs `(("ghc-abstract-par" ,ghc-abstract-par) + ("ghc-cereal" ,ghc-cereal) + ("ghc-random" ,ghc-random) + ("ghc-mtl" ,ghc-mtl))) + (home-page "https://github.com/simonmar/monad-par") + (synopsis "Combinators and extra features for Par monads for Haskell") + (description "This Haskell package provides additional data structures, +and other added capabilities layered on top of the @code{Par} monad.") + (license license:bsd-3))) + +(define-public ghc-abstract-deque + (package + (name "ghc-abstract-deque") + (version "0.3") + (source + (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/" + "abstract-deque-" version "/" + "abstract-deque-" version ".tar.gz")) + (sha256 + (base32 + "18jwswjxwzc9bjiy4ds6hw2a74ki797jmfcifxd2ga4kh7ri1ah9")))) + (build-system haskell-build-system) + (inputs `(("ghc-random" ,ghc-random))) + (home-page "https://github.com/rrnewton/haskell-lockfree/wiki") + (synopsis "Abstract, parameterized interface to mutable Deques for Haskell") + (description "This Haskell package provides an abstract interface to +highly-parameterizable queues/deques. + +Background: There exists a feature space for queues that extends between: + +@itemize +@item Simple, single-ended, non-concurrent, bounded queues + +@item Double-ended, threadsafe, growable queues with important points +inbetween (such as the queues used for work-stealing). +@end itemize + +This package includes an interface for Deques that allows the programmer +to use a single API for all of the above, while using the type-system to +select an efficient implementation given the requirements (using type families). + +This package also includes a simple reference implementation based on +@code{IORef} and @code{Data.Sequence}.") + (license license:bsd-3))) + +(define-public ghc-monad-par + (package + (name "ghc-monad-par") + (version "0.3.4.8") + (source + (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/" + "monad-par-" version "/" + "monad-par-" version ".tar.gz")) + (sha256 + (base32 + "0ldrzqy24fsszvn2a2nr77m2ih7xm0h9bgkjyv1l274aj18xyk7q")))) + (build-system haskell-build-system) + (inputs `(("ghc-abstract-par" ,ghc-abstract-par) + ("ghc-abstract-deque" ,ghc-abstract-deque) + ("ghc-monad-par-extras" ,ghc-monad-par-extras) + ("ghc-mwc-random" ,ghc-mwc-random) + ("ghc-parallel" ,ghc-parallel) + ("ghc-mtl" ,ghc-mtl))) + (native-inputs `(("ghc-quickcheck" ,ghc-quickcheck) + ("ghc-hunit" ,ghc-hunit) + ("ghc-test-framework-hunit" ,ghc-test-framework-hunit) + ("ghc-test-framework-quickcheck2" + ,ghc-test-framework-quickcheck2) + ("ghc-test-framework" ,ghc-test-framework) + ("ghc-test-framework-th" ,ghc-test-framework-th))) + (home-page "https://github.com/simonmar/monad-par") + (synopsis "Haskell library for parallel programming based on a monad") + (description "The @code{Par} monad offers an API for parallel +programming. The library works for parallelising both pure and @code{IO} +computations, although only the pure version is deterministic. The default +implementation provides a work-stealing scheduler and supports forking tasks +that are much lighter weight than IO-threads.") + (license license:bsd-3))) + +(define-public ghc-statistics + (package + (name "ghc-statistics") + (version "0.14.0.2") + (source + (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/" + "statistics-" version "/" + "statistics-" version ".tar.gz")) + (sha256 + (base32 + "0y27gafkib0x0fn39qfn2rkgsfrm09ng35sbb5dwr7rclhnxz59l")))) + (build-system haskell-build-system) + (inputs + `(("ghc-aeson" ,ghc-aeson) + ("ghc-base-orphans" ,ghc-base-orphans) + ("ghc-erf" ,ghc-erf) + ("ghc-math-functions" ,ghc-math-functions) + ("ghc-monad-par" ,ghc-monad-par) + ("ghc-mwc-random" ,ghc-mwc-random) + ("ghc-primitive" ,ghc-primitive) + ("ghc-vector" ,ghc-vector) + ("ghc-vector-algorithms" ,ghc-vector-algorithms) + ("ghc-vector-th-unbox" ,ghc-vector-th-unbox) + ("ghc-vector-binary-instances" ,ghc-vector-binary-instances))) + (native-inputs + `(("ghc-hunit" ,ghc-hunit) + ("ghc-quickcheck" ,ghc-quickcheck) + ("ghc-ieee754", ghc-ieee754) + ("ghc-test-framework" ,ghc-test-framework) + ("ghc-test-framework-hunit" ,ghc-test-framework-hunit) + ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2))) + (arguments + `(#:tests? #f)) ; FIXME: Test-Suite `spec` fails. + (home-page "https://github.com/bos/mwc-random") + (synopsis "Haskell library of statistical types, data, and functions") + (description "This library provides a number of common functions +and types useful in statistics. We focus on high performance, numerical +robustness, and use of good algorithms. Where possible, we provide references +to the statistical literature. + +The library's facilities can be divided into four broad categories: + +@itemize +@item Working with widely used discrete and continuous probability +distributions. (There are dozens of exotic distributions in use; we focus +on the most common.) + +@item Computing with sample data: quantile estimation, kernel density +estimation, histograms, bootstrap methods, significance testing, +and regression and autocorrelation analysis. + +@item Random variate generation under several different distributions. + +@item Common statistical tests for significant differences between samples. +@end itemize") + (license license:bsd-2))) + +(define-public ghc-chunked-data + (package + (name "ghc-chunked-data") + (version "0.3.0") + (source + (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/" + "chunked-data-" version "/" + "chunked-data-" version ".tar.gz")) + (sha256 + (base32 + "0bszq6fijnr4pmadzz89smj7kfmzx0ca3wd9ga8gv0in9jk9vgp1")))) + (build-system haskell-build-system) + (inputs `(("ghc-vector" ,ghc-vector) + ("ghc-semigroups" ,ghc-semigroups))) + (home-page "https://github.com/snoyberg/mono-traversable") + (synopsis "Typeclasses for dealing with various chunked data +representations for Haskell") + (description "This Haskell package was originally present in +classy-prelude.") + (license license:expat))) + +(define-public ghc-base-prelude + (package + (name "ghc-base-prelude") + (version "1.2.0.1") + (source + (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/" + "base-prelude-" version "/" + "base-prelude-" version ".tar.gz")) + (sha256 + (base32 + "17hivs7lmsglagdlzxd9q9zsddmgqin2788mpq911zwnb57lj6l1")))) + (build-system haskell-build-system) + (home-page "https://github.com/nikita-volkov/base-prelude") + (synopsis "The most complete prelude formed solely from the Haskell's base +package") + (description "This Haskell package aims to reexport all the non-conflicting +and most general definitions from the \"base\" package. + +This includes APIs for applicatives, arrows, monoids, foldables, traversables, +exceptions, generics, ST, MVars and STM. + +This package will never have any dependencies other than \"base\". + +Versioning policy: + +The versioning policy of this package deviates from PVP in the sense +that its exports in part are transitively determined by the version of \"base\". +Therefore it's recommended for the users of @code{ghc-base-prelude} to specify +the bounds of \"base\" as well.") + (license license:expat))) + +(define-public ghc-tuple-th + (package + (name "ghc-tuple-th") + (version "0.2.5") + (source + (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/" + "tuple-th-" version "/" + "tuple-th-" version ".tar.gz")) + (sha256 + (base32 + "1mrl4vvxmby7sf1paf7hklzidnr6wq55822i73smqyz0xpf3gsjn")))) + (build-system haskell-build-system) + (home-page "https://github.com/DanielSchuessler/tuple-th") + (synopsis "Generate utility functions for tuples of statically known size +for Haskell") + (description "This Haskell package contains Template Haskell functions for +generating functions similar to those in @code{Data.List} for tuples of +statically known size.") + (license license:bsd-3))) + +(define-public ghc-contravariant-extras + (package + (name "ghc-contravariant-extras") + (version "0.3.3.1") + (source + (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/" + "contravariant-extras-" version "/" + "contravariant-extras-" version ".tar.gz")) + (sha256 + (base32 + "1mbrgjybdx8fjdck4ldwi8955w4qnmm0ql56zix7dyn0s7s9spgk")))) + (build-system haskell-build-system) + (inputs `(("ghc-tuple-th" ,ghc-tuple-th) + ("ghc-contravariant" ,ghc-contravariant) + ("ghc-base-prelude",ghc-base-prelude))) + (home-page "https://github.com/nikita-volkov/contravariant-extras") + (synopsis "Extras for the @code{ghc-contravariant} Haskell package") + (description "This Haskell package provides extras for the +@code{ghc-contravariant} package.") + (license license:expat))) + +(define-public ghc-monadrandom + (package + (name "ghc-monadrandom") + (version "0.4.2.3") + (source + (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/" + "MonadRandom-" version "/" + "MonadRandom-" version ".tar.gz")) + (sha256 + (base32 + "1h1nhswrcmhy3mq6vd530p0df51fcnnf4csbwnljar7cf0mb2h6y")))) + (build-system haskell-build-system) + (inputs `(("ghc-transformers-compat" ,ghc-transformers-compat) + ("ghc-mtl" ,ghc-mtl) + ("ghc-primitive" ,ghc-primitive) + ("ghc-fail" ,ghc-fail) + ("ghc-random" ,ghc-random))) + (home-page "https://github.com/byorgey/MonadRandom") + (synopsis "Random-number generation monad for Haskell") + (description "This Haskell package provides support for computations +which consume random values.") + (license license:bsd-3))) + +(define-public ghc-either + (package + (name "ghc-either") + (version "4.4.1.1") + (source + (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/" + "either-" version "/" + "either-" version ".tar.gz")) + (sha256 + (base32 + "1lrlwqqnm6ibfcydlv5qvvssw7bm0c6yypy0rayjzv1znq7wp1xh")))) + (build-system haskell-build-system) + (inputs `(("ghc-bifunctors" ,ghc-bifunctors) + ("ghc-exceptions" ,ghc-exceptions) + ("ghc-free" ,ghc-free) + ("ghc-monad-control" ,ghc-monad-control) + ("ghc-manodrandom" ,ghc-monadrandom) + ("ghc-mtl" ,ghc-mtl) + ("ghc-mmorph" ,ghc-mmorph) + ("ghc-profunctors" ,ghc-profunctors) + ("ghc-semigroups" ,ghc-semigroups) + ("ghc-semigroupoids" ,ghc-semigroupoids) + ("ghc-transformers-base" ,ghc-transformers-base))) + (home-page "https://github.com/ekmett/either") + (synopsis "Provides an either monad transformer for Haskell") + (description "This Haskell package provides an either monad transformer.") + (license license:bsd-3))) + +(define-public ghc-entropy + (package + (name "ghc-entropy") + (version "0.3.8") + (source + (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/" + "entropy-" version "/" + "entropy-" version ".tar.gz")) + (sha256 + (base32 + "1l3lfigqvdlmxkz1wl7zdkmc0i2r5p6z4xzhiw8xdsbsw7aljfkl")))) + (build-system haskell-build-system) + (home-page "https://github.com/TomMD/entropy") + (synopsis "Provides platform independent entropy source for Haskell") + (description "This Haskell package provides a platform independent method +to obtain cryptographically strong entropy.") + (license license:bsd-3))) + +(define-public ghc-crypto-api + (package + (name "ghc-crypto-api") + (version "0.13.2") + (source + (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/" + "crypto-api-" version "/" + "crypto-api-" version ".tar.gz")) + (sha256 + (base32 + "1vc27qcgbg7hf50rkqhlrs58zn1888ilh4b6wrrm07bnm48xacak")))) + (build-system haskell-build-system) + (inputs `(("ghc-cereal" ,ghc-cereal) + ("ghc-tagged" ,ghc-tagged) + ("ghc-entropy" ,ghc-entropy))) + (home-page "https://github.com/TomMD/crypto-api") + (synopsis "Provides generic interface for cryptographic operations +for Haskell") + (description "This Haskell package provides a generic interface for +cryptographic operations (hashes, ciphers, randomness). + +Maintainers of hash and cipher implementations are encouraged to add instances +for the classes defined in @code{Crypto.Classes}. @code{Crypto} users are +similarly encouraged to use the interfaces defined in the @code{Classes} module. + +Any concepts or functions of general use to more than one cryptographic +algorithm (ex: padding) is within scope of this package.") + (license license:bsd-3))) + +(define-public ghc-crypto-api-tests + (package + (name "ghc-crypto-api-tests") + (version "0.3") + (source + (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/" + "crypto-api-tests-" version "/" + "crypto-api-tests-" version ".tar.gz")) + (sha256 + (base32 + "0w3j43jdrlj28jryp18hc6q84nkl2yf4vs1hhgrsk7gb9kfyqjpl")))) + (build-system haskell-build-system) + (inputs `(("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2) + ("ghc-crypto-api" ,ghc-crypto-api) + ("ghc-cereal" ,ghc-cereal) + ("ghc-test-framework" ,ghc-test-framework) + ("ghc-test-framework-hunit" ,ghc-test-framework-hunit) + ("ghc-hunit" ,ghc-hunit) + ("ghc-quickcheck" ,ghc-quickcheck))) + (home-page "https://github.com/TomMD/crypto-api-tests") + (synopsis "Test framework and KATs for cryptographic operations for Haskell") + (description "This Haskell package provides a test framework for hash and +cipher operations using the crypto-api interface. Known answer tests (KATs) +for common cryptographic algorithms are included.") + (license license:bsd-3))) + +(define-public ghc-pretty-hex + (package + (name "ghc-pretty-hex") + (version "1.0") + (source + (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/" + "pretty-hex-" version "/" + "pretty-hex-" version ".tar.gz")) + (sha256 + (base32 + "0ylwkvvjvmpprha9nx83xb8gkhyanhk5fffc0r7lb96n4ch5z6pz")))) + (build-system haskell-build-system) + (home-page "https://github.com/GaloisInc/hexdump") + (synopsis "Haskell library for hex dumps of ByteStrings") + (description "This Haskell library generates pretty hex dumps of +ByteStrings in the style of other common *nix hex dump tools.") + (license license:bsd-3))) + +(define-public ghc-puremd5 + (package + (name "ghc-puremd5") + (version "2.1.3") + (source + (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/" + "pureMD5-" version "/" + "pureMD5-" version ".tar.gz")) + (sha256 + (base32 + "0zdilz41cla2ck7mcw1a9702gyg2abq94mqahr4vci9sbs53bwxy")))) + (build-system haskell-build-system) + (inputs `(("ghc-cereal" ,ghc-cereal) + ("ghc-crypto-api" ,ghc-crypto-api) + ("ghc-tagged" ,ghc-tagged))) + (native-inputs `(("ghc-crypto-api-tests" ,ghc-crypto-api-tests) + ("ghc-quickcheck" ,ghc-quickcheck) + ("ghc-test-framework" ,ghc-test-framework) + ("ghc-test-framework-quickcheck2" + ,ghc-test-framework-quickcheck2) + ("ghc-pretty-hex" ,ghc-pretty-hex))) + (home-page "https://github.com/TomMD/pureMD5") + (synopsis "Haskell implementation of the MD5 hash algorithm") + (description "This package provides a Haskell-only implementation of +the MD5 digest (hash) algorithm. This now supports the @code{crypto-api} class +interface.") + (license license:bsd-3))) + +(define-public ghc-cryptohash-md5 + (package + (name "ghc-cryptohash-md5") + (version "0.11.100.1") + (source + (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/" + "cryptohash-md5-" version "/" + "cryptohash-md5-" version ".tar.gz")) + (sha256 + (base32 + "1y8q7s2bn4gdknw1wjikdnar2b5pgz3nv3220lxrlgpsf23x82vi")))) + (build-system haskell-build-system) + (arguments + `(#:tests? #f)) ; tests require old version of ghc-hunit (0.9) + (native-inputs `(("ghc-base16-bytestring" ,ghc-base16-bytestring) + ("ghc-puremd5" ,ghc-puremd5) + ("ghc-tasty" ,ghc-tasty) + ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck) + ("ghc-hunit" ,ghc-hunit))) + (home-page "https://github.com/hvr/cryptohash-md5") + (synopsis "MD5 implementation for Haskell") + (description "This Haskell package provides implementation of MD5.") + (license license:bsd-3))) + +(define-public ghc-cryptohash-sha1 + (package + (name "ghc-cryptohash-sha1") + (version "0.11.100.1") + (source + (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/" + "cryptohash-sha1-" version "/" + "cryptohash-sha1-" version ".tar.gz")) + (sha256 + (base32 + "1aqdxdhxhl9jldh951djpwxx8z7gzaqspxl7iwpl84i5ahrsyy9w")))) + (build-system haskell-build-system) + (arguments + `(#:tests? #f)) ; tests require old version of ghc-hunit (0.9) + (native-inputs `(("ghc-base16-bytestring" ,ghc-base16-bytestring) + ("ghc-sha" ,ghc-sha) + ("ghc-tasty" ,ghc-tasty) + ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck) + ("ghc-hunit" ,ghc-hunit))) + (home-page "https://github.com/hvr/cryptohash-sha1") + (synopsis "SHA-1 implementation for Haskell") + (description "This Haskell package provides an incremental and one-pass, +pure API to the @uref{https://en.wikipedia.org/wiki/SHA-1, SHA-1 hash algorithm}, +including @uref{https://en.wikipedia.org/wiki/HMAC, HMAC support}, with +performance close to the fastest implementations available in other languages. + +The implementation is made in C with a haskell FFI wrapper that hides +the C implementation.") + (license license:bsd-3))) + +(define-public ghc-network-info + (package + (name "ghc-network-info") + (version "0.2.0.8") + (source + (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/" + "network-info-" version "/" + "network-info-" version ".tar.gz")) + (sha256 + (base32 + "0xndvg776241fgjmynxfpy81f1csjmh8dg33yf0c8m71ychz3pzc")))) + (build-system haskell-build-system) + (home-page "https://github.com/jystic/network-info") + (synopsis "Access the local computer's basic network configuration") + (description "This Haskell library provides simple read-only access to the +local computer's networking configuration. It is currently capable of +getting a list of all the network interfaces and their respective +IPv4, IPv6 and MAC addresses.") + (license license:bsd-3))) + +(define-public ghc-uuid-types + (package + (name "ghc-uuid-types") + (version "1.0.3") + (source + (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/" + "uuid-types-" version "/" + "uuid-types-" version ".tar.gz")) + (sha256 + (base32 + "1zdka5jnm1h6k36w3nr647yf3b5lqb336g3fkprhd6san9x52xlj")))) + (build-system haskell-build-system) + (inputs `(("ghc-hashable" ,ghc-hashable) + ("ghc-random" ,ghc-random) + ("ghc-text" ,ghc-text))) + (native-inputs `(("ghc-hunit" ,ghc-hunit) + ("ghc-quickcheck" ,ghc-quickcheck) + ("ghc-tasty" ,ghc-tasty) + ("ghc-tasty-hunit" ,ghc-tasty-hunit) + ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck))) + (home-page "https://github.com/hvr/uuid") + (synopsis "Haskell type definitions for UUIDs") + (description "This Haskell library contains type definitions for +@dfn{Universally Unique Identifiers} or +@uref{http://en.wikipedia.org/wiki/UUID, UUIDs}, and basic conversion +functions.") + (license license:bsd-3))) + +(define-public ghc-uuid + (package + (name "ghc-uuid") + (version "1.3.13") + (source + (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/" + "uuid-" version "/" + "uuid-" version ".tar.gz")) + (sha256 + (base32 + "09xhk42yhxvqmka0iqrv3338asncz8cap3j0ic0ps896f2581b6z")))) + (build-system haskell-build-system) + (inputs `(("ghc-cryptohash-sha1" ,ghc-cryptohash-sha1) + ("ghc-cryptohash-md5" ,ghc-cryptohash-md5) + ("ghc-entropy" ,ghc-entropy) + ("ghc-network-info" ,ghc-network-info) + ("ghc-random" ,ghc-random) + ("ghc-text" ,ghc-text) + ("ghc-uuid-types" ,ghc-uuid-types))) + (native-inputs `(("ghc-hunit" ,ghc-hunit) + ("ghc-quickcheck" ,ghc-quickcheck) + ("ghc-tasty" ,ghc-tasty) + ("ghc-tasty-hunit" ,ghc-tasty-hunit) + ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck))) + (home-page "https://github.com/hvr/uuid") + (synopsis "Haskell library to create, compare, parse, and print UUIDs") + (description "This Haskell library provides utilities creating, comparing, +parsing and printing @dfn{Universally Unique Identifiers} or UUIDs.") + (license license:bsd-3))) + +(define-public ghc-rebase + (package + (name "ghc-rebase") + (version "1.1") + (source + (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/" + "rebase-" version "/" + "rebase-" version ".tar.gz")) + (sha256 + (base32 + "1qkhnpcc4g2vd6jmbf3b6psqkan6hyawqzrwzqdd931hsb02l6ia")))) + (build-system haskell-build-system) + (inputs `(("ghc-stm" ,ghc-stm) + ("ghc-hashable" ,ghc-hashable) + ("ghc-vector" ,ghc-vector) + ("ghc-unordered-containers" ,ghc-unordered-containers) + ("ghc-text" ,ghc-text) + ("ghc-scientific" ,ghc-scientific) + ("ghc-uuid" ,ghc-uuid) + ("ghc-dlist" ,ghc-dlist) + ("ghc-void" ,ghc-void) + ("ghc-bifunctors" ,ghc-bifunctors) + ("ghc-profunctors" ,ghc-profunctors) + ("ghc-contravariant" ,ghc-contravariant) + ("ghc-contravariant-extras" ,ghc-contravariant-extras) + ("ghc-semigroups" ,ghc-semigroups) + ("ghc-mtl" ,ghc-mtl) + ("ghc-either" ,ghc-either) + ("ghc-fail" ,ghc-fail) + ("ghc-base-prelude" ,ghc-base-prelude))) + (home-page "https://github.com/nikita-volkov/rebase") + (synopsis "Progressive alternative to the base package +for Haskell") + (description "This Haskell package is intended for those who are +tired of keeping long lists of dependencies to the same essential libraries +in each package as well as the endless imports of the same APIs all over again. + +It also supports the modern tendencies in the language. + +To solve those problems this package does the following: + +@itemize +@item Reexport the original APIs under the @code{Rebase} namespace. + +@item Export all the possible non-conflicting symbols from the +@code{Rebase.Prelude} module. + +@item Give priority to the modern practices in the conflicting cases. +@end itemize + +The policy behind the package is only to reexport the non-ambiguous and +non-controversial APIs, which the community has obviously settled on. +The package is intended to rapidly evolve with the contribution from +the community, with the missing features being added with pull-requests.") + (license license:expat))) + +(define-public ghc-vector-builder + (package + (name "ghc-vector-builder") + (version "0.3.1") + (source + (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/" + "vector-builder-" version "/" + "vector-builder-" version ".tar.gz")) + (sha256 + (base32 + "1l6sfgd2s107zkp1qd1w6jdjcbznp31769qf99pxar087f697wvp")))) + (build-system haskell-build-system) + (inputs `(("ghc-vector" ,ghc-vector) + ("ghc-semigroups" ,ghc-semigroups) + ("ghc-base-prelude" ,ghc-base-prelude))) + (native-inputs `(("ghc-tasty" ,ghc-tasty) + ("ghc-tasty-hunit" ,ghc-tasty-hunit) + ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck) + ("ghc-hunit" ,ghc-hunit) + ("ghc-quickcheck-instances" ,ghc-quickcheck-instances) + ("ghc-rebase" ,ghc-rebase))) + (home-page "https://github.com/nikita-volkov/vector-builder") + (synopsis "Vector builder for Haskell") + (description "This Haskell package provides an API for constructing vectors. +It provides the composable @code{Builder} abstraction, which has instances of the +@code{Monoid} and @code{Semigroup} classes. + +You would first use the @code{Builder} abstraction to specify the structure of +the vector; then you can execute the builder to actually produce the +vector. ") + (license license:expat))) + +(define-public ghc-foldl + (package + (name "ghc-foldl") + (version "1.3.2") + (source + (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/" + "foldl-" version "/" + "foldl-" version ".tar.gz")) + (sha256 + (base32 + "1z3xjz4khs2kr3mqkbh7dz4kd6gkdk2r67wjkvrxnmp533aqh90n")))) + (build-system haskell-build-system) + (inputs `(("ghc-mwc-randam" ,ghc-mwc-random) + ("ghc-primitive" ,ghc-primitive) + ("ghc-text" ,ghc-text) + ("ghc-vector" ,ghc-vector) + ("ghc-unordered-containers" ,ghc-unordered-containers) + ("ghc-hashable" ,ghc-hashable) + ("ghc-contravariant" ,ghc-contravariant) + ("ghc-profunctors" ,ghc-profunctors) + ("ghc-comonad" ,ghc-comonad) + ("ghc-vector-builder" ,ghc-vector-builder))) + (home-page "https://github.com/Gabriel439/Haskell-Foldl-Library") + (synopsis "Composable, streaming, and efficient left folds for Haskell") + (description "This Haskell library provides strict left folds that stream +in constant memory, and you can combine folds using @code{Applicative} style +to derive new folds. Derived folds still traverse the container just once +and are often as efficient as hand-written folds.") + (license license:bsd-3))) + +(define-public ghc-mono-traversable + (package + (name "ghc-mono-traversable") + (version "1.0.2.1") + (source + (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/" + "mono-traversable-" version "/" + "mono-traversable-" version ".tar.gz")) + (sha256 + (base32 + "0smirpwika7d5a98h20jr9jqg41n7vqfy7k31crmn449qfig9ljf")))) + (build-system haskell-build-system) + (inputs `(("ghc-unordered-containers" ,ghc-unordered-containers) + ("ghc-hashable" ,ghc-hashable) + ("ghc-text" ,ghc-text) + ("ghc-vector" ,ghc-vector) + ("ghc-vector-algorithms" ,ghc-vector-algorithms) + ("ghc-split" ,ghc-split))) + (native-inputs `(("ghc-hspec" ,ghc-hspec) + ("ghc-hunit",ghc-hunit) + ("ghc-quickcheck" ,ghc-quickcheck) + ("ghc-semigroups" ,ghc-semigroups) + ("ghc-foldl" ,ghc-foldl))) + (home-page "https://github.com/snoyberg/mono-traversable") + (synopsis "Haskell classes for mapping, folding, and traversing monomorphic +containers") + (description "This Haskell package provides Monomorphic variants of the +Functor, Foldable, and Traversable typeclasses. If you understand Haskell's +basic typeclasses, you understand mono-traversable. In addition to what +you are used to, it adds on an IsSequence typeclass and has code for marking +data structures as non-empty.") + (license license:expat))) + +(define-public ghc-conduit-combinators + (package + (name "ghc-conduit-combinators") + (version "1.1.1") + (source + (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/" + "conduit-combinators-" version "/" + "conduit-combinators-" version ".tar.gz")) + (sha256 + (base32 + "0609miq03lq9visfb2dqqsxghmvgzm24pq39mqby1jnnah6yh8m0")))) + (build-system haskell-build-system) + (inputs `(("ghc-conduit" ,ghc-conduit) + ("ghc-conduit-extra" ,ghc-conduit-extra) + ("ghc-transformers-base" ,ghc-transformers-base) + ("ghc-primitive" ,ghc-primitive) + ("ghc-vector" ,ghc-vector) + ("ghc-text" ,ghc-text) + ("ghc-void" ,ghc-void) + ("ghc-mwc-random" ,ghc-mwc-random) + ("ghc-unix-compat" ,ghc-unix-compat) + ("ghc-base16-bytestring" ,ghc-base16-bytestring) + ("ghc-base64-bytestring" ,ghc-base64-bytestring) + ("ghc-resourcet" ,ghc-resourcet) + ("ghc-monad-control" ,ghc-monad-control) + ("ghc-chunked-data" ,ghc-chunked-data) + ("ghc-mono-traversable" ,ghc-mono-traversable))) + (native-inputs `(("ghc-hspec" ,ghc-hspec) + ("ghc-silently" ,ghc-silently) + ("ghc-mtl" ,ghc-mtl) + ("ghc-safe" ,ghc-safe) + ("ghc-quickcheck" ,ghc-quickcheck))) + (home-page "https://github.com/snoyberg/mono-traversable") + (synopsis "Commonly used conduit functions, for both chunked and +unchunked data") + (description "This Haskell package provides a replacement for Data.Conduit.List, +as well as a convenient Conduit module.") + (license license:expat))) + +(define-public ghc-aws + (package + (name "ghc-aws") + (version "0.17.1") + (source + (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/" + "aws-" version "/aws-" version ".tar.gz")) + (sha256 (base32 + "1q4qh58vj8447a4fl88n3nkpdc4yv293qsh02w6zvszd6ch61yh7")))) + (build-system haskell-build-system) + (arguments `(#:tests? #f)) ; Tests require AWS credentials. + (inputs + `(("ghc-aeson" ,ghc-aeson) + ("ghc-attoparsec" ,ghc-attoparsec) + ("ghc-base16-bytestring" ,ghc-base16-bytestring) + ("ghc-base64-bytestring" ,ghc-base64-bytestring) + ("ghc-blaze-builder" ,ghc-blaze-builder) + ("ghc-byteable" ,ghc-byteable) + ("ghc-case-insensitive" ,ghc-case-insensitive) + ("ghc-cereal" ,ghc-cereal) + ("ghc-conduit" ,ghc-conduit) + ("ghc-conduit-extra" ,ghc-conduit-extra) + ("ghc-cryptohash" ,ghc-cryptohash) + ("ghc-data-default" ,ghc-data-default) + ("ghc-http-conduit" ,ghc-http-conduit) + ("ghc-http-types" ,ghc-http-types) + ("ghc-monad-control" ,ghc-monad-control) + ("ghc-mtl" ,ghc-mtl) + ("ghc-network" ,ghc-network) + ("ghc-old-locale" ,ghc-old-locale) + ("ghc-safe" ,ghc-safe) + ("ghc-scientific" ,ghc-scientific) + ("ghc-tagged" ,ghc-tagged) + ("ghc-text" ,ghc-text) + ("ghc-unordered-containers" ,ghc-unordered-containers) + ("ghc-utf8-string" ,ghc-utf8-string) + ("ghc-vector" ,ghc-vector) + ("ghc-xml-conduit" ,ghc-xml-conduit))) + (native-inputs + `(("ghc-quickcheck" ,ghc-quickcheck) + ("ghc-errors" ,ghc-errors) + ("ghc-http-client" ,ghc-http-client) + ("ghc-http-client-tls" ,ghc-http-client-tls) + ("ghc-quickcheck-instances" ,ghc-quickcheck-instances) + ("ghc-tasty" ,ghc-tasty) + ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck) + ("ghc-tasty-hunit" ,ghc-tasty-hunit) + ("ghc-conduit-combinators" ,ghc-conduit-combinators))) + (home-page "https://github.com/aristidb/aws") + (synopsis "Amazon Web Services for Haskell") + (description "This package attempts to provide support for using +Amazon Web Services like S3 (storage), SQS (queuing) and others to +Haskell programmers. The ultimate goal is to support all Amazon +Web Services.") + (license license:bsd-3))) + ;;; haskell.scm ends here diff --git a/gnu/packages/icu4c.scm b/gnu/packages/icu4c.scm index 3461285850..55bc9f2035 100644 --- a/gnu/packages/icu4c.scm +++ b/gnu/packages/icu4c.scm @@ -32,6 +32,7 @@ (define-public icu4c (package (name "icu4c") + (replacement icu4c-fixed) (version "58.2") (source (origin (method url-fetch) @@ -70,6 +71,15 @@ C/C++ part.") (license x11) (home-page "http://site.icu-project.org/"))) +(define icu4c-fixed + (package + (inherit icu4c) + (source (origin + (inherit (package-source icu4c)) + (patches (append + (origin-patches (package-source icu4c)) + (search-patches "icu4c-CVE-2017-14952.patch"))))))) + (define-public java-icu4j (package (name "java-icu4j") diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm index 45cb16f1f6..ff5f1c9ae6 100644 --- a/gnu/packages/java.scm +++ b/gnu/packages/java.scm @@ -54,6 +54,7 @@ #:use-module (gnu packages image) #:use-module (gnu packages libffi) #:use-module (gnu packages linux) ;alsa + #:use-module (gnu packages web) #:use-module (gnu packages wget) #:use-module (gnu packages pkg-config) #:use-module (gnu packages perl) @@ -6020,3 +6021,213 @@ provides low-level abstractions (@code{JsonParser}, @code{JsonGenerator}, @code{JsonFactory}) as well as small number of higher level overrides needed to make data-binding work.") (license license:asl2.0))); found on wiki.fasterxml.com/JacksonLicensing + +(define-public java-hdrhistogram + (package + (name "java-hdrhistogram") + (version "2.1.9") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/HdrHistogram/HdrHistogram/" + "archive/HdrHistogram-" version ".tar.gz")) + (sha256 + (base32 + "1sicbmc3sr42nw93qbkb26q9rn33ag33k6k77phjc3j5h5gjffqv")))) + (build-system ant-build-system) + (arguments + `(#:jar-name "java-hdrhistogram.jar" + #:source-dir "src/main/java" + #:phases + (modify-phases %standard-phases + (add-before 'configure 'set-version + (lambda _ + (let* ((version-java "src/main/java/org/HdrHistogram/Version.java") + (template (string-append version-java ".template"))) + (copy-file template version-java) + (substitute* version-java + (("\\$VERSION\\$") ,version) + (("\\$BUILD_TIME\\$") "0")) + #t)))))) + (native-inputs + `(("junit" ,java-junit) + ("hamcrest" ,java-hamcrest-core))) + (home-page "https://hdrhistogram.github.io/HdrHistogram") + (synopsis "High dynamic range histogram") + (description "Hdrhistogram allows to create histograms that support +recording and analyzing sampled data value counts across a configurable integer +value range with configurable value precision within the range. Value precision +is expressed as the number of significant digits in the value recording, and +provides control over value quantization behavior across the value range and +the subsequent value resolution at any given level.") + (license license:public-domain))) + +(define-public java-aopalliance + (package + (name "java-aopalliance") + (version "1.0") + (source (origin + (method git-fetch) + ;; Note: this git repository is not official, but contains the + ;; source code that is in the CVS repository. Downloading the + ;; tarball from sourceforge is undeterministic, and the cvs download + ;; fails. + (uri (git-reference + (url "https://github.com/hoverruan/aopalliance") + (commit "0d7757ae204e5876f69431421fe9bc2a4f01e8a0"))) + (file-name (string-append name "-" version)) + (sha256 + (base32 + "0rsg2b0v3hxlq2yk1i3m2gw3xwq689j3cwx9wbxvqfpdcjbca0qr")))) + (build-system ant-build-system) + (arguments + `(#:jar-name "java-aopalliance.jar" + #:jdk ,icedtea-8 + #:tests? #f; no tests + #:source-dir "aopalliance/src/main")) + (home-page "http://aopalliance.sourceforge.net") + (synopsis "Aspect-Oriented Programming") + (description "The AOP Alliance project is a joint project between several +software engineering people who are interested in Aspect-Oriented Programming +(AOP) and Java.") + (license license:public-domain))) + +(define-public java-javax-inject + (package + (name "java-javax-inject") + (version "tck-1") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/javax-inject/javax-inject/" + "archive/javax.inject-" version ".tar.gz")) + (sha256 + (base32 + "1ydrlvh2r7vr1g7lhjwy3w2dggpj9h6pix1lakkkgdywb365n6g0")))) + (build-system ant-build-system) + (arguments + `(#:jar-name "java-javax-inject.jar" + #:jdk ,icedtea-8 + #:tests? #f)); no tests + (home-page "http://github.com/javax-inject/javax-inject") + (synopsis "JSR-330: Dependency Injection for Java") + (description "This package specifies a means for obtaining objects in such +a way as to maximize reusability, testability and maintainability compared to +traditional approaches such as constructors, factories, and service locators +(e.g., JNDI). This process, known as dependency injection, is beneficial to +most nontrivial applications. + +Many types depend on other types. For example, a @var{Stopwatch} might depend +on a @var{TimeSource}. The types on which a type depends are known as its +dependencies. The process of finding an instance of a dependency to use at run +time is known as resolving the dependency. If no such instance can be found, +the dependency is said to be unsatisfied, and the application is broken.") + (license license:asl2.0))) + +(define-public java-guice + (package + (name "java-guice") + (version "4.1") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/google/guice/archive/" + version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "0dwmqjzlavb144ywqqglj3h68hqszkff8ai0a42hyb5il0qh4rbp")))) + (build-system ant-build-system) + (arguments + `(#:jar-name "java-guice.jar" + #:jdk ,icedtea-8 + #:tests? #f; FIXME: tests are not in a java sub directory + #:source-dir "core/src")) + (inputs + `(("guava" ,java-guava) + ("java-cglib" ,java-cglib) + ("java-aopalliance" ,java-aopalliance) + ("java-javax-inject" ,java-javax-inject) + ("java-asm" ,java-asm))) + (home-page "https://github.com/google/guice") + (synopsis "Lightweight dependency injection framework") + (description "Guice is a lightweight dependency injection framework fo +Java 6 and above.") + (license license:asl2.0))) + +(define-public java-guice-servlet + (package + (inherit java-guice) + (name "java-guice-servlet") + (arguments + `(#:jar-name "guice-servlet.jar" + #:source-dir "extensions/servlet/src/" + #:jdk ,icedtea-8 + #:tests? #f)); FIXME: not in a java subdir + (inputs + `(("guice" ,java-guice) + ("servlet" ,java-tomcat) + ,@(package-inputs java-guice))))) + +(define-public java-assertj + (package + (name "java-assertj") + (version "3.8.0") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/joel-costigliola/" + "assertj-core/archive/" + "assertj-core-" version ".tar.gz")) + (sha256 + (base32 + "1kf124fxskf548rklkg86294w2x6ajqrff94rrhyqns31danqkfz")))) + (build-system ant-build-system) + (arguments + `(#:jar-name "java-assertj.jar" + #:jdk ,icedtea-8 + #:source-dir "src/main/java" + #:tests? #f)); depends on tng-junit which depends on assertj + (inputs + `(("cglib" ,java-cglib) + ("junit" ,java-junit) + ("hamcrest" ,java-hamcrest-core))) + (native-inputs + `(("mockito" ,java-mockito-1))) + (home-page "https://joel-costigliola.github.io/assertj/index.html") + (synopsis "Fluent assertions for java") + (description "AssertJ core is a Java library that provides a fluent +interface for writing assertions. Its main goal is to improve test code +readability and make maintenance of tests easier.") + (license license:asl2.0))) + +(define-public java-jboss-javassist + (package + (name "java-jboss-javassist") + (version "3.21.0") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/jboss-javassist/javassist/" + "archive/rel_" + (string-map (lambda (x) (if (eq? x #\.) #\_ x)) version) + "_ga.tar.gz")) + (sha256 + (base32 + "10lpcr3sbf7y6fq6fc2h2ik7rqrivwcy4747bg0kxhwszil3cfmf")))) + (build-system ant-build-system) + (arguments + `(#:jar-name "java-jboss-javassist.jar" + #:jdk ,icedtea-8 + #:source-dir "src/main" + #:tests? #f; FIXME: requires junit-awtui and junit-swingui from junit3 + #:phases + (modify-phases %standard-phases + (add-before 'configure 'remove-binary + (lambda _ + (delete-file "javassist.jar") + #t))))) + (native-inputs + `(("junit" ,java-junit))) + (home-page "https://github.com/jboss-javassist/javassist") + (synopsis "Java bytecode engineering toolkit") + (description "Javassist (JAVA programming ASSISTant) makes Java bytecode +manipulation simple. It is a class library for editing bytecodes in Java; it +enables Java programs to define a new class at runtime and to modify a class +file when the JVM loads it.") + (license (list license:gpl2 license:cddl1.0)))); either gpl2 only or cddl. diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm index 289ec440f4..45a4146cd7 100644 --- a/gnu/packages/linux.scm +++ b/gnu/packages/linux.scm @@ -368,8 +368,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.13.8") -(define %linux-libre-hash "0qi2n5lczqwq2v0q5zl08ac3x4lixpj1dmb0kza6hsllmx8hbybw") +(define %linux-libre-version "4.13.9") +(define %linux-libre-hash "1ymsdvm4djh7hg2wmn2v11w380i0ss9nkp4slfrgihdvn6yp5gbv") (define-public linux-libre (make-linux-libre %linux-libre-version @@ -378,14 +378,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.57" - "02ldxzbazdbhvgkwxl6xblkwj75s5cm33fpm77kv394w35jan3by" + (make-linux-libre "4.9.58" + "0f1yxdvzdr1zfkh86i9z0p7ywdlz0blxnd11wbnw763qyk3qydyk" %intel-compatible-systems #:configuration-file kernel-config)) (define-public linux-libre-4.4 - (make-linux-libre "4.4.93" - "1llpqkm7vvwi5fm92y4n6qrc89ps7kdfl83s7m38a2yivm3kgzr6" + (make-linux-libre "4.4.94" + "0g63is8d2k1mf1kaljkll79n7gzh4qn0fmrm2r9sab2sq41hch1m" %intel-compatible-systems #:configuration-file kernel-config)) diff --git a/gnu/packages/lxqt.scm b/gnu/packages/lxqt.scm index a73a875594..a4108f55b2 100644 --- a/gnu/packages/lxqt.scm +++ b/gnu/packages/lxqt.scm @@ -90,62 +90,6 @@ in Qt.") components of the LXQt desktop environment.") (license lgpl2.1+))) - -(define-public lxqt-common - (package - (name "lxqt-common") - (version "0.9.1") - (source - (origin - (method url-fetch) - (uri - (string-append "https://github.com/lxde/" name - "/archive/" version ".tar.gz")) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "1vd3zarvl44l3y6wn7kgxcd2f1bygsmk5bcfqwa3568cq3b57aw0")))) - (build-system cmake-build-system) - (arguments - `(#:tests? #f ; no check target - #:phases - (modify-phases %standard-phases - (add-before 'configure 'fix-installation-paths - (lambda _ - ;; The variable LXQT_ETC_XDG_DIR is set in - ;; liblxqt-0.9.0/share/cmake/lxqt/lxqt-config.cmake - ;; to the Qt5 installation directory, followed by "/etc/xdg". - ;; We need to have it point to the current installation - ;; directory instead. - (substitute* '("config/CMakeLists.txt" - "menu/CMakeLists.txt") - (("\\$\\{LXQT_ETC_XDG_DIR\\}") - "${CMAKE_INSTALL_PREFIX}/etc/xdg") - ;; In the same file, LXQT_SHARE_DIR is set to the installation - ;; directory of liblxqt, followed by "/share/lxqt". - (("\\$\\{LXQT_SHARE_DIR\\}") - "${CMAKE_INSTALL_PREFIX}/share/lxqt")) - ;; Replace absolute directories. - (substitute* "autostart/CMakeLists.txt" - (("/etc/xdg") - "${CMAKE_INSTALL_PREFIX}/etc/xdg")) - (substitute* "xsession/CMakeLists.txt" - (("/usr/share") - "${CMAKE_INSTALL_PREFIX}/share"))))))) - (inputs - `(("kwindowsystem" ,kwindowsystem) - ("liblxqt" ,liblxqt) - ("libqtxdg" ,libqtxdg) - ("qtbase" ,qtbase) - ("qttools" ,qttools) - ("qtx11extras" ,qtx11extras))) - (home-page "http://lxqt.org/") - (synopsis "Common files for LXQt") - (description "lxqt-common provides the desktop integration files -(themes, icons, configuration files etc.) for the LXQt -desktop environment.") - (license lgpl2.1+))) - (define-public lxqt-session (package (name "lxqt-session") diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm index acbb68b51b..e9a7283cf2 100644 --- a/gnu/packages/mail.scm +++ b/gnu/packages/mail.scm @@ -48,6 +48,7 @@ #:use-module (gnu packages backup) #:use-module (gnu packages bash) #:use-module (gnu packages bison) + #:use-module (gnu packages calendar) #:use-module (gnu packages crypto) #:use-module (gnu packages curl) #:use-module (gnu packages cyrus-sasl) @@ -939,6 +940,7 @@ compresses it.") ("libarchive" ,libarchive) ("libcanberra" ,libcanberra) ("libetpan" ,libetpan) + ("libical" ,libical) ("libnotify" ,libnotify) ("libsm" ,libsm) ("libxml2" ,libxml2) diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm index ea1904596e..6aca39cedd 100644 --- a/gnu/packages/music.scm +++ b/gnu/packages/music.scm @@ -3296,3 +3296,41 @@ based around a MIDI sequencer that features a rich understanding of music notation and includes basic support for digital audio.") (home-page "http://www.rosegardenmusic.com/") (license license:gpl2))) + +(define-public sorcer + (package + (name "sorcer") + (version "1.1.3") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/openAVproductions/" + "openAV-Sorcer/archive/release-" + version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "07iyqj28wm0xc4arrq893bm12xjpz65db7ynrlmf6w8krg8wjmd0")))) + (build-system cmake-build-system) + (arguments + `(#:tests? #f ; no tests included + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'build-faust-sources + (lambda* (#:key inputs #:allow-other-keys) + (with-directory-excursion "faust" + (delete-file "main.cpp") + (zero? (system* "faust" "-i" + "-a" "lv2synth.cpp" + "-o" "main.cpp" "main.dsp")))))))) + (inputs + `(("boost" ,boost) + ("lv2" ,lv2) + ("ntk" ,ntk))) + (native-inputs + `(("faust" ,faust) + ("pkg-config" ,pkg-config))) + (home-page "http://openavproductions.com/sorcer/") + (synopsis "Wavetable LV2 plugin synth") + (description "Sorcer is a wavetable LV2 plugin synthesizer, targeted at +the electronic or dubstep genre.") + (license license:gpl3+))) diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm index 265455e5b2..a6c1042978 100644 --- a/gnu/packages/networking.scm +++ b/gnu/packages/networking.scm @@ -48,6 +48,7 @@ #:use-module (gnu packages adns) #:use-module (gnu packages algebra) #:use-module (gnu packages audio) + #:use-module (gnu packages autotools) #:use-module (gnu packages bison) #:use-module (gnu packages check) #:use-module (gnu packages code) @@ -55,6 +56,7 @@ #:use-module (gnu packages curl) #:use-module (gnu packages databases) #:use-module (gnu packages dejagnu) + #:use-module (gnu packages documentation) #:use-module (gnu packages flex) #:use-module (gnu packages gettext) #:use-module (gnu packages glib) @@ -1494,3 +1496,42 @@ interface and a programmable text output for scripting.") ;; Update the license field when upstream responds. (license (list license:bsd-2 license:expat)))) + +(define-public libnet + (package + (name "libnet") + (version "1.1.6") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/sam-github/libnet/" + "archive/libnet-" version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "0l4gbzzvr199fzczzricjz7b825i7dlk6sgl5p5alnkcagmq0xys")))) + (build-system gnu-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'chdir + (lambda _ (chdir "libnet") #t)) + (add-after 'chdir 'bootstrap + (lambda _ (zero? (system* "autoreconf" "-vif")))) + (add-before 'build 'build-doc + (lambda* (#:key make-flags #:allow-other-keys) + (zero? (apply system* "make" "-C" "doc" "doc" + make-flags))))))) + (native-inputs + `(("autoconf" ,autoconf) + ("automake" ,automake) + ("libtool" ,libtool) + ("doxygen" ,doxygen))) + (home-page "https://sourceforge.net/projects/libnet-dev/") + (synopsis "Framework for low-level network packet construction") + (description + "Libnet provides a fairly portable framework for network packet +construction and injection. It features portable packet creation interfaces +at the IP layer and link layer, as well as a host of supplementary +functionality. Using libnet, quick and simple packet assembly applications +can be whipped up with little effort.") + (license license:bsd-2))) diff --git a/gnu/packages/patches/glibc-CVE-2017-15670-15671.patch b/gnu/packages/patches/glibc-CVE-2017-15670-15671.patch new file mode 100644 index 0000000000..76d688c517 --- /dev/null +++ b/gnu/packages/patches/glibc-CVE-2017-15670-15671.patch @@ -0,0 +1,27 @@ +Fix CVE-2017-15670: + +https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-15670 +https://sourceware.org/bugzilla/show_bug.cgi?id=22320 +https://bugzilla.redhat.com/show_bug.cgi?id=1504804 + +And CVE-2017-15671: + +https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-15671 +https://sourceware.org/bugzilla/show_bug.cgi?id=22325 +https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2017-15671 + +Copied from upstream: + + +diff --git a/posix/glob.c b/posix/glob.c +--- a/posix/glob.c ++++ b/posix/glob.c +@@ -843,7 +843,7 @@ + *p = '\0'; + } + else +- *((char *) mempcpy (newp, dirname + 1, end_name - dirname)) ++ *((char *) mempcpy (newp, dirname + 1, end_name - dirname - 1)) + = '\0'; + user_name = newp; + } diff --git a/gnu/packages/patches/icu4c-CVE-2017-14952.patch b/gnu/packages/patches/icu4c-CVE-2017-14952.patch new file mode 100644 index 0000000000..564f69d01d --- /dev/null +++ b/gnu/packages/patches/icu4c-CVE-2017-14952.patch @@ -0,0 +1,18 @@ +Fix CVE-2017-14952: + +https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-14952 + +Patch copied from upstream source repository: + +http://bugs.icu-project.org/trac/changeset/40324/trunk/icu4c/source/i18n/zonemeta.cpp#file0 + +Index: trunk/icu4c/source/i18n/zonemeta.cpp +=================================================================== +--- icu/source/i18n/zonemeta.cpp (revision 40283) ++++ icu/source/i18n/zonemeta.cpp (revision 40324) +@@ -691,5 +691,4 @@ + if (U_FAILURE(status)) { + delete mzMappings; +- deleteOlsonToMetaMappingEntry(entry); + uprv_free(entry); + break; diff --git a/gnu/packages/patches/mupdf-CVE-2017-14685.patch b/gnu/packages/patches/mupdf-CVE-2017-14685.patch new file mode 100644 index 0000000000..3fcce5fedf --- /dev/null +++ b/gnu/packages/patches/mupdf-CVE-2017-14685.patch @@ -0,0 +1,34 @@ +Fix CVE-2017-14685: + +https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-14685 + +Patch copied from upstream source repository: + +https://git.ghostscript.com/?p=mupdf.git;h=ab1a420613dec93c686acbee2c165274e922f82a + +From ab1a420613dec93c686acbee2c165274e922f82a Mon Sep 17 00:00:00 2001 +From: Tor Andersson +Date: Tue, 19 Sep 2017 15:23:04 +0200 +Subject: [PATCH] Fix 698539: Don't use xps font if it could not be loaded. + +xps_load_links_in_glyphs did not cope with font loading failures. +--- + source/xps/xps-link.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/source/xps/xps-link.c b/source/xps/xps-link.c +index c07e0d7..c26a8d9 100644 +--- a/source/xps/xps-link.c ++++ b/source/xps/xps-link.c +@@ -91,6 +91,8 @@ xps_load_links_in_glyphs(fz_context *ctx, xps_document *doc, const fz_matrix *ct + bidi_level = atoi(bidi_level_att); + + font = xps_lookup_font(ctx, doc, base_uri, font_uri_att, style_att); ++ if (!font) ++ return; + text = xps_parse_glyphs_imp(ctx, doc, &local_ctm, font, fz_atof(font_size_att), + fz_atof(origin_x_att), fz_atof(origin_y_att), + is_sideways, bidi_level, indices_att, unicode_att); +-- +2.9.1 + diff --git a/gnu/packages/patches/mupdf-CVE-2017-14686.patch b/gnu/packages/patches/mupdf-CVE-2017-14686.patch new file mode 100644 index 0000000000..e462a6ffeb --- /dev/null +++ b/gnu/packages/patches/mupdf-CVE-2017-14686.patch @@ -0,0 +1,34 @@ +Fix CVE-2017-14686: + +https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-14686 + +Patch copied from upstream source repository: + +https://git.ghostscript.com/?p=mupdf.git;h=0f0fbc07d9be31f5e83ec5328d7311fdfd8328b1 + +From 0f0fbc07d9be31f5e83ec5328d7311fdfd8328b1 Mon Sep 17 00:00:00 2001 +From: Tor Andersson +Date: Tue, 19 Sep 2017 16:33:38 +0200 +Subject: [PATCH] Fix 698540: Check name, comment and meta size field signs. + +--- + source/fitz/unzip.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/source/fitz/unzip.c b/source/fitz/unzip.c +index f2d4f32..0bcce0f 100644 +--- a/source/fitz/unzip.c ++++ b/source/fitz/unzip.c +@@ -141,6 +141,9 @@ static void read_zip_dir_imp(fz_context *ctx, fz_zip_archive *zip, int start_off + (void) fz_read_int32_le(ctx, file); /* ext file atts */ + offset = fz_read_int32_le(ctx, file); + ++ if (namesize < 0 || metasize < 0 || commentsize < 0) ++ fz_throw(ctx, FZ_ERROR_GENERIC, "invalid size in zip entry"); ++ + name = fz_malloc(ctx, namesize + 1); + n = fz_read(ctx, file, (unsigned char*)name, namesize); + if (n < (size_t)namesize) +-- +2.9.1 + diff --git a/gnu/packages/patches/mupdf-CVE-2017-14687.patch b/gnu/packages/patches/mupdf-CVE-2017-14687.patch new file mode 100644 index 0000000000..cdc41df813 --- /dev/null +++ b/gnu/packages/patches/mupdf-CVE-2017-14687.patch @@ -0,0 +1,130 @@ +Fix CVE-2017-14687: + +https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-14687 + +Patch copied from upstream source repository: + +https://git.ghostscript.com/?p=mupdf.git;h=2b16dbd8f73269cb15ca61ece75cf8d2d196ed28 + +From 2b16dbd8f73269cb15ca61ece75cf8d2d196ed28 Mon Sep 17 00:00:00 2001 +From: Tor Andersson +Date: Tue, 19 Sep 2017 17:17:12 +0200 +Subject: [PATCH] Fix 698558: Handle non-tags in tag name comparisons. + +Use fz_xml_is_tag instead of fz_xml_tag && !strcmp idiom. +--- + source/html/css-apply.c | 2 +- + source/svg/svg-run.c | 2 +- + source/xps/xps-common.c | 6 +++--- + source/xps/xps-glyphs.c | 2 +- + source/xps/xps-path.c | 4 ++-- + source/xps/xps-resource.c | 2 +- + 6 files changed, 9 insertions(+), 9 deletions(-) + +diff --git a/source/html/css-apply.c b/source/html/css-apply.c +index de55490..6a91df0 100644 +--- a/source/html/css-apply.c ++++ b/source/html/css-apply.c +@@ -328,7 +328,7 @@ match_selector(fz_css_selector *sel, fz_xml *node) + + if (sel->name) + { +- if (strcmp(sel->name, fz_xml_tag(node))) ++ if (!fz_xml_is_tag(node, sel->name)) + return 0; + } + +diff --git a/source/svg/svg-run.c b/source/svg/svg-run.c +index f974c67..5302c64 100644 +--- a/source/svg/svg-run.c ++++ b/source/svg/svg-run.c +@@ -1044,7 +1044,7 @@ svg_run_use(fz_context *ctx, fz_device *dev, svg_document *doc, fz_xml *root, co + fz_xml *linked = fz_tree_lookup(ctx, doc->idmap, xlink_href_att + 1); + if (linked) + { +- if (!strcmp(fz_xml_tag(linked), "symbol")) ++ if (fz_xml_is_tag(linked, "symbol")) + svg_run_use_symbol(ctx, dev, doc, root, linked, &local_state); + else + svg_run_element(ctx, dev, doc, linked, &local_state); +diff --git a/source/xps/xps-common.c b/source/xps/xps-common.c +index cc7fed9..f2f9b93 100644 +--- a/source/xps/xps-common.c ++++ b/source/xps/xps-common.c +@@ -47,7 +47,7 @@ xps_parse_brush(fz_context *ctx, xps_document *doc, const fz_matrix *ctm, const + else if (fz_xml_is_tag(node, "RadialGradientBrush")) + xps_parse_radial_gradient_brush(ctx, doc, ctm, area, base_uri, dict, node); + else +- fz_warn(ctx, "unknown brush tag: %s", fz_xml_tag(node)); ++ fz_warn(ctx, "unknown brush tag"); + } + + void +@@ -85,7 +85,7 @@ xps_begin_opacity(fz_context *ctx, xps_document *doc, const fz_matrix *ctm, cons + if (opacity_att) + opacity = fz_atof(opacity_att); + +- if (opacity_mask_tag && !strcmp(fz_xml_tag(opacity_mask_tag), "SolidColorBrush")) ++ if (fz_xml_is_tag(opacity_mask_tag, "SolidColorBrush")) + { + char *scb_opacity_att = fz_xml_att(opacity_mask_tag, "Opacity"); + char *scb_color_att = fz_xml_att(opacity_mask_tag, "Color"); +@@ -129,7 +129,7 @@ xps_end_opacity(fz_context *ctx, xps_document *doc, char *base_uri, xps_resource + + if (opacity_mask_tag) + { +- if (strcmp(fz_xml_tag(opacity_mask_tag), "SolidColorBrush")) ++ if (!fz_xml_is_tag(opacity_mask_tag, "SolidColorBrush")) + fz_pop_clip(ctx, dev); + } + } +diff --git a/source/xps/xps-glyphs.c b/source/xps/xps-glyphs.c +index 29dc5b3..5b26d78 100644 +--- a/source/xps/xps-glyphs.c ++++ b/source/xps/xps-glyphs.c +@@ -592,7 +592,7 @@ xps_parse_glyphs(fz_context *ctx, xps_document *doc, const fz_matrix *ctm, + + /* If it's a solid color brush fill/stroke do a simple fill */ + +- if (fill_tag && !strcmp(fz_xml_tag(fill_tag), "SolidColorBrush")) ++ if (fz_xml_is_tag(fill_tag, "SolidColorBrush")) + { + fill_opacity_att = fz_xml_att(fill_tag, "Opacity"); + fill_att = fz_xml_att(fill_tag, "Color"); +diff --git a/source/xps/xps-path.c b/source/xps/xps-path.c +index 6faeb0c..021d202 100644 +--- a/source/xps/xps-path.c ++++ b/source/xps/xps-path.c +@@ -879,14 +879,14 @@ xps_parse_path(fz_context *ctx, xps_document *doc, const fz_matrix *ctm, char *b + if (!data_att && !data_tag) + return; + +- if (fill_tag && !strcmp(fz_xml_tag(fill_tag), "SolidColorBrush")) ++ if (fz_xml_is_tag(fill_tag, "SolidColorBrush")) + { + fill_opacity_att = fz_xml_att(fill_tag, "Opacity"); + fill_att = fz_xml_att(fill_tag, "Color"); + fill_tag = NULL; + } + +- if (stroke_tag && !strcmp(fz_xml_tag(stroke_tag), "SolidColorBrush")) ++ if (fz_xml_is_tag(stroke_tag, "SolidColorBrush")) + { + stroke_opacity_att = fz_xml_att(stroke_tag, "Opacity"); + stroke_att = fz_xml_att(stroke_tag, "Color"); +diff --git a/source/xps/xps-resource.c b/source/xps/xps-resource.c +index c2292e6..8e81ab8 100644 +--- a/source/xps/xps-resource.c ++++ b/source/xps/xps-resource.c +@@ -84,7 +84,7 @@ xps_parse_remote_resource_dictionary(fz_context *ctx, xps_document *doc, char *b + if (!xml) + return NULL; + +- if (strcmp(fz_xml_tag(xml), "ResourceDictionary")) ++ if (!fz_xml_is_tag(xml, "ResourceDictionary")) + { + fz_drop_xml(ctx, xml); + fz_throw(ctx, FZ_ERROR_GENERIC, "expected ResourceDictionary element"); +-- +2.9.1 + diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm index 6dbba2c7ec..f3df7c1045 100644 --- a/gnu/packages/pdf.scm +++ b/gnu/packages/pdf.scm @@ -7,7 +7,7 @@ ;;; Coypright © 2016 ng0 ;;; Coypright © 2016 Efraim Flashner ;;; Coypright © 2016, 2017 Marius Bakke -;;; Coypright © 2016 Ludovic Courtès +;;; Coypright © 2016, 2017 Ludovic Courtès ;;; Coypright © 2016 Julien Lepiller ;;; Copyright © 2016 Arun Isaac ;;; Copyright © 2017 Leo Famulari @@ -576,6 +576,9 @@ extracting content or merging files.") (base32 "02phamcchgsmvjnb3ir7r5sssvx9fcrscn297z73b82n1jl79510")) (patches (search-patches "mupdf-build-with-openjpeg-2.1.patch" + "mupdf-CVE-2017-14685.patch" + "mupdf-CVE-2017-14686.patch" + "mupdf-CVE-2017-14687.patch" "mupdf-CVE-2017-15587.patch")) (modules '((guix build utils))) (snippet @@ -747,7 +750,7 @@ vector formats.") (build-system python-build-system) ;; TODO: Add dependency on pdftk. - (inputs `(("python-pygame" ,python-pygame) + (inputs `(("python2-pygame" ,python2-pygame) ("python2-pillow" ,python2-pillow) ("sdl" ,sdl) ("xpdf" ,xpdf))) diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm index 0935cb45ba..438ccdf3f9 100644 --- a/gnu/packages/perl.scm +++ b/gnu/packages/perl.scm @@ -2378,6 +2378,29 @@ based memory management, circular references will cause memory leaks.") equivalent of \"$@{^GLOBAL_PHASE@} eq 'DESTRUCT'\" for older perls.") (license (package-license perl)))) +(define-public perl-devel-hide + (package + (name "perl-devel-hide") + (version "0.0009") + (source + (origin + (method url-fetch) + (uri (string-append "mirror://cpan/authors/id/F/FE/FERREIRA/Devel-Hide-" + version ".tar.gz")) + (sha256 + (base32 + "1phnzbw58v6551nhv6sg86m72nx9w5j4msh1hg4jvkakkq5w9pki")))) + (build-system perl-build-system) + (propagated-inputs + `(("perl-test-pod" ,perl-test-pod) + ("perl-test-pod-coverage" ,perl-test-pod-coverage))) + (home-page "http://search.cpan.org/dist/Devel-Hide/") + (synopsis "Forces the unavailability of specified Perl modules (for testing)") + (description "Given a list of Perl modules/filenames, this module makes +@code{require} and @code{use} statements fail (no matter whether the specified +files/modules are installed or not).") + (license (package-license perl)))) + (define-public perl-devel-lexalias (package (name "perl-devel-lexalias") @@ -6059,6 +6082,32 @@ Module::Build project, but has been externalized here for general use.") "Probe-Perl-" version)) (license (package-license perl)))) +(define-public perl-proc-invokeeditor + (package + (name "perl-proc-invokeeditor") + (version "1.13") + (source + (origin + (method url-fetch) + (uri (string-append "mirror://cpan/authors/id/M/MS/MSTEVENS/Proc-InvokeEditor-" + version ".tar.gz")) + (sha256 + (base32 + "0xc1416kvhq904ribpwh2lbxryh41dzl2glzpgr32b68s4fbwbaa")))) + (build-system perl-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'set-EDITOR + (lambda _ (setenv "EDITOR" "echo") #t))))) + (propagated-inputs + `(("perl-carp-assert" ,perl-carp-assert))) + (home-page "http://search.cpan.org/dist/Proc-InvokeEditor/") + (synopsis "Interface to external editor from Perl") + (description "This module provides the ability to supply some text to an +external text editor, have it edited by the user, and retrieve the results.") + (license (package-license perl)))) + (define-public perl-readonly (package (name "perl-readonly") @@ -6294,6 +6343,27 @@ compact.") arrays by one or multiple calculated keys.") (license (package-license perl)))) +(define-public perl-sort-naturally + (package + (name "perl-sort-naturally") + (version "1.03") + (source + (origin + (method url-fetch) + (uri (string-append "mirror://cpan/authors/id/B/BI/BINGOS/Sort-Naturally-" + version ".tar.gz")) + (sha256 + (base32 + "0ip7q5g8d3lr7ri3ffcbrpk1hzzsiwgsn14k10k7hnjphxf1raza")))) + (build-system perl-build-system) + (home-page "http://search.cpan.org/dist/Sort-Naturally/") + (synopsis "Sort lexically, but sort numeral parts numerically") + (description "This module exports two functions, @code{nsort} and +@code{ncmp}; they are used in implementing a \"natural sorting\" algorithm. +Under natural sorting, numeric substrings are compared numerically, and other +word-characters are compared lexically.") + (license (package-license perl)))) + (define-public perl-specio (package (name "perl-specio") @@ -6888,6 +6958,50 @@ other terminal related features, including retrieval/modification of the screen size, and retrieval/modification of the control characters.") (license (package-license perl)))) +(define-public perl-term-size-any + (package + (name "perl-term-size-any") + (version "0.002") + (source + (origin + (method url-fetch) + (uri (string-append "mirror://cpan/authors/id/F/FE/FERREIRA/" + "Term-Size-Any-" version ".tar.gz")) + (sha256 + (base32 + "1lnynd8pwjp3g85bl4nav6yigg2lag3sx5da989j7a733bdmzyk4")))) + (build-system perl-build-system) + (native-inputs + `(("perl-devel-hide" ,perl-devel-hide))) + (propagated-inputs + `(("perl-term-size-perl" ,perl-term-size-perl))) + (home-page "http://search.cpan.org/dist/Term-Size-Any/") + (synopsis "Retrieve terminal size") + (description "This is a unified interface to retrieve terminal size. It +loads one module of a list of known alternatives, each implementing some way +to get the desired terminal information. This loaded module will actually do +the job on behalf of @code{Term::Size::Any}.") + (license (package-license perl)))) + +(define-public perl-term-size-perl + (package + (name "perl-term-size-perl") + (version "0.029") + (source + (origin + (method url-fetch) + (uri (string-append "mirror://cpan/authors/id/F/FE/FERREIRA/" + "Term-Size-Perl-" version ".tar.gz")) + (sha256 + (base32 + "1rvm91bhdlxfwx5zka023p7szf2s7gm16wl27qiivvj66svsl6lc")))) + (build-system perl-build-system) + (home-page "http://search.cpan.org/dist/Term-Size-Perl/") + (synopsis "Perl extension for retrieving terminal size (Perl version)") + (description "This is yet another implementation of @code{Term::Size}. +Now in pure Perl, with the exception of a C probe run at build time.") + (license (package-license perl)))) + (define-public perl-term-table (package (name "perl-term-table") @@ -7782,6 +7896,32 @@ makes fork(2) safe to use in test cases.") "Test-Simple-" version)) (license (package-license perl)))) +(define-public perl-test-taint + (package + (name "perl-test-taint") + (version "1.06") + (source + (origin + (method url-fetch) + (uri (string-append "mirror://cpan/authors/id/P/PE/PETDANCE/Test-Taint-" + version ".tar.gz")) + (sha256 + (base32 + "01rip5d7gdr1c7lq6yczzkqfd0500nfa977ryigylj6jj75526vj")))) + (build-system perl-build-system) + (home-page "http://search.cpan.org/dist/Test-Taint/") + (synopsis "Checks for taintedness of variables") + (description "Tainted data is data that comes from an unsafe source, such +as the command line, or, in the case of web apps, any @code{GET} or +@code{POST} transactions. Read the @code{perlsec} man page for details on why +tainted data is bad, and how to untaint the data. + +When you're writing unit tests for code that deals with tainted data, you'll +want to have a way to provide tainted data for your routines to handle, and +easy ways to check and report on the taintedness of your data, in standard +@code{Test::More} style.") + (license (package-license perl)))) + (define-public perl-test-tester (package (name "perl-test-tester") @@ -8575,6 +8715,53 @@ distributed as part of @code{Type::Tiny} but has since been spun off), and can be used with Moose, Mouse and Moo (or none of the above).") (license (package-license perl)))) +(define-public perl-type-tiny-xs + (package + (name "perl-type-tiny-xs") + (version "0.012") + (source + (origin + (method url-fetch) + (uri (string-append "mirror://cpan/authors/id/T/TO/TOBYINK/Type-Tiny-XS-" + version ".tar.gz")) + (sha256 + (base32 + "05nbr898cvjjh1wsy55l84zasx65gijdxc6dnn558ihns8zx6gm9")))) + (build-system perl-build-system) + (home-page "http://search.cpan.org/dist/Type-Tiny-XS/") + (synopsis "Provides an XS boost for some of Type::Tiny's built-in type constraints") + (description "This module is optionally used by @code{Type::Tiny} to +provide faster, C-based implementations of some type constraints. This +package has only core dependencies, and does not depend on @code{Type::Tiny}, +so other data validation frameworks might also consider using it.") + (license perl-license))) + +(define-public perl-types-path-tiny + (package + (name "perl-types-path-tiny") + (version "0.005") + (source + (origin + (method url-fetch) + (uri (string-append "mirror://cpan/authors/id/D/DA/DAGOLDEN/" + "Types-Path-Tiny-" version ".tar.gz")) + (sha256 + (base32 + "09nf167ssi4rgj8hhzylwp3zdx61njdpyfri43arcmk9aqn7f0pp")))) + (build-system perl-build-system) + (propagated-inputs + `(("perl-file-pushd" ,perl-file-pushd) + ("perl-path-tiny" ,perl-path-tiny) + ("perl-type-tiny" ,perl-type-tiny) + ("perl-exporter-tiny" ,perl-exporter-tiny))) + (home-page "http://search.cpan.org/dist/Types-Path-Tiny/") + (synopsis "Types and coercions for Moose and Moo") + (description "This module provides @code{Path::Tiny} types for Moose, Moo, +etc. It handles two important types of coercion: coercing objects with +overloaded stringification, and coercing to absolute paths. It also can check +to ensure that files or directories exist.") + (license artistic2.0))) + (define-public perl-types-serialiser (package (name "perl-types-serialiser") diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm index 0b62c4a628..de9b321fb7 100644 --- a/gnu/packages/python.scm +++ b/gnu/packages/python.scm @@ -3191,14 +3191,14 @@ logging and tracing of the execution.") (define-public python-docutils (package (name "python-docutils") - (version "0.13.1") + (version "0.14") (source (origin (method url-fetch) (uri (pypi-uri "docutils" version)) (sha256 (base32 - "1gkma47i609jfs7dssxn4y9vsz06qi0l5q41nws0zgkpnrghz33i")))) + "0x22fs3pdmr42kvz6c654756wja305qv6cx1zbhwlagvxgr4xrji")))) (build-system python-build-system) (arguments '(#:tests? #f)) ; no setup.py test command @@ -8624,10 +8624,7 @@ simulation, statistical modeling, machine learning and much more.") (source (origin (method url-fetch) - (uri (string-append - "https://pypi.python.org/packages/source/c/chardet/chardet-" - version - ".tar.gz")) + (uri (pypi-uri "chardet" version)) (sha256 (base32 "1bpalpia6r5x1kknbk11p1fzph56fmmnp405ds8icksd3knr5aw4")))) @@ -13172,18 +13169,14 @@ from Facebook.") (base32 "09zhac7igh9ixdz0ay6csy35b40l1jwbf2wrbxmgxwfhy51iy06q")))) (build-system python-build-system) - (native-inputs - `(("python-django-filter" ,python-django-filter) - ("python-mock" ,python-mock) - ("python-psycopg2" ,python-psycopg2) - ("python-pytest-django" ,python-pytest-django) - ("python-sqlalchemy-utils" ,python-sqlalchemy-utils))) (propagated-inputs `(("python-graphql-core" ,python-graphql-core) ("python-graphql-relay" ,python-graphql-relay) ("python-iso8601" ,python-iso8601) ("python-promise" ,python-promise) ("python-six" ,python-six))) + (arguments + `(#:tests? #f)) ; no tests/ in the PyPI tarball (home-page "http://graphene-python.org/") (synopsis "GraphQL Framework for Python") (description diff --git a/gnu/packages/screen.scm b/gnu/packages/screen.scm index 0a92b73e34..5622d37877 100644 --- a/gnu/packages/screen.scm +++ b/gnu/packages/screen.scm @@ -38,13 +38,13 @@ (define-public screen (package (name "screen") - (version "4.6.1") + (version "4.6.2") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/screen/screen-" version ".tar.gz")) (sha256 - (base32 "0r3wpfxnr5kw73b8ndja26jk03nfbks06iyfmgb5aqb2rdkazadb")))) + (base32 "0fps0fsipfbh7c2cnp7rjw9n79j0ysq21mk8hzifa33a1r924s8v")))) (build-system gnu-build-system) (native-inputs `(("makeinfo" ,texinfo))) diff --git a/gnu/packages/syncthing.scm b/gnu/packages/syncthing.scm index b4bc1e0a8a..b23339de12 100644 --- a/gnu/packages/syncthing.scm +++ b/gnu/packages/syncthing.scm @@ -38,9 +38,15 @@ (base32 "07mrvd3vq0p4f550dpq73xg1vpa2h7xxz7vq07sjw0whapknkw9f")))) (build-system go-build-system) + ;; The primary Syncthing executable goes to "out", while the auxiliary + ;; server programs and utility tools go to "utils". This reduces the size + ;; of "out" by ~80 MiB. + (outputs '("out" "utils")) (arguments `(#:import-path "github.com/syncthing/syncthing" #:unpack-path "github.com/syncthing" + ;; We don't need to install the source code for end-user applications. + #:install-source? #f #:phases (modify-phases %standard-phases (add-after 'unpack 'delete-bundled-source-code @@ -55,9 +61,6 @@ "src/github.com/syncthing/syncthing/vendor/github.com/cznic") #t)) - ;; We don't need to install the source code for end-user applications. - (delete 'install-source) - (add-before 'build 'increase-test-timeout (lambda _ (substitute* "src/github.com/syncthing/syncthing/build.go" @@ -75,21 +78,39 @@ (zero? (system* "go" "run" "build.go" "test"))))) (replace 'install - (lambda _ - (copy-recursively "src/github.com/syncthing/syncthing/bin/" - (string-append (assoc-ref %outputs "out") "/bin")) - #t)) + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (utils (assoc-ref outputs "utils")) + (src "src/github.com/syncthing/syncthing/bin/")) + (install-file (string-append src "/syncthing") + (string-append out "/bin")) + (delete-file (string-append src "/syncthing")) + (copy-recursively "src/github.com/syncthing/syncthing/bin/" + (string-append utils "/bin")) + #t))) (add-after 'install 'install-docs (lambda* (#:key outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) - (man (string-append out "/share/man/man")) + (utils (assoc-ref outputs "utils")) + (man "/share/man") + (man-section (string-append man "/man")) (src "src/github.com/syncthing/syncthing/man/")) + ;; Install all the man pages to "out". (for-each (lambda (file) (install-file file - (string-append man (string-take-right file 1)))) + (string-append out man-section + (string-take-right file 1)))) (find-files src "\\.[1-9]")) + ;; Copy all the man pages to "utils" + (copy-recursively (string-append out man) + (string-append utils man)) + ;; Delete extraneous man pages from "out" and "utils", + ;; respectively. + (delete-file (string-append out man "/man1/stdiscosrv.1")) + (delete-file (string-append out man "/man1/strelaysrv.1")) + (delete-file (string-append utils man "/man1/syncthing.1")) #t)))))) ;; When updating Syncthing, check 'vendor/manifest' in the source ;; distribution to ensure we are using the correct versions of these diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm index 8038024b38..8480f74fec 100644 --- a/gnu/packages/version-control.scm +++ b/gnu/packages/version-control.scm @@ -124,14 +124,14 @@ as well as the classic centralized workflow.") (name "git") ;; XXX When updating Git, check if the special 'git:src' input to cgit needs ;; to be updated as well. - (version "2.14.2") + (version "2.14.3") (source (origin (method url-fetch) (uri (string-append "mirror://kernel.org/software/scm/git/git-" version ".tar.xz")) (sha256 (base32 - "18f70gfzwqd210806hmf94blcd7yv5h9ka6xqkpd2jhijqwp5sah")))) + "078m0za5gyzcah5iaxdwx663yvdp8byvjc8rpzjzcrr4sl6rcc2k")))) (build-system gnu-build-system) (native-inputs `(("native-perl" ,perl) @@ -145,7 +145,7 @@ as well as the classic centralized workflow.") (sha256 (base32 - "1z05a7hxxndyby3dbj3gaw91sjwmky5d1yph96jmj0fhx78m1lvd")))))) + "00dh878pwl94p6syh6zgwn7f0zv2bl5xny3pnr390lzxpa9ks3jv")))))) (inputs `(("curl" ,curl) ("expat" ,expat) diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm index 8fce545dbe..c8ab607028 100644 --- a/gnu/packages/virtualization.scm +++ b/gnu/packages/virtualization.scm @@ -2,7 +2,7 @@ ;;; Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès ;;; Copyright © 2015, 2016, 2017 Mark H Weaver ;;; Copyright © 2016, 2017 Efraim Flashner -;;; Copyright © 2016 Ricardo Wurmus +;;; Copyright © 2016, 2017 Ricardo Wurmus ;;; Copyright © 2017 Alex Vong ;;; Copyright © 2017 Andy Patterson ;;; @@ -32,6 +32,8 @@ #:use-module (gnu packages cyrus-sasl) #:use-module (gnu packages disk) #:use-module (gnu packages dns) + #:use-module (gnu packages docbook) + #:use-module (gnu packages documentation) #:use-module (gnu packages gl) #:use-module (gnu packages glib) #:use-module (gnu packages gnome) @@ -40,9 +42,11 @@ #:use-module (gnu packages libusb) #:use-module (gnu packages linux) #:use-module (gnu packages ncurses) + #:use-module (gnu packages networking) #:use-module (gnu packages perl) #:use-module (gnu packages pkg-config) #:use-module (gnu packages polkit) + #:use-module (gnu packages protobuf) #:use-module (gnu packages python) #:use-module (gnu packages selinux) #:use-module (gnu packages sdl) @@ -55,7 +59,7 @@ #:use-module (guix build-system gnu) #:use-module (guix build-system python) #:use-module (guix download) - #:use-module ((guix licenses) #:select (gpl2 gpl2+ lgpl2.1+)) + #:use-module ((guix licenses) #:select (gpl2 gpl2+ lgpl2.1 lgpl2.1+)) #:use-module (guix packages) #:use-module (guix utils) #:use-module (srfi srfi-1)) @@ -573,3 +577,97 @@ virtual machines through libvirt. It primarily targets KVM VMs, but also manages Xen and LXC (Linux containers). It presents a summary view of running domains, their live performance and resource utilization statistics.") (license gpl2+))) + +(define-public criu + (package + (name "criu") + (version "3.5") + (source (origin + (method url-fetch) + (uri (string-append "http://download.openvz.org/criu/criu-" + version ".tar.bz2")) + (sha256 + (base32 + "1w0ybla7ac0ql0jzh0vxdf2w9amqp88jcg0na3b33r3hq8acry6x")))) + (build-system gnu-build-system) + (arguments + `(#:test-target "test" + #:tests? #f ; tests require mounting as root + #:make-flags + (list (string-append "PREFIX=" (assoc-ref %outputs "out")) + (string-append "LIBDIR=" (assoc-ref %outputs "out") + "/lib")) + #:phases + (modify-phases %standard-phases + (replace 'configure + (lambda* (#:key inputs #:allow-other-keys) + ;; The includes for libnl are located in a sub-directory. + (setenv "C_INCLUDE_PATH" + (string-append (assoc-ref inputs "libnl") + "/include/libnl3:" + (getenv "C_INCLUDE_PATH"))) + ;; Prevent xmlto from failing the install phase. + (substitute* "Documentation/Makefile" + (("XMLTO.*:=.*") + (string-append "XMLTO:=" + (assoc-ref inputs "xmlto") + "/bin/xmlto" + " --skip-validation " + " -x " + (assoc-ref inputs "docbook-xsl") + "/xml/xsl/docbook-xsl-" + ,(package-version docbook-xsl) + "/manpages/docbook.xsl"))) + #t)) + (add-before 'build 'fix-symlink + (lambda* (#:key inputs #:allow-other-keys) + ;; The file 'images/google/protobuf/descriptor.proto' points to + ;; /usr/include/..., which obviously does not exist. + (let* ((file "google/protobuf/descriptor.proto") + (target (string-append "images/" file)) + (source (string-append (assoc-ref inputs "protobuf") + "/include/" file))) + (delete-file target) + (symlink source target) + #t))) + (add-after 'install 'wrap + (lambda* (#:key inputs outputs #:allow-other-keys) + ;; Make sure 'crit' runs with the correct PYTHONPATH. + (let* ((out (assoc-ref outputs "out")) + (path (string-append out + "/lib/python" + (string-take (string-take-right + (assoc-ref inputs "python") 5) 3) + "/site-packages:" + (getenv "PYTHONPATH")))) + (wrap-program (string-append out "/bin/crit") + `("PYTHONPATH" ":" prefix (,path)))) + #t))))) + (inputs + `(("protobuf" ,protobuf) + ("python" ,python-2) + ("python2-protobuf" ,python2-protobuf) + ("python2-ipaddr" ,python2-ipaddr) + ("iproute" ,iproute) + ("libaio" ,libaio) + ("libcap" ,libcap) + ("libnet" ,libnet) + ("libnl" ,libnl))) + (native-inputs + `(("pkg-config" ,pkg-config) + ("perl" ,perl) + ("protobuf-c" ,protobuf-c) + ("asciidoc" ,asciidoc) + ("xmlto" ,xmlto) + ("docbook-xml" ,docbook-xml) + ("docbook-xsl" ,docbook-xsl))) + (home-page "https://criu.org") + (synopsis "Checkpoint and restore in user space") + (description "Using this tool, you can freeze a running application (or +part of it) and checkpoint it to a hard drive as a collection of files. You +can then use the files to restore and run the application from the point it +was frozen at. The distinctive feature of the CRIU project is that it is +mainly implemented in user space.") + ;; The project is licensed under GPLv2; files in the lib/ directory are + ;; LGPLv2.1. + (license (list gpl2 lgpl2.1)))) diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm index c7b44fafa1..9fc47969ae 100644 --- a/gnu/packages/web.scm +++ b/gnu/packages/web.scm @@ -20,6 +20,7 @@ ;;; Copyright © 2017 Thomas Danckaert ;;; Copyright © 2017 Marius Bakke ;;; Copyright © 2017 Kei Kebreau +;;; Copyright © 2017 Petter ;;; ;;; This file is part of GNU Guix. ;;; @@ -52,6 +53,7 @@ #:use-module (guix build-system r) #:use-module (guix build-system trivial) #:use-module (guix build-system python) + #:use-module (guix build-system ant) #:use-module (gnu packages) #:use-module (gnu packages apr) #:use-module (gnu packages check) @@ -2890,6 +2892,35 @@ contains modules that are of more general use and even classes that help you implement simple HTTP servers.") (home-page "http://search.cpan.org/dist/libwww-perl/"))) +(define-public perl-lwp-online + (package + (name "perl-lwp-online") + (version "1.08") + (source + (origin + (method url-fetch) + (uri (string-append + "mirror://cpan/authors/id/A/AD/ADAMK/LWP-Online-" + version ".tar.gz")) + (sha256 + (base32 + "176f6vbk1018i0y7xj9d406ndbjgwzan2j9nihxnsahzg2vr2vz2")))) + (build-system perl-build-system) + (propagated-inputs + `(("perl-libwww" ,perl-libwww) + ("perl-uri" ,perl-uri))) + (native-inputs + `(("perl-module-install" ,perl-module-install))) + (home-page "http://search.cpan.org/dist/LWP-Online/") + (synopsis "Checks whether your process has access to the web") + (description "This module attempts to answer, as accurately as it can, one +of the nastiest technical questions there is: am I on the internet? + +A host of networking and security issues make this problem very difficult. +There are firewalls, proxies (both well behaved and badly behaved). We might +not have DNS. We might not have a network card at all!") + (license l:perl-license))) + (define-public perl-lwp-mediatypes (package (name "perl-lwp-mediatypes") @@ -5384,3 +5415,583 @@ collection creation and deletion, and locking operations.") "Py-ubjson is a Python module providing an Universal Binary JSON encoder/decoder based on the draft-12 specification for UBJSON.") (license l:asl2.0))) + +(define-public java-tomcat + (package + (name "java-tomcat") + (version "8.5.23") + (source (origin + (method url-fetch) + (uri (string-append "mirror://apache/tomcat/tomcat-8/v" + version "/src/apache-tomcat-" version "-src.tar.gz")) + (sha256 + (base32 + "1m6b1dikib46kbgz9gf0p6svi00nsw62b9kgjzn6sda151skbbza")))) + (build-system ant-build-system) + (inputs + `(("java-eclipse-jdt-core" ,java-eclipse-jdt-core))) + (native-inputs + `(("java-junit" ,java-junit))) + (arguments + `(#:build-target "package" + #:tests? #f; requires downloading some files. + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'prevent-download + (lambda _ + ;; This directory must exist + (mkdir "downloads") + ;; We patch build.xml so it doesn't download any dependency, because + ;; we already have all of them. + (substitute* "build.xml" + (("download-compile,") "") + (("depends=\"validate\"") "depends=\"build-prepare\"") + ((",download-validate") "")) + #t)) + (add-after 'unpack 'generate-properties + (lambda _ + ;; This could have been passed to make-flags, but getcwd returns + ;; a different directory then. + (with-output-to-file "build.properties" + (lambda _ + (display + (string-append "base.path=" (getcwd) "/downloads\n")))) + #t)) + (replace 'install + (install-jars "output/build/lib"))))) + (home-page "https://tomcat.apache.org") + (synopsis "Java Servlet, JavaServer Pages, Java Expression Language and Java +WebSocket") + (description "Apache Tomcat is a free implementation of the Java +Servlet, JavaServer Pages, Java Expression Language and Java WebSocket +technologies.") + (license l:asl2.0))) + +(define-public java-eclipse-jetty-test-helper + (package + (name "java-eclipse-jetty-test-helper") + (version "4.2") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/eclipse/jetty.toolchain/" + "archive/jetty-test-helper-" version ".tar.gz")) + (sha256 + (base32 + "1jd6r9wc26fa11si4rn2gvy8ml8q4zw1nr6v04mjp8wvwpgvzwx5")))) + (build-system ant-build-system) + (arguments + `(#:jar-name "eclipse-jetty-test-helper.jar" + #:source-dir "src/main/java" + #:test-dir "src/test" + #:jdk ,icedtea-8 + #:phases + (modify-phases %standard-phases + (add-before 'configure 'chdir + (lambda _ + (chdir "jetty-test-helper"))) + (add-before 'build 'fix-paths + (lambda _ + ;; TODO: + ;; This file assumes that the build directory is named "target" + ;; but it is not the case with our ant-build-system. Once we have + ;; maven though, we will have to rebuild this package because this + ;; assumption is correct with maven-build-system. + (substitute* + "src/main/java/org/eclipse/jetty/toolchain/test/MavenTestingUtils.java" + (("\"target\"") "\"build\"") + (("\"tests\"") "\"test-classes\"")) + ;; Tests assume we are building with maven, so that the build + ;; directory is named "target", and not "build". + (with-directory-excursion "src/test/java/org/eclipse/jetty/toolchain/test" + (substitute* '("FSTest.java" "OSTest.java" "TestingDirTest.java" + "MavenTestingUtilsTest.java") + (("target/tests") "build/test-classes") + (("\"target") "\"build"))) + #t))))) + (inputs + `(("junit" ,java-junit) + ("hamcrest" ,java-hamcrest-all))) + (home-page "https://www.eclipse.org/jetty/") + (synopsis "Helper classes for jetty tests") + (description "This packages contains helper classes for testing the Jetty +Web Server.") + ;; This program is licensed under both epl and asl. + (license (list l:epl1.0 l:asl2.0)))) + +(define-public java-eclipse-jetty-perf-helper + (package + (inherit java-eclipse-jetty-test-helper) + (name "java-eclipse-jetty-perf-helper") + (arguments + `(#:jar-name "eclipse-jetty-perf-helper.jar" + #:source-dir "src/main/java" + #:tests? #f; no tests + #:jdk ,icedtea-8 + #:phases + (modify-phases %standard-phases + (add-before 'configure 'chdir + (lambda _ + (chdir "jetty-perf-helper") + #t))))) + (inputs + `(("hdrhistogram" ,java-hdrhistogram))))) + +(define-public java-eclipse-jetty-util + (package + (name "java-eclipse-jetty-util") + (version "9.4.6") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/eclipse/jetty.project/" + "archive/jetty-" version ".v20170531.tar.gz")) + (sha256 + (base32 + "0x7kbdvkmgr6kbsmbwiiyv3bb0d6wk25frgvld9cf8540136z9p1")))) + (build-system ant-build-system) + (arguments + `(#:jar-name "eclipse-jetty-util.jar" + #:source-dir "src/main/java" + #:test-exclude + (list "**/Abstract*.java" + ;; requires network + "**/InetAddressSetTest.java" + ;; Assumes we are using maven + "**/TypeUtilTest.java" + ;; Error on the style of log + "**/StdErrLogTest.java") + #:jdk ,icedtea-8 + #:phases + (modify-phases %standard-phases + (add-before 'configure 'chdir + (lambda _ + (chdir "jetty-util") + #t))))) + (inputs + `(("slf4j" ,java-slf4j-api) + ("servlet" ,java-tomcat))) + (native-inputs + `(("junit" ,java-junit) + ("hamcrest" ,java-hamcrest-all) + ("perf-helper" ,java-eclipse-jetty-perf-helper) + ("test-helper" ,java-eclipse-jetty-test-helper))) + (home-page "https://www.eclipse.org/jetty/") + (synopsis "Utility classes for Jetty") + (description "The Jetty Web Server provides an HTTP server and Servlet +container capable of serving static and dynamic content either from a standalone +or embedded instantiation. This package provides utility classes.") + (license (list l:epl1.0 l:asl2.0)))) + +;; This version is required by maven-wagon +(define-public java-eclipse-jetty-util-9.2 + (package + (inherit java-eclipse-jetty-util) + (version "9.2.22") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/eclipse/jetty.project/" + "archive/jetty-" version ".v20170606.tar.gz")) + (sha256 + (base32 + "1i51qlsd7h06d35kx5rqpzbfadbcszycx1iwr6vz7qc9gf9f29la")))) + (arguments + `(#:jar-name "eclipse-jetty-util.jar" + #:source-dir "src/main/java" + #:jdk ,icedtea-8 + #:test-exclude + (list "**/Abstract*.java" + ;; requires network + "**/InetAddressSetTest.java" + ;; Assumes we are using maven + "**/TypeUtilTest.java" + ;; We don't have an implementation for slf4j + "**/LogTest.java" + ;; Error on the style of log + "**/StdErrLogTest.java") + #:phases + (modify-phases %standard-phases + (add-before 'configure 'chdir + (lambda _ + (chdir "jetty-util") + #t)) + (add-before 'build 'fix-test-sources + (lambda _ + ;; We need to fix issues caused by changes in newer versions of + ;; jetty-test-helper + (let ((src "src/test/java/org/eclipse/jetty/util/resource")) + (substitute* (string-append src "/AbstractFSResourceTest.java") + (("testdir.getDir\\(\\)") "testdir.getPath().toFile()") + (("testdir.getFile\\(\"foo\"\\)") + "testdir.getPathFile(\"foo\").toFile()") + (("testdir.getFile\\(name\\)") + "testdir.getPathFile(name).toFile()"))) + #t))))))) + +(define-public java-eclipse-jetty-io + (package + (inherit java-eclipse-jetty-util) + (name "java-eclipse-jetty-io") + (arguments + `(#:jar-name "eclipse-jetty-io.jar" + #:source-dir "src/main/java" + #:jdk ,icedtea-8 + #:test-exclude (list "**/Abstract*.java" + ;; Abstract class + "**/EndPointTest.java") + #:phases + (modify-phases %standard-phases + (add-before 'configure 'chdir + (lambda _ + (chdir "jetty-io") + #t))))) + (inputs + `(("slf4j" ,java-slf4j-api) + ("servlet" ,java-tomcat) + ("util" ,java-eclipse-jetty-util))) + (synopsis "Jetty :: IO Utility") + (description "The Jetty Web Server provides an HTTP server and Servlet +container capable of serving static and dynamic content either from a standalone +or embedded instantiation. This package provides IO-related utility classes."))) + +(define-public java-eclipse-jetty-io-9.2 + (package + (inherit java-eclipse-jetty-io) + (version (package-version java-eclipse-jetty-util-9.2)) + (source (package-source java-eclipse-jetty-util-9.2)) + (inputs + `(("util" ,java-eclipse-jetty-util-9.2) + ,@(package-inputs java-eclipse-jetty-util-9.2))) + (native-inputs + `(("mockito" ,java-mockito-1) + ("cglib" ,java-cglib) + ("objenesis" ,java-objenesis) + ("asm" ,java-asm) + ,@(package-native-inputs java-eclipse-jetty-util-9.2))))) + +(define-public java-eclipse-jetty-http + (package + (inherit java-eclipse-jetty-util) + (name "java-eclipse-jetty-http") + (arguments + `(#:jar-name "eclipse-jetty-http.jar" + #:source-dir "src/main/java" + #:jdk ,icedtea-8 + #:phases + (modify-phases %standard-phases + (add-before 'configure 'chdir + (lambda _ + (chdir "jetty-http") + #t)) + (add-before 'build 'copy-resources + (lambda _ + (mkdir-p "build/classes") + (copy-recursively "src/main/resources/" "build/classes/") + #t))))) + (inputs + `(("slf4j" ,java-slf4j-api) + ("servlet" ,java-tomcat) + ("io" ,java-eclipse-jetty-io) + ("util" ,java-eclipse-jetty-util))) + (synopsis "Jetty :: Http Utility") + (description "The Jetty Web Server provides an HTTP server and Servlet +container capable of serving static and dynamic content either from a standalone +or embedded instantiation. This package provides HTTP-related utility classes."))) + +(define-public java-eclipse-jetty-http-9.2 + (package + (inherit java-eclipse-jetty-http) + (version (package-version java-eclipse-jetty-util-9.2)) + (source (package-source java-eclipse-jetty-util-9.2)) + (inputs + `(("util" ,java-eclipse-jetty-util-9.2) + ("io" ,java-eclipse-jetty-io-9.2) + ,@(package-inputs java-eclipse-jetty-util-9.2))))) + +(define-public java-eclipse-jetty-jmx + (package + (inherit java-eclipse-jetty-util) + (name "java-eclipse-jetty-jmx") + (arguments + `(#:jar-name "eclipse-jetty-jmx.jar" + #:source-dir "src/main/java" + #:jdk ,icedtea-8 + #:tests? #f; FIXME: requires com.openpojo.validation + #:phases + (modify-phases %standard-phases + (add-before 'configure 'chdir + (lambda _ + (chdir "jetty-jmx") + #t))))) + (inputs + `(("slf4j" ,java-slf4j-api) + ("servlet" ,java-tomcat) + ("util" ,java-eclipse-jetty-util))) + (synopsis "Jetty :: JMX Management") + (description "The Jetty Web Server provides an HTTP server and Servlet +container capable of serving static and dynamic content either from a standalone +or embedded instantiation. This package provides the JMX management."))) + +(define-public java-eclipse-jetty-jmx-9.2 + (package + (inherit java-eclipse-jetty-jmx) + (version (package-version java-eclipse-jetty-util-9.2)) + (source (package-source java-eclipse-jetty-util-9.2)) + (inputs + `(("util" ,java-eclipse-jetty-util-9.2) + ,@(package-inputs java-eclipse-jetty-util-9.2))))) + +(define java-eclipse-jetty-http-test-classes + (package + (inherit java-eclipse-jetty-util) + (name "java-eclipse-jetty-http-test-classes") + (arguments + `(#:jar-name "eclipse-jetty-http.jar" + #:source-dir "src/test" + #:tests? #f + #:jdk ,icedtea-8 + #:phases + (modify-phases %standard-phases + (add-before 'configure 'chdir + (lambda _ + (chdir "jetty-http")))))) + (inputs + `(("slf4j" ,java-slf4j-api) + ("servlet" ,java-tomcat) + ("http" ,java-eclipse-jetty-http) + ("io" ,java-eclipse-jetty-io) + ("util" ,java-eclipse-jetty-util))))) + +(define java-eclipse-jetty-http-test-classes-9.2 + (package + (inherit java-eclipse-jetty-http-test-classes) + (version (package-version java-eclipse-jetty-util-9.2)) + (source (package-source java-eclipse-jetty-util-9.2)) + (inputs + `(("http" ,java-eclipse-jetty-http-9.2) + ,@(package-inputs java-eclipse-jetty-http-9.2))))) + +(define-public java-eclipse-jetty-server + (package + (inherit java-eclipse-jetty-util) + (name "java-eclipse-jetty-server") + (arguments + `(#:jar-name "eclipse-jetty-server.jar" + #:source-dir "src/main/java" + #:jdk ,icedtea-8 + #:tests? #f; requires a mockito version we don't have + #:phases + (modify-phases %standard-phases + (add-before 'configure 'chdir + (lambda _ + (chdir "jetty-server") + #t)) + (add-before 'build 'fix-source + (lambda _ + ;; Explicit casts to prevent build failures + (substitute* "src/main/java/org/eclipse/jetty/server/Request.java" + (("append\\(LazyList") + "append((CharSequence)LazyList")) + (substitute* + "src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java" + (((string-append + "Class<\\? extends EventListener> clazz = _classLoader==null" + "\\?Loader.loadClass\\(ContextHandler.class,className\\):" + "_classLoader.loadClass\\(className\\);")) + (string-append "Class clazz = " + "(Class) " + "(_classLoader==null?Loader.loadClass(" + "ContextHandler.class,className):" + "_classLoader.loadClass(className));"))) + #t))))) + (inputs + `(("slf4j" ,java-slf4j-api) + ("servlet" ,java-tomcat) + ("http" ,java-eclipse-jetty-http) + ("io" ,java-eclipse-jetty-io) + ("jmx" ,java-eclipse-jetty-jmx) + ("util" ,java-eclipse-jetty-util))) + (native-inputs + `(("test-classes" ,java-eclipse-jetty-http-test-classes) + ,@(package-native-inputs java-eclipse-jetty-util))) + (synopsis "Core jetty server artifact") + (description "The Jetty Web Server provides an HTTP server and Servlet +container capable of serving static and dynamic content either from a standalone +or embedded instantiation. This package provides the core jetty server +artifact."))) + +(define-public java-eclipse-jetty-server-9.2 + (package + (inherit java-eclipse-jetty-server) + (version (package-version java-eclipse-jetty-util-9.2)) + (source (package-source java-eclipse-jetty-util-9.2)) + (inputs + `(("util" ,java-eclipse-jetty-util-9.2) + ("jmx" ,java-eclipse-jetty-jmx-9.2) + ("io" ,java-eclipse-jetty-io-9.2) + ("http" ,java-eclipse-jetty-http-9.2) + ,@(package-inputs java-eclipse-jetty-util-9.2))) + (native-inputs + `(("test-classes" ,java-eclipse-jetty-http-test-classes-9.2) + ,@(package-native-inputs java-eclipse-jetty-util-9.2))))) + +(define-public java-eclipse-jetty-security + (package + (inherit java-eclipse-jetty-util) + (name "java-eclipse-jetty-security") + (arguments + `(#:jar-name "eclipse-jetty-security.jar" + #:source-dir "src/main/java" + #:jdk ,icedtea-8 + #:phases + (modify-phases %standard-phases + (add-before 'configure 'chdir + (lambda _ + (chdir "jetty-security") + #t))))) + (inputs + `(("slf4j" ,java-slf4j-api) + ("servlet" ,java-tomcat) + ("http" ,java-eclipse-jetty-http) + ("server" ,java-eclipse-jetty-server) + ("util" ,java-eclipse-jetty-util))) + (native-inputs + `(("io" ,java-eclipse-jetty-io) + ,@(package-native-inputs java-eclipse-jetty-util))) + (synopsis "Jetty security infrastructure") + (description "The Jetty Web Server provides an HTTP server and Servlet +container capable of serving static and dynamic content either from a standalone +or embedded instantiation. This package provides the core jetty security +infrastructure"))) + +(define-public java-eclipse-jetty-security-9.2 + (package + (inherit java-eclipse-jetty-security) + (version (package-version java-eclipse-jetty-util-9.2)) + (source (package-source java-eclipse-jetty-util-9.2)) + (inputs + `(("util" ,java-eclipse-jetty-util-9.2) + ("http" ,java-eclipse-jetty-http-9.2) + ("server" ,java-eclipse-jetty-server-9.2) + ,@(package-inputs java-eclipse-jetty-util-9.2))) + (native-inputs + `(("io" ,java-eclipse-jetty-io-9.2) + ,@(package-native-inputs java-eclipse-jetty-util-9.2))))) + +(define-public java-eclipse-jetty-servlet + (package + (inherit java-eclipse-jetty-util) + (name "java-eclipse-jetty-servlet") + (arguments + `(#:jar-name "eclipse-jetty-servlet.jar" + #:source-dir "src/main/java" + #:jdk ,icedtea-8 + #:phases + (modify-phases %standard-phases + (add-before 'configure 'chdir + (lambda _ + (chdir "jetty-servlet") + #t))))) + (inputs + `(("slf4j" ,java-slf4j-api) + ("servlet" ,java-tomcat) + ("http" ,java-eclipse-jetty-http) + ("http-test" ,java-eclipse-jetty-http-test-classes) + ("io" ,java-eclipse-jetty-io) + ("jmx" ,java-eclipse-jetty-jmx) + ("security" ,java-eclipse-jetty-security) + ("server" ,java-eclipse-jetty-server) + ("util" ,java-eclipse-jetty-util))) + (synopsis "Jetty Servlet Container") + (description "The Jetty Web Server provides an HTTP server and Servlet +container capable of serving static and dynamic content either from a standalone +or embedded instantiation. This package provides the core jetty servlet +container."))) + +(define-public java-eclipse-jetty-servlet-9.2 + (package + (inherit java-eclipse-jetty-servlet) + (version (package-version java-eclipse-jetty-util-9.2)) + (source (package-source java-eclipse-jetty-util-9.2)) + (arguments + `(#:jar-name "eclipse-jetty-servlet.jar" + #:source-dir "src/main/java" + #:jdk ,icedtea-8 + #:tests? #f; doesn't work + #:phases + (modify-phases %standard-phases + (add-before 'configure 'chdir + (lambda _ + (chdir "jetty-servlet") + #t))))) + (inputs + `(("util" ,java-eclipse-jetty-util-9.2) + ("jmx" ,java-eclipse-jetty-jmx-9.2) + ("io" ,java-eclipse-jetty-io-9.2) + ("http" ,java-eclipse-jetty-http-9.2) + ("security" ,java-eclipse-jetty-security-9.2) + ("http-test" ,java-eclipse-jetty-http-test-classes-9.2) + ("server" ,java-eclipse-jetty-server-9.2) + ,@(package-inputs java-eclipse-jetty-util-9.2))))) + +(define-public tidyp + (package + (name "tidyp") + (version "1.04") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/downloads/petdance/tidyp/tidyp-" + version ".tar.gz")) + (sha256 + (base32 + "0f5ky0ih4vap9c6j312jn73vn8m2bj69pl2yd3a5nmv35k9zmc10")))) + (build-system gnu-build-system) + ;; ./test-thing.sh tries to run ./testall.sh, which is not included. + (arguments `(#:tests? #f)) + (home-page "http://www.tidyp.com/") + (synopsis "Validate HTML") + (description "Tidyp is a program that can validate your HTML, as well as +modify it to be more clean and standard. tidyp does not validate HTML 5. + +libtidyp is the library on which the program is based. It can be used by any +other program that can interface to it. The Perl module @code{HTML::Tidy} is +based on this library, allowing Perl programmers to easily validate HTML.") + ;; See htmldoc/license.html + (license l:bsd-3))) + +(define-public perl-html-tidy + (package + (name "perl-html-tidy") + (version "1.60") + (source + (origin + (method url-fetch) + (uri (string-append "mirror://cpan/authors/id/P/PE/PETDANCE/HTML-Tidy-" + version ".tar.gz")) + (sha256 + (base32 + "1iyp2fd6j75cn1xvcwl2lxr8qpjxssy2360cyqn6g3kzd1fzdyxw")))) + (build-system perl-build-system) + (arguments + '(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'fix-tidyp-paths + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "Makefile.PL" + (("^my \\$inc = \"" line) + (string-append line + "-I" (assoc-ref inputs "tidyp") "/include/tidyp ")) + (("-L/usr/lib") + (string-append + "-L" (assoc-ref inputs "tidyp") "/lib"))) + #t))))) + (inputs + `(("perl-libwww" ,perl-libwww) + ("tidyp" ,tidyp))) + (native-inputs + `(("perl-test-exception" ,perl-test-exception))) + (home-page "http://search.cpan.org/dist/HTML-Tidy/") + (synopsis "(X)HTML validation in a Perl object") + (description "@code{HTML::Tidy} is an HTML checker in a handy dandy +object. It's meant as a replacement for @code{HTML::Lint}, which is written +in Perl but is not nearly as capable as @code{HTML::Tidy}.") + (license l:artistic2.0))) diff --git a/gnu/packages/xml.scm b/gnu/packages/xml.scm index 1dc7530969..13eb608144 100644 --- a/gnu/packages/xml.scm +++ b/gnu/packages/xml.scm @@ -17,6 +17,7 @@ ;;; Copyright © 2017 Adriano Peluso ;;; Copyright © 2017 Gregor Giesen ;;; Copyright © 2017 Alex Vong +;;; Copyright © 2017 Petter ;;; ;;; This file is part of GNU Guix. ;;; @@ -1235,3 +1236,160 @@ 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))) + +(define-public perl-xml-xpathengine + (package + (name "perl-xml-xpathengine") + (version "0.14") + (source (origin + (method url-fetch) + (uri (string-append "mirror://cpan/authors/id/M/MI/MIROD/" + "XML-XPathEngine-" version ".tar.gz")) + (sha256 + (base32 + "0r72na14bmsxfd16s9nlza155amqww0k8wsa9x2a3sqbpp5ppznj")))) + (build-system perl-build-system) + (home-page "http://search.cpan.org/dist/XML-XPathEngine/") + (synopsis "Re-usable XPath engine for DOM-like trees") + (description + "This module provides an XPath engine, that can be re-used by other +modules/classes that implement trees. + +In order to use the XPath engine, nodes in the user module need to mimick DOM +nodes. The degree of similitude between the user tree and a DOM dictates how +much of the XPath features can be used. A module implementing all of the DOM +should be able to use this module very easily (you might need to add the +@code{cmp} method on nodes in order to get ordered result sets).") + (license license:perl-license))) + +(define-public perl-tree-xpathengine + (package + (name "perl-tree-xpathengine") + (version "0.05") + (source (origin + (method url-fetch) + (uri (string-append "mirror://cpan/authors/id/M/MI/MIROD/" + "Tree-XPathEngine-" version ".tar.gz")) + (sha256 + (base32 + "1vbbw8wxm79r3xbra8narw1dqvm34510q67wbmg2zmj6zd1k06r9")))) + (build-system perl-build-system) + (home-page "http://search.cpan.org/dist/Tree-XPathEngine/") + (synopsis "Re-usable XPath engine") + (description + "This module provides an XPath engine, that can be re-used by other +module/classes that implement trees. It is designed to be compatible with +@code{Class::XPath}, ie it passes its tests if you replace @code{Class::XPath} +by @code{Tree::XPathEngine}.") + (license license:perl-license))) + +(define-public perl-xml-filter-buffertext + (package + (name "perl-xml-filter-buffertext") + (version "1.01") + (source + (origin + (method url-fetch) + (uri (string-append "mirror://cpan/authors/id/R/RB/RBERJON/" + "XML-Filter-BufferText-" version ".tar.gz")) + (sha256 + (base32 + "0p5785c1dsk6kdp505vapb5h54k8krrz8699hpgm9igf7dni5llg")))) + (build-system perl-build-system) + (propagated-inputs + `(("perl-xml-sax-base" ,perl-xml-sax-base))) + (home-page "http://search.cpan.org/dist/XML-Filter-BufferText/") + (synopsis "Filter to put all characters() in one event") + (description "This is a very simple filter. One common cause of +grief (and programmer error) is that XML parsers aren't required to provide +character events in one chunk. They can, but are not forced to, and most +don't. This filter does the trivial but oft-repeated task of putting all +characters into a single event.") + (license license:perl-license))) + +(define-public perl-xml-sax-writer + (package + (name "perl-xml-sax-writer") + (version "0.57") + (source (origin + (method url-fetch) + (uri (string-append + "mirror://cpan/authors/id/P/PE/PERIGRIN/" + "XML-SAX-Writer-" version ".tar.gz")) + (sha256 + (base32 + "1w1cd1ybxdvhmnxdlkywi3x5ka3g4md42kyynksjc09vyizd0q9x")))) + (build-system perl-build-system) + (propagated-inputs + `(("perl-libxml" ,perl-libxml) + ("perl-xml-filter-buffertext" ,perl-xml-filter-buffertext) + ("perl-xml-namespacesupport", perl-xml-namespacesupport) + ("perl-xml-sax-base" ,perl-xml-sax-base))) + (home-page "http://search.cpan.org/dist/XML-SAX-Writer/") + (synopsis "SAX2 XML Writer") + (description + "This is an XML writer that understands SAX2. It is based on +@code{XML::Handler::YAWriter}.") + (license license:perl-license))) + +(define-public perl-xml-handler-yawriter + (package + (name "perl-xml-handler-yawriter") + (version "0.23") + (source + (origin + (method url-fetch) + (uri (string-append "mirror://cpan/authors/id/K/KR/KRAEHE/" + "XML-Handler-YAWriter-" version ".tar.gz")) + (sha256 + (base32 + "11d45a1sz862va9rry3p2m77pwvq3kpsvgwhc5ramh9mbszbnk77")))) + (build-system perl-build-system) + (propagated-inputs + `(("perl-libxml" ,perl-libxml))) + (home-page "http://search.cpan.org/dist/XML-Handler-YAWriter/") + (synopsis "Yet another Perl SAX XML Writer") + (description "YAWriter implements Yet Another @code{XML::Handler::Writer}. +It provides a flexible escaping technique and pretty printing.") + (license license:perl-license))) + +(define-public perl-xml-twig + (package + (name "perl-xml-twig") + (version "3.52") + (source (origin + (method url-fetch) + (uri (string-append "mirror://cpan/authors/id/M/MI/MIROD/" + "XML-Twig-" version ".tar.gz")) + (sha256 + (base32 + "1bc0hrz4jp6199hi29sdxmb9gyy45whla9hd19yqfasgq8k5ixzy")))) + (build-system perl-build-system) + (inputs + `(("expat" ,expat))) + (propagated-inputs + `(("perl-html-tidy" ,perl-html-tidy) + ("perl-html-tree" ,perl-html-tree) + ("perl-io-captureoutput" ,perl-io-captureoutput) + ("perl-io-string" ,perl-io-string) + ("perl-io-stringy" ,perl-io-stringy) + ("perl-libxml" ,perl-libxml) + ("perl-xml-filter-buffertext" ,perl-xml-filter-buffertext) + ("perl-xml-handler-yawriter" ,perl-xml-handler-yawriter) + ("perl-xml-parser" ,perl-xml-parser) + ("perl-xml-sax-writer" ,perl-xml-sax-writer) + ("perl-xml-simple" ,perl-xml-simple) + ("perl-xml-xpathengine" ,perl-xml-xpathengine) + ("perl-test-pod", perl-test-pod) + ("perl-tree-xpathengine" ,perl-tree-xpathengine))) + (home-page "http://search.cpan.org/dist/XML-Twig/") + (synopsis "Perl module for processing huge XML documents in tree mode") + (description "@code{XML::Twig} is an XML transformation module. Its +strong points: can be used to process huge documents while still being in tree +mode; not bound by DOM or SAX, so it is very perlish and offers a very +comprehensive set of methods; simple to use; DWIMs as much as possible. + +What it doesn't offer: full SAX support (it can export SAX, but only reads +XML), full XPath support (unless you use @code{XML::Twig::XPath}), nor DOM +support.") + (license license:perl-license))) diff --git a/gnu/services.scm b/gnu/services.scm index 0bd3620852..50be28a382 100644 --- a/gnu/services.scm +++ b/gnu/services.scm @@ -95,10 +95,7 @@ %boot-service %activation-service - etc-service - - file-union ;XXX: for lack of a better place - directory-union)) + etc-service)) ;;; Comment: ;;; @@ -388,38 +385,6 @@ boot." (list (service-extension boot-service-type cleanup-gexp))))) -(define* (file-union name files) ;FIXME: Factorize. - "Return a that builds a directory containing all of FILES. -Each item in FILES must be a list where the first element is the file name to -use in the new directory, and the second element is a gexp denoting the target -file." - (computed-file name - #~(begin - (mkdir #$output) - (chdir #$output) - #$@(map (match-lambda - ((target source) - #~(begin - ;; Stat the source to abort early if it - ;; does not exist. - (stat #$source) - - (symlink #$source #$target)))) - files)))) - -(define (directory-union name things) - "Return a directory that is the union of THINGS." - (match things - ((one) - ;; Only one thing; return it. - one) - (_ - (computed-file name - (with-imported-modules '((guix build union)) - #~(begin - (use-modules (guix build union)) - (union-build #$output '#$things))))))) - (define* (activation-service->script service) "Return as a monadic value the activation script for SERVICE, a service of ACTIVATION-SCRIPT-TYPE." diff --git a/gnu/services/base.scm b/gnu/services/base.scm index 541ca76f14..b605614ab6 100644 --- a/gnu/services/base.scm +++ b/gnu/services/base.scm @@ -71,6 +71,7 @@ udev-service-type udev-service udev-rule + file->udev-rule login-configuration login-configuration? @@ -1630,6 +1631,22 @@ item of @var{packages}." (lambda (port) (display #$contents port))))))) +(define (file->udev-rule file-name file) + "Return a directory with a udev rule file FILE-NAME which is a copy of FILE." + (computed-file file-name + (with-imported-modules '((guix build utils)) + #~(begin + (use-modules (guix build utils)) + + (define rules.d + (string-append #$output "/lib/udev/rules.d")) + + (define file-copy-dest + (string-append rules.d "/" #$file-name)) + + (mkdir-p rules.d) + (copy-file #$file file-copy-dest))))) + (define kvm-udev-rule ;; Return a directory with a udev rule that changes the group of /dev/kvm to ;; "kvm" and makes it #o660. Apparently QEMU-KVM used to ship this rule, diff --git a/guix/build-system/go.scm b/guix/build-system/go.scm index 43599df6f4..ec447d2a28 100644 --- a/guix/build-system/go.scm +++ b/guix/build-system/go.scm @@ -78,6 +78,7 @@ %standard-phases)) (outputs '("out")) (search-paths '()) + (install-source? #t) (import-path "") (unpack-path "") (tests? #t) @@ -102,6 +103,7 @@ #:outputs %outputs #:search-paths ',(map search-path-specification->sexp search-paths) + #:install-source? ,install-source? #:import-path ,import-path #:unpack-path ,unpack-path #:tests? ,tests? diff --git a/guix/build/compile.scm b/guix/build/compile.scm new file mode 100644 index 0000000000..ea0c36fa33 --- /dev/null +++ b/guix/build/compile.scm @@ -0,0 +1,165 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2013, 2014, 2016, 2017 Ludovic Courtès +;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer +;;; +;;; 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 . + +(define-module (guix build compile) + #:use-module (ice-9 match) + #:use-module (ice-9 format) + #:use-module (ice-9 threads) + #:use-module (system base target) + #:use-module (system base compile) + #:use-module (system base message) + #:use-module (guix modules) + #:use-module (guix build utils) + #:export (%default-optimizations + %lightweight-optimizations + compile-files)) + +;;; Commentary: +;;; +;;; Support code to compile Guile code as efficiently as possible (both with +;;; Guile 2.0 and 2.2). +;;; +;;; Code: + +(cond-expand + (guile-2.2 (use-modules (language tree-il optimize) + (language cps optimize))) + (else #f)) + +(define %default-optimizations + ;; Default optimization options (equivalent to -O2 on Guile 2.2). + (cond-expand + (guile-2.2 (append (tree-il-default-optimization-options) + (cps-default-optimization-options))) + (else '()))) + +(define %lightweight-optimizations + ;; Lightweight optimizations (like -O0, but with partial evaluation). + (let loop ((opts %default-optimizations) + (result '())) + (match opts + (() (reverse result)) + ((#:partial-eval? _ rest ...) + (loop rest `(#t #:partial-eval? ,@result))) + ((kw _ rest ...) + (loop rest `(#f ,kw ,@result)))))) + +(define %warnings + ;; FIXME: 'format' is missing because it reports "non-literal format + ;; strings" due to the fact that we use 'G_' instead of '_'. We'll need + ;; help from Guile to solve this. + '(unsupported-warning unbound-variable arity-mismatch + macro-use-before-definition)) ;new in 2.2 + +(define (optimization-options file) + "Return the default set of optimizations options for FILE." + (if (string-contains file "gnu/packages/") + %lightweight-optimizations ;build faster + '())) + +(define (scm->go file) + "Strip the \".scm\" suffix from FILE, and append \".go\"." + (string-append (string-drop-right file 4) ".go")) + +(define* (load-files directory files + #:key + (report-load (const #f)) + (debug-port (%make-void-port "w"))) + "Load FILES, a list of relative file names, from DIRECTORY." + (define total + (length files)) + + (let loop ((files files) + (completed 0)) + (match files + (() + (unless (zero? total) + (report-load #f total completed)) + *unspecified*) + ((file files ...) + (report-load file total completed) + (format debug-port "~%loading '~a'...~%" file) + + (parameterize ((current-warning-port debug-port)) + (resolve-interface (file-name->module-name file))) + + (loop files (+ 1 completed)))))) + +(define-syntax-rule (with-augmented-search-path path item body ...) + "Within the dynamic extent of BODY, augment PATH by adding ITEM to the +front." + (let ((initial-value path)) + (dynamic-wind + (lambda () + (set! path (cons item path))) + (lambda () + body ...) + (lambda () + (set! path initial-value))))) + +(define* (compile-files source-directory build-directory files + #:key + (host %host-type) + (workers (current-processor-count)) + (optimization-options optimization-options) + (warning-options `(#:warnings ,%warnings)) + (report-load (const #f)) + (report-compilation (const #f)) + (debug-port (%make-void-port "w"))) + "Compile FILES, a list of source files taken from SOURCE-DIRECTORY, to +BUILD-DIRECTORY, using up to WORKERS parallel workers. The resulting object +files are for HOST, a GNU triplet such as \"x86_64-linux-gnu\"." + (define progress-lock (make-mutex)) + (define total (length files)) + (define completed 0) + + (define (build file) + (with-mutex progress-lock + (report-compilation file total completed)) + (with-fluids ((*current-warning-prefix* "")) + (with-target host + (lambda () + (compile-file file + #:output-file (string-append build-directory "/" + (scm->go file)) + #:opts (append warning-options + (optimization-options file)))))) + (with-mutex progress-lock + (set! completed (+ 1 completed)))) + + (with-augmented-search-path %load-path source-directory + (with-augmented-search-path %load-compiled-path build-directory + ;; FIXME: To work around , we first load all + ;; of FILES. + (load-files source-directory files + #:report-load report-load + #:debug-port debug-port) + + ;; Make sure compilation related modules are loaded before starting to + ;; compile files in parallel. + (compile #f) + + (n-par-for-each workers build files) + (unless (zero? total) + (report-compilation #f total total))))) + +;;; Local Variables: +;;; eval: (put 'with-augmented-search-path 'scheme-indent-function 2) +;;; eval: (put 'with-target 'scheme-indent-function 1) +;;; End: diff --git a/guix/build/go-build-system.scm b/guix/build/go-build-system.scm index 7f04e3db8c..72af6ce7b6 100644 --- a/guix/build/go-build-system.scm +++ b/guix/build/go-build-system.scm @@ -126,13 +126,14 @@ unset. When SOURCE is a directory, copy it instead of unpacking." (zero? (system* "unzip" "-d" dest source)) (zero? (system* "tar" "-C" dest "-xvf" source)))))) -(define* (install-source #:key outputs #:allow-other-keys) +(define* (install-source #:key install-source? outputs #:allow-other-keys) "Install the source code to the output directory." (let* ((out (assoc-ref outputs "out")) (source "src") (dest (string-append out "/" source))) - (copy-recursively source dest #:keep-mtime? #t) - #t)) + (if install-source? + (copy-recursively source dest #:keep-mtime? #t) + #t))) (define (go-package? name) (string-prefix? "go-" name)) @@ -179,6 +180,9 @@ respectively." (zero? (system* "go" "install" "-v" ; print the name of packages as they are compiled "-x" ; print each command as it is invoked + ;; Respectively, strip the symbol table and debug + ;; information, and the DWARF symbol table. + "-ldflags=-s -w" import-path)) (begin (display (string-append "Building '" import-path "' failed.\n" diff --git a/guix/build/pull.scm b/guix/build/pull.scm index 1ae35ab382..3573241a7e 100644 --- a/guix/build/pull.scm +++ b/guix/build/pull.scm @@ -20,11 +20,10 @@ (define-module (guix build pull) #:use-module (guix modules) #:use-module (guix build utils) - #:use-module (system base compile) + #:use-module (guix build compile) #:use-module (ice-9 ftw) #:use-module (ice-9 match) #:use-module (ice-9 format) - #:use-module (ice-9 threads) #:use-module (srfi srfi-1) #:use-module (srfi srfi-11) #:use-module (srfi srfi-26) @@ -63,34 +62,6 @@ available, false otherwise." (string-prefix? gnu b)) (string (FIXME). - ;; Filter out files depending on Guile-SSH when Guile-SSH is missing. - (let* ((files (filter has-all-its-dependencies? - (all-scheme-files out))) - (total (length files))) - (let loop ((files files) - (completed 0)) - (match files - (() *unspecified*) - ((file . files) - (display #\cr log-port) - (format log-port "loading...\t~5,1f% of ~d files" ;FIXME: i18n - (* 100. (/ completed total)) total) - (force-output log-port) - (format debug-port "~%loading '~a'...~%" file) - ;; Turn "/foo/bar.scm" into (foo bar). - (let* ((relative-file (string-drop file (+ (string-length out) 1))) - (module-path (string-drop-right relative-file 4)) - (module-name (map string->symbol - (string-split module-path #\/)))) - (parameterize ((current-warning-port debug-port)) - (resolve-interface module-name))) - (loop files (+ 1 completed))))) - (newline) - (let ((mutex (make-mutex)) - (completed 0)) - ;; Make sure compilation related modules are loaded before starting to - ;; compile files in parallel. - (compile #f) - (n-par-for-each - (parallel-job-count) - (lambda (file) - (with-mutex mutex - (display #\cr log-port) - (format log-port "compiling...\t~5,1f% of ~d files" ;FIXME: i18n - (* 100. (/ completed total)) total) - (force-output log-port) - (format debug-port "~%compiling '~a'...~%" file)) - (let ((go (string-append (string-drop-right file 4) ".go"))) - (parameterize ((current-warning-port (%make-void-port "w"))) - (compile-file file - #:output-file go - #:opts (optimization-options file)))) - (with-mutex mutex - (set! completed (+ 1 completed)))) - files)))) + ;; Compile the .scm files. Hide warnings. + (parameterize ((current-warning-port (%make-void-port "w"))) + (with-directory-excursion out + ;; Filter out files depending on Guile-SSH when Guile-SSH is missing. + (let ((files (filter has-all-its-dependencies? + (all-scheme-files ".")))) + (compile-files out out + + ;; XXX: 'compile-files' except ready-to-use relative + ;; file names. + (map (lambda (file) + (if (string-prefix? "./" file) + (string-drop file 2) + file)) + files) + + #:workers (parallel-job-count) + + ;; Disable warnings. + #:warning-options '() + + #:report-load + (lambda (file total completed) + (display #\cr log-port) + (format log-port + "loading...\t~5,1f% of ~d files" ;FIXME: i18n + (* 100. (/ completed total)) total) + (force-output log-port) + (format debug-port "~%loading '~a'...~%" file)) + + #:report-compilation + (lambda (file total completed) + (display #\cr log-port) + (format log-port "compiling...\t~5,1f% of ~d files" ;FIXME: i18n + (* 100. (/ completed total)) total) + (force-output log-port) + (format debug-port "~%compiling '~a'...~%" file))))))) (newline) #t) diff --git a/guix/discovery.scm b/guix/discovery.scm index 2741725b9d..7b57579023 100644 --- a/guix/discovery.scm +++ b/guix/discovery.scm @@ -18,6 +18,7 @@ (define-module (guix discovery) #:use-module (guix ui) + #:use-module (guix modules) #:use-module (guix combinators) #:use-module (guix build syscalls) #:use-module (srfi srfi-1) @@ -88,13 +89,6 @@ DIRECTORY is not accessible." directory (strerror errno))) '()))))) -(define file-name->module-name - (let ((not-slash (char-set-complement (char-set #\/)))) - (lambda (file) - "Return the module name (a list of symbols) corresponding to FILE." - (map string->symbol - (string-tokenize (string-drop-right file 4) not-slash))))) - (define* (scheme-modules directory #:optional sub-directory) "Return the list of Scheme modules available under DIRECTORY. Optionally, narrow the search to SUB-DIRECTORY." diff --git a/guix/gexp.scm b/guix/gexp.scm index 2622c5cb62..b9525603ee 100644 --- a/guix/gexp.scm +++ b/guix/gexp.scm @@ -78,6 +78,8 @@ gexp->script text-file* mixed-text-file + file-union + directory-union imported-files imported-modules compiled-modules @@ -1171,6 +1173,56 @@ This is the declarative counterpart of 'text-file*'." (computed-file name build)) +(define (file-union name files) + "Return a that builds a directory containing all of FILES. +Each item in FILES must be a two-element list where the first element is the +file name to use in the new directory, and the second element is a gexp +denoting the target file. Here's an example: + + (file-union \"etc\" + `((\"hosts\" ,(plain-file \"hosts\" + \"127.0.0.1 localhost\")) + (\"bashrc\" ,(plain-file \"bashrc\" + \"alias ls='ls --color'\")))) + +This yields an 'etc' directory containing these two files." + (computed-file name + (gexp + (begin + (mkdir (ungexp output)) + (chdir (ungexp output)) + (ungexp-splicing + (map (match-lambda + ((target source) + (gexp + (begin + ;; Stat the source to abort early if it does + ;; not exist. + (stat (ungexp source)) + + (symlink (ungexp source) + (ungexp target)))))) + files)))))) + +(define (directory-union name things) + "Return a directory that is the union of THINGS, where THINGS is a list of +file-like objects denoting directories. For example: + + (directory-union \"guile+emacs\" (list guile emacs)) + +yields a directory that is the union of the 'guile' and 'emacs' packages." + (match things + ((one) + ;; Only one thing; return it. + one) + (_ + (computed-file name + (with-imported-modules '((guix build union)) + (gexp (begin + (use-modules (guix build union)) + (union-build (ungexp output) + '(ungexp things))))))))) + ;;; ;;; Syntactic sugar. diff --git a/guix/modules.scm b/guix/modules.scm index 19a4acd76c..6c602eda48 100644 --- a/guix/modules.scm +++ b/guix/modules.scm @@ -26,6 +26,9 @@ #:export (missing-dependency-error? missing-dependency-module + file-name->module-name + module-name->file-name + source-module-closure live-module-closure guix-module-name?)) @@ -93,6 +96,13 @@ depends on." (_ '())))))) +(define file-name->module-name + (let ((not-slash (char-set-complement (char-set #\/)))) + (lambda (file) + "Return the module name (a list of symbols) corresponding to FILE." + (map string->symbol + (string-tokenize (string-drop-right file 4) not-slash))))) + (define (module-name->file-name module) "Return the file name for MODULE." (string-append (string-join (map symbol->string module) "/")