diff options
125 files changed, 2984 insertions, 1839 deletions
diff --git a/Makefile.am b/Makefile.am index af6870cf67..5c8639d665 100644 --- a/Makefile.am +++ b/Makefile.am @@ -63,9 +63,6 @@ MODULES = \ guix/base64.scm \ guix/cpio.scm \ guix/records.scm \ - guix/gcrypt.scm \ - guix/hash.scm \ - guix/pk-crypto.scm \ guix/pki.scm \ guix/progress.scm \ guix/combinators.scm \ @@ -207,6 +204,7 @@ MODULES = \ guix/scripts/authenticate.scm \ guix/scripts/refresh.scm \ guix/scripts/repl.scm \ + guix/scripts/describe.scm \ guix/scripts/system.scm \ guix/scripts/system/search.scm \ guix/scripts/lint.scm \ @@ -331,8 +329,6 @@ SCM_TESTS = \ tests/base32.scm \ tests/base64.scm \ tests/cpio.scm \ - tests/hash.scm \ - tests/pk-crypto.scm \ tests/pki.scm \ tests/print.scm \ tests/sets.scm \ @@ -414,6 +410,7 @@ SH_TESTS = \ tests/guix-environment.sh \ tests/guix-environment-container.sh \ tests/guix-graph.sh \ + tests/guix-describe.sh \ tests/guix-lint.sh TESTS = $(SCM_TESTS) $(SH_TESTS) @@ -21,7 +21,7 @@ Guix is based on the [[https://nixos.org/nix/][Nix]] package manager. GNU Guix currently depends on the following packages: - [[https://gnu.org/software/guile/][GNU Guile 2.2.x or 2.0.x]], version 2.0.13 or later - - [[https://gnupg.org/][GNU libgcrypt]] + - [[https://notabug.org/cwebber/guile-gcrypt][Guile-Gcrypt]] 0.1.0 or later - [[https://www.gnu.org/software/make/][GNU Make]] - [[https://www.gnutls.org][GnuTLS]] compiled with guile support enabled - [[https://notabug.org/civodul/guile-sqlite3][Guile-SQLite3]], version 0.1.0 or later @@ -31,6 +31,7 @@ GNU Guix currently depends on the following packages: Unless `--disable-daemon' was passed, the following packages are needed: + - [[https://gnupg.org/][GNU libgcrypt]] - [[https://sqlite.org/][SQLite 3]] - [[https://gcc.gnu.org][GCC's g++]] - optionally [[http://www.bzip.org][libbz2]] diff --git a/build-aux/build-self.scm b/build-aux/build-self.scm index edb7f5d9c5..9e8cc90067 100644 --- a/build-aux/build-self.scm +++ b/build-aux/build-self.scm @@ -22,6 +22,7 @@ #:use-module (guix ui) #:use-module (guix config) #:use-module (guix modules) + #:use-module (guix build-system gnu) #:use-module (srfi srfi-1) #:use-module (srfi srfi-19) #:use-module (rnrs io ports) @@ -72,7 +73,7 @@ (variables rest ...)))))) (variables %localstatedir %storedir %sysconfdir %system))) -(define* (make-config.scm #:key libgcrypt zlib gzip xz bzip2 +(define* (make-config.scm #:key zlib gzip xz bzip2 (package-name "GNU Guix") (package-version "0") (bug-report-address "bug-guix@gnu.org") @@ -92,7 +93,6 @@ %state-directory %store-database-directory %config-directory - %libgcrypt %libz %gzip %bzip2 @@ -137,9 +137,6 @@ (define %xz #+(and xz (file-append xz "/bin/xz"))) - (define %libgcrypt - #+(and libgcrypt - (file-append libgcrypt "/lib/libgcrypt"))) (define %libz #+(and zlib (file-append zlib "/lib/libz"))))))) @@ -200,6 +197,54 @@ person's version identifier." ;; XXX: Replace with a Git commit id. (date->string (current-date 0) "~Y~m~d.~H")) +(define guile-gcrypt + ;; The host Guix may or may not have 'guile-gcrypt', which was introduced in + ;; August 2018. If it has it, it's at least version 0.1.0, which is good + ;; enough. If it doesn't, specify our own package because the target Guix + ;; requires it. + (match (find-best-packages-by-name "guile-gcrypt" #f) + (() + (package + (name "guile-gcrypt") + (version "0.1.0") + (home-page "https://notabug.org/cwebber/guile-gcrypt") + (source (origin + (method url-fetch) + (uri (string-append home-page "/archive/v" version ".tar.gz")) + (sha256 + (base32 + "1gir7ifknbmbvjlql5j6wzk7bkb5lnmq80q59ngz43hhpclrk5k3")) + (file-name (string-append name "-" version ".tar.gz")))) + (build-system gnu-build-system) + (arguments + ;; The 'bootstrap' phase appeared in 'core-updates', which was merged + ;; into 'master' ca. June 2018. + '(#:phases (modify-phases %standard-phases + (delete 'bootstrap) + (add-before 'configure 'bootstrap + (lambda _ + (unless (zero? (system* "autoreconf" "-vfi")) + (error "autoreconf failed")) + #t))))) + (native-inputs + `(("pkg-config" ,(specification->package "pkg-config")) + ("autoconf" ,(specification->package "autoconf")) + ("automake" ,(specification->package "automake")) + ("texinfo" ,(specification->package "texinfo")))) + (inputs + `(("guile" ,(specification->package "guile")) + ("libgcrypt" ,(specification->package "libgcrypt")))) + (synopsis "Cryptography library for Guile using Libgcrypt") + (description + "Guile-Gcrypt provides a Guile 2.x interface to a subset of the +GNU Libgcrypt crytographic library. It provides modules for cryptographic +hash functions, message authentication codes (MAC), public-key cryptography, +strong randomness, and more. It is implemented using the foreign function +interface (FFI) of Guile.") + (license #f))) ;license:gpl3+ + ((package . _) + package))) + (define* (build-program source version #:optional (guile-version (effective-version)) #:key (pull-version 0)) @@ -212,10 +257,21 @@ person's version identifier." (('gnu _ ...) #t) (_ #f))) + (define fake-gcrypt-hash + ;; Fake (gcrypt hash) module; see below. + (scheme-file "hash.scm" + #~(define-module (gcrypt hash) + #:export (sha1 sha256)))) + (with-imported-modules `(((guix config) - => ,(make-config.scm - #:libgcrypt - (specification->package "libgcrypt"))) + => ,(make-config.scm)) + + ;; To avoid relying on 'with-extensions', which was + ;; introduced in 0.15.0, provide a fake (gcrypt + ;; hash) just so that we can build modules, and + ;; adjust %LOAD-PATH later on. + ((gcrypt hash) => ,fake-gcrypt-hash) + ,@(source-module-closure `((guix store) (guix self) (guix derivations) @@ -237,13 +293,24 @@ person's version identifier." (match %load-path ((front _ ...) (unless (string=? front source) ;already done? - (set! %load-path (list source front))))))) - - ;; Only load our own modules or those of Guile. + (set! %load-path + (list source + (string-append #$guile-gcrypt + "/share/guile/site/" + (effective-version)) + front))))))) + + ;; Only load Guile-Gcrypt, our own modules, or those + ;; of Guile. (match %load-compiled-path ((front _ ... sys1 sys2) - (set! %load-compiled-path - (list front sys1 sys2))))) + (unless (string-prefix? #$guile-gcrypt front) + (set! %load-compiled-path + (list (string-append #$guile-gcrypt + "/lib/guile/" + (effective-version) + "/site-ccache") + front sys1 sys2)))))) (use-modules (guix store) (guix self) diff --git a/config-daemon.ac b/config-daemon.ac index 6cf65bef1d..04f0fde3b2 100644 --- a/config-daemon.ac +++ b/config-daemon.ac @@ -48,7 +48,7 @@ if test "x$guix_build_daemon" = "xyes"; then esac case "$LIBGCRYPT_LIBDIR" in - no) + no | "") LIBGCRYPT_LIBS="-lgcrypt" ;; *) diff --git a/configure.ac b/configure.ac index b34f15a77b..c83d4d8a28 100644 --- a/configure.ac +++ b/configure.ac @@ -130,6 +130,11 @@ if test "x$guix_cv_have_recent_guile_sqlite3" != "xyes"; then AC_MSG_ERROR([A recent Guile-SQLite3 could not be found; please install it.]) fi +GUILE_MODULE_AVAILABLE([have_guile_gcrypt], [(gcrypt hash)]) +if test "x$have_guile_gcrypt" != "xyes"; then + AC_MSG_ERROR([Guile-Gcrypt could not be found; please install it.]) +fi + dnl Make sure we have a full-fledged Guile. GUIX_ASSERT_GUILE_FEATURES([regex posix socket net-db threads]) @@ -213,16 +218,10 @@ AC_ARG_WITH([libgcrypt-libdir], esac]) dnl If none of the --with-libgcrypt-* options was used, try to determine the -dnl absolute file name of libgcrypt.so. +dnl the library directory. case "x$LIBGCRYPT_PREFIX$LIBGCRYPT_LIBDIR" in xnono) GUIX_LIBGCRYPT_LIBDIR([LIBGCRYPT_LIBDIR]) - if test "x$LIBGCRYPT_LIBDIR" != x; then - LIBGCRYPT="$LIBGCRYPT_LIBDIR/libgcrypt" - else - dnl 'config-daemon.ac' expects "no" in this case. - LIBGCRYPT_LIBDIR="no" - fi ;; esac diff --git a/doc/guix.texi b/doc/guix.texi index 307f915dbb..19a497c746 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -147,6 +147,7 @@ Package Management * Invoking guix gc:: Running the garbage collector. * Invoking guix pull:: Fetching the latest Guix and distribution. * Channels:: Customizing the package collection. +* Invoking guix describe:: Display information about your Guix revision. * Invoking guix pack:: Creating software bundles. * Invoking guix archive:: Exporting and importing store files. @@ -620,7 +621,8 @@ GNU Guix depends on the following packages: @itemize @item @url{http://gnu.org/software/guile/, GNU Guile}, version 2.0.13 or later, including 2.2.x; -@item @url{http://gnupg.org/, GNU libgcrypt}; +@item @url{https://notabug.org/cwebber/guile-gcrypt, Guile-Gcrypt}, version +0.1.0 or later; @item @uref{http://gnutls.org/, GnuTLS}, specifically its Guile bindings (@pxref{Guile Preparations, how to install the GnuTLS bindings for @@ -662,6 +664,7 @@ Unless @code{--disable-daemon} was passed to @command{configure}, the following packages are also needed: @itemize +@item @url{http://gnupg.org/, GNU libgcrypt}; @item @url{http://sqlite.org, SQLite 3}; @item @url{http://gcc.gnu.org, GCC's g++}, with support for the C++11 standard. @@ -1696,6 +1699,7 @@ guix package -i emacs-guix * Invoking guix gc:: Running the garbage collector. * Invoking guix pull:: Fetching the latest Guix and distribution. * Channels:: Customizing the package collection. +* Invoking guix describe:: Display information about your Guix revision. * Invoking guix pack:: Creating software bundles. * Invoking guix archive:: Exporting and importing store files. @end menu @@ -1749,7 +1753,7 @@ collected. @cindex reproducibility @cindex reproducible builds -Finally, Guix takes a @dfn{purely functional} approach to package +Guix takes a @dfn{purely functional} approach to package management, as described in the introduction (@pxref{Introduction}). Each @file{/gnu/store} package directory name contains a hash of all the inputs that were used to build that package---compiler, libraries, build @@ -1777,6 +1781,15 @@ a package to quickly set up the right development environment for their package, without having to manually install the dependencies of the package into their profile (@pxref{Invoking guix environment}). +@cindex replication, of software environments +@cindex provenance tracking, of software artifacts +All of Guix and its package definitions is version-controlled, and +@command{guix pull} allows you to ``travel in time'' on the history of Guix +itself (@pxref{Invoking guix pull}). This makes it possible to replicate a +Guix instance on a different machine or at a later point in time, which in +turn allows you to @emph{replicate complete software environments}, while +retaining precise @dfn{provenance tracking} of the software. + @node Invoking guix package @section Invoking @command{guix package} @@ -2804,6 +2817,9 @@ Generation 3 Jun 13 2018 23:31:07 (current) 69 packages upgraded: borg@@1.1.6, cheese@@3.28.0, @dots{} @end example +@ref{Invoking guix describe, @command{guix describe}}, for other ways to +describe the current status of Guix. + This @code{~/.config/guix/current} profile works like any other profile created by @command{guix package} (@pxref{Invoking guix package}). That is, you can list generations, roll back to the previous @@ -2849,6 +2865,13 @@ is provided, the subset of generations that match @var{pattern}. The syntax of @var{pattern} is the same as with @code{guix package --list-generations} (@pxref{Invoking guix package}). +@ref{Invoking guix describe}, for a way to display information about the +current generation only. + +@item --profile=@var{profile} +@itemx -p @var{profile} +Use @var{profile} instead of @file{~/.config/guix/current}. + @item --bootstrap Use the bootstrap Guile to build the latest Guix. This option is only useful to Guix developers. @@ -3017,6 +3040,9 @@ say, on another machine, by providing a channel specification in (branch "dd3df5e2c8818760a8fc0bd699e55d3b69fef2bb"))) @end lisp +The @command{guix describe --format=channels} command can even generate this +list of channels directly (@pxref{Invoking guix describe}). + At this point the two machines run the @emph{exact same Guix}, with access to the @emph{exact same packages}. The output of @command{guix build gimp} on one machine will be exactly the same, bit for bit, as the output of the same @@ -3028,6 +3054,78 @@ This gives you super powers, allowing you to track the provenance of binary artifacts with very fine grain, and to reproduce software environments at will---some sort of ``meta reproducibility'' capabilities, if you will. +@node Invoking guix describe +@section Invoking @command{guix describe} + +@cindex reproducibility +@cindex replicating Guix +Often you may want to answer questions like: ``Which revision of Guix am I +using?'' or ``Which channels am I using?'' This is useful information in many +situations: if you want to @emph{replicate} an environment on a different +machine or user account, if you want to report a bug or to determine what +change in the channels you are using caused it, or if you want to record your +system state for reproducibility purposes. The @command{guix describe} +command answers these questions. + +When run from a @command{guix pull}ed @command{guix}, @command{guix describe} +displays the channel(s) that it was built from, including their repository URL +and commit IDs (@pxref{Channels}): + +@example +$ guix describe +Generation 10 Sep 03 2018 17:32:44 (current) + guix e0fa68c + repository URL: https://git.savannah.gnu.org/git/guix.git + branch: master + commit: e0fa68c7718fffd33d81af415279d6ddb518f727 +@end example + +If you're familiar with the Git version control system, this is similar in +spirit to @command{git describe}; the output is also similar to that of +@command{guix pull --list-generations}, but limited to the current generation +(@pxref{Invoking guix pull, the @option{--list-generations} option}). Because +the Git commit ID shown above unambiguously refers to a snapshot of Guix, this +information is all it takes to describe the revision of Guix you're using, and +also to replicate it. + +To make it easier to replicate Guix, @command{guix describe} can also be asked +to return a list of channels instead of the human-readable description above: + +@example +$ guix describe -f channels +(list (channel + (name 'guix) + (url "https://git.savannah.gnu.org/git/guix.git") + (commit + "e0fa68c7718fffd33d81af415279d6ddb518f727"))) +@end example + +@noindent +You can save this to a file and feed it to @command{guix pull -C} on some +other machine or at a later point in time, which will instantiate @emph{this +exact Guix revision} (@pxref{Invoking guix pull, the @option{-C} option}). +From there on, since you're able to deploy the same revision of Guix, you can +just as well @emph{replicate a complete software environment}. We humbly +think that this is @emph{awesome}, and we hope you'll like it too! + +The details of the options supported by @command{guix describe} are as +follows: + +@table @code +@item --format=@var{format} +@itemx -f @var{format} +Produce output in the specified @var{format}, one of: + +@table @code +@item human +produce human-readable output; +@item channels +produce a list of channel specifications that can be passed to @command{guix +pull -C} or installed as @file{~/.config/guix/channels.scm} (@pxref{Invoking +guix pull}). +@end table +@end table + @node Invoking guix pack @section Invoking @command{guix pack} @@ -16823,6 +16921,13 @@ Extension package for @code{hpcguix-web}. @item @code{menu} (default: @code{'()}) Additional entry in page @code{menu}. + +@item @code{channels} (default: @code{%default-channels}) +List of channels from which the package list is built (@pxref{Channels}). + +@item @code{package-list-expiration} (default: @code{(* 12 3600)}) +The expiration time, in seconds, after which the package list is rebuilt from +the latest instances of the given channels. @end table See the hpcguix-web repository for a @@ -16846,6 +16951,17 @@ A typical hpcguix-web service declaration looks like this: (menu '(("/about" "ABOUT")))))))) @end example +@quotation Note +The hpcguix-web service periodically updates the package list it publishes by +pulling channels from Git. To that end, it needs to access X.509 certificates +so that it can authenticate Git servers when communicating over HTTPS, and it +assumes that @file{/etc/ssl/certs} contains those certificates. + +Thus, make sure to add @code{nss-certs} or another certificate package to the +@code{packages} field of your configuration. @ref{X.509 Certificates}, for +more information on X.509 certificates. +@end quotation + @node Certificate Services @subsubsection Certificate Services diff --git a/gnu/local.mk b/gnu/local.mk index 21f0482847..c3cd1d4084 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -729,6 +729,8 @@ dist_patch_DATA = \ %D%/packages/patches/ghc-8.0-fall-back-to-madv_dontneed.patch \ %D%/packages/patches/ghc-dont-pass-linker-flags-via-response-files.patch \ %D%/packages/patches/ghostscript-CVE-2018-10194.patch \ + %D%/packages/patches/ghostscript-CVE-2018-16509.patch \ + %D%/packages/patches/ghostscript-bug-699708.patch \ %D%/packages/patches/ghostscript-no-header-id.patch \ %D%/packages/patches/ghostscript-no-header-uuid.patch \ %D%/packages/patches/ghostscript-no-header-creationdate.patch \ @@ -955,6 +957,7 @@ dist_patch_DATA = \ %D%/packages/patches/mcrypt-CVE-2012-4409.patch \ %D%/packages/patches/mcrypt-CVE-2012-4426.patch \ %D%/packages/patches/mcrypt-CVE-2012-4527.patch \ + %D%/packages/patches/mes-nyacc-0.86.0.patch \ %D%/packages/patches/mesa-skip-disk-cache-test.patch \ %D%/packages/patches/meson-for-build-rpath.patch \ %D%/packages/patches/metabat-fix-compilation.patch \ @@ -991,6 +994,7 @@ dist_patch_DATA = \ %D%/packages/patches/nvi-assume-preserve-path.patch \ %D%/packages/patches/nvi-dbpagesize-binpower.patch \ %D%/packages/patches/nvi-db4.patch \ + %D%/packages/patches/nyacc-binary-literals.patch \ %D%/packages/patches/nyx-show-header-stats-with-python3.patch \ %D%/packages/patches/ocaml-bisect-fix-camlp4-in-another-directory.patch \ %D%/packages/patches/ocaml-bitstring-fix-configure.patch \ diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm index e731569ae1..3b898c024a 100644 --- a/gnu/packages/audio.scm +++ b/gnu/packages/audio.scm @@ -1908,7 +1908,7 @@ lv2-c++-tools.") (define-public openal (package (name "openal") - (version "1.18.2") + (version "1.19.0") (source (origin (method url-fetch) (uri (string-append @@ -1916,7 +1916,7 @@ lv2-c++-tools.") version ".tar.bz2")) (sha256 (base32 - "10kydm8701a2kppiss9sdidn1820cmzhqgx1b2bsa5dsgzic32lz")))) + "1mhf5bsb58s1xk6hvxl7ly7rd4rpl9z8h07xl1q94brywykg7bgi")))) (build-system cmake-build-system) (arguments `(#:tests? #f ; no check target diff --git a/gnu/packages/bash.scm b/gnu/packages/bash.scm index 46cb13048d..fb4e3f4be3 100644 --- a/gnu/packages/bash.scm +++ b/gnu/packages/bash.scm @@ -36,7 +36,7 @@ #:use-module (guix store) #:use-module (guix build-system gnu) #:autoload (guix gnupg) (gnupg-verify*) - #:autoload (guix hash) (port-sha256) + #:autoload (gcrypt hash) (port-sha256) #:autoload (guix base32) (bytevector->nix-base32-string) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) diff --git a/gnu/packages/bioconductor.scm b/gnu/packages/bioconductor.scm index 7e993189d6..a47a5aad05 100644 --- a/gnu/packages/bioconductor.scm +++ b/gnu/packages/bioconductor.scm @@ -360,17 +360,64 @@ cutoffs. The procedures are directly applicable to identifying differentially expressed genes in DNA microarray experiments.") (license license:lgpl3))) +(define-public r-graph + (package + (name "r-graph") + (version "1.58.0") + (source (origin + (method url-fetch) + (uri (bioconductor-uri "graph" version)) + (sha256 + (base32 + "1zx445lk36g1s6i5dbhhf00nzzazyklfjxxjfax6q8hnhvgm9759")))) + (build-system r-build-system) + (propagated-inputs + `(("r-biocgenerics" ,r-biocgenerics))) + (home-page "https://bioconductor.org/packages/graph") + (synopsis "Handle graph data structures in R") + (description + "This package implements some simple graph handling capabilities for R.") + (license license:artistic2.0))) + +(define-public r-codedepends + (package + (name "r-codedepends") + (version "0.6.5") + (source + (origin + (method url-fetch) + (uri (cran-uri "CodeDepends" version)) + (sha256 + (base32 + "0l7kiv3awx50glf5cs841b4zzsff1ml90f0zr868ygvwsr4ps1hq")))) + (properties `((upstream-name . "CodeDepends"))) + (build-system r-build-system) + (propagated-inputs + `(("r-codetools" ,r-codetools) + ("r-graph" ,r-graph) + ("r-xml" ,r-xml))) + (home-page "http://cran.r-project.org/web/packages/CodeDepends") + (synopsis "Analysis of R code for reproducible research and code comprehension") + (description + "This package provides tools for analyzing R expressions or blocks of +code and determining the dependencies between them. It focuses on R scripts, +but can be used on the bodies of functions. There are many facilities +including the ability to summarize or get a high-level view of code, +determining dependencies between variables, code improvement suggestions.") + ;; Any version of the GPL + (license (list license:gpl2+ license:gpl3+)))) + (define-public r-chippeakanno (package (name "r-chippeakanno") - (version "3.14.0") + (version "3.14.1") (source (origin (method url-fetch) (uri (bioconductor-uri "ChIPpeakAnno" version)) (sha256 (base32 - "1kcnc3cnmrhdk1x7q3y6zsz09pgd3xn9xy1hfbxz48cajlb18ad0")))) + "1cn1hfc3nvsf2n3563lkmvwjxfbiygx7f84zk683p89gy7zi1gyj")))) (properties `((upstream-name . "ChIPpeakAnno"))) (build-system r-build-system) (propagated-inputs diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm index f60fc4c84c..2d5ec6d170 100644 --- a/gnu/packages/bioinformatics.scm +++ b/gnu/packages/bioinformatics.scm @@ -51,6 +51,7 @@ #:use-module (gnu packages base) #:use-module (gnu packages bash) #:use-module (gnu packages bison) + #:use-module (gnu packages bioconductor) #:use-module (gnu packages boost) #:use-module (gnu packages check) #:use-module (gnu packages compression) @@ -1887,42 +1888,33 @@ other types of unwanted sequence from high-throughput sequencing reads.") (define-public libbigwig (package (name "libbigwig") - (version "0.1.4") + (version "0.4.2") (source (origin - (method url-fetch) - (uri (string-append "https://github.com/dpryan79/libBigWig/" - "archive/" version ".tar.gz")) - (file-name (string-append name "-" version ".tar.gz")) + (method git-fetch) + (uri (git-reference + (url "https://github.com/dpryan79/libBigWig.git") + (commit version))) + (file-name (string-append name "-" version "-checkout")) (sha256 (base32 - "098rjh35pi4a9q83n8wiwvyzykjqj6l8q189p1xgfw4ghywdlvw1")))) + "0h2smg24v5srdcqzrmz2g23cmlp4va465mgx8r2z571sfz8pv454")))) (build-system gnu-build-system) (arguments `(#:test-target "test" + #:tests? #f ; tests require access to the web #:make-flags (list "CC=gcc" (string-append "prefix=" (assoc-ref %outputs "out"))) #:phases (modify-phases %standard-phases - (delete 'configure) - (add-before 'check 'disable-curl-test - (lambda _ - (substitute* "Makefile" - (("./test/testRemote.*") "")) - #t)) - ;; This has been fixed with the upstream commit 4ff6959cd8a0, but - ;; there has not yet been a release containing this change. - (add-before 'install 'create-target-dirs - (lambda* (#:key outputs #:allow-other-keys) - (let ((out (assoc-ref outputs "out"))) - (mkdir-p (string-append out "/lib")) - (mkdir-p (string-append out "/include")) - #t)))))) + (delete 'configure)))) (inputs `(("zlib" ,zlib) ("curl" ,curl))) (native-inputs - `(("doxygen" ,doxygen))) + `(("doxygen" ,doxygen) + ;; Need for tests + ("python" ,python-2))) (home-page "https://github.com/dpryan79/libBigWig") (synopsis "C library for handling bigWig files") (description @@ -1933,13 +1925,13 @@ files.") (define-public python-pybigwig (package (name "python-pybigwig") - (version "0.2.5") + (version "0.3.12") (source (origin (method url-fetch) (uri (pypi-uri "pyBigWig" version)) (sha256 (base32 - "0yrpdxg3y0sny25x4w22lv1k47jzccqjmg7j4bp0hywklvp0hg7d")) + "00w4kfnm2c5l7wdwr2nj1z5djv8kzgf7h1zhsgv6njff1rwr26g0")) (modules '((guix build utils))) (snippet '(begin @@ -1955,6 +1947,8 @@ files.") (substitute* "setup.py" (("libs=\\[") "libs=[\"BigWig\", ")) #t))))) + (propagated-inputs + `(("python-numpy" ,python-numpy))) (inputs `(("libbigwig" ,libbigwig) ("zlib" ,zlib) @@ -6378,14 +6372,14 @@ exploration of the results.") (define-public r-annotationforge (package (name "r-annotationforge") - (version "1.22.0") + (version "1.22.2") (source (origin (method url-fetch) (uri (bioconductor-uri "AnnotationForge" version)) (sha256 (base32 - "12ffj7h95adiya5mzyjxazqn1qgr434ajpabfcyhrj5v83s4vk65")))) + "17kmy7nvpyyj6w5jyrjciw87rydmmmc8q6cnwqjv1j7li9bp09gr")))) (properties `((upstream-name . "AnnotationForge"))) (build-system r-build-system) @@ -6964,13 +6958,13 @@ Bioconductor, CRAN, and Github.") (define-public r-biocviews (package (name "r-biocviews") - (version "1.48.2") + (version "1.48.3") (source (origin (method url-fetch) (uri (bioconductor-uri "biocViews" version)) (sha256 (base32 - "01yiafayl1m5704xdd2cn3zjc78rs10dqyz66lr3qkf6d8w66938")))) + "1rxvwikqivsgxjjcazlszy8xgz346lfh5rw4llxw6fz38fjgb0k5")))) (properties `((upstream-name . "biocViews"))) (build-system r-build-system) @@ -7183,13 +7177,13 @@ utilities for sequence data management under the ACNUC system.") (define-public r-iranges (package (name "r-iranges") - (version "2.14.10") + (version "2.14.11") (source (origin (method url-fetch) (uri (bioconductor-uri "IRanges" version)) (sha256 (base32 - "10ccw930vfmkskkrzbps14xglqlkxf588623dr7f1a9ckx7yr2p6")))) + "0wz63hysspyjihqadg91dbvllc5a61zzjrsz0b9498lihqc6m1la")))) (properties `((upstream-name . "IRanges"))) (build-system r-build-system) @@ -7263,13 +7257,13 @@ names in their natural, rather than lexicographic, order.") (define-public r-edger (package (name "r-edger") - (version "3.22.2") + (version "3.22.3") (source (origin (method url-fetch) (uri (bioconductor-uri "edgeR" version)) (sha256 (base32 - "07py2g6vg9jbflwhc1hnzr2silbinrjwxq3mkq30nzjgf0n0hrf3")))) + "0w3jv29n0kkaiig8dbbdqy2dkng8xfaihch82mj9ci5hphrx3nng")))) (properties `((upstream-name . "edgeR"))) (build-system r-build-system) (propagated-inputs @@ -7291,13 +7285,13 @@ CAGE.") (define-public r-variantannotation (package (name "r-variantannotation") - (version "1.26.0") + (version "1.26.1") (source (origin (method url-fetch) (uri (bioconductor-uri "VariantAnnotation" version)) (sha256 (base32 - "06bccdf57vja7m63chmgc4539lwng3q3b8zxn285fj8524l6mcn7")))) + "1r55ki951dj81qvy73knfcy69ik5vzkd56wnk3f6vvf9vngqb8jr")))) (properties `((upstream-name . "VariantAnnotation"))) (inputs @@ -7329,13 +7323,13 @@ coding changes and predict coding outcomes.") (define-public r-limma (package (name "r-limma") - (version "3.36.1") + (version "3.36.3") (source (origin (method url-fetch) (uri (bioconductor-uri "limma" version)) (sha256 (base32 - "1982g5v35ilfgxm2vkq1p3j1bbir795pjvfzx4nzam2rlqqymbqm")))) + "0iiifszr6hcqih6kszdsbkx3gacfg3d7v8hdx0lbjqnjqgqz7pwk")))) (build-system r-build-system) (home-page "http://bioinf.wehi.edu.au/limma") (synopsis "Package for linear models for microarray and RNA-seq data") @@ -7384,13 +7378,13 @@ different technologies, including microarrays, RNA-seq, and quantitative PCR.") (define-public r-genomicranges (package (name "r-genomicranges") - (version "1.32.3") + (version "1.32.6") (source (origin (method url-fetch) (uri (bioconductor-uri "GenomicRanges" version)) (sha256 (base32 - "03gmka6rlz18vd4229796l5l3l6446v5cb90sn2nb5knjbp84hni")))) + "0p58yk2i5gqvjlkx548mnrr49wvs0xfcl06l9rqj2hi6hkkbvnp3")))) (properties `((upstream-name . "GenomicRanges"))) (build-system r-build-system) @@ -7495,13 +7489,13 @@ powerful online queries from gene annotation to database mining.") (define-public r-biocparallel (package (name "r-biocparallel") - (version "1.14.1") + (version "1.14.2") (source (origin (method url-fetch) (uri (bioconductor-uri "BiocParallel" version)) (sha256 (base32 - "00qg1kg2l9qqpyjaw5q910cmf84vwfiw1fhsx3ig784gwinwgj6n")))) + "1llb5a62hn4yxpdgqdh2l7i5zd06mjkk8hagsna69cq65wv6iifm")))) (properties `((upstream-name . "BiocParallel"))) (build-system r-build-system) @@ -7546,13 +7540,13 @@ biological sequences or sets of sequences.") (define-public r-rsamtools (package (name "r-rsamtools") - (version "1.32.0") + (version "1.32.3") (source (origin (method url-fetch) (uri (bioconductor-uri "Rsamtools" version)) (sha256 (base32 - "1s65y5wn4d0x8zsljg2kmhcl6r9884h95kr041j7hp49bmxg3an6")))) + "1hpjr22h33pf4fgv0sj83rqzv6l5l7s6fpmmqvchh45ikks1mnhq")))) (properties `((upstream-name . "Rsamtools"))) (build-system r-build-system) @@ -7590,13 +7584,13 @@ files.") (define-public r-delayedarray (package (name "r-delayedarray") - (version "0.6.1") + (version "0.6.5") (source (origin (method url-fetch) (uri (bioconductor-uri "DelayedArray" version)) (sha256 (base32 - "0sjwszxdi0vkj2i2di5i46gh9chc660yr3gs5nk9qnqp77713zds")))) + "10b03zrnvz5isfh4z55hasya2m71lrfx10l5lm2sdmqs0gwkanrd")))) (properties `((upstream-name . "DelayedArray"))) (build-system r-build-system) @@ -7685,13 +7679,13 @@ alignments.") (define-public r-rtracklayer (package (name "r-rtracklayer") - (version "1.40.3") + (version "1.40.6") (source (origin (method url-fetch) (uri (bioconductor-uri "rtracklayer" version)) (sha256 (base32 - "0kvsjdaypn1jnxbnsxpycildwdyxwnjkigfq8qm8mlyfc4ahdgy3")))) + "1wxxxlyps19dw3i0pw4mlm3kinnswsc35rgvlnbwvpnpjbca6w4l")))) (build-system r-build-system) (arguments `(#:phases @@ -7732,13 +7726,13 @@ as well as query and modify the browser state, such as the current viewport.") (define-public r-genomicfeatures (package (name "r-genomicfeatures") - (version "1.32.0") + (version "1.32.2") (source (origin (method url-fetch) (uri (bioconductor-uri "GenomicFeatures" version)) (sha256 (base32 - "1cqcl72q0k5wylw1brn4g4h7xzys1v06piry19cvp0gjcvm5sp7a")))) + "0kfyyg1ib8fkq2hxraal10z4bx3rg8figdskw4yhn1mbh6l42q5f")))) (properties `((upstream-name . "GenomicFeatures"))) (build-system r-build-system) @@ -7794,25 +7788,6 @@ extracting the desired features in a convenient format.") information about the latest version of the Gene Ontologies.") (license license:artistic2.0))) -(define-public r-graph - (package - (name "r-graph") - (version "1.58.0") - (source (origin - (method url-fetch) - (uri (bioconductor-uri "graph" version)) - (sha256 - (base32 - "1zx445lk36g1s6i5dbhhf00nzzazyklfjxxjfax6q8hnhvgm9759")))) - (build-system r-build-system) - (propagated-inputs - `(("r-biocgenerics" ,r-biocgenerics))) - (home-page "https://bioconductor.org/packages/graph") - (synopsis "Handle graph data structures in R") - (description - "This package implements some simple graph handling capabilities for R.") - (license license:artistic2.0))) - (define-public r-topgo (package (name "r-topgo") @@ -8544,7 +8519,7 @@ paired-end data.") `(("r-testthat" ,r-testthat) ;; During vignette building knitr checks that "pandoc-citeproc" ;; is in the PATH. - ("ghc-pandoc-citeproc" ,ghc-pandoc-citeproc-with-pandoc-1))) + ("ghc-pandoc-citeproc" ,ghc-pandoc-citeproc))) (propagated-inputs `(("r-biocgenerics" ,r-biocgenerics) ("r-biomart" ,r-biomart) @@ -9328,14 +9303,14 @@ unmodeled, or latent sources of noise.") (define-public r-seqminer (package (name "r-seqminer") - (version "6.0") + (version "6.1") (source (origin (method url-fetch) (uri (cran-uri "seqminer" version)) (sha256 (base32 - "057j1l6dip35l1aivilapl2zv9db677b3di2pb3sfgq2sxg0ps3l")))) + "15yhg4vfc7jg1jnqb3371j00pgbmbyc9l1xx63hq1l3p34lazq2l")))) (build-system r-build-system) (inputs `(("zlib" ,zlib))) @@ -9382,14 +9357,14 @@ trait.") (define-public r-maldiquant (package (name "r-maldiquant") - (version "1.17") + (version "1.18") (source (origin (method url-fetch) (uri (cran-uri "MALDIquant" version)) (sha256 (base32 - "047s6007ydc38x8wm027mlb4mngz15n0d4238fr8h43wyll5zy0z")))) + "18nl214xjsxkcpbg79jkmw0yznwm5szyh2qb84n7ip46mm779ha6")))) (properties `((upstream-name . "MALDIquant"))) (build-system r-build-system) (home-page "https://cran.r-project.org/web/packages/MALDIquant") @@ -9626,14 +9601,14 @@ structure (pcaRes) to provide a common interface to the PCA results.") (define-public r-msnbase (package (name "r-msnbase") - (version "2.6.1") + (version "2.6.3") (source (origin (method url-fetch) (uri (bioconductor-uri "MSnbase" version)) (sha256 (base32 - "0zrpx9r93q5ca2zdak5rs2m9sjm0wjdra1xfj3d3sx6p5gzfyg6n")))) + "15jhqg02ypmznc0wxksw56yij02csy678vqy531fdv86fsmypwa0")))) (properties `((upstream-name . "MSnbase"))) (build-system r-build-system) (propagated-inputs @@ -9708,58 +9683,31 @@ and irregular enzymatic cleavages, mass measurement accuracy, etc.") (define-public r-seurat (package (name "r-seurat") - (version "2.3.2") + (version "2.3.4") (source (origin (method url-fetch) (uri (cran-uri "Seurat" version)) (sha256 (base32 - "1sjpy5rrpvlpm6hs7qy7qpglgbp7zrgfybcsalpmjb51rhxhgcg1")) - ;; Delete pre-built jar. - (snippet - '(begin (delete-file "inst/java/ModularityOptimizer.jar") - #t)))) + "0l8bv4i9nzz26mirnva10mq6pimibj24vk7vpvfypgn7xk4942hd")))) (properties `((upstream-name . "Seurat"))) (build-system r-build-system) - (arguments - `(#:phases - (modify-phases %standard-phases - (add-after 'unpack 'build-jar - (lambda* (#:key inputs #:allow-other-keys) - (let ((classesdir "tmp-classes")) - (setenv "JAVA_HOME" (assoc-ref inputs "jdk")) - (mkdir classesdir) - (with-output-to-file "manifest" - (lambda _ - (display "Manifest-Version: 1.0 -Main-Class: ModularityOptimizer\n"))) - (and (zero? (apply system* `("javac" "-d" ,classesdir - ,@(find-files "java" "\\.java$")))) - (zero? (system* "jar" - "-cmf" "manifest" - "inst/java/ModularityOptimizer.jar" - "-C" classesdir "."))))))))) - (native-inputs - `(("jdk" ,icedtea "jdk"))) (propagated-inputs `(("r-ape" ,r-ape) - ("r-caret" ,r-caret) ("r-cluster" ,r-cluster) ("r-cowplot" ,r-cowplot) - ("r-diffusionmap" ,r-diffusionmap) ("r-dosnow" ,r-dosnow) ("r-dplyr" ,r-dplyr) ("r-dtw" ,r-dtw) ("r-fitdistrplus" ,r-fitdistrplus) - ("r-fnn" ,r-fnn) ("r-foreach" ,r-foreach) ("r-fpc" ,r-fpc) - ("r-gdata" ,r-gdata) ("r-ggplot2" ,r-ggplot2) ("r-ggridges" ,r-ggridges) ("r-gplots" ,r-gplots) ("r-hdf5r" ,r-hdf5r) ("r-hmisc" ,r-hmisc) + ("r-httr" ,r-httr) ("r-ica" ,r-ica) ("r-igraph" ,r-igraph) ("r-irlba" ,r-irlba) @@ -9772,7 +9720,6 @@ Main-Class: ModularityOptimizer\n"))) ("r-pbapply" ,r-pbapply) ("r-plotly" ,r-plotly) ("r-png" ,r-png) - ("r-ranger" ,r-ranger) ("r-rann" ,r-rann) ("r-rcolorbrewer" ,r-rcolorbrewer) ("r-rcpp" ,r-rcpp) @@ -9783,11 +9730,8 @@ Main-Class: ModularityOptimizer\n"))) ("r-rocr" ,r-rocr) ("r-rtsne" ,r-rtsne) ("r-sdmtools" ,r-sdmtools) - ("r-stringr" ,r-stringr) - ("r-tclust" ,r-tclust) ("r-tidyr" ,r-tidyr) - ("r-tsne" ,r-tsne) - ("r-vgam" ,r-vgam))) + ("r-tsne" ,r-tsne))) (home-page "http://www.satijalab.org/seurat") (synopsis "Seurat is an R toolkit for single cell genomics") (description @@ -9860,14 +9804,14 @@ distribution.") (define-public r-edaseq (package (name "r-edaseq") - (version "2.14.0") + (version "2.14.1") (source (origin (method url-fetch) (uri (bioconductor-uri "EDASeq" version)) (sha256 (base32 - "1832pb3jkim4vrqzb8lajwx9r482bhww5n9nz3s6crvyamlp2dj0")))) + "0970w9d5ddqw1qxqqafdidkxh6hmcv9j5djwgnpz3fgl05kmysg8")))) (properties `((upstream-name . "EDASeq"))) (build-system r-build-system) (propagated-inputs @@ -9987,14 +9931,14 @@ microarrays or GRanges for sequencing data.") (define-public r-keggrest (package (name "r-keggrest") - (version "1.20.0") + (version "1.20.1") (source (origin (method url-fetch) (uri (bioconductor-uri "KEGGREST" version)) (sha256 (base32 - "1349vidgl9m10l1rbrp3pkwwgi2xcbsw9h9z2xqbvg97lmqc4r8j")))) + "1ss0xd5570x570v01r6lp64rr1apjrzp0j62520pvm3g8knjhfvs")))) (properties `((upstream-name . "KEGGREST"))) (build-system r-build-system) (propagated-inputs @@ -10207,14 +10151,14 @@ the fact that each of these packages implements a select methods.") (define-public r-biovizbase (package (name "r-biovizbase") - (version "1.28.0") + (version "1.28.2") (source (origin (method url-fetch) (uri (bioconductor-uri "biovizBase" version)) (sha256 (base32 - "0lkiqdr3ics6hgv47lwkykcy761823bbkhffbn4ykyfzyqwl4p67")))) + "0wc45j3hfn01i44bkkxjj3n8b8xzbkkcdv35mrkzb1f9yprkf8gq")))) (properties `((upstream-name . "biovizBase"))) (build-system r-build-system) (propagated-inputs @@ -10231,6 +10175,7 @@ the fact that each of these packages implements a select methods.") ("r-hmisc" ,r-hmisc) ("r-iranges" ,r-iranges) ("r-rcolorbrewer" ,r-rcolorbrewer) + ("r-rlang" ,r-rlang) ("r-rsamtools" ,r-rsamtools) ("r-s4vectors" ,r-s4vectors) ("r-scales" ,r-scales) @@ -10248,14 +10193,14 @@ effort and encourages consistency.") (define-public r-ggbio (package (name "r-ggbio") - (version "1.28.0") + (version "1.28.5") (source (origin (method url-fetch) (uri (bioconductor-uri "ggbio" version)) (sha256 (base32 - "0wszh3w8yia5zw758h837i1q35k99sn444y2hahcxqbdmmlbf7in")))) + "19s2v40fycwf44fl3lm791y635xzw67b30sq2g0qq4a6phjik42d")))) (build-system r-build-system) (propagated-inputs `(("r-annotationdbi" ,r-annotationdbi) @@ -10278,6 +10223,7 @@ effort and encourages consistency.") ("r-iranges" ,r-iranges) ("r-organismdbi" ,r-organismdbi) ("r-reshape2" ,r-reshape2) + ("r-rlang" ,r-rlang) ("r-rsamtools" ,r-rsamtools) ("r-rtracklayer" ,r-rtracklayer) ("r-s4vectors" ,r-s4vectors) @@ -10732,14 +10678,14 @@ problems in genomics, brain imaging, astrophysics, and data mining.") (define-public r-hdf5array (package (name "r-hdf5array") - (version "1.8.0") + (version "1.8.1") (source (origin (method url-fetch) (uri (bioconductor-uri "HDF5Array" version)) (sha256 (base32 - "1l0276qxkhgdxsfck3jmi8jvnsr20g10gjki53g0mqa45wnhm3ck")))) + "1s44zgm9jg82bk4b8k3dh7xw7mxychlfm3grs8516mxnw91zpvy5")))) (properties `((upstream-name . "HDF5Array"))) (build-system r-build-system) (propagated-inputs @@ -10878,13 +10824,13 @@ libraries.") (define-public r-scater (package (name "r-scater") - (version "1.8.0") + (version "1.8.4") (source (origin (method url-fetch) (uri (bioconductor-uri "scater" version)) (sha256 (base32 - "0bhpikgz3b9f510dawsay4zry9rlp8vjx5n6zvwbcpwrd94p3903")))) + "173lfpas2fqsp4xxsw01wkxd4496c5p8himw9b4r9z4npxkfyv16")))) (build-system r-build-system) (propagated-inputs `(("r-beachmat" ,r-beachmat) @@ -10922,14 +10868,14 @@ quality control.") (define-public r-scran (package (name "r-scran") - (version "1.8.2") + (version "1.8.4") (source (origin (method url-fetch) (uri (bioconductor-uri "scran" version)) (sha256 (base32 - "0nbn5x75gf9d0p18w7vpkbv30cpdqvp5bz8xvila0h7jla7xdyih")))) + "17vq9vb9ak7n4mcqpwnm9x3z91vmr7xnsgj8f45b8dbj7m0v126j")))) (build-system r-build-system) (propagated-inputs `(("r-beachmat" ,r-beachmat) @@ -12885,8 +12831,8 @@ once. This package provides tools to perform Drop-seq analyses.") ("r-rtracklayer" ,r-rtracklayer) ("r-rjson" ,r-rjson) ("salmon" ,salmon) - ("ghc-pandoc" ,ghc-pandoc-1) - ("ghc-pandoc-citeproc" ,ghc-pandoc-citeproc-with-pandoc-1) + ("ghc-pandoc" ,ghc-pandoc) + ("ghc-pandoc-citeproc" ,ghc-pandoc-citeproc) ("python-wrapper" ,python-wrapper) ("python-pyyaml" ,python-pyyaml))) (home-page "http://bioinformatics.mdc-berlin.de/pigx/") @@ -12947,8 +12893,8 @@ expression report comparing samples in an easily configurable manner.") ("macs" ,macs) ("multiqc" ,multiqc) ("perl" ,perl) - ("ghc-pandoc" ,ghc-pandoc-1) - ("ghc-pandoc-citeproc" ,ghc-pandoc-citeproc-with-pandoc-1) + ("ghc-pandoc" ,ghc-pandoc) + ("ghc-pandoc-citeproc" ,ghc-pandoc-citeproc) ("fastqc" ,fastqc) ("bowtie" ,bowtie) ("idr" ,idr) @@ -13009,8 +12955,8 @@ in an easily configurable manner.") ("r-bookdown" ,r-bookdown) ("r-ggplot2" ,r-ggplot2) ("r-ggbio" ,r-ggbio) - ("ghc-pandoc" ,ghc-pandoc-1) - ("ghc-pandoc-citeproc" ,ghc-pandoc-citeproc-with-pandoc-1) + ("ghc-pandoc" ,ghc-pandoc) + ("ghc-pandoc-citeproc" ,ghc-pandoc-citeproc) ("python-wrapper" ,python-wrapper) ("python-pyyaml" ,python-pyyaml) ("snakemake" ,snakemake-4) @@ -13060,8 +13006,8 @@ methylation and segmentation.") ("python-magic" ,python-magic) ("python-numpy" ,python-numpy) ("python-loompy" ,python-loompy) - ("ghc-pandoc" ,ghc-pandoc-1) - ("ghc-pandoc-citeproc" ,ghc-pandoc-citeproc-with-pandoc-1) + ("ghc-pandoc" ,ghc-pandoc) + ("ghc-pandoc-citeproc" ,ghc-pandoc-citeproc) ("samtools" ,samtools) ("snakemake" ,snakemake-4) ("star" ,star) diff --git a/gnu/packages/ccache.scm b/gnu/packages/ccache.scm index af06b741a7..af29cee565 100644 --- a/gnu/packages/ccache.scm +++ b/gnu/packages/ccache.scm @@ -30,7 +30,7 @@ (define-public ccache (package (name "ccache") - (version "3.4.2") + (version "3.4.3") (source (origin (method url-fetch) @@ -38,7 +38,7 @@ version ".tar.xz")) (sha256 (base32 - "1qpy6k9f06kpr6bxy26ncdxcszqv1skcncvczcvksgfncx1v3a0q")))) + "0jjzq5340qw3jm5gkajjkkb5wd0yqqy1dyjw3mf3jy15cakmazi9")))) (build-system gnu-build-system) (native-inputs `(("perl" ,perl) ; for test.sh ("which" ,(@ (gnu packages base) which)))) @@ -49,13 +49,6 @@ (lambda _ (substitute* '("unittest/test_hashutil.c" "test/suites/base.bash") (("#!/bin/sh") (string-append "#!" (which "sh")))) - #t)) - (add-before 'check 'munge-failing-test - (lambda _ - ;; XXX The new ‘Multiple -fdebug-prefix-map’ test added in - ;; 3.3.5 fails (why?). Force it to report success instead. - (substitute* "test/suites/debug_prefix_map.bash" - (("grep \"name\"") "true")) #t))))) (home-page "https://ccache.samba.org/") (synopsis "Compiler cache") diff --git a/gnu/packages/ci.scm b/gnu/packages/ci.scm index e26983da3b..067a288004 100644 --- a/gnu/packages/ci.scm +++ b/gnu/packages/ci.scm @@ -32,6 +32,7 @@ #:use-module (gnu packages compression) #:use-module (gnu packages databases) #:use-module (gnu packages guile) + #:use-module (gnu packages gnupg) #:use-module (gnu packages mail) #:use-module (gnu packages package-management) #:use-module (gnu packages perl) @@ -223,39 +224,42 @@ their dependencies.") (lambda* (#:key inputs outputs #:allow-other-keys) ;; Wrap the 'cuirass' command to refer to the right modules. (let* ((out (assoc-ref outputs "out")) + (gcrypt (assoc-ref inputs "guile-gcrypt")) (json (assoc-ref inputs "guile-json")) (sqlite (assoc-ref inputs "guile-sqlite3")) (git (assoc-ref inputs "guile-git")) (bytes (assoc-ref inputs "guile-bytestructures")) (fibers (assoc-ref inputs "guile-fibers")) (guix (assoc-ref inputs "guix")) + (deps (list gcrypt json sqlite git bytes fibers guix)) (guile (assoc-ref %build-inputs "guile")) (effective (read-line (open-pipe* OPEN_READ (string-append guile "/bin/guile") "-c" "(display (effective-version))"))) - (mods (string-append json "/share/guile/site/" - effective ":" - git "/share/guile/site/" - effective ":" - bytes "/share/guile/site/" - effective ":" - sqlite "/share/guile/site/" - effective ":" - fibers "/share/guile/site/" - effective ":" - guix "/share/guile/site/" - effective))) + (mods (string-drop-right ;drop trailing colon + (string-join deps + (string-append "/share/guile/site/" + effective ":") + 'suffix) + 1)) + (objs (string-drop-right + (string-join deps + (string-append "/lib/guile/" effective + "/site-ccache:") + 'suffix) + 1))) ;; Make sure 'cuirass' can find the 'evaluate' command, as ;; well as the relevant Guile modules. (wrap-program (string-append out "/bin/cuirass") `("PATH" ":" prefix (,(string-append out "/bin"))) `("GUILE_LOAD_PATH" ":" prefix (,mods)) - `("GUILE_LOAD_COMPILED_PATH" ":" prefix (,mods))) + `("GUILE_LOAD_COMPILED_PATH" ":" prefix (,objs))) #t)))))) (inputs `(("guile" ,guile-2.2) ("guile-fibers" ,guile-fibers) + ("guile-gcrypt" ,guile-gcrypt) ("guile-json" ,guile-json) ("guile-sqlite3" ,guile-sqlite3) ("guile-git" ,guile-git) diff --git a/gnu/packages/code.scm b/gnu/packages/code.scm index be178a5f99..b3fbea0b38 100644 --- a/gnu/packages/code.scm +++ b/gnu/packages/code.scm @@ -211,16 +211,16 @@ COCOMO model or user-provided parameters.") (define-public cloc (package (name "cloc") - (version "1.76") + (version "1.78") (source (origin (method url-fetch) (uri (string-append - "https://github.com/AlDanial/cloc/releases/download/v" version + "https://github.com/AlDanial/cloc/releases/download/" version "/cloc-" version ".tar.gz")) (sha256 (base32 - "05srlvzwisr7y7ymvzb5yfdsrspja27ysqdmkwhiiivy84mq2gnl")))) + "176xklr2qsgxh9zdb565gib6pp4gsm585rz5fvyphgjy4i679wkv")))) (build-system gnu-build-system) (inputs `(("coreutils" ,coreutils) @@ -651,6 +651,19 @@ extensions over the standard utility.") (license license:gpl3+) (home-page "https://www.gnu.org/software/indent/"))) +(define-public indent-2.2.12 + (package + (inherit indent) + (version "2.2.12") + (source (origin + (method url-fetch) + (uri (string-append "mirror://gnu/indent/indent-" version + ".tar.gz")) + (sha256 + (base32 + "12xvcd16cwilzglv9h7sgh4h1qqjd1h8s48ji2dla58m4706hzg7")))) + (native-inputs `(("texinfo" ,texinfo))))) + (define-public amalgamate (let* ((commit "c91f07eea1133aa184f652b8f1398eaf03586208") (revision "0") diff --git a/gnu/packages/cran.scm b/gnu/packages/cran.scm index 016d1b1e41..8144391729 100644 --- a/gnu/packages/cran.scm +++ b/gnu/packages/cran.scm @@ -43,6 +43,25 @@ #:use-module (gnu packages tls) #:use-module (gnu packages web)) +(define-public r-clipr + (package + (name "r-clipr") + (version "0.4.1") + (source + (origin + (method url-fetch) + (uri (cran-uri "clipr" version)) + (sha256 + (base32 + "061x84ildc7g1p91yw5iyj8lpqdf4hqv36as85lw8c6qv9ywbsqv")))) + (build-system r-build-system) + (home-page "https://github.com/mdlincoln/clipr") + (synopsis "Read and write from the system clipboard") + (description + "This package provides simple utility functions to read from and write to +the system clipboards.") + (license license:gpl3))) + (define-public r-tidyverse (package (name "r-tidyverse") @@ -143,20 +162,23 @@ package is a port of the Python package @code{cssselect}.") (define-public r-reprex (package (name "r-reprex") - (version "0.1.2") + (version "0.2.0") (source (origin (method url-fetch) (uri (cran-uri "reprex" version)) (sha256 (base32 - "105d9vsmqfilgpw8psfb2wyiz1hvcycvh4cqhb3ab37lm3rcavvs")))) + "1l44pxjiz3g0jkk3v6rg5jps3llihfiah0qyv40s0bxvxa6gm8v9")))) (build-system r-build-system) (propagated-inputs `(("r-callr" ,r-callr) + ("r-clipr" ,r-clipr) ("r-knitr" ,r-knitr) + ("r-rlang" ,r-rlang) ("r-rmarkdown" ,r-rmarkdown) - ("r-whisker" ,r-whisker))) + ("r-whisker" ,r-whisker) + ("r-withr" ,r-withr))) (home-page "https://github.com/tidyverse/reprex") (synopsis "Prepare reproducible R code examples for sharing") (description @@ -171,17 +193,18 @@ such as copy/paste from an R session.") (define-public r-callr (package (name "r-callr") - (version "2.0.4") + (version "3.0.0") (source (origin (method url-fetch) (uri (cran-uri "callr" version)) (sha256 (base32 - "1053qqq632z94pqq2v5dynjpgyv1b1c8zvidmcllw7zn8zha8gqf")))) + "1rxbxy6kn7dj90z9hpppr9cnpvnxzknba2dwrdp0lrk5dh462qz3")))) (build-system r-build-system) (propagated-inputs - `(("r-r6" ,r-r6) + `(("r-base64enc" ,r-base64enc) + ("r-r6" ,r-r6) ("r-processx" ,r-processx))) (home-page "https://github.com/r-lib/callr#readme") (synopsis "Call R from R") @@ -369,14 +392,14 @@ colors are provided.") (define-public r-glue (package (name "r-glue") - (version "1.2.0") + (version "1.3.0") (source (origin (method url-fetch) (uri (cran-uri "glue" version)) (sha256 (base32 - "0vi9y8ix95g6hjqdz9c9y4119apbdjcypdv0ag8cl6vaxqs5n9qr")))) + "1vhw5497lpfr4m8lcx9bs0fgdp4ax0sycrk6n8yksp33qd25m7kq")))) (build-system r-build-system) (home-page "https://github.com/tidyverse/glue") (synopsis "Interpreted string literals") @@ -430,14 +453,14 @@ error stream.") (define-public r-pls (package (name "r-pls") - (version "2.6-0") + (version "2.7-0") (source (origin (method url-fetch) (uri (cran-uri "pls" version)) (sha256 (base32 - "15j59p5x0rkdrk7iqzkipsy50rsyjl31w8zxc4w3v1j5gzxhi1rx")))) + "0xaqqgmdvfh7g7v1m4bcwjqzph68b9cq3bn4kjisfsadl54i5p2x")))) (build-system r-build-system) (home-page "http://mevik.net/work/software/pls.html") (synopsis "Partial Least Squares and Principal Component Regression") @@ -480,6 +503,60 @@ print, summary, plot, update, etc. processes. Most of its code is based on the @code{psutil} Python package.") (license license:bsd-3))) +(define-public r-pkgbuild + (package + (name "r-pkgbuild") + (version "1.0.0") + (source + (origin + (method url-fetch) + (uri (cran-uri "pkgbuild" version)) + (sha256 + (base32 + "10iz8057mixl9j73pq2cbp4ib6dadfsgi3fcsjjm7l3wwb9issd9")))) + (build-system r-build-system) + (propagated-inputs + `(("r-callr" ,r-callr) + ("r-crayon" ,r-crayon) + ("r-desc" ,r-desc) + ("r-r6" ,r-r6) + ("r-rprojroot" ,r-rprojroot) + ("r-withr" ,r-withr))) + (home-page "https://github.com/r-pkgs/pkgbuild") + (synopsis "Find tools needed to build R packages") + (description + "This package provides functions used to build R packages. It locates +compilers needed to build R packages on various platforms and ensures the PATH +is configured appropriately so R can use them.") + (license license:gpl3))) + +(define-public r-pkgload + (package + (name "r-pkgload") + (version "1.0.0") + (source + (origin + (method url-fetch) + (uri (cran-uri "pkgload" version)) + (sha256 + (base32 + "1rjj229nq9fsl4ki4m75ybsavjgpqqhsr1zjzapwicsrxv6212px")))) + (build-system r-build-system) + (propagated-inputs + `(("r-desc" ,r-desc) + ("r-pkgbuild" ,r-pkgbuild) + ("r-rlang" ,r-rlang) + ("r-rprojroot" ,r-rprojroot) + ("r-rstudioapi" ,r-rstudioapi) + ("r-withr" ,r-withr))) + (home-page "https://github.com/r-lib/pkgload") + (synopsis "Simulate package installation and attach") + (description + "This package simulates the process of installing a package and then +attaching it. This is a key part of the @code{devtools} package as it allows +you to rapidly iterate while developing a package.") + (license license:gpl3))) + (define-public r-rcpp (package (name "r-rcpp") @@ -1678,14 +1755,14 @@ provided.") (define-public r-ipred (package (name "r-ipred") - (version "0.9-6") + (version "0.9-7") (source (origin (method url-fetch) (uri (cran-uri "ipred" version)) (sha256 (base32 - "1vrw1pqcpnc04x1r2h9grdfm6bivs358sww5gg90jwlvxcw69lxq")))) + "0q53cqs46501wsd4cmfsmr78l8nv1hkbamk9m0ns5qy02df5r254")))) (build-system r-build-system) (propagated-inputs `(("r-class" ,r-class) @@ -1739,22 +1816,23 @@ created using basic graphics.") (define-public r-broom (package (name "r-broom") - (version "0.4.5") + (version "0.5.0") (source (origin (method url-fetch) (uri (cran-uri "broom" version)) (sha256 (base32 - "1mrrqqw1bmjf2v88ziqwb5y86g29h0a3rsx2jpw0hrzrzb8i5kcb")))) + "1r3831vq0fd5sh5841xr844sghg88z7ws91hg4jgnzbbkxfjp4ag")))) (build-system r-build-system) (propagated-inputs - `(("r-dplyr" ,r-dplyr) + `(("r-backports" ,r-backports) + ("r-dplyr" ,r-dplyr) ("r-nlme" ,r-nlme) - ("r-plyr" ,r-plyr) - ("r-psych" ,r-psych) + ("r-purrr" ,r-purrr) ("r-reshape2" ,r-reshape2) ("r-stringr" ,r-stringr) + ("r-tibble" ,r-tibble) ("r-tidyr" ,r-tidyr))) (home-page "https://github.com/tidyverse/broom") (synopsis "Convert statistical analysis objects into tidy data frames") @@ -1903,20 +1981,72 @@ can be computed between character vectors while taking proper care of encoding or between integer vectors representing generic sequences.") (license license:gpl3+))) +(define-public r-ucminf + (package + (name "r-ucminf") + (version "1.1-4") + (source + (origin + (method url-fetch) + (uri (cran-uri "ucminf" version)) + (sha256 + (base32 + "01vggwg1w71k98qs6fhb0x1843vi322mf4g3hbclks94kcpkisx2")))) + (build-system r-build-system) + (native-inputs `(("gfortran" ,gfortran))) + (home-page "https://cran.r-project.org/web/packages/ucminf/") + (synopsis "General-purpose unconstrained non-linear optimization") + (description + "This package provides an implementation of an algorithm for +general-purpose unconstrained non-linear optimization. The algorithm is of +quasi-Newton type with BFGS updating of the inverse Hessian and soft line +search with a trust region type monitoring of the input to the line search +algorithm. The interface of @code{ucminf} is designed for easy interchange +with the package @code{optim}.") + (license license:gpl2+))) + +(define-public r-ordinal + (package + (name "r-ordinal") + (version "2018.8-25") + (source + (origin + (method url-fetch) + (uri (cran-uri "ordinal" version)) + (sha256 + (base32 + "03cv9hcrw8j3lhamzhz8sk2p3ns4cw9z41x49h301k2b3pajv43h")))) + (build-system r-build-system) + (propagated-inputs + `(("r-mass" ,r-mass) + ("r-matrix" ,r-matrix) + ("r-numderiv" ,r-numderiv) + ("r-ucminf" ,r-ucminf))) + (home-page "https://github.com/runehaubo/ordinal") + (synopsis "Regression models for ordinal data") + (description + "This package provides an implementation of cumulative link (mixed) +models also known as ordered regression models, proportional odds models, +proportional hazards models for grouped survival times and ordered models. +Estimation is via maximum likelihood and mixed models are fitted with the +Laplace approximation and adaptive Gauss-Hermite quadrature.") + (license license:gpl2+))) + (define-public r-jomo (package (name "r-jomo") - (version "2.6-3") + (version "2.6-4") (source (origin (method url-fetch) (uri (cran-uri "jomo" version)) (sha256 (base32 - "14s8q0j5zgl1g1pfxg3a4y1jzvs0wl61ir4992wsj7safskj7zvi")))) + "05g2rj9g7rgyb22b0gybw042nydyqsqsb31v05hifzavri8ij01x")))) (build-system r-build-system) (propagated-inputs `(("r-lme4" ,r-lme4) + ("r-ordinal" ,r-ordinal) ("r-survival" ,r-survival))) (home-page "https://cran.r-project.org/web/packages/jomo/") (synopsis "Multilevel Joint Modelling Multiple Imputation") @@ -1932,14 +2062,14 @@ impute compatibly with the substantive model.") (define-public r-pan (package (name "r-pan") - (version "1.4") + (version "1.6") (source (origin (method url-fetch) (uri (cran-uri "pan" version)) (sha256 (base32 - "1p3nigmhrnlch86g89hn7l0wvkifx3k9n59g0psi95yck43kza76")))) + "1dk3jjj826p7xrz10qz04vyc068xnypg7bp0pj4c32z3da0xzh5d")))) (build-system r-build-system) (native-inputs `(("gfortran" ,gfortran))) (home-page "https://cran.r-project.org/web/packages/pan/") @@ -1977,14 +2107,14 @@ analysis of multiply imputed data sets.") (define-public r-mice (package (name "r-mice") - (version "3.1.0") + (version "3.3.0") (source (origin (method url-fetch) (uri (cran-uri "mice" version)) (sha256 (base32 - "0xpn215yfzib4hw09cwilnyg9zbvq460njavfvm84mvgwbm25byi")))) + "1p0ipbqk5aqdi7iikw3qrjyvdi9sdhpnw1h5mwakwvv0yl0pzbyx")))) (build-system r-build-system) (propagated-inputs `(("r-broom" ,r-broom) @@ -2182,17 +2312,16 @@ training models for classification or ranking.") (define-public r-xts (package (name "r-xts") - (version "0.10-2") + (version "0.11-0") (source (origin (method url-fetch) (uri (cran-uri "xts" version)) (sha256 (base32 - "1i11fczks4lh8rpi6xbm9bm7f3jpcp6xw03kv178g3n3361qhmc1")))) + "1v50yn4bsjzdyk7r90isn6dxmpkapillrhpx3gqsshd180vwzqk9")))) (build-system r-build-system) (propagated-inputs `(("r-zoo" ,r-zoo))) - (native-inputs `(("gfortran" ,gfortran))) (home-page "https://github.com/joshuaulrich/xts") (synopsis "Extensible time series") (description @@ -2669,18 +2798,19 @@ display.") (define-public r-pillar (package (name "r-pillar") - (version "1.2.3") + (version "1.3.0") (source (origin (method url-fetch) (uri (cran-uri "pillar" version)) (sha256 (base32 - "1rzhssprqgam1nq3s0f5rzxhxsq02azcghvxf6k8kmsmddf1n7f8")))) + "1q6arybmfqxhp5zqj1fri5pb8v7ywcv7bmgf81rrmgl892p4bn5f")))) (build-system r-build-system) (propagated-inputs `(("r-cli" ,r-cli) ("r-crayon" ,r-crayon) + ("r-fansi" ,r-fansi) ("r-rlang" ,r-rlang) ("r-utf8" ,r-utf8))) (home-page "https://github.com/r-lib/pillar") @@ -2713,14 +2843,14 @@ terminals.") (define-public r-tinytex (package (name "r-tinytex") - (version "0.6") + (version "0.8") (source (origin (method url-fetch) (uri (cran-uri "tinytex" version)) (sha256 (base32 - "16y9dldaff2kx1fkm92p7zlph0dcrdmlmavpdgf5y9jbhmc8g83f")))) + "1bgpr5i5399jf9n6pg2mm4aamisbhppg082ad0wv1j4g0rlxf1gy")))) (build-system r-build-system) (propagated-inputs `(("r-xfun" ,r-xfun))) @@ -2737,17 +2867,18 @@ automatically.") (define-public r-metap (package (name "r-metap") - (version "0.9") + (version "1.0") (source (origin (method url-fetch) (uri (cran-uri "metap" version)) (sha256 (base32 - "03vg0mb6q7j2z0pkxykbak0hcp6dcak7zxs1lw9hswz9kqrq5jhz")))) + "18rzvqfzyk8fn54gjvy2qd21nk9w69j7ihww477ma3f3ab6i982h")))) (build-system r-build-system) (propagated-inputs - `(("r-lattice" ,r-lattice))) + `(("r-lattice" ,r-lattice) + ("r-rdpack" ,r-rdpack))) (home-page "http://www.dewey.myzen.co.uk/meta/meta.html") (synopsis "Meta-analysis of significance values") (description @@ -2781,14 +2912,14 @@ supports arbitrary vertex/edge/graph attributes.") (define-public r-statnet-common (package (name "r-statnet-common") - (version "4.1.2") + (version "4.1.4") (source (origin (method url-fetch) (uri (cran-uri "statnet.common" version)) (sha256 (base32 - "0h3g687214rlycca0fjrpy1lqbqsrginxqhmhl2mb2jinqqxcfgd")))) + "14dydm4c4dzc4v6ldxpn04q551nczzfablwibrd8lzgja8x9ksic")))) (properties `((upstream-name . "statnet.common"))) (build-system r-build-system) @@ -3010,21 +3141,20 @@ University Press, 2000.") (define-public r-tsa (package (name "r-tsa") - (version "1.01") + (version "1.2") (source (origin (method url-fetch) (uri (cran-uri "TSA" version)) (sha256 (base32 - "0cm97hwxm6vfgy9mc3kgwq6dnmn86p8a4avnfjbai048qnwrn6hx")))) + "0gjfqibwdznz0nka95k4fjm935svxjpnqfywwz403crn2lh30h6q")))) (properties `((upstream-name . "TSA"))) (build-system r-build-system) (propagated-inputs `(("r-leaps" ,r-leaps) ("r-locfit" ,r-locfit) - ("r-mgcv" ,r-mgcv) - ("r-tseries" ,r-tseries))) + ("r-mgcv" ,r-mgcv))) (home-page "http://www.stat.uiowa.edu/~kchan/TSA.htm") (synopsis "Time series analysis") (description @@ -3277,14 +3407,14 @@ exponentiation.") (define-public r-heatmaply (package (name "r-heatmaply") - (version "0.14.1") + (version "0.15.2") (source (origin (method url-fetch) (uri (cran-uri "heatmaply" version)) (sha256 (base32 - "03p2caclhfgqgpx3wwck5h06jy3mxgs05gjmwkb7hmwghkjh41jc")))) + "0h8s5djzj4mrmaswlcaap6jbwxrkbzc43bbqik3qf8vrqz335w04")))) (build-system r-build-system) (propagated-inputs `(("r-assertthat" ,r-assertthat) @@ -3633,14 +3763,14 @@ multivariate plot methods.") (define-public r-fnn (package (name "r-fnn") - (version "1.1") + (version "1.1.2.1") (source (origin (method url-fetch) (uri (cran-uri "FNN" version)) (sha256 (base32 - "1kncmiaraq1mrykb9fj3fsxswabk3l71fnp1vks0x9aay5xfk8mj")))) + "1n61jrcmakqif8f827x4qnlhm2jqpj5fgjj65c4p0kdd8lzw8pqp")))) (properties `((upstream-name . "FNN"))) (build-system r-build-system) (home-page "https://cran.r-project.org/web/packages/FNN") @@ -3925,14 +4055,14 @@ simple method for converting between file types.") (define-public r-maptools (package (name "r-maptools") - (version "0.9-2") + (version "0.9-3") (source (origin (method url-fetch) (uri (cran-uri "maptools" version)) (sha256 (base32 - "075lmb3b62171cw2dg8fv1vwmvfzg39r1ji7jwb8s5k9dz88ry1v")))) + "0hxbv01im9zk1qrwgigpc510w6x0kzdzip4gx2jzfqmmwr8m17r8")))) (build-system r-build-system) (propagated-inputs `(("r-foreign" ,r-foreign) @@ -3953,14 +4083,14 @@ exchanging spatial objects with other R packages.") (define-public r-later (package (name "r-later") - (version "0.7.3") + (version "0.7.4") (source (origin (method url-fetch) (uri (cran-uri "later" version)) (sha256 (base32 - "04j2phymxgkk4hv9pfa5w3s98w5d7fvm11blrdhxmray4n618msw")))) + "125zc499gj702x2bch95lsfzk2qb4dzv3604x9afym2i3ylrmm64")))) (build-system r-build-system) (propagated-inputs `(("r-bh" ,r-bh) @@ -4047,33 +4177,6 @@ to the cluster management tool @code{sfCluster}, but can also used without it.") (license license:gpl2+))) -(define-public r-codedepends - (package - (name "r-codedepends") - (version "0.5-3") - (source - (origin - (method url-fetch) - (uri (cran-uri "CodeDepends" version)) - (sha256 - (base32 - "03p82s0abca2jimzqvxdzykfzca7c7fhm5xsjxybcksr4gggr5sc")))) - (properties `((upstream-name . "CodeDepends"))) - (build-system r-build-system) - (propagated-inputs - `(("r-codetools" ,r-codetools) - ("r-xml" ,r-xml))) - (home-page "http://cran.r-project.org/web/packages/CodeDepends") - (synopsis "Analysis of R code for reproducible research and code comprehension") - (description - "This package provides tools for analyzing R expressions or blocks of -code and determining the dependencies between them. It focuses on R scripts, -but can be used on the bodies of functions. There are many facilities -including the ability to summarize or get a high-level view of code, -determining dependencies between variables, code improvement suggestions.") - ;; Any version of the GPL - (license (list license:gpl2+ license:gpl3+)))) - (define-public r-rappdirs (package (name "r-rappdirs") @@ -4163,14 +4266,14 @@ obtain a better initial configuration in non-metric MDS.") (define-public r-reticulate (package (name "r-reticulate") - (version "1.8") + (version "1.10") (source (origin (method url-fetch) (uri (cran-uri "reticulate" version)) (sha256 (base32 - "0zwb4ikf021nw7axdn7qlr6bq4xkph3anfy314idkspy1iil4nmr")))) + "0bz3lxbisjwn6cv23090zivpy0bxcncr82g5qja13l37i8xnvqsq")))) (build-system r-build-system) (inputs `(("python" ,python))) (propagated-inputs @@ -4280,14 +4383,14 @@ and adds the annotation to the plot.") (define-public r-ggpubr (package (name "r-ggpubr") - (version "0.1.7") + (version "0.1.8") (source (origin (method url-fetch) (uri (cran-uri "ggpubr" version)) (sha256 (base32 - "110ny8p41kmbz0a5rl0mv9cqpjkx6yr3ybflp1r0fmcvhwv7cr3i")))) + "0psl2zndm4wk6nnj1nv305islpxfvfgd87gjh2ph8yqn4mxpnfi1")))) (build-system r-build-system) (propagated-inputs `(("r-cowplot" ,r-cowplot) @@ -4296,8 +4399,10 @@ and adds the annotation to the plot.") ("r-ggrepel" ,r-ggrepel) ("r-ggsci" ,r-ggsci) ("r-ggsignif" ,r-ggsignif) + ("r-glue" ,r-glue) ("r-gridextra" ,r-gridextra) ("r-magrittr" ,r-magrittr) + ("r-polynom" ,r-polynom) ("r-purrr" ,r-purrr) ("r-scales" ,r-scales) ("r-tidyr" ,r-tidyr))) @@ -4424,6 +4529,27 @@ packages. It contains also functions for simplifying some clustering analysis steps and provides ggplot2-based elegant data visualization.") (license license:gpl2))) +(define-public r-fansi + (package + (name "r-fansi") + (version "0.3.0") + (source + (origin + (method url-fetch) + (uri (cran-uri "fansi" version)) + (sha256 + (base32 + "135qj7bcc3mwn0vg55hiiadf66lx6zaxvkicfmfw9x0zr7ah2r6x")))) + (build-system r-build-system) + (native-inputs + `(("r-knitr" ,r-knitr))) ; for vignettes + (home-page "https://github.com/brodieG/fansi") + (synopsis "ANSI control sequence aware string functions") + (description + "This package provides counterparts to R string manipulation functions +that account for the effects of ANSI text formatting control sequences.") + (license license:gpl2+))) + (define-public r-nbclust (package (name "r-nbclust") @@ -4495,6 +4621,303 @@ patterned after functions in the Python @code{itertools} module, and others patterned after functions in the snow package.") (license license:gpl2))) +(define-public r-polynom + (package + (name "r-polynom") + (version "1.3-9") + (source + (origin + (method url-fetch) + (uri (cran-uri "polynom" version)) + (sha256 + (base32 + "1s4xxv5rvpigawknvq27v9vzvs83phfsj5h8mim2lmf5bj950nnk")))) + (build-system r-build-system) + (home-page "https://cran.r-project.org/web/packages/polynom/") + (synopsis "Functions for univariate polynomial manipulations") + (description + "This package provides a collection of functions to implement a class for +univariate polynomial manipulations.") + (license license:gpl2))) + +(define-public r-gbrd + (package + (name "r-gbrd") + (version "0.4-11") + (source + (origin + (method url-fetch) + (uri (cran-uri "gbRd" version)) + (sha256 + (base32 + "06x97rw5i6v6cgjxkfhxnw4dn7lghn5q6ra7ri5ag1x9dkfzcl82")))) + (properties `((upstream-name . "gbRd"))) + (build-system r-build-system) + (home-page "https://cran.r-project.org/web/packages/gbRd/") + (synopsis "Utilities for processing Rd objects and files") + (description + "This package provides utilities for processing Rd objects and files. +Extract argument descriptions and other parts of the help pages of +functions.") + (license license:gpl2+))) + +(define-public r-rdpack + (package + (name "r-rdpack") + (version "0.9-0") + (source + (origin + (method url-fetch) + (uri (cran-uri "Rdpack" version)) + (sha256 + (base32 + "067w0w6kza0hkzcnx58danl83yfvl9yjacr47mnid2bg856gdd1b")))) + (properties `((upstream-name . "Rdpack"))) + (build-system r-build-system) + (propagated-inputs + `(("r-bibtex" ,r-bibtex) + ("r-gbrd" ,r-gbrd))) + (home-page "https://github.com/GeoBosh/Rdpack") + (synopsis "Update and manipulate Rd documentation objects") + (description + "This package provides functions for manipulation of R documentation +objects, including functions @code{reprompt()} and @code{ereprompt()} for +updating Rd documentation for functions, methods and classes; it also includes +Rd macros for citations and import of references from bibtex files for use in +Rd files and roxygen2 comments, as well as many functions for manipulation of +references and Rd files.") + (license license:gpl2+))) + +(define-public r-officer + (package + (name "r-officer") + (version "0.3.2") + (source + (origin + (method url-fetch) + (uri (cran-uri "officer" version)) + (sha256 + (base32 + "14b6ii9h3fi5g8ja929mfhxps9r7x78flqjdy437y9aygkhmiz2i")))) + (build-system r-build-system) + (propagated-inputs + `(("r-base64enc" ,r-base64enc) + ("r-digest" ,r-digest) + ("r-htmltools" ,r-htmltools) + ("r-magrittr" ,r-magrittr) + ("r-r6" ,r-r6) + ("r-rcpp" ,r-rcpp) + ("r-uuid" ,r-uuid) + ("r-xml2" ,r-xml2) + ("r-zip" ,r-zip))) + (home-page "https://davidgohel.github.io/officer") + (synopsis "Manipulation of Word and PowerPoint documents") + (description + "This package provides tools to access and manipulate Word and PowerPoint +documents from R. The package focuses on tabular and graphical reporting from +R; it also provides two functions that let users get document content into +data objects. A set of functions lets add and remove images, tables and +paragraphs of text in new or existing documents. When working with PowerPoint +presentations, slides can be added or removed; shapes inside slides can also +be added or removed. When working with Word documents, a cursor can be used +to help insert or delete content at a specific location in the document.") + (license license:gpl3))) + +(define-public r-snakecase + (package + (name "r-snakecase") + (version "0.9.2") + (source + (origin + (method url-fetch) + (uri (cran-uri "snakecase" version)) + (sha256 + (base32 + "1g6xai53dl24ws0mwhqrkcv583ziaq505cv3z8v5dhjgy98kilyj")))) + (build-system r-build-system) + (propagated-inputs + `(("r-stringi" ,r-stringi) + ("r-stringr" ,r-stringr))) + (home-page "https://github.com/Tazinho/snakecase") + (synopsis "Convert strings into any case") + (description + "This package provides a consistent, flexible and easy to use tool to +parse and convert strings into cases like snake or camel among others.") + (license license:gpl3))) + +(define-public r-prediction + (package + (name "r-prediction") + (version "0.3.6") + (source + (origin + (method url-fetch) + (uri (cran-uri "prediction" version)) + (sha256 + (base32 + "19d7312f5lkqfglfvlgssnvyw7gl161s0xradcry44r1i6qp05j1")))) + (build-system r-build-system) + (propagated-inputs + `(("r-data-table" ,r-data-table))) + (home-page "https://github.com/leeper/prediction") + (synopsis "Tidy, type-safe prediction methods") + (description + "This package provides the @code{prediction()} function, a type-safe +alternative to @code{predict()} that always returns a data frame. The package +currently supports common model types (e.g., @code{\"lm\"}, @code{\"glm\"}) +from the @code{stats} package, as well as numerous other model classes from +other add-on packages.") + (license license:expat))) + +(define-public r-sjlabelled + (package + (name "r-sjlabelled") + (version "1.0.13") + (source + (origin + (method url-fetch) + (uri (cran-uri "sjlabelled" version)) + (sha256 + (base32 + "0xizj7mrhnbn8kwjgm076si9w68a7lgrx4vj1sbqmv9jx055h8wv")))) + (build-system r-build-system) + (propagated-inputs + `(("r-broom" ,r-broom) + ("r-dplyr" ,r-dplyr) + ("r-haven" ,r-haven) + ("r-magrittr" ,r-magrittr) + ("r-prediction" ,r-prediction) + ("r-purrr" ,r-purrr) + ("r-rlang" ,r-rlang) + ("r-snakecase" ,r-snakecase) + ("r-tibble" ,r-tibble) + ("r-tidyselect" ,r-tidyselect))) + (home-page "https://github.com/strengejacke/sjlabelled") + (synopsis "Labelled data utility functions") + (description + "This package provides a collection of functions dealing with labelled +data, like reading and writing data between R and other statistical software +packages. This includes easy ways to get, set or change value and variable +label attributes, to convert labelled vectors into factors or numeric (and +vice versa), or to deal with multiple declared missing values.") + (license license:gpl3))) + +(define-public r-sjmisc + (package + (name "r-sjmisc") + (version "2.7.4") + (source + (origin + (method url-fetch) + (uri (cran-uri "sjmisc" version)) + (sha256 + (base32 + "11cy09k1d2y5wwqvafqxr01hzk4x68ji2pqlwj7fnpw27i3ap4q4")))) + (build-system r-build-system) + (propagated-inputs + `(("r-broom" ,r-broom) + ("r-crayon" ,r-crayon) + ("r-dplyr" ,r-dplyr) + ("r-haven" ,r-haven) + ("r-magrittr" ,r-magrittr) + ("r-pillar" ,r-pillar) + ("r-purrr" ,r-purrr) + ("r-rlang" ,r-rlang) + ("r-sjlabelled" ,r-sjlabelled) + ("r-stringdist" ,r-stringdist) + ("r-stringr" ,r-stringr) + ("r-tibble" ,r-tibble) + ("r-tidyr" ,r-tidyr) + ("r-tidyselect" ,r-tidyselect))) + (home-page "https://github.com/strengejacke/sjmisc") + (synopsis "Data and variable transformation functions") + (description + "This package is a collection of miscellaneous utility functions, +supporting data transformation tasks like recoding, dichotomizing or grouping +variables, setting and replacing missing values. The data transformation +functions also support labelled data, and all integrate seamlessly into a +tidyverse workflow.") + (license license:gpl3))) + +(define-public r-nortest + (package + (name "r-nortest") + (version "1.0-4") + (source + (origin + (method url-fetch) + (uri (cran-uri "nortest" version)) + (sha256 + (base32 + "17r0wpz72z9312c70nwi1i1kp1v9fm1h6jg7q5cx1mc1h420m1d3")))) + (build-system r-build-system) + (home-page "https://cran.r-project.org/web/packages/nortest/") + (synopsis "Tests for normality") + (description + "This package provides five omnibus tests for testing the composite +hypothesis of normality.") + (license license:gpl2+))) + +(define-public r-moonbook + (package + (name "r-moonbook") + (version "0.2.3") + (source + (origin + (method url-fetch) + (uri (cran-uri "moonBook" version)) + (sha256 + (base32 + "0hys56mwbm776ff7dibi8wzyf69qiais9rs1jazv79lk6h56s9s6")))) + (properties `((upstream-name . "moonBook"))) + (build-system r-build-system) + (propagated-inputs + `(("r-magrittr" ,r-magrittr) + ("r-nortest" ,r-nortest) + ("r-purrr" ,r-purrr) + ("r-sjmisc" ,r-sjmisc) + ("r-stringr" ,r-stringr) + ("r-survival" ,r-survival))) + (home-page "https://github.com/cardiomoon/moonBook") + (synopsis "Functions and datasets for the book by Keon-Woong Moon") + (description + "This package provides several analysis-related functions for the book +entitled \"R statistics and graph for medical articles\" (written in Korean), +version 1, by Keon-Woong Moon with Korean demographic data with several plot +functions.") + (license license:gpl2))) + +(define-public r-flextable + (package + (name "r-flextable") + (version "0.4.5") + (source + (origin + (method url-fetch) + (uri (cran-uri "flextable" version)) + (sha256 + (base32 + "09j2y0z7rkc0w1cl9pp1cpk6fnzzfr6245mxa3ca42z9k2cy2jfl")))) + (build-system r-build-system) + (propagated-inputs + `(("r-gdtools" ,r-gdtools) + ("r-htmltools" ,r-htmltools) + ("r-knitr" ,r-knitr) + ("r-officer" ,r-officer) + ("r-r6" ,r-r6) + ("r-rmarkdown" ,r-rmarkdown) + ("r-stringr" ,r-stringr) + ("r-xml2" ,r-xml2))) + (home-page "https://davidgohel.github.io/flextable") + (synopsis "Functions for tabular reporting") + (description + "This package provides tools to create pretty tables for HTML documents +and other formats. Functions are provided to let users create tables, modify +and format their content. It extends the @code{officer} package and can be +used within R markdown documents when rendering to HTML and to Word +documents.") + (license license:gpl3))) + (define-public r-writexl (package (name "r-writexl") @@ -4688,14 +5111,14 @@ Group (Non-)Overlap considerations.") (define-public r-doby (package (name "r-doby") - (version "4.6-1") + (version "4.6-2") (source (origin (method url-fetch) (uri (cran-uri "doBy" version)) (sha256 (base32 - "1y02awzid23bxz8hx6j8pxd6i7jaq8pdw3k60rag8y6m69incrw5")))) + "02vbv9nfgywg6lsiialkmfnax5z3rkyb9nr8j9l2cp8xi6ml95mb")))) (properties `((upstream-name . "doBy"))) (build-system r-build-system) (propagated-inputs @@ -4988,3 +5411,156 @@ maximum cycle number. The @code{r-abcoptim} implements the Artificial bee colony optimization algorithm @url{http://mf.erciyes.edu.tr/abc/pub/tr06_2005.pdf}. This version is a work-in-progress and is written in R code.") (license license:expat))) + +(define-public r-abcp2 + (package + (name "r-abcp2") + (version "1.2") + (source + (origin + (method url-fetch) + (uri (cran-uri "ABCp2" version)) + (sha256 + (base32 "1s2skkxpzss7c29i8600psgrp0hl46jcrxqrmy2b4db8hc0kcnbx")))) + (properties `((upstream-name . "ABCp2"))) + (build-system r-build-system) + (propagated-inputs `(("r-mass" ,r-mass))) + (home-page "https://cran.r-project.org/web/packages/ABCp2/") + (synopsis "Approximate Bayesian Computational Model for Estimating P2") + (description + "This package tests the goodness of fit of a distribution of offspring to the Normal, +Poisson, and Gamma distribution and estimates the proportional paternity of the +second male (P2) based on the best fit distribution.") + (license license:gpl2))) + +(define-public r-abcrf + (package + (name "r-abcrf") + (version "1.7.1") + (source + (origin + (method url-fetch) + (uri (cran-uri "abcrf" version)) + (sha256 + (base32 "06vy3inikrr9hv36q4djhrgzi9zizdfnhz17wpra8kadmr7qj441")))) + (build-system r-build-system) + (propagated-inputs + `(("r-mass" ,r-mass) + ("r-matrixstats" ,r-matrixstats) + ("r-ranger" ,r-ranger) + ("r-rcpp" ,r-rcpp) + ("r-rcpparmadillo" ,r-rcpparmadillo) + ("r-readr" ,r-readr) + ("r-stringr" ,r-stringr))) + (home-page "https://cran.r-project.org/web/packages/abcrf/") + (synopsis "Approximate bayesian computation via random forests") + (description + "This package performs approximate bayesian computation (ABC) model choice and +parameter inference via random forests. This machine learning tool named random +forests (RF) can conduct selection among the highly complex models covered by +ABC algorithms.") + (license license:gpl2+))) + +(define-public r-abctools + (package + (name "r-abctools") + (version "1.1.3") + (source + (origin + (method url-fetch) + (uri (cran-uri "abctools" version)) + (sha256 + (base32 "07s9dg10i8lsxl73b4n2hynca2fjgb0ykb0dz8c3zv6cgw3cyx97")))) + (build-system r-build-system) + (propagated-inputs + `(("r-abc" ,r-abc) + ("r-abind" ,r-abind) + ("r-hmisc" ,r-hmisc) + ("r-plyr" ,r-plyr))) + (home-page "https://github.com/dennisprangle/abctools/") + (synopsis "Tools for ABC analyses") + (description + "This @code{r-abctools} package provides tools for approximate Bayesian computation +including summary statistic selection and assessing coverage. This includes +recent dimension reduction algorithms to tune the choice of summary statistics, +and coverage methods to tune the choice of threshold.") + (license license:gpl2+))) + +(define-public r-ggstance + (package + (name "r-ggstance") + (version "0.3.1") + (source + (origin + (method url-fetch) + (uri (cran-uri "ggstance" version)) + (sha256 + (base32 "0v7f3xdaaridw6d4jvnsfwxmpjrasvx5vl555wsrn50aah17fkvh")))) + (build-system r-build-system) + (propagated-inputs + `(("r-ggplot2" ,r-ggplot2) + ("r-plyr" ,r-plyr) + ("r-rlang" ,r-rlang) + ("r-withr" ,r-withr))) + (home-page "https://cran.r-project.org/web/packages/ggstance/") + (synopsis "Horizontal and vertical versions of @code{r-ggplot2}") + (description + "This package is a @code{r-ggplot2} extension that provides flipped components: +@enumerate +@item horizontal versions of @code{r-ggplot2} stats and @code{r-ggplot2} geoms; +@item vertical versions of @code{r-ggplot2} positions. +@end enumerate") + (license license:gpl3))) + +(define-public r-mosaiccore + (package + (name "r-mosaiccore") + (version "0.6.0") + (source + (origin + (method url-fetch) + (uri (cran-uri "mosaicCore" version)) + (sha256 + (base32 "1klw97h6lchw1cpcl8s637ikcl428cckmjq0czi7mibh9q9mw72z")))) + (properties `((upstream-name . "mosaicCore"))) + (build-system r-build-system) + (propagated-inputs + `(("r-dplyr" ,r-dplyr) + ("r-lazyeval" ,r-lazyeval) + ("r-mass" ,r-mass) + ("r-rlang" ,r-rlang) + ("r-tidyr" ,r-tidyr))) + (home-page "https://github.com/ProjectMOSAIC/mosaicCore/") + (synopsis "Common utilities for mosaic family packages") + (description + "Common utilities used in other Mosaic family packages are collected here.") + (license license:gpl2+))) + +(define-public r-ggformula + (package + (name "r-ggformula") + (version "0.9.0") + (source + (origin + (method url-fetch) + (uri (cran-uri "ggformula" version)) + (sha256 + (base32 "1pmpdfjfbrc6kcpq70cr1kbj2qy711hw940g2aiis6l443z706kh")))) + (build-system r-build-system) + (propagated-inputs + `(("r-ggplot2" ,r-ggplot2) + ("r-ggstance" ,r-ggstance) + ("r-magrittr" ,r-magrittr) + ("r-mosaiccore" ,r-mosaiccore) + ("r-rlang" ,r-rlang) + ("r-stringr" ,r-stringr) + ("r-tibble" ,r-tibble) + ("r-tidyr" ,r-tidyr))) + (home-page "https://github.com/ProjectMOSAIC/ggformula/") + (synopsis "Formula interface for the @code{r-ggplot2}") + (description + "The @code{r-ggformula} introduces a family of graphics functions, gf_point(), +gf_density(), and so on, bring the formula interface to ggplot(). This captures +and extends the excellent simplicity of the lattice-graphics formula interface, +while providing the intuitive capabilities of @code{r-ggplot2}.") + (license license:expat))) diff --git a/gnu/packages/crypto.scm b/gnu/packages/crypto.scm index e070ef61ac..d9111135e8 100644 --- a/gnu/packages/crypto.scm +++ b/gnu/packages/crypto.scm @@ -126,7 +126,7 @@ communication, encryption, decryption, signatures, etc.") (define-public signify (package (name "signify") - (version "23") + (version "24") (source (origin (method url-fetch) (uri (string-append "https://github.com/aperezdc/signify/" @@ -134,7 +134,7 @@ communication, encryption, decryption, signatures, etc.") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "0c70mzawgahsvmsv4xdrass4pgyynd67ipd9lij0fgi8wkq0ns8w")))) + "0594vyvkq176xxzaz9xbq8qs0xdnr8s9gkd1prblwpdvnzmw0xvc")))) (build-system gnu-build-system) ;; TODO Build with libwaive (described in README.md), to implement something ;; like OpenBSD's pledge(). diff --git a/gnu/packages/curl.scm b/gnu/packages/curl.scm index a0fbd7738a..d4a620f1b3 100644 --- a/gnu/packages/curl.scm +++ b/gnu/packages/curl.scm @@ -51,6 +51,7 @@ (package (name "curl") (version "7.61.0") + (replacement curl-7.61.1) (source (origin (method url-fetch) (uri (string-append "https://curl.haxx.se/download/curl-" @@ -141,6 +142,19 @@ tunneling, and so on.") "See COPYING in the distribution.")) (home-page "https://curl.haxx.se/"))) +(define-public curl-7.61.1 + (package + (inherit curl) + (version "7.61.1") + (source + (origin + (method url-fetch) + (uri (string-append "https://curl.haxx.se/download/curl-" + version ".tar.xz")) + (sha256 + (base32 + "148qv1f32290r9pwg07mccawihz4srznkzsdwdl2xllvlgb16n9x")))))) + (define-public kurly (package (name "kurly") diff --git a/gnu/packages/dns.scm b/gnu/packages/dns.scm index 7a80e1bd9b..29c3d9b923 100644 --- a/gnu/packages/dns.scm +++ b/gnu/packages/dns.scm @@ -498,14 +498,14 @@ Extensions} (DNSSEC).") (define-public knot (package (name "knot") - (version "2.7.1") + (version "2.7.2") (source (origin (method url-fetch) (uri (string-append "https://secure.nic.cz/files/knot-dns/" name "-" version ".tar.xz")) (sha256 (base32 - "108k6x3hjsnyf06pv5rlxqhynjbbz13pzwax1mqff3hgv85f4skx")) + "0cc4wgb02ch09x99a1fnr7vsdik8k920q7jafzcamjvy3kpb4w6b")) (modules '((guix build utils))) (snippet '(begin diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm index 8f0c564f88..1f64a5e84a 100644 --- a/gnu/packages/emacs.scm +++ b/gnu/packages/emacs.scm @@ -15,7 +15,7 @@ ;;; Copyright © 2016, 2017 Nils Gillmann <ng0@n0.is> ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com> ;;; Copyright © 2016, 2017, 2018 Nicolas Goaziou <mail@nicolasgoaziou.fr> -;;; Copyright © 2016, 2017 Alex Vong <alexvong1995@gmail.com> +;;; Copyright © 2016, 2017, 2018 Alex Vong <alexvong1995@gmail.com> ;;; Copyright © 2016, 2017, 2018 Arun Isaac <arunisaac@systemreboot.net> ;;; Copyright © 2017 Christopher Baines <mail@cbaines.net> ;;; Copyright © 2017, 2018 Mathieu Othacehe <m.othacehe@gmail.com> @@ -38,6 +38,7 @@ ;;; Copyright © 2018 Tim Gesthuizen <tim.gesthuizen@yahoo.de> ;;; Copyright © 2018 Jack Hill <jackhill@jackhill.us> ;;; Copyright © 2018 Pierre-Antoine Rouby <pierre-antoine.rouby@inria.fr> +;;; Copyright © 2018 Alex Branham <alex.branham@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -4123,22 +4124,34 @@ programming language.") (define-public emacs-ess (package (name "emacs-ess") - (version "16.10") + (version "17.11") (source (origin (method url-fetch) - (uri (string-append "http://ess.r-project.org/downloads/ess/ess-" - version ".tgz")) + (uri (string-append "https://github.com/emacs-ess/ESS/archive/v" + version ".tar.gz")) (sha256 (base32 - "04m8lwp3ylh2vl7k2bjjs7mxbm64j4sdckqpvnm9k0qhaqf02pjk")) + "0cbilbsiwvcyf6d5y24mymp57m3ana5dkzab3knfs83w4a3a4c5c")) + (file-name (string-append name "-" version ".tar.gz")) (modules '((guix build utils))) (snippet '(begin ;; Stop ESS from trying to bundle an external julia-mode.el. (substitute* "lisp/Makefile" (("^\tjulia-mode.elc\\\\\n") "") - (("^all: \\$\\(ELC\\) ess-custom.el julia-mode.el") - "all: $(ELC) ess-custom.el")) + (("^dist: all julia-mode.el") + "dist: all")) + ;; No need to build docs in so many formats. Also, skipping + ;; pdf lets us not pull in texlive. + (substitute* "doc/Makefile" + (("all : info text html pdf") + "all : info") + (("install: install-info install-other-docs") + "install: install-info")) + ;; Test fails upstream + (substitute* "test/ess-r-tests.el" + (("ert-deftest ess-r-namespaced-eval-no-srcref-in-errors ()") + "ert-deftest ess-r-namespaced-eval-no-srcref-in-errors () :expected-result :failed")) #t)))) (build-system gnu-build-system) (arguments @@ -4157,10 +4170,6 @@ programming language.") (("SHELL = /bin/sh") (string-append "SHELL = " (which "sh")))) #t)) - ;; FIXME: the texlive-union insists on regenerating fonts. It stores - ;; them in HOME, so it needs to be writeable. - (add-before 'build 'set-HOME - (lambda _ (setenv "HOME" "/tmp") #t)) (replace 'check (lambda _ (invoke "make" "test"))))))) @@ -4169,16 +4178,14 @@ programming language.") ("r-minimal" ,r-minimal))) (native-inputs `(("perl" ,perl) - ("texinfo" ,texinfo) - ("texlive" ,(texlive-union (list texlive-latex-natbib - texlive-latex-seminar - texlive-latex-hyperref - texlive-tex-texinfo))))) + ("texinfo" ,texinfo))) + (propagated-inputs + `(("emacs-julia-mode" ,emacs-julia-mode))) (home-page "https://ess.r-project.org/") (synopsis "Emacs mode for statistical analysis programs") (description "Emacs Speaks Statistics (ESS) is an add-on package for GNU Emacs. It is designed to support editing of scripts and interaction with -various statistical analysis programs such as R and OpenBUGS.") +various statistical analysis programs such as R, Julia, and JAGS.") (license license:gpl2+))) (define-public emacs-smex @@ -11315,6 +11322,43 @@ e.g. the package dependencies it requires. See function file.") (license license:gpl3+)))) +(define-public emacs-picpocket + (let ((version "20180610.1059") ; taken from melpa + (commit "ce4b6ed088384f2414af82e8e4eae5b92c2874bf")) + (package + (name "emacs-picpocket") + (version version) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/johanclaesson/picpocket") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 "15vpbcv83mc4j1pvrk7xic0klh2bl9gzg2xxs7c2lmnix52hy8mv")))) + (build-system emacs-build-system) + (arguments ; needed for running tests + `(#:tests? #t + #:emacs ,emacs + #:test-command '("emacs" "--batch" + "-l" "picpocket-test.el" + "-f" "ert-run-tests-batch-and-exit"))) + (home-page "https://github.com/johanclaesson/picpocket") + (synopsis "Image viewer for Emacs") + (description + "Picpocket is an image viewer for GNU Emacs. It has commands for: + +@itemize +@item File operations on the picture files (delete, move, copy, hardlink). +@item Scale and rotate the picture. +@item Associate pictures with tags which are saved to disk. +@item Filter pictures according to tags. +@item Customizing keystrokes for quick tagging and file operations. +@item Undo and browse history of undoable commands. +@end itemize") + (license license:gpl3+)))) + (define-public emacs-wgrep-helm ;; `emacs-wgrep-helm' was mistakenly added. (deprecated-package "emacs-wgrep-helm" emacs-wgrep)) diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm index 8e68c676ef..e02339af62 100644 --- a/gnu/packages/emulators.scm +++ b/gnu/packages/emulators.scm @@ -117,8 +117,8 @@ ;; Building from recent Git because the official 5.0 release no longer builds. (define-public dolphin-emu - (let ((commit "806c1ee8f0ed824008185212bfab2658d400b576") - (revision "2")) + (let ((commit "5f0d825f40b8aabe13eaef32d44ab667ff8e8c28") + (revision "3")) (package (name "dolphin-emu") (version (git-version "5.0" revision commit)) @@ -144,7 +144,7 @@ #t)) (sha256 (base32 - "1sdc7rh6z7gjx4kxg18jrv7srfpx1vgf936zg5y43radnlscrh1j")))) + "0dh7mih16aif9ynbgcsn7n10f89g8d232i86xqfp2rijsdggcmzl")))) (build-system cmake-build-system) (arguments '(#:tests? #f diff --git a/gnu/packages/engineering.scm b/gnu/packages/engineering.scm index d53b25cff9..ee524ec78e 100644 --- a/gnu/packages/engineering.scm +++ b/gnu/packages/engineering.scm @@ -8,6 +8,7 @@ ;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu> ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org> +;;; Copyright © 2018 Jonathan Brielmaier <jonathan.brielmaier@web.de> ;;; ;;; This file is part of GNU Guix. ;;; @@ -680,24 +681,19 @@ language.") (define-public ao (deprecated-package "ao-cad" libfive)) -;; We use kicad from a git commit, because support for boost 1.61.0 has been -;; recently added. (define-public kicad - (let ((commit "5f4599fb56da4dd748845ab10abec02961d477f3") - (revision "2")) (package (name "kicad") - (version (string-append "4.0-" revision "." - (string-take commit 7))) + (version "5.0.0") (source (origin - (method git-fetch) - (uri (git-reference - (url "https://git.launchpad.net/kicad") - (commit commit))) + (method url-fetch) + (file-name (string-append name "-" version ".tar.xz")) + (uri (string-append + "https://launchpad.net/kicad/5.0/" version "/+download/" name + "-" version ".tar.xz")) (sha256 - (base32 "1833pln2975gmc5s18xf7s8m9vg834lmxxdjk0wlk3lq7bvjjnff")) - (file-name (string-append name "-" version "-checkout")))) + (base32 "17nqjszyvd25wi6550j981whlnb1wxzmlanljdjihiki53j84x9p")))) (build-system cmake-build-system) (arguments `(#:out-of-source? #t @@ -706,8 +702,6 @@ language.") #:configure-flags (list "-DKICAD_STABLE_VERSION=ON" "-DKICAD_REPO_NAME=stable" - ,(string-append "-DKICAD_BUILD_VERSION=4.0-" - (string-take commit 7)) "-DKICAD_SKIP_BOOST=ON"; Use our system's boost library. "-DKICAD_SCRIPTING=ON" "-DKICAD_SCRIPTING_MODULES=ON" @@ -754,6 +748,7 @@ language.") ("libngspice" ,libngspice) ("libsm" ,libsm) ("mesa" ,mesa) + ("opencascade-oce" ,opencascade-oce) ("openssl" ,openssl) ("python" ,python-2) ("wxwidgets" ,wxwidgets-gtk2) @@ -764,7 +759,7 @@ language.") boards and electrical circuits. The software has a number of programs that perform specific functions, for example, pcbnew (Editing PCB), eeschema (editing electrical diagrams), gerbview (viewing Gerber files) and others.") - (license license:gpl3+)))) + (license license:gpl3+))) (define-public kicad-library (let ((version "4.0.7")) diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm index 4d02b4bc62..ce07d3ad4c 100644 --- a/gnu/packages/fonts.scm +++ b/gnu/packages/fonts.scm @@ -887,7 +887,7 @@ designed to work well in user interface environments.") (define-public font-fira-code (package (name "font-fira-code") - (version "1.204") + (version "1.205") (source (origin (method url-fetch/zipbomb) (uri (string-append "https://github.com/tonsky/FiraCode/releases/" @@ -895,7 +895,7 @@ designed to work well in user interface environments.") "/FiraCode_" version ".zip")) (sha256 (base32 - "17wky221b3igrqhmxgmqiyv1xdfn0nw471vzhpkrvv1w2w1w1k18")))) + "13bxgf59g6fw5191xclcjzn22hj8jk9k5jjwf7vz07mpjbgadcl5")))) (build-system font-build-system) (home-page "https://mozilla.github.io/Fira/") (synopsis "Monospaced font with programming ligatures") diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm index 728f763806..2015e3ce47 100644 --- a/gnu/packages/games.scm +++ b/gnu/packages/games.scm @@ -34,6 +34,7 @@ ;;; Copyright © 2018 okapi <okapi@firemail.cc> ;;; Copyright © 2018 Tim Gesthuizen <tim.gesthuizen@yahoo.de> ;;; Copyright © 2018 Madalin Ionel-Patrascu <madalinionel.patrascu@mdc-berlin.de> +;;; Copyright © 2018 Benjamin Slade <slade@jnanam.net> ;;; ;;; This file is part of GNU Guix. ;;; @@ -5553,3 +5554,159 @@ open-source FPS of its kind.") (license (list license:gpl2+ license:bsd-3 ; /source/d0_blind_id folder and others (license:x11-style "" "See file rcon.pl."))))) + +(define-public frotz + (package + (name "frotz") + (version "2.44") + (source (origin + (method url-fetch) + (uri (list (string-append + "http://www.ifarchive.org/if-archive/infocom/interpreters/" + name "/" name "-" version ".tar.gz") + (string-append + "ftp://ftp.ifarchive.org/if-archive/infocom/interpreters/" + name "/" name "-" version ".tar.gz"))) + (sha256 + (base32 + "1v735xr3blznac8fnwa27s1vhllx4jpz7kw7qdw1bsfj6kq21v3k")))) + (build-system gnu-build-system) + (arguments + `(#:tests? #f ; there are no tests + #:phases + (modify-phases %standard-phases + (delete 'configure) + (add-before 'build 'curses + (lambda _ + (substitute* "Makefile" + (("lcurses") "lncurses")) + #t)) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bin (string-append out "/bin")) + (man (string-append out "/share/man/man6"))) + (install-file "frotz" bin) + (mkdir-p man) + (install-file "doc/frotz.6" man) + #t)))))) + (inputs `(("libmodplug" ,libmodplug) + ("libsamplerate" ,libsamplerate) + ("libsndfile" ,libsndfile) + ("libvorbis" ,libvorbis) + ("ncurses" ,ncurses))) + (synopsis "Portable Z-machine interpreter (ncurses version) for text adventure games") + (description "Frotz is an interpreter for Infocom games and other Z-machine +games in the text adventure/interactive fiction genre. This version of Frotz +complies with standard 1.0 of Graham Nelson's specification. It plays all +Z-code games V1-V8, including V6, with sound support through libao, and uses +ncurses for text display.") + (home-page "http://frotz.sourceforge.net") + (license license:gpl2+))) + +(define-public frotz-dumb-terminal + (package + (name "frotz-dumb-terminal") + (version "2.44") + (source (origin + (method url-fetch) + (uri (list (string-append + "http://www.ifarchive.org/if-archive/infocom/interpreters/" + "frotz" "/" "frotz" "-" version ".tar.gz") + (string-append + "ftp://ftp.ifarchive.org/if-archive/infocom/interpreters/" + "frotz" "/" "frotz" "-" version ".tar.gz"))) + (sha256 + (base32 + "1v735xr3blznac8fnwa27s1vhllx4jpz7kw7qdw1bsfj6kq21v3k")))) + (build-system gnu-build-system) + (arguments + `(#:tests? #f ; there are no tests + #:phases + (modify-phases %standard-phases + (delete 'configure) + (replace 'build + (lambda _ + (invoke "make" "dumb"))) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bin (string-append out "/bin")) + (man (string-append out "/share/man/man6"))) + (install-file "dfrotz" bin) + (mkdir-p man) + (install-file "doc/dfrotz.6" man) + #t)))))) + (synopsis "Portable Z-machine dumb interpreter for text adventure games") + (description "Frotz is an interpreter for Infocom games and +other Z-machine games in the text adventure/interactive fiction genre. +dfrotz is the dumb interface version. You get no screen control; everything +is just printed to the terminal line by line. The terminal handles all the +scrolling. Maybe you'd like to experience what it's like to play Adventure on +a teletype. A much cooler use for compiling Frotz with the dumb interface is +that it can be wrapped in CGI scripting, PHP, and the like to allow people +to play games on webpages. It can also be made into a chat bot.") + (home-page "http://frotz.sourceforge.net") + (license license:gpl2+))) + +(define-public frotz-sdl + (let* ((commit "4de8c34f2116fff554af6216c30ec9d41bf50b24")) + (package + (name "frotz-sdl") + (version "2.45pre") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://gitlab.com/DavidGriffith/frotz") + (commit commit))) + (sha256 + (base32 + "18ms21pcrl7ipcnyqnf8janamkryzx78frsgd9kfk67jvbj0z2k8")) + (file-name (git-file-name name version)))) + (build-system gnu-build-system) + (arguments + `(#:tests? #f ; there are no tests + #:phases + (modify-phases %standard-phases + (delete 'configure) + (add-before 'build 'patch-makefile + (lambda _ + (substitute* "Makefile" + (("lcurses") "lncurses") + (("^BUILD_DATE_TIME =.*$") + "BUILD_DATE_TIME = \"2.45pre-20180907.00000\"\n")) + #t)) + (replace 'build + (lambda _ + (invoke "make" "sdl"))) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bin (string-append out "/bin")) + (man (string-append out "/share/man/man6"))) + (install-file "sfrotz" bin) + (mkdir-p man) + (install-file "doc/sfrotz.6" man) + #t)))))) + (native-inputs + `(("pkg-config" ,pkg-config) + ("which" ,which) + ("perl" ,perl))) + (inputs `(("sdl2" ,sdl2) + ("sdl2-mixer" ,sdl2-mixer) + ("libmodplug" ,libmodplug) + ("libsamplerate" ,libsamplerate) + ("libsndfile" ,libsndfile) + ("libvorbis" ,libvorbis) + ("ncurses" ,ncurses) + ("freetype" ,freetype) + ("libjpeg-turbo" ,libjpeg-turbo))) + (synopsis "Portable Z-machine interpreter (SDL port) for text adventure games") + (description "Frotz is an interpreter for Infocom games and other Z-machine +games in the text adventure/interactive fiction genre. This version of Frotz +using SDL fully supports all these versions of the Z-Machine including the +graphical version 6. Graphics and sound are created through the use of the SDL +libraries. AIFF sound effects and music in MOD and OGG formats are supported +when packaged in Blorb container files or optionally from individual files.") + (home-page "http://frotz.sourceforge.net") + (license license:gpl2+)))) diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm index 520f5cba0b..8207104174 100644 --- a/gnu/packages/gcc.scm +++ b/gnu/packages/gcc.scm @@ -668,6 +668,10 @@ as the 'native-search-paths' field." (custom-gcc gcc-7 "gfortran" '("fortran") %generic-search-paths)) +(define-public gfortran-8 + (custom-gcc gcc-8 "gfortran" '("fortran") + %generic-search-paths)) + (define-public gfortran ;; Note: Update this when GCC changes! We cannot use ;; (custom-gcc gcc "fortran" …) because that would lead to a package object @@ -728,6 +732,15 @@ as the 'native-search-paths' field." (variable "LIBRARY_PATH") (files '("lib" "lib64")))))) +(define-public gcc-objc-8 + (custom-gcc gcc-8 "gcc-objc" '("objc") + (list (search-path-specification + (variable "OBJC_INCLUDE_PATH") + (files '("include"))) + (search-path-specification + (variable "LIBRARY_PATH") + (files '("lib" "lib64")))))) + (define-public gcc-objc gcc-objc-5) (define-public gcc-objc++-4.8 @@ -775,6 +788,15 @@ as the 'native-search-paths' field." (variable "LIBRARY_PATH") (files '("lib" "lib64")))))) +(define-public gcc-objc++-8 + (custom-gcc gcc-8 "gcc-objc++" '("obj-c++") + (list (search-path-specification + (variable "OBJCPLUS_INCLUDE_PATH") + (files '("include"))) + (search-path-specification + (variable "LIBRARY_PATH") + (files '("lib" "lib64")))))) + (define-public gcc-objc++ gcc-objc++-5) (define (make-libstdc++-doc gcc) diff --git a/gnu/packages/gdb.scm b/gnu/packages/gdb.scm index f0c4c8b804..74eb0f8994 100644 --- a/gnu/packages/gdb.scm +++ b/gnu/packages/gdb.scm @@ -37,14 +37,14 @@ (define-public gdb (package (name "gdb") - (version "8.1.1") + (version "8.2") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/gdb/gdb-" version ".tar.xz")) (sha256 (base32 - "0g6hv9xk12aa58w77fydaldqr9a6b0a6bnwsq87jfc6lkcbc7p4p")))) + "0fbw6j4z7kmvywwgavn7w3knp860i5i9qnjffc5p52bwkji43963")))) (build-system gnu-build-system) (arguments `(#:tests? #f ; FIXME "make check" fails on single-processor systems. diff --git a/gnu/packages/ghostscript.scm b/gnu/packages/ghostscript.scm index cd7cd604fd..3808d81524 100644 --- a/gnu/packages/ghostscript.scm +++ b/gnu/packages/ghostscript.scm @@ -7,6 +7,7 @@ ;;; Copyright © 2017, 2018 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2017 Leo Famulari <leo@famulari.name> ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr> +;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -38,8 +39,10 @@ #:use-module ((guix licenses) #:prefix license:) #:use-module (guix packages) #:use-module (guix download) + #:use-module (guix utils) #:use-module (guix build-system gnu) - #:use-module (guix build-system trivial)) + #:use-module (guix build-system trivial) + #:use-module (srfi srfi-1)) (define-public lcms (package @@ -132,6 +135,7 @@ printing, and psresize, for adjusting page sizes.") (define-public ghostscript (package (name "ghostscript") + (replacement ghostscript/fixed) (version "9.23") (source (origin @@ -251,6 +255,44 @@ output file formats and printers.") (home-page "https://www.ghostscript.com/") (license license:agpl3+))) +(define-public ghostscript/fixed + (hidden-package + (package + (inherit ghostscript) + (version "9.24") + (source + (origin + (inherit (package-source ghostscript)) + (uri (string-append "https://github.com/ArtifexSoftware/" + "ghostpdl-downloads/releases/download/gs" + (string-delete #\. version) + "/ghostscript-" version ".tar.xz")) + (sha256 + (base32 + "1mk922rnml93w2g42yxiyn8xqanc50cm65irrgh0b6lp4kgifjfl")) + (patches (search-patches "ghostscript-CVE-2018-16509.patch" + "ghostscript-bug-699708.patch" + "ghostscript-no-header-creationdate.patch" + "ghostscript-no-header-id.patch" + "ghostscript-no-header-uuid.patch")))) + (arguments + (substitute-keyword-arguments (package-arguments ghostscript) + ((#:configure-flags flags) + ;; Notice that we removed the 'ghostscript-runpath' patch above. + ;; The reason is that it conflicts with an upstream change that + ;; takes LDFLAGS into account. + `(cons (string-append "LDFLAGS=-Wl,-rpath=" + (assoc-ref %outputs "out") "/lib") + ,flags)) + ((#:phases phases) + `(modify-phases ,phases + (add-before 'configure 'create-output-directory + (lambda* (#:key outputs #:allow-other-keys) + ;; Unfortunately the configure script refuses to function if + ;; the directory specified as -rpath does not already exist. + (mkdir-p (string-append (assoc-ref outputs "out") "/lib")) + #t))))))))) + (define-public ghostscript/x (package/inherit ghostscript (name (string-append (package-name ghostscript) "-with-x")) diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm index 659f5dd5d4..2b723e99ee 100644 --- a/gnu/packages/gnome.scm +++ b/gnu/packages/gnome.scm @@ -2461,7 +2461,7 @@ libxml to ease remote use of the RESTful API.") (define-public libsoup (package (name "libsoup") - (version "2.62.3") + (version "2.64.0") (source (origin (method url-fetch) (uri (string-append "mirror://gnome/sources/libsoup/" @@ -2469,7 +2469,7 @@ libxml to ease remote use of the RESTful API.") name "-" version ".tar.xz")) (sha256 (base32 - "0whi8p03kpbp68kg6fg3vb7rhykjp7wn3nlbzy9j0p298zjss4nk")))) + "09z7g3spww3f84y8jmicdd6lqp360mbggpg5h1fq1v4p5ihcjnyr")))) (build-system gnu-build-system) (outputs '("out" "doc")) (arguments @@ -2573,6 +2573,7 @@ libxml to ease remote use of the RESTful API.") ("libxml2" ,libxml2))) (inputs `(("glib-networking" ,glib-networking) + ("libpsl" ,libpsl) ("sqlite" ,sqlite))) (home-page "https://live.gnome.org/LibSoup/") (synopsis "GLib-based HTTP Library") diff --git a/gnu/packages/graph.scm b/gnu/packages/graph.scm index b393919e66..245ee8f956 100644 --- a/gnu/packages/graph.scm +++ b/gnu/packages/graph.scm @@ -28,6 +28,7 @@ #:use-module ((guix licenses) #:prefix license:) #:use-module (gnu packages) #:use-module (gnu packages gcc) + #:use-module (gnu packages bioconductor) #:use-module (gnu packages bioinformatics) #:use-module (gnu packages compression) #:use-module (gnu packages cran) @@ -98,14 +99,14 @@ more.") (define-public r-igraph (package (name "r-igraph") - (version "1.2.1") + (version "1.2.2") (source (origin (method url-fetch) (uri (cran-uri "igraph" version)) (sha256 (base32 - "1hcr6b1lz030lgay1bz8y8sxaf2j93ds8n8gsqr6qhssz141hd2m")))) + "1bggm7b8v3bh7q2589w26qvd7sgs69m4qiij7d0rbm0ykkgxm8lx")))) (build-system r-build-system) (native-inputs `(("gfortran" ,gfortran))) @@ -130,14 +131,14 @@ more.") (define-public r-diffusionmap (package (name "r-diffusionmap") - (version "1.1-0") + (version "1.1-0.1") (source (origin (method url-fetch) (uri (cran-uri "diffusionMap" version)) (sha256 (base32 - "1l985q2hfc8ss5afajik4p25dx628yikvhdimz5s0pql800q2yv3")))) + "11l4kbciawvli5nlsi4qaf8afmgk5xgqiqpdyhvaqri5mx0zhk5j")))) (properties `((upstream-name . "diffusionMap"))) (build-system r-build-system) (propagated-inputs diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm index 3322860d83..7a70239684 100644 --- a/gnu/packages/gtk.scm +++ b/gnu/packages/gtk.scm @@ -890,14 +890,7 @@ images onto Cairo surfaces.") (sha256 (base32 "1qam447m05sxxv6x8dlzg7qnyfc4dh8apjw1idpfhpns671gfr6m")) - (patches (search-patches "guile-present-coding.patch")) - (modules '((guix build utils))) - (snippet - '(begin - (substitute* "Makefile.in" - (("godir = .*$") - "godir = $(moddir)\n")) - #t)))) + (patches (search-patches "guile-present-coding.patch")))) (build-system gnu-build-system) (arguments '(#:phases diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm index 8c561b0210..7c88454300 100644 --- a/gnu/packages/guile.scm +++ b/gnu/packages/guile.scm @@ -866,7 +866,7 @@ for Guile\".") (define-public guile-json (package (name "guile-json") - (version "1.1.1") + (version "1.2.0") (home-page "https://github.com/aconchillo/guile-json") (source (origin (method url-fetch) @@ -875,7 +875,7 @@ for Guile\".") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "12jqkn9qgwdlxbasy2n25a2a7apf30dww1nnxqfam5735k3jdngv")))) + "02kqv0q98fmchn7i4y7ycmrjlh4b2c93ij0z7k036qwpp204w4gh")))) (build-system gnu-build-system) (native-inputs `(("autoconf" ,autoconf) ("automake" ,automake) @@ -893,7 +893,9 @@ specification. These are the main features: @item Unicode support for strings. @item Allows JSON pretty printing. @end itemize\n") - (license license:lgpl3+))) + + ;; Version 1.2.0 switched to GPLv3+ (from LGPLv3+). + (license license:gpl3+))) (define-public guile2.2-json (deprecated-package "guile2.2-json" guile-json)) @@ -1581,8 +1583,10 @@ you send to a FIFO file.") (("ac_subst_vars='") "ac_subst_vars='GUILE_EFFECTIVE_VERSION\n")) (substitute* "Makefile.in" - (("/site/2.0") - "/site/@GUILE_EFFECTIVE_VERSION@")) + (("moddir =.*") + "moddir = $(datadir)/guile/site/@GUILE_EFFECTIVE_VERSION@\n") + (("godir =.*") + "godir = $(libdir)/guile/@GUILE_EFFECTIVE_VERSION@/site-ccache\n")) #t)))) (build-system gnu-build-system) (inputs @@ -1786,6 +1790,20 @@ Note that 8sync is only available for Guile 2.2.") (base32 "0vjkg72ghgdgphzbjz9ig8al8271rq8974viknb2r1rg4lz92ld0")))) (build-system gnu-build-system) + (arguments + '(#:phases (modify-phases %standard-phases + (add-after 'install 'mode-guile-objects + (lambda* (#:key outputs #:allow-other-keys) + ;; .go files are installed to "lib/guile/X.Y/cache". + ;; This phase moves them to "…/site-ccache". + (let* ((out (assoc-ref outputs "out")) + (lib (string-append out "/lib/guile")) + (old (car (find-files lib "^ccache$" + #:directories? #t))) + (new (string-append (dirname old) + "/site-ccache"))) + (rename-file old new) + #t)))))) (native-inputs `(("texinfo" ,texinfo) ("pkg-config" ,pkg-config))) diff --git a/gnu/packages/haskell-check.scm b/gnu/packages/haskell-check.scm index c3ef85f3f0..31407ca259 100644 --- a/gnu/packages/haskell-check.scm +++ b/gnu/packages/haskell-check.scm @@ -39,7 +39,7 @@ (define-public ghc-tasty-ant-xml (package (name "ghc-tasty-ant-xml") - (version "1.0.2") + (version "1.1.4") (source (origin (method url-fetch) @@ -49,7 +49,7 @@ ".tar.gz")) (sha256 (base32 - "0pgz2lclg2hp72ykljcbxd88pjanfdfk8m5vb2qzcyjr85kwrhxv")))) + "0v0gsb90kh6hwlgxbclzawsskywc6yf7n8xhiifia97l4y0yx2m8")))) (build-system haskell-build-system) (inputs `(("ghc-generic-deriving" ,ghc-generic-deriving) diff --git a/gnu/packages/haskell.scm b/gnu/packages/haskell.scm index a07bb049a2..eb629cf138 100644 --- a/gnu/packages/haskell.scm +++ b/gnu/packages/haskell.scm @@ -2078,9 +2078,13 @@ literals.") (base32 "1vbzf0awb6zb456xf48za1kl22018646cfzq4frvxgb9ay97vk0d")))) (build-system haskell-build-system) - ;; Tests require older versions of testy. - (arguments `(#:tests? #f)) + (arguments `(#:configure-flags (list "--allow-newer=tasty"))) (inputs `(("zlib" ,zlib))) + (native-inputs + `(("ghc-quickcheck" ,ghc-quickcheck) + ("ghc-tasty" ,ghc-tasty) + ("ghc-tasty-hunit" ,ghc-tasty-hunit) + ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck))) (home-page "https://hackage.haskell.org/package/zlib") (synopsis "Compression and decompression in the gzip and zlib formats") @@ -4220,7 +4224,7 @@ system.") (define-public ghc-base-compat (package (name "ghc-base-compat") - (version "0.10.4") + (version "0.9.3") (source (origin (method url-fetch) @@ -4230,7 +4234,7 @@ system.") ".tar.gz")) (sha256 (base32 - "0ksp990gxs731mq19rzbxrbs43nazfljjc8krlx5bjqblw3kfs8d")))) + "0452l6zf6fjhy4kxqwv6i6hhg6yfx4wcg450k3axpyj30l7jnq3x")))) (build-system haskell-build-system) (native-inputs `(("ghc-quickcheck" ,ghc-quickcheck) @@ -5190,6 +5194,8 @@ occurrences of a substring (the first in case of overlaps) with another.") (base32 "1wj8kgjg5bn2yrs4zh9qfjv85cx6w998j9pi39yrbv305944mb9j")))) (build-system haskell-build-system) + (arguments + `(#:configure-flags (list "--allow-newer=tasty"))) (native-inputs `(("ghc-quickcheck" ,ghc-quickcheck) ("ghc-smallcheck" ,ghc-smallcheck) @@ -10152,4 +10158,29 @@ tools are not needed to actually run Gtk2Hs programs.") backends provided by the @code{Cairo} and @code{Diagrams} libraries.") (license license:bsd-3))) +(define-public ghc-wcwidth + (package + (name "ghc-wcwidth") + (version "0.0.2") + (source + (origin + (method url-fetch) + (uri (string-append "https://hackage.haskell.org/package/wcwidth/wcwidth-" + version ".tar.gz")) + (sha256 + (base32 + "1n1fq7v64b59ajf5g50iqj9sa34wm7s2j3viay0kxpmvlcv8gipz")))) + (build-system haskell-build-system) + (inputs + `(("ghc-setlocale" ,ghc-setlocale) + ("ghc-utf8-string" ,ghc-utf8-string) + ("ghc-attoparsec" ,ghc-attoparsec))) + (home-page "https://github.com/solidsnack/wcwidth/") + (synopsis "Haskell bindings to wcwidth") + (description "This package provides Haskell bindings to your system's +native wcwidth and a command line tool to examine the widths assigned by it. +The command line tool can compile a width table to Haskell code that assigns +widths to the Char type.") + (license license:bsd-3))) + ;;; haskell.scm ends here diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm index c6010f1f56..03f08a614f 100644 --- a/gnu/packages/image.scm +++ b/gnu/packages/image.scm @@ -19,6 +19,7 @@ ;;; Copyright © 2018 Joshua Sierles, Nextjournal <joshua@nextjournal.com> ;;; Copyright © 2018 Fis Trivial <ybbs.daans@hotmail.com> ;;; Copyright © 2018 Pierre Neidhardt <mail@ambrevar.xyz> +;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -485,6 +486,7 @@ arithmetic ops.") (package (name "jbig2dec") (version "0.14") + (replacement jbig2dec-0.15) (source (origin (method url-fetch) @@ -509,6 +511,21 @@ work.") (home-page "https://jbig2dec.com") (license license:gpl2+))) +;; This is a bugfix release from an ongoing Ghostscript security audit. +;; It was released alongside Ghostscript 9.24. +(define-public jbig2dec-0.15 + (package + (inherit jbig2dec) + (version "0.15") + (source (origin + (inherit (package-source jbig2dec)) + (uri (string-append "https://github.com/ArtifexSoftware" + "/ghostpdl-downloads/releases/download/gs924/" + "jbig2dec-" version ".tar.gz")) + (sha256 + (base32 + "0m1qwpbjbirgw2fqznbajdhdhh35d6xa2csr64lpjz735pvimykb")))))) + (define-public openjpeg (package (name "openjpeg") diff --git a/gnu/packages/julia.scm b/gnu/packages/julia.scm index 39e2322739..fb9b0eeedf 100644 --- a/gnu/packages/julia.scm +++ b/gnu/packages/julia.scm @@ -355,10 +355,12 @@ ("objconv" ,(origin (method url-fetch) - (uri "http://www.agner.org/optimize/objconv.zip") + ;; No versioned URL, see <https://www.agner.org/optimize/> for updates. + (uri "https://www.agner.org/optimize/objconv.zip") + (file-name "objconv-2018-08-15.zip") (sha256 (base32 - "1fi7qa2sd9vb35dvkgripjf0fayzg2qmff215f8agfqfiwd1g8qs")))) + "09y4pwxfs6fl47cyingbf95i2rxx74wmycl9fd4ldcgvpx9bzdrx")))) ("dsfmt" ,(origin (method url-fetch) diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm index 14f23db888..fc071a1338 100644 --- a/gnu/packages/linux.scm +++ b/gnu/packages/linux.scm @@ -399,8 +399,8 @@ It has been modified to remove all non-free binary blobs.") ;; supports qemu "virt" machine and possibly a large number of ARM boards. ;; See : https://wiki.debian.org/DebianKernel/ARMMP. -(define %linux-libre-version "4.18.5") -(define %linux-libre-hash "1y52ns34vh9p4pfj08xsycv8p0xywm6dbpdi0wwpkll1xgpqikvf") +(define %linux-libre-version "4.18.6") +(define %linux-libre-hash "1l5caid77vbfb54zrfxkk7qj7lrf9ck9kpn96kr45spkwl51wm8m") (define %linux-libre-4.18-patches (list %boot-logo-patch @@ -430,8 +430,8 @@ It has been modified to remove all non-free binary blobs.") #:patches %linux-libre-4.18-patches #:configuration-file kernel-config)) -(define %linux-libre-4.14-version "4.14.67") -(define %linux-libre-4.14-hash "050zvdxjy6sc64q75pr1gxsmh49chwav2pwxz8xlif39bvahnrpg") +(define %linux-libre-4.14-version "4.14.68") +(define %linux-libre-4.14-hash "05l5y0vbbl60jxdbqglqr9c99a8g8lfsp4mcqfpcx1pkh5br7i3l") (define-public linux-libre-4.14 (make-linux-libre %linux-libre-4.14-version @@ -440,14 +440,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.124" - "0p78gx5jiqvaf2cadf5jp40lzgarrg0m0ybf9w2499v28vjsp30q" + (make-linux-libre "4.9.125" + "1saihk61l1kk42jf8yfsfkm77zalq31f0bdlam3c1g7yw702wj9g" %intel-compatible-systems #:configuration-file kernel-config)) (define-public linux-libre-4.4 - (make-linux-libre "4.4.153" - "195vzkkmjiicqfzd38hgf381rlz665rl06abzf8cww0gbnzvrf72" + (make-linux-libre "4.4.154" + "08i9fvrmswkydj538wg6c7ggxmhll0ff0bjkw8rnyslqwilfwr1i" %intel-compatible-systems #:configuration-file kernel-config)) diff --git a/gnu/packages/machine-learning.scm b/gnu/packages/machine-learning.scm index a86bdcb5ed..7790e78779 100644 --- a/gnu/packages/machine-learning.scm +++ b/gnu/packages/machine-learning.scm @@ -560,13 +560,13 @@ I/O.") (define-public r-adaptivesparsity (package (name "r-adaptivesparsity") - (version "1.4") + (version "1.6") (source (origin (method url-fetch) (uri (cran-uri "AdaptiveSparsity" version)) (sha256 (base32 - "1az7isvalf3kmdiycrfl6s9k9xqk22k1mc6rh8v0jmcz402qyq8z")))) + "0imr5m8mll9j6n4icsv6z9rl5kbnwsp9wvzrg7n90nnmcxq2cz91")))) (properties `((upstream-name . "AdaptiveSparsity"))) (build-system r-build-system) @@ -579,7 +579,9 @@ I/O.") (("PKG_LIBS=" prefix) (string-append prefix "-larmadillo")))))))) (propagated-inputs - `(("r-rcpp" ,r-rcpp) + `(("r-mass" ,r-mass) + ("r-matrix" ,r-matrix) + ("r-rcpp" ,r-rcpp) ("r-rcpparmadillo" ,r-rcpparmadillo))) (inputs `(("armadillo" ,armadillo))) @@ -594,14 +596,14 @@ geometric models.") (define-public r-kernlab (package (name "r-kernlab") - (version "0.9-26") + (version "0.9-27") (source (origin (method url-fetch) (uri (cran-uri "kernlab" version)) (sha256 (base32 - "0xv0slf3ggw3sswsi34416lb1g3h1pqkrr2h7r1n1kvgii3l0jcm")))) + "1m0xqf6gyvwayz7w3c83y32ayvnlz0jicj8ijk808zq9sh7dbbgn")))) (build-system r-build-system) (home-page "https://cran.r-project.org/web/packages/kernlab") (synopsis "Kernel-based machine learning tools") diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm index 4944dd7622..024e75aaa1 100644 --- a/gnu/packages/mail.scm +++ b/gnu/packages/mail.scm @@ -1071,7 +1071,7 @@ which can add many functionalities to the base client.") (define-public msmtp (package (name "msmtp") - (version "1.6.8") + (version "1.8.0") (source (origin (method url-fetch) @@ -1079,11 +1079,10 @@ which can add many functionalities to the base client.") "/msmtp-" version ".tar.xz")) (sha256 (base32 - "1ysrnshvwhzwmvb2walw5i9jdzlvmckj7inr0xnvb26q0jirbzsm")))) + "1k9wwlapkxk9ql3xq05y6vwn6ziqk9b1v8lyhj1866qd02zhqwxx")))) (build-system gnu-build-system) (inputs - `(("libidn" ,libidn) - ("libsecret" ,libsecret) + `(("libsecret" ,libsecret) ("gnutls" ,gnutls) ("zlib" ,zlib) ("gsasl" ,gsasl))) diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm index 50c0a320e0..01bd03c600 100644 --- a/gnu/packages/maths.scm +++ b/gnu/packages/maths.scm @@ -15,7 +15,7 @@ ;;; Copyright © 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2016 Leo Famulari <leo@famulari.name> ;;; Copyright © 2016, 2017 Thomas Danckaert <post@thomasdanckaert.be> -;;; Copyright © 2017 Paul Garlick <pgarlick@tourbillion-technology.com> +;;; Copyright © 2017, 2018 Paul Garlick <pgarlick@tourbillion-technology.com> ;;; Copyright © 2017 Nils Gillmann <ng0@n0.is> ;;; Copyright © 2017 Ben Woodcroft <donttrustben@gmail.com> ;;; Copyright © 2017 Theodoros Foradis <theodoros@foradis.org> @@ -1580,7 +1580,7 @@ September 2004}") (define-public petsc (package (name "petsc") - (version "3.8.0") + (version "3.9.3") (source (origin (method url-fetch) @@ -1588,7 +1588,9 @@ September 2004}") (uri (string-append "http://ftp.mcs.anl.gov/pub/petsc/release-snapshots/" "petsc-lite-" version ".tar.gz")) (sha256 - (base32 "1lajbk3c29hnh83v6cbmm3a8wv6bdykh0p70kwrr4vrnizalk88s")))) + (base32 "1fwkbwv4g7zf2lc8fw865xd0bl9anb6jaczfis5dff7h449gwa48")))) + (outputs '("out" ;libraries and headers + "examples")) ;~30MiB of examples (build-system gnu-build-system) (native-inputs `(("python" ,python-2))) @@ -1605,11 +1607,7 @@ September 2004}") #:configure-flags `("--with-mpi=0" "--with-openmp=1" - "--with-superlu=1" - ,(string-append "--with-superlu-include=" - (assoc-ref %build-inputs "superlu") "/include") - ,(string-append "--with-superlu-lib=" - (assoc-ref %build-inputs "superlu") "/lib/libsuperlu.a")) + "--with-superlu=1") #:make-flags ;; Honor (parallel-job-count) for build. Do not use --with-make-np, ;; whose value is dumped to $out/lib/petsc/conf/petscvariables. @@ -1662,6 +1660,15 @@ September 2004}") "PETScBuildInternal.cmake" ;; Once installed, should uninstall with Guix "uninstall.py")) + #t))) + (add-after 'install 'move-examples + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (examples (assoc-ref outputs "examples")) + (exdir (string-append out "/share/petsc/examples")) + (exdir' (string-append examples "/share/petsc/examples"))) + (copy-recursively exdir exdir') + (delete-file-recursively exdir) #t)))))) (home-page "http://www.mcs.anl.gov/petsc") (synopsis "Library to solve PDEs") @@ -1685,6 +1692,7 @@ scientific applications modeled by partial differential equations.") (name "petsc-openmpi") (inputs `(("openmpi" ,openmpi) + ("hdf5" ,hdf5-parallel-openmpi) ,@(package-inputs petsc))) (arguments (substitute-keyword-arguments (package-arguments petsc) @@ -1692,7 +1700,21 @@ scientific applications modeled by partial differential equations.") ``("--with-mpiexec=mpirun" ,(string-append "--with-mpi-dir=" (assoc-ref %build-inputs "openmpi")) - ,@(delete "--with-mpi=0" ,cf))))) + ,(string-append "--with-hdf5-include=" + (assoc-ref %build-inputs "hdf5") "/include") + ,(string-append "--with-hdf5-lib=" + (assoc-ref %build-inputs "hdf5") "/lib/libhdf5.a") + ,@(delete "--with-mpi=0" ,cf))) + ((#:phases phases) + `(modify-phases ,phases + (add-before 'check 'set-test-environment + (lambda _ + ;; By default, running the test suite would fail because 'ssh' + ;; could not be found in $PATH. Define this variable to + ;; placate Open MPI without adding a dependency on OpenSSH (the + ;; agent isn't used anyway.) + (setenv "OMPI_MCA_plm_rsh_agent" (which "cat")) + #t)))))) (synopsis "Library to solve PDEs (with MPI support)"))) (define-public petsc-complex-openmpi @@ -1738,7 +1760,7 @@ savings are consistently > 5x.") (define-public slepc (package (name "slepc") - (version "3.8.2") + (version "3.9.2") (source (origin (method url-fetch) @@ -1746,7 +1768,7 @@ savings are consistently > 5x.") version ".tar.gz")) (sha256 (base32 - "04zd48p43rnvg68p6cp28zll0px5whglc5v0sc3s6vdj1v920z8y")))) + "0gmhdqac8zm3jx43h935z7bflazjnpvqxjv4jh5za2y1z2rqax94")))) (build-system gnu-build-system) (native-inputs `(("python" ,python-2))) @@ -2824,8 +2846,8 @@ parts of it.") (source (origin (method url-fetch) - (uri (string-append "https://github.com/xianyi/OpenBLAS/tarball/v" - version)) + (uri (string-append "mirror://sourceforge/openblas/v" version "/OpenBLAS%20" + version "%20version.tar.gz")) (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 @@ -3231,7 +3253,7 @@ Failure to do so will result in a library with poor performance.") (define-public glm (package (name "glm") - (version "0.9.9.0") + (version "0.9.9.1") (source (origin (method url-fetch) @@ -3239,7 +3261,7 @@ Failure to do so will result in a library with poor performance.") version "/glm-" version ".zip")) (sha256 (base32 - "0ihjadp2sb8w312a276skfjsljm3y41bjscbxf79wn23gi00giz1")))) + "042a23hmxfs429czkmlg5ixf28aikzfbw18780prj2gcd4flgw8h")))) (build-system cmake-build-system) (native-inputs `(("unzip" ,unzip))) @@ -4027,3 +4049,80 @@ terminal do calculations simply and quickly. The formula to be calculated can be fed to @command{tcalc} through the command line.") (home-page "https://sites.google.com/site/mohammedisam2000/tcalc") (license license:gpl3+))) + +(define-public sundials + (package + (name "sundials") + (version "3.1.1") + (source + (origin + (method url-fetch) + (uri (string-append "https://computation.llnl.gov/projects/sundials/download/" + "sundials-" version ".tar.gz")) + (sha256 + (base32 + "090s8ymhd0g1s1d44fa73r5yi32hb4biwahhbfi327zd64yn8kd2")))) + (build-system cmake-build-system) + (native-inputs + `(("python" ,python-2))) ;for tests; syntax incompatible with python 3 + (inputs + `(("fortran" ,gfortran) ;for fcmix + ("blas" ,openblas) + ("suitesparse" ,suitesparse))) ;TODO: Add hypre + (arguments + `(#:configure-flags `("-DEXAMPLES_ENABLE_C:BOOL=ON" + "-DEXAMPLES_ENABLE_CXX:BOOL=ON" + "-DEXAMPLES_ENABLE_F77:BOOL=ON" + "-DEXAMPLES_ENABLE_F90:BOOL=ON" + "-DEXAMPLES_INSTALL:BOOL=OFF" + + "-DFCMIX_ENABLE:BOOL=ON" + + "-DKLU_ENABLE:BOOL=ON" + ,(string-append "-DKLU_INCLUDE_DIR=" + (assoc-ref %build-inputs "suitesparse") + "/include") + ,(string-append "-DKLU_LIBRARY_DIR=" + (assoc-ref %build-inputs "suitesparse") + "/lib")))) + (home-page "https://computation.llnl.gov/projects/sundials") + (synopsis "Suite of nonlinear and differential/algebraic equation solvers") + (description "SUNDIALS is a family of software packages implemented with +the goal of providing robust time integrators and nonlinear solvers that can +easily be incorporated into existing simulation codes.") + (license license:bsd-3))) + +(define-public sundials-openmpi + (package (inherit sundials) + (name "sundials-openmpi") + (inputs + `(("mpi" ,openmpi) + ("petsc" ,petsc-openmpi) ;support in SUNDIALS requires MPI + ,@(package-inputs sundials))) + (arguments + (substitute-keyword-arguments (package-arguments sundials) + ((#:configure-flags flags '()) + `(cons* "-DMPI_ENABLE:BOOL=ON" + "-DPETSC_ENABLE:BOOL=ON" + (string-append "-DPETSC_INCLUDE_DIR=" + (assoc-ref %build-inputs "petsc") + "/include") + (string-append "-DPETSC_LIBRARY_DIR=" + (assoc-ref %build-inputs "petsc") + "/lib") + ,flags)) + ((#:phases phases '%standard-phases) + `(modify-phases ,phases + (add-before 'check 'set-test-environment + (lambda _ + ;; By default, running the test suite would fail because 'ssh' + ;; could not be found in $PATH. Define this variable to + ;; placate Open MPI without adding a dependency on OpenSSH (the + ;; agent isn't used anyway.) + (setenv "OMPI_MCA_plm_rsh_agent" (which "cat")) + ;; Allow oversubscription in case there are less + ;; physical cores available in the build environment + ;; than SUNDIALS wants while testing. + (setenv "OMPI_MCA_rmaps_base_oversubscribe" "yes") + #t)))))) + (synopsis "SUNDIALS with OpenMPI support"))) diff --git a/gnu/packages/mes.scm b/gnu/packages/mes.scm index 81d4145439..63a8db449a 100644 --- a/gnu/packages/mes.scm +++ b/gnu/packages/mes.scm @@ -39,15 +39,15 @@ (define-public nyacc (package (name "nyacc") - (version "0.83.3") + (version "0.86.0") (source (origin (method url-fetch) (uri (string-append "mirror://savannah/nyacc/" name "-" version ".tar.gz")) - (file-name (string-append name "-" version ".tar.gz")) + (patches (search-patches "nyacc-binary-literals.patch")) (sha256 (base32 - "0120n0mdb6r58c4jc024dhwqy5s8a20waknijfhqjc59a884lrd6")))) + "0lkd9lyspvhxlfs0496gsllwinh62jk9wij6gpadvx9gwz6yavd9")))) (build-system gnu-build-system) (native-inputs `(("guile" ,guile-2.2))) @@ -59,36 +59,24 @@ extensive examples, including parsers for the Javascript and C99 languages.") (home-page "https://savannah.nongnu.org/projects/nyacc") (license (list gpl3+ lgpl3+)))) -(define-public nyacc-for-mes - (package - (inherit nyacc) - (version "0.80.42") - (source (origin - (method url-fetch) - (uri (string-append "https://gitlab.com/janneke/nyacc" - "/-/archive/v" version - "/nyacc-" version ".tar.gz")) - (sha256 - (base32 - "0c8c8kxir0h2d4nxr131xbkfs7c80haipmkp2g6677sh14wn0b3y")))))) - (define-public mes (let ((triplet "i686-unknown-linux-gnu")) (package (name "mes") - (version "0.17") + (version "0.17.1") (source (origin (method url-fetch) (uri (string-append "http://alpha.gnu.org/gnu/mes/" "mes-" version ".tar.gz")) + (patches (search-patches "mes-nyacc-0.86.0.patch")) (sha256 (base32 - "1j32x4zqy2cqjlg9m35f2411mwac2b0p5ch4hm99gddmfbxzgyhg")))) + "02g8zig53ffd0ai8kqhv2zj7bj2366a8hr6ydkwakmi2d1amyrna")))) (build-system gnu-build-system) (supported-systems '("i686-linux" "x86_64-linux")) (propagated-inputs `(("mescc-tools" ,mescc-tools) - ("nyacc" ,nyacc-for-mes))) + ("nyacc" ,nyacc))) (native-inputs `(("guile" ,guile-2.2) ,@(if (not (string-prefix? "i686-linux" (or (%current-target-system) diff --git a/gnu/packages/mp3.scm b/gnu/packages/mp3.scm index 579127d06e..c9effbafa3 100644 --- a/gnu/packages/mp3.scm +++ b/gnu/packages/mp3.scm @@ -84,7 +84,7 @@ fully implemented. This package contains the library.") (license license:gpl2+) - (home-page "http://www.underbit.com/products/mad/"))) + (home-page "https://www.underbit.com/products/mad/"))) (define-public libid3tag (package @@ -105,7 +105,7 @@ This package contains the library.") "Libid3tag is a library for reading ID3 tags, both ID3v1 and the various versions of ID3v2.") (license license:gpl2+) - (home-page "http://www.underbit.com/products/mad/"))) + (home-page "https://www.underbit.com/products/mad/"))) (define-public id3lib (package @@ -184,7 +184,7 @@ Speex, WavPack TrueAudio, WAV, AIFF, MP4 and ASF files.") (source (origin (method url-fetch) (uri (string-append - "http://ibiblio.org" + "https://ibiblio.org" "/pub/linux/apps/sound/mp3-utils/mp3info/mp3info-" version ".tgz")) (sha256 @@ -231,7 +231,7 @@ Speex, WavPack TrueAudio, WAV, AIFF, MP4 and ASF files.") (inputs `(("gtk+" ,gtk+-2) ("ncurses" ,ncurses))) - (home-page "http://www.ibiblio.org/mp3info/") + (home-page "https://www.ibiblio.org/mp3info/") (synopsis "MP3 technical info viewer and ID3 1.x tag editor") (description "MP3Info is a little utility used to read and modify the ID3 tags of MP3 @@ -309,7 +309,7 @@ This package contains the binary.") (uri (list (string-append "mirror://sourceforge/mpg123/mpg123/" version "/mpg123-" version ".tar.bz2") (string-append - "http://www.mpg123.org/download/mpg123-" + "https://www.mpg123.org/download/mpg123-" version ".tar.bz2"))) (sha256 (base32 @@ -413,7 +413,7 @@ for album and track information.") (source (origin (method url-fetch) (uri (string-append - "http://files.musepack.net/source/libmpcdec-" + "https://files.musepack.net/source/libmpcdec-" version ".tar.bz2")) (sha256 (base32 @@ -424,7 +424,7 @@ for album and track information.") "This library supports decoding of the Musepack (MPC) audio compression format.") (license license:bsd-3) - (home-page "http://musepack.net"))) + (home-page "https://musepack.net"))) (define-public mpc123 (package @@ -491,7 +491,7 @@ specifically mp3 files containing ID3 metadata (i.e. song info). It provides a command-line tool (eyeD3) and a Python library (import eyed3) that can be used to write your own applications or plugins that are callable from the command-line tool.") - (home-page "http://eyed3.nicfit.net/") + (home-page "https://eyed3.readthedocs.io/en/latest/") (license license:gpl2+))) (define-public chromaprint diff --git a/gnu/packages/mpd.scm b/gnu/packages/mpd.scm index 2554ec9efd..5c82bf9ba1 100644 --- a/gnu/packages/mpd.scm +++ b/gnu/packages/mpd.scm @@ -56,7 +56,7 @@ (define-public libmpdclient (package (name "libmpdclient") - (version "2.14") + (version "2.15") (source (origin (method url-fetch) (uri @@ -65,7 +65,7 @@ "/libmpdclient-" version ".tar.xz")) (sha256 (base32 - "0whk0qw0lsd3kaimdznz0c45bfym0p4885zf4b7pfc7y3dwy510a")))) + "1la60ar6i4ghpscrlgm45kci9b74bvkpsfybhg0ygs4rzpwzdnxl")))) (build-system meson-build-system) (native-inputs `(("pkg-config" ,pkg-config) diff --git a/gnu/packages/multiprecision.scm b/gnu/packages/multiprecision.scm index e185a98359..4f5eac16b9 100644 --- a/gnu/packages/multiprecision.scm +++ b/gnu/packages/multiprecision.scm @@ -108,7 +108,7 @@ algebra.") library for performing multiple-precision, floating-point computations with correct rounding.") (license lgpl3+) - (home-page "http://www.mpfr.org/"))) + (home-page "https://www.mpfr.org/"))) (define-public mpc (package diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm index ba21e5da2b..e39478e794 100644 --- a/gnu/packages/music.scm +++ b/gnu/packages/music.scm @@ -786,18 +786,23 @@ interface. It is implemented as a frontend to @code{klick}.") (define-public libgme (package (name "libgme") - (version "0.6.1") + (version "0.6.2") (source (origin (method url-fetch) (uri (string-append "https://bitbucket.org/mpyne/game-music-emu/" "downloads/game-music-emu-" version - ".tar.bz2")) + ".tar.xz")) (sha256 (base32 - "08fk7zddpn7v93d0fa7fcypx7hvgwx9b5psj9l6m8b87k2hbw4fw")))) + "0hkkmxbaas2sirlb5i4r10mgbbiaapjx8pazifabwba23m3wnijh")))) (build-system cmake-build-system) (arguments '(#:tests? #f)) ; no check target + (native-inputs + `(;; Use gcc-4.9 to work around an internal compiler error that happens + ;; when using gcc-5.5.0. FIXME: Try removing this when the default + ;; compiler is no longer gcc-5.5.0. + ("gcc" ,gcc-4.9))) (home-page "https://bitbucket.org/mpyne/game-music-emu") (synopsis "Video game music file playback library") (description diff --git a/gnu/packages/musl.scm b/gnu/packages/musl.scm index ff789b8c6f..357372becd 100644 --- a/gnu/packages/musl.scm +++ b/gnu/packages/musl.scm @@ -28,17 +28,17 @@ (define-public musl (package (name "musl") - (version "1.1.19") + (version "1.1.20") (source (origin (method url-fetch) (uri (string-append "http://www.musl-libc.org/releases/" name "-" version ".tar.gz")) (sha256 (base32 - "1nf1wh44bhm8gdcfr75ayib29b99vpq62zmjymrq7f96h9bshnfv")))) + "0q8dsjxl41dccscv9a0r78bs7jap57mn4mni5pwbbip6s1qqggj4")))) (build-system gnu-build-system) (arguments - `(#:tests? #f ; Musl has no tests + `(#:tests? #f ; Musl has no tests #:configure-flags (list "--disable-gcc-wrapper"))) (synopsis "Small C standard library") diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm index 61c0ad7fba..abc616de3c 100644 --- a/gnu/packages/networking.scm +++ b/gnu/packages/networking.scm @@ -580,7 +580,7 @@ of the same name.") (define-public wireshark (package (name "wireshark") - (version "2.6.2") + (version "2.6.3") (source (origin (method url-fetch) @@ -588,7 +588,7 @@ of the same name.") version ".tar.xz")) (sha256 (base32 - "153h6prxamv5a62f3pfadkry0y57696xrgxfy2gfy5xswdg8kcj9")))) + "1v538h02y8avwy3cr11xz6wkyf9xd8qva4ng4sl9f2fw4skahn6i")))) (build-system gnu-build-system) (inputs `(("c-ares" ,c-ares) ("glib" ,glib) @@ -762,52 +762,58 @@ live network and disk I/O bandwidth monitor.") (define-public aircrack-ng (package (name "aircrack-ng") - (version "1.2-rc4") + (version "1.3") (source (origin (method url-fetch) - (uri (string-append "http://download.aircrack-ng.org/aircrack-ng-" + (uri (string-append "https://download.aircrack-ng.org/aircrack-ng-" version ".tar.gz")) (sha256 (base32 - "0dpzx9kddxpgzmgvdpl3rxn0jdaqhm5wxxndp1xd7d75mmmc2fnr")))) + "1jl30d0kibc82447fr3lgw75arik0l9729k94z76l7vl51y8mq4a")))) (build-system gnu-build-system) (native-inputs - `(("pkg-config" ,pkg-config))) + `(("autoconf" ,autoconf) + ("automake" ,automake) + ("libtool" ,libtool) + ("pkg-config" ,pkg-config) + ("which" ,which))) (inputs `(("libgcrypt" ,libgcrypt) ("libnl" ,libnl) + ("libpcap" ,libpcap) ("ethtool" ,ethtool) ("pcre" ,pcre) ("sqlite" ,sqlite) ("zlib" ,zlib))) (arguments - `(#:make-flags `("sqlite=true" - "gcrypt=true" - "libnl=true" - "pcre=true" - "experimental=true" ;build wesside-ng, etc. - "AVX2FLAG=N" "AVX1FLAG=N" - ,,@(match (%current-system) - ((or "x86_64-linux" "i686-linux") - `("SSEFLAG=Y")) - (_ - `("NEWSSE=false"))) - ,(string-append "prefix=" %output)) + `(#:configure-flags + (list "--with-experimental=yes" ; build wesside-ng, etc. + "--with-gcrypt") ; openssl's the default #:phases (modify-phases %standard-phases - (delete 'configure) ;no configure phase + (add-before 'bootstrap 'patch-evalrev + (lambda _ + ;; Called by ./autogen.sh below, before the default + ;; ‘patch-shebangs’ phase has had a chance to run. + (substitute* "evalrev" + (("/bin/sh") + (which "sh"))) + #t)) + (replace 'bootstrap + (lambda _ + ;; Patch shebangs in generated files before running + ;; ./configure. + (setenv "NOCONFIGURE" "please") + (invoke "bash" "./autogen.sh"))) (add-after 'build 'absolutize-tools (lambda* (#:key inputs #:allow-other-keys) (let ((ethtool (string-append (assoc-ref inputs "ethtool") "/sbin/ethtool"))) (substitute* "scripts/airmon-ng" - (("\\[ ! -x \"\\$\\(command -v ethtool 2>&1)\" \\]") - (string-append "! " ethtool " --version " - ">/dev/null 2>&1")) - (("\\$\\(ethtool") - (string-append "$(" ethtool))) + (("ethtool ") + (string-append ethtool " "))) #t)))))) - (home-page "http://www.aircrack-ng.org") + (home-page "https://www.aircrack-ng.org") (synopsis "Assess WiFi network security") (description "Aircrack-ng is a complete suite of tools to assess WiFi network diff --git a/gnu/packages/openldap.scm b/gnu/packages/openldap.scm index 1cdce999b3..ae39870dd4 100644 --- a/gnu/packages/openldap.scm +++ b/gnu/packages/openldap.scm @@ -106,14 +106,14 @@ (define-public nss-pam-ldapd (package (name "nss-pam-ldapd") - (version "0.9.9") + (version "0.9.10") (source (origin (method url-fetch) (uri (string-append "https://arthurdejong.org/nss-pam-ldapd/" "nss-pam-ldapd-" version ".tar.gz")) (sha256 (base32 - "1lj7qkjlg3bshwdc5x5r1ny37rly4wgm1c8b6w6b5f4wa11nmji0")))) + "1cqamcr6qpgwxijlr6kg7jspjamjra8w0haan0qssn0yxn95d7c0")))) (build-system gnu-build-system) (arguments `(#:configure-flags diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm index 6c3d245058..06c344e7af 100644 --- a/gnu/packages/package-management.scm +++ b/gnu/packages/package-management.scm @@ -101,8 +101,8 @@ ;; Note: the 'update-guix-package.scm' script expects this definition to ;; start precisely like this. (let ((version "0.15.0") - (commit "8bbb79cf95a07a40950448a8a09d888254404ed4") - (revision 2)) + (commit "3d43017026f9995ad128915db8ca5eafe061bf75") + (revision 3)) (package (name "guix") @@ -118,7 +118,7 @@ (commit commit))) (sha256 (base32 - "0h83l91v2cg9bb78c7vqx9wj71ckz22jbjmm2fy4vqs9216jnvc0")) + "167rzz2h33xmmchkplwzfq94s5jwdn5nabsq2lb84s54ps0sm89m")) (file-name (string-append "guix-" version "-checkout")))) (build-system gnu-build-system) (arguments @@ -213,6 +213,7 @@ ;; Guile-JSON, and Guile-Git automatically. (let* ((out (assoc-ref outputs "out")) (guile (assoc-ref inputs "guile")) + (gcrypt (assoc-ref inputs "guile-gcrypt")) (json (assoc-ref inputs "guile-json")) (sqlite (assoc-ref inputs "guile-sqlite3")) (git (assoc-ref inputs "guile-git")) @@ -220,7 +221,8 @@ "guile-bytestructures")) (ssh (assoc-ref inputs "guile-ssh")) (gnutls (assoc-ref inputs "gnutls")) - (deps (list json sqlite gnutls git bs ssh)) + (deps (list gcrypt json sqlite gnutls + git bs ssh)) (effective (read-line (open-pipe* OPEN_READ @@ -277,6 +279,7 @@ '()))) (propagated-inputs `(("gnutls" ,gnutls) + ("guile-gcrypt" ,guile-gcrypt) ("guile-json" ,guile-json) ("guile-sqlite3" ,guile-sqlite3) ("guile-ssh" ,guile-ssh) @@ -312,6 +315,7 @@ the Nix package manager.") (inputs `(("gnutls" ,gnutls) ("guile-git" ,guile-git) + ("guile-gcrypt" ,guile-gcrypt) ,@(fold alist-delete (package-inputs guix) '("boot-guile" "boot-guile/i686" "util-linux")))) @@ -562,13 +566,13 @@ transactions from C or Python.") (define-public diffoscope (package (name "diffoscope") - (version "96") + (version "100") (source (origin (method url-fetch) (uri (pypi-uri name version)) (sha256 (base32 - "1x66f2x8miy3giff14higpcs70c0zb5d3gj6yn8ac6p183sngl72")))) + "0sh7g26i5ndpa8l7xq6rnijbi3jz5izjn0b98zcnm6wpgghszw48")))) (build-system python-build-system) (arguments `(#:phases (modify-phases %standard-phases diff --git a/gnu/packages/patches/ghostscript-CVE-2018-16509.patch b/gnu/packages/patches/ghostscript-CVE-2018-16509.patch new file mode 100644 index 0000000000..50ffa3cb98 --- /dev/null +++ b/gnu/packages/patches/ghostscript-CVE-2018-16509.patch @@ -0,0 +1,193 @@ +Ghostscript 9.24 was released with an incomplete fix for CVE-2018-16509: +https://nvd.nist.gov/vuln/detail/CVE-2018-16509 +https://bugs.chromium.org/p/project-zero/issues/detail?id=1640#c19 +https://bugs.ghostscript.com/show_bug.cgi?id=699718 + +The reproducers no longer work after applying these commits: + +https://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5812b1b78fc4d36fdc293b7859de69241140d590 +https://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e914f1da46e33decc534486598dc3eadf69e6efb +https://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3e5d316b72e3965b7968bb1d96baa137cd063ac6 +https://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=643b24dbd002fb9c131313253c307cf3951b3d47 + +This patch is a "squashed" version of those. + +diff --git a/Resource/Init/gs_setpd.ps b/Resource/Init/gs_setpd.ps +index bba3c8c0e..8fa7c51df 100644 +--- a/Resource/Init/gs_setpd.ps ++++ b/Resource/Init/gs_setpd.ps +@@ -95,27 +95,41 @@ level2dict begin + { % Since setpagedevice doesn't create new device objects, + % we must (carefully) reinstall the old parameters in + % the same device. +- .currentpagedevice pop //null currentdevice //null .trysetparams ++ .currentpagedevice pop //null currentdevice //null ++ { .trysetparams } .internalstopped ++ { ++ //null ++ } if + dup type /booleantype eq + { pop pop } +- { % This should never happen! ++ { + SETPDDEBUG { (Error in .trysetparams!) = pstack flush } if +- cleartomark pop pop pop ++ {cleartomark pop pop pop} .internalstopped pop ++ % if resetting the entire device state failed, at least put back the ++ % security related key ++ currentdevice //null //false mark /.LockSafetyParams ++ currentpagedevice /.LockSafetyParams .knownget not ++ {systemdict /SAFER .knownget not {//false} } if ++ .putdeviceparamsonly + /.installpagedevice cvx /rangecheck signalerror + } + ifelse pop pop + % A careful reading of the Red Book reveals that an erasepage + % should occur, but *not* an initgraphics. + erasepage .beginpage +- } bind def ++ } bind executeonly def + + /.uninstallpagedevice +- { 2 .endpage { .currentnumcopies //false .outputpage } if ++ { ++ {2 .endpage { .currentnumcopies //false .outputpage } if} .internalstopped pop + nulldevice + } bind def + + (%grestorepagedevice) cvn +- { .uninstallpagedevice grestore .installpagedevice ++ { ++ .uninstallpagedevice ++ grestore ++ .installpagedevice + } bind def + + (%grestoreallpagedevice) cvn +diff --git a/psi/zdevice2.c b/psi/zdevice2.c +index 0c7080d57..159a0c0d9 100644 +--- a/psi/zdevice2.c ++++ b/psi/zdevice2.c +@@ -251,8 +251,8 @@ z2currentgstate(i_ctx_t *i_ctx_p) + /* ------ Wrappers for operators that reset the graphics state. ------ */ + + /* Check whether we need to call out to restore the page device. */ +-static bool +-restore_page_device(const gs_gstate * pgs_old, const gs_gstate * pgs_new) ++static int ++restore_page_device(i_ctx_t *i_ctx_p, const gs_gstate * pgs_old, const gs_gstate * pgs_new) + { + gx_device *dev_old = gs_currentdevice(pgs_old); + gx_device *dev_new; +@@ -260,9 +260,10 @@ restore_page_device(const gs_gstate * pgs_old, const gs_gstate * pgs_new) + gx_device *dev_t2; + bool samepagedevice = obj_eq(dev_old->memory, &gs_int_gstate(pgs_old)->pagedevice, + &gs_int_gstate(pgs_new)->pagedevice); ++ bool LockSafetyParams = dev_old->LockSafetyParams; + + if ((dev_t1 = (*dev_proc(dev_old, get_page_device)) (dev_old)) == 0) +- return false; ++ return 0; + /* If we are going to putdeviceparams in a callout, we need to */ + /* unlock temporarily. The device will be re-locked as needed */ + /* by putdeviceparams from the pgs_old->pagedevice dict state. */ +@@ -271,23 +272,51 @@ restore_page_device(const gs_gstate * pgs_old, const gs_gstate * pgs_new) + dev_new = gs_currentdevice(pgs_new); + if (dev_old != dev_new) { + if ((dev_t2 = (*dev_proc(dev_new, get_page_device)) (dev_new)) == 0) +- return false; +- if (dev_t1 != dev_t2) +- return true; ++ samepagedevice = true; ++ else if (dev_t1 != dev_t2) ++ samepagedevice = false; ++ } ++ ++ if (LockSafetyParams && !samepagedevice) { ++ const int required_ops = 512; ++ const int required_es = 32; ++ ++ /* The %grestorepagedevice must complete: the biggest danger ++ is operand stack overflow. As we use get/putdeviceparams ++ that means pushing all the device params onto the stack, ++ pdfwrite having by far the largest number of parameters ++ at (currently) 212 key/value pairs - thus needing (currently) ++ 424 entries on the op stack. Allowing for working stack ++ space, and safety margin..... ++ */ ++ if (required_ops + ref_stack_count(&o_stack) >= ref_stack_max_count(&o_stack)) { ++ gs_currentdevice(pgs_old)->LockSafetyParams = LockSafetyParams; ++ return_error(gs_error_stackoverflow); ++ } ++ /* We also want enough exec stack space - 32 is an overestimate of ++ what we need to complete the Postscript call out. ++ */ ++ if (required_es + ref_stack_count(&e_stack) >= ref_stack_max_count(&e_stack)) { ++ gs_currentdevice(pgs_old)->LockSafetyParams = LockSafetyParams; ++ return_error(gs_error_execstackoverflow); ++ } + } + /* + * The current implementation of setpagedevice just sets new + * parameters in the same device object, so we have to check + * whether the page device dictionaries are the same. + */ +- return !samepagedevice; ++ return samepagedevice ? 0 : 1; + } + + /* - grestore - */ + static int + z2grestore(i_ctx_t *i_ctx_p) + { +- if (!restore_page_device(igs, gs_gstate_saved(igs))) ++ int code = restore_page_device(i_ctx_p, igs, gs_gstate_saved(igs)); ++ if (code < 0) return code; ++ ++ if (code == 0) + return gs_grestore(igs); + return push_callout(i_ctx_p, "%grestorepagedevice"); + } +@@ -297,7 +326,9 @@ static int + z2grestoreall(i_ctx_t *i_ctx_p) + { + for (;;) { +- if (!restore_page_device(igs, gs_gstate_saved(igs))) { ++ int code = restore_page_device(i_ctx_p, igs, gs_gstate_saved(igs)); ++ if (code < 0) return code; ++ if (code == 0) { + bool done = !gs_gstate_saved(gs_gstate_saved(igs)); + + gs_grestore(igs); +@@ -328,11 +359,15 @@ z2restore(i_ctx_t *i_ctx_p) + if (code < 0) return code; + + while (gs_gstate_saved(gs_gstate_saved(igs))) { +- if (restore_page_device(igs, gs_gstate_saved(igs))) ++ code = restore_page_device(i_ctx_p, igs, gs_gstate_saved(igs)); ++ if (code < 0) return code; ++ if (code > 0) + return push_callout(i_ctx_p, "%restore1pagedevice"); + gs_grestore(igs); + } +- if (restore_page_device(igs, gs_gstate_saved(igs))) ++ code = restore_page_device(i_ctx_p, igs, gs_gstate_saved(igs)); ++ if (code < 0) return code; ++ if (code > 0) + return push_callout(i_ctx_p, "%restorepagedevice"); + + code = dorestore(i_ctx_p, asave); +@@ -355,9 +390,12 @@ static int + z2setgstate(i_ctx_t *i_ctx_p) + { + os_ptr op = osp; ++ int code; + + check_stype(*op, st_igstate_obj); +- if (!restore_page_device(igs, igstate_ptr(op))) ++ code = restore_page_device(i_ctx_p, igs, igstate_ptr(op)); ++ if (code < 0) return code; ++ if (code == 0) + return zsetgstate(i_ctx_p); + return push_callout(i_ctx_p, "%setgstatepagedevice"); + } diff --git a/gnu/packages/patches/ghostscript-bug-699708.patch b/gnu/packages/patches/ghostscript-bug-699708.patch new file mode 100644 index 0000000000..1567be1c6f --- /dev/null +++ b/gnu/packages/patches/ghostscript-bug-699708.patch @@ -0,0 +1,160 @@ +Additional security fix that missed 9.24. + +Taken from upstream: +http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=fb713b3818b52d8a6cf62c951eba2e1795ff9624 + +From fb713b3818b52d8a6cf62c951eba2e1795ff9624 Mon Sep 17 00:00:00 2001 +From: Chris Liddell <chris.liddell@artifex.com> +Date: Thu, 6 Sep 2018 09:16:22 +0100 +Subject: [PATCH] Bug 699708 (part 1): 'Hide' non-replaceable error handlers + for SAFER + +We already had a 'private' dictionary for non-standard errors: gserrordict. + +This now includes all the default error handlers, the dictionary is made +noaccess and all the prodedures are bound and executeonly. + +When running with -dSAFER, in the event of a Postscript error, instead of +pulling the handler from errordict, we'll pull it from gserrordict - thus +malicious input cannot trigger problems by the use of custom error handlers. + +errordict remains open and writeable, so files such as the Quality Logic tests +that install their own handlers will still 'work', with the exception that the +custom error handlers will not be called. + +This is a 'first pass', 'sledgehammer' approach: a nice addition would to allow +an integrator to specify a list of errors that are not to be replaced (for +example, embedded applications would probably want to ensure that VMerror is +always handled as they intend). +--- + Resource/Init/gs_init.ps | 29 ++++++++++++++++++----------- + psi/interp.c | 30 +++++++++++++++++++++--------- + 2 files changed, 39 insertions(+), 20 deletions(-) + +diff --git a/Resource/Init/gs_init.ps b/Resource/Init/gs_init.ps +index 071c39205..bc8b7951c 100644 +--- a/Resource/Init/gs_init.ps ++++ b/Resource/Init/gs_init.ps +@@ -881,7 +881,7 @@ userdict /.currentresourcefile //null put + { not exch pop exit } { pop } ifelse + } + for exch pop .quit +- } bind def ++ } bind executeonly def + /.errorhandler % <command> <errorname> .errorhandler - + { % Detect an internal 'stopped'. + 1 .instopped { //null eq { pop pop stop } if } if +@@ -926,7 +926,7 @@ userdict /.currentresourcefile //null put + $error /globalmode get $error /.nosetlocal get and .setglobal + $error /.inerror //false put + stop +- } bind def ++ } bind executeonly def + % Define the standard handleerror. We break out the printing procedure + % (.printerror) so that it can be extended for binary output + % if the Level 2 facilities are present. +@@ -976,7 +976,7 @@ userdict /.currentresourcefile //null put + ifelse % newerror + end + flush +- } bind def ++ } bind executeonly def + /.printerror_long % long error printout, + % $error is on the dict stack + { % Push the (anonymous) stack printing procedure. +@@ -1053,14 +1053,14 @@ userdict /.currentresourcefile //null put + { (Current file position is ) print position = } + if + +- } bind def ++ } bind executeonly def + % Define a procedure for clearing the error indication. + /.clearerror + { $error /newerror //false put + $error /errorname //null put + $error /errorinfo //null put + 0 .setoserrno +- } bind def ++ } bind executeonly def + + % Define $error. This must be in local VM. + .currentglobal //false .setglobal +@@ -1086,11 +1086,15 @@ end + /errordict ErrorNames length 3 add dict + .forcedef % errordict is local, systemdict is global + .setglobal % back to global VM +-% For greater Adobe compatibility, we put all non-standard errors in a +-% separate dictionary, gserrordict. It does not need to be in local VM, +-% because PostScript programs do not access it. ++% gserrordict contains all the default error handling methods, but unlike ++% errordict it is noaccess after creation (also it is in global VM). ++% When running 'SAFER', we'll ignore the contents of errordict, which ++% may have been tampered with by the running job, and always use gserrordict ++% gserrordict also contains any non-standard errors, for better compatibility ++% with Adobe. ++% + % NOTE: the name gserrordict is known to the interpreter. +-/gserrordict 5 dict def ++/gserrordict ErrorNames length 3 add dict def + % Register an error in errordict. We make this a procedure because we only + % register the Level 1 errors here: the rest are registered by "feature" + % files. However, ErrorNames contains all of the error names regardless of +@@ -1119,8 +1123,11 @@ errordict begin + } bind def + end % errordict + +-% Put non-standard errors in gserrordict. +-gserrordict /unknownerror errordict /unknownerror get put ++% Put all the default handlers in gserrordict ++gserrordict ++errordict {2 index 3 1 roll put} forall ++noaccess pop ++% remove the non-standard errors from errordict + errordict /unknownerror .undef + % Define a stable private copy of handleerror that we will always use under + % JOBSERVER mode. +diff --git a/psi/interp.c b/psi/interp.c +index c27b70dca..d41a9d3f5 100644 +--- a/psi/interp.c ++++ b/psi/interp.c +@@ -661,16 +661,28 @@ again: + return code; + if (gs_errorname(i_ctx_p, code, &error_name) < 0) + return code; /* out-of-range error code! */ +- /* +- * For greater Adobe compatibility, only the standard PostScript errors +- * are defined in errordict; the rest are in gserrordict. ++ ++ /* If LockFilePermissions is true, we only refer to gserrordict, which ++ * is not accessible to Postcript jobs + */ +- if (dict_find_string(systemdict, "errordict", &perrordict) <= 0 || +- (dict_find(perrordict, &error_name, &epref) <= 0 && +- (dict_find_string(systemdict, "gserrordict", &perrordict) <= 0 || +- dict_find(perrordict, &error_name, &epref) <= 0)) +- ) +- return code; /* error name not in errordict??? */ ++ if (i_ctx_p->LockFilePermissions) { ++ if (((dict_find_string(systemdict, "gserrordict", &perrordict) <= 0 || ++ dict_find(perrordict, &error_name, &epref) <= 0)) ++ ) ++ return code; /* error name not in errordict??? */ ++ } ++ else { ++ /* ++ * For greater Adobe compatibility, only the standard PostScript errors ++ * are defined in errordict; the rest are in gserrordict. ++ */ ++ if (dict_find_string(systemdict, "errordict", &perrordict) <= 0 || ++ (dict_find(perrordict, &error_name, &epref) <= 0 && ++ (dict_find_string(systemdict, "gserrordict", &perrordict) <= 0 || ++ dict_find(perrordict, &error_name, &epref) <= 0)) ++ ) ++ return code; /* error name not in errordict??? */ ++ } + doref = *epref; + epref = &doref; + /* Push the error object on the operand stack if appropriate. */ +-- +2.18.0 + diff --git a/gnu/packages/patches/mes-nyacc-0.86.0.patch b/gnu/packages/patches/mes-nyacc-0.86.0.patch new file mode 100644 index 0000000000..58dfc5a46b --- /dev/null +++ b/gnu/packages/patches/mes-nyacc-0.86.0.patch @@ -0,0 +1,197 @@ +From 9e610736bf779f3295c1192e748cd19cbbe3be28 Mon Sep 17 00:00:00 2001 +From: Jan Nieuwenhuizen <janneke@gnu.org> +Date: Wed, 5 Sep 2018 20:28:06 +0200 +Subject: [PATCH 1/2] mes: Support Nyacc 0.85.3: Add char-set-copy. + +* mes/module/srfi/srfi-14.mes (char-set-copy): New function> +--- + mes/module/srfi/srfi-14.mes | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/mes/module/srfi/srfi-14.mes b/mes/module/srfi/srfi-14.mes +index 0be39b1e..a16d16ce 100644 +--- a/mes/module/srfi/srfi-14.mes ++++ b/mes/module/srfi/srfi-14.mes +@@ -52,3 +52,6 @@ + + (define (char-whitespace? c) + (char-set-contains? char-set:whitespace c)) ++ ++(define (char-set-copy cs) ++ (map identity cs)) +-- +2.18.0 + +From b952bdf44f11edbfc277600dc35236aae1769b54 Mon Sep 17 00:00:00 2001 +From: Jan Nieuwenhuizen <janneke@gnu.org> +Date: Wed, 5 Sep 2018 22:14:34 +0200 +Subject: [PATCH 2/2] mes: Support Nyacc 0.85.3: Integrate progress. + +* mes/module/nyacc/lang/sx-util.mes: New file. +* mes/module/nyacc/version.mes: New file. +* mes/module/nyacc/lang/c99/cpp.mes (nyacc): Include them. +* mes/module/nyacc/lang/c99/parser.mes (nyacc): Include them. +* module/mescc/preprocess.scm (need-progress): New function. +(progress): New function. +(insert-progress-monitors): Use them to Integrate progress. +--- + mes/module/mescc/preprocess.mes | 1 + + mes/module/nyacc/lang/c99/cpp.mes | 1 + + mes/module/nyacc/lang/c99/parser.mes | 1 + + mes/module/nyacc/lang/sx-util.mes | 27 +++++++++++++++++++++ + mes/module/nyacc/version.mes | 26 +++++++++++++++++++++ + module/mescc/preprocess.scm | 35 ++++++++++++++++++++++++++++ + 6 files changed, 91 insertions(+) + create mode 100644 mes/module/nyacc/lang/sx-util.mes + create mode 100644 mes/module/nyacc/version.mes + +diff --git a/mes/module/mescc/preprocess.mes b/mes/module/mescc/preprocess.mes +index c7c5fcaa..022a372c 100644 +--- a/mes/module/mescc/preprocess.mes ++++ b/mes/module/mescc/preprocess.mes +@@ -24,4 +24,5 @@ + (mes-use-module (srfi srfi-13)) + (mes-use-module (srfi srfi-26)) + (mes-use-module (nyacc lang c99 parser)) ++(mes-use-module (nyacc version)) + (include-from-path "mescc/preprocess.scm") +diff --git a/mes/module/nyacc/lang/c99/cpp.mes b/mes/module/nyacc/lang/c99/cpp.mes +index fad1dc55..b25c4a93 100644 +--- a/mes/module/nyacc/lang/c99/cpp.mes ++++ b/mes/module/nyacc/lang/c99/cpp.mes +@@ -28,5 +28,6 @@ + + (mes-use-module (nyacc parse)) + (mes-use-module (nyacc lex)) ++(mes-use-module (nyacc lang sx-util)) + (mes-use-module (nyacc lang util)) + (include-from-path "nyacc/lang/c99/cpp.scm") +diff --git a/mes/module/nyacc/lang/c99/parser.mes b/mes/module/nyacc/lang/c99/parser.mes +index c51552d6..1a9aaf73 100644 +--- a/mes/module/nyacc/lang/c99/parser.mes ++++ b/mes/module/nyacc/lang/c99/parser.mes +@@ -32,6 +32,7 @@ + + (mes-use-module (nyacc lex)) + (mes-use-module (nyacc parse)) ++(mes-use-module (nyacc lang sx-util)) + (mes-use-module (nyacc lang util)) + (mes-use-module (nyacc lang c99 cpp)) + +diff --git a/mes/module/nyacc/lang/sx-util.mes b/mes/module/nyacc/lang/sx-util.mes +new file mode 100644 +index 00000000..41ac5b4a +--- /dev/null ++++ b/mes/module/nyacc/lang/sx-util.mes +@@ -0,0 +1,27 @@ ++;;; -*-scheme-*- ++ ++;;; GNU Mes --- Maxwell Equations of Software ++;;; Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> ++;;; ++;;; This file is part of GNU Mes. ++;;; ++;;; GNU Mes 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 Mes 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 Mes. If not, see <http://www.gnu.org/licenses/>. ++ ++;;; Commentary: ++ ++;;; Code: ++ ++(mes-use-module (srfi srfi-1)) ++(mes-use-module (srfi srfi-16)) ++(include-from-path "nyacc/lang/sx-util.scm") +diff --git a/mes/module/nyacc/version.mes b/mes/module/nyacc/version.mes +new file mode 100644 +index 00000000..b9db628e +--- /dev/null ++++ b/mes/module/nyacc/version.mes +@@ -0,0 +1,26 @@ ++;;; -*-scheme-*- ++ ++;;; GNU Mes --- Maxwell Equations of Software ++;;; Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> ++;;; ++;;; This file is part of GNU Mes. ++;;; ++;;; GNU Mes 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 Mes 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 Mes. If not, see <http://www.gnu.org/licenses/>. ++ ++;;; Commentary: ++ ++;;; Code: ++ ++(include-from-path "nyacc/version.scm") ++(display "nyacc version\n") +diff --git a/module/mescc/preprocess.scm b/module/mescc/preprocess.scm +index 9e341cba..c2efb32c 100644 +--- a/module/mescc/preprocess.scm ++++ b/module/mescc/preprocess.scm +@@ -26,9 +26,44 @@ + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26) + #:use-module (nyacc lang c99 parser) ++ #:use-module (nyacc lang c99 parser) ++ #:use-module (nyacc version) + #:use-module (mes guile) + #:export (c99-input->ast)) + ++(format (current-error-port) "*nyacc-version*=~a\n" *nyacc-version*) ++;; list of which rules you want progress reported ++(define need-progress ++ (assoc-ref ++ '(("0.85.3" (1 2 3)) ++ ("0.86.0" (1 2 3))) ++ *nyacc-version*)) ++ ++(define (progress o) ++ (when (and o (getenv "NYACC_DEBUG")) ++ (display " :" (current-error-port)) ++ (display o (current-error-port)) ++ (display "\n" (current-error-port)))) ++ ++(define (insert-progress-monitors act-v len-v) ++ (let ((n (vector-length act-v))) ++ (let loop ((ix 0)) ++ (when (< ix n) ++ (if (memq ix need-progress) ++ (vector-set ++ act-v ix ++ (lambda args ++ (progress (list-ref args (1- (vector-ref len-v ix)))) ++ (apply (vector-ref act-v ix) args)))) ++ (loop (1+ ix)))))) ++ ++(cond-expand ++ (guile ++ (insert-progress-monitors (@@ (nyacc lang c99 parser) c99-act-v) ++ (@@ (nyacc lang c99 parser) c99-len-v))) ++ (mes ++ (insert-progress-monitors c99-act-v c99-len-v))) ++ + (define (logf port string . rest) + (apply format (cons* port string rest)) + (force-output port) +-- +2.18.0 + diff --git a/gnu/packages/patches/nyacc-binary-literals.patch b/gnu/packages/patches/nyacc-binary-literals.patch new file mode 100644 index 0000000000..8159d74032 --- /dev/null +++ b/gnu/packages/patches/nyacc-binary-literals.patch @@ -0,0 +1,29 @@ +From 6a08014b77bf435f025ecdac08396580b85f159a Mon Sep 17 00:00:00 2001 +From: Jan Nieuwenhuizen <janneke@gnu.org> +Date: Sat, 8 Sep 2018 20:22:45 +0200 +Subject: [PATCH] fix binary literals. + +--- + module/nyacc/lex.scm | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/module/nyacc/lex.scm b/module/nyacc/lex.scm +index 2ec9895..b205212 100644 +--- a/module/nyacc/lex.scm ++++ b/module/nyacc/lex.scm +@@ -345,10 +345,11 @@ + ((char-numeric? ch) (iter chl '$fixed ba 1 ch)) + ((char=? #\. ch) (iter (cons ch chl) #f ba 15 (read-char))) + (else #f))) +- ((10) ;; allow x after 0 ++ ((10) ;; allow x, b after 0 + (cond + ((eof-object? ch) (iter chl ty ba 5 ch)) + ((char=? #\x ch) (iter (cons ch chl) ty 16 1 (read-char))) ++ ((char=? #\b ch) (iter (cons ch chl) ty 2 1 (read-char))) + (else (iter chl ty ba 1 ch)))) + ((15) ;; got `.' only + (cond +-- +2.18.0 + diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm index 761c5987b0..4792b6fb49 100644 --- a/gnu/packages/perl.scm +++ b/gnu/packages/perl.scm @@ -153,8 +153,10 @@ (files '("lib/perl5/site_perl"))))) (synopsis "Implementation of the Perl programming language") (description - "Perl 5 is a highly capable, feature-rich programming language with over -24 years of development.") + "Perl is a general-purpose programming language originally developed for +text manipulation and now used for a wide range of tasks including system +administration, web development, network programming, GUI development, and +more.") (home-page "http://www.perl.org/") (license gpl1+))) ; or "Artistic" @@ -1369,7 +1371,7 @@ supports XML, YAML, JSON, Apache-style configuration, and Perl code.") (define-public perl-config-autoconf (package (name "perl-config-autoconf") - (version "0.315") + (version "0.317") (source (origin (method url-fetch) @@ -1377,7 +1379,7 @@ supports XML, YAML, JSON, Apache-style configuration, and Perl code.") "Config-AutoConf-" version ".tar.gz")) (sha256 (base32 - "0h39x9rzrhhilpg8yxlzpka269qrzsjg0iy0c1b9xflqlvhx2g2b")))) + "1qcwib4yaml5z2283qy5khjcydyibklsnk8zrk9wzdzc5wnv5r01")))) (build-system perl-build-system) (propagated-inputs `(("perl-capture-tiny" ,perl-capture-tiny))) @@ -2140,7 +2142,7 @@ hours, minutes, seconds, and time zones.") (define-public perl-datetime (package (name "perl-datetime") - (version "1.49") + (version "1.50") (source (origin (method url-fetch) @@ -2148,7 +2150,7 @@ hours, minutes, seconds, and time zones.") "DateTime-" version ".tar.gz")) (sha256 (base32 - "0hbw4zq1562slnz7g7hyhfhyq98dzkk3i5g21x3xra5cvfix93kh")))) + "165iqk1xvhs5j0kzsipa7aqycx3h37wqsl2r4jl104yqvmqhqszd")))) (build-system perl-build-system) (native-inputs `(("perl-cpan-meta-check" ,perl-cpan-meta-check) @@ -3128,7 +3130,7 @@ only about 40% as many lines of code and with zero non-core dependencies.") (define-public perl-extutils-installpaths (package (name "perl-extutils-installpaths") - (version "0.011") + (version "0.012") (source (origin (method url-fetch) @@ -3136,7 +3138,7 @@ only about 40% as many lines of code and with zero non-core dependencies.") "ExtUtils-InstallPaths-" version ".tar.gz")) (sha256 (base32 - "0z06y0fhx9hy9x01abb7s2xdbqrh9x4ps7avmlf4bwfwih2gl2bn")))) + "1v9lshfhm9ck4p0v77arj5f7haj1mmkqal62lgzzvcds6wq5www4")))) (build-system perl-build-system) (propagated-inputs `(("perl-extutils-config" ,perl-extutils-config))) @@ -3192,7 +3194,7 @@ XS interface besides the perl one.") (define-public perl-extutils-helpers (package (name "perl-extutils-helpers") - (version "0.022") + (version "0.026") (source (origin (method url-fetch) @@ -3200,7 +3202,7 @@ XS interface besides the perl one.") "ExtUtils-Helpers-" version ".tar.gz")) (sha256 (base32 - "15dalfwmpfmifw312i5pwiai8134pxf7b2804shlqhdk1xqczy6k")))) + "05ilqcj1rg5izr09dsqmy5di4fvq6ph4k0chxks7qmd4j1kip46y")))) (build-system perl-build-system) (home-page "https://metacpan.org/release/ExtUtils-Helpers") (synopsis "Various portability utilities for module builders") @@ -3772,7 +3774,7 @@ single-letter approach, is provided but not enabled by default.") (define-public perl-getopt-long-descriptive (package (name "perl-getopt-long-descriptive") - (version "0.102") + (version "0.103") (source (origin (method url-fetch) @@ -3780,7 +3782,7 @@ single-letter approach, is provided but not enabled by default.") "Getopt-Long-Descriptive-" version ".tar.gz")) (sha256 (base32 - "0ii8xafvlph5vzcqp3dpc83lg7nkg3l1l2hmqdf5382a567vkm4s")))) + "1cpl240qxmh7jf85ai9sfkp3nzm99syya4jxidizp7aa83kvmqbh")))) (build-system perl-build-system) (native-inputs `(("perl-cpan-meta-check" ,perl-cpan-meta-check) @@ -6324,7 +6326,7 @@ anything that looks like a method.") (define-public perl-namespace-clean (package (name "perl-namespace-clean") - (version "0.25") + (version "0.27") (source (origin (method url-fetch) @@ -6332,7 +6334,7 @@ anything that looks like a method.") "namespace-clean-" version ".tar.gz")) (sha256 (base32 - "016dds70ql1mp18b07chkxiy4drn976ibnbshqc2hmhrh9xjnsll")))) + "17dg64pd4bwi2ad3p8ykwys1zha7kg8a8ykvks7wfg8q7qyah44a")))) (build-system perl-build-system) (propagated-inputs `(("perl-package-stash" ,perl-package-stash) @@ -6704,7 +6706,7 @@ checking parameters easier.") (define-public perl-params-validate (package (name "perl-params-validate") - (version "1.26") + (version "1.29") (source (origin (method url-fetch) @@ -6712,7 +6714,7 @@ checking parameters easier.") "Params-Validate-" version ".tar.gz")) (sha256 (base32 - "1vbj78qd46ip09i06dsbb62jfwpzp4bg7yi617v98nvim77w66l2")))) + "0cwpf8yxwyxbnwhf6rx4wnaq1q38j38i34a78a005shb8gxqv9j9")))) (build-system perl-build-system) (native-inputs `(("perl-module-build" ,perl-module-build) @@ -6897,7 +6899,7 @@ for correctness.") (define-public perl-pegex (package (name "perl-pegex") - (version "0.64") + (version "0.67") (source (origin (method url-fetch) @@ -6906,7 +6908,7 @@ for correctness.") version ".tar.gz")) (sha256 (base32 - "1kb7y2cc3nibbn8i8y3vrzz1f9h3892nbf8jj88c5fdgpmj05q17")))) + "149015ra2figalxrnj72fz02qc5cm96xg6x8d6kmyanfmrrxzf9w")))) (build-system perl-build-system) (native-inputs `(("perl-file-sharedir-install" ,perl-file-sharedir-install) diff --git a/gnu/packages/plotutils.scm b/gnu/packages/plotutils.scm index 0e65cb319f..2a330695c6 100644 --- a/gnu/packages/plotutils.scm +++ b/gnu/packages/plotutils.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org> ;;; Copyright © 2016, 2017 Nicolas Goaziou <mail@nicolasgoaziou.fr> ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr> @@ -93,15 +93,7 @@ scientific data.") "guile-charting-" version ".tar.gz")) (sha256 (base32 - "0w5qiyv9v0ip5li22x762bm48g8xnw281w66iyw094zdw611pb2m")) - (modules '((guix build utils))) - (snippet - '(begin - ;; Use the standard location for modules. - (substitute* "Makefile.in" - (("godir = .*$") - "godir = $(moddir)\n")) - #t)))) + "0w5qiyv9v0ip5li22x762bm48g8xnw281w66iyw094zdw611pb2m")))) (build-system gnu-build-system) (native-inputs `(("pkg-config" ,pkg-config))) (inputs `(("guile" ,guile-2.2))) diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm index ed04de7547..56176529c9 100644 --- a/gnu/packages/python.scm +++ b/gnu/packages/python.scm @@ -6186,14 +6186,14 @@ printing of sub-tables by specifying a row range.") (define-public python-tables (package (name "python-tables") - (version "3.2.2") + (version "3.4.4") (source (origin (method url-fetch) (uri (pypi-uri "tables" version)) (sha256 (base32 - "117s6w7s3yxafpmf3zz3svana7xfrsviw01va1xp7h8ylx8v6r1m")) + "0affz7k8babh8wdmsgrz5jxrd569by2w8ffimcxs9wiaf5rw1idx")) (modules '((guix build utils))) (snippet '(begin diff --git a/gnu/packages/shells.scm b/gnu/packages/shells.scm index 6dbe1c4db7..900c8ec686 100644 --- a/gnu/packages/shells.scm +++ b/gnu/packages/shells.scm @@ -292,7 +292,7 @@ history mechanism, job control and a C-like syntax.") (define-public zsh (package (name "zsh") - (version "5.5.1") + (version "5.6") (source (origin (method url-fetch) (uri (list (string-append @@ -303,7 +303,7 @@ history mechanism, job control and a C-like syntax.") ".tar.xz"))) (sha256 (base32 - "105aqkdfsdxc4531anrj2zis2ywz6icagjam9lsc235yzh48ihz1")))) + "1mp6h2452z2029n12mxipjv4b0cc8i8sb72g8p8jklg8275iysvl")))) (build-system gnu-build-system) (arguments `(#:configure-flags '("--with-tcsetpgrp" "--enable-pcre") #:phases @@ -336,6 +336,19 @@ history mechanism, job control and a C-like syntax.") (("command -pv") "command -v") (("command -p") "command ") (("'command' -p") "'command' ")) + ;; This file is ISO-8859-1 encoded. + (with-fluids ((%default-port-encoding #f)) + (substitute* "Test/A05execution.ztst" + ;; Help it find `sh` + (("PATH=/bin:\\$\\{ZTST_testdir\\}/command.tmp/ tstcmd-slashless") + (string-append "PATH=/bin:" + (assoc-ref %build-inputs "bash") "/bin:" + "${ZTST_testdir}/command.tmp/ tstcmd-slashless")) + ;; Help it find `echo` + (("PATH=/bin:\\$\\{ZTST_testdir\\}/command.tmp tstcmd-arg") + (string-append "PATH=/bin:" + (assoc-ref %build-inputs "coreutils") "/bin:" + "PATH=/bin:${ZTST_testdir}/command.tmp tstcmd-arg")))) #t))))) (native-inputs `(("autoconf" ,autoconf))) (inputs `(("ncurses" ,ncurses) diff --git a/gnu/packages/statistics.scm b/gnu/packages/statistics.scm index 64c331d28c..6e915aa437 100644 --- a/gnu/packages/statistics.scm +++ b/gnu/packages/statistics.scm @@ -960,14 +960,14 @@ solution for sending email, including attachments, from within R.") (define-public r-stringi (package (name "r-stringi") - (version "1.2.3") + (version "1.2.4") (source (origin (method url-fetch) (uri (cran-uri "stringi" version)) (sha256 (base32 - "1sgg4krw03qkz1n4dwiya0djggk7giwd0w21qlp0pfjqi0rxq6qx")))) + "1y46xab7g1lsjmilp4hbl7pjad6pcxp66hdj8wnfdg9518h0lmq1")))) (build-system r-build-system) (inputs `(("icu4c" ,icu4c))) (native-inputs `(("pkg-config" ,pkg-config))) @@ -1033,19 +1033,17 @@ using just two functions: melt and dcast (or acast).") (define-public r-scales (package (name "r-scales") - (version "0.5.0") + (version "1.0.0") (source (origin (method url-fetch) (uri (cran-uri "scales" version)) (sha256 - (base32 "0zg9wfzmsdjxpbld0nzv7hcpq5r0wazqxmn7grvvif2agj0w1z6v")))) + (base32 "0353dkh3d7x78463c6ds80hcml59lrqwr8rlv82a8dnkxla4l7qc")))) (build-system r-build-system) (propagated-inputs - `(("r-dichromat" ,r-dichromat) - ("r-labeling" ,r-labeling) + `(("r-labeling" ,r-labeling) ("r-munsell" ,r-munsell) - ("r-plyr" ,r-plyr) ("r-rcolorbrewer" ,r-rcolorbrewer) ("r-rcpp" ,r-rcpp) ("r-r6" ,r-r6) @@ -1251,13 +1249,13 @@ for template use among CRAN packages.") (define-public r-evaluate (package (name "r-evaluate") - (version "0.10.1") + (version "0.11") (source (origin (method url-fetch) (uri (cran-uri "evaluate" version)) (sha256 (base32 - "070vvmnbdlp7sz2zhza7fhd2a6mlwiln8fn4hyzhsiizbn4n79y9")))) + "1k8vcd4vsgg0hf7kdz8rlqp1dx4ygvg35aj4n3ay50kdnpzhaj5h")))) (build-system r-build-system) (propagated-inputs `(("r-stringr" ,r-stringr))) @@ -1356,13 +1354,13 @@ syntax that can be converted to XHTML or other formats.") (define-public r-yaml (package (name "r-yaml") - (version "2.1.19") + (version "2.2.0") (source (origin (method url-fetch) (uri (cran-uri "yaml" version)) (sha256 (base32 - "04bzrnfgbpk0rhkvzwp3k3ip7jpq26bjxz71bx5mwxmcjdb07nz5")))) + "0in562nd0i23cg91a8kdbqgim656fgscykwi0icsnq53xj3srg2m")))) (build-system r-build-system) (home-page "https://cran.r-project.org/web/packages/yaml/") (synopsis "Methods to convert R data to YAML and back") @@ -1656,14 +1654,14 @@ database.") (define-public r-dbplyr (package (name "r-dbplyr") - (version "1.2.1") + (version "1.2.2") (source (origin (method url-fetch) (uri (cran-uri "dbplyr" version)) (sha256 (base32 - "1nwrls9c3kc9q7405jp6b9sh23642sz13yw55iikgw134shffj5k")))) + "0j5w6a1qim972kv4vmvinp3j50yr4idmm9cd3w7y3zsz0nq0nhcx")))) (build-system r-build-system) (propagated-inputs `(("r-assertthat" ,r-assertthat) @@ -1789,17 +1787,17 @@ and fast file reading.") (define-public r-xtable (package (name "r-xtable") - (version "1.8-2") + (version "1.8-3") (source (origin (method url-fetch) (uri (cran-uri "xtable" version)) (sha256 (base32 - "0398qkpvlw3dv0myz4mjcyqwpwc2m31l127r8vdzwc71wb6s28qn")))) + "09f311gq9g7dzf8jdvcx72j11xb7p00jlg066jjbpa6pz3zv1cjk")))) (build-system r-build-system) (native-inputs - `(("r-knitr" ,r-knitr))) + `(("r-knitr" ,r-knitr))) ; for vignettes (home-page "http://xtable.r-forge.r-project.org/") (synopsis "Export R tables to LaTeX or HTML") (description @@ -1936,14 +1934,14 @@ chain.") (define-public r-ade4 (package (name "r-ade4") - (version "1.7-11") + (version "1.7-13") (source (origin (method url-fetch) (uri (cran-uri "ade4" version)) (sha256 (base32 - "0wm54wcpn87rdh6vyw04cr8vgba899y6jsl61f22bmlvx6d7kkac")))) + "16z9jk4qj35ghsk4lwmq241dgc770y8a70dlmp9q4gz6d8ssgl7m")))) (build-system r-build-system) (propagated-inputs `(("r-mass" ,r-mass))) @@ -2237,24 +2235,28 @@ tables, autolinks and strikethrough text.") (define-public r-roxygen2 (package (name "r-roxygen2") - (version "6.0.1") + (version "6.1.0") (source (origin (method url-fetch) (uri (cran-uri "roxygen2" version)) (sha256 (base32 - "0xpzziminf225kjwhyl51kgkzhplyzhk5farhf5s822krl2xqbfj")))) + "0ji9k4s1bvfbl8wimfqj1lqr33h1claaz30vb5pgksxyg77j5xaa")))) (build-system r-build-system) (propagated-inputs `(("r-brew" ,r-brew) ("r-commonmark" ,r-commonmark) ("r-desc" ,r-desc) ("r-digest" ,r-digest) + ("r-pkgload" ,r-pkgload) + ("r-purrr" ,r-purrr) ("r-r6" ,r-r6) ("r-rcpp" ,r-rcpp) ("r-stringi" ,r-stringi) ("r-stringr" ,r-stringr) ("r-xml2" ,r-xml2))) + (native-inputs + `(("r-knitr" ,r-knitr))) ; for vignettes (home-page "https://github.com/klutometis/roxygen") (synopsis "In-source documentation system for R") (description @@ -2320,13 +2322,13 @@ functions make it easy to control additional request components.") (define-public r-git2r (package (name "r-git2r") - (version "0.21.0") + (version "0.23.0") (source (origin (method url-fetch) (uri (cran-uri "git2r" version)) (sha256 (base32 - "11xgddmxzh9cy85k8fb90il43qswpvryz0h9r0j1gbclfg2f9004")))) + "01250jz255fnyy2ap90nskvzhd8nhlmbhwgpvb43mk1fax077lrz")))) (build-system r-build-system) ;; This R package contains modified sources of libgit2. This modified ;; version of libgit2 is built as the package is built. Hence libgit2 is @@ -2335,6 +2337,8 @@ functions make it easy to control additional request components.") `(("libssh2" ,libssh2) ("openssl" ,openssl) ("zlib" ,zlib))) + (native-inputs + `(("pkg-config" ,pkg-config))) (home-page "https://github.com/ropensci/git2r") (synopsis "Access Git repositories with R") (description @@ -2514,13 +2518,13 @@ well as additional utilities such as panel and axis annotation functions.") (define-public r-rcpparmadillo (package (name "r-rcpparmadillo") - (version "0.8.500.0") + (version "0.9.100.5.0") (source (origin (method url-fetch) (uri (cran-uri "RcppArmadillo" version)) (sha256 (base32 - "1sh36dx6inmb56m40nigy94gxlgjva816qnlmjwg7y2bdvqj8vsi")))) + "1iyjqhfjip1nxrkllzh7r1m01jjnx7cahqkf3s557w34p987f2l1")))) (properties `((upstream-name . "RcppArmadillo"))) (build-system r-build-system) (native-inputs @@ -2629,11 +2633,7 @@ certain criterion, e.g., it contains a certain regular file.") ("r-stringr" ,r-stringr) ("r-tinytex" ,r-tinytex) ("r-yaml" ,r-yaml) - ;; rmarkdown works with the 2.x release of Pandoc, but with degraded - ;; functionality. For example, tabbed plots do not currently work with - ;; Pandoc 2. The authors of rmarkdown recommend the use of Pandoc 1 - ;; for the time being. - ("ghc-pandoc" ,ghc-pandoc-1))) + ("ghc-pandoc" ,ghc-pandoc))) (home-page "http://rmarkdown.rstudio.com") (synopsis "Convert R Markdown documents into a variety of formats") (description @@ -2799,13 +2799,13 @@ ldap, and also supports cookies, redirects, authentication, etc.") (define-public r-xml (package (name "r-xml") - (version "3.98-1.11") + (version "3.98-1.16") (source (origin (method url-fetch) (uri (cran-uri "XML" version)) (sha256 (base32 - "18izvlg2x9mzr6yb3yf02ghwbyn00frki3av4lpc44r22m4djnsh")))) + "0nl1kk354r8snhj6p9mc74m7awvqc6akmd4y3a46y78yv3g15njp")))) (properties `((upstream-name . "XML"))) (build-system r-build-system) @@ -3281,14 +3281,14 @@ Stochastic Neighbor Embedding using a Barnes-Hut implementation.") (define-public r-e1071 (package (name "r-e1071") - (version "1.6-8") + (version "1.7-0") (source (origin (method url-fetch) (uri (cran-uri "e1071" version)) (sha256 (base32 - "08n6i26nfckjpxjkzi8phhanc3ahsrirkv5rz38y2jcv7ds031pn")))) + "0fk4pw67cw1663d0n9rf1qfdqzz8k5nqkjgp3hi5jr422qp9lsck")))) (build-system r-build-system) (propagated-inputs `(("r-class" ,r-class))) @@ -3459,13 +3459,13 @@ maintenance for package developers.") (define-public r-r-utils (package (name "r-r-utils") - (version "2.6.0") + (version "2.7.0") (source (origin (method url-fetch) (uri (cran-uri "R.utils" version)) (sha256 (base32 - "03j7hrs03kyj9qrjxyp5kqv4lpqqpk6xwbkzx6j15d8928yrjr2x")))) + "0cxhn14a57x4gcyrwpfz1d6dw4xh0jcpqkb33hx8imnr340blh7n")))) (properties `((upstream-name . "R.utils"))) (build-system r-build-system) (propagated-inputs @@ -3507,13 +3507,13 @@ persistent (on the file system).") (define-public r-r-rsp (package (name "r-r-rsp") - (version "0.42.0") + (version "0.43.0") (source (origin (method url-fetch) (uri (cran-uri "R.rsp" version)) (sha256 (base32 - "1zcq0hzi0j7fvj2rs796a1i120wbr0387vck17rrd644awwbsbm0")))) + "0ax6781kfylx0acz0i3sqnpkxmrq73x29wwfic59ng7vj0ws0gyd")))) (properties `((upstream-name . "R.rsp"))) (build-system r-build-system) (propagated-inputs @@ -3558,13 +3558,13 @@ t-probabilities, quantiles, random deviates and densities.") (define-public r-matrixstats (package (name "r-matrixstats") - (version "0.53.1") + (version "0.54.0") (source (origin (method url-fetch) (uri (cran-uri "matrixStats" version)) (sha256 (base32 - "0bkiz5fm09d3512mfr2ymj9qsb1b8aic5l5m6fkaf5j7nsgvqw6z")))) + "0vx00ldsg2zvdrjn49jxczk2c9iaabgvzgpdka5j02ihh7hv83cg")))) (properties `((upstream-name . "matrixStats"))) (build-system r-build-system) (native-inputs @@ -3739,13 +3739,13 @@ features present in other programming languages.") (define-public r-plotly (package (name "r-plotly") - (version "4.7.1") + (version "4.8.0") (source (origin (method url-fetch) (uri (cran-uri "plotly" version)) (sha256 (base32 - "0wj9lw7w28z8w9ip9vadv6sydjhqyg65kfiai9m3bndzz50b1m3w")))) + "19p8pa03q9mw5vaan7r56xgd13d90ssiz0flbrkvpfrir2105ybq")))) (build-system r-build-system) (propagated-inputs `(("r-base64enc" ,r-base64enc) @@ -3761,8 +3761,10 @@ features present in other programming languages.") ("r-jsonlite" ,r-jsonlite) ("r-lazyeval" ,r-lazyeval) ("r-magrittr" ,r-magrittr) + ("r-promises" ,r-promises) ("r-purrr" ,r-purrr) ("r-rcolorbrewer" ,r-rcolorbrewer) + ("r-rlang" ,r-rlang) ("r-scales" ,r-scales) ("r-tibble" ,r-tibble) ("r-tidyr" ,r-tidyr) @@ -3844,14 +3846,14 @@ character vector.") (define-public r-googlesheets (package (name "r-googlesheets") - (version "0.2.2") + (version "0.3.0") (source (origin (method url-fetch) (uri (cran-uri "googlesheets" version)) (sha256 (base32 - "18q0xmxn09b52rmky7gr5flp0awndcnsgb7zcvkzvkrkvmwad52b")))) + "11q07nxys72wkxx9mawmjyf20gvwvrb7h3gpa73h6lgh2vgrwnv8")))) (build-system r-build-system) (propagated-inputs `(("r-cellranger" ,r-cellranger) @@ -3861,6 +3863,7 @@ character vector.") ("r-purrr" ,r-purrr) ("r-readr" ,r-readr) ("r-stringr" ,r-stringr) + ("r-tibble" ,r-tibble) ("r-tidyr" ,r-tidyr) ("r-xml2" ,r-xml2))) (home-page "https://github.com/jennybc/googlesheets") @@ -4088,14 +4091,14 @@ Zurich, including many that are related to graphics.") (define-public r-gtools (package (name "r-gtools") - (version "3.5.0") + (version "3.8.1") (source (origin (method url-fetch) (uri (cran-uri "gtools" version)) (sha256 (base32 - "1xknwk9xlsj027pg0nwiizigcrsc84hdrig0jn0cgcyxj8dabdl6")))) + "0f5syk1qq6cjq6hwymvkiyhzwa389z94722v881ipbfqkd2q8505")))) (build-system r-build-system) (arguments `(#:phases @@ -4228,13 +4231,13 @@ mechanism.") (define-public r-zoo (package (name "r-zoo") - (version "1.8-2") + (version "1.8-3") (source (origin (method url-fetch) (uri (cran-uri "zoo" version)) (sha256 (base32 - "1lpwigxmi5sc23xrha4gcsccsm4yfsg0sa97y6vac3pg1lliblvx")))) + "15jmkgwvq2mm9f09vijgx7sff8pszh90fndcwhk2vw9i0p183di0")))) (build-system r-build-system) (propagated-inputs `(("r-lattice" ,r-lattice))) @@ -4248,14 +4251,22 @@ series of numeric vectors/matrices and factors.") (define-public r-ztable (package (name "r-ztable") - (version "0.1.8") + (version "0.2.0") (source (origin (method url-fetch) (uri (cran-uri "ztable" version)) (sha256 (base32 - "1hk5k9614n52dpfrhdws06w4gvwhnz8q47x4cwxx88qmrzm8z2m3")))) + "0g7khk5ifsdh9p31wlwh2l5mn1hzxzpv6qcn1wh34vsfjdmijjwy")))) (build-system r-build-system) + (propagated-inputs + `(("r-flextable" ,r-flextable) + ("r-magrittr" ,r-magrittr) + ("r-moonbook" ,r-moonbook) + ("r-officer" ,r-officer) + ("r-rcolorbrewer" ,r-rcolorbrewer) + ("r-scales" ,r-scales) + ("r-stringr" ,r-stringr))) (home-page "https://cran.r-project.org/web/packages/ztable") (synopsis "Zebra-striped tables in LaTeX and HTML formats for R") (description @@ -4350,19 +4361,20 @@ data at that region, and avoids over-plotting.") (define-public r-ggthemes (package (name "r-ggthemes") - (version "3.5.0") + (version "4.0.1") (source (origin (method url-fetch) (uri (cran-uri "ggthemes" version)) (sha256 (base32 - "0drbzzb4i5jq1579fx1wmgh87ybnswjn7srak2l8g771ip49xwb8")))) + "0y6570wv135sf7pv57l7bqilzw47rziaqx4vsk45pf1w4lmj0w8b")))) (build-system r-build-system) (propagated-inputs - `(("r-assertthat" ,r-assertthat) - ("r-colorspace" ,r-colorspace) - ("r-ggplot2" ,r-ggplot2) - ("r-scales" ,r-scales))) + `(("r-ggplot2" ,r-ggplot2) + ("r-purrr" ,r-purrr) + ("r-scales" ,r-scales) + ("r-stringr" ,r-stringr) + ("r-tibble" ,r-tibble))) (home-page "https://cran.rstudio.com/web/packages/ggthemes") (synopsis "Extra themes, scales and geoms for @code{ggplot2}") (description "This package provides extra themes and scales for @@ -4401,13 +4413,13 @@ dispersion modeling and Tweedie power-law families.") (define-public r-rann (package (name "r-rann") - (version "2.5.1") + (version "2.6") (source (origin (method url-fetch) (uri (cran-uri "RANN" version)) (sha256 (base32 - "0il5i99vbcagnxvb15af5n37g04a4q1x96bz73zh3jhki9fpw9vm")))) + "1r6rivh9ba4gwnzryip0aiwsbm46zma7nvd9z5y456p2dgzp9lii")))) (properties `((upstream-name . "RANN"))) (build-system r-build-system) @@ -4723,14 +4735,14 @@ can be efficiently implemented directly in the R language.") (define-public r-robustbase (package (name "r-robustbase") - (version "0.93-0") + (version "0.93-2") (source (origin (method url-fetch) (uri (cran-uri "robustbase" version)) (sha256 (base32 - "130pzibn5cb8mycv8byc6npzcpddghz8m7jqwk15qmx4g3cj8zgy")))) + "1632p73iv9iqqm0v3k9rfv9way0him3fl35si1nly9wi5kpq5ci7")))) (build-system r-build-system) (inputs `(("gfortran" ,gfortran))) @@ -4999,18 +5011,19 @@ decompositions of such matrices, and solutions of linear systems.") (define-public r-modelmetrics (package (name "r-modelmetrics") - (version "1.1.0") + (version "1.2.0") (source (origin (method url-fetch) (uri (cran-uri "ModelMetrics" version)) (sha256 (base32 - "119xxmzb5biq7k1yxqsf0jmmarmfn6lds9x9hfgv593xlpym6za8")))) + "1sgdyrf6fbsn18gk8slir4a1yhv133kfhyg2crfs759nff4aw89h")))) (properties `((upstream-name . "ModelMetrics"))) (build-system r-build-system) (propagated-inputs - `(("r-rcpp" ,r-rcpp))) + `(("r-rcpp" ,r-rcpp) + ("r-data-table" ,r-data-table))) (home-page "https://cran.r-project.org/web/packages/ModelMetrics") (synopsis "Rapid calculation of model metrics") (description diff --git a/gnu/packages/web-browsers.scm b/gnu/packages/web-browsers.scm index 45252c933d..2c2767dbbc 100644 --- a/gnu/packages/web-browsers.scm +++ b/gnu/packages/web-browsers.scm @@ -86,14 +86,14 @@ older or slower computers and embedded systems.") (define-public links (package (name "links") - (version "2.16") + (version "2.17") (source (origin (method url-fetch) (uri (string-append "http://links.twibright.com/download/" name "-" version ".tar.bz2")) (sha256 (base32 - "0gsa2gpb1grhssl5jzpc5pa0zi21mxi8g25rh5bacl70slw31w42")))) + "0dh2gbzcw8kxy81z4ggsynibnqs56b83vy8qgz7illsag1irff6q")))) (build-system gnu-build-system) (arguments `(#:phases diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm index 001644c195..53d886cf0d 100644 --- a/gnu/packages/web.scm +++ b/gnu/packages/web.scm @@ -3823,15 +3823,17 @@ CDF, Atom 0.3, and Atom 1.0 feeds.") (define-public r-httpuv (package (name "r-httpuv") - (version "1.4.4.1") + (version "1.4.5") (source (origin (method url-fetch) (uri (cran-uri "httpuv" version)) (sha256 (base32 - "12kwq10xa8glrip7rai9xb4hnpysng00g2l0rw7swfzq5lk4z966")))) + "1ddpcarzf694h0gy5pdz7l5glqfv4hr9dmxb4vw7yqd0bga174gi")))) (build-system r-build-system) - (native-inputs `(("r-rcpp" ,r-rcpp))) + (native-inputs + `(("r-rcpp" ,r-rcpp) + ("pkg-config" ,pkg-config))) (propagated-inputs `(("r-bh" ,r-bh) ("r-later" ,r-later) @@ -6706,10 +6708,11 @@ compressed JSON header blocks. (license l:expat))) (define-public hpcguix-web - (let ((commit "87cb51611c0f1fd3863b830614ab1364599cf1ca")) + (let ((commit "9ff40fcc77f248901d861756dbbddc80270c380c") + (revision "2")) (package (name "hpcguix-web") - (version (git-version "0.0.1" "1" commit)) + (version (git-version "0.0.1" revision commit)) (source (origin (method git-fetch) (uri (git-reference @@ -6718,7 +6721,7 @@ compressed JSON header blocks. (file-name (git-file-name name version)) (sha256 (base32 - "0p66fl8r3v73v13fqg9rbqbzbdzvyznchxbq2s1jwq6qfsn2w3gr")))) + "0lxcj9s3wxrv1l7lrxxx374jwzx7h60gxwkbgr46lzcbgvb3k26s")))) (build-system gnu-build-system) (arguments `(#:modules ((guix build gnu-build-system) @@ -6739,10 +6742,13 @@ compressed JSON header blocks. (let* ((out (assoc-ref outputs "out")) (guix (assoc-ref inputs "guix")) (guile (assoc-ref inputs "guile")) + (gcrypt (assoc-ref inputs "guile-gcrypt")) + (git (assoc-ref inputs "guile-git")) + (bs (assoc-ref inputs "guile-bytestructures")) (json (assoc-ref inputs "guile-json")) (guile-cm (assoc-ref inputs "guile-commonmark")) - (deps (list guile guile-cm guix json)) + (deps (list guile gcrypt git bs guile-cm guix json)) (effective (read-line (open-pipe* OPEN_READ diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm index 6b99a3a8a8..aa24811695 100644 --- a/gnu/packages/xorg.scm +++ b/gnu/packages/xorg.scm @@ -17,6 +17,7 @@ ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2018 Kei Kebreau <kkebreau@posteo.net> ;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com> +;;; Copyright © 2018 Benjamin Slade <slade@jnanam.net> ;;; ;;; This file is part of GNU Guix. ;;; @@ -6170,3 +6171,44 @@ and embedded platforms.") cursor to any point on the screen with a few key strokes. It also simulates mouse click. You can do everything mouse can do with a keyboard.") (license license:bsd-3))) + +(define-public transset-df + (package + (name "transset-df") + (version "6") + (source (origin + (method url-fetch) + (uri (string-append "http://forchheimer.se/" name "/" name "-" version + ".tar.gz")) + (sha256 + (base32 + "1vnykwwrv75miigbhmcwxniw8xnhsdyzhqydip2m9crxi2lwhqs5")))) + (build-system gnu-build-system) + (arguments + '(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'setenv + (lambda _ + (setenv "CC" (which "gcc")) + #t)) + (delete 'configure) + (delete 'check) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bin (string-append out "/bin"))) + (install-file "transset-df" bin) + #t)))))) + (native-inputs + `(("pkg-config" ,pkg-config))) + (inputs `(("libxcomposite" ,libxcomposite) + ("libxdamager" ,libxdamage) + ("libxrender" ,libxrender))) + (synopsis "Set the transparency of X11 windows") + (description "The @command{transset-df} command allows you to set the +opacity of X11 windows. This patched version of X.Org's @command{transset} +adds functionality, including: selecting window by clicking (as transset), +selecting windows by pointing select actual focused X11 window, selecting by +window name or id, forcing toggle, increase or decrease opacity.") + (home-page "http://forchheimer.se/transset-df/") + (license license:x11))) diff --git a/gnu/services.scm b/gnu/services.scm index 49cf01a4f8..f151bbaa9d 100644 --- a/gnu/services.scm +++ b/gnu/services.scm @@ -732,13 +732,23 @@ instantiated; other missing services lead to a instances (service-type-extensions (service-kind svc)))) - (let ((instances (fold (lambda (service result) - (vhash-consq (service-kind service) service - result)) - vlist-null services))) - (fold2 adjust-service-list - services instances - services))) + (let loop ((services services)) + (define instances + (fold (lambda (service result) + (vhash-consq (service-kind service) service + result)) + vlist-null services)) + + (define adjusted + (fold2 adjust-service-list + services instances + services)) + + ;; If we instantiated services, they might in turn depend on missing + ;; services. Loop until we've reached fixed point. + (if (= (length adjusted) (vlist-length instances)) + adjusted + (loop adjusted)))) (define* (fold-services services #:key (target-type system-service-type)) diff --git a/gnu/services/web.scm b/gnu/services/web.scm index 467656444e..df82a6de61 100644 --- a/gnu/services/web.scm +++ b/gnu/services/web.scm @@ -608,16 +608,14 @@ of index files." (default-nginx-config config)) #$@args) (match '#$args - (("-s" . _) #t) + (("-s" . _) #f) (_ - (let loop ((duration 0)) - ;; https://bugs.launchpad.net/ubuntu/+source/nginx/+bug/1581864/comments/7 - (sleep duration) - (if (file-exists? #$pid-file) - (let ((pid (call-with-input-file #$pid-file read))) - ;; it could be #<eof> - (if (integer? pid) pid (loop 1))) - (loop 1))))))))) + ;; When FILE is true, we cannot be sure that PID-FILE will + ;; be created, so assume it won't show up. When FILE is + ;; false, read PID-FILE. + #$(if file + #~#t + #~(read-pid-file #$pid-file)))))))) ;; TODO: Add 'reload' action. (list (shepherd-service @@ -967,7 +965,8 @@ a webserver.") #:user "hpcguix-web" #:group "hpcguix-web" #:environment-variables - (list "XDG_CACHE_HOME=/var/cache"))) + (list "XDG_CACHE_HOME=/var/cache" + "SSL_CERT_DIR=/etc/ssl/certs"))) (stop #~(make-kill-destructor)))))) (define hpcguix-web-service-type diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm index b505b0cf6b..91e117b9f3 100644 --- a/gnu/system/vm.scm +++ b/gnu/system/vm.scm @@ -32,7 +32,7 @@ #:use-module (guix modules) #:use-module (guix scripts pack) #:use-module (guix utils) - #:use-module (guix hash) + #:use-module (gcrypt hash) #:use-module (guix base32) #:use-module ((guix self) #:select (make-config.scm)) @@ -43,7 +43,7 @@ #:use-module (gnu packages cdrom) #:use-module (gnu packages compression) #:use-module (gnu packages guile) - #:autoload (gnu packages gnupg) (libgcrypt) + #:autoload (gnu packages gnupg) (guile-gcrypt) #:use-module (gnu packages gawk) #:use-module (gnu packages bash) #:use-module (gnu packages less) @@ -124,10 +124,12 @@ (('gnu rest ...) #t) (rest #f))) -(define guile-sqlite3&co - ;; Guile-SQLite3 and its propagated inputs. - (cons guile-sqlite3 - (package-transitive-propagated-inputs guile-sqlite3))) +(define gcrypt-sqlite3&co + ;; Guile-Gcrypt, Guile-SQLite3, and their propagated inputs. + (append-map (lambda (package) + (cons package + (package-transitive-propagated-inputs package))) + (list guile-gcrypt guile-sqlite3))) (define* (expression->derivation-in-linux-vm name exp #:key @@ -164,10 +166,6 @@ based on the size of the closure of REFERENCES-GRAPHS. When REFERENCES-GRAPHS is true, it must be a list of file name/store path pairs, as for `derivation'. The files containing the reference graphs are made available under the /xchg CIFS share." - (define config - ;; (guix config) module for consumption by (guix gcrypt). - (make-config.scm #:libgcrypt libgcrypt)) - (define user-builder (program-file "builder-in-linux-vm" exp)) @@ -195,12 +193,14 @@ made available under the /xchg CIFS share." (define builder ;; Code that launches the VM that evaluates EXP. - (with-extensions guile-sqlite3&co + (with-extensions gcrypt-sqlite3&co (with-imported-modules `(,@(source-module-closure '((guix build utils) (gnu build vm)) #:select? not-config?) - ((guix config) => ,config)) + + ;; For consumption by (gnu store database). + ((guix config) => ,(make-config.scm))) #~(begin (use-modules (guix build utils) (gnu build vm)) @@ -255,9 +255,6 @@ made available under the /xchg CIFS share." "Return a bootable, stand-alone iso9660 image. INPUTS is a list of inputs (as for packages)." - (define config - (make-config.scm #:libgcrypt libgcrypt)) - (define schema (and register-closures? (local-file (search-path %load-path @@ -265,12 +262,12 @@ INPUTS is a list of inputs (as for packages)." (expression->derivation-in-linux-vm name - (with-extensions guile-sqlite3&co + (with-extensions gcrypt-sqlite3&co (with-imported-modules `(,@(source-module-closure '((gnu build vm) (guix store database) (guix build utils)) #:select? not-config?) - ((guix config) => ,config)) + ((guix config) => ,(make-config.scm))) #~(begin (use-modules (gnu build vm) (guix store database) @@ -347,9 +344,6 @@ INPUTS is a list of inputs (as for packages). When COPY-INPUTS? is true, copy all of INPUTS into the image being built. When REGISTER-CLOSURES? is true, register INPUTS in the store database of the image so that Guix can be used in the image." - (define config - (make-config.scm #:libgcrypt libgcrypt)) - (define schema (and register-closures? (local-file (search-path %load-path @@ -357,13 +351,13 @@ the image." (expression->derivation-in-linux-vm name - (with-extensions guile-sqlite3&co + (with-extensions gcrypt-sqlite3&co (with-imported-modules `(,@(source-module-closure '((gnu build vm) (gnu build bootloader) (guix store database) (guix build utils)) #:select? not-config?) - ((guix config) => ,config)) + ((guix config) => ,(make-config.scm))) #~(begin (use-modules (gnu build bootloader) (gnu build vm) @@ -462,10 +456,6 @@ makes sense when you want to build a GuixSD Docker image that has Guix installed inside of it. If you don't need Guix (e.g., your GuixSD Docker image just contains a web server that is started by the Shepherd), then you should set REGISTER-CLOSURES? to #f." - (define config - ;; (guix config) module for consumption by (guix gcrypt). - (make-config.scm #:libgcrypt libgcrypt)) - (define schema (and register-closures? (local-file (search-path %load-path @@ -475,8 +465,8 @@ should set REGISTER-CLOSURES? to #f." (name -> (string-append name ".tar.gz")) (graph -> "system-graph")) (define build - (with-extensions (cons guile-json ;for (guix docker) - guile-sqlite3&co) ;for (guix store database) + (with-extensions (cons guile-json ;for (guix docker) + gcrypt-sqlite3&co) ;for (guix store database) (with-imported-modules `(,@(source-module-closure '((guix docker) (guix store database) @@ -484,7 +474,7 @@ should set REGISTER-CLOSURES? to #f." (guix build store-copy) (gnu build vm)) #:select? not-config?) - ((guix config) => ,config)) + ((guix config) => ,(make-config.scm))) #~(begin (use-modules (guix docker) (guix build utils) @@ -539,17 +529,42 @@ should set REGISTER-CLOSURES? to #f." (define* (operating-system-uuid os #:optional (type 'dce)) "Compute UUID object with a deterministic \"UUID\" for OS, of the given TYPE (one of 'iso9660 or 'dce). Return a UUID object." + ;; Note: For this to be deterministic, we must not hash things that contains + ;; (directly or indirectly) procedures, for example. That rules out + ;; anything that contains gexps, thunk or delayed record fields, etc. + + (define service-name + (compose service-type-name service-kind)) + + (define (file-system-digest fs) + ;; Return a hashable digest that does not contain 'dependencies' since + ;; this field can contain procedures. + (let ((device (file-system-device fs))) + (list (file-system-mount-point fs) + (file-system-type fs) + (cond ((file-system-label? device) + (file-system-label->string device)) + ((uuid? device) + (uuid->string device)) + ((string? device) + device) + (else #f)) + (file-system-options fs)))) + (if (eq? type 'iso9660) (let ((pad (compose (cut string-pad <> 2 #\0) number->string)) - (h (hash (operating-system-services os) 3600))) + (h (hash (map service-name (operating-system-services os)) + 3600))) (bytevector->uuid (string->iso9660-uuid (string-append "1970-01-01-" (pad (hash (operating-system-host-name os) 24)) "-" (pad (quotient h 60)) "-" (pad (modulo h 60)) "-" - (pad (hash (operating-system-file-systems os) 100)))) + (pad (hash (map file-system-digest + (operating-system-file-systems os)) + 100)))) 'iso9660)) (bytevector->uuid (uint-list->bytevector @@ -557,9 +572,9 @@ TYPE (one of 'iso9660 or 'dce). Return a UUID object." (- (expt 2 32) 1)) (hash (operating-system-host-name os) (- (expt 2 32) 1)) - (hash (operating-system-services os) + (hash (map service-name (operating-system-services os)) (- (expt 2 32) 1)) - (hash (operating-system-file-systems os) + (hash (map file-system-digest (operating-system-file-systems os)) (- (expt 2 32) 1))) (endianness little) 4) diff --git a/gnu/tests/base.scm b/gnu/tests/base.scm index f27064af85..f97581de33 100644 --- a/gnu/tests/base.scm +++ b/gnu/tests/base.scm @@ -42,6 +42,7 @@ #:use-module (guix monads) #:use-module (guix packages) #:use-module (srfi srfi-1) + #:use-module (ice-9 match) #:export (run-basic-test %test-basic-os %test-halt @@ -68,6 +69,11 @@ initialization step, such as entering a LUKS passphrase." (fold-services (operating-system-services os) #:target-type special-files-service-type))) + (define guix&co + (match (package-transitive-propagated-inputs guix) + (((labels packages) ...) + (cons guix packages)))) + (define test (with-imported-modules '((gnu build marionette) (guix build syscalls)) @@ -345,8 +351,14 @@ info --version") 'success! (marionette-eval '(begin ;; Make sure the (guix …) modules are found. - (add-to-load-path - #+(file-append guix "/share/guile/site/2.2")) + (eval-when (expand load eval) + (set! %load-path + (append (map (lambda (package) + (string-append package + "/share/guile/site/" + (effective-version))) + '#$guix&co) + %load-path))) (use-modules (srfi srfi-34) (guix store)) diff --git a/guix/channels.scm b/guix/channels.scm index ec3e05eaf5..cf833db8b9 100644 --- a/guix/channels.scm +++ b/guix/channels.scm @@ -48,7 +48,7 @@ latest-channel-instances channel-instance-derivations - latest-channel-derivations + latest-channel-derivation channel-instances->manifest)) ;;; Commentary: @@ -78,7 +78,7 @@ ;; Default list of channels. (list (channel (name 'guix) - (branch "origin/master") + (branch "master") (url "https://git.savannah.gnu.org/git/guix.git")))) (define (guix-channel? channel) @@ -207,23 +207,20 @@ INSTANCES." (guix-channel? (channel-instance-channel instance))) instances)) + ;; Guile-Gcrypt is a dependency of CORE-INSTANCE. + (define guile-gcrypt + (module-ref (resolve-interface '(gnu packages gnupg)) + 'guile-gcrypt)) + (mlet %store-monad ((core (build-channel-instance core-instance))) (mapm %store-monad (lambda (instance) (if (eq? instance core-instance) (return core) (build-channel-instance instance - (list core)))) + (list core guile-gcrypt)))) instances))) -(define latest-channel-derivations - (let ((latest-channel-instances (store-lift latest-channel-instances))) - (lambda (channels) - "Return, as a monadic value, the list of derivations for the latest -instances of CHANNELS." - (mlet %store-monad ((instances (latest-channel-instances channels))) - (channel-instance-derivations instances))))) - (define (whole-package-for-legacy name modules) "Return a full-blown Guix package for MODULES, a derivation that builds Guix modules in the old ~/.config/guix/latest style." @@ -290,3 +287,14 @@ channel instances." (entries (mapm %store-monad instance->entry (zip instances derivations)))) (return (manifest entries)))) + +(define latest-channel-instances* + (store-lift latest-channel-instances)) + +(define* (latest-channel-derivation #:optional (channels %default-channels)) + "Return as a monadic value the derivation that builds the profile for the +latest instances of CHANNELS." + (mlet* %store-monad ((instances ((store-lift latest-channel-instances) + channels)) + (manifest (channel-instances->manifest instances))) + (profile-derivation manifest))) diff --git a/guix/derivations.scm b/guix/derivations.scm index da686e89e2..7afecb10cc 100644 --- a/guix/derivations.scm +++ b/guix/derivations.scm @@ -35,7 +35,7 @@ #:use-module (guix memoization) #:use-module (guix combinators) #:use-module (guix monads) - #:use-module (guix hash) + #:use-module (gcrypt hash) #:use-module (guix base32) #:use-module (guix records) #:use-module (guix sets) diff --git a/guix/describe.scm b/guix/describe.scm index 3122a762fe..670db63ce7 100644 --- a/guix/describe.scm +++ b/guix/describe.scm @@ -21,7 +21,9 @@ #:use-module (guix profiles) #:use-module (srfi srfi-1) #:use-module (ice-9 match) - #:export (package-path-entries)) + #:export (current-profile + current-profile-entries + package-path-entries)) ;;; Commentary: ;;; diff --git a/guix/docker.scm b/guix/docker.scm index b869901599..0757d3356f 100644 --- a/guix/docker.scm +++ b/guix/docker.scm @@ -19,7 +19,7 @@ ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (guix docker) - #:use-module (guix hash) + #:use-module (gcrypt hash) #:use-module (guix base16) #:use-module ((guix build utils) #:select (mkdir-p diff --git a/guix/gcrypt.scm b/guix/gcrypt.scm deleted file mode 100644 index 1517501751..0000000000 --- a/guix/gcrypt.scm +++ /dev/null @@ -1,49 +0,0 @@ -;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org> -;;; -;;; This file is part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. - -(define-module (guix gcrypt) - #:use-module (guix config) - #:use-module (system foreign) - #:export (gcrypt-version - libgcrypt-func)) - -;;; Commentary: -;;; -;;; Common code for the GNU Libgcrypt bindings. Loading this module -;;; initializes Libgcrypt as a side effect. -;;; -;;; Code: - -(define libgcrypt-func - (let ((lib (dynamic-link %libgcrypt))) - (lambda (func) - "Return a pointer to symbol FUNC in libgcrypt." - (dynamic-func func lib)))) - -(define gcrypt-version - ;; According to the manual, this function must be called before any other, - ;; and it's not clear whether it can be called more than once. So call it - ;; right here from the top level. - (let* ((ptr (libgcrypt-func "gcry_check_version")) - (proc (pointer->procedure '* ptr '(*))) - (version (pointer->string (proc %null-pointer)))) - (lambda () - "Return the version number of libgcrypt as a string." - version))) - -;;; gcrypt.scm ends here diff --git a/guix/gexp.scm b/guix/gexp.scm index 3a600c3830..770b79e012 100644 --- a/guix/gexp.scm +++ b/guix/gexp.scm @@ -1417,26 +1417,31 @@ denoting the target file. Here's an example: `((\"hosts\" ,(plain-file \"hosts\" \"127.0.0.1 localhost\")) (\"bashrc\" ,(plain-file \"bashrc\" - \"alias ls='ls --color'\")))) + \"alias ls='ls --color'\")) + (\"libvirt/qemu.conf\" ,(plain-file \"qemu.conf\" \"\")))) 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)))))) + (with-imported-modules '((guix build utils)) + (gexp + (begin + (use-modules (guix build utils)) + + (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)) + + (mkdir-p (dirname (ungexp target))) + (symlink (ungexp source) + (ungexp target)))))) + files))))))) (define* (directory-union name things #:key (copy? #f) (quiet? #f) diff --git a/guix/git.scm b/guix/git.scm index 193e2df111..3d0eb93d9b 100644 --- a/guix/git.scm +++ b/guix/git.scm @@ -21,7 +21,7 @@ #:use-module (git) #:use-module (git object) #:use-module (guix base32) - #:use-module (guix hash) + #:use-module (gcrypt hash) #:use-module ((guix build utils) #:select (mkdir-p)) #:use-module (guix store) #:use-module (guix utils) @@ -112,7 +112,7 @@ OID (roughly the commit hash) corresponding to REF." (define* (update-cached-checkout url #:key - (ref '(branch . "origin/master")) + (ref '(branch . "master")) (cache-directory (url-cache-directory url (%repository-cache-directory)))) @@ -122,6 +122,17 @@ to REF. REF is pair whose key is [branch | commit | tag] and value the associated data, respectively [<branch name> | <sha1> | <tag name>]." + (define canonical-ref + ;; We used to require callers to specify "origin/" for each branch, which + ;; made little sense since the cache should be transparent to them. So + ;; here we append "origin/" if it's missing and otherwise keep it. + (match ref + (('branch . branch) + `(branch . ,(if (string-prefix? "origin/" branch) + branch + (string-append "origin/" branch)))) + (_ ref))) + (with-libgit2 (let* ((cache-exists? (openable-repository? cache-directory)) (repository (if cache-exists? @@ -130,7 +141,7 @@ data, respectively [<branch name> | <sha1> | <tag name>]." ;; Only fetch remote if it has not been cloned just before. (when cache-exists? (remote-fetch (remote-lookup repository "origin"))) - (let ((oid (switch-to-ref repository ref))) + (let ((oid (switch-to-ref repository canonical-ref))) ;; Reclaim file descriptors and memory mappings associated with ;; REPOSITORY as soon as possible. @@ -144,7 +155,7 @@ data, respectively [<branch name> | <sha1> | <tag name>]." #:key (cache-directory (%repository-cache-directory)) - (ref '(branch . "origin/master"))) + (ref '(branch . "master"))) "Return two values: the content of the git repository at URL copied into a store directory and the sha1 of the top level commit in this directory. The reference to be checkout, once the repository is fetched, is specified by REF. diff --git a/guix/hash.scm b/guix/hash.scm deleted file mode 100644 index 8d7ba21425..0000000000 --- a/guix/hash.scm +++ /dev/null @@ -1,184 +0,0 @@ -;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2018 Ludovic Courtès <ludo@gnu.org> -;;; -;;; This file is part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. - -(define-module (guix hash) - #:use-module (guix gcrypt) - #:use-module (rnrs bytevectors) - #:use-module (ice-9 binary-ports) - #:use-module (system foreign) - #:use-module ((guix build utils) #:select (dump-port)) - #:use-module (srfi srfi-11) - #:use-module (srfi srfi-26) - #:export (sha1 - sha256 - open-sha256-port - port-sha256 - file-sha256 - open-sha256-input-port)) - -;;; Commentary: -;;; -;;; Cryptographic hashes. -;;; -;;; Code: - - -;;; -;;; Hash. -;;; - -(define-syntax GCRY_MD_SHA256 - ;; Value as of Libgcrypt 1.5.2. - (identifier-syntax 8)) - -(define-syntax GCRY_MD_SHA1 - (identifier-syntax 2)) - -(define bytevector-hash - (let ((hash (pointer->procedure void - (libgcrypt-func "gcry_md_hash_buffer") - `(,int * * ,size_t)))) - (lambda (bv type size) - "Return the hash TYPE, of SIZE bytes, of BV as a bytevector." - (let ((digest (make-bytevector size))) - (hash type (bytevector->pointer digest) - (bytevector->pointer bv) (bytevector-length bv)) - digest)))) - -(define sha1 - (cut bytevector-hash <> GCRY_MD_SHA1 20)) - -(define sha256 - (cut bytevector-hash <> GCRY_MD_SHA256 (/ 256 8))) - -(define open-sha256-md - (let ((open (pointer->procedure int - (libgcrypt-func "gcry_md_open") - `(* ,int ,unsigned-int)))) - (lambda () - (let* ((md (bytevector->pointer (make-bytevector (sizeof '*)))) - (err (open md GCRY_MD_SHA256 0))) - (if (zero? err) - (dereference-pointer md) - (throw 'gcrypt-error err)))))) - -(define md-write - (pointer->procedure void - (libgcrypt-func "gcry_md_write") - `(* * ,size_t))) - -(define md-read - (pointer->procedure '* - (libgcrypt-func "gcry_md_read") - `(* ,int))) - -(define md-close - (pointer->procedure void - (libgcrypt-func "gcry_md_close") - '(*))) - - -(define (open-sha256-port) - "Return two values: an output port, and a thunk. When the thunk is called, -it returns the SHA256 hash (a bytevector) of all the data written to the -output port." - (define sha256-md - (open-sha256-md)) - - (define digest #f) - (define position 0) - - (define (finalize!) - (let ((ptr (md-read sha256-md 0))) - (set! digest (bytevector-copy (pointer->bytevector ptr 32))) - (md-close sha256-md))) - - (define (write! bv offset len) - (if (zero? len) - (begin - (finalize!) - 0) - (let ((ptr (bytevector->pointer bv offset))) - (md-write sha256-md ptr len) - (set! position (+ position len)) - len))) - - (define (get-position) - position) - - (define (close) - (unless digest - (finalize!))) - - (values (make-custom-binary-output-port "sha256" - write! get-position #f - close) - (lambda () - (unless digest - (finalize!)) - digest))) - -(define (port-sha256 port) - "Return the SHA256 hash (a bytevector) of all the data drained from PORT." - (let-values (((out get) - (open-sha256-port))) - (dump-port port out) - (close-port out) - (get))) - -(define (file-sha256 file) - "Return the SHA256 hash (a bytevector) of FILE." - (call-with-input-file file port-sha256)) - -(define (open-sha256-input-port port) - "Return an input port that wraps PORT and a thunk to get the hash of all the -data read from PORT. The thunk always returns the same value." - (define md - (open-sha256-md)) - - (define (read! bv start count) - (let ((n (get-bytevector-n! port bv start count))) - (if (eof-object? n) - 0 - (begin - (unless digest - (let ((ptr (bytevector->pointer bv start))) - (md-write md ptr n))) - n)))) - - (define digest #f) - - (define (finalize!) - (let ((ptr (md-read md 0))) - (set! digest (bytevector-copy (pointer->bytevector ptr 32))) - (md-close md))) - - (define (get-hash) - (unless digest - (finalize!)) - digest) - - (define (unbuffered port) - ;; Guile <= 2.0.9 does not support 'setvbuf' on custom binary input ports. - (setvbuf port _IONBF) - port) - - (values (unbuffered (make-custom-binary-input-port "sha256" read! #f #f #f)) - get-hash)) - -;;; hash.scm ends here diff --git a/guix/http-client.scm b/guix/http-client.scm index 3b34d4ffba..07360e6108 100644 --- a/guix/http-client.scm +++ b/guix/http-client.scm @@ -34,7 +34,7 @@ #:use-module (guix ui) #:use-module (guix utils) #:use-module (guix base64) - #:autoload (guix hash) (sha256) + #:autoload (gcrypt hash) (sha256) #:use-module ((guix build utils) #:select (mkdir-p dump-port)) #:use-module ((guix build download) diff --git a/guix/import/cpan.scm b/guix/import/cpan.scm index d0ff64ed05..d4bea84353 100644 --- a/guix/import/cpan.scm +++ b/guix/import/cpan.scm @@ -27,7 +27,7 @@ #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) #:use-module (json) - #:use-module (guix hash) + #:use-module (gcrypt hash) #:use-module (guix store) #:use-module (guix utils) #:use-module (guix base32) diff --git a/guix/import/cran.scm b/guix/import/cran.scm index a5203fe78d..89c84f7037 100644 --- a/guix/import/cran.scm +++ b/guix/import/cran.scm @@ -29,7 +29,7 @@ #:use-module (web uri) #:use-module (guix memoization) #:use-module (guix http-client) - #:use-module (guix hash) + #:use-module (gcrypt hash) #:use-module (guix store) #:use-module (guix base32) #:use-module ((guix download) #:select (download-to-store)) diff --git a/guix/import/crate.scm b/guix/import/crate.scm index 3724a457a4..e0b400d054 100644 --- a/guix/import/crate.scm +++ b/guix/import/crate.scm @@ -20,7 +20,7 @@ #:use-module (guix base32) #:use-module (guix build-system cargo) #:use-module ((guix download) #:prefix download:) - #:use-module (guix hash) + #:use-module (gcrypt hash) #:use-module (guix http-client) #:use-module (guix import json) #:use-module (guix import utils) diff --git a/guix/import/elpa.scm b/guix/import/elpa.scm index c37afaf8e6..83354d3f04 100644 --- a/guix/import/elpa.scm +++ b/guix/import/elpa.scm @@ -32,7 +32,7 @@ #:use-module (guix http-client) #:use-module (guix store) #:use-module (guix ui) - #:use-module (guix hash) + #:use-module (gcrypt hash) #:use-module (guix base32) #:use-module (guix upstream) #:use-module (guix packages) diff --git a/guix/import/gnu.scm b/guix/import/gnu.scm index bbb17047f0..29324d7554 100644 --- a/guix/import/gnu.scm +++ b/guix/import/gnu.scm @@ -21,7 +21,7 @@ #:use-module (guix import utils) #:use-module (guix utils) #:use-module (guix store) - #:use-module (guix hash) + #:use-module (gcrypt hash) #:use-module (guix base32) #:use-module (guix upstream) #:use-module (srfi srfi-1) diff --git a/guix/import/hackage.scm b/guix/import/hackage.scm index 54301de2e8..766a0b53f1 100644 --- a/guix/import/hackage.scm +++ b/guix/import/hackage.scm @@ -33,7 +33,7 @@ #:use-module ((guix import utils) #:select (factorize-uri recursive-import)) #:use-module (guix import cabal) #:use-module (guix store) - #:use-module (guix hash) + #:use-module (gcrypt hash) #:use-module (guix base32) #:use-module (guix memoization) #:use-module (guix upstream) diff --git a/guix/import/texlive.scm b/guix/import/texlive.scm index d4c3714364..791b514485 100644 --- a/guix/import/texlive.scm +++ b/guix/import/texlive.scm @@ -26,7 +26,7 @@ #:use-module (srfi srfi-34) #:use-module (web uri) #:use-module (guix http-client) - #:use-module (guix hash) + #:use-module (gcrypt hash) #:use-module (guix memoization) #:use-module (guix store) #:use-module (guix base32) diff --git a/guix/import/utils.scm b/guix/import/utils.scm index 0dc8fd5857..516c0cfaa2 100644 --- a/guix/import/utils.scm +++ b/guix/import/utils.scm @@ -23,7 +23,7 @@ (define-module (guix import utils) #:use-module (guix base32) #:use-module ((guix build download) #:prefix build:) - #:use-module (guix hash) + #:use-module (gcrypt hash) #:use-module (guix http-client) #:use-module ((guix licenses) #:prefix license:) #:use-module (guix utils) diff --git a/guix/inferior.scm b/guix/inferior.scm index 05c8d65deb..af37233a03 100644 --- a/guix/inferior.scm +++ b/guix/inferior.scm @@ -19,6 +19,7 @@ (define-module (guix inferior) #:use-module (srfi srfi-9) #:use-module (srfi srfi-9 gnu) + #:use-module ((guix utils) #:select (source-properties->location)) #:use-module (ice-9 match) #:use-module (ice-9 popen) #:export (inferior? @@ -33,7 +34,9 @@ inferior-packages inferior-package-synopsis - inferior-package-description)) + inferior-package-description + inferior-package-home-page + inferior-package-location)) ;;; Commentary: ;;; @@ -198,3 +201,18 @@ TRANSLATE? is true, translate it to the current locale's language." (if translate? '(compose (@ (guix ui) P_) package-description) 'package-description))) + +(define (inferior-package-home-page package) + "Return the home page of PACKAGE." + (inferior-package-field package 'package-home-page)) + +(define (inferior-package-location package) + "Return the source code location of PACKAGE, either #f or a <location> +record." + (source-properties->location + (inferior-package-field package + '(compose (lambda (loc) + (and loc + (location->source-properties + loc))) + package-location)))) diff --git a/guix/nar.scm b/guix/nar.scm index 3556de1379..0495b4a40c 100644 --- a/guix/nar.scm +++ b/guix/nar.scm @@ -25,9 +25,9 @@ #:use-module (guix store) #:use-module (guix store database) #:use-module (guix ui) ; for '_' - #:use-module (guix hash) + #:use-module (gcrypt hash) #:use-module (guix pki) - #:use-module (guix pk-crypto) + #:use-module (gcrypt pk-crypto) #:use-module (srfi srfi-1) #:use-module (srfi srfi-11) #:use-module (srfi srfi-26) diff --git a/guix/pk-crypto.scm b/guix/pk-crypto.scm deleted file mode 100644 index 55ba7b1bb8..0000000000 --- a/guix/pk-crypto.scm +++ /dev/null @@ -1,407 +0,0 @@ -;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013, 2014, 2015, 2017 Ludovic Courtès <ludo@gnu.org> -;;; -;;; This file is part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. - -(define-module (guix pk-crypto) - #:use-module (guix base16) - #:use-module (guix gcrypt) - - #:use-module (system foreign) - #:use-module (rnrs bytevectors) - #:use-module (ice-9 match) - #:use-module (ice-9 rdelim) - #:export (canonical-sexp? - error-source - error-string - string->canonical-sexp - canonical-sexp->string - read-file-sexp - number->canonical-sexp - canonical-sexp-car - canonical-sexp-cdr - canonical-sexp-nth - canonical-sexp-nth-data - canonical-sexp-length - canonical-sexp-null? - canonical-sexp-list? - bytevector->hash-data - hash-data->bytevector - key-type - sign - verify - generate-key - find-sexp-token - canonical-sexp->sexp - sexp->canonical-sexp) - #:re-export (gcrypt-version)) - - -;;; Commentary: -;;; -;;; Public key cryptographic routines from GNU Libgcrypt. -;;;; -;;; Libgcrypt uses "canonical s-expressions" to represent key material, -;;; parameters, and data. We keep it as an opaque object to map them to -;;; Scheme s-expressions because (1) Libgcrypt sexps may be stored in secure -;;; memory, and (2) the read syntax is different. -;;; -;;; A 'canonical-sexp->sexp' procedure is provided nevertheless, for use in -;;; cases where it is safe to move data out of Libgcrypt---e.g., when -;;; processing ACL entries, public keys, etc. -;;; -;;; Canonical sexps were defined by Rivest et al. in the IETF draft at -;;; <http://people.csail.mit.edu/rivest/Sexp.txt> for the purposes of SPKI -;;; (see <http://www.ietf.org/rfc/rfc2693.txt>.) -;;; -;;; Code: - -;; Libgcrypt "s-expressions". -(define-wrapped-pointer-type <canonical-sexp> - canonical-sexp? - naked-pointer->canonical-sexp - canonical-sexp->pointer - (lambda (obj port) - ;; Don't print OBJ's external representation: we don't want key material - ;; to leak in backtraces and such. - (format port "#<canonical-sexp ~a | ~a>" - (number->string (object-address obj) 16) - (number->string (pointer-address (canonical-sexp->pointer obj)) - 16)))) - -(define finalize-canonical-sexp! - (libgcrypt-func "gcry_sexp_release")) - -(define-inlinable (pointer->canonical-sexp ptr) - "Return a <canonical-sexp> that wraps PTR." - (let* ((sexp (naked-pointer->canonical-sexp ptr)) - (ptr* (canonical-sexp->pointer sexp))) - ;; Did we already have a <canonical-sexp> object for PTR? - (when (equal? ptr ptr*) - ;; No, so we can safely add a finalizer (in Guile 2.0.9 - ;; 'set-pointer-finalizer!' *adds* a finalizer rather than replacing the - ;; existing one.) - (set-pointer-finalizer! ptr finalize-canonical-sexp!)) - sexp)) - -(define error-source - (let* ((ptr (libgcrypt-func "gcry_strsource")) - (proc (pointer->procedure '* ptr (list int)))) - (lambda (err) - "Return the error source (a string) for ERR, an error code as thrown -along with 'gcry-error'." - (pointer->string (proc err))))) - -(define error-string - (let* ((ptr (libgcrypt-func "gcry_strerror")) - (proc (pointer->procedure '* ptr (list int)))) - (lambda (err) - "Return the error description (a string) for ERR, an error code as -thrown along with 'gcry-error'." - (pointer->string (proc err))))) - -(define string->canonical-sexp - (let* ((ptr (libgcrypt-func "gcry_sexp_new")) - (proc (pointer->procedure int ptr `(* * ,size_t ,int)))) - (lambda (str) - "Parse STR and return the corresponding gcrypt s-expression." - - ;; When STR comes from 'canonical-sexp->string', it may contain - ;; characters that are really meant to be interpreted as bytes as in a C - ;; 'char *'. Thus, convert STR to ISO-8859-1 so the byte values of the - ;; characters are preserved. - (let* ((sexp (bytevector->pointer (make-bytevector (sizeof '*)))) - (err (proc sexp (string->pointer str "ISO-8859-1") 0 1))) - (if (= 0 err) - (pointer->canonical-sexp (dereference-pointer sexp)) - (throw 'gcry-error 'string->canonical-sexp err)))))) - -(define-syntax GCRYSEXP_FMT_ADVANCED - (identifier-syntax 3)) - -(define canonical-sexp->string - (let* ((ptr (libgcrypt-func "gcry_sexp_sprint")) - (proc (pointer->procedure size_t ptr `(* ,int * ,size_t)))) - (lambda (sexp) - "Return a textual representation of SEXP." - (let loop ((len 1024)) - (let* ((buf (bytevector->pointer (make-bytevector len))) - (size (proc (canonical-sexp->pointer sexp) - GCRYSEXP_FMT_ADVANCED buf len))) - (if (zero? size) - (loop (* len 2)) - (pointer->string buf size "ISO-8859-1"))))))) - -(define (read-file-sexp file) - "Return the canonical sexp read from FILE." - (call-with-input-file file - (compose string->canonical-sexp - read-string))) - -(define canonical-sexp-car - (let* ((ptr (libgcrypt-func "gcry_sexp_car")) - (proc (pointer->procedure '* ptr '(*)))) - (lambda (lst) - "Return the first element of LST, an sexp, if that element is a list; -return #f if LST or its first element is not a list (this is different from -the usual Lisp 'car'.)" - (let ((result (proc (canonical-sexp->pointer lst)))) - (if (null-pointer? result) - #f - (pointer->canonical-sexp result)))))) - -(define canonical-sexp-cdr - (let* ((ptr (libgcrypt-func "gcry_sexp_cdr")) - (proc (pointer->procedure '* ptr '(*)))) - (lambda (lst) - "Return the tail of LST, an sexp, or #f if LST is not a list." - (let ((result (proc (canonical-sexp->pointer lst)))) - (if (null-pointer? result) - #f - (pointer->canonical-sexp result)))))) - -(define canonical-sexp-nth - (let* ((ptr (libgcrypt-func "gcry_sexp_nth")) - (proc (pointer->procedure '* ptr `(* ,int)))) - (lambda (lst index) - "Return the INDEXth nested element of LST, an s-expression. Return #f -if that element does not exist, or if it's an atom. (Note: this is obviously -different from Scheme's 'list-ref'.)" - (let ((result (proc (canonical-sexp->pointer lst) index))) - (if (null-pointer? result) - #f - (pointer->canonical-sexp result)))))) - -(define (dereference-size_t p) - "Return the size_t value pointed to by P." - (bytevector-uint-ref (pointer->bytevector p (sizeof size_t)) - 0 (native-endianness) - (sizeof size_t))) - -(define canonical-sexp-length - (let* ((ptr (libgcrypt-func "gcry_sexp_length")) - (proc (pointer->procedure int ptr '(*)))) - (lambda (sexp) - "Return the length of SEXP if it's a list (including the empty list); -return zero if SEXP is an atom." - (proc (canonical-sexp->pointer sexp))))) - -(define token-string? - (let ((token-cs (char-set-union char-set:digit - char-set:letter - (char-set #\- #\. #\/ #\_ - #\: #\* #\+ #\=)))) - (lambda (str) - "Return #t if STR is a token as per Section 4.3 of -<http://people.csail.mit.edu/rivest/Sexp.txt>." - (and (not (string-null? str)) - (string-every token-cs str) - (not (char-set-contains? char-set:digit (string-ref str 0))))))) - -(define canonical-sexp-nth-data - (let* ((ptr (libgcrypt-func "gcry_sexp_nth_data")) - (proc (pointer->procedure '* ptr `(* ,int *)))) - (lambda (lst index) - "Return as a symbol (for \"sexp tokens\") or a bytevector (for any other -\"octet string\") the INDEXth data element (atom) of LST, an s-expression. -Return #f if that element does not exist, or if it's a list." - (let* ((size* (bytevector->pointer (make-bytevector (sizeof '*)))) - (result (proc (canonical-sexp->pointer lst) index size*))) - (if (null-pointer? result) - #f - (let* ((len (dereference-size_t size*)) - (str (pointer->string result len "ISO-8859-1"))) - ;; The sexp spec speaks of "tokens" and "octet strings". - ;; Sometimes these octet strings are actual strings (text), - ;; sometimes they're bytevectors, and sometimes they're - ;; multi-precision integers (MPIs). Only the application knows. - ;; However, for convenience, we return a symbol when a token is - ;; encountered since tokens are frequent (at least in the 'car' - ;; of each sexp.) - (if (token-string? str) - (string->symbol str) ; an sexp "token" - (bytevector-copy ; application data, textual or binary - (pointer->bytevector result len))))))))) - -(define (number->canonical-sexp number) - "Return an s-expression representing NUMBER." - (string->canonical-sexp (string-append "#" (number->string number 16) "#"))) - -(define* (bytevector->hash-data bv - #:optional - (hash-algo "sha256") - #:key (key-type 'ecc)) - "Given BV, a bytevector containing a hash of type HASH-ALGO, return an -s-expression suitable for use as the 'data' argument for 'sign'. KEY-TYPE -must be a symbol: 'dsa, 'ecc, or 'rsa." - (string->canonical-sexp - (format #f "(data (flags ~a) (hash \"~a\" #~a#))" - (case key-type - ((ecc dsa) "rfc6979") - ((rsa) "pkcs1") - (else (error "unknown key type" key-type))) - hash-algo - (bytevector->base16-string bv)))) - -(define (key-type sexp) - "Return a symbol denoting the type of public or private key represented by -SEXP--e.g., 'rsa', 'ecc'--or #f if SEXP does not denote a valid key." - (case (canonical-sexp-nth-data sexp 0) - ((public-key private-key) - (canonical-sexp-nth-data (canonical-sexp-nth sexp 1) 0)) - (else #f))) - -(define* (hash-data->bytevector data) - "Return two values: the hash value (a bytevector), and the hash algorithm (a -string) extracted from DATA, an sexp as returned by 'bytevector->hash-data'. -Return #f if DATA does not conform." - (let ((hash (find-sexp-token data 'hash))) - (if hash - (let ((algo (canonical-sexp-nth-data hash 1)) - (value (canonical-sexp-nth-data hash 2))) - (values value (symbol->string algo))) - (values #f #f)))) - -(define sign - (let* ((ptr (libgcrypt-func "gcry_pk_sign")) - (proc (pointer->procedure int ptr '(* * *)))) - (lambda (data secret-key) - "Sign DATA, a canonical s-expression representing a suitable hash, with -SECRET-KEY (a canonical s-expression whose car is 'private-key'.) Note that -DATA must be a 'data' s-expression, as returned by -'bytevector->hash-data' (info \"(gcrypt) Cryptographic Functions\")." - (let* ((sig (bytevector->pointer (make-bytevector (sizeof '*)))) - (err (proc sig (canonical-sexp->pointer data) - (canonical-sexp->pointer secret-key)))) - (if (= 0 err) - (pointer->canonical-sexp (dereference-pointer sig)) - (throw 'gcry-error 'sign err)))))) - -(define verify - (let* ((ptr (libgcrypt-func "gcry_pk_verify")) - (proc (pointer->procedure int ptr '(* * *)))) - (lambda (signature data public-key) - "Verify that SIGNATURE is a signature of DATA with PUBLIC-KEY, all of -which are gcrypt s-expressions." - (zero? (proc (canonical-sexp->pointer signature) - (canonical-sexp->pointer data) - (canonical-sexp->pointer public-key)))))) - -(define generate-key - (let* ((ptr (libgcrypt-func "gcry_pk_genkey")) - (proc (pointer->procedure int ptr '(* *)))) - (lambda (params) - "Return as an s-expression a new key pair for PARAMS. PARAMS must be an -s-expression like: (genkey (rsa (nbits 4:2048)))." - (let* ((key (bytevector->pointer (make-bytevector (sizeof '*)))) - (err (proc key (canonical-sexp->pointer params)))) - (if (zero? err) - (pointer->canonical-sexp (dereference-pointer key)) - (throw 'gcry-error 'generate-key err)))))) - -(define find-sexp-token - (let* ((ptr (libgcrypt-func "gcry_sexp_find_token")) - (proc (pointer->procedure '* ptr `(* * ,size_t)))) - (lambda (sexp token) - "Find in SEXP the first element whose 'car' is TOKEN and return it; -return #f if not found." - (let* ((token (string->pointer (symbol->string token))) - (res (proc (canonical-sexp->pointer sexp) token 0))) - (if (null-pointer? res) - #f - (pointer->canonical-sexp res)))))) - -(define-inlinable (canonical-sexp-null? sexp) - "Return #t if SEXP is the empty-list sexp." - (null-pointer? (canonical-sexp->pointer sexp))) - -(define (canonical-sexp-list? sexp) - "Return #t if SEXP is a list." - (or (canonical-sexp-null? sexp) - (> (canonical-sexp-length sexp) 0))) - -(define (canonical-sexp-fold proc seed sexp) - "Fold PROC (as per SRFI-1) over SEXP, a canonical sexp." - (if (canonical-sexp-list? sexp) - (let ((len (canonical-sexp-length sexp))) - (let loop ((index 0) - (result seed)) - (if (= index len) - result - (loop (+ 1 index) - ;; XXX: Call 'nth-data' *before* 'nth' to work around - ;; <https://bugs.g10code.com/gnupg/issue1594>, which - ;; affects 1.6.0 and earlier versions. - (proc (or (canonical-sexp-nth-data sexp index) - (canonical-sexp-nth sexp index)) - result))))) - (error "sexp is not a list" sexp))) - -(define (canonical-sexp->sexp sexp) - "Return a Scheme sexp corresponding to SEXP. This is particularly useful to -compare sexps (since Libgcrypt does not provide an 'equal?' procedure), or to -use pattern matching." - (if (canonical-sexp-list? sexp) - (reverse - (canonical-sexp-fold (lambda (item result) - (cons (if (canonical-sexp? item) - (canonical-sexp->sexp item) - item) - result)) - '() - sexp)) - - ;; As of Libgcrypt 1.6.0, there's no function to extract the buffer of a - ;; non-list sexp (!), so we first enlist SEXP, then get at its buffer. - (let ((sexp (string->canonical-sexp - (string-append "(" (canonical-sexp->string sexp) - ")")))) - (or (canonical-sexp-nth-data sexp 0) - (canonical-sexp-nth sexp 0))))) - -(define (sexp->canonical-sexp sexp) - "Return a canonical sexp equivalent to SEXP, a Scheme sexp as returned by -'canonical-sexp->sexp'." - ;; XXX: This is inefficient, but the Libgcrypt API doesn't allow us to do - ;; much better. - (string->canonical-sexp - (call-with-output-string - (lambda (port) - (define (write item) - (cond ((list? item) - (display "(" port) - (for-each write item) - (display ")" port)) - ((symbol? item) - (format port " ~a" item)) - ((bytevector? item) - (format port " #~a#" - (bytevector->base16-string item))) - (else - (error "unsupported sexp item type" item)))) - - (write sexp))))) - -(define (gcrypt-error-printer port key args default-printer) - "Print the gcrypt error specified by ARGS." - (match args - ((proc err) - (format port "In procedure ~a: ~a: ~a" - proc (error-source err) (error-string err))))) - -(set-exception-printer! 'gcry-error gcrypt-error-printer) - -;;; pk-crypto.scm ends here diff --git a/guix/pki.scm b/guix/pki.scm index 1551425c33..6326e065e9 100644 --- a/guix/pki.scm +++ b/guix/pki.scm @@ -18,7 +18,7 @@ (define-module (guix pki) #:use-module (guix config) - #:use-module (guix pk-crypto) + #:use-module (gcrypt pk-crypto) #:use-module ((guix utils) #:select (with-atomic-file-output)) #:use-module ((guix build utils) #:select (mkdir-p)) #:use-module (ice-9 match) diff --git a/guix/profiles.scm b/guix/profiles.scm index f34f4fcff6..8acfcff8c1 100644 --- a/guix/profiles.scm +++ b/guix/profiles.scm @@ -286,7 +286,8 @@ file name." (manifest-transitive-entries manifest)))) (define* (package->manifest-entry package #:optional (output "out") - #:key (parent (delay #f))) + #:key (parent (delay #f)) + (properties '())) "Return a manifest entry for the OUTPUT of package PACKAGE." ;; For each dependency, keep a promise pointing to its "parent" entry. (letrec* ((deps (map (match-lambda @@ -305,7 +306,8 @@ file name." (dependencies (delete-duplicates deps)) (search-paths (package-transitive-native-search-paths package)) - (parent parent)))) + (parent parent) + (properties properties)))) entry)) (define (packages->manifest packages) diff --git a/guix/scripts/archive.scm b/guix/scripts/archive.scm index a359f405fe..fb2f61ce30 100644 --- a/guix/scripts/archive.scm +++ b/guix/scripts/archive.scm @@ -29,7 +29,7 @@ #:use-module (guix monads) #:use-module (guix ui) #:use-module (guix pki) - #:use-module (guix pk-crypto) + #:use-module (gcrypt pk-crypto) #:use-module (guix scripts) #:use-module (guix scripts build) #:use-module (gnu packages) diff --git a/guix/scripts/authenticate.scm b/guix/scripts/authenticate.scm index 8b19dc871b..f1fd8ee895 100644 --- a/guix/scripts/authenticate.scm +++ b/guix/scripts/authenticate.scm @@ -19,7 +19,7 @@ (define-module (guix scripts authenticate) #:use-module (guix config) #:use-module (guix base16) - #:use-module (guix pk-crypto) + #:use-module (gcrypt pk-crypto) #:use-module (guix pki) #:use-module (guix ui) #:use-module (ice-9 binary-ports) diff --git a/guix/scripts/describe.scm b/guix/scripts/describe.scm new file mode 100644 index 0000000000..fdff07d0e3 --- /dev/null +++ b/guix/scripts/describe.scm @@ -0,0 +1,159 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2018 Ludovic Courtès <ludo@gnu.org> +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +(define-module (guix scripts describe) + #:use-module ((guix ui) #:hide (display-profile-content)) + #:use-module (guix scripts) + #:use-module (guix describe) + #:use-module (guix profiles) + #:use-module ((guix scripts pull) #:select (display-profile-content)) + #:use-module (git) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-37) + #:use-module (ice-9 match) + #:autoload (ice-9 pretty-print) (pretty-print) + #:export (guix-describe)) + + +;;; +;;; Command-line options. +;;; + +(define %options + ;; Specifications of the command-line options. + (list (option '(#\f "format") #t #f + (lambda (opt name arg result) + (unless (member arg '("human" "channels")) + (leave (G_ "~a: unsupported output format~%") arg)) + (alist-cons 'format 'channels result))) + (option '(#\h "help") #f #f + (lambda args + (show-help) + (exit 0))) + (option '(#\V "version") #f #f + (lambda args + (show-version-and-exit "guix describe"))))) + +(define %default-options + ;; Alist of default option values. + '((format . human))) + +(define (show-help) + (display (G_ "Usage: guix describe [OPTION]... +Display information about the channels currently in use.\n")) + (display (G_ " + -f, --format=FORMAT display information in the given FORMAT")) + (newline) + (display (G_ " + -h, --help display this help and exit")) + (display (G_ " + -V, --version display version information and exit")) + (newline) + (show-bug-report-information)) + +(define (display-package-search-path fmt) + "Display GUIX_PACKAGE_PATH, if it is set, according to FMT." + (match (getenv "GUIX_PACKAGE_PATH") + (#f #t) + (string + (match fmt + ('human + (format #t "~%GUIX_PACKAGE_PATH=\"~a\"~%" string)) + ('channels + (format #t (G_ "~%;; warning: GUIX_PACKAGE_PATH=\"~a\"~%") + string)))))) + +(define (display-checkout-info fmt) + "Display information about the current checkout according to FMT, a symbol +denoting the requested format. Exit if the current directory does not lie +within a Git checkout." + (let* ((program (car (command-line))) + (directory (catch 'git-error + (lambda () + (repository-discover (dirname program))) + (lambda (key err) + (leave (G_ "failed to determine origin~%"))))) + (repository (repository-open directory)) + (head (repository-head repository)) + (commit (oid->string (reference-target head)))) + (match fmt + ('human + (format #t (G_ "Git checkout:~%")) + (format #t (G_ " repository: ~a~%") (dirname directory)) + (format #t (G_ " branch: ~a~%") (reference-shorthand head)) + (format #t (G_ " commit: ~a~%") commit)) + ('channels + (pretty-print `(list (channel + (name 'guix) + (url ,(dirname directory)) + (commit ,commit)))))) + (display-package-search-path fmt))) + +(define (display-profile-info profile fmt) + "Display information about PROFILE, a profile as created by (guix channels), +in the format specified by FMT." + (define number + (generation-number profile)) + + (match fmt + ('human + (display-profile-content profile number)) + ('channels + (pretty-print + `(list ,@(map (lambda (entry) + (match (assq 'source (manifest-entry-properties entry)) + (('source ('repository ('version 0) + ('url url) + ('branch branch) + ('commit commit) + _ ...)) + `(channel (name ',(string->symbol + (manifest-entry-name entry))) + (url ,url) + (commit ,commit))) + + ;; Pre-0.15.0 Guix does not provide that information, + ;; so there's not much we can do in that case. + (_ '???))) + + ;; Show most recently installed packages last. + (reverse + (manifest-entries + (profile-manifest (generation-file-name profile + number))))))))) + (display-package-search-path fmt)) + + +;;; +;;; Entry point. +;;; + +(define (guix-describe . args) + (let* ((opts (args-fold* args %options + (lambda (opt name arg result) + (leave (G_ "~A: unrecognized option~%") + name)) + cons + %default-options)) + (format (assq-ref opts 'format))) + (with-error-handling + (match (current-profile) + (#f + (display-checkout-info format)) + (profile + (display-profile-info profile format)))))) diff --git a/guix/scripts/download.scm b/guix/scripts/download.scm index 1b99bc62cf..b9162d3449 100644 --- a/guix/scripts/download.scm +++ b/guix/scripts/download.scm @@ -20,7 +20,7 @@ #:use-module (guix ui) #:use-module (guix scripts) #:use-module (guix store) - #:use-module (guix hash) + #:use-module (gcrypt hash) #:use-module (guix base16) #:use-module (guix base32) #:use-module ((guix download) #:hide (url-fetch)) diff --git a/guix/scripts/hash.scm b/guix/scripts/hash.scm index cae5d6bcdf..2bd2ac4a06 100644 --- a/guix/scripts/hash.scm +++ b/guix/scripts/hash.scm @@ -20,7 +20,7 @@ (define-module (guix scripts hash) #:use-module (guix base32) - #:use-module (guix hash) + #:use-module (gcrypt hash) #:use-module (guix serialization) #:use-module (guix ui) #:use-module (guix scripts) @@ -44,7 +44,7 @@ `((format . ,bytevector->nix-base32-string))) (define (show-help) - (display (G_ "Usage: guix hash [OPTION] FILE + (display (G_ "Usage: gcrypt hash [OPTION] FILE Return the cryptographic hash of FILE. Supported formats: 'nix-base32' (default), 'base32', and 'base16' ('hex' @@ -93,7 +93,7 @@ and 'hexadecimal' can be used as well).\n")) (exit 0))) (option '(#\V "version") #f #f (lambda args - (show-version-and-exit "guix hash"))))) + (show-version-and-exit "gcrypt hash"))))) diff --git a/guix/scripts/pack.scm b/guix/scripts/pack.scm index fb0677de28..1916f3b9d7 100644 --- a/guix/scripts/pack.scm +++ b/guix/scripts/pack.scm @@ -41,7 +41,7 @@ #:use-module (gnu packages guile) #:use-module (gnu packages base) #:autoload (gnu packages package-management) (guix) - #:autoload (gnu packages gnupg) (libgcrypt) + #:autoload (gnu packages gnupg) (guile-gcrypt) #:autoload (gnu packages guile) (guile2.0-json guile-json) #:use-module (srfi srfi-1) #:use-module (srfi srfi-9) @@ -95,10 +95,12 @@ found." (('gnu _ ...) #t) (_ #f))) -(define guile-sqlite3&co - ;; Guile-SQLite3 and its propagated inputs. - (cons guile-sqlite3 - (package-transitive-propagated-inputs guile-sqlite3))) +(define gcrypt-sqlite3&co + ;; Guile-Gcrypt, Guile-SQLite3, and their propagated inputs. + (append-map (lambda (package) + (cons package + (package-transitive-propagated-inputs package))) + (list guile-gcrypt guile-sqlite3))) (define* (self-contained-tarball name profile #:key target @@ -124,16 +126,14 @@ added to the pack." "guix/store/schema.sql")))) (define build - (with-imported-modules `(((guix config) - => ,(make-config.scm - #:libgcrypt libgcrypt)) + (with-imported-modules `(((guix config) => ,(make-config.scm)) ,@(source-module-closure `((guix build utils) (guix build union) (guix build store-copy) (gnu build install)) #:select? not-config?)) - (with-extensions guile-sqlite3&co + (with-extensions gcrypt-sqlite3&co #~(begin (use-modules (guix build utils) ((guix build union) #:select (relative-file-name)) @@ -251,22 +251,14 @@ points for virtual file systems (like procfs), and optional symlinks. SYMLINKS must be a list of (SOURCE -> TARGET) tuples denoting symlinks to be added to the pack." - (define libgcrypt - ;; XXX: Not strictly needed, but pulled by (guix store database). - (module-ref (resolve-interface '(gnu packages gnupg)) - 'libgcrypt)) - - (define build - (with-imported-modules `(((guix config) - => ,(make-config.scm - #:libgcrypt libgcrypt)) + (with-imported-modules `(((guix config) => ,(make-config.scm)) ,@(source-module-closure '((guix build utils) (guix build store-copy) (gnu build install)) #:select? not-config?)) - (with-extensions guile-sqlite3&co + (with-extensions gcrypt-sqlite3&co #~(begin (use-modules (guix build utils) (gnu build install) @@ -349,32 +341,12 @@ must a be a GNU triplet and it is used to derive the architecture metadata in the image." (define defmod 'define-module) ;trick Geiser - (define config - ;; (guix config) module for consumption by (guix gcrypt). - (scheme-file "gcrypt-config.scm" - #~(begin - (#$defmod (guix config) - #:export (%libgcrypt)) - - ;; XXX: Work around <http://bugs.gnu.org/15602>. - (eval-when (expand load eval) - (define %libgcrypt - #+(file-append libgcrypt "/lib/libgcrypt")))))) - - (define json - ;; Pick the guile-json package that corresponds to the Guile used to build - ;; derivations. - (if (string-prefix? "2.0" (package-version (default-guile))) - guile2.0-json - guile-json)) - (define build - ;; Guile-JSON is required by (guix docker). - (with-extensions (list json) - (with-imported-modules `(,@(source-module-closure '((guix docker) - (guix build store-copy)) - #:select? not-config?) - ((guix config) => ,config)) + ;; Guile-JSON and Guile-Gcrypt are required by (guix docker). + (with-extensions (list guile-json guile-gcrypt) + (with-imported-modules (source-module-closure '((guix docker) + (guix build store-copy)) + #:select? not-config?) #~(begin (use-modules (guix docker) (srfi srfi-19) (guix build store-copy)) diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm index b38a55d01c..97bcc699d9 100644 --- a/guix/scripts/package.scm +++ b/guix/scripts/package.scm @@ -35,6 +35,7 @@ #:use-module (guix config) #:use-module (guix scripts) #:use-module (guix scripts build) + #:autoload (guix describe) (current-profile-entries) #:use-module ((guix build utils) #:select (directory-exists? mkdir-p)) #:use-module (ice-9 format) @@ -238,7 +239,7 @@ of relevance scores." (info (G_ "package '~a' has been superseded by '~a'~%") (manifest-entry-name old) (package-name new)) (manifest-transaction-install-entry - (package->manifest-entry new (manifest-entry-output old)) + (package->manifest-entry* new (manifest-entry-output old)) (manifest-transaction-remove-pattern (manifest-pattern (name (manifest-entry-name old)) @@ -261,7 +262,7 @@ of relevance scores." (case (version-compare candidate-version version) ((>) (manifest-transaction-install-entry - (package->manifest-entry pkg output) + (package->manifest-entry* pkg output) transaction)) ((<) transaction) @@ -274,7 +275,7 @@ of relevance scores." (null? (package-propagated-inputs pkg))) transaction (manifest-transaction-install-entry - (package->manifest-entry pkg output) + (package->manifest-entry* pkg output) transaction)))))))) (#f (warning (G_ "package '~a' no longer exists~%") name) @@ -570,6 +571,52 @@ upgrading, #f otherwise." (output "out") ;XXX: wild guess (item item)))) +(define (package-provenance package) + "Return the provenance of PACKAGE as an sexp for use as the 'provenance' +property of manifest entries, or #f if it could not be determined." + (define (entry-source entry) + (match (assq 'source + (manifest-entry-properties entry)) + (('source value) value) + (_ #f))) + + (match (and=> (package-location package) location-file) + (#f #f) + (file + (let ((file (if (string-prefix? "/" file) + file + (search-path %load-path file)))) + (and file + (string-prefix? (%store-prefix) file) + + ;; Always store information about the 'guix' channel and + ;; optionally about the specific channel FILE comes from. + (or (let ((main (and=> (find (lambda (entry) + (string=? "guix" + (manifest-entry-name entry))) + (current-profile-entries)) + entry-source)) + (extra (any (lambda (entry) + (let ((item (manifest-entry-item entry))) + (and (string-prefix? item file) + (entry-source entry)))) + (current-profile-entries)))) + (and main + `(,main + ,@(if extra (list extra) '())))))))))) + +(define (package->manifest-entry* package output) + "Like 'package->manifest-entry', but attach PACKAGE provenance meta-data to +the resulting manifest entry." + (define (provenance-properties package) + (match (package-provenance package) + (#f '()) + (sexp `((provenance ,@sexp))))) + + (package->manifest-entry package output + #:properties (provenance-properties package))) + + (define (options->installable opts manifest transaction) "Given MANIFEST, the current manifest, and OPTS, the result of 'args-fold', return an variant of TRANSACTION that accounts for the specified installations @@ -590,13 +637,13 @@ and upgrades." (('install . (? package? p)) ;; When given a package via `-e', install the first of its ;; outputs (XXX). - (package->manifest-entry p "out")) + (package->manifest-entry* p "out")) (('install . (? string? spec)) (if (store-path? spec) (store-item->manifest-entry spec) (let-values (((package output) (specification->package+output spec))) - (package->manifest-entry package output)))) + (package->manifest-entry* package output)))) (_ #f)) opts)) diff --git a/guix/scripts/publish.scm b/guix/scripts/publish.scm index b5dfdab32f..c5326b33da 100644 --- a/guix/scripts/publish.scm +++ b/guix/scripts/publish.scm @@ -44,9 +44,9 @@ #:use-module (guix base64) #:use-module (guix config) #:use-module (guix derivations) - #:use-module (guix hash) + #:use-module (gcrypt hash) #:use-module (guix pki) - #:use-module (guix pk-crypto) + #:use-module (gcrypt pk-crypto) #:use-module (guix workers) #:use-module (guix store) #:use-module ((guix serialization) #:select (write-file)) diff --git a/guix/scripts/pull.scm b/guix/scripts/pull.scm index 18c04f05dd..976e054a84 100644 --- a/guix/scripts/pull.scm +++ b/guix/scripts/pull.scm @@ -48,7 +48,8 @@ #:use-module (srfi srfi-37) #:use-module (ice-9 match) #:use-module (ice-9 vlist) - #:export (guix-pull)) + #:export (display-profile-content + guix-pull)) ;;; @@ -80,6 +81,8 @@ Download and deploy the latest version of Guix.\n")) -l, --list-generations[=PATTERN] list generations matching PATTERN")) (display (G_ " + -p, --profile=PROFILE use PROFILE instead of ~/.config/guix/current")) + (display (G_ " --bootstrap use the bootstrap Guile to build the new Guix")) (newline) (show-build-options-help) @@ -113,6 +116,10 @@ Download and deploy the latest version of Guix.\n")) (lambda (opt name arg result) (alist-cons 'ref `(branch . ,(string-append "origin/" arg)) result))) + (option '(#\p "profile") #t #f + (lambda (opt name arg result) + (alist-cons 'profile (canonicalize-profile arg) + result))) (option '(#\n "dry-run") #f #f (lambda (opt name arg result) (alist-cons 'dry-run? #t (alist-cons 'graft? #f result)))) @@ -152,15 +159,12 @@ Download and deploy the latest version of Guix.\n")) #:heading (G_ "New in this revision:\n")))) (_ #t))) -(define* (build-and-install instances config-dir +(define* (build-and-install instances profile #:key verbose?) - "Build the tool from SOURCE, and install it in CONFIG-DIR." + "Build the tool from SOURCE, and install it in PROFILE." (define update-profile (store-lift build-and-use-profile)) - (define profile - (string-append config-dir "/current")) - (mlet %store-monad ((manifest (channel-instances->manifest instances))) (mbegin %store-monad (update-profile profile manifest) @@ -414,7 +418,9 @@ Use '~/.config/guix/channels.scm' instead.")) (let* ((opts (parse-command-line args %options (list %default-options))) (cache (string-append (cache-directory) "/pull")) - (channels (channel-list opts))) + (channels (channel-list opts)) + (profile (or (assoc-ref opts 'profile) + (string-append (config-directory) "/current")))) (cond ((assoc-ref opts 'query) (process-query opts)) @@ -456,7 +462,7 @@ Use '~/.config/guix/channels.scm' instead.")) %bootstrap-guile (canonical-package guile-2.2))))) (run-with-store store - (build-and-install instances (config-directory) + (build-and-install instances profile #:verbose? (assoc-ref opts 'verbose?))))))))))))) diff --git a/guix/scripts/refresh.scm b/guix/scripts/refresh.scm index a8fe993e33..bcc23bd39c 100644 --- a/guix/scripts/refresh.scm +++ b/guix/scripts/refresh.scm @@ -23,7 +23,7 @@ (define-module (guix scripts refresh) #:use-module (guix ui) - #:use-module (guix hash) + #:use-module (gcrypt hash) #:use-module (guix scripts) #:use-module (guix store) #:use-module (guix utils) diff --git a/guix/scripts/substitute.scm b/guix/scripts/substitute.scm index 7634bb37f6..cd300195d8 100755 --- a/guix/scripts/substitute.scm +++ b/guix/scripts/substitute.scm @@ -26,11 +26,11 @@ #:use-module (guix config) #:use-module (guix records) #:use-module ((guix serialization) #:select (restore-file)) - #:use-module (guix hash) + #:use-module (gcrypt hash) #:use-module (guix base32) #:use-module (guix base64) #:use-module (guix cache) - #:use-module (guix pk-crypto) + #:use-module (gcrypt pk-crypto) #:use-module (guix pki) #:use-module ((guix build utils) #:select (mkdir-p dump-port)) #:use-module ((guix build download) diff --git a/guix/self.scm b/guix/self.scm index c5da6130bb..733c4a2cc9 100644 --- a/guix/self.scm +++ b/guix/self.scm @@ -83,8 +83,8 @@ GUILE-VERSION (\"2.0\" or \"2.2\"), or #f if none of the packages matches." ("guile-ssh" (ref '(gnu packages ssh) 'guile-ssh)) ("guile-git" (ref '(gnu packages guile) 'guile-git)) ("guile-sqlite3" (ref '(gnu packages guile) 'guile-sqlite3)) + ("guile-gcrypt" (ref '(gnu packages gnupg) 'guile-gcrypt)) ("gnutls" (ref '(gnu packages tls) 'gnutls)) - ("libgcrypt" (ref '(gnu packages gnupg) 'libgcrypt)) ("zlib" (ref '(gnu packages compression) 'zlib)) ("gzip" (ref '(gnu packages compression) 'gzip)) ("bzip2" (ref '(gnu packages compression) 'bzip2)) @@ -454,7 +454,6 @@ assumed to be part of MODULES." (name (string-append "guix-" version)) (guile-version (effective-version)) (guile-for-build (guile-for-build guile-version)) - (libgcrypt (specification->package "libgcrypt")) (zlib (specification->package "zlib")) (gzip (specification->package "gzip")) (bzip2 (specification->package "bzip2")) @@ -481,6 +480,10 @@ assumed to be part of MODULES." "guile-sqlite3" "guile2.0-sqlite3")) + (define guile-gcrypt + (package-for-guile guile-version + "guile-gcrypt")) + (define gnutls (package-for-guile guile-version "gnutls" "guile2.0-gnutls")) @@ -489,7 +492,7 @@ assumed to be part of MODULES." (match (append-map (lambda (package) (cons (list "x" package) (package-transitive-propagated-inputs package))) - (list gnutls guile-git guile-json + (list guile-gcrypt gnutls guile-git guile-json guile-ssh guile-sqlite3)) (((labels packages _ ...) ...) packages))) @@ -513,10 +516,7 @@ assumed to be part of MODULES." ;; rebuilt when the version changes, which in turn means we ;; can have substitutes for it. #:extra-modules - `(((guix config) - => ,(make-config.scm #:libgcrypt - (specification->package - "libgcrypt")))) + `(((guix config) => ,(make-config.scm))) ;; (guix man-db) is needed at build-time by (guix profiles) ;; but we don't need to compile it; not compiling it allows @@ -526,6 +526,7 @@ assumed to be part of MODULES." ("guix/store/schema.sql" ,(local-file "../guix/store/schema.sql"))) + #:extensions (list guile-gcrypt) #:guile-for-build guile-for-build)) (define *extra-modules* @@ -600,8 +601,7 @@ assumed to be part of MODULES." '() #:extra-modules `(((guix config) - => ,(make-config.scm #:libgcrypt libgcrypt - #:zlib zlib + => ,(make-config.scm #:zlib zlib #:gzip gzip #:bzip2 bzip2 #:xz xz @@ -684,7 +684,7 @@ assumed to be part of MODULES." (define %dependency-variables ;; (guix config) variables corresponding to dependencies. - '(%libgcrypt %libz %xz %gzip %bzip2)) + '(%libz %xz %gzip %bzip2)) (define %persona-variables ;; (guix config) variables that define Guix's persona. @@ -703,7 +703,7 @@ assumed to be part of MODULES." (variables rest ...)))))) (variables %localstatedir %storedir %sysconfdir %system))) -(define* (make-config.scm #:key libgcrypt zlib gzip xz bzip2 +(define* (make-config.scm #:key zlib gzip xz bzip2 (package-name "GNU Guix") (package-version "0") (bug-report-address "bug-guix@gnu.org") @@ -723,7 +723,6 @@ assumed to be part of MODULES." %state-directory %store-database-directory %config-directory - %libgcrypt %libz %gzip %bzip2 @@ -766,9 +765,6 @@ assumed to be part of MODULES." (define %xz #+(and xz (file-append xz "/bin/xz"))) - (define %libgcrypt - #+(and libgcrypt - (file-append libgcrypt "/lib/libgcrypt"))) (define %libz #+(and zlib (file-append zlib "/lib/libz")))) diff --git a/guix/store.scm b/guix/store.scm index f41a1e2690..af7f6980cf 100644 --- a/guix/store.scm +++ b/guix/store.scm @@ -25,7 +25,7 @@ #:use-module (guix monads) #:use-module (guix base16) #:use-module (guix base32) - #:use-module (guix hash) + #:use-module (gcrypt hash) #:use-module (guix profiling) #:autoload (guix build syscalls) (terminal-columns) #:use-module (rnrs bytevectors) diff --git a/guix/store/deduplication.scm b/guix/store/deduplication.scm index 8c19d7309e..53810c680f 100644 --- a/guix/store/deduplication.scm +++ b/guix/store/deduplication.scm @@ -21,7 +21,7 @@ ;;; timestamps, deduplicating, etc. (define-module (guix store deduplication) - #:use-module (guix hash) + #:use-module (gcrypt hash) #:use-module (guix build utils) #:use-module (guix base16) #:use-module (srfi srfi-11) diff --git a/guix/tests.scm b/guix/tests.scm index 34e3e0fc2a..06e9f8da0b 100644 --- a/guix/tests.scm +++ b/guix/tests.scm @@ -22,7 +22,7 @@ #:use-module (guix packages) #:use-module (guix base32) #:use-module (guix serialization) - #:use-module (guix hash) + #:use-module (gcrypt hash) #:use-module (guix build-system gnu) #:use-module (gnu packages bootstrap) #:use-module (srfi srfi-34) diff --git a/m4/guix.m4 b/m4/guix.m4 index a6897be961..da3c65f8f7 100644 --- a/m4/guix.m4 +++ b/m4/guix.m4 @@ -18,24 +18,6 @@ dnl dnl You should have received a copy of the GNU General Public License dnl along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. -dnl GUIX_ASSERT_LIBGCRYPT_USABLE -dnl -dnl Assert that GNU libgcrypt is usable from Guile. -AC_DEFUN([GUIX_ASSERT_LIBGCRYPT_USABLE], - [AC_CACHE_CHECK([whether $LIBGCRYPT can be dynamically loaded], - [guix_cv_libgcrypt_usable_p], - [GUILE_CHECK([retval], - [(dynamic-func \"gcry_md_hash_buffer\" (dynamic-link \"$LIBGCRYPT\"))]) - if test "$retval" = 0; then - guix_cv_libgcrypt_usable_p="yes" - else - guix_cv_libgcrypt_usable_p="no" - fi]) - - if test "x$guix_cv_libgcrypt_usable_p" != "xyes"; then - AC_MSG_ERROR([GNU libgcrypt does not appear to be usable; see `--with-libgcrypt-prefix' and `README'.]) - fi]) - dnl GUIX_SYSTEM_TYPE dnl dnl Determine the Guix host system type, and store it in the diff --git a/po/guix/POTFILES.in b/po/guix/POTFILES.in index 7f881355e7..2762ea078a 100644 --- a/po/guix/POTFILES.in +++ b/po/guix/POTFILES.in @@ -31,6 +31,7 @@ guix/scripts/challenge.scm guix/scripts/copy.scm guix/scripts/pack.scm guix/scripts/weather.scm +guix/scripts/describe.scm guix/gnu-maintenance.scm guix/scripts/container.scm guix/scripts/container/exec.scm diff --git a/tests/base32.scm b/tests/base32.scm index 194f8da96b..134e578633 100644 --- a/tests/base32.scm +++ b/tests/base32.scm @@ -17,7 +17,7 @@ ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (test-base32) - #:use-module (guix hash) + #:use-module (gcrypt hash) #:use-module (guix base32) #:use-module (guix utils) #:use-module (srfi srfi-1) diff --git a/tests/builders.scm b/tests/builders.scm index bb9e0fa85b..8b8ef013e7 100644 --- a/tests/builders.scm +++ b/tests/builders.scm @@ -25,7 +25,7 @@ #:use-module (guix utils) #:use-module (guix base32) #:use-module (guix derivations) - #:use-module (guix hash) + #:use-module (gcrypt hash) #:use-module (guix tests) #:use-module ((guix packages) #:select (package-derivation package-native-search-paths)) diff --git a/tests/challenge.scm b/tests/challenge.scm index 387d205a64..4b13ec278e 100644 --- a/tests/challenge.scm +++ b/tests/challenge.scm @@ -18,7 +18,7 @@ (define-module (test-challenge) #:use-module (guix tests) - #:use-module (guix hash) + #:use-module (gcrypt hash) #:use-module (guix store) #:use-module (guix monads) #:use-module (guix derivations) diff --git a/tests/cpan.scm b/tests/cpan.scm index 396744e529..189dd027e6 100644 --- a/tests/cpan.scm +++ b/tests/cpan.scm @@ -20,7 +20,7 @@ (define-module (test-cpan) #:use-module (guix import cpan) #:use-module (guix base32) - #:use-module (guix hash) + #:use-module (gcrypt hash) #:use-module (guix tests) #:use-module (guix grafts) #:use-module (srfi srfi-64) diff --git a/tests/crate.scm b/tests/crate.scm index eb93822bbb..a1dcfd5e52 100644 --- a/tests/crate.scm +++ b/tests/crate.scm @@ -21,7 +21,7 @@ #:use-module (guix import crate) #:use-module (guix base32) #:use-module (guix build-system cargo) - #:use-module (guix hash) + #:use-module (gcrypt hash) #:use-module (guix tests) #:use-module (ice-9 iconv) #:use-module (ice-9 match) diff --git a/tests/derivations.scm b/tests/derivations.scm index 5d83529183..159a6971b3 100644 --- a/tests/derivations.scm +++ b/tests/derivations.scm @@ -23,7 +23,7 @@ #:use-module (guix grafts) #:use-module (guix store) #:use-module (guix utils) - #:use-module (guix hash) + #:use-module (gcrypt hash) #:use-module (guix base32) #:use-module (guix tests) #:use-module (guix tests http) diff --git a/tests/gem.scm b/tests/gem.scm index 4220170ff0..a12edb294c 100644 --- a/tests/gem.scm +++ b/tests/gem.scm @@ -21,7 +21,7 @@ (define-module (test-gem) #:use-module (guix import gem) #:use-module (guix base32) - #:use-module (guix hash) + #:use-module (gcrypt hash) #:use-module (guix tests) #:use-module ((guix build utils) #:select (delete-file-recursively)) #:use-module (srfi srfi-41) diff --git a/tests/gexp.scm b/tests/gexp.scm index a0ed34aa6d..380b83509a 100644 --- a/tests/gexp.scm +++ b/tests/gexp.scm @@ -1093,6 +1093,24 @@ (call-with-input-file out get-string-all)) (equal? refs (list guile)))))))) +(test-assertm "file-union" + (mlet* %store-monad ((union -> (file-union "union" + `(("a" ,(plain-file "a" "1")) + ("b/c/d" ,(plain-file "d" "2")) + ("e" ,(plain-file "e" "3"))))) + (drv (lower-object union)) + (out -> (derivation->output-path drv))) + (define (contents=? file str) + (string=? (call-with-input-file (string-append out "/" file) + get-string-all) + str)) + + (mbegin %store-monad + (built-derivations (list drv)) + (return (and (contents=? "a" "1") + (contents=? "b/c/d" "2") + (contents=? "e" "3")))))) + (test-assert "gexp->derivation vs. %current-target-system" (let ((mval (gexp->derivation "foo" #~(begin diff --git a/tests/guix-describe.sh b/tests/guix-describe.sh new file mode 100644 index 0000000000..af523f0a0b --- /dev/null +++ b/tests/guix-describe.sh @@ -0,0 +1,47 @@ +# GNU Guix --- Functional package management for GNU +# Copyright © 2018 Ludovic Courtès <ludo@gnu.org> +# +# This file is part of GNU Guix. +# +# GNU Guix is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GNU Guix is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +# +# Test 'guix describe'. +# + +guix describe --version + +tmpfile="t-guix-describe-$$" +trap "rm -f $tmpfile" EXIT +rm -f "$tmpfile" + +if [ -d "$abs_top_srcdir/.git" ] +then + # Since we're in a Git checkout, we can at least check that these things + # work. + guix describe | grep -i "checkout" + if git --version > /dev/null 2>&1 + then + result="`guix describe | grep commit: | cut -d : -f 2-`" + commit="`git log | head -1 | cut -c 7-`" + test "x$result" = "x$commit" + fi + guix describe -f channels + case "`guix describe -f channels | grep url`" in + *"(url \"$abs_top_srcdir\")") true;; + *) false;; + esac +else + exit 77 +fi diff --git a/tests/guix-system.sh b/tests/guix-system.sh index 36ba5fbd5f..a129efdfcb 100644 --- a/tests/guix-system.sh +++ b/tests/guix-system.sh @@ -232,6 +232,14 @@ guix system build "$tmpfile" -d | grep '\.drv$' guix system vm "$tmpfile" -d # succeeds guix system vm "$tmpfile" -d | grep '\.drv$' +# Make sure the behavior is deterministic (<https://bugs.gnu.org/32652>). +drv1="`guix system vm "$tmpfile" -d`" +drv2="`guix system vm "$tmpfile" -d`" +test "$drv1" = "$drv2" +drv1="`guix system disk-image --file-system-type=iso9660 "$tmpfile" -d`" +drv2="`guix system disk-image --file-system-type=iso9660 "$tmpfile" -d`" +test "$drv1" = "$drv2" + make_user_config "group-that-does-not-exist" "users" if guix system build "$tmpfile" -n 2> "$errorfile" then false diff --git a/tests/hash.scm b/tests/hash.scm deleted file mode 100644 index 47dff3915b..0000000000 --- a/tests/hash.scm +++ /dev/null @@ -1,128 +0,0 @@ -;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013, 2014, 2017, 2018 Ludovic Courtès <ludo@gnu.org> -;;; -;;; This file is part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. - -(define-module (test-hash) - #:use-module (guix hash) - #:use-module (guix base16) - #:use-module (srfi srfi-1) - #:use-module (srfi srfi-11) - #:use-module (srfi srfi-64) - #:use-module (rnrs bytevectors) - #:use-module (rnrs io ports)) - -;; Test the (guix hash) module. - -(define %empty-sha256 - ;; SHA256 hash of the empty string. - (base16-string->bytevector - "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855")) - -(define %hello-sha256 - ;; SHA256 hash of "hello world" - (base16-string->bytevector - "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9")) - - -(test-begin "hash") - -(test-equal "sha1, empty" - (base16-string->bytevector "da39a3ee5e6b4b0d3255bfef95601890afd80709") - (sha1 #vu8())) - -(test-equal "sha1, hello" - (base16-string->bytevector "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed") - (sha1 (string->utf8 "hello world"))) - -(test-equal "sha256, empty" - %empty-sha256 - (sha256 #vu8())) - -(test-equal "sha256, hello" - %hello-sha256 - (sha256 (string->utf8 "hello world"))) - -(test-equal "open-sha256-port, empty" - %empty-sha256 - (let-values (((port get) - (open-sha256-port))) - (close-port port) - (get))) - -(test-equal "open-sha256-port, hello" - (list %hello-sha256 (string-length "hello world")) - (let-values (((port get) - (open-sha256-port))) - (put-bytevector port (string->utf8 "hello world")) - (force-output port) - (list (get) (port-position port)))) - -(test-assert "port-sha256" - (let* ((file (search-path %load-path "ice-9/psyntax.scm")) - (size (stat:size (stat file))) - (contents (call-with-input-file file get-bytevector-all))) - (equal? (sha256 contents) - (call-with-input-file file port-sha256)))) - -(test-equal "open-sha256-input-port, empty" - `("" ,%empty-sha256) - (let-values (((port get) - (open-sha256-input-port (open-string-input-port "")))) - (let ((str (get-string-all port))) - (list str (get))))) - -(test-equal "open-sha256-input-port, hello" - `("hello world" ,%hello-sha256) - (let-values (((port get) - (open-sha256-input-port - (open-bytevector-input-port - (string->utf8 "hello world"))))) - (let ((str (get-string-all port))) - (list str (get))))) - -(test-equal "open-sha256-input-port, hello, one two" - (list (string->utf8 "hel") (string->utf8 "lo") - (base16-string->bytevector ; echo -n hello | sha256sum - "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824") - " world") - (let-values (((port get) - (open-sha256-input-port - (open-bytevector-input-port (string->utf8 "hello world"))))) - (let* ((one (get-bytevector-n port 3)) - (two (get-bytevector-n port 2)) - (hash (get)) - (three (get-string-all port))) - (list one two hash three)))) - -(test-equal "open-sha256-input-port, hello, read from wrapped port" - (list (string->utf8 "hello") - (base16-string->bytevector ; echo -n hello | sha256sum - "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824") - " world") - (let*-values (((wrapped) - (open-bytevector-input-port (string->utf8 "hello world"))) - ((port get) - (open-sha256-input-port wrapped))) - (let* ((hello (get-bytevector-n port 5)) - (hash (get)) - - ;; Now read from WRAPPED to make sure its current position is - ;; correct. - (world (get-string-all wrapped))) - (list hello hash world)))) - -(test-end) diff --git a/tests/inferior.scm b/tests/inferior.scm index 5e0f8ae66e..ff5cad4210 100644 --- a/tests/inferior.scm +++ b/tests/inferior.scm @@ -45,9 +45,11 @@ (test-equal "inferior-packages" (take (sort (fold-packages (lambda (package lst) - (alist-cons (package-name package) + (cons (list (package-name package) (package-version package) - lst)) + (package-home-page package) + (package-location package)) + lst)) '()) (lambda (x y) (string<? (car x) (car y)))) @@ -56,14 +58,18 @@ #:command "scripts/guix")) (packages (inferior-packages inferior))) (and (every string? (map inferior-package-synopsis packages)) - (begin + (let () + (define result + (take (sort (map (lambda (package) + (list (inferior-package-name package) + (inferior-package-version package) + (inferior-package-home-page package) + (inferior-package-location package))) + packages) + (lambda (x y) + (string<? (car x) (car y)))) + 10)) (close-inferior inferior) - (take (sort (map (lambda (package) - (cons (inferior-package-name package) - (inferior-package-version package))) - packages) - (lambda (x y) - (string<? (car x) (car y)))) - 10))))) + result)))) (test-end "inferior") diff --git a/tests/nar.scm b/tests/nar.scm index 9b5fb984b4..d610ea53f7 100644 --- a/tests/nar.scm +++ b/tests/nar.scm @@ -21,7 +21,7 @@ #:use-module (guix nar) #:use-module (guix serialization) #:use-module (guix store) - #:use-module ((guix hash) + #:use-module ((gcrypt hash) #:select (open-sha256-port open-sha256-input-port)) #:use-module ((guix packages) #:select (base32)) diff --git a/tests/opam.scm b/tests/opam.scm index 26832174a8..a1320abfdc 100644 --- a/tests/opam.scm +++ b/tests/opam.scm @@ -19,7 +19,7 @@ (define-module (test-opam) #:use-module (guix import opam) #:use-module (guix base32) - #:use-module (guix hash) + #:use-module (gcrypt hash) #:use-module (guix tests) #:use-module ((guix build utils) #:select (delete-file-recursively mkdir-p which)) #:use-module (srfi srfi-64) diff --git a/tests/packages.scm b/tests/packages.scm index 65ccb14889..237feb7aba 100644 --- a/tests/packages.scm +++ b/tests/packages.scm @@ -28,7 +28,7 @@ #:renamer (lambda (name) (cond ((eq? name 'location) 'make-location) (else name)))) - #:use-module (guix hash) + #:use-module (gcrypt hash) #:use-module (guix derivations) #:use-module (guix packages) #:use-module (guix grafts) diff --git a/tests/pk-crypto.scm b/tests/pk-crypto.scm deleted file mode 100644 index fe33a6f7b5..0000000000 --- a/tests/pk-crypto.scm +++ /dev/null @@ -1,290 +0,0 @@ -;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013, 2014, 2017 Ludovic Courtès <ludo@gnu.org> -;;; -;;; This file is part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. - -(define-module (test-pk-crypto) - #:use-module (guix pk-crypto) - #:use-module (guix utils) - #:use-module (guix base16) - #:use-module (guix hash) - #:use-module (srfi srfi-1) - #:use-module (srfi srfi-11) - #:use-module (srfi srfi-26) - #:use-module (srfi srfi-64) - #:use-module (rnrs bytevectors) - #:use-module (rnrs io ports) - #:use-module (ice-9 match)) - -;; Test the (guix pk-crypto) module. - -(define %key-pair - ;; RSA key pair that was generated with: - ;; (generate-key (string->canonical-sexp "(genkey (rsa (nbits 4:1024)))")) - ;; which takes a bit of time. - "(key-data - (public-key - (rsa - (n #00C1F764069F54FFE93A126B02328903E984E4AE3AF6DF402B5B6B3907911B88C385F1BA76A002EC9DEA109A5228EF0E62EE31A06D1A5861CAB474F6C857AC66EB65A1905F25BBA1869579E73A3B7FED13AF5A1667326F88CDFC2FF24B03C14FD1384AA7E73CA89572880B606E3A974E15347963FC7B6378574936A47580DBCB45#) - (e #010001#))) - (private-key - (rsa - (n #00C1F764069F54FFE93A126B02328903E984E4AE3AF6DF402B5B6B3907911B88C385F1BA76A002EC9DEA109A5228EF0E62EE31A06D1A5861CAB474F6C857AC66EB65A1905F25BBA1869579E73A3B7FED13AF5A1667326F88CDFC2FF24B03C14FD1384AA7E73CA89572880B606E3A974E15347963FC7B6378574936A47580DBCB45#) - (e #010001#) - (d #58CAD84653D0046A8EC3F9AA82D9C829B145422109FC3F12DA01A694B92FA296E70D366FB166454D30E632CEE3A033B4C41781BA10325F69FCDC0250CA19C8EEB352FA085992494098DB133E682ED38A931701F0DED1A1E508F4341A4FB446A04F019427C7CB3C44F251EEA9D386100DA80F125E0FD5CE1B0DFEC6D21516EACD#) - (p #00D47F185147EC39393CCDA4E7323FFC20FC8B8073E2A54DD63BA392A66975E4204CA48572496A9DFD7522436B852C07472A5AB25B7706F7C14E6F33FBC420FF3B#) - (q #00E9AD22F158060BC9AE3601DA623AFC60FFF3058795802CA92371C00097335CF9A23D7782DE353C9DBA93D7BB99E6A24A411107605E722481C5C191F80D7EB77F#) - (u #59B45B95AE01A7A7370FAFDB08FE73A4793CE37F228961B09B1B1E7DDAD9F8D3E28F5C5E8B4B067E6B8E0BBF3F690B42991A79E46108DDCDA2514323A66964DE#))))") - -(define %ecc-key-pair - ;; Ed25519 key pair generated with: - ;; (generate-key (string->canonical-sexp "(genkey (ecdsa (curve Ed25519) (flags rfc6979 transient)))")) - "(key-data - (public-key - (ecc - (curve Ed25519) - (q #94869C1B9E69DB8DD910B7F7F4D6E56A63A964A59AE8F90F6703ACDDF6F50C81#))) - (private-key - (ecc - (curve Ed25519) - (q #94869C1B9E69DB8DD910B7F7F4D6E56A63A964A59AE8F90F6703ACDDF6F50C81#) - (d #6EFB32D0B4EC6B3237B523539F1979379B82726AAA605EB2FBA6775B2B777B78#))))") - -(test-begin "pk-crypto") - -(test-assert "version" - (gcrypt-version)) - -(let ((sexps '("(foo bar)" - - ;; In Libgcrypt 1.5.3 the following integer is rendered as - ;; binary, whereas in 1.6.0 it's rendered as is (hexadecimal.) - ;;"#C0FFEE#" - - "(genkey \n (rsa \n (nbits \"1024\")\n )\n )"))) - (test-equal "string->canonical-sexp->string" - sexps - (let ((sexps (map string->canonical-sexp sexps))) - (and (every canonical-sexp? sexps) - (map (compose string-trim-both canonical-sexp->string) sexps))))) - -(gc) ; stress test! - -(let ((sexps `(("(foo bar)" foo -> "(foo bar)") - ("(foo (bar (baz 3:123)))" baz -> "(baz \"123\")") - ("(foo (bar 3:123))" baz -> #f)))) - (test-equal "find-sexp-token" - (map (match-lambda - ((_ _ '-> expected) - expected)) - sexps) - (map (match-lambda - ((input token '-> _) - (let ((sexp (find-sexp-token (string->canonical-sexp input) token))) - (and sexp - (string-trim-both (canonical-sexp->string sexp)))))) - sexps))) - -(gc) - -(test-equal "canonical-sexp-length" - '(0 1 2 4 0 0) - (map (compose canonical-sexp-length string->canonical-sexp) - '("()" "(a)" "(a b)" "(a #616263# b #C001#)" "a" "#123456#"))) - -(test-equal "canonical-sexp-list?" - '(#t #f #t #f) - (map (compose canonical-sexp-list? string->canonical-sexp) - '("()" "\"abc\"" "(a b c)" "#123456#"))) - -(gc) - -(test-equal "canonical-sexp-car + cdr" - '("(b \n (c xyz)\n )") - (let ((lst (string->canonical-sexp "(a (b (c xyz)))"))) - (map (lambda (sexp) - (and sexp (string-trim-both (canonical-sexp->string sexp)))) - ;; Note: 'car' returns #f when the first element is an atom. - (list (canonical-sexp-car (canonical-sexp-cdr lst)))))) - -(gc) - -(test-equal "canonical-sexp-nth" - '("(b pqr)" "(c \"456\")" "(d xyz)" #f #f) - - (let ((lst (string->canonical-sexp "(a (b 3:pqr) (c 3:456) (d 3:xyz))"))) - ;; XXX: In Libgcrypt 1.5.3, (canonical-sexp-nth lst 0) returns LST, whereas in - ;; 1.6.0 it returns #f. - (map (lambda (sexp) - (and sexp (string-trim-both (canonical-sexp->string sexp)))) - (unfold (cut > <> 5) - (cut canonical-sexp-nth lst <>) - 1+ - 1)))) - -(gc) - -(test-equal "canonical-sexp-nth-data" - `(Name Otto Meier #f ,(base16-string->bytevector "123456") #f) - (let ((lst (string->canonical-sexp - "(Name Otto Meier (address Burgplatz) #123456#)"))) - (unfold (cut > <> 5) - (cut canonical-sexp-nth-data lst <>) - 1+ - 0))) - -(let ((bv (base16-string->bytevector - "5eff0b55c9c5f5e87b4e34cd60a2d5654ca1eb78c7b3c67c3179fed1cff07b4c"))) - (test-equal "hash corrupt due to restrictive locale encoding" - bv - - ;; In Guix up to 0.6 included this test would fail because at some point - ;; the hash value would be cropped to ASCII. In practice 'guix - ;; authenticate' would produce invalid signatures that would fail - ;; signature verification. See <http://bugs.gnu.org/17312>. - (let ((locale (setlocale LC_ALL))) - (dynamic-wind - (lambda () - (setlocale LC_ALL "C")) - (lambda () - (hash-data->bytevector - (string->canonical-sexp - (canonical-sexp->string - (bytevector->hash-data bv "sha256"))))) - (lambda () - (setlocale LC_ALL locale)))))) - -(gc) - -;; XXX: The test below is typically too long as it needs to gather enough entropy. - -;; (test-assert "generate-key" -;; (let ((key (generate-key (string->canonical-sexp -;; "(genkey (rsa (nbits 3:128)))")))) -;; (and (canonical-sexp? key) -;; (find-sexp-token key 'key-data) -;; (find-sexp-token key 'public-key) -;; (find-sexp-token key 'private-key)))) - -(test-assert "bytevector->hash-data->bytevector" - (let* ((bv (sha256 (string->utf8 "Hello, world."))) - (data (bytevector->hash-data bv "sha256"))) - (and (canonical-sexp? data) - (let-values (((value algo) (hash-data->bytevector data))) - (and (string=? algo "sha256") - (bytevector=? value bv)))))) - -(test-equal "key-type" - '(rsa ecc) - (map (compose key-type - (cut find-sexp-token <> 'public-key) - string->canonical-sexp) - (list %key-pair %ecc-key-pair))) - -(test-assert "sign + verify" - (let* ((pair (string->canonical-sexp %key-pair)) - (secret (find-sexp-token pair 'private-key)) - (public (find-sexp-token pair 'public-key)) - (data (bytevector->hash-data - (sha256 (string->utf8 "Hello, world.")) - #:key-type (key-type public))) - (sig (sign data secret))) - (and (verify sig data public) - (not (verify sig - (bytevector->hash-data - (sha256 (string->utf8 "Hi!")) - #:key-type (key-type public)) - public))))) - -;; Ed25519 appeared in libgcrypt 1.6.0. -(test-skip (if (version>? (gcrypt-version) "1.6.0") 0 1)) -(test-assert "sign + verify, Ed25519" - (let* ((pair (string->canonical-sexp %ecc-key-pair)) - (secret (find-sexp-token pair 'private-key)) - (public (find-sexp-token pair 'public-key)) - (data (bytevector->hash-data - (sha256 (string->utf8 "Hello, world.")))) - (sig (sign data secret))) - (and (verify sig data public) - (not (verify sig - (bytevector->hash-data - (sha256 (string->utf8 "Hi!"))) - public))))) - -(gc) - -(test-equal "canonical-sexp->sexp" - `((data - (flags pkcs1) - (hash sha256 - ,(base16-string->bytevector - "2749f0ea9f26c6c7be746a9cff8fa4c2f2a02b000070dba78429e9a11f87c6eb"))) - - (public-key - (rsa - (n ,(base16-string->bytevector - (string-downcase - "00C1F764069F54FFE93A126B02328903E984E4AE3AF6DF402B5B6B3907911B88C385F1BA76A002EC9DEA109A5228EF0E62EE31A06D1A5861CAB474F6C857AC66EB65A1905F25BBA1869579E73A3B7FED13AF5A1667326F88CDFC2FF24B03C14FD1384AA7E73CA89572880B606E3A974E15347963FC7B6378574936A47580DBCB45"))) - (e ,(base16-string->bytevector - "010001"))))) - - (list (canonical-sexp->sexp - (string->canonical-sexp - "(data - (flags pkcs1) - (hash \"sha256\" - #2749f0ea9f26c6c7be746a9cff8fa4c2f2a02b000070dba78429e9a11f87c6eb#))")) - - (canonical-sexp->sexp - (find-sexp-token (string->canonical-sexp %key-pair) - 'public-key)))) - - -(let ((lst - `((data - (flags pkcs1) - (hash sha256 - ,(base16-string->bytevector - "2749f0ea9f26c6c7be746a9cff8fa4c2f2a02b000070dba78429e9a11f87c6eb"))) - - (public-key - (rsa - (n ,(base16-string->bytevector - (string-downcase - "00C1F764069F54FFE93A126B02328903E984E4AE3AF6DF402B5B6B3907911B88C385F1BA76A002EC9DEA109A5228EF0E62EE31A06D1A5861CAB474F6C857AC66EB65A1905F25BBA1869579E73A3B7FED13AF5A1667326F88CDFC2FF24B03C14FD1384AA7E73CA89572880B606E3A974E15347963FC7B6378574936A47580DBCB45"))) - (e ,(base16-string->bytevector - "010001")))) - - ,(base16-string->bytevector - "2749f0ea9f26c6c7be746a9cff8fa4c2f2a02b000070dba78429e9a11f87c6eb")))) - (test-equal "sexp->canonical-sexp->sexp" - lst - (map (compose canonical-sexp->sexp sexp->canonical-sexp) - lst))) - -(let ((sexp `(signature - (public-key - (rsa - (n ,(make-bytevector 1024 1)) - (e ,(base16-string->bytevector "010001"))))))) - (test-equal "https://bugs.g10code.com/gnupg/issue1594" - ;; The gcrypt bug above was primarily affecting our uses in - ;; 'canonical-sexp->sexp', typically when applied to a signature sexp (in - ;; 'guix authenticate -verify') with a "big" RSA key, such as 4096 bits. - sexp - (canonical-sexp->sexp (sexp->canonical-sexp sexp)))) - -(test-end) diff --git a/tests/pki.scm b/tests/pki.scm index 876ad98d73..d6a6b476c7 100644 --- a/tests/pki.scm +++ b/tests/pki.scm @@ -18,8 +18,8 @@ (define-module (test-pki) #:use-module (guix pki) - #:use-module (guix pk-crypto) - #:use-module (guix hash) + #:use-module (gcrypt pk-crypto) + #:use-module (gcrypt hash) #:use-module (rnrs io ports) #:use-module (srfi srfi-64)) diff --git a/tests/publish.scm b/tests/publish.scm index 1ed8308076..0e793c1ee5 100644 --- a/tests/publish.scm +++ b/tests/publish.scm @@ -25,7 +25,7 @@ #:use-module (guix tests) #:use-module (guix config) #:use-module (guix utils) - #:use-module (guix hash) + #:use-module (gcrypt hash) #:use-module (guix store) #:use-module (guix derivations) #:use-module (guix gexp) @@ -33,7 +33,7 @@ #:use-module (guix base64) #:use-module ((guix records) #:select (recutils->alist)) #:use-module ((guix serialization) #:select (restore-file)) - #:use-module (guix pk-crypto) + #:use-module (gcrypt pk-crypto) #:use-module ((guix pki) #:select (%public-key-file %private-key-file)) #:use-module (guix zlib) #:use-module (web uri) diff --git a/tests/pypi.scm b/tests/pypi.scm index 310c6c8f29..616ec191f5 100644 --- a/tests/pypi.scm +++ b/tests/pypi.scm @@ -20,7 +20,7 @@ (define-module (test-pypi) #:use-module (guix import pypi) #:use-module (guix base32) - #:use-module (guix hash) + #:use-module (gcrypt hash) #:use-module (guix tests) #:use-module (guix build-system python) #:use-module ((guix build utils) #:select (delete-file-recursively which)) diff --git a/tests/services.scm b/tests/services.scm index b146a0dec2..1ad577e601 100644 --- a/tests/services.scm +++ b/tests/services.scm @@ -138,6 +138,31 @@ (equal? (list s1 s2) (instantiate-missing-services (list s1 s2)))))) +(test-assert "instantiate-missing-services, indirect" + (let* ((t1 (service-type (name 't1) (extensions '()) + (default-value 'dflt) + (compose concatenate) + (extend cons))) + (t2 (service-type (name 't2) (extensions '()) + (default-value 'dflt2) + (compose concatenate) + (extend cons) + (extensions + (list (service-extension t1 list))))) + (t3 (service-type (name 't3) + (extensions + (list (service-extension t2 list))))) + (s1 (service t1)) + (s2 (service t2)) + (s3 (service t3 42)) + (== (cut lset= equal? <...>))) + (and (== (list s1 s2 s3) + (instantiate-missing-services (list s3))) + (== (list s1 s2 s3) + (instantiate-missing-services (list s1 s3))) + (== (list s1 s2 s3) + (instantiate-missing-services (list s2 s3)))))) + (test-assert "instantiate-missing-services, no default value" (let* ((t1 (service-type (name 't1) (extensions '()))) (t2 (service-type (name 't2) diff --git a/tests/store-deduplication.scm b/tests/store-deduplication.scm index 4ca2ec0f61..e438aa84c6 100644 --- a/tests/store-deduplication.scm +++ b/tests/store-deduplication.scm @@ -19,7 +19,7 @@ (define-module (test-store-deduplication) #:use-module (guix tests) #:use-module (guix store deduplication) - #:use-module (guix hash) + #:use-module (gcrypt hash) #:use-module ((guix utils) #:select (call-with-temporary-directory)) #:use-module (guix build utils) #:use-module (rnrs bytevectors) diff --git a/tests/store.scm b/tests/store.scm index 47fab0df18..2858369706 100644 --- a/tests/store.scm +++ b/tests/store.scm @@ -21,7 +21,7 @@ #:use-module (guix store) #:use-module (guix utils) #:use-module (guix monads) - #:use-module (guix hash) + #:use-module (gcrypt hash) #:use-module (guix base32) #:use-module (guix packages) #:use-module (guix derivations) @@ -45,6 +45,9 @@ (define %store (open-connection-for-tests)) +(define %shell + (or (getenv "SHELL") (getenv "CONFIG_SHELL"))) + (test-begin "store") @@ -220,7 +223,8 @@ ("./foo/c" directory #t) ("./foo/c/p" regular "file p") ("./foo/c/q" directory #t) - ("./foo/c/q/x" regular "#!/bin/sh\nexit 42") + ("./foo/c/q/x" regular + ,(string-append "#!" %shell "\nexit 42")) ("./foo/c/q/y" symlink "..") ("./foo/c/q/z" directory #t)) (let* ((tree `("file-tree" directory @@ -231,7 +235,7 @@ ("p" regular (data ,(string->utf8 "file p"))) ("q" directory ("x" executable - (data "#!/bin/sh\nexit 42")) + (data ,(string-append "#!" %shell "\nexit 42"))) ("y" symlink "..") ("z" directory)))) ("bar" directory))) diff --git a/tests/substitute.scm b/tests/substitute.scm index 0ad6247954..964a57f30b 100644 --- a/tests/substitute.scm +++ b/tests/substitute.scm @@ -20,9 +20,9 @@ (define-module (test-substitute) #:use-module (guix scripts substitute) #:use-module (guix base64) - #:use-module (guix hash) + #:use-module (gcrypt hash) #:use-module (guix serialization) - #:use-module (guix pk-crypto) + #:use-module (gcrypt pk-crypto) #:use-module (guix pki) #:use-module (guix config) #:use-module (guix base32) |