diff options
181 files changed, 7423 insertions, 3496 deletions
diff --git a/.mailmap b/.mailmap index 4f672f3278..6188162c62 100644 --- a/.mailmap +++ b/.mailmap @@ -43,6 +43,7 @@ Mathieu Lirzin <mthl@gnu.org> <mathieu.lirzin@openmailbox.org> Mathieu Othacehe <m.othacehe@gmail.com> Nikita Karetnikov <nikita@karetnikov.org> <nikita.karetnikov@gmail.com> Nils Gillmann <ng0@n0.is> ng0 <ng0@n0.is> +Nils Gillmann <ng0@n0.is> Nils Gillmann <gillmann@infotropique.org> Nils Gillmann <ng0@n0.is> ng0 <ng0@crash.cx> Nils Gillmann <ng0@n0.is> ng0 <ng0@crash.cx> Nils Gillmann <ng0@n0.is> <ng0@infotropique.org> @@ -55,6 +56,7 @@ Nils Gillmann <ng0@n0.is> <ngillmann@runbox.com> Nils Gillmann <ng0@n0.is> <niasterisk@grrlz.net> Nils Gillmann <ng0@n0.is> <ng@niasterisk.space> Nils Gillmann <ng0@n0.is> <ng0@libertad.pw> +Pierre-Antoine Rouby <pierre-antoine.rouby@inria.fr> Pjotr Prins <pjotr.guix@thebird.nl> <pjotr.public01@thebird.nl> Pjotr Prins <pjotr.guix@thebird.nl> <pjotr.public12@thebird.nl> Pjotr Prins <pjotr.guix@thebird.nl> <pjotr.public12@email> diff --git a/HACKING b/HACKING index d1a26d2d64..f68753fee9 100644 --- a/HACKING +++ b/HACKING @@ -27,7 +27,7 @@ mailing list. When you get commit access, please make sure to follow the policy below (discussions of the policy can take place on guix-devel@gnu.org.) Non-trivial patches should always be posted to guix-patches@gnu.org (trivial -patches include fixing typos, etc.) This mailing list fills the +patches include fixing typos, etc.). This mailing list fills the patch-tracking database at [[https://bugs.gnu.org/guix-patches]]; see "Contributing" in the manual for details. diff --git a/Makefile.am b/Makefile.am index 5dc04de35c..b4cd07ed22 100644 --- a/Makefile.am +++ b/Makefile.am @@ -85,6 +85,7 @@ MODULES = \ guix/nar.scm \ guix/derivations.scm \ guix/grafts.scm \ + guix/inferior.scm \ guix/gnu-maintenance.scm \ guix/self.scm \ guix/upstream.scm \ @@ -110,6 +111,7 @@ MODULES = \ guix/build-system/asdf.scm \ guix/build-system/glib-or-gtk.scm \ guix/build-system/gnu.scm \ + guix/build-system/guile.scm \ guix/build-system/haskell.scm \ guix/build-system/perl.scm \ guix/build-system/python.scm \ @@ -148,6 +150,7 @@ MODULES = \ guix/build/glib-or-gtk-build-system.scm \ guix/build/gnu-build-system.scm \ guix/build/gnu-dist.scm \ + guix/build/guile-build-system.scm \ guix/build/perl-build-system.scm \ guix/build/python-build-system.scm \ guix/build/ocaml-build-system.scm \ @@ -200,6 +203,7 @@ MODULES = \ guix/scripts/substitute.scm \ guix/scripts/authenticate.scm \ guix/scripts/refresh.scm \ + guix/scripts/repl.scm \ guix/scripts/system.scm \ guix/scripts/system/search.scm \ guix/scripts/lint.scm \ @@ -231,11 +235,13 @@ MODULES += \ guix/import/github.scm \ guix/import/gnome.scm \ guix/import/json.scm \ + guix/import/opam.scm \ guix/import/pypi.scm \ guix/import/stackage.scm \ guix/scripts/import/crate.scm \ guix/scripts/import/gem.scm \ guix/scripts/import/json.scm \ + guix/scripts/import/opam.scm \ guix/scripts/import/pypi.scm \ guix/scripts/import/stackage.scm \ guix/scripts/weather.scm @@ -355,6 +361,7 @@ SCM_TESTS = \ tests/profiles.scm \ tests/search-paths.scm \ tests/syscalls.scm \ + tests/inferior.scm \ tests/gremlin.scm \ tests/bournish.scm \ tests/lint.scm \ @@ -382,6 +389,7 @@ if HAVE_GUILE_JSON SCM_TESTS += \ tests/pypi.scm \ + tests/opam.scm \ tests/cpan.scm \ tests/gem.scm \ tests/crate.scm @@ -492,8 +500,6 @@ EXTRA_DIST += \ build-aux/run-system-tests.scm \ d3.v3.js \ graph.js \ - srfi/srfi-64.scm \ - srfi/srfi-64.upstream.scm \ tests/test.drv \ tests/signing-key.pub \ tests/signing-key.sec \ diff --git a/doc/contributing.texi b/doc/contributing.texi index 8feb519b0a..68d8e7e2fb 100644 --- a/doc/contributing.texi +++ b/doc/contributing.texi @@ -212,7 +212,8 @@ The commit message snippets depend on @url{https://magit.vc/, Magit} to display staged files. When editing a commit message type @code{add} followed by @kbd{TAB} to insert a commit message template for adding a package; type @code{update} followed by @kbd{TAB} to insert a template -for updating a package. +for updating a package; type @code{https} followed by @kbd{TAB} to +insert a template for changing the home page URI of a package to HTTPS. The main snippet for @code{scheme-mode} is triggered by typing @code{package...} followed by @kbd{TAB}. This snippet also inserts the diff --git a/doc/guix.texi b/doc/guix.texi index a458c7c8dd..19c9813f6a 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -27,7 +27,7 @@ Copyright @copyright{} 2016, 2017, 2018 Chris Marusich@* Copyright @copyright{} 2016, 2017, 2018 Efraim Flashner@* Copyright @copyright{} 2016 John Darrington@* Copyright @copyright{} 2016, 2017 Nils Gillmann@* -Copyright @copyright{} 2016, 2017 Jan Nieuwenhuizen@* +Copyright @copyright{} 2016, 2017, 2018 Jan Nieuwenhuizen@* Copyright @copyright{} 2016 Julien Lepiller@* Copyright @copyright{} 2016 Alex ter Weele@* Copyright @copyright{} 2017, 2018 Clément Lassieur@* @@ -48,7 +48,8 @@ Copyright @copyright{} 2017 nee@* Copyright @copyright{} 2018 Rutger Helling@* Copyright @copyright{} 2018 Oleg Pykhalov@* Copyright @copyright{} 2018 Mike Gerwitz@* -Copyright @copyright{} 2018 Pierre-Antoine Rouby +Copyright @copyright{} 2018 Pierre-Antoine Rouby@* +Copyright @copyright{} 2018 Gábor Boskovits@* Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or @@ -165,6 +166,7 @@ Programming Interface * Derivations:: Low-level interface to package derivations. * The Store Monad:: Purely functional interface to the store. * G-Expressions:: Manipulating build expressions. +* Invoking guix repl:: Fiddling with Guix interactively. Defining Packages @@ -429,7 +431,7 @@ Installing goes along these lines: @item @cindex downloading Guix binary Download the binary tarball from -@indicateurl{ftp://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{system}.tar.xz}, +@indicateurl{https://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{system}.tar.xz}, where @var{system} is @code{x86_64-linux} for an @code{x86_64} machine already running the kernel Linux, and so on. @@ -438,7 +440,7 @@ Make sure to download the associated @file{.sig} file and to verify the authenticity of the tarball against it, along these lines: @example -$ wget ftp://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{system}.tar.xz.sig +$ wget https://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{system}.tar.xz.sig $ gpg --verify guix-binary-@value{VERSION}.@var{system}.tar.xz.sig @end example @@ -1373,8 +1375,8 @@ derivations. @cindex garbage collector roots When set to ``yes'', the GC will keep the outputs of any live derivation available in the store---the @code{.drv} files. The default is ``no'', -meaning that derivation outputs are kept only if they are GC roots. -@xref{Invoking guix gc}, for more on GC roots. +meaning that derivation outputs are kept only if they are reachable from a GC +root. @xref{Invoking guix gc}, for more on GC roots. @item --gc-keep-derivations[=yes|no] Tell whether the garbage collector (GC) must keep derivations @@ -1385,12 +1387,13 @@ derivations---i.e., @code{.drv} files---as long as at least one of their outputs is live. This allows users to keep track of the origins of items in their store. Setting it to ``no'' saves a bit of disk space. -Note that when both @code{--gc-keep-derivations} and -@code{--gc-keep-outputs} are used, the effect is to keep all the build -prerequisites (the sources, compiler, libraries, and other build-time -tools) of live objects in the store, regardless of whether these -prerequisites are live. This is convenient for developers since it -saves rebuilds or downloads. +In this way, setting @code{--gc-keep-derivations} to ``yes'' causes liveness +to flow from outputs to derivations, and setting @code{--gc-keep-outputs} to +``yes'' causes liveness to flow from derivations to outputs. When both are +set to ``yes'', the effect is to keep all the build prerequisites (the +sources, compiler, libraries, and other build-time tools) of live objects in +the store, regardless of whether these prerequisites are reachable from a GC +root. This is convenient for developers since it saves rebuilds or downloads. @item --impersonate-linux-2.6 On Linux-based systems, impersonate Linux 2.6. This means that the @@ -2784,12 +2787,18 @@ Generation 2 Jun 11 2018 11:02:49 repository URL: https://git.savannah.gnu.org/git/guix.git branch: origin/master commit: e0cc7f669bec22c37481dd03a7941c7d11a64f1d + 2 new packages: keepalived, libnfnetlink + 6 packages upgraded: emacs-nix-mode@@2.0.4, + guile2.0-guix@@0.14.0-12.77a1aac, guix@@0.14.0-12.77a1aac, + heimdal@@7.5.0, milkytracker@@1.02.00, nix@@2.0.4 Generation 3 Jun 13 2018 23:31:07 (current) guix 844cc1c repository URL: https://git.savannah.gnu.org/git/guix.git branch: origin/master commit: 844cc1c8f394f03b404c5bb3aee086922373490c + 28 new packages: emacs-helm-ls-git, emacs-helm-mu, @dots{} + 69 packages upgraded: borg@@1.1.6, cheese@@3.28.0, @dots{} @end example This @code{~/.config/guix/current} profile works like any other profile @@ -3266,6 +3275,7 @@ package definitions. * Derivations:: Low-level interface to package derivations. * The Store Monad:: Purely functional interface to the store. * G-Expressions:: Manipulating build expressions. +* Invoking guix repl:: Fiddling with Guix interactively. @end menu @node Defining Packages @@ -4036,6 +4046,21 @@ specified with the @code{#:glib} parameter. Both phases are executed after the @code{install} phase. @end defvr +@defvr {Scheme Variable} guile-build-system +This build system is for Guile packages that consist exclusively of Scheme +code and that are so lean that they don't even have a makefile, let alone a +@file{configure} script. It compiles Scheme code using @command{guild +compile} (@pxref{Compilation,,, guile, GNU Guile Reference Manual}) and +installs the @file{.scm} and @file{.go} files in the right place. It also +installs documentation. + +This build system supports cross-compilation by using the @code{--target} +option of @command{guild compile}. + +Packages built with @code{guile-build-system} must provide a Guile package in +their @code{native-inputs} field. +@end defvr + @defvr {Scheme Variable} minify-build-system This variable is exported by @code{(guix build-system minify)}. It implements a minification procedure for simple JavaScript packages. @@ -4915,6 +4940,12 @@ containing @var{text}, a string. @var{references} is a list of store items that resulting text file refers to; it defaults to the empty list. @end deffn +@deffn {Monadic Procedure} binary-file @var{name} @var{data} [@var{references}] +Return as a monadic value the absolute file name in the store of the file +containing @var{data}, a bytevector. @var{references} is a list of store +items that the resulting binary file refers to; it defaults to the empty list. +@end deffn + @deffn {Monadic Procedure} interned-file @var{file} [@var{name}] @ [#:recursive? #t] [#:select? (const #t)] Return the name of @var{file} once interned in the store. Use @@ -5348,7 +5379,7 @@ procedure (@pxref{The Store Monad, @code{interned-file}}). @deffn {Scheme Procedure} plain-file @var{name} @var{content} Return an object representing a text file called @var{name} with the given -@var{content} (a string) to be added to the store. +@var{content} (a string or a bytevector) to be added to the store. This is the declarative counterpart of @code{text-file}. @end deffn @@ -5537,6 +5568,57 @@ corresponding to @var{obj} for @var{system}, cross-compiling for has an associated gexp compiler, such as a @code{<package>}. @end deffn +@node Invoking guix repl +@section Invoking @command{guix repl} + +@cindex REPL, read-eval-print loop +The @command{guix repl} command spawns a Guile @dfn{read-eval-print loop} +(REPL) for interactive programming (@pxref{Using Guile Interactively,,, guile, +GNU Guile Reference Manual}). Compared to just launching the @command{guile} +command, @command{guix repl} guarantees that all the Guix modules and all its +dependencies are available in the search path. You can use it this way: + +@example +$ guix repl +scheme@@(guile-user)> ,use (gnu packages base) +scheme@@(guile-user)> coreutils +$1 = #<package coreutils@@8.29 gnu/packages/base.scm:327 3e28300> +@end example + +@cindex inferiors +In addition, @command{guix repl} implements a simple machine-readable REPL +protocol for use by @code{(guix inferior)}, a facility to interact with +@dfn{inferiors}, separate processes running a potentially different revision +of Guix. + +The available options are as follows: + +@table @code +@item --type=@var{type} +@itemx -t @var{type} +Start a REPL of the given @var{TYPE}, which can be one of the following: + +@table @code +@item guile +This is default, and it spawns a standard full-featured Guile REPL. +@item machine +Spawn a REPL that uses the machine-readable protocol. This is the protocol +that the @code{(guix inferior)} module speaks. +@end table + +@item --listen=@var{endpoint} +By default, @command{guix repl} reads from standard input and writes to +standard output. When this option is passed, it will instead listen for +connections on @var{endpoint}. Here are examples of valid options: + +@table @code +@item --listen=tcp:37146 +Accept connections on localhost on port 37146. + +@item --listen=unix:/tmp/socket +Accept connections on the Unix-domain socket @file{/tmp/socket}. +@end table +@end table @c ********************************************************************* @node Utilities @@ -6379,6 +6461,14 @@ The command below imports metadata for the @code{rails} Ruby package: guix import gem rails @end example +@table @code +@item --recursive +@itemx -r +Traverse the dependency graph of the given upstream package recursively +and generate package expressions for all those packages that are not yet +in Guix. +@end table + @item cpan @cindex CPAN Import metadata from @uref{https://www.metacpan.org/, MetaCPAN}@footnote{This @@ -6660,6 +6750,12 @@ in Guix. @cindex crate Import metadata from the crates.io Rust package repository @uref{https://crates.io, crates.io}. + +@item opam +@cindex OPAM +@cindex OCaml +Import metadata from the @uref{https://opam.ocaml.org/, OPAM} package +repository used by the OCaml community. @end table The structure of the @command{guix import} code is modular. It would be @@ -8392,7 +8488,7 @@ about their support in GNU/Linux. An ISO-9660 installation image that can be written to a USB stick or burnt to a DVD can be downloaded from -@indicateurl{ftp://alpha.gnu.org/gnu/guix/guixsd-install-@value{VERSION}.@var{system}.iso.xz}, +@indicateurl{https://alpha.gnu.org/gnu/guix/guixsd-install-@value{VERSION}.@var{system}.iso.xz}, where @var{system} is one of: @table @code @@ -8408,7 +8504,7 @@ Make sure to download the associated @file{.sig} file and to verify the authenticity of the image against it, along these lines: @example -$ wget ftp://alpha.gnu.org/gnu/guix/guixsd-install-@value{VERSION}.@var{system}.iso.xz.sig +$ wget https://alpha.gnu.org/gnu/guix/guixsd-install-@value{VERSION}.@var{system}.iso.xz.sig $ gpg --verify guixsd-install-@value{VERSION}.@var{system}.iso.xz.sig @end example @@ -10829,6 +10925,21 @@ gexps to introduce job definitions that are passed to mcron for more information on mcron job specifications. Below is the reference of the mcron service. +On a running system, you can use the @code{schedule} action of the service to +visualize the mcron jobs that will be executed next: + +@example +# herd schedule mcron +@end example + +@noindent +The example above lists the next five tasks that will be executed, but you can +also specify the number of tasks to display: + +@example +# herd schedule mcron 10 +@end example + @deffn {Scheme Procedure} mcron-service @var{jobs} [#:mcron @var{mcron}] Return an mcron service running @var{mcron} that schedules @var{jobs}, a list of gexps denoting mcron job specifications. @@ -12046,7 +12157,7 @@ secure connections to the print server. Suppose you want to enable the Web interface of CUPS and also add support for Epson printers @i{via} the @code{escpr} package and for HP -printers @i{via} the @code{hplip} package. You can do that directly, +printers @i{via} the @code{hplip-minimal} package. You can do that directly, like this (you need to use the @code{(gnu packages cups)} module): @example @@ -12054,9 +12165,13 @@ like this (you need to use the @code{(gnu packages cups)} module): (cups-configuration (web-interface? #t) (extensions - (list cups-filters escpr hplip)))) + (list cups-filters escpr hplip-minimal)))) @end example +Note: If you wish to use the Qt5 based GUI which comes with the hplip +package then it is suggested that you install the @code{hplip} package, +either in your OS configuration file or as your user. + The available configuration parameters follow. Each parameter definition is preceded by its type; for example, @samp{string-list foo} indicates that the @code{foo} parameter should be specified as a list of @@ -15649,6 +15764,39 @@ Specify the path of the base URL. This can be useful if @end table @end deftp +@subsubheading Prometheus Node Exporter Service + +@cindex prometheus-node-exporter +The Prometheus ``node exporter'' makes hardware and operating system statistics +provided by the Linux kernel available for the Prometheus monitoring system. +This service should be deployed on all physical nodes and virtual machines, +where monitoring these statistics is desirable. + +@defvar {Scheme variable} prometheus-node-exporter-service-type +This is the service type for the +@uref{https://github.com/prometheus/node_exporter/, prometheus-node-exporter} +service, its value must be a @code{prometheus-node-exporter-configuration} +record as in this example: + +@example +(service prometheus-node-exporter-service-type + (prometheus-node-exporter-configuration + (web-listen-address ":9100"))) +@end example +@end defvar + +@deftp {Data Type} prometheus-node-exporter-configuration +Data type representing the configuration of @command{node_exporter}. + +@table @asis +@item @code{package} (default: @code{go-github-com-prometheus-node-exporter}) +The prometheus-node-exporter package to use. + +@item @code{web-listen-address} (default: @code{":9100"}) +Bind the web interface to the specified address. + +@end table +@end deftp @node Kerberos Services @subsubsection Kerberos Services @@ -17614,10 +17762,6 @@ Only evaluate specifications and build derivations once. When substituting a pre-built binary fails, fall back to building packages locally. -@item @code{load-path} (default: @code{'()}) -This allows users to define their own packages and make them visible to -cuirass as in @command{guix build} command. - @item @code{cuirass} (default: @code{cuirass}) The Cuirass package to use. @end table @@ -21323,7 +21467,7 @@ example graph. @cindex virtual machine To run GuixSD in a virtual machine (VM), one can either use the pre-built GuixSD VM image distributed at -@indicateurl{ftp://alpha.gnu.org/guix/guixsd-vm-image-@value{VERSION}.@var{system}.tar.xz} +@indicateurl{https://alpha.gnu.org/gnu/guix/guixsd-vm-image-@value{VERSION}.@var{system}.xz} , or build their own virtual machine image using @command{guix system vm-image} (@pxref{Invoking guix system}). The returned image is in qcow2 format, which the @uref{http://qemu.org/, QEMU emulator} can @@ -21915,6 +22059,17 @@ Constructors,,, shepherd, The GNU Shepherd Manual}). They are given as G-expressions that get expanded in the Shepherd configuration file (@pxref{G-Expressions}). +@item @code{actions} (default: @code{'()}) +@cindex actions, of Shepherd services +This is a list of @code{shepherd-action} objects (see below) defining +@dfn{actions} supported by the service, in addition to the standard +@code{start} and @code{stop} actions. Actions listed here become available as +@command{herd} sub-commands: + +@example +herd @var{action} @var{service} [@var{arguments}@dots{}] +@end example + @item @code{documentation} A documentation string, as shown when running: @@ -21932,6 +22087,54 @@ This is the list of modules that must be in scope when @code{start} and @end table @end deftp +@deftp {Data Type} shepherd-action +This is the data type that defines additional actions implemented by a +Shepherd service (see above). + +@table @code +@item name +Symbol naming the action. + +@item documentation +This is a documentation string for the action. It can be viewed by running: + +@example +herd doc @var{service} action @var{action} +@end example + +@item procedure +This should be a gexp that evaluates to a procedure of at least one argument, +which is the ``running value'' of the service (@pxref{Slots of services,,, +shepherd, The GNU Shepherd Manual}). +@end table + +The following example defines an action called @code{say-hello} that kindly +greets the user: + +@example +(shepherd-action + (name 'say-hello) + (documentation "Say hi!") + (procedure #~(lambda (running . args) + (format #t "Hello, friend! arguments: ~s\n" + args) + #t))) +@end example + +Assuming this action is added to the @code{example} service, then you can do: + +@example +# herd say-hello example +Hello, friend! arguments: () +# herd say-hello example a b c +Hello, friend! arguments: ("a" "b" "c") +@end example + +This, as you can see, is a fairly sophisticated way to say hello. +@xref{Service Convenience,,, shepherd, The GNU Shepherd Manual}, for more +info on actions. +@end deftp + @defvr {Scheme Variable} shepherd-root-service-type The service type for the Shepherd ``root service''---i.e., PID@tie{}1. diff --git a/etc/snippets/scheme-mode/guix-package b/etc/snippets/scheme-mode/guix-package index d392e82093..48b87e3599 100644 --- a/etc/snippets/scheme-mode/guix-package +++ b/etc/snippets/scheme-mode/guix-package @@ -7,7 +7,8 @@ (name "$1") (version "$2") (source origin...$0) - (build-system ${3:$$(yas-choose-value "ant-build-system" + (build-system ${3:$$(yas-choose-value "android-ndk-build-system" + "ant-build-system" "asdf-build-system" "cargo-build-system" "cmake-build-system" @@ -25,6 +26,7 @@ "python-build-system" "r-build-system" "ruby-build-system" + "scons-build-system" "texlive-build-system" "trivial-build-system" "waf-build-system")}) diff --git a/etc/snippets/text-mode/guix-commit-message-use-https-home-page b/etc/snippets/text-mode/guix-commit-message-use-https-home-page new file mode 100644 index 0000000000..df20d31a80 --- /dev/null +++ b/etc/snippets/text-mode/guix-commit-message-use-https-home-page @@ -0,0 +1,9 @@ +# -*- mode: snippet -*- +# name: guix-commit-message-use-https-home-page +# key: https +# condition: git-commit-mode +# -- +gnu: $1: Use HTTPS home page URI. + +* `(car (magit-staged-files))` ($1)[home-page]: Use HTTPS URI. +`(mapconcat (lambda (file) (concat "* " file)) (cdr (magit-staged-files)) "\n")` \ No newline at end of file diff --git a/gnu/local.mk b/gnu/local.mk index 571df533fc..c8b42d1de1 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -15,9 +15,10 @@ # Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr> # Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org> # Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com> -# Copyright © 2017 Gábor Boskovits <boskovits@gmail.com> +# Copyright © 2017, 2018 Gábor Boskovits <boskovits@gmail.com> # Copyright © 2018 Amirouche Boubekki <amirouche@hypermove.net> # Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com> +# Copyright © 2018 Stefan Stefanović <stefanx2ovic@gmail.com> # # This file is part of GNU Guix. # @@ -403,6 +404,7 @@ GNU_SYSTEM_MODULES = \ %D%/packages/sssd.scm \ %D%/packages/stalonetray.scm \ %D%/packages/statistics.scm \ + %D%/packages/stb.scm \ %D%/packages/storage.scm \ %D%/packages/suckless.scm \ %D%/packages/swig.scm \ @@ -530,6 +532,7 @@ GNU_SYSTEM_MODULES = \ %D%/tests/databases.scm \ %D%/tests/desktop.scm \ %D%/tests/dict.scm \ + %D%/tests/monitoring.scm \ %D%/tests/nfs.scm \ %D%/tests/install.scm \ %D%/tests/mail.scm \ @@ -583,7 +586,6 @@ dist_patch_DATA = \ %D%/packages/patches/bash-completion-directories.patch \ %D%/packages/patches/bazaar-CVE-2017-14176.patch \ %D%/packages/patches/beignet-correct-file-names.patch \ - %D%/packages/patches/bind-CVE-2018-5738.patch \ %D%/packages/patches/binutils-aarch64-symbol-relocation.patch \ %D%/packages/patches/binutils-loongson-workaround.patch \ %D%/packages/patches/blast+-fix-makefile.patch \ @@ -671,13 +673,10 @@ dist_patch_DATA = \ %D%/packages/patches/fcgi-2.4.0-poll.patch \ %D%/packages/patches/fifo-map-fix-flags-for-gcc.patch \ %D%/packages/patches/fifo-map-remove-catch.hpp.patch \ - %D%/packages/patches/file-CVE-2017-1000249.patch \ %D%/packages/patches/findutils-localstatedir.patch \ %D%/packages/patches/findutils-test-xargs.patch \ %D%/packages/patches/flann-cmake-3.11.patch \ %D%/packages/patches/flint-ldconfig.patch \ - %D%/packages/patches/fltk-shared-lib-defines.patch \ - %D%/packages/patches/fltk-xfont-on-demand.patch \ %D%/packages/patches/foomatic-filters-CVE-2015-8327.patch \ %D%/packages/patches/foomatic-filters-CVE-2015-8560.patch \ %D%/packages/patches/freeimage-CVE-2015-0852.patch \ @@ -716,6 +715,7 @@ dist_patch_DATA = \ %D%/packages/patches/geoclue-config.patch \ %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-no-header-id.patch \ %D%/packages/patches/ghostscript-no-header-uuid.patch \ %D%/packages/patches/ghostscript-no-header-creationdate.patch \ @@ -926,6 +926,7 @@ dist_patch_DATA = \ %D%/packages/patches/mailutils-uninitialized-memory.patch \ %D%/packages/patches/make-glibc-compat.patch \ %D%/packages/patches/make-impure-dirs.patch \ + %D%/packages/patches/mariadb-gcc-ice.patch \ %D%/packages/patches/mars-install.patch \ %D%/packages/patches/mars-sfml-2.3.patch \ %D%/packages/patches/maxima-defsystem-mkdir.patch \ @@ -942,6 +943,7 @@ dist_patch_DATA = \ %D%/packages/patches/mingw-w64-5.0rc2-gcc-4.9.3.patch \ %D%/packages/patches/mpc123-initialize-ao.patch \ %D%/packages/patches/module-init-tools-moduledir.patch \ + %D%/packages/patches/monero-use-system-miniupnpc.patch \ %D%/packages/patches/mongodb-support-unknown-linux-distributions.patch \ %D%/packages/patches/mozjs17-aarch64-support.patch \ %D%/packages/patches/mozjs24-aarch64-support.patch \ @@ -979,12 +981,12 @@ dist_patch_DATA = \ %D%/packages/patches/ocaml-graph-honor-source-date-epoch.patch \ %D%/packages/patches/omake-fix-non-determinism.patch \ %D%/packages/patches/ola-readdir-r.patch \ + %D%/packages/patches/openbabel-fix-crash-on-nwchem-output.patch \ %D%/packages/patches/opencascade-oce-glibc-2.26.patch \ %D%/packages/patches/openexr-missing-samples.patch \ %D%/packages/patches/openfoam-4.1-cleanup.patch \ %D%/packages/patches/openldap-CVE-2017-9287.patch \ %D%/packages/patches/openocd-nrf52.patch \ - %D%/packages/patches/openscenegraph-ffmpeg3.patch \ %D%/packages/patches/opensmtpd-fix-crash.patch \ %D%/packages/patches/openssl-runpath.patch \ %D%/packages/patches/openssl-1.0.2-CVE-2018-0495.patch \ @@ -1015,6 +1017,7 @@ dist_patch_DATA = \ %D%/packages/patches/perl-net-amazon-s3-moose-warning.patch \ %D%/packages/patches/perl-net-dns-resolver-programmable-fix.patch \ %D%/packages/patches/perl-no-sys-dirs.patch \ + %D%/packages/patches/perl-text-markdown-discount-unbundle.patch \ %D%/packages/patches/perl-module-pluggable-search.patch \ %D%/packages/patches/perl-reproducible-build-date.patch \ %D%/packages/patches/perl-www-curl-remove-symbol.patch \ @@ -1048,6 +1051,7 @@ dist_patch_DATA = \ %D%/packages/patches/pybugz-stty.patch \ %D%/packages/patches/pygpgme-disable-problematic-tests.patch \ %D%/packages/patches/pyqt-configure.patch \ + %D%/packages/patches/pyqt-public-sip.patch \ %D%/packages/patches/python-2-deterministic-build-info.patch \ %D%/packages/patches/python-2.7-adjust-tests.patch \ %D%/packages/patches/python-2.7-search-paths.patch \ @@ -1057,6 +1061,7 @@ dist_patch_DATA = \ %D%/packages/patches/python-3-search-paths.patch \ %D%/packages/patches/python-3-fix-tests.patch \ %D%/packages/patches/python-axolotl-AES-fix.patch \ + %D%/packages/patches/python-cairocffi-dlopen-path.patch \ %D%/packages/patches/python-dendropy-fix-tests.patch \ %D%/packages/patches/python-fix-tests.patch \ %D%/packages/patches/python-genshi-add-support-for-python-3.4-AST.patch \ @@ -1090,7 +1095,6 @@ dist_patch_DATA = \ %D%/packages/patches/qtoctave-qt-5.11-fix.patch \ %D%/packages/patches/qtscript-disable-tests.patch \ %D%/packages/patches/quagga-reproducible-build.patch \ - %D%/packages/patches/quassel-qt-5.11.patch \ %D%/packages/patches/quickswitch-fix-dmenu-check.patch \ %D%/packages/patches/rapicorn-isnan.patch \ %D%/packages/patches/raptor2-heap-overflow.patch \ @@ -1106,18 +1110,20 @@ dist_patch_DATA = \ %D%/packages/patches/rpcbind-CVE-2017-8779.patch \ %D%/packages/patches/rsem-makefile.patch \ %D%/packages/patches/rtags-separate-rct.patch \ + %D%/packages/patches/racket-fix-xform-issue.patch \ %D%/packages/patches/ruby-rubygems-276-for-ruby24.patch \ %D%/packages/patches/ruby-concurrent-ignore-broken-test.patch \ %D%/packages/patches/ruby-concurrent-test-arm.patch \ %D%/packages/patches/ruby-rack-ignore-failing-test.patch \ %D%/packages/patches/ruby-tzinfo-data-ignore-broken-test.patch\ + %D%/packages/patches/rust-bootstrap-stage0-test.patch \ + %D%/packages/patches/rust-coresimd-doctest.patch \ %D%/packages/patches/rxvt-unicode-escape-sequences.patch \ %D%/packages/patches/scheme48-tests.patch \ %D%/packages/patches/scotch-test-threading.patch \ %D%/packages/patches/scotch-build-parallelism.patch \ %D%/packages/patches/scotch-graph-diam-64.patch \ %D%/packages/patches/scotch-graph-induce-type-64.patch \ - %D%/packages/patches/sddm-fix-build-with-qt-5.11-1024.patch \ %D%/packages/patches/sdl-libx11-1.6.patch \ %D%/packages/patches/seq24-rename-mutex.patch \ %D%/packages/patches/sharutils-CVE-2018-1000097.patch \ @@ -1157,6 +1163,7 @@ dist_patch_DATA = \ %D%/packages/patches/tophat-build-with-later-seqan.patch \ %D%/packages/patches/totem-meson-easy-codec.patch \ %D%/packages/patches/tuxpaint-stamps-path.patch \ + %D%/packages/patches/twinkle-include-qregexpvalidator.patch \ %D%/packages/patches/unrtf-CVE-2016-10091.patch \ %D%/packages/patches/unzip-CVE-2014-8139.patch \ %D%/packages/patches/unzip-CVE-2014-8140.patch \ @@ -1206,7 +1213,9 @@ dist_patch_DATA = \ %D%/packages/patches/wpa-supplicant-fix-nonce-reuse.patch \ %D%/packages/patches/wpa-supplicant-krack-followups.patch \ %D%/packages/patches/wxmaxima-do-not-use-old-gnuplot-parameters.patch \ + %D%/packages/patches/x265-arm-asm-primitives.patch \ %D%/packages/patches/x265-fix-ppc64le-build.patch \ + %D%/packages/patches/xapian-revert-5489fb2f8.patch \ %D%/packages/patches/xboing-CVE-2004-0149.patch \ %D%/packages/patches/xdotool-fix-makefile.patch \ %D%/packages/patches/xf86-video-ark-remove-mibstore.patch \ @@ -1224,6 +1233,7 @@ dist_patch_DATA = \ %D%/packages/patches/xinetd-fix-fd-leak.patch \ %D%/packages/patches/xinetd-CVE-2013-4342.patch \ %D%/packages/patches/xmodmap-asprintf.patch \ + %D%/packages/patches/xorg-server-rotate-fb.patch \ %D%/packages/patches/zathura-pdf-mupdf-link-to-jpeg-libraries.patch \ %D%/packages/patches/zathura-plugindir-environment-variable.patch \ %D%/packages/patches/zstd-fix-stdin-list-without-tty.patch \ diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm index e80436e95c..73772166ab 100644 --- a/gnu/packages/admin.scm +++ b/gnu/packages/admin.scm @@ -46,6 +46,7 @@ #:use-module (guix git-download) #:use-module (guix build-system cmake) #:use-module (guix build-system gnu) + #:use-module (guix build-system meson) #:use-module (guix build-system perl) #:use-module (guix build-system python) #:use-module (guix build-system trivial) @@ -1772,27 +1773,18 @@ platform-specific methods.") (define-public audit (package (name "audit") - (version "2.4.5") + (home-page "https://people.redhat.com/sgrubb/audit/") + (version "2.8.4") (source (origin (method url-fetch) - (uri (string-append "https://people.redhat.com/sgrubb/audit/" - "audit-" version ".tar.gz")) + (uri (string-append home-page name "-" version ".tar.gz")) (sha256 (base32 - "1q1q51dvxscbi4kbakmd4bn0xrvwwaiwvaya79925cbrqwzxsg77")))) + "0f4ci6ffznnmgblwgv7ich9mjfk3p6y5l6m6h3chhmzw156nj454")))) (build-system gnu-build-system) - (home-page "https://people.redhat.com/sgrubb/audit/") (arguments - `(#:configure-flags (list "--with-python=no") - #:phases - (modify-phases %standard-phases - (add-after 'unpack 'fix-tests - (lambda _ - ;; In the build environmnte /etc/passwd does not contain an entry - ;; for root/0, so we have to patch the expected value. - (substitute* "auparse/test/auparse_test.ref" - (("=0 \\(root\\)") "=0 (unknown(0))")) - #t))))) + `(#:configure-flags (list "--with-python=no" + "--disable-static"))) (inputs `(("openldap" ,openldap) ("gnutls" ,gnutls) @@ -2740,3 +2732,30 @@ support forum. It runs with the @code{/exec} command in most IRC clients.") ;; perl-xml-dumper ;; ipmitool ,@(package-inputs inxi-minimal))))) + +(define-public pscircle + (package + (name "pscircle") + (version "1.1.0") + (source + (origin + (method url-fetch) + (uri (string-append + "https://gitlab.com/mildlyparallel/pscircle/-/archive/v" + version "/pscircle-v" version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1k757yf2bmgfrjd417l6kpcf83hlvi0z1791vz967mwcklrsb3fj")))) + (build-system meson-build-system) + (native-inputs + `(("pkg-config" ,pkg-config))) + (inputs + `(("cairo" ,cairo) + ("libpng" ,libpng) + ("libx11" ,libx11))) + (home-page "https://gitlab.com/mildlyparallel/pscircle") + (synopsis "Visualize Linux processes in a form of radial tree") + (description + "@code{pscircle} visualizes Linux processes in the form of a radial tree.") + (license license:gpl2+))) diff --git a/gnu/packages/algebra.scm b/gnu/packages/algebra.scm index d03b675f3a..c889433b41 100644 --- a/gnu/packages/algebra.scm +++ b/gnu/packages/algebra.scm @@ -139,7 +139,7 @@ solve the shortest vector problem.") (define-public pari-gp (package (name "pari-gp") - (version "2.9.4") + (version "2.11.0") (source (origin (method url-fetch) (uri (string-append @@ -147,7 +147,7 @@ solve the shortest vector problem.") version ".tar.gz")) (sha256 (base32 - "0ir6m3a8r46md5x6zk4xf159qra7aqparby9zk03k81hjrrxr72g")))) + "18f9yj8ffn3dxignbxj1x36771zbxy4js0r18mv6831ymb6cld9q")))) (build-system gnu-build-system) (native-inputs `(("texlive" ,texlive-tiny))) (inputs `(("gmp" ,gmp) @@ -179,7 +179,7 @@ PARI is also available as a C library to allow for faster computations.") (define-public gp2c (package (name "gp2c") - (version "0.0.10") + (version "0.0.11") (source (origin (method url-fetch) (uri (string-append @@ -187,7 +187,7 @@ PARI is also available as a C library to allow for faster computations.") version ".tar.gz")) (sha256 (base32 - "1xhpz5p81iw261ay1kip283ggr0ir8ydz8qx3v24z8jfms1r3y70")))) + "1z69xj2dpd8yyi8108rz26c50xpv0k2j8qnk0bzy1c5lw3pd1adm")))) (build-system gnu-build-system) (native-inputs `(("perl" ,perl))) (inputs `(("pari-gp" ,pari-gp))) @@ -315,7 +315,7 @@ fast arithmetic.") (define-public arb (package (name "arb") - (version "2.13.0") + (version "2.14.0") (source (origin (method url-fetch) (uri (string-append @@ -324,7 +324,7 @@ fast arithmetic.") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "123p3gwx0s3i88rcaj3g4jl37cr3pywhpqackipskzab15ni2xfh")))) + "0ncr27nd20xxi18nj30cvpa6r52v59nq7gbi34x3l4xym3p8mlmx")))) (build-system gnu-build-system) (propagated-inputs `(("flint" ,flint))) ; flint.h is included by arf.h @@ -342,19 +342,18 @@ fast arithmetic.") (mpfr (assoc-ref inputs "mpfr"))) ;; do not pass "--enable-fast-install", which makes the ;; homebrew configure process fail - (zero? (system* - "./configure" + (invoke "./configure" (string-append "--prefix=" out) (string-append "--with-flint=" flint) (string-append "--with-gmp=" gmp) - (string-append "--with-mpfr=" mpfr))))))))) + (string-append "--with-mpfr=" mpfr)))))))) (synopsis "Arbitrary precision floating-point ball arithmetic") (description "Arb is a C library for arbitrary-precision floating-point ball arithmetic. It supports efficient high-precision computation with polynomials, power series, matrices and special functions over the real and complex numbers, with automatic, rigorous error control.") - (license license:gpl2+) + (license license:lgpl2.1+) (home-page "http://fredrikj.net/arb/"))) (define-public ntl diff --git a/gnu/packages/aspell.scm b/gnu/packages/aspell.scm index 1e2149cd2c..993dc560eb 100644 --- a/gnu/packages/aspell.scm +++ b/gnu/packages/aspell.scm @@ -27,6 +27,7 @@ #:use-module (guix download) #:use-module (guix build-system gnu) #:use-module (guix licenses) + #:use-module (guix utils) #:use-module (gnu packages) #:use-module (gnu packages base) #:use-module (gnu packages compression) @@ -49,6 +50,19 @@ (arguments `(#:phases (modify-phases %standard-phases + (add-before 'build 'set-filter-path + (lambda* (#:key outputs #:allow-other-keys) + ;; Change the default value of 'filter-path' so that filters such + ;; as 'tex-filter.so' can be found. By default none of the + ;; filters would be found. + (let* ((out (assoc-ref outputs "out")) + (libdir (string-append out "/lib/aspell-" + ,(version-major+minor version)))) + (substitute* "common/config.cpp" + (("\"filter-path(.*)DICT_DIR" _ middle) + (string-append "\"filter-path" middle + "\"" libdir "\""))) + #t))) (add-after 'install 'wrap-aspell (lambda* (#:key outputs #:allow-other-keys) (let ((bin/aspell (string-append (assoc-ref outputs "out") @@ -141,10 +155,10 @@ dictionaries, including personal ones.") (define-public aspell-dict-en (aspell-dictionary "en" "English" - #:version "2017.08.24-0" + #:version "2018.04.16-0" #:sha256 (base32 - "0z2vvm1by485cm0sna21cmw6zb771c2l2lnn676zmrwm46q65d89"))) + "0bxxdzkk9g27plg22y9qzsx9cfjw3aa29w5bmzs561qc9gkp247i"))) (define-public aspell-dict-eo (aspell-dictionary "eo" "Esperanto" diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm index e859ba0b99..89f2275ebe 100644 --- a/gnu/packages/audio.scm +++ b/gnu/packages/audio.scm @@ -2513,7 +2513,7 @@ encode and decode wavpack files.") (define-public libmodplug (package (name "libmodplug") - (version "0.8.8.5") + (version "0.8.9.0") (source (origin (method url-fetch) (uri (string-append @@ -2521,7 +2521,7 @@ encode and decode wavpack files.") name "/" version "/" name "-" version ".tar.gz")) (sha256 (base32 - "1bfsladg7h6vnii47dd66f5vh1ir7qv12mfb8n36qiwrxq92sikp")))) + "1pnri98a603xk47smnxr551svbmgbzcw018mq1k6srbrq6kaaz25")))) (build-system gnu-build-system) (home-page "http://modplug-xmms.sourceforge.net/") (synopsis "Mod file playing library") diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm index 9bf629947b..e87cef61be 100644 --- a/gnu/packages/bioinformatics.scm +++ b/gnu/packages/bioinformatics.scm @@ -10,6 +10,7 @@ ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net> ;;; Copyright © 2018 Joshua Sierles, Nextjournal <joshua@nextjournal.com> +;;; Copyright © 2018 Gábor Boskovits <boskovits@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -3240,12 +3241,16 @@ VCF.") (msg (format #f "\ Class-Path: /~a \ - ~a/share/java/htsjdk.jar${line.separator}" + ~a/share/java/htsjdk.jar${line.separator}${line.separator}" ;; maximum line length is 70 (string-tabulate (const #\b) 57) (assoc-ref inputs "java-htsjdk")))) (if (member "manifest" name) `(,tag ,@kids + (replaceregexp + (@ (file "${manifest.file}") + (match "\\r\\n\\r\\n") + (replace "${line.separator}"))) (echo (@ (message ,msg) (file "${manifest.file}") @@ -3760,13 +3765,13 @@ experiments.") (define-public macs (package (name "macs") - (version "2.1.0.20151222") + (version "2.1.1.20160309") (source (origin (method url-fetch) (uri (pypi-uri "MACS2" version)) (sha256 (base32 - "1r2hcz6irhcq7lwbafjks98jbn34hv05avgbdjnp6w6mlfjkf8x5")))) + "09ixspd1vcqmz1c81ih70xs4m7qml2iy5vyx1y74zww3iy1vl210")))) (build-system python-build-system) (arguments `(#:python ,python-2 ; only compatible with Python 2.7 @@ -12828,11 +12833,12 @@ once. This package provides tools to perform Drop-seq analyses.") (lambda _ (substitute* "Makefile.in" (("(^ tests/test_trim_galore/test.sh).*" _ m) m) + (("^ tests/test_multiqc/test.sh") "") (("^ test.sh") "")) #t))))) (inputs `(("gzip" ,gzip) - ("snakemake" ,snakemake) + ("snakemake" ,snakemake-4) ("fastqc" ,fastqc) ("multiqc" ,multiqc) ("star" ,star) @@ -12926,7 +12932,7 @@ expression report comparing samples in an easily configurable manner.") ("fastqc" ,fastqc) ("bowtie" ,bowtie) ("idr" ,idr) - ("snakemake" ,snakemake) + ("snakemake" ,snakemake-4) ("samtools" ,samtools) ("bedtools" ,bedtools) ("kentutils" ,kentutils))) @@ -12987,7 +12993,7 @@ in an easily configurable manner.") ("ghc-pandoc-citeproc" ,ghc-pandoc-citeproc-with-pandoc-1) ("python-wrapper" ,python-wrapper) ("python-pyyaml" ,python-pyyaml) - ("snakemake" ,snakemake) + ("snakemake" ,snakemake-4) ("bismark" ,bismark) ("fastqc" ,fastqc) ("bowtie" ,bowtie) @@ -13036,7 +13042,7 @@ methylation and segmentation.") ("python-loompy" ,python-loompy) ("ghc-pandoc" ,ghc-pandoc-1) ("ghc-pandoc-citeproc" ,ghc-pandoc-citeproc-with-pandoc-1) - ("snakemake" ,snakemake) + ("snakemake" ,snakemake-4) ("star" ,star) ("r-minimal" ,r-minimal) ("r-argparser" ,r-argparser) diff --git a/gnu/packages/bittorrent.scm b/gnu/packages/bittorrent.scm index a9d62a5664..ce1e93ef00 100644 --- a/gnu/packages/bittorrent.scm +++ b/gnu/packages/bittorrent.scm @@ -373,7 +373,7 @@ and will take advantage of multiple processor cores where possible.") (define-public libtorrent-rasterbar (package (name "libtorrent-rasterbar") - (version "1.1.7") + (version "1.1.8") (source (origin (method url-fetch) (uri @@ -383,7 +383,7 @@ and will take advantage of multiple processor cores where possible.") "/libtorrent-rasterbar-" version ".tar.gz")) (sha256 (base32 - "1agkcyjs7xscx4sgkg2ri4nm4v736xsg3br2v8jcrph86dlbycw1")))) + "0pcdy26l5ivcs78y2bqh2qca83ikzjfchw5815xh69qf8g88zgvb")))) (build-system gnu-build-system) (arguments `(#:configure-flags diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm index 6e4e021180..de85ead174 100644 --- a/gnu/packages/bootloaders.scm +++ b/gnu/packages/bootloaders.scm @@ -357,7 +357,7 @@ tree binary files. These are board description files used by Linux and BSD.") (define u-boot (package (name "u-boot") - (version "2018.05") + (version "2018.07") (source (origin (method url-fetch) (uri (string-append @@ -365,10 +365,12 @@ tree binary files. These are board description files used by Linux and BSD.") "u-boot-" version ".tar.bz2")) (sha256 (base32 - "0j60p4iskzb4hamxgykc6gd7xchxfka1zwh8hv08r9rrc4m3r8ad")))) + "1m7nw64mxflpc6sqvnz2kb5fxfkb4mrpy8b1wi15dcwipj4dy44z")))) (native-inputs `(("bc" ,bc) + ("bison" ,bison) ("dtc" ,dtc) + ("flex" ,flex) ("openssl" ,openssl) ("python-2" ,python-2) ("python2-coverage" ,python2-coverage) @@ -423,8 +425,7 @@ def test_ctrl_c")) (apply invoke "make" "tools_defconfig" make-flags))) (replace 'build (lambda* (#:key inputs make-flags #:allow-other-keys) - (apply invoke "make" "tools-only" make-flags) - (apply invoke "make" "envtools" make-flags))) + (apply invoke "make" "tools-all" make-flags))) (replace 'install (lambda* (#:key outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) @@ -441,7 +442,8 @@ def test_ctrl_c")) "tools/mkimage" "tools/proftool" "tools/fdtgrep" - "tools/env/fw_printenv")) + "tools/env/fw_printenv" + "tools/sunxi-spl-image-builder")) #t))) (delete 'check) (add-after 'install 'check @@ -506,7 +508,18 @@ board-independent tools."))) (let* ((out (assoc-ref outputs "out")) (libexec (string-append out "/libexec")) (uboot-files (append - (find-files "." ".*\\.(bin|efi|img|spl|itb|dtb|rksd)$") + (remove + ;; Those would not be reproducible + ;; because of the randomness used + ;; to produce them. + ;; It's expected that the user will + ;; use u-boot-tools to generate them + ;; instead. + (lambda (name) + (string-suffix? + "sunxi-spl-with-ecc.bin" + name)) + (find-files "." ".*\\.(bin|efi|img|spl|itb|dtb|rksd)$")) (find-files "." "^(MLO|SPL)$")))) (mkdir-p libexec) (install-file ".config" libexec) @@ -517,7 +530,8 @@ board-independent tools."))) (let ((target-file (string-append libexec "/" file))) (mkdir-p (dirname target-file)) (copy-file file target-file))) - uboot-files)))))))))) + uboot-files) + #t))))))))) (define-public u-boot-vexpress (make-u-boot-package "vexpress_ca9x4" "arm-linux-gnueabihf")) @@ -577,6 +591,9 @@ board-independent tools."))) (define-public u-boot-cubieboard (make-u-boot-package "Cubieboard" "arm-linux-gnueabihf")) +(define-public u-boot-cubietruck + (make-u-boot-package "Cubietruck" "arm-linux-gnueabihf")) + (define-public u-boot-puma-rk3399 (let ((base (make-u-boot-package "puma-rk3399" "aarch64-linux-gnu"))) (package diff --git a/gnu/packages/busybox.scm b/gnu/packages/busybox.scm index 4cdea3a294..480b777574 100644 --- a/gnu/packages/busybox.scm +++ b/gnu/packages/busybox.scm @@ -1,6 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014 John Darrington <jmd@gnu.org> -;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il> +;;; Copyright © 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr> ;;; ;;; This file is part of GNU Guix. @@ -31,7 +31,7 @@ (define-public busybox (package (name "busybox") - (version "1.26.2") + (version "1.29.1") (source (origin (method url-fetch) (uri (string-append @@ -39,11 +39,18 @@ version ".tar.bz2")) (sha256 (base32 - "05mg6rh5smkzfwqfcazkpwy6h6555llsazikqnvwkaf17y8l8gns")))) + "1hqlr5b3bsyb6avadz1z4za6pyl32r1krnpcpwwqilhnx8q0f9gw")))) (build-system gnu-build-system) (arguments '(#:phases (modify-phases %standard-phases + (add-before 'configure 'disable-taskset + ;; This feature fails its tests in the build environment, + ;; was default 'n' until after 1.26.2. + (lambda _ + (substitute* "util-linux/taskset.c" + (("default y") "default n")) + #t)) (replace 'configure (lambda _ (invoke "make" "defconfig"))) (replace 'check diff --git a/gnu/packages/cdrom.scm b/gnu/packages/cdrom.scm index 027a333d67..384fc57317 100644 --- a/gnu/packages/cdrom.scm +++ b/gnu/packages/cdrom.scm @@ -418,7 +418,7 @@ graphical interface.") (define-public libcue (package (name "libcue") - (version "2.2.0") + (version "2.2.1") (source (origin (method url-fetch) (uri (string-append @@ -427,8 +427,10 @@ graphical interface.") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "0y9808vbly1w6i3diaad9csjmmw6iaw572wjjr68ssqamsw193rj")))) + "000j5xqp7cc7njwlixr9byahz9kn8pcfdgm76afwv4p8nbmw6yzj")))) (build-system cmake-build-system) + (arguments + `(#:configure-flags '("-DBUILD_SHARED_LIBS=ON"))) (native-inputs `(("bison" ,bison) ("flex" ,flex))) diff --git a/gnu/packages/chemistry.scm b/gnu/packages/chemistry.scm index f1359b2cf6..2d7cb7aad1 100644 --- a/gnu/packages/chemistry.scm +++ b/gnu/packages/chemistry.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2018 Konrad Hinsen <konrad.hinsen@fastmail.net> +;;; Copyright © 2018 Kei Kebreau <kkebreau@posteo.net> ;;; ;;; This file is part of GNU Guix. ;;; @@ -20,9 +21,16 @@ #:use-module (guix packages) #:use-module ((guix licenses) #:prefix license:) #:use-module (guix download) + #:use-module (gnu packages) + #:use-module (gnu packages algebra) + #:use-module (gnu packages compression) #:use-module (gnu packages gv) #:use-module (gnu packages maths) + #:use-module (gnu packages pkg-config) #:use-module (gnu packages python) + #:use-module (gnu packages xml) + #:use-module (guix build-system cmake) + #:use-module (guix build-system gnu) #:use-module (guix build-system python)) (define-public domainfinder @@ -54,6 +62,84 @@ single structure. The software is currently not actively maintained and works only with Python 2 and NumPy < 1.9.") (license license:cecill-c))) +(define-public inchi + (package + (name "inchi") + (version "1.05") + (source (origin + (method url-fetch) + (uri (string-append "http://www.inchi-trust.org/download/" + (string-join (string-split version #\.) "") + "/INCHI-1-SRC.zip")) + (sha256 + (base32 + "081pcjx1z5jm23fs1pl2r3bccia0ww8wfkzcjpb7byhn7b513hsa")) + (file-name (string-append name "-" version ".zip")))) + (build-system gnu-build-system) + (arguments + '(#:tests? #f ; no check target + #:phases + (modify-phases %standard-phases + (delete 'configure) ; no configure script + (add-before 'build 'chdir-to-build-directory + (lambda _ (chdir "INCHI_EXE/inchi-1/gcc") #t)) + (add-after 'build 'build-library + (lambda _ + (chdir "../../../INCHI_API/libinchi/gcc") + (invoke "make"))) + (replace 'install + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bin (string-append out "/bin")) + (doc (string-append out "/share/doc/inchi")) + (include-dir (string-append out "/include/inchi")) + (lib (string-append out "/lib/inchi")) + (inchi-doc (assoc-ref inputs "inchi-doc")) + (unzip (string-append (assoc-ref inputs "unzip") + "/bin/unzip"))) + (chdir "../../..") + ;; Install binary. + (with-directory-excursion "INCHI_EXE/bin/Linux" + (rename-file "inchi-1" "inchi") + (install-file "inchi" bin)) + ;; Install libraries. + (with-directory-excursion "INCHI_API/bin/Linux" + (for-each (lambda (file) + (install-file file lib)) + (find-files "." "libinchi\\.so\\.1\\.*"))) + ;; Install header files. + (with-directory-excursion "INCHI_BASE/src" + (for-each (lambda (file) + (install-file file include-dir)) + (find-files "." "\\.h$"))) + ;; Install documentation. + (mkdir-p doc) + (invoke unzip "-j" "-d" doc inchi-doc) + #t)))))) + (native-inputs + `(("unzip" ,unzip) + ("inchi-doc" + ,(origin + (method url-fetch) + (uri (string-append "http://www.inchi-trust.org/download/" + (string-join (string-split version #\.) "") + "/INCHI-1-DOC.zip")) + (sha256 + (base32 + "1id1qb2y4lwsiw91qr2yqpn6kxbwjwhjk0hb2rwk4fxhdqib6da6")) + (file-name (string-append name "-" version ".zip")))))) + (home-page "https://www.inchi-trust.org") + (synopsis "Utility for manipulating machine-readable chemical structures") + (description + "The @dfn{InChI} (IUPAC International Chemical Identifier) algorithm turns +chemical structures into machine-readable strings of information. InChIs are +unique to the compound they describe and can encode absolute stereochemistry +making chemicals and chemistry machine-readable and discoverable. A simple +analogy is that InChI is the bar-code for chemistry and chemical structures.") + (license (license:non-copyleft + "file://LICENCE" + "See LICENCE in the distribution.")))) + (define with-numpy-1.8 (package-input-rewriting `((,python2-numpy . ,python2-numpy-1.8)))) @@ -117,3 +203,42 @@ neutron scattering spectra, but also computes other quantities. The software is currently not actively maintained and works only with Python 2 and NumPy < 1.9.") (license license:cecill))) + +(define-public openbabel + (package + (name "openbabel") + (version "2.4.1") + (source (origin + (method url-fetch) + (uri (string-append "mirror://sourceforge/" name "/" name "/" + version "/" name "-" version ".tar.gz")) + (sha256 + (base32 + "1z3d6xm70dpfikhwdnbzc66j2l49vq105ch041wivrfz5ic3ch90")) + (patches + (search-patches "openbabel-fix-crash-on-nwchem-output.patch")))) + (build-system cmake-build-system) + (arguments + `(#:configure-flags + (list "-DOPENBABEL_USE_SYSTEM_INCHI=ON" + (string-append "-DINCHI_LIBRARY=" + (assoc-ref %build-inputs "inchi") + "/lib/inchi/libinchi.so.1") + (string-append "-DINCHI_INCLUDE_DIR=" + (assoc-ref %build-inputs "inchi") "/include/inchi")) + #:test-target "test")) + (native-inputs + `(("pkg-config" ,pkg-config))) + (inputs + `(("eigen" ,eigen) + ("inchi" ,inchi) + ("libxml2" ,libxml2) + ("zlib" ,zlib))) + (home-page "http://openbabel.org/wiki/Main_Page") + (synopsis "Chemistry data manipulation toolbox") + (description + "Open Babel is a chemical toolbox designed to speak the many languages of +chemical data. It's a collaborative project allowing anyone to search, convert, +analyze, or store data from molecular modeling, chemistry, solid-state +materials, biochemistry, or related areas.") + (license license:gpl2))) diff --git a/gnu/packages/ci.scm b/gnu/packages/ci.scm index ba95dc174b..85dbefae7a 100644 --- a/gnu/packages/ci.scm +++ b/gnu/packages/ci.scm @@ -4,6 +4,7 @@ ;;; Copyright © 2016, 2017 Mathieu Lirzin <mthl@gnu.org> ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com> ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net> +;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -184,8 +185,8 @@ their dependencies.") (license l:gpl3+)))) (define-public cuirass - (let ((commit "238f856e48ee333ed3e19fa32ce5e1742c650c67") - (revision "16")) + (let ((commit "7b2f9e0de1ad2d320973b7aea132a8afcad8bece") + (revision "17")) (package (name "cuirass") (version (string-append "0.0.1-" revision "." (string-take commit 7))) @@ -197,7 +198,7 @@ their dependencies.") (file-name (string-append name "-" version)) (sha256 (base32 - "15iwdgy561gnsr224rs5z8qn7nrsh1wdlsxr8gwxyk0v4zp6yvbf")))) + "0knww99adgjh8s6f38z3hpwi9hxhmnvqj5g35pcj80xv8j4xj3y3")))) (build-system gnu-build-system) (arguments '(#:modules ((guix build utils) diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm index 2ca431b2c1..1c5e00ec95 100644 --- a/gnu/packages/compression.scm +++ b/gnu/packages/compression.scm @@ -642,16 +642,17 @@ sfArk file format to the uncompressed sf2 format.") (define-public libmspack (package (name "libmspack") - (version "0.6") + (home-page "https://cabextract.org.uk/libmspack/") + (version "0.7") (source (origin (method url-fetch) - (uri (string-append "http://www.cabextract.org.uk/libmspack/libmspack-" - version "alpha.tar.gz")) + (uri (string-append home-page name "-" version "alpha.tar.gz")) (sha256 - (base32 "08gr2pcinas6bdqz3k0286g5cnksmcx813skmdwyca6bmj1fxnqy")))) + (base32 "0wi7ydq8vjiq0kfnpkj2d6vll2s49x38bywnsdqphqb0vdn53q1n")))) (build-system gnu-build-system) - (home-page "http://www.cabextract.org.uk/libmspack/") + (arguments + `(#:configure-flags '("--disable-static"))) (synopsis "Compression tools for some formats used by Microsoft") (description "The purpose of libmspack is to provide both compression and @@ -981,24 +982,66 @@ provides encoder and a decoder libraries: libbrotlienc and libbrotlidec, respectively, based on the reference implementation from Google.") (license license:expat)))) +(define-public bsdiff + (package + (name "bsdiff") + (version "4.3") + (home-page "https://www.daemonology.net/bsdiff/") + (source (origin + (method url-fetch) + (uri (string-append home-page name "-" version ".tar.gz")) + (sha256 + (base32 + "0j2zm3z271x5aw63mwhr3vymzn45p2vvrlrpm9cz2nywna41b0hq")))) + (build-system gnu-build-system) + (arguments + `(#:make-flags (list "INSTALL=install" "CC=gcc" + (string-append "PREFIX=" (assoc-ref %outputs "out"))) + #:phases (modify-phases %standard-phases + (delete 'configure) + (add-before 'build 'fix-Makefile + (lambda _ + (substitute* "Makefile" + ;; Adjust syntax to make it compatible with GNU Make. + (("^\\.") "") + ;; Help install(1) create the target directory. + (("\\$\\{PREFIX\\}") "-D -t ${PREFIX}")) + #t))) + #:tests? #f)) ;no tests + (inputs + `(("bzip2" ,bzip2))) + (synopsis "Patch binary files") + (description + "@command{bsdiff} and @command{bspatch} are tools for building and +applying patches to binary files. By using suffix sorting (specifically +Larsson and Sadakane's @code{qsufsort}) and taking advantage of how +executable files change, bsdiff routinely produces binary patches 50-80% +smaller than those produced by @code{Xdelta}.") + (license license:bsd-2))) + (define-public cabextract (package (name "cabextract") - (version "1.6") + (home-page "https://cabextract.org.uk/") + (version "1.7") (source (origin (method url-fetch) - (uri (string-append - "http://cabextract.org.uk/cabextract-" version ".tar.gz")) + (uri (string-append home-page name "-" version ".tar.gz")) (sha256 (base32 - "1ysmmz25fjghq7mxb2anyyvr1ljxqxzi4piwjhk0sdamcnsn3rnf")))) + "1g86wmb8lkjiv2jarfz979ngbgg7d3si8x5il4g801604v406wi9")) + (modules '((guix build utils))) + (snippet + '(begin + ;; Delete bundled libmspack. + (delete-file-recursively "mspack") + #t)))) (build-system gnu-build-system) (arguments '(#:configure-flags '("--with-external-libmspack"))) (native-inputs `(("pkg-config" ,pkg-config))) (inputs `(("libmspack" ,libmspack))) - (home-page "http://www.cabextract.org.uk/") (synopsis "Tool to unpack Cabinet archives") (description "Extracts files out of Microsoft Cabinet (.cab) archives") ;; Some source files specify gpl2+, lgpl2+, however COPYING is gpl3. @@ -1889,19 +1932,19 @@ create, manipulate, read, and write Zip archive files.") (define-public libzip (package (name "libzip") - (version "1.3.2") + (version "1.5.1") (source (origin (method url-fetch) (uri (string-append "https://libzip.org/download/" name "-" version ".tar.xz")) (sha256 (base32 - "11g1hvm2bxa2v5plakfzcwyk5hb5fz4kgrkp38l0xhnv21888xv2")))) + "0wnkkvkq90wyawj9221i77sf3nix1vj3ygzdy59k8yvcjnv3bsh4")))) (native-inputs `(("perl" ,perl))) (inputs `(("zlib" ,zlib))) - (build-system gnu-build-system) + (build-system cmake-build-system) (home-page "https://libzip.org") (synopsis "C library for reading, creating, and modifying zip archives") (description "Libzip is a C library for reading, creating, and modifying diff --git a/gnu/packages/crypto.scm b/gnu/packages/crypto.scm index dd86843938..730895efd9 100644 --- a/gnu/packages/crypto.scm +++ b/gnu/packages/crypto.scm @@ -668,39 +668,32 @@ data on your platform, so the seed itself will be as random as possible. (license (list license:boost1.0 license:public-domain)))) (define-public libb2 - (let ((revision "1") ; upstream doesn't ‘do’ releases - (commit "60ea749837362c226e8501718f505ab138e5c19d")) - (package - (name "libb2") - (version (git-version "0.0.0" revision commit)) - (source (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/BLAKE2/libb2") - (commit commit))) - (file-name (git-file-name name version)) - (sha256 - (base32 - "07a2m8basxrsj9dsp5lj24y8jraj85lfy56756a7za1nfkgy04z7")))) - (build-system gnu-build-system) - (native-inputs - `(("autoconf" ,autoconf) - ("automake" ,automake) - ("libtool" ,libtool))) - (arguments - `(#:configure-flags - (list - ,@(if (any (cute string-prefix? <> (or (%current-system) - (%current-target-system))) - '("x86_64" "i686")) - ;; fat only checks for Intel optimisations - '("--enable-fat") - '()) - "--disable-native"))) ;don't optimise at build time - (home-page "https://blake2.net/") - (synopsis "Library implementing the BLAKE2 family of hash functions") - (description - "libb2 is a portable implementation of the BLAKE2 family of cryptographic + (package + (name "libb2") + (version "0.98") + (source (origin + (method url-fetch) + (uri (string-append + "https://github.com/BLAKE2/libb2/releases/download/v" + version "/libb2-" version ".tar.gz")) + (sha256 + (base32 + "0vq39cvwy05754l565xl11rqr2jvjb6ykjzca886vi9vm71y0sg8")))) + (build-system gnu-build-system) + (arguments + `(#:configure-flags + (list + ,@(if (any (cute string-prefix? <> (or (%current-system) + (%current-target-system))) + '("x86_64" "i686")) + ;; fat only checks for Intel optimisations + '("--enable-fat") + '()) + "--disable-native"))) ;don't optimise at build time + (home-page "https://blake2.net/") + (synopsis "Library implementing the BLAKE2 family of hash functions") + (description + "libb2 is a portable implementation of the BLAKE2 family of cryptographic hash functions. It includes optimised implementations for IA-32 and AMD64 processors, and an interface layer that automatically selects the best implementation for the processor it is run on. @@ -709,7 +702,7 @@ implementation for the processor it is run on. that are faster than MD5, SHA-1, SHA-2, and SHA-3, yet are at least as secure as the latest standard, SHA-3. It is an improved version of the SHA-3 finalist BLAKE.") - (license license:public-domain)))) + (license license:public-domain))) (define-public rhash (package @@ -755,14 +748,14 @@ SHA256, SHA512, SHA3, AICH, ED2K, Tiger, DC++ TTH, BitTorrent BTIH, GOST R (define-public botan (package (name "botan") - (version "2.6.0") + (version "2.7.0") (source (origin (method url-fetch) (uri (string-append "https://botan.randombit.net/releases/" "Botan-" version ".tgz")) (sha256 (base32 - "1iawmymmnp5j2mcjj70slivn6bgg8gbpppldc1rjqw5sbdan3wn1")))) + "142aqabwc266jxn8wrp0f1ffrmcvdxwvyh8frb38hx9iaqazjbg4")))) (build-system gnu-build-system) (arguments '(#:phases @@ -797,3 +790,26 @@ specifically designed to be easy to call from other languages. A Python binding using ctypes is included, and several other language bindings are available.") (home-page "https://botan.randombit.net") (license license:bsd-2))) + +(define-public ccrypt + (package + (name "ccrypt") + (version "1.10") + (source (origin + (method url-fetch) + (uri (string-append "mirror://sourceforge/ccrypt/ccrypt/" + version "/ccrypt-" version ".tar.gz")) + (sha256 + (base32 + "184v9676hx2w875cz04rd3a20wrcms33a1zwybvapb0g2yi6vml7")))) + (build-system gnu-build-system) + (home-page "http://ccrypt.sourceforge.net") + (synopsis "Command-line utility for encrypting and decrypting files and streams") + (description "@command{ccrypt} is a utility for encrypting and decrypting +files and streams. It was designed as a replacement for the standard unix +@command{crypt} utility, which is notorious for using a very weak encryption +algorithm. @command{ccrypt} is based on the Rijndael block cipher, a version of +which is also used in the Advanced Encryption Standard (AES, see +@url{http://www.nist.gov/aes}). This cipher is believed to provide very strong +security.") + (license license:gpl2))) diff --git a/gnu/packages/cups.scm b/gnu/packages/cups.scm index d365587022..3150c25019 100644 --- a/gnu/packages/cups.scm +++ b/gnu/packages/cups.scm @@ -1,7 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net> ;;; Copyright © 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org> -;;; Copyright © 2015, 2016, 2017 Efraim Flashner <efraim@flashner.co.il> +;;; Copyright © 2015, 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2016 Danny Milosavljevic <dannym@scratchpost.org> ;;; Copyright © 2017 Leo Famulari <leo@famulari.name> ;;; Copyright © 2017 Mark H Weaver <mhw@netris.org> @@ -46,7 +46,9 @@ #:use-module (guix build-system gnu) #:use-module (guix download) #:use-module ((guix licenses) #:prefix license:) - #:use-module (guix packages)) + #:use-module (guix packages) + #:use-module (guix utils) + #:use-module (srfi srfi-1)) (define-public cups-filters (package @@ -174,6 +176,7 @@ filters for the PDF-centric printing workflow introduced by OpenPrinting.") (define-public cups-minimal (package (name "cups-minimal") + (replacement cups-minimal-2.2.8) (version "2.2.6") (source (origin @@ -234,8 +237,21 @@ describe printer capabilities and features, and a wide variety of generic and device-specific programs to convert and print many types of files.") (license license:gpl2))) +(define-public cups-minimal-2.2.8 + (package + (inherit cups-minimal) + (version "2.2.8") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/apple/cups/releases/download/v" + version "/cups-" version "-source.tar.gz")) + (sha256 + (base32 + "1r7r7b3nqpzc1a9dczqpj2mr8rkcwf01676v11sp4j7w4qfzqs1r")))))) + (define-public cups - (package (inherit cups-minimal) + (package/inherit cups-minimal (name "cups") (arguments `(;; Three tests fail: @@ -506,6 +522,19 @@ device-specific programs to convert and print many types of files.") `(("perl" ,perl) ("pkg-config" ,pkg-config))))) +(define-public hplip-minimal + (package + (inherit hplip) + (name "hplip-minimal") + (arguments + (substitute-keyword-arguments (package-arguments hplip) + ((#:configure-flags cf) + `(delete "--enable-qt5" ,cf)))) + (inputs + (fold alist-delete (package-inputs hplip) + '("python-pygobject" "python-pyqt"))) + (synopsis "GUI-less version of hplip"))) + (define-public foomatic-filters (package (name "foomatic-filters") diff --git a/gnu/packages/curl.scm b/gnu/packages/curl.scm index 65bc698389..e724fd147b 100644 --- a/gnu/packages/curl.scm +++ b/gnu/packages/curl.scm @@ -51,7 +51,7 @@ (package (name "curl") (version "7.59.0") - (replacement curl-7.60.0) + (replacement curl-7.61.0) (source (origin (method url-fetch) (uri (string-append "https://curl.haxx.se/download/curl-" @@ -141,10 +141,10 @@ tunneling, and so on.") "See COPYING in the distribution.")) (home-page "https://curl.haxx.se/"))) -(define-public curl-7.60.0 +(define-public curl-7.61.0 (package (inherit curl) - (version "7.60.0") + (version "7.61.0") (source (origin (method url-fetch) @@ -152,7 +152,7 @@ tunneling, and so on.") version ".tar.xz")) (sha256 (base32 - "1876ck0smbqz3xakm7s6q6gh4zarh9pv3izf4vlzgpc9xn6zydl7")))))) + "080p9r2kln8cbfj0rqfn6wqp5kdn9k5wp720nirkcw845lcmavpg")))))) (define-public kurly (package diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm index c285d2f53b..cbc5ffc2c6 100644 --- a/gnu/packages/databases.scm +++ b/gnu/packages/databases.scm @@ -651,7 +651,7 @@ Language.") #t)))) (build-system cmake-build-system) (arguments - '(#:configure-flags + `(#:configure-flags '("-DBUILD_CONFIG=mysql_release" ;; Linking with libarchive fails, like this: @@ -684,6 +684,17 @@ Language.") "-DINSTALL_SHAREDIR=share") #:phases (modify-phases %standard-phases + ;; Apply this patch that's only needed on ARM. + ,@(if (and (not (%current-target-system)) + (string=? "armhf-linux" (%current-system))) + `((add-after 'unpack 'apply-patch + (lambda* (#:key inputs #:allow-other-keys) + (let ((patch (assoc-ref inputs "gcc-ice-patch"))) + (invoke "patch" "-p1" "--force" + "--input" patch) + #t)))) + '()) + (add-after 'unpack 'unbundle (lambda _ ;; The bundled PCRE in MariaDB has a patch that was upstreamed @@ -771,7 +782,10 @@ Language.") #t)))))) (native-inputs `(("bison" ,bison) - ("perl" ,perl))) + ("perl" ,perl) + ,@(if (string=? "armhf-linux" (%current-system)) + `(("gcc-ice-patch" ,(search-patch "mariadb-gcc-ice.patch"))) + '()))) (inputs `(("jemalloc" ,jemalloc) ("libaio" ,libaio) @@ -792,6 +806,7 @@ Language.") as a drop-in replacement of MySQL.") (license license:gpl2))) +;; Don't forget to update the other postgresql packages when upgrading this one. (define-public postgresql (package (name "postgresql") @@ -840,14 +855,14 @@ pictures, sounds, or video.") (package (inherit postgresql) (name "postgresql") - (version "9.6.8") + (version "9.6.9") (source (origin (method url-fetch) (uri (string-append "https://ftp.postgresql.org/pub/source/v" version "/postgresql-" version ".tar.bz2")) (sha256 (base32 - "0w7bwf19wbdd3jjbjv03cnx56qka4801srcbsayk9v792awv7zga")))))) + "0biy8j69dbvdmrag55pdszpc0702agzqhhcwdx21xp02mzim4ydr")))))) (define-public qdbm (package @@ -1160,14 +1175,14 @@ is in the public domain.") (define-public tdb (package (name "tdb") - (version "1.3.15") + (version "1.3.16") (source (origin (method url-fetch) (uri (string-append "https://www.samba.org/ftp/tdb/tdb-" version ".tar.gz")) (sha256 (base32 - "0a37jhpij8wr4f4pjqdlwnffy2l6a2vkqdpz1bqxj6v06cwbz8dl")))) + "1ibcz466xwk1x6xvzlgzd5va4lyrjzm3rnjak29kkwk7cmhw4gva")))) (build-system gnu-build-system) (arguments '(#:phases diff --git a/gnu/packages/dav.scm b/gnu/packages/dav.scm index 9d0479b1e1..1a154ea351 100644 --- a/gnu/packages/dav.scm +++ b/gnu/packages/dav.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015, 2016, 2017 Leo Famulari <leo@famulari.name> +;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il> ;;; ;;; This file is part of GNU Guix. ;;; @@ -57,31 +58,32 @@ clients.") (define-public vdirsyncer (package (name "vdirsyncer") - (version "0.16.6") + (version "0.16.7") (source (origin (method url-fetch) (uri (pypi-uri name version)) (sha256 (base32 - "07iqq5c53cfrb5xnmam1rsl683hc3rykmdak896n2gm81r361c66")))) + "1vqjhn2bffy2bx45a1r14crsyn2cylf5by567g44c4mhpjwwz6vc")))) (build-system python-build-system) (arguments - `(#:phases (modify-phases %standard-phases - (replace 'check - (lambda* (#:key inputs outputs #:allow-other-keys) - (add-installed-pythonpath inputs outputs) - (setenv "DETERMINISTIC_TESTS" "true") - (setenv "DAV_SERVER" "radicale") - (setenv "REMOTESTORAGE_SERVER" "skip") - (zero? (system* "make" "test")))) - (add-after 'install 'manpage - (lambda* (#:key inputs outputs #:allow-other-keys) - (zero? (system* "make" "--directory=docs/" "man")) - (install-file - "docs/_build/man/vdirsyncer.1" - (string-append - (assoc-ref outputs "out") - "/share/man/man1"))))))) + `(#:phases (modify-phases %standard-phases + (replace 'check + (lambda* (#:key inputs outputs #:allow-other-keys) + (add-installed-pythonpath inputs outputs) + (setenv "DETERMINISTIC_TESTS" "true") + (setenv "DAV_SERVER" "radicale") + (setenv "REMOTESTORAGE_SERVER" "skip") + (invoke "make" "test"))) + (add-after 'install 'manpage + (lambda* (#:key inputs outputs #:allow-other-keys) + (invoke "make" "--directory=docs/" "man") + (install-file + "docs/_build/man/vdirsyncer.1" + (string-append + (assoc-ref outputs "out") + "/share/man/man1")) + #t))))) (native-inputs `(("python-setuptools-scm" ,python-setuptools-scm) ("python-sphinx" ,python-sphinx) @@ -105,5 +107,5 @@ between two storage locations. The most popular purpose is to synchronize a CalDAV or CardDAV server with a local folder or file. The local data can then be accessed via a variety of programs, none of which have to know or worry about syncing to a server.") - (home-page "https://github.com/untitaker/vdirsyncer") + (home-page "https://github.com/pimutils/vdirsyncer") (license bsd-3))) diff --git a/gnu/packages/debian.scm b/gnu/packages/debian.scm index e1dd9d1485..1974672fb6 100644 --- a/gnu/packages/debian.scm +++ b/gnu/packages/debian.scm @@ -17,6 +17,7 @@ (define-module (gnu packages debian) #:use-module ((guix licenses) #:prefix license:) #:use-module (guix download) + #:use-module (guix git-download) #:use-module (guix packages) #:use-module (guix build-system gnu) #:use-module (guix build-system trivial) @@ -112,15 +113,17 @@ contains the archive keys used for that.") (define-public debootstrap (package (name "debootstrap") - (version "1.0.101") + (version "1.0.106") (source (origin - (method url-fetch) - (uri (string-append "mirror://debian/pool/main/d/" name "/" - name "_" version ".tar.gz")) + (method git-fetch) + (uri (git-reference + (url "https://salsa.debian.org/installer-team/debootstrap.git") + (commit version))) + (file-name (git-file-name name version)) (sha256 (base32 - "1p1a81s8hq73byd7256iljdls389x2q7w6srgrgfmx5bl1csnzp3")))) + "1fm5bgllcwgwizrqi4sn8p4fpbzhbzgwprrfppfq9hqdzbmlfmnv")))) (build-system gnu-build-system) (arguments `(#:phases @@ -165,7 +168,7 @@ contains the archive keys used for that.") `(("binutils" ,binutils) ("gnupg" ,gnupg) ("perl" ,perl))) - (home-page "https://anonscm.debian.org/cgit/d-i/debootstrap.git") + (home-page "https://tracker.debian.org/pkg/debootstrap") (synopsis "Bootstrap a basic Debian system") (description "Debootstrap is used to create a Debian base system from scratch, without requiring the availability of @code{dpkg} or @code{apt}. diff --git a/gnu/packages/dictionaries.scm b/gnu/packages/dictionaries.scm index 5c47b24ff7..42dc291975 100644 --- a/gnu/packages/dictionaries.scm +++ b/gnu/packages/dictionaries.scm @@ -257,7 +257,8 @@ and a Python library.") (add-after 'install 'emacs-install (lambda* (#:key inputs outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) - (dest (string-append out "/share/emacs/site-lisp")) + (dest (string-append out "/share/emacs/site-lisp/guix.d/" + ,name "-" ,version)) (emacs (string-append (assoc-ref inputs "emacs") "/bin/emacs"))) (install-file "google-translate-mode.el" dest) (emacs-generate-autoloads ,name dest))))) diff --git a/gnu/packages/display-managers.scm b/gnu/packages/display-managers.scm index b0ad3df788..5baaa6c102 100644 --- a/gnu/packages/display-managers.scm +++ b/gnu/packages/display-managers.scm @@ -1,12 +1,11 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2013 Joshua Grant <tadni@riseup.net> -;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2014, 2018 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2014 Andreas Enge <andreas@enge.fr> ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net> ;;; Copyright © 2017 Sou Bunnbu <iyzsong@gmail.com> ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com> ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr> -;;; Copyright © 2018 Stefan Stefanović <stefanx2ovic@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -135,7 +134,7 @@ Qt-style API for Wayland clients.") (define-public sddm (package (name "sddm") - (version "0.17.0") + (version "0.18.0") (source (origin (method url-fetch) (uri (string-append @@ -144,8 +143,7 @@ Qt-style API for Wayland clients.") "sddm-" version ".tar.xz")) (sha256 (base32 - "0ch6rdppgy2vbzw0c2x9a4c6ry46vx7p6b76d8xbh2nvxh23xv0k")) - (patches (search-patches "sddm-fix-build-with-qt-5.11-1024.patch")))) + "0icyi9nqgbp2v6dwh3n3jzff9jv2xy8d4rbsz89hd65x7c3hrv87")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules) @@ -258,7 +256,7 @@ create smooth, animated user interfaces.") (inputs `(("audit" ,audit) ("linux-pam" ,linux-pam) - ("util-linux" ,util-linux) ; for sbin/nologin + ("shadow" ,shadow) ;for sbin/nologin ("libgcrypt" ,libgcrypt) ("libxcb" ,libxcb))) (native-inputs diff --git a/gnu/packages/dns.scm b/gnu/packages/dns.scm index 78479b2d32..ffa442f4d6 100644 --- a/gnu/packages/dns.scm +++ b/gnu/packages/dns.scm @@ -9,6 +9,7 @@ ;;; Copyright © 2016 Marius Bakke <mbakke@fastmail.com> ;;; Copyright © 2017 Vasile Dumitrascu <va511e@yahoo.com> ;;; Copyright © 2017 Gregor Giesen <giesen@zaehlwerk.net> +;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -29,7 +30,9 @@ #:use-module (gnu packages admin) #:use-module (gnu packages autotools) #:use-module (gnu packages base) + #:use-module (gnu packages bash) #:use-module (gnu packages databases) + #:use-module (gnu packages compression) #:use-module (gnu packages crypto) #:use-module (gnu packages datastructures) #:use-module (gnu packages flex) @@ -55,7 +58,8 @@ #:use-module (guix packages) #:use-module (guix download) #:use-module (guix utils) - #:use-module (guix build-system gnu)) + #:use-module (guix build-system gnu) + #:use-module (guix build-system trivial)) (define-public dnsmasq (package @@ -99,16 +103,15 @@ and BOOTP/TFTP for network booting of diskless machines.") (define-public isc-bind (package (name "bind") - (version "9.12.1-P2") + (version "9.12.2") (source (origin (method url-fetch) (uri (string-append "ftp://ftp.isc.org/isc/bind9/" version "/" name "-" version ".tar.gz")) - (patches (search-patches "bind-CVE-2018-5738.patch")) (sha256 (base32 - "0a9dvyg1dk7vpqn9gz7p5jas3bz7z22bjd66b98g1qk16i2w7rqd")))) + "0ll46igs9xfq2qclc5wzqsnj3zv7ssga0544gm24s1m7765lqslz")))) (build-system gnu-build-system) (outputs `("out" "utils")) (inputs @@ -288,7 +291,7 @@ asynchronous fashion.") (define-public unbound (package (name "unbound") - (version "1.6.8") + (version "1.7.3") (source (origin (method url-fetch) @@ -296,7 +299,7 @@ asynchronous fashion.") version ".tar.gz")) (sha256 (base32 - "0jfxhh4gc5amhndikskz1s7da27ycn442j3l20bm992n7zijid73")))) + "0bb0p8nbda77ghx20yfl7hqxm9x709223q35465v99i8v4ay27f1")))) (build-system gnu-build-system) (outputs '("out" "python")) (native-inputs @@ -576,3 +579,89 @@ synthesis, and on-the-fly re-configuration.") license:lgpl2.0+ ; parts of scr/contrib/ucw license:public-domain ; src/contrib/fnv and possibly murmurhash3 license:gpl3+)))) ; everything else + +(define-public ddclient + (package + (name "ddclient") + (version "3.8.3") + (source (origin + (method url-fetch) + (uri (string-append "mirror://sourceforge/ddclient/ddclient/ddclient-" + version "/ddclient-" version ".tar.gz")) + (sha256 + (base32 + "1j8zdn7fy7i0bjk3jf0hxnbnshc2yf054vxq64imxdpfd7n5zgfy")))) + (build-system trivial-build-system) ; no Makefile.PL + (native-inputs + `(("bash" ,bash) + ("gzip" ,gzip) + ("perl" ,perl) + ("tar" ,tar))) + (inputs + `(("net-tools" ,net-tools) + ("inetutils" ,inetutils) ;logger + ("perl-io-socket-ssl" ,perl-io-socket-ssl) + ("perl-digest-sha1" ,perl-digest-sha1))) + (arguments + `(#:modules ((guix build utils) + (ice-9 match) + (srfi srfi-26)) + #:builder + (begin + (use-modules (guix build utils) + (ice-9 match) + (srfi srfi-26)) + ;; bootstrap + (setenv "PATH" (string-append + (assoc-ref %build-inputs "bash") "/bin" ":" + (assoc-ref %build-inputs "tar") "/bin" ":" + (assoc-ref %build-inputs "gzip") "/bin" ":" + (assoc-ref %build-inputs "perl") "/bin")) + ;; extract source + (invoke "tar" "xvf" (assoc-ref %build-inputs "source")) + ;; package + (with-directory-excursion (string-append ,name "-" ,version) + (let* ((out (assoc-ref %outputs "out")) + (bin (string-append out "/bin"))) + (let ((file "ddclient")) + (substitute* file + (("/usr/bin/perl") (which "perl")) + ;; Strictly use ‘/etc/ddclient/ddclient.conf’. + (("\\$\\{program\\}\\.conf") "/etc/ddclient/ddclient.conf") + (("\\$etc\\$program.conf") "/etc/ddclient/ddclient.conf") + ;; Strictly use ‘/var/cache/ddclient/ddclient.cache’ + (("\\$cachedir\\$program\\.cache") + "/var/cache/ddclient/ddclient.cache")) + (install-file file bin) + (wrap-program (string-append bin "/" file) + `("PATH" ":" = + ("$PATH" + ,@(map (lambda (input) + (match input + ((name . store) + (string-append store "/bin")))) + %build-inputs))) + `("PERL5LIB" ":" = + ,(delete + "" + (map (match-lambda + (((? (cut string-prefix? "perl-" <>) name) . dir) + (string-append dir "/lib/perl5/site_perl")) + (_ "")) + %build-inputs))))) + (for-each (cut install-file <> (string-append out + "/share/ddclient")) + (find-files "." "sample.*$"))))))) + (home-page "https://sourceforge.net/projects/ddclient/") + (synopsis "Address updating utility for dynamic DNS services") + (description "This package provides a client to update dynamic IP +addresses with several dynamic DNS service providers, such as +@uref{https://www.dyndns.com/account/login.html,DynDNS.com}. + +This makes it possible to use a fixed hostname (such as myhost.dyndns.org) to +access a machine with a dynamic IP address. + +The client supports both dynamic and (near) static services, as well as MX +record and alternative name management. It caches the address, and only +attempts the update when it has changed.") + (license license:gpl2+))) diff --git a/gnu/packages/dunst.scm b/gnu/packages/dunst.scm index eaad227747..7328e442cf 100644 --- a/gnu/packages/dunst.scm +++ b/gnu/packages/dunst.scm @@ -60,7 +60,7 @@ ("which" ,which))) (inputs `(("dbus" ,dbus) - ("gdk-pixbuf" ,gdk-pixbuf) + ("gdk-pixbuf" ,gdk-pixbuf+svg) ; for svg support ("glib" ,glib) ("cairo" ,cairo) ("pango" ,pango) diff --git a/gnu/packages/ebook.scm b/gnu/packages/ebook.scm index bf4b6a750e..a78e3e871f 100644 --- a/gnu/packages/ebook.scm +++ b/gnu/packages/ebook.scm @@ -75,7 +75,7 @@ (define-public calibre (package (name "calibre") - (version "3.17.0") + (version "3.28.0") (source (origin (method url-fetch) @@ -84,7 +84,7 @@ version ".tar.xz")) (sha256 (base32 - "1w6hw1s0d4daa4q2ykzhxdndiq61l8z7ls7rxh7k7p62ia0i5sxp")) + "0b3vv03c6m6972sk8zj3zc5sq6b9837irnfgjlqhv9z5i75m0414")) ;; Remove non-free or doubtful code, see ;; https://lists.gnu.org/archive/html/guix-devel/2015-02/msg00478.html (modules '((guix build utils))) diff --git a/gnu/packages/elixir.scm b/gnu/packages/elixir.scm index ed6bd00236..26120327f4 100644 --- a/gnu/packages/elixir.scm +++ b/gnu/packages/elixir.scm @@ -4,6 +4,7 @@ ;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net> ;;; Copyright © 2017 nee <nee.git@cock.li> ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr> +;;; Copyright (C) 2018 Nils Gillmann <ng0@n0.is> ;;; ;;; This file is part of GNU Guix. ;;; @@ -32,7 +33,7 @@ (define-public elixir (package (name "elixir") - (version "1.5.3") + (version "1.6.6") (source (origin (method url-fetch) (uri (string-append "https://github.com/elixir-lang/elixir" @@ -40,10 +41,11 @@ (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "0acnxfwvkx1m1d0h5z051mz95n35zm468hcvc3wpmn17c15h5ihg")))) + "0c9qz5hasa59a9x1iwpcqpqj6wdbzpijfxqfmzimwj5z8q37nl3l")))) (build-system gnu-build-system) (arguments `(#:test-target "test" + #:parallel-tests? #f ;see <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=32171#23> #:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out"))) #:phases diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm index 9f055cfc51..114fcee343 100644 --- a/gnu/packages/emacs.scm +++ b/gnu/packages/emacs.scm @@ -35,6 +35,9 @@ ;;; Copyright © 2018 Sohom Bhattacharjee <soham.bhattacharjee15@gmail.com> ;;; Copyright © 2018 Mathieu Lirzin <mthl@gnu.org> ;;; Copyright © 2018 Pierre Neidhardt <ambrevar@gmail.com> +;;; 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> ;;; ;;; This file is part of GNU Guix. ;;; @@ -106,6 +109,7 @@ #:use-module (gnu packages gd) #:use-module (gnu packages fontutils) #:use-module (gnu packages password-utils) + #:use-module (gnu packages pulseaudio) #:use-module (gnu packages xdisorg) #:use-module (gnu packages shells) #:use-module (gnu packages gnupg) @@ -198,7 +202,7 @@ ("libxft" ,libxft) ("libtiff" ,libtiff) ("giflib" ,giflib) - ("libjpeg" ,libjpeg-8) + ("libjpeg" ,libjpeg) ("imagemagick" ,imagemagick) ("acl" ,acl) @@ -729,7 +733,15 @@ programs.") version "/flycheck-" version ".tar")) (sha256 (base32 - "01rnwan16m7cyyrfca3c5c60mbj2r3knkpzbhji2fczsf0wns240")))) + "01rnwan16m7cyyrfca3c5c60mbj2r3knkpzbhji2fczsf0wns240")) + (modules '((guix build utils))) + (snippet `(begin + ;; Change 'flycheck-version' so that it does not + ;; attempt to get its version from pkg-info.el. + (substitute* "flycheck.el" + (("\\(pkg-info-version-info 'flycheck\\)") + (string-append "\"" ,version "\""))) + #t)))) (build-system emacs-build-system) (propagated-inputs `(("emacs-dash" ,emacs-dash))) @@ -4182,6 +4194,99 @@ errors and strict-mode warnings, smart line-wrapping within comments and strings, and code folding.") (license license:gpl3+))) +(define-public emacs-nodejs-repl + (package + (name "emacs-nodejs-repl") + (version "0.1.6") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/abicky/nodejs-repl.el" + "/archive/" version ".tar.gz")) + (sha256 + (base32 + "0sphg1jxi3a5l0gqdp27d0qgyjaiq2p293av9zm8ksm0vwqp3fr9")) + (file-name (string-append name "-" version ".tar.gz")))) + (build-system emacs-build-system) + (home-page "https://github.com/abicky/nodejs-repl.el") + (synopsis "Node.js REPL inside Emacs") + (description + "This program is derived from comint-mode and provides the following +features: + +@itemize +@item TAB completion same as Node.js REPL +@item file name completion in string +@item incremental history search +@end itemize") + (license license:gpl3+))) + +(define-public emacs-typescript-mode + (package + (name "emacs-typescript-mode") + (version "0.3") + (source (origin + (method url-fetch) + (uri (string-append + "https://github.com/ananthakumaran/typescript.el" + "/archive/v" version ".tar.gz")) + (sha256 + (base32 + "1gqjirm8scf0wysm7x97zdfbs4qa5nqdl64jfbkd18iskv5mg3rj")) + (file-name (string-append name "-" version ".tar.gz")))) + (build-system emacs-build-system) + (home-page "https://github.com/ananthakumaran/typescript.el") + (synopsis "Emacs major mode for editing Typescript code") + (description + "This is based on Karl Landstrom's barebones @code{typescript-mode}. +This is much more robust and works with @code{cc-mode}'s comment +filling (mostly). The modifications to the original @code{javascript.el} mode +mainly consisted in replacing \"javascript\" with \"typescript\" + +The main features of this Typescript mode are syntactic highlighting (enabled +with @code{font-lock-mode} or @code{global-font-lock-mode}), automatic +indentation and filling of comments and C preprocessor fontification.") + (license license:gpl3+))) + +(define-public emacs-tide + (package + (name "emacs-tide") + (version "2.8.3.1") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/ananthakumaran/tide" + "/archive/v" version ".tar.gz")) + (sha256 + (base32 + "1k0kzqiv1hfs0kqm37947snzhrsmand3i9chvm6a2r5lb8v9q47y")) + (file-name (string-append name "-" version ".tar.gz")))) + (build-system emacs-build-system) + (propagated-inputs + `(("emacs-dash" ,emacs-dash) + ("emacs-s" ,emacs-s) + ("emacs-flycheck" ,flycheck) + ("emacs-typescript-mode" ,emacs-typescript-mode))) + (home-page "https://github.com/ananthakumaran/tide") + (synopsis "Typescript IDE for Emacs") + (description + "Tide is an Interactive Development Environment (IDE) for Emacs which +provides the following features: + +@itemize +@item ElDoc +@item Auto complete +@item Flycheck +@item Jump to definition, Jump to type definition +@item Find occurrences +@item Rename symbol +@item Imenu +@item Compile On Save +@item Highlight Identifiers +@item Code Fixes +@item Code Refactor +@item Organize Imports +@end itemize") + (license license:gpl3+))) + (define-public emacs-markdown-mode (package (name "emacs-markdown-mode") @@ -4479,25 +4584,28 @@ Dust.js, React/JSX, Angularjs, ejs, etc.") (license license:gpl3+))) (define-public emacs-wgrep - (package - (name "emacs-wgrep") - (version "2.1.10") - (source (origin - (method url-fetch) - (uri (string-append - "https://github.com/mhayashi1120/Emacs-wgrep/archive/" - version ".tar.gz")) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "1r2bpypar70xg6dsx12x1k74f39ww930rday7rgqpyknzsx1k4l1")))) - (build-system emacs-build-system) - (home-page "https://github.com/mhayashi1120/Emacs-wgrep") - (synopsis "Edit a grep buffer and apply those changes to the files") - (description - "Emacs wgrep allows you to edit a grep buffer and apply those changes to -the file buffer.") - (license license:gpl3+))) + (let ((commit "414be70bd313e482cd9f0b70fd2daad4ee23497c")) + ;; Late commit fixes compatibility issue with Emacs 26+. + (package + (name "emacs-wgrep") + (version (git-version "2.1.10" "1" commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/mhayashi1120/Emacs-wgrep") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1sdhd587q3pg92lhiayph87azhalmf1gzrnsprkmqvnphv7mvks9")))) + (build-system emacs-build-system) + (home-page "https://github.com/mhayashi1120/Emacs-wgrep") + (synopsis "Edit a grep buffer and apply those changes to the files") + (description + "Emacs wgrep allows you to edit a grep buffer and apply those changes +to the file buffer. Several backends are supported beside the classic grep: +ack, ag, helm and pt.") + (license license:gpl3+)))) (define-public emacs-helm (package @@ -4761,11 +4869,11 @@ extensions.") (license license:gpl3+)))) (define-public emacs-evil-collection - (let ((commit "ac21b8957cfc22485cdaa316384edf9cb220d837") - (revision "1")) + (let ((commit "5d739f58118a5a316c4fe25adb4e13ccea3fdc10") + (revision "2")) (package (name "emacs-evil-collection") - (version (git-version "20180617" revision commit)) + (version (git-version "20180721" revision commit)) (source (origin (method git-fetch) (uri (git-reference @@ -4774,7 +4882,7 @@ extensions.") (file-name (string-append name "-" version "-checkout")) (sha256 (base32 - "082a3c5c2ls9ryqrl5kzb4z6bcprhqx8pypnlj1razbld3lny934")))) + "05p612qncd0cp5q61hq2ag1k558vhb10049xrc88n9l6qwz9bpk3")))) (build-system emacs-build-system) (propagated-inputs `(("emacs-evil" ,emacs-evil))) @@ -6135,14 +6243,14 @@ which code derived from Kelvin H's org-page.") (define-public emacs-xelb (package (name "emacs-xelb") - (version "0.14") + (version "0.15") (source (origin (method url-fetch) (uri (string-append "https://elpa.gnu.org/packages/xelb-" version ".tar")) (sha256 (base32 - "09flnbjy9ck784kprz036rwg9qk45hpv0w5hz3pz3zhwyk57fv74")))) + "031rvgprsqhf344p9wsczr50vj2qcpwdmhxi80jdbrsm7wyxf3qz")))) (build-system emacs-build-system) ;; The following functions and variables needed by emacs-xelb are ;; not included in emacs-minimal: @@ -6174,7 +6282,7 @@ It should enable you to implement low-level X11 applications.") (define-public emacs-exwm (package (name "emacs-exwm") - (version "0.18") + (version "0.19") (synopsis "Emacs X window manager") (source (origin (method url-fetch) @@ -6182,7 +6290,7 @@ It should enable you to implement low-level X11 applications.") version ".tar")) (sha256 (base32 - "1shz5bf4v4gg3arjaaldics5qkg3aiiaf3ngys8lb6qyxhcpvh6q")))) + "11xd2w4h3zdwkdxypvmcz8s7q72cn76lfr9js77jbizyj6b04lr0")))) (build-system emacs-build-system) (propagated-inputs `(("emacs-xelb" ,emacs-xelb))) @@ -7262,10 +7370,10 @@ messaging service.") ("bash-completion-prog" (string-append bash "/bin/bash")))) #t))))) (home-page "https://github.com/szermatt/emacs-bash-completion") - (synopsis "BASH completion for the shell buffer") + (synopsis "Bash completion for the shell buffer") (description "@code{bash-completion} defines dynamic completion hooks for shell-mode -and shell-command prompts that are based on bash completion.") +and shell-command prompts that are based on Bash completion.") (license license:gpl2+))) (define-public emacs-easy-kill @@ -8423,6 +8531,10 @@ outline-mode), so there is no such thing like an outshine mode, only (base32 "109fvivsb4r0rbqljngqrmxqvbnbkqlivczx6brrvlr7ci625lhf")))) (build-system emacs-build-system) + (propagated-inputs + `(("emacs-seq" ,emacs-seq) + ("emacs-dash" ,emacs-dash) + ("emacs-let-alist" ,emacs-let-alist))) (home-page "https://github.com/cpitclaudel/biblio.el") (synopsis "Browse and import bibliographic references") (description "This package provides an extensible Emacs package for @@ -8457,7 +8569,8 @@ automatically fetched from well-curated sources, and formatted as BibTeX.") ("emacs-s" ,emacs-s) ("emacs-dash" ,emacs-dash) ("emacs-f" ,emacs-f) - ("emacs-biblio" ,emacs-biblio))) + ("emacs-biblio" ,emacs-biblio) + ("emacs-ivy" ,emacs-ivy))) (home-page "https://github.com/tmalsburg/helm-bibtex") (synopsis "Bibliography manager based on Helm") (description "This package provides bibliography manager for Emacs, @@ -8720,23 +8833,33 @@ navigate and display hierarchy structures.") (license license:gpl3+)))) (define-public emacs-pulseaudio-control - (let ((commit "08c59e1dc45ec96edb62f34036e82cf5f14c0e8b") - (revision "1")) + (let ((commit "1da372ec79f5d2fb901d1f9f0679fee8848fd011") + (revision "2")) (package (name "emacs-pulseaudio-control") - (version (string-append "0.0.1" "-" revision "." - (string-take commit 7))) + (version (git-version "0.0.1" revision commit)) (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/flexibeast/pulseaudio-control.git") (commit commit))) - (file-name (string-append name "-" version "-checkout")) + (file-name (git-file-name name version)) (sha256 (base32 - "10cgg1r00kz2fsnnryvzay5pf8s1pwb1dzlds1fbjdnyfvdgammv")))) + "02xrsms2pjqdk6327midi61i5vg2h9cq5jwaxv43ldm68wl7hi6k")))) (build-system emacs-build-system) + (arguments + '(#:phases (modify-phases %standard-phases + (add-after 'unpack 'patch-file-name + (lambda* (#:key inputs #:allow-other-keys) + (let ((pulseaudio (assoc-ref inputs "pulseaudio"))) + (chmod "pulseaudio-control.el" #o600) + (emacs-substitute-variables "pulseaudio-control.el" + ("pulseaudio-control-pactl-path" + (string-append pulseaudio "/bin/pactl"))) + #t)))))) + (inputs `(("pulseaudio" ,pulseaudio))) (home-page "https://github.com/flexibeast/pulseaudio-control") (synopsis "Control @code{pulseaudio} from Emacs") (description @@ -10119,10 +10242,10 @@ keep Parens and Indentation inline with one another.") (license license:gpl3+))) (define-public emacs-helm-eww - (let ((commit "5d6c2c66d4694415ef8a16a6d38a37aeae76c5ac")) + (let ((commit "1a09f11b2376dec8237df40140f056be8a256ef0")) (package (name "emacs-helm-eww") - (version (git-version "0.1" "1" commit)) + (version (git-version "0.1" "2" commit)) (source (origin (method git-fetch) (uri (git-reference @@ -10131,7 +10254,7 @@ keep Parens and Indentation inline with one another.") (file-name (string-append name "-" version "-checkout")) (sha256 (base32 - "1x442ylrr7cx587s4rvfh187h3qbkr79qp95qr57a4igxkkw6183")))) + "1kqdjhz2xiqw3bxjhfl9namhqrkbc2x70gcv6ljljya5hbkm62sm")))) (propagated-inputs `(("emacs-helm" ,emacs-helm))) (build-system emacs-build-system) @@ -10984,10 +11107,10 @@ from @code{emms-source-file-default-directory}.") (license license:gpl3+)))) (define-public emacs-helm-exwm - (let ((commit "82a856c80c8d295e3be522a01c5a15af50d08990")) + (let ((commit "56266f261ba3b3d2753b374b50da20eb768c06f5")) (package (name "emacs-helm-exwm") - (version (git-version "20180523" "1" commit)) + (version (git-version "20180703" "2" commit)) (source (origin (method url-fetch) @@ -10997,7 +11120,7 @@ from @code{emms-source-file-default-directory}.") ".tar.gz")) (sha256 (base32 - "1xsg2lar1vh7jmj5lnnyi14vssxkgy95sv9r8pbfhbnkjkbjm9pb")))) + "0n7hdiajw5vxl8ha2r9r4cl4i7crza25348825wb6acwhhzijxcj")))) (build-system emacs-build-system) (propagated-inputs `(("emacs-helm" ,emacs-helm) @@ -11205,37 +11328,14 @@ file.") (license license:gpl3+)))) (define-public emacs-wgrep-helm - (let ((commit "1cdd7c136f1e7565bb13d2df69be3dc77b83698d")) - (package - (name "emacs-wgrep-helm") - (version (git-version "2.1.10" "1" commit)) - (source - (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/mhayashi1120/Emacs-wgrep") - (commit commit))) - (file-name (string-append name "-" version "-checkout")) - (sha256 - (base32 - "057p99hq0r6z1k8sl15w3sxrqvlv0g9wp39zy1pqhccv2mn3g2d6")))) - (build-system emacs-build-system) - (propagated-inputs - `(("emacs-wgrep" ,emacs-wgrep))) - (home-page - "https://github.com/mhayashi1120/Emacs-wgrep") - (synopsis - "Writable helm-grep-mode buffer and apply the changes to files") - (description - "@code{wgrep-helm} allows you to edit a @code{helm-grep-mode} buffer and -apply those changes to the file buffer.") - (license license:gpl3+)))) + ;; `emacs-wgrep-helm' was mistakenly added. + (deprecated-package "emacs-wgrep-helm" emacs-wgrep)) (define-public emacs-mu4e-conversation - (let ((commit "b60d6bd27d7220c3dd041ff2a090e29f2166a319")) + (let ((commit "223cc66e99c7665326e3d991d6d383cb0d7512bb")) (package (name "emacs-mu4e-conversation") - (version (git-version "20180615" "1" commit)) + (version (git-version "20180722" "2" commit)) (source (origin (method url-fetch) @@ -11246,7 +11346,7 @@ apply those changes to the file buffer.") (file-name (string-append name "-" version "-checkout")) (sha256 (base32 - "0x8kmi0rmbaaxn5zicm1f9yb8ynxi8074hi2n0rvymlfpxbpn0ma")))) + "1ivy7pihhma465hi25p1y45dyi8h52nsm2m0cvizj5sw36jw0n81")))) (build-system emacs-build-system) (propagated-inputs `(("mu" ,mu))) @@ -11317,3 +11417,205 @@ siblings and friends. This visual overview can also be used to browse your entries. You can think of entries as nodes in a mind map, or pages in a wiki.") (license license:expat))) + +(define-public emacs-recent-addresses + (let ((commit "d9da58db542089a1ceb5ef29e420dbfbc4a36373") + (revision "0")) + (package + (name "emacs-recent-addresses") + (home-page "http://nschum.de/src/emacs/recent-addresses/") + (version (git-version "0.1" revision commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/nschum/recent-addresses.el") + (commit commit))) + (sha256 + (base32 + "175rvcwmkb5z7ss7q2y5178mvdvp5bhn39irz80qinlvaz8fm4nk")) + (file-name (git-file-name name version)))) + (build-system emacs-build-system) + (synopsis "Record recently-used email addressed and auto-complete them") + (description + "@code{recent-addresses} is an Emacs allows you to quickly look up +previously used email addresses. It can be used alongside the Gnus email +client.") + (license license:gpl2+)))) + +(define-public emacs-fold-dwim + (let ((commit "c46f4bb2ce91b4e307136320e72c28dd50b6cd8b") + (revision "0")) + (package + (name "emacs-fold-dwim") + (version (git-version "1.2" revision commit)) + (home-page "https://github.com/emacsattic/fold-dwim") + (source (origin + (method git-fetch) + (uri (git-reference (url home-page) (commit commit))) + (sha256 + (base32 + "1yz1wis31asw6xa5maliyd1ck2q02xnnh7dc6swgj9cb4wi7k6i1")) + (file-name (git-file-name name version)))) + (build-system emacs-build-system) + (synopsis "Unified user interface for Emacs folding modes") + (description + "DWIM stands for \"do what I mean\", as in the idea that one keystroke +can do different things depending on the context. In this package, it means +that, if the cursor is in a currently hidden folded construction, we want to +show it; if it's not, we want to hide whatever fold the cursor is in.") + (license license:gpl2+)))) + +(define-public emacs-markup-faces + (package + (name "emacs-markup-faces") + (version "1.0.0") + (source + (origin + (method url-fetch) + (uri (string-append "https://stable.melpa.org/packages/markup-faces-" + version ".el")) + (sha256 + (base32 + "124dxbaa25fwxnpwsygpz7pw6da6dnnw7y2lic3jf8rgz7lw4v32")))) + (build-system emacs-build-system) + (home-page "https://github.com/sensorflo/markup-faces") + (synopsis "Collection of Emacs faces for markup language modes") + (description "emacs-markup-faces is like font-lock-faces, but tailored for +markup languages instead programming languages. The sub group markup-faces-text +is also intended for 'text viewing modes' such as info or (wo)man. This gives a +common look and feel, or let's say theme, across different markup language modes +and 'text viewing modes' respectively.") + (license license:gpl3+))) + +(define-public emacs-adoc-mode + (package + (name "emacs-adoc-mode") + (version "0.6.6") + (source + (origin + (method url-fetch) + (uri (string-append "https://stable.melpa.org/packages/adoc-mode-" + version ".el")) + (sha256 + (base32 + "1c6hrgxxsnl2c19rgjykpm7r4xg9lp6bmk5z6bi7g8pqlrgwffcy")))) + (build-system emacs-build-system) + (propagated-inputs + `(("emacs-markup-faces" ,emacs-markup-faces))) + (home-page "https://github.com/sensorflo/adoc-mode/wiki") + (synopsis "AsciiDoc mode for Emacs") + (description "This package provides an Emacs major mode for editing AsciiDoc +files. It focuses on highlighting the document to improve readability.") + (license license:gpl2+))) + +(define-public emacs-rust-mode + (let ((commit + ;; Last release is old (2016), use more recent commit to get bug + ;; fixes. + "64b4a2450e4d4c47f6307851c9b2598cd2254d68") + (revision "0")) + (package + (name "emacs-rust-mode") + (version (git-version "0.3.0" revision commit)) + (source (origin + (method git-fetch) + (uri + (git-reference + (url "https://github.com/rust-lang/rust-mode") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0pbz36lljgb7bdgx3h3g0pq1nss1kvn8mhk1l3mknsmynd6w4nd8")))) + (build-system emacs-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (replace 'check + (lambda _ + (invoke "sh" "run_rust_emacs_tests.sh")))))) + (home-page "https://github.com/rust-lang/rust-mode") + (synopsis "Major Emacs mode for editing Rust source code") + (description "This package provides a major Emacs mode for editing Rust +source code.") + (license (list license:expat + license:asl2.0))))) + +(define-public emacs-ztree + (let ((commit "c54425a094353ec40a8179f9eab3596f76c6cf94")) + (package + (name "emacs-ztree") + (version (git-version "1.0.5" "1" commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/fourier/ztree") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0j8fpxds8m1zi04nrs8vv21091abvh4n8ab76f1sgdxnp4l5cfb0")))) + (build-system emacs-build-system) + (home-page "https://github.com/fourier/ztree") + (synopsis "Directory tree comparison mode for Emacs") + (description "Ztree is a project dedicated to implementation of several +text-tree applications inside GNU Emacs. It consists of 2 subprojects: +@command{ztree-diff} and @command{ztree-dir} (the basis of +@command{ztree-diff}).") + (license license:gpl3)))) + +(define-public emacs-helm-org-contacts + (let ((commit "0af703bd9a43032b89fdf5559673151d1ac2fffc")) + (package + (name "emacs-helm-org-contacts") + (version (git-version "20180707" "1" commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/tmalsburg/helm-org-contacts") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1cl7cm2ic9pg4vc9cdh84vzjj1x2lpd5ymimiva8h4l17kiphk4s")))) + (build-system emacs-build-system) + (propagated-inputs + `(("emacs-dash" ,emacs-dash) + ("emacs-helm" ,emacs-helm) + ("emacs-s" ,emacs-s))) + (home-page "https://github.com/tmalsburg/helm-org-contacts") + (synopsis "Helm source for org-contacts") + (description "This Helm source can be used to search contacts stored in +org-contacts format. There are actions for inserting postal addresses, email +addresses, and phone numbers in the buffer where @command{helm-org-contacts} +was called.") + (license license:gpl3)))) + +(define-public emacs-dired-du + (package + (name "emacs-dired-du") + (version "0.5") + (source + (origin + (method url-fetch) + (uri (string-append + "https://elpa.gnu.org/packages/dired-du-" + version ".tar")) + (sha256 + (base32 + "09yj37p2fa5f81fqrzwghjkyy2ydsf4rbkfwpn2yyvzd5nd97bpl")))) + (build-system emacs-build-system) + (home-page "http://elpa.gnu.org/packages/dired-du.html") + (synopsis "Dired with recursive directory sizes") + (description + "Display the recursive size of directories in Dired. +This file defines a minor mode @command{dired-du-mode} to show the recursive +size of directories in Dired buffers. If @command{du} program is available, +then the directory sizes are obtained with it. Otherwise, the directory sizes +are obtained with Lisp. The former is faster and provide a more precise +value. For directories where the user doesn't have read permission, the +recursive size is not obtained. Once this mode is enabled, every new Dired +buffer displays recursive dir sizes.") + (license license:gpl3+))) diff --git a/gnu/packages/embedded.scm b/gnu/packages/embedded.scm index 4caf29437f..0174224616 100644 --- a/gnu/packages/embedded.scm +++ b/gnu/packages/embedded.scm @@ -1008,7 +1008,12 @@ SPI, I2C, JTAG.") "loadtools/defpath.c" "loadtools/Makefile" "miscutil/c139explore" - "miscutil/pirexplore") + "miscutil/pirexplore" + "ffstools/tiffs-wrappers/installpath.c" + "rvinterf/rvtat/launchrvif.c" + "rvinterf/etmsync/launchrvif.c" + "rvinterf/libasync/launchrvif.c" + "uptools/atcmd/atinterf.c") (("/opt/freecalypso/loadtools") (string-append (assoc-ref outputs "out") "/lib/freecalypso/loadtools")) (("/opt/freecalypso") @@ -1092,6 +1097,10 @@ feeding melodies to be played to it. that can be issued through the RVTMUX (debug trace) serial channel. This program is our test mode shell for sending Test Mode commands to targets and displaying decoded target responses. +@item fcup-smsend Send a short message via SMS +@item fcup-smsendmult Send multiple short messages via SMS in one go +@item fcup-smsendpdu Send multiple short messages given in PDU format via SMS +@item sms-pdu-decode Decode PDU format messages @end enumerate") (home-page "https://www.freecalypso.org/") (license license:public-domain))) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 1c18efe9da..f0b2f350c2 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -3,6 +3,7 @@ ;;; Copyright © 2016, 2017 Leo Famulari <leo@famulari.name> ;;; Copyright © 2016, 2017 Pjotr Prins <pjotr.guix@thebird.nl> ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr> +;;; Copyright (C) 2018 Nils Gillmann <ng0@n0.is> ;;; ;;; This file is part of GNU Guix. ;;; @@ -37,7 +38,7 @@ (define-public erlang (package (name "erlang") - (version "20.2.3") + (version "21.0") (source (origin (method url-fetch) ;; The tarball from http://erlang.org/download contains many @@ -48,7 +49,7 @@ (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "0s9g4ijdbqq21k4cqggz074d3fiimah942qisv2kgizhlivpw2nm")) + "0gv43lra4870xns8b0yjzbq78afzvz9gk6y3q3fa4y4sqcrqwbas")) (patches (search-patches "erlang-man-path.patch")))) (build-system gnu-build-system) (native-inputs @@ -64,7 +65,7 @@ (version-major+minor version) ".tar.gz")) (sha256 (base32 - "1pyb8wbk7znsyni8d1k4dj1m01lr191dcrrzisli1z27ks7hh3lm")))))) + "0cgv23q0215f6lvmhj4w9skx5m29khjs9mb890635s3yp520xgqh")))))) (inputs `(("ncurses" ,ncurses) ("openssl" ,openssl) diff --git a/gnu/packages/finance.scm b/gnu/packages/finance.scm index 1d3e6a7a6a..3ddaa76a4e 100644 --- a/gnu/packages/finance.scm +++ b/gnu/packages/finance.scm @@ -39,6 +39,7 @@ #:use-module (gnu packages base) #:use-module (gnu packages boost) #:use-module (gnu packages check) + #:use-module (gnu packages crypto) #:use-module (gnu packages databases) #:use-module (gnu packages documentation) #:use-module (gnu packages dns) @@ -51,6 +52,7 @@ #:use-module (gnu packages libusb) #:use-module (gnu packages linux) #:use-module (gnu packages multiprecision) + #:use-module (gnu packages networking) #:use-module (gnu packages pkg-config) #:use-module (gnu packages protobuf) #:use-module (gnu packages python) @@ -69,7 +71,7 @@ (define-public bitcoin-core (package (name "bitcoin-core") - (version "0.15.1") + (version "0.16.1") (source (origin (method url-fetch) (uri @@ -77,7 +79,7 @@ version "/bitcoin-" version ".tar.gz")) (sha256 (base32 - "1d22fgwdcn343kd95lh389hj417zwbmnhi29cij8n7wc0nz2vpil")))) + "1zkqp93yircd3pbxczxfnibkpq0sgcv5r7wg6d196b9pwgr9zd39")))) (build-system gnu-build-system) (native-inputs `(("pkg-config" ,pkg-config) @@ -329,6 +331,37 @@ generation from a seed. Your secret keys are encrypted and are never sent to other machines/servers. Electrum does not download the Bitcoin blockchain.") (license license:expat))) +(define-public electron-cash + (package + (inherit electrum) + (name "electron-cash") + (version "3.3") + (source + (origin + (method url-fetch) + (uri (string-append "https://electroncash.org/downloads/" + version + "/win-linux/ElectronCash-" + version + ".tar.gz")) + (sha256 + (base32 + "1x487hyacdm1qhik1mhfimr4jwcwz7sgsbkh11awrb6j19sxdxym")) + (modules '((guix build utils))) + (snippet + '(begin + ;; Delete the bundled dependencies. + (delete-file-recursively "packages") + #t)))) + (home-page "https://electroncash.org/") + (synopsis "Bitcoin Cash wallet") + (description + "Electroncash is a lightweight Bitcoin Cash client, based on a client-server +protocol. It supports Simple Payment Verification (SPV) and deterministic key +generation from a seed. Your secret keys are encrypted and are never sent to +other machines/servers. Electroncash does not download the Bitcoin Cash blockchain.") + (license license:expat))) + (define-public monero ;; This package bundles easylogging++ and lmdb. ;; The bundled easylogging++ is modified, and the changes will not be upstreamed. @@ -336,25 +369,18 @@ other machines/servers. Electrum does not download the Bitcoin blockchain.") ;; the system's dynamically linked library. (package (name "monero") - (version "0.11.1.0") + (version "0.12.3.0") (source (origin - (method url-fetch) - (uri (string-append "https://github.com/monero-project/monero/archive/v" - version ".tar.gz")) + (method git-fetch) + (uri (git-reference + (url "https://github.com/monero-project/monero") + (commit (string-append "v" version)))) (file-name (string-append name "-" version ".tar.gz")) - (modules '((guix build utils))) - (snippet - '(begin - ;; Delete bundled dependencies. - (for-each - delete-file-recursively - '("external/miniupnpc" "external/rapidjson" - "external/unbound")) - #t)) + (patches (search-patches "monero-use-system-miniupnpc.patch")) (sha256 (base32 - "16shd834025jyzy68h3gag1sz8vbk875hy4j97hrki8pacz8vd5m")))) + "14db9kgjm2ha93c2x5fjdw01xaqshn756qr3x2cnzyyjh7caz5qd")))) (build-system cmake-build-system) (native-inputs `(("doxygen" ,doxygen) @@ -364,15 +390,19 @@ other machines/servers. Electrum does not download the Bitcoin blockchain.") (inputs `(("bind" ,isc-bind) ("boost" ,boost) + ("zeromq" ,zeromq) + ("cppzmq" ,cppzmq) ("expat" ,expat) + ("libsodium" ,libsodium) ("libunwind" ,libunwind) ("lmdb" ,lmdb) - ("miniupnpc" ,miniupnpc) + ("miniupnpc" ,monero-miniupnpc) ("openssl" ,openssl) ("rapidjson" ,rapidjson) ("unbound" ,unbound))) (arguments `(#:out-of-source? #t + #:build-type "release" #:configure-flags '("-DBUILD_TESTS=ON" ,@(if (string=? "aarch64-linux" (%current-system)) '("-DARCH=armv8-a") @@ -400,9 +430,8 @@ other machines/servers. Electrum does not download the Bitcoin blockchain.") #t)) (replace 'check (lambda _ - (zero? - (system* "make" "ARGS=-E 'unit_tests|libwallet_api_tests'" - "test")))) + (invoke "make" "ARGS=-E 'unit_tests|libwallet_api_tests'" + "test"))) ;; The excluded unit tests need network access (add-after 'check 'unit-tests (lambda _ @@ -415,10 +444,9 @@ other machines/servers. Electrum does not download the Bitcoin blockchain.") "DNSResolver.DNSSECFailure" "DNSResolver.GetTXTRecord") ":"))) - (zero? - (system* "tests/unit_tests/unit_tests" - (string-append "--gtest_filter=-" - excluded-unit-tests)))))) + (invoke "tests/unit_tests/unit_tests" + (string-append "--gtest_filter=-" + excluded-unit-tests))))) (add-after 'install 'install-blockchain-import-export (lambda* (#:key outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) @@ -432,19 +460,20 @@ other machines/servers. Electrum does not download the Bitcoin blockchain.") Monero command line client and daemon.") (license license:bsd-3))) -(define-public monero-core +(define-public monero-gui (package - (name "monero-core") - (version "0.11.1.0") + (name "monero-gui") + (version "0.12.2.0") (source (origin - (method url-fetch) - (uri (string-append "https://github.com/monero-project/monero-core/archive/v" - version ".tar.gz")) + (method git-fetch) + (uri (git-reference + (url "https://github.com/monero-project/monero-gui") + (commit (string-append "v" version)))) (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "1q7a9kpcjgp74fbplzs2iszdld6gwbfrydyd9in9izhwp100p1rr")))) + "1cnrkwh7kp64lnzz1xfmkf1mhsgm5gls292gpqai3jr8jydpkahl")))) (build-system gnu-build-system) (native-inputs `(("doxygen" ,doxygen) @@ -491,7 +520,7 @@ Monero command line client and daemon.") #t)) (replace 'build (lambda _ - (zero? (system* "./build.sh")))) + (invoke "./build.sh"))) (add-after 'build 'fix-install-path (lambda* (#:key outputs #:allow-other-keys) (substitute* "build/Makefile" @@ -508,6 +537,9 @@ Monero command line client and daemon.") Monero GUI client.") (license license:bsd-3))) +(define-public monero-core + (deprecated-package "monero-core" monero-gui)) + (define-public python-trezor-agent (package (name "python-trezor-agent") diff --git a/gnu/packages/fltk.scm b/gnu/packages/fltk.scm index e4eb2fcad0..a3c088c2e8 100644 --- a/gnu/packages/fltk.scm +++ b/gnu/packages/fltk.scm @@ -4,6 +4,7 @@ ;;; Copyright © 2015, 2018 Ricardo Wurmus <rekado@elephly.net> ;;; Copyright © 2016 Kei Kebreau <kkebreau@posteo.net> ;;; Copyright © 2018 Mark H Weaver <mhw@netris.org> +;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il> ;;; ;;; This file is part of GNU Guix. ;;; @@ -34,27 +35,27 @@ #:use-module (guix download) #:use-module (guix git-download) #:use-module (guix build-system gnu) - #:use-module (guix build-system waf)) + #:use-module (guix build-system waf) + #:use-module (srfi srfi-1)) (define-public fltk (package (name "fltk") - (version "1.3.3") + (version "1.3.4-2") (source (origin (method url-fetch) - (uri (string-append "http://fltk.org/pub/fltk/" version + (uri (string-append "http://fltk.org/pub/fltk/" + (first (string-split version #\-)) "/fltk-" version "-source.tar.gz")) (sha256 (base32 - "15qd7lkz5d5ynz70xhxhigpz3wns39v9xcf7ggkl0792syc8sfgq")) - (patches (search-patches "fltk-shared-lib-defines.patch" - "fltk-xfont-on-demand.patch")))) + "0459rm1gl5x3famiqma7ja7k6hvan8p5l8lgshvqfl4rik0lklr5")))) (build-system gnu-build-system) (native-inputs `(("pkg-config" ,pkg-config))) (inputs - `(("libjpeg" ,libjpeg-8) ;jpeg_read_header argument error in libjpeg-9 + `(("libjpeg" ,libjpeg) ("libpng" ,libpng) ("libx11" ,libx11) ("libxft" ,libxft) @@ -76,12 +77,11 @@ ;; Provide -L flags for image libraries when querying fltk-config to ;; avoid propagating inputs. (lambda* (#:key inputs outputs #:allow-other-keys) - (use-modules (srfi srfi-26)) - (let* ((conf (string-append (assoc-ref outputs "out") - "/bin/fltk-config")) - (jpeg (assoc-ref inputs "libjpeg")) - (png (assoc-ref inputs "libpng")) - (zlib (assoc-ref inputs "zlib"))) + (let ((conf (string-append (assoc-ref outputs "out") + "/bin/fltk-config")) + (jpeg (assoc-ref inputs "libjpeg")) + (png (assoc-ref inputs "libpng")) + (zlib (assoc-ref inputs "zlib"))) (substitute* conf (("-ljpeg") (string-append "-L" jpeg "/lib -ljpeg")) (("-lpng") (string-append "-L" png "/lib -lpng")) diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm index e9b68a7797..dd91d77c6c 100644 --- a/gnu/packages/fonts.scm +++ b/gnu/packages/fonts.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2013, 2014, 2015, 2016, 2018 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2014, 2017 Mark H Weaver <mhw@netris.org> ;;; Copyright © 2014 Joshua Grant <tadni@riseup.net> ;;; Copyright © 2014 Alex Kost <alezost@gmail.com> @@ -1262,3 +1262,32 @@ Lohit supports the Assamese, Bengali, Devanagari (Hindi, Kashmiri, Konkani, Maithili, Marathi, Nepali, Sindhi, Santali, Bodo, Dogri languages), Gujarati, Kannada, Malayalam, Manipuri, Oriya, Punjabi, Tamil and Telugu scripts.") (license license:silofl1.1))) + +(define-public font-blackfoundry-inria + (package + (name "font-blackfoundry-inria") + (version "1.200") + (home-page "https://github.com/BlackFoundry/InriaFonts") + (source (origin + (method git-fetch) + (uri (git-reference + (url home-page) + (commit (string-append "v" version)))) + (sha256 + (base32 + "06775y99lyh6hj5hzvrx56iybdck8a8xfqkipqd5c4cldg0a9hh8")) + (file-name (string-append name "-" version "-checkout")))) + ;; XXX: There are .ufo directories (the "source") so in theory we should + ;; be able to rebuild TTF and OTF files with FontForge. Unfortunately a + ;; command like: + ;; + ;; fontforge -lang=ff -c "Open('InriaSans-Regular.ufo'); Generate('foo.ttf');" + ;; + ;; segfaults in '_UFOLoadGlyph', which calls out to libpython. :-/ + ;; In the meantime we ship the precompiled OTF and TTF files. + (build-system font-build-system) + (synopsis "Inria Sans and Inria Serif type family") + (description + "Inria Sans and Inria Serif are the two members of a type family designed +for Inria, a public research institute in computer science and mathematics.") + (license license:silofl1.1))) diff --git a/gnu/packages/fontutils.scm b/gnu/packages/fontutils.scm index 85febd73f4..725387ce8e 100644 --- a/gnu/packages/fontutils.scm +++ b/gnu/packages/fontutils.scm @@ -455,17 +455,16 @@ using the above tables.") (define-public libspiro (package (name "libspiro") - (version "20071029") + (version "0.5.20150702") (source (origin (method url-fetch) - (uri (string-append "mirror://sourceforge/libspiro/libspiro/" - version "/libspiro_src-" version ".tar.bz2")) + (uri (string-append "https://github.com/fontforge/libspiro/releases" + "/download/" version "/libspiro-dist-" version ".tar.gz")) (sha256 (base32 - "1kylz8pvwnb85yya150r9i6mhbpzx38f32qy523qg3ylgd9b3zhy")))) + "153ckwj6h3wwlsgcppzqj8cymv1927hi8ar8fzpchq5q89cj2kai")))) (build-system gnu-build-system) - (arguments `(#:tests? #f)) ;no tests (synopsis "Clothoid to bezier conversion library") (description "Raph Levien's Spiro package as a library. A mechanism for drawing diff --git a/gnu/packages/freedesktop.scm b/gnu/packages/freedesktop.scm index b9cab59357..cb0916621a 100644 --- a/gnu/packages/freedesktop.scm +++ b/gnu/packages/freedesktop.scm @@ -721,19 +721,21 @@ message bus.") (define-public accountsservice (package (name "accountsservice") - (version "0.6.43") + (version "0.6.50") (source (origin (method url-fetch) (uri (string-append "https://www.freedesktop.org/software/" name "/" name "-" version ".tar.xz")) (sha256 (base32 - "1k6n9079001sgcwlkq0bz6mkn4m8y4dwf6hs1qm85swcld5ajfzd")))) + "0jn7vg1z4vxnna0hl33hbcb4bb3zpilxc2vyclh24vx4vvsjhn83")))) (build-system gnu-build-system) (arguments '(#:tests? #f ; XXX: tests require DocBook 4.1.2 #:configure-flags - '("--localstatedir=/var") + '("--localstatedir=/var" + "--disable-systemd" + "--enable-elogind") #:phases (modify-phases %standard-phases (add-before @@ -756,8 +758,9 @@ message bus.") ("intltool" ,intltool) ("pkg-config" ,pkg-config))) (inputs - `(("shadow" ,shadow) - ("polkit" ,polkit))) + `(("elogind" ,elogind) + ("polkit" ,polkit) + ("shadow" ,shadow))) (home-page "https://www.freedesktop.org/wiki/Software/AccountsService/") (synopsis "D-Bus interface for user account query and manipulation") (description diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm index 96b15b5652..130312ad46 100644 --- a/gnu/packages/game-development.scm +++ b/gnu/packages/game-development.scm @@ -2,12 +2,12 @@ ;;; Copyright © 2014 Tomáš Čech <sleep_walker@suse.cz> ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org> ;;; Copyright © 2015, 2018 Ludovic Courtès <ludo@gnu.org> -;;; Copyright © 2015 Alex Kost <alezost@gmail.com> +;;; Copyright © 2015, 2018 Alex Kost <alezost@gmail.com> ;;; Copyright © 2015, 2016, 2017 David Thompson <davet@gnu.org> ;;; Copyright © 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2016, 2017 Kei Kebreau <kkebreau@posteo.net> ;;; Copyright © 2016, 2018 Ricardo Wurmus <rekado@elephly.net> -;;; Copyright © 2016, 2017 Julian Graham <joolean@gmail.com> +;;; Copyright © 2016, 2017, 2018 Julian Graham <joolean@gmail.com> ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2017 Manolis Fragkiskos Ragkousis <manolis837@gmail.com> ;;; Copyright © 2017 Peter Mikkelsen <petermikkelsen10@gmail.com> @@ -74,6 +74,7 @@ #:use-module (gnu packages python) #:use-module (gnu packages qt) #:use-module (gnu packages sdl) + #:use-module (gnu packages stb) #:use-module (gnu packages texinfo) #:use-module (gnu packages tls) #:use-module (gnu packages video) @@ -225,14 +226,14 @@ PCM data.") (define-public gzochi (package (name "gzochi") - (version "0.11.1") + (version "0.12") (source (origin (method url-fetch) (uri (string-append "mirror://savannah/gzochi/gzochi-" version ".tar.gz")) (sha256 (base32 - "13j1m92zhxwkaaja3lg5x0h0b28mrrawdzk9d3hd19031akfxwb3")))) + "0h8yvk7154kd8zdfa9nqy73blrjq2x19kv305jcnwlmm09vvss59")))) (build-system gnu-build-system) (arguments '(#:phases (modify-phases %standard-phases @@ -356,14 +357,14 @@ levels.") (define-public python-xsge (package (name "python-xsge") - (version "2017.06.09") + (version "2018.02.26") (source (origin (method url-fetch) (uri (string-append "mirror://savannah/xsge/xsge/xsge-" version ".tar.gz")) (sha256 (base32 - "1vy7c2y7ihvmggs93zgfv2h3049s384wid8a5snzrrba8bhbb89p")))) + "0bx93hgf7cgdw2gsygbh59y8vpw37pgsa279rajw3fkdpl8vrc40")))) (build-system python-build-system) (arguments '(#:phases @@ -372,10 +373,9 @@ levels.") ;; system's default flags, "--single-version-externally-managed". (replace 'install (lambda* (#:key outputs #:allow-other-keys) - (zero? - (system* "python" "setup.py" "install" - (string-append "--prefix=" (assoc-ref outputs "out")) - "--root=/"))))) + (invoke "python" "setup.py" "install" + (string-append "--prefix=" (assoc-ref outputs "out")) + "--root=/")))) #:tests? #f)) ; no check target (propagated-inputs `(("python-sge-pygame" ,python-sge-pygame) @@ -397,7 +397,7 @@ support.") (define-public tiled (package (name "tiled") - (version "1.1.5") + (version "1.1.6") (source (origin (method url-fetch) (uri (string-append "https://github.com/bjorn/tiled/archive/v" @@ -405,7 +405,7 @@ support.") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "1zrq1nhb50mwqzw3fln6vj49ljddil1v7yby3ahjbcm94s25ll1y")))) + "194ciw8688mikndvxivzb8ql5vm405pkwnn4srzm7ymwfc4xygb0")))) (build-system gnu-build-system) (inputs `(("qtbase" ,qtbase) @@ -424,8 +424,8 @@ support.") (assoc-ref inputs "qttools") "/bin/lrelease\n"))) (let ((out (assoc-ref outputs "out"))) - (system* "qmake" - (string-append "PREFIX=" out)))))))) + (invoke "qmake" + (string-append "PREFIX=" out)))))))) (home-page "http://www.mapeditor.org/") (synopsis "Tile map editor") (description @@ -440,7 +440,7 @@ clone.") (define-public sfml (package (name "sfml") - (version "2.3.2") + (version "2.5.0") (source (origin (method url-fetch) ;; Do not fetch the archives from @@ -451,24 +451,37 @@ clone.") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "0k2fl5xk3ni2q8bsxl0551inx26ww3w6cp6hssvww0wfjdjcirsm")))) + "1x3yvhdrln5b6h4g5r4mds76gq8zsxw6icxqpwqkmxsqcq5yviab")) + (modules '((guix build utils))) + (snippet + '(begin + ;; Ensure system libraries are used. + (delete-file-recursively "extlibs") + #t)))) (build-system cmake-build-system) (arguments '(#:configure-flags - (list "-DSFML_INSTALL_PKGCONFIG_FILES=TRUE") + (list "-DSFML_INSTALL_PKGCONFIG_FILES=TRUE" + "-DSFML_OS_PKGCONFIG_DIR=lib/pkgconfig") #:tests? #f)) ; no tests + (native-inputs + `(("pkg-config" ,pkg-config))) (inputs `(("mesa" ,mesa) ("glew" ,glew) - ("flac" ,flac) - ("libvorbis" ,libvorbis) ("libx11" ,libx11) ("xcb-util-image" ,xcb-util-image) ("libxrandr" ,libxrandr) ("eudev" ,eudev) - ("freetype" ,freetype) ("libjpeg" ,libjpeg) ("libsndfile" ,libsndfile) + ("stb-image" ,stb-image) + ("stb-image-write" ,stb-image-write))) + (propagated-inputs + ;; In Requires.private of pkg-config files. + `(("flac" ,flac) + ("freetype" ,freetype) + ("libvorbis" ,libvorbis) ("openal" ,openal))) (home-page "https://www.sfml-dev.org") (synopsis "Simple and Fast Multimedia Library") @@ -518,7 +531,7 @@ sounds from presets such as \"explosion\" or \"powerup\".") (define-public physfs (package (name "physfs") - (version "2.0.3") + (version "3.0.1") (source (origin (method url-fetch) (uri (string-append @@ -527,10 +540,18 @@ sounds from presets such as \"explosion\" or \"powerup\".") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "0sbbyqzqhyf0g68fcvvv20n3928j0x6ik1njmhn1yigvq2bj11na")))) + "1wgj2zqpnfbnyyi1i7bq5pshcc9n5cvwlpzp8im67nb8662ryyxp")))) (build-system cmake-build-system) (arguments - '(#:tests? #f)) ; no check target + '(#:tests? #f ; no check target + #:phases (modify-phases %standard-phases + (add-after 'unpack 'patch-CMakeLists.txt + (lambda _ + (substitute* "CMakeLists.txt" + ;; XXX: For some reason CMakeLists.txt disables + ;; RUNPATH manipulation when the compiler is GCC. + (("CMAKE_COMPILER_IS_GNUCC") "FALSE")) + #t))))) (inputs `(("zlib" ,zlib))) (native-inputs @@ -623,18 +644,15 @@ etc.") (define-public allegro (package (name "allegro") - (version "5.2.2.0") + (version "5.2.4.0") (source (origin (method url-fetch) (uri (string-append "https://github.com/liballeg/allegro5/releases" "/download/" version "/allegro-" - (if (equal? "0" (string-take-right version 1)) - (string-drop-right version 2) - version) - ".tar.gz")) + version ".tar.gz")) (sha256 (base32 - "1z4lrrlmn471wb7vzbd9iw7g379vj0k964vy1s64hcvv5bhvk1g2")))) + "1w9a5yqi5q03b2qvmx5ff90paz0xbr9cy7i7f0xiqa65ava66q9l")))) (build-system cmake-build-system) (arguments `(#:tests? #f)) ; there are no tests (inputs @@ -1019,18 +1037,23 @@ of use.") (license license:expat))) (define-public openmw + ;; XXX The current version does not support qt 5.11, but the upcoming + ;; version (0.44) will do. + (let ((commit "5bc073603e8c7887e015a0ef41b4cefd6e688aaf") + (revision "1")) (package (name "openmw") - (version "0.43.0") + (version (git-version "0.43" revision commit)) (source (origin - (method url-fetch) - (uri - (string-append "https://github.com/OpenMW/openmw/archive/" - name "-" version ".tar.gz")) + (method git-fetch) + (uri (git-reference + (url "https://gitlab.com/OpenMW/openmw.git") + (commit commit))) + (file-name (string-append name "-" version "-checkout")) (sha256 (base32 - "11phjx7b3mv4n295xgq25lkcwq0mgr35i5k05hf1h77y6n6jbw64")))) + "1sp4n3f1syvv0iz7n72wh226fyc0jh98cg8bvs574jvvqx6qn851")))) (build-system cmake-build-system) (arguments `(#:tests? #f ; No test target @@ -1057,7 +1080,7 @@ the 2002 open-world RPG Morrowind. The engine comes with its own editor, called OpenMW-CS which allows the user to edit or create their own original games.") (home-page "https://openmw.org") - (license license:gpl3))) + (license license:gpl3)))) (define-public godot (package diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm index 4af0b52e82..33429dbc2a 100644 --- a/gnu/packages/games.scm +++ b/gnu/packages/games.scm @@ -87,6 +87,7 @@ #:use-module (gnu packages gtk) #:use-module (gnu packages guile) #:use-module (gnu packages imagemagick) + #:use-module (gnu packages less) #:use-module (gnu packages libcanberra) #:use-module (gnu packages libedit) #:use-module (gnu packages libunwind) @@ -665,6 +666,131 @@ removed lines to all opponents. There is also a Demo mode in which you can watch your CPU playing while enjoying a cup of tea!") (license license:gpl2+))) +(define-public nethack + (package + (name "nethack") + (version "3.6.1") + (source + (origin + (method url-fetch) + (uri (string-append "https://www.nethack.org/download/" + version "/" name "-361-src.tgz")) + (sha256 + (base32 "1dha0ijvxhx7c9hr0452h93x81iiqsll8bc9msdnp7xdqcfbz32b")))) + (inputs + `(("ncurses" ,ncurses) + ("bison" ,bison) + ("flex" ,flex) + ("less" ,less))) + (build-system gnu-build-system) + (arguments + '(#:make-flags + `(,(string-append "PREFIX=" (assoc-ref %outputs "out"))) + #:phases + (modify-phases %standard-phases + (add-before 'configure 'patch-paths + (lambda _ + (substitute* "sys/unix/nethack.sh" + (("^ *cd .*$") "")) + (substitute* "sys/unix/Makefile.utl" + (("^YACC *=.*$") "YACC = bison -y\n") + (("^LEX *=.*$") "LEX = flex\n") + (("^# CC = gcc") "CC = gcc")) + (substitute* "sys/unix/hints/linux" + (("/bin/gzip") (string-append + (assoc-ref %build-inputs "gzip") + "/bin/gzip")) + (("^WINTTYLIB=.*") "WINTTYLIB=-lncurses")) + (substitute* "include/config.h" + (("^.*define CHDIR.*$") "") + (("^/\\* *#*define *REPRODUCIBLE_BUILD *\\*/") + ;; Honor SOURCE_DATE_EPOCH. + "#define REPRODUCIBLE_BUILD")) + + ;; Note: 'makedefs' rejects and ignores dates that are too old + ;; or too new, so we must choose something reasonable here. + (setenv "SOURCE_DATE_EPOCH" "1531865062") + + (substitute* "sys/unix/Makefile.src" + (("^# CC = gcc") "CC = gcc")) + #t)) + (replace 'configure + (lambda _ + (let ((bash (string-append + (assoc-ref %build-inputs "bash") + "/bin/bash"))) + (with-directory-excursion "sys/unix" + (substitute* "setup.sh" (("/bin/sh") bash)) + (invoke bash "setup.sh" "hints/linux")) + #t))) + (add-after 'install 'fixup-paths + (lambda _ + (let* ((output (assoc-ref %outputs "out")) + (nethack-script (string-append output "/bin/nethack"))) + (mkdir-p (string-append output "/games/lib/nethackuserdir")) + (for-each + (lambda (file) + (rename-file + (string-append output "/games/lib/nethackdir/" file) + (string-append output "/games/lib/nethackuserdir/" + file))) + '("xlogfile" "logfile" "perm" "record" "save")) + (mkdir-p (string-append output "/bin")) + (call-with-output-file nethack-script + (lambda (port) + (format port "#!~a/bin/sh +PATH=~a:$PATH +if [ ! -d ~~/.config/nethack ]; then + mkdir -p ~~/.config/nethack + cp -r ~a/games/lib/nethackuserdir/* ~~/.config/nethack + chmod -R +w ~~/.config/nethack +fi + +RUNDIR=$(mktemp -d) + +cleanup() { + rm -rf $RUNDIR +} +trap cleanup EXIT + +cd $RUNDIR +for i in ~~/.config/nethack/*; do + ln -s $i $(basename $i) +done +for i in ~a/games/lib/nethackdir/*; do + ln -s $i $(basename $i) +done +~a/games/nethack" + (assoc-ref %build-inputs "bash") + (list->search-path-as-string + (list + (string-append + (assoc-ref %build-inputs "coreutils") "/bin") + (string-append + (assoc-ref %build-inputs "less") "/bin")) + ":") + output + output + output))) + (chmod nethack-script #o555) + #t))) + (delete 'check)))) + (home-page "https://nethack.org") + (synopsis "Classic dungeon crawl game") + (description "NetHack is a single player dungeon exploration game that runs +on a wide variety of computer systems, with a variety of graphical and text +interfaces all using the same game engine. Unlike many other Dungeons & +Dragons-inspired games, the emphasis in NetHack is on discovering the detail of +the dungeon and not simply killing everything in sight - in fact, killing +everything in sight is a good way to die quickly. Each game presents a +different landscape - the random number generator provides an essentially +unlimited number of variations of the dungeon and its denizens to be discovered +by the player in one of a number of characters: you can pick your race, your +role, and your gender.") + (license + (license:fsdg-compatible + "https://nethack.org/common/license.html")))) + (define-public prboom-plus (package (name "prboom-plus") @@ -955,15 +1081,16 @@ that beneath its ruins lay buried an ancient evil.") (define-public angband (package (name "angband") - (version "4.0.5") + (version "4.1.2") (source (origin (method url-fetch) - (uri (string-append "http://rephial.org/downloads/4.0/" - "angband-" version ".tar.gz")) + (uri (string-append "http://rephial.org/downloads/" + (version-major+minor version) + "/angband-" version ".tar.gz")) (sha256 (base32 - "0lpq2kms7hp421vrasx2bkkn9w08kr581ldwik3v0hlq6h7rlxhd")) + "0ahfzb66ihxvkxcbhcib816x40sdsp26b3ravr1xqp44w1whkg1h")) (modules '((guix build utils))) (snippet ;; So, some of the sounds/graphics/tilesets are under different @@ -987,11 +1114,11 @@ that beneath its ruins lay buried an ancient evil.") #:configure-flags (list (string-append "--bindir=" %output "/bin")) #:phases (modify-phases %standard-phases - (add-after 'unpack 'autogen.sh + (replace 'bootstrap (lambda _ (substitute* "acinclude.m4" (("ncursesw5-config") "ncursesw6-config")) - (zero? (system* "sh" "autogen.sh"))))))) + (invoke "sh" "autogen.sh")))))) (native-inputs `(("autoconf" ,autoconf) ("automake" ,automake))) @@ -1448,7 +1575,7 @@ match, cannon keep, and grave-itation pit.") (define minetest-data (package (name "minetest-data") - (version "0.4.16") + (version "0.4.17") (source (origin (method url-fetch) (uri (string-append @@ -1457,7 +1584,7 @@ match, cannon keep, and grave-itation pit.") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "0nibpm600rbv9dg1zgcsl5grlbqx0b5l6cg1lp6sqkwvjialb4ga")))) + "0pa9skjwbq27aky6dgr7g3mb0a7c5rpa6xmz2qh0nm618z5hgazh")))) (build-system trivial-build-system) (native-inputs `(("source" ,source) @@ -1490,7 +1617,7 @@ match, cannon keep, and grave-itation pit.") (define-public minetest (package (name "minetest") - (version "0.4.16") + (version "0.4.17") (source (origin (method url-fetch) (uri (string-append @@ -1499,7 +1626,7 @@ match, cannon keep, and grave-itation pit.") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "0mbnf1ma4gsw9ah68ply04059xkfx5psdxwalxp78sgmx4ypkwqf")))) + "0wpbad5bssbbgspgdcq3hhq4bhckrj53nhymsz34d8g01j0csr46")))) (build-system cmake-build-system) (arguments '(#:configure-flags @@ -1830,7 +1957,7 @@ falling, themeable graphics and sounds, and replays.") (define-public wesnoth (package (name "wesnoth") - (version "1.14.3") + (version "1.14.4") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/wesnoth/wesnoth-" @@ -1839,7 +1966,7 @@ falling, themeable graphics and sounds, and replays.") name "-" version ".tar.bz2")) (sha256 (base32 - "06648041nr77sgzr7jpmcn37cma3hp41qynp50xzddx28l17zwg9")))) + "1hw1ap8xxpdwyx1sf8fm1g75p6724y3hwb4kpvyqbsq7bwfwsb9i")))) (build-system cmake-build-system) (arguments `(#:tests? #f)) ; no check target @@ -3345,7 +3472,7 @@ throwing people around in pseudo-randomly generated buildings.") (define-public hyperrogue (package (name "hyperrogue") - (version "10.0g") + (version "10.4j") ;; When updating this package, be sure to update the "hyperrogue-data" ;; origin in native-inputs. (source (origin @@ -3356,7 +3483,7 @@ throwing people around in pseudo-randomly generated buildings.") "-src.tgz")) (sha256 (base32 - "0f68pcnsgl406dhm91ckn3f364bar9m9i5njp9vrmvhvv9p2icy0")))) + "0909p4xvbi1c2jc5rdgrf8b1c60fmsaapabsi6yyglh5znkf0k27")))) (build-system gnu-build-system) (arguments `(#:tests? #f ; no check target @@ -3368,7 +3495,6 @@ throwing people around in pseudo-randomly generated buildings.") (setenv "CPATH" (string-append (assoc-ref inputs "sdl-union") "/include/SDL")))) - ;; Fix font and music paths. (replace 'configure (lambda* (#:key inputs outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) @@ -3378,17 +3504,18 @@ throwing people around in pseudo-randomly generated buildings.") "/share/fonts/truetype")) (dejavu-font "DejaVuSans-Bold.ttf") (music-file "hyperrogue-music.txt")) + ;; Fix font and music paths. (substitute* "basegraph.cpp" ((dejavu-font) (string-append dejavu-dir "/" dejavu-font))) - (substitute* "sound.cpp" - (((string-append "\\./" music-file)) - (string-append share-dir "/" music-file)) - (("sounds/") - (string-append share-dir "/sounds/"))) (substitute* music-file (("\\*/") (string-append share-dir "/sounds/")))) + ;; Fix Makefile. + (substitute* "Makefile" + (("g\\+\\+ langen.cpp") + "g++ langen.cpp ${CXXFLAGS}") + (("savepng.c") "savepng.cpp")) #t)) (replace 'install (lambda* (#:key inputs outputs #:allow-other-keys) @@ -3405,21 +3532,18 @@ throwing people around in pseudo-randomly generated buildings.") (out (assoc-ref outputs "out")) (sounds (string-append out "/share/hyperrogue/sounds")) (unzip (string-append (assoc-ref inputs "unzip") "/bin/unzip"))) - (and - ;; Extract media license information into sounds directory. - (zero? - (system* unzip "-j" data - (string-append - "hyperrogue" - (string-join (string-split ,version #\.) "") - "/sounds/credits.txt") "-d" sounds)) - ;; Extract sounds and music into sounds directory. - (zero? - (system* "unzip" "-j" data - (string-append - "hyperrogue" - (string-join (string-split ,version #\.) "") - "/*.ogg") "-d" sounds))))))))) + ;; Extract media license information into sounds directory. + (invoke unzip "-j" data + (string-append + "hyperrogue" + (string-join (string-split ,version #\.) "") + "/sounds/credits.txt") "-d" sounds) + ;; Extract sounds and music into sounds directory. + (invoke "unzip" "-j" data + (string-append + "hyperrogue" + (string-join (string-split ,version #\.) "") + "/*.ogg") "-d" sounds))))))) (native-inputs `(("hyperrogue-data" ,(origin @@ -3431,7 +3555,7 @@ throwing people around in pseudo-randomly generated buildings.") "-win.zip")) (sha256 (base32 - "0bnp077qvlmxjlz1jjd6kpghlv9flxc19ac1xq3m3wyq1w9p3pab")))) + "0w61iv2rn93hi0q3hxyyyf9xcr8vi9zd7fjvpz5adpgf94jm3zsc")))) ("unzip" ,unzip))) (inputs `(("font-dejavu" ,font-dejavu) @@ -3497,7 +3621,7 @@ for Un*x systems with X11.") (define-public freeciv (package (name "freeciv") - (version "2.5.7") + (version "2.6.0") (source (origin (method url-fetch) @@ -3510,7 +3634,7 @@ for Un*x systems with X11.") "/freeciv-" version ".tar.bz2"))) (sha256 (base32 - "1lmydnnqraa947l7gdz6xgm0bgks1ywsivp9h4v8jr3avcv6gqzz")))) + "16f9wsnn7073s6chzbm3819swd0iw019p9nrzr3diiynk28kj83w")))) (build-system gnu-build-system) (inputs `(("curl" ,curl) diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm index fdca3d2ffc..04d0a85276 100644 --- a/gnu/packages/gcc.scm +++ b/gnu/packages/gcc.scm @@ -519,14 +519,14 @@ It also includes runtime support libraries for these languages."))) (define-public gcc-8 (package (inherit gcc-7) - (version "8.1.0") + (version "8.2.0") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/gcc/gcc-" version "/gcc-" version ".tar.xz")) (sha256 (base32 - "0lxil8x0jjx7zbf90cy1rli650akaa6hpk8wk8s62vk2jbwnc60x")) + "10007smilswiiv2ymazr3b6x2i933c0ycxrr529zh4r6p823qv0r")) (patches (search-patches "gcc-8-strmov-store-file-names.patch" "gcc-5.0-libvtv-runpath.patch")))))) diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm index 85bb0ccf9b..ae6ba024e0 100644 --- a/gnu/packages/geo.scm +++ b/gnu/packages/geo.scm @@ -180,7 +180,7 @@ and driving.") (inputs `(("cairo" ,cairo) ("libpng" ,libpng) - ("libjepeg-turbo" ,libjpeg-turbo) + ("libjpeg-turbo" ,libjpeg-turbo) ("libtiff" ,libtiff) ("libgeotiff" ,libgeotiff) ("proj.4" ,proj.4) diff --git a/gnu/packages/ghostscript.scm b/gnu/packages/ghostscript.scm index 0a6043ba65..1240b1dc16 100644 --- a/gnu/packages/ghostscript.scm +++ b/gnu/packages/ghostscript.scm @@ -132,6 +132,7 @@ printing, and psresize, for adjusting page sizes.") (define-public ghostscript (package (name "ghostscript") + (replacement ghostscript/fixed) (version "9.23") (source (origin @@ -250,6 +251,16 @@ output file formats and printers.") (home-page "https://www.ghostscript.com/") (license license:agpl3+))) +(define-public ghostscript/fixed + (hidden-package + (package + (inherit ghostscript) + (source + (origin + (inherit (package-source ghostscript)) + (patches (append (origin-patches (package-source ghostscript)) + (search-patches "ghostscript-CVE-2018-10194.patch")))))))) + (define-public ghostscript/x (package/inherit ghostscript (name (string-append (package-name ghostscript) "-with-x")) diff --git a/gnu/packages/gimp.scm b/gnu/packages/gimp.scm index ec3a634844..feb67318df 100644 --- a/gnu/packages/gimp.scm +++ b/gnu/packages/gimp.scm @@ -1,7 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2016, 2018 Ricardo Wurmus <rekado@elephly.net> -;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il> +;;; Copyright © 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2018 Leo Famulari <leo@famulari.name> ;;; @@ -100,7 +100,7 @@ provided, as well as a framework to add new color models and data types.") `(("cairo" ,cairo) ("pango" ,pango) ("libpng" ,libpng) - ("libjpeg" ,libjpeg-8))) + ("libjpeg" ,libjpeg))) (native-inputs `(("pkg-config" ,pkg-config) ("glib" ,glib "bin") ; for gtester @@ -154,7 +154,7 @@ buffers.") ("glib" ,glib) ("glib-networking" ,glib-networking) ("libtiff" ,libtiff) - ("libjpeg" ,libjpeg-8) + ("libjpeg" ,libjpeg) ("atk" ,atk) ("gexiv2" ,gexiv2) ("gtk+" ,gtk+-2) diff --git a/gnu/packages/glib.scm b/gnu/packages/glib.scm index 7ea22fe88f..95d7976bf8 100644 --- a/gnu/packages/glib.scm +++ b/gnu/packages/glib.scm @@ -787,7 +787,7 @@ programming langauage. It also contains the utility (define-public appstream-glib (package (name "appstream-glib") - (version "0.7.5") + (version "0.7.10") (source (origin (method url-fetch) (uri (string-append "https://people.freedesktop.org/~hughsient/" @@ -795,7 +795,7 @@ programming langauage. It also contains the utility "appstream-glib-" version ".tar.xz")) (sha256 (base32 - "0ps80cbqnf3q86rvz3ajqjssdgkjc9kmynqf0wxqfir7ayc9y9ag")))) + "08bs0hnkvdzqv9pakv1y4c4ph77rmzjq22g760w20sv7vs63nia3")))) (build-system meson-build-system) (native-inputs `(("gettext" ,gettext-minimal) diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm index 55edb3fb69..46eae3608a 100644 --- a/gnu/packages/gnome.scm +++ b/gnu/packages/gnome.scm @@ -30,6 +30,7 @@ ;;; Copyright © 2017 Brendan Tildesley <brendan.tildesley@openmailbox.org> ;;; Copyright © 2017, 2018 Rutger Helling <rhelling@mykolab.com> ;;; Copyright © 2018 Jovany Leandro G.C <bit4bit@riseup.net> +;;; Copyright © 2018 Vasile Dumitrascu <va511e@yahoo.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -2110,7 +2111,7 @@ editors, IDEs, etc.") (package (inherit vte) (name "vte-ng") - (version "0.50.2.a") + (version "0.52.2.a") (native-inputs `(("gtk-doc" ,gtk-doc) ("gperf" ,gperf) @@ -2125,14 +2126,13 @@ editors, IDEs, etc.") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "0sv666ilid916ja6gw2d376nyyy66gvhsds8ans02x4b7gagj5sx")))) + "1fd65mk7c87k03vhnb2ixkjvv9nja04mfq813iyjji1b11f2sh7v")))) (arguments - `(#:configure-flags '("CXXFLAGS=-Wformat=0") - #:phases (modify-phases %standard-phases - (replace 'bootstrap + `(#:phases (modify-phases %standard-phases + (replace 'bootstrap (lambda _ (setenv "NOCONFIGURE" "true") - (zero? (system* "sh" "autogen.sh"))))))) + (invoke "sh" "autogen.sh")))))) (synopsis "Enhanced VTE terminal widget") (description "VTE is a library (libvte) implementing a terminal emulator widget for @@ -2229,7 +2229,7 @@ and RDP protocols.") (define-public dconf (package (name "dconf") - (version "0.26.1") + (version "0.28.0") (source (origin (method url-fetch) (uri (string-append @@ -2238,47 +2238,34 @@ and RDP protocols.") name "-" version ".tar.xz")) (sha256 (base32 - "0da587hpiqy8h3pswn1102h4b905x8k6mk3ajpi7kf4kzkvv30ym")))) - (build-system glib-or-gtk-build-system) + "0hn7v6769xabqz7kvyb2hfm19h46z1whkair7ff752zmbs3b7lv1")))) + (build-system meson-build-system) + (propagated-inputs + ;; In Requires of dconf.pc. + `(("glib" ,glib))) (inputs `(("gtk+" ,gtk+) - ("glib" ,glib) - ("dbus" ,dbus) - ("libxml2" ,libxml2))) + ("dbus" ,dbus))) (native-inputs - `(("libxslt" ,libxslt) + `(("libxslt" ,libxslt) ;for xsltproc + ("libxml2" ,libxml2) ;for XML_CATALOG_FILES ("docbook-xml" ,docbook-xml-4.2) ("docbook-xsl" ,docbook-xsl) - ("intltool" ,intltool) - ("pkg-config" ,pkg-config))) + ("glib:bin" ,glib "bin") + ("gtk-doc" ,gtk-doc) + ("pkg-config" ,pkg-config) + ("vala" ,vala))) (arguments `(#:tests? #f ; To contact dbus it needs to load /var/lib/dbus/machine-id ; or /etc/machine-id. - #:configure-flags - ;; Set the correct RUNPATH in binaries. - (list (string-append "LDFLAGS=-Wl,-rpath=" - (assoc-ref %outputs "out") "/lib") - "--disable-gtk-doc-html") ; FIXME: requires gtk-doc - #:phases - (modify-phases %standard-phases - (add-before 'configure 'fix-docbook - (lambda* (#:key inputs #:allow-other-keys) - (substitute* "docs/Makefile.in" - (("http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl") - (string-append (assoc-ref inputs "docbook-xsl") - "/xml/xsl/docbook-xsl-" - ,(package-version docbook-xsl) - "/manpages/docbook.xsl"))) - (setenv "XML_CATALOG_FILES" - (string-append (assoc-ref inputs "docbook-xml") - "/xml/dtd/docbook/catalog.xml")) - #t))))) + #:glib-or-gtk? #t + #:configure-flags '("-Denable-gtk-doc=true"))) (home-page "https://developer.gnome.org/dconf") (synopsis "Low-level GNOME configuration system") (description "Dconf is a low-level configuration system. Its main purpose is to provide a backend to GSettings on platforms that don't already have configuration storage systems.") - (license license:lgpl2.1))) + (license license:lgpl2.1+))) (define-public json-glib (package @@ -6477,7 +6464,7 @@ like GNOME, Unity, Budgie, Pantheon, XFCE, Mate, etc.") (define-public faba-icon-theme (package (name "faba-icon-theme") - (version "4.1.2") + (version "4.3") (source (origin (method url-fetch) @@ -6486,23 +6473,15 @@ like GNOME, Unity, Budgie, Pantheon, XFCE, Mate, etc.") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "0hi2dl627ayfnihn3v6x9xzid668m4hp098hb7hrkxvahh4h9by7")))) - (build-system gnu-build-system) + "18ln06xl60qzvzz61zq9q72hdbfgjsza3flph8i2asyzx3dffz68")))) + (build-system meson-build-system) (arguments - '(#:phases + `(#:phases (modify-phases %standard-phases - (add-after 'unpack 'patch-makefile.am + (add-before 'configure 'disable-post-install (lambda _ - (substitute* '("Makefile.am") - (("\\$\\(DESTDIR\\)/usr/share") - "$(datadir)")) - #t)) - (add-after 'unpack 'disable-configure-during-bootstrap - (lambda _ - ;; Do not run configure as part of autogen.sh because references - ;; to /bin are not fixed yet. - (setenv "NOCONFIGURE" "y") - #t))))) + (substitute* "meson.build" + (("meson.add_install_script.*") ""))))))) (native-inputs `(("autoconf" ,autoconf) ("automake" ,automake))) @@ -6518,7 +6497,7 @@ Moka") (package (inherit faba-icon-theme) (name "moka-icon-theme") - (version "5.3.6") + (version "5.4.0") (source (origin (method url-fetch) (uri (string-append "https://github.com/moka-project" @@ -6527,7 +6506,7 @@ Moka") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "04axinv79qnngsxkwqzi5j9lc3hn24rjqps5ai8d42pdnfaf0x37")))) + "1nbwdjj268hxv9lfagd9aylily9f0hhallp841v0i3imljp84bmk")))) (propagated-inputs ;; Moka is based on Faba by using it as a fallback icon set instead of ;; bundling it, so we need to add it as a propagated input. diff --git a/gnu/packages/gnu-pw-mgr.scm b/gnu/packages/gnu-pw-mgr.scm index 0d16bf5f0b..38f9e8187a 100644 --- a/gnu/packages/gnu-pw-mgr.scm +++ b/gnu/packages/gnu-pw-mgr.scm @@ -30,7 +30,7 @@ (define-public gnu-pw-mgr (package (name "gnu-pw-mgr") - (version "2.3.2") + (version "2.3.3") (source (origin (method url-fetch) @@ -38,7 +38,7 @@ version ".tar.xz")) (sha256 (base32 - "0x60g0syqpd107l8w4bl213imy2lspm4kz1j18yr1sh10rdxlgxd")))) + "04xh38j7l0sfnb01kp05xc908pvqfc0lph94k7n9bi46zy3qy7ma")))) (build-system gnu-build-system) (arguments '(#:phases diff --git a/gnu/packages/gnunet.scm b/gnu/packages/gnunet.scm index 7335742e20..7a4660cc8d 100644 --- a/gnu/packages/gnunet.scm +++ b/gnu/packages/gnunet.scm @@ -67,14 +67,14 @@ (define-public libextractor (package (name "libextractor") - (version "1.6") + (version "1.7") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/libextractor/libextractor-" version ".tar.gz")) (sha256 (base32 - "17gnpgspdhfgcr27j8sn9105vb4lw22yqdrhic62l79q5v5avm16")))) + "13wf6vj7mkv6gw8h183cnk7m24ir0gyf198pyb2148ng4klgv9p0")))) (build-system gnu-build-system) ;; WARNING: Checks require /dev/shm to be in the build chroot, especially ;; not to be a symbolic link to /run/shm. diff --git a/gnu/packages/gnupg.scm b/gnu/packages/gnupg.scm index da0c33565a..c095a966c2 100644 --- a/gnu/packages/gnupg.scm +++ b/gnu/packages/gnupg.scm @@ -245,14 +245,14 @@ compatible to GNU Pth.") (define-public gnupg (package (name "gnupg") - (version "2.2.8") + (version "2.2.9") (source (origin (method url-fetch) (uri (string-append "mirror://gnupg/gnupg/gnupg-" version ".tar.bz2")) (sha256 (base32 - "1k8dnnfs9888yp713l7kg2jg110lw47s4krx0njna6fjrsw4qyvp")))) + "0r11mx8nkh7ysrnshs560amha5csx8zcaggb5kxcksx1zymyly32")))) (build-system gnu-build-system) (native-inputs `(("pkg-config" ,pkg-config))) diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm index 21783f2ee6..445533b0c2 100644 --- a/gnu/packages/golang.scm +++ b/gnu/packages/golang.scm @@ -11,6 +11,7 @@ ;;; Copyright © 2018 Christopher Baines <mail@cbaines.net> ;;; Copyright © 2018 Tomáš Čech <sleep_walker@gnu.org> ;;; Copyright © 2018 Pierre-Antoine Rouby <pierre-antoine.rouby@inria.fr> +;;; Copyright © 2018 Pierre Neidhardt <ambrevar@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -41,6 +42,8 @@ #:use-module (gnu packages perl) #:use-module (gnu packages pkg-config) #:use-module (gnu packages pcre) + #:use-module (gnu packages lua) + #:use-module (gnu packages mp3) #:use-module (ice-9 match) #:use-module (srfi srfi-1)) @@ -1840,3 +1843,518 @@ deliver content") store, and deliver content. It's containe Docker Registry 2.0 and libraries to interacting with distribution components.") (license license:asl2.0)))) + +(define-public go-github-com-docker-go-connections + (let ((commit "3ede32e2033de7505e6500d6c868c2b9ed9f169d") + (revision "0")) + (package + (name "go-github-com-docker-go-connections") + (version (git-version "0.0.0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/docker/go-connections.git") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0v1pkr8apwmhyzbjfriwdrs1ihlk6pw7izm57r24mf9jdmg3fyb0")))) + (build-system go-build-system) + (arguments + '(#:import-path "github.com/docker/go-connections")) + (home-page "https://github.com/docker/go-connections") + (synopsis "Networking library for Go") + (description + "This packages provides a library to work with network connections in +the Go language. In particular it provides tools to deal with network address +translation (NAT), proxies, sockets, and transport layer security (TLS).") + (license license:asl2.0)))) + +(define-public go-github-com-docker-machine + (let ((commit "7b7a141da84480342357c51838be142bf183b095") + (revision "0")) + (package + (name "go-github-com-docker-machine") + (version (git-version "0.0.0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/docker/machine.git") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0bavk0lvs462yh0lnmnxi9psi5qv1x3nvzmd2b0drsahlp1gxi8s")))) + (build-system go-build-system) + (arguments + '(#:import-path "github.com/docker/machine")) + (home-page "https://github.com/docker/machine") + (synopsis "Machine management for a container-centric world") + (description + "@dfn{Machine} lets you create Docker hosts on your computer, on +hosting providers, and inside your data center. It creates servers, installs +Docker on them, then configures the Docker client to talk to them.") + (license license:asl2.0)))) + +(define-public go-github-com-gorhill-cronexpr + (let ((commit "f0984319b44273e83de132089ae42b1810f4933b") + (revision "0")) + (package + (name "go-github-com-gorhill-cronexpr") + (version (git-version "0.0.0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/gorhill/cronexpr.git") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0dphhhqy3i7265znv3m8n57l80dmaq6z4hsj5kgd87qd19z8x0l2")))) + (build-system go-build-system) + (arguments + '(#:import-path "github.com/gorhill/cronexpr")) + (home-page "https://github.com/gorhill/cronexpr") + (synopsis "Cron expression parser in the Go language") + (description + "This package provides a cron expression parser in the Go language. +Given a cron expression and a time stamp, you can get the next time stamp +which satisfies the cron expression.") + (license (list license:gpl3+ + license:asl2.0))))) + +(define-public go-gopkg-in-check-v1 + (let ((commit "20d25e2804050c1cd24a7eea1e7a6447dd0e74ec") + (revision "0")) + (package + (name "go-gopkg-in-check-v1") + (version (git-version "0.0.0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/go-check/check") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0k1m83ji9l1a7ng8a7v40psbymxasmssbrrhpdv2wl4rhs0nc3np")))) + (build-system go-build-system) + (arguments + '(#:import-path "gopkg.in/check.v1")) + (home-page "https://gopkg.in/check.v1") + (synopsis "Test framework for the Go language") + (description + "This package provides a test library for the Go language.") + (license license:asl2.0)))) + +(define-public go-gopkg-in-yaml-v2 + (let ((commit "14227de293ca979cf205cd88769fe71ed96a97e2") + (revision "0")) + (package + (name "go-gopkg-in-yaml-v2") + (version (git-version "0.0.0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://gopkg.in/yaml.v2.git") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "038hnrjcnjygyi3qidfrkpkakis82qg381sr495d2s40g2dwlzah")))) + (build-system go-build-system) + (arguments + '(#:import-path "gopkg.in/yaml.v2")) + (native-inputs + `(("go-gopkg-in-check-v1" ,go-gopkg-in-check-v1))) + (home-page "https://gopkg.in/yaml.v2") + (synopsis "YAML reader and writer for the Go language") + (description + "This package provides a Go library for encode and decode YAML +values.") + (license license:asl2.0)))) + +(define-public go-github-com-mattn-go-isatty + (let ((commit "6ca4dbf54d38eea1a992b3c722a76a5d1c4cb25c") + (revision "0")) + (package + (name "go-github-com-mattn-go-isatty") + (version (git-version "0.0.0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/mattn/go-isatty") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0zs92j2cqaw9j8qx1sdxpv3ap0rgbs0vrvi72m40mg8aa36gd39w")))) + (build-system go-build-system) + (arguments + '(#:import-path "github.com/mattn/go-isatty")) + (home-page "https://github.com/mattn/go-isatty") + (synopsis "Provide @code{isatty} for Golang") + (description "This package provides @code{isatty}, a Go module that can +tell you whether a file descriptor points to a terminal and the type of the +terminal.") + (license license:expat)))) + +(define-public go-github-com-mattn-go-colorable + (let ((commit "efa589957cd060542a26d2dd7832fd6a6c6c3ade") + (revision "0")) + (package + (name "go-github-com-mattn-go-colorable") + (version (git-version "0.0.0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/mattn/go-colorable") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0kshi4hvm0ayrsxqxy0599iv81kryhd2fn9lwjyczpj593cq069r")))) + (build-system go-build-system) + (native-inputs + `(("go-github-com-mattn-go-isatty" + ,go-github-com-mattn-go-isatty))) + (arguments + '(#:import-path "github.com/mattn/go-colorable")) + (home-page "https://github.com/mattn/go-colorable") + (synopsis "Handle ANSI color escapes on Windows") + (description "This package provides @code{colorable}, a module that +makes it possible to handle ANSI color escapes on Windows.") + (license license:expat)))) + +(define-public go-github-com-mgutz-ansi + (let ((commit "9520e82c474b0a04dd04f8a40959027271bab992") + (revision "0")) + (package + (name "go-github-com-mgutz-ansi") + (version (git-version "0.0.0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url + "https://github.com/mgutz/ansi") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "00bz22314j26736w1f0q4jy9d9dfaml17vn890n5zqy3cmvmww1j")))) + (build-system go-build-system) + (native-inputs + `(("go-github-com-mattn-go-isatty" + ,go-github-com-mattn-go-isatty) + ("go-github-com-mattn-go-colorable" + ,go-github-com-mattn-go-colorable))) + (arguments + '(#:import-path "github.com/mgutz/ansi")) + (home-page "https://github.com/mgutz/ansi") + (synopsis "Small, fast library to create ANSI colored strings and codes") + (description "This package provides @code{ansi}, a Go module that can +generate ANSI colored strings.") + (license license:expat)))) + +(define-public go-github-com-aarzilli-golua + (let ((commit "03fc4642d792b1f2bc5e7343b403cf490f8c501d") + (revision "0")) + (package + (name "go-github-com-aarzilli-golua") + (version (git-version "0.0.0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url + "https://github.com/aarzilli/golua") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1d9hr29i36cza98afj3g6rs3l7xbkprwzz0blcxsr9dd7nak20di")))) + (build-system go-build-system) + (native-inputs + `(("lua" ,lua))) + (arguments + `(#:unpack-path "github.com/aarzilli/golua" + #:import-path "github.com/aarzilli/golua/lua" + #:phases + (modify-phases %standard-phases + (replace 'build + (lambda* (#:key import-path #:allow-other-keys) + (invoke "go" "install" + "-v" ; print the name of packages as they are compiled + "-x" ; print each command as it is invoked + "-ldflags=-s -w" ; strip the symbol table and debug + "-tags" "llua" ; Latest Lua on Guix does not have a version number. + import-path))) + (replace 'check + (lambda* (#:key import-path #:allow-other-keys) + (invoke "go" "test" + "-tags" "llua" ; Latest Lua on Guix does not have a version number. + import-path)))))) + (home-page "https://github.com/aarzilli/golua") + (synopsis "Go Bindings for the Lua C API") + (description "This package provides @code{lua}, a Go module that can +run a Lua virtual machine.") + (license license:expat)))) + +(define-public go-gitlab-com-ambrevar-golua-unicode + (let ((commit "97ce517e7a1fe2407a90c317a9c74b173d396144") + (revision "0")) + (package + (name "go-gitlab-com-ambrevar-golua-unicode") + (version (git-version "0.0.0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url + "https://gitlab.com/ambrevar/golua") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1izcp7p8nagjwqd13shb0020w7xhppib1a3glw2d1468bflhksnm")))) + (build-system go-build-system) + (native-inputs + `(("lua" ,lua) + ("go-github-com-aarzilli-golua" ,go-github-com-aarzilli-golua))) + (arguments + `(#:unpack-path "gitlab.com/ambrevar/golua" + #:import-path "gitlab.com/ambrevar/golua/unicode" + #:phases + (modify-phases %standard-phases + (replace 'check + (lambda* (#:key import-path #:allow-other-keys) + (setenv "USER" "homeless-dude") + (invoke "go" "test" import-path)))))) + (home-page "https://gitlab.com/ambrevar/golua") + (synopsis "Add Unicode support to Golua") + (description "This extension to Arzilli's Golua adds Unicode support to +all functions from the Lua string library. Lua patterns are replaced by Go +regexps. This breaks compatibility with Lua, but Unicode support breaks it +anyways and Go regexps are more powerful.") + (license license:expat)))) + +(define-public go-github-com-yookoala-realpath + (let ((commit "d19ef9c409d9817c1e685775e53d361b03eabbc8") + (revision "0")) + (package + (name "go-github-com-yookoala-realpath") + (version (git-version "0.0.0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url + "https://github.com/yookoala/realpath") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0qvz1dcdldf53rq69fli76z5k1vr7prx9ds1d5rpzgs68kwn40nw")))) + (build-system go-build-system) + (arguments + `(#:import-path "github.com/yookoala/realpath")) + (home-page "https://github.com/yookoala/realpath") + (synopsis "@code{realpath} for Golang") + (description "This package provides @code{realpath}, a Go module that +when provided with a valid relative path / alias path, it will return you with +a string of its real absolute path in the system.") + (license license:expat)))) + +(define-public go-gitlab-com-ambrevar-damerau + (let ((commit "883829e1f25fad54015772ea663e69017cf22352") + (revision "0")) + (package + (name "go-gitlab-com-ambrevar-damerau") + (version (git-version "0.0.0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url + "https://gitlab.com/ambrevar/damerau") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1b9p8fypc914ij1afn6ir346zsgfqrc5mqc1k3d53n4snypq27qv")))) + (build-system go-build-system) + (arguments + `(#:import-path "gitlab.com/ambrevar/damerau")) + (home-page "https://gitlab.com/ambrevar/damerau") + (synopsis "Damerau-Levenshtein distance for Golang") + (description "This is a spelling corrector implementing the +Damerau-Levenshtein distance. Takes a string value input from the user. +Looks for an identical word on a list of words, if none is found, look for a +similar word.") + (license license:expat)))) + +(define-public go-github-com-stevedonovan-luar + (let ((commit "22d247e5366095f491cd83edf779ee99a78f5ead") + (revision "0")) + (package + (name "go-github-com-stevedonovan-luar") + (version (git-version "0.0.0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url + "https://github.com/stevedonovan/luar") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1acjgw9cz1l0l9mzkyk7irz6cfk31wnxgbwa805fvm1rqcjzin2c")))) + (build-system go-build-system) + (native-inputs + `(("go-github-com-aarzilli-golua" ,go-github-com-aarzilli-golua))) + (arguments + `(#:tests? #f ; Upstream tests are broken. + #:import-path "github.com/stevedonovan/luar")) + (home-page "https://github.com/stevedonovan/luar") + (synopsis "Lua reflection bindings for Go") + (description "Luar is designed to make using Lua from Go more +convenient. Go structs, slices and maps can be automatically converted to Lua +tables and vice-versa. The resulting conversion can either be a copy or a +proxy. In the latter case, any change made to the result will reflect on the +source. + +Any Go function can be made available to Lua scripts, without having to write +C-style wrappers. + +Luar support cyclic structures (lists, etc.). + +User-defined types can be made available to Lua as well: their exported +methods can be called and usual operations such as indexing or arithmetic can +be performed.") + (license license:expat)))) + +(define-public go-github-com-kr-text + (let ((commit "e2ffdb16a802fe2bb95e2e35ff34f0e53aeef34f") + (revision "0")) + (package + (name "go-github-com-kr-text") + (version (git-version "0.0.0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url + "https://github.com/kr/text") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1gm5bsl01apvc84bw06hasawyqm4q84vx1pm32wr9jnd7a8vjgj1")))) + (build-system go-build-system) + (arguments + `(#:import-path "github.com/kr/text")) + (home-page "https://github.com/kr/text") + (synopsis "Go package for manipulating paragraphs of text") + (description "Package @code{text} provides manipulation Go functions for +paragraphs of text.") + (license license:expat)))) + +(define-public go-github-com-michiwend-golang-pretty + (let ((commit "8ac61812ea3fa540f3f141a444fcb0dd713cdca4") + (revision "0")) + (package + (name "go-github-com-michiwend-golang-pretty") + (version (git-version "0.0.0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url + "https://github.com/michiwend/golang-pretty") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0rjfms0csjqi91xnddzx3rcrcaikc7xc027617px3kdwdap80ir4")))) + (build-system go-build-system) + (native-inputs + `(("go-github-com-kr-text" ,go-github-com-kr-text))) + (arguments + `(#:tests? #f ; Upstream tests seem to be broken. + #:import-path "github.com/michiwend/golang-pretty")) + (home-page "https://github.com/michiwend/golang-pretty") + (synopsis "Pretty printing for Go values") + (description "Package @code{pretty} provides pretty-printing for Go +values. This is useful during debugging, to avoid wrapping long output lines +in the terminal. + +It provides a function, @code{Formatter}, that can be used with any function +that accepts a format string. It also provides convenience wrappers for +functions in packages @code{fmt} and @code{log}.") + (license license:expat)))) + +(define-public go-github-com-michiwend-gomusicbrainz + (let ((commit "0cdeb13f9b24d2c714feb7e3c63d595cf7121d7d") + (revision "0")) + (package + (name "go-github-com-michiwend-gomusicbrainz") + (version (git-version "0.0.0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url + "https://github.com/michiwend/gomusicbrainz") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1li9daw0kghb80rdmxbh7g72qhxcvx3rvhwq5gs0jrr9hb8pjvcn")))) + (build-system go-build-system) + (native-inputs + `(("go-github-com-michiwend-golang-pretty" ,go-github-com-michiwend-golang-pretty) + ("go-github-com-kr-text" ,go-github-com-kr-text))) + (arguments + `(#:import-path "github.com/michiwend/gomusicbrainz")) + (home-page "https://github.com/michiwend/gomusicbrainz") + (synopsis "MusicBrainz WS2 client library for Golang") + (description "Currently GoMusicBrainz provides methods to perform search +and lookup requests. Browse requests are not supported yet.") + (license license:expat)))) + +(define-public go-github-com-wtolson-go-taglib + (let ((commit "6e68349ff94ecea412de7e748cb5eaa26f472777") + (revision "0")) + (package + (name "go-github-com-wtolson-go-taglib") + (version (git-version "0.0.0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url + "https://github.com/wtolson/go-taglib") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1cpjqnrviwflz150g78iir5ndrp3hh7a93zbp4dwbg6sb2q141p2")))) + (build-system go-build-system) + (native-inputs + `(("pkg-config" ,pkg-config) + ("taglib" ,taglib))) + (arguments + `(#:import-path "github.com/wtolson/go-taglib")) + (home-page "https://github.com/wtolson/go-taglib") + (synopsis "Go wrapper for taglib") + (description "Go wrapper for taglib") + (license license:unlicense)))) diff --git a/gnu/packages/graphics.scm b/gnu/packages/graphics.scm index fffe972659..ad5ff8ed1e 100644 --- a/gnu/packages/graphics.scm +++ b/gnu/packages/graphics.scm @@ -3,12 +3,13 @@ ;;; Copyright © 2015 Tomáš Čech <sleep_walker@gnu.org> ;;; Copyright © 2016 Leo Famulari <leo@famulari.name> ;;; Copyright © 2016, 2017 Ricardo Wurmus <rekado@elephly.net> -;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il> +;;; Copyright © 2016, 2018 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2016 Andreas Enge <andreas@enge.fr> ;;; Copyright © 2017 Manolis Fragkiskos Ragkousis <manolis837@gmail.com> ;;; Copyright © 2017, 2018 Ben Woodcroft <donttrustben@gmail.com> ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2018 Mathieu Othacehe <m.othacehe@gmail.com> +;;; Copyright © 2018 Alex Kost <alezost@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -160,19 +161,20 @@ application can be customized via its API for Python scripting.") (define-public assimp (package (name "assimp") - (version "3.3.1") + (version "4.1.0") (source (origin - (method url-fetch) - (uri (string-append "https://github.com/assimp/assimp/archive/v" - version ".tar.gz")) - (file-name (string-append name "-" version ".tar.gz")) + (method git-fetch) + (uri (git-reference + (url "https://github.com/assimp/assimp.git") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) (sha256 (base32 - "1gy7zlgkf4nmyv8n674p3f30asis0gjz8icyy11i693n13ww71fk")))) + "1rhyqfhzifdj7yibyanph3rh13ykw3i98dnn8mz65j780472hw28")))) (build-system cmake-build-system) (inputs `(("zlib" ,zlib))) - (home-page "http://assimp.org/") + (home-page "http://www.assimp.org/") (synopsis "Asset import library") (description "The Open Asset Import Library loads more than 40 3D file formats into @@ -372,13 +374,14 @@ storage of the \"EXR\" file format for storing 16-bit floating-point images.") (name "openimageio") (version "1.7.19") (source (origin - (method url-fetch) - (uri (string-append "https://github.com/OpenImageIO/oiio/" - "archive/Release-" version ".tar.gz")) - (file-name (string-append name "-" version ".tar.gz")) + (method git-fetch) + (uri (git-reference + (url "https://github.com/OpenImageIO/oiio.git") + (commit (string-append "Release-" version)))) + (file-name (git-file-name name version)) (sha256 (base32 - "1qlmfhvl2wva4aifyiq7c4sdy61ddl7wykwvlpfys9p701xghvj7")))) + "0yxxy43l3lllw7maqg42dlkgqms2d4772sxzxk7kmxg4lnhsvndc")))) (build-system cmake-build-system) ;; FIXME: To run all tests successfully, test image sets from multiple ;; third party sources have to be present. For details see @@ -389,7 +392,7 @@ storage of the \"EXR\" file format for storing 16-bit floating-point images.") (inputs `(("boost" ,boost) ("libpng" ,libpng) - ("libjpeg" ,libjpeg-8) + ("libjpeg" ,libjpeg) ("libtiff" ,libtiff) ("giflib" ,giflib) ("openexr" ,openexr) @@ -408,17 +411,19 @@ visual effects work for film.") (define-public openscenegraph (package (name "openscenegraph") - (version "3.4.0") + (version "3.6.2") (source (origin - (method url-fetch) - (uri (string-append "http://trac.openscenegraph.org/downloads/developer_releases/" - "OpenSceneGraph-" version ".zip")) + (method git-fetch) + (uri (git-reference + (url "https://github.com/openscenegraph/OpenSceneGraph") + (commit (string-append "OpenSceneGraph-" version)))) (sha256 (base32 - "03h4wfqqk7rf3mpz0sa99gy715cwpala7964z2npd8jxfn27swjw")) - (patches (search-patches "openscenegraph-ffmpeg3.patch")) - (file-name (string-append name "-" version ".zip")))) + "03jk6lclyd4biniaw04w7j0z1spkm69f1c19i37b8v9x3zv1p1id")) + (file-name (string-append name "-" version "-checkout")))) + (properties + `((upstream-name . "OpenSceneGraph"))) (build-system cmake-build-system) (arguments `(#:tests? #f ; no test target available @@ -430,11 +435,13 @@ visual effects work for film.") (assoc-ref %outputs "out") "/lib:" (assoc-ref %outputs "out") "/lib64")))) (native-inputs - `(("unzip" ,unzip))) + `(("pkg-config" ,pkg-config) + ("unzip" ,unzip))) (inputs `(("giflib" ,giflib) ("jasper" ,jasper) ("librsvg" ,librsvg) + ("libxrandr" ,libxrandr) ("pth" ,pth) ("qtbase" ,qtbase) ("ffmpeg" ,ffmpeg) diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm index 62d292264e..f179f293ea 100644 --- a/gnu/packages/guile.scm +++ b/gnu/packages/guile.scm @@ -74,6 +74,7 @@ #:use-module (guix download) #:use-module (guix git-download) #:use-module (guix build-system gnu) + #:use-module (guix build-system guile) #:use-module (guix build-system trivial) #:use-module (guix utils) #:use-module (ice-9 match) @@ -965,60 +966,8 @@ specification. These are the main features: (sha256 (base32 "0r50jlpzi940jlmxyy3ddqqwmj5r12gb4bcv0ssini9v8km13xz6")))) - (build-system trivial-build-system) - (arguments - `(#:modules ((guix build utils)) - #:builder - (begin - (use-modules (guix build utils) - (ice-9 match) - (ice-9 popen) - (ice-9 rdelim)) - - (let* ((out (assoc-ref %outputs "out")) - (guile (assoc-ref %build-inputs "guile")) - (effective (read-line - (open-pipe* OPEN_READ - (string-append guile "/bin/guile") - "-c" "(display (effective-version))"))) - (module-dir (string-append out "/share/guile/site/" - effective)) - (source (assoc-ref %build-inputs "source")) - (doc (string-append out "/share/doc/guile-minikanren")) - (scm-files '("minikanren.scm" - "minikanren/mkextraforms.scm" - "minikanren/mkprelude.scm" - "minikanren/mk.scm")) - (guild (string-append (assoc-ref %build-inputs "guile") - "/bin/guild"))) - ;; Make installation directories. - (mkdir-p (string-append module-dir "/minikanren")) - (mkdir-p doc) - - ;; Compile .scm files and install. - (chdir source) - (setenv "GUILE_AUTO_COMPILE" "0") - (for-each (lambda (file) - (let* ((dest-file (string-append module-dir "/" - file)) - (go-file (match (string-split file #\.) - ((base _) - (string-append module-dir "/" - base ".go"))))) - ;; Install source module. - (copy-file file dest-file) - ;; Install compiled module. - (invoke guild "compile" - "-L" source - "-o" go-file - file))) - scm-files) - - ;; Also copy over the README. - (install-file "README.org" doc) - - #t)))) - (inputs + (build-system guile-build-system) + (native-inputs `(("guile" ,guile-2.2))) (home-page "https://github.com/ijp/minikanren") (synopsis "MiniKanren declarative logic system, packaged for Guile") @@ -1055,46 +1004,8 @@ See http://minikanren.org/ for more on miniKanren generally.") (sha256 (base32 "09q51zkw2fypad5xixskfzw2cjhjgs5cswdp3i7cpp651rb3zndh")))) - (build-system gnu-build-system) - (arguments - `(#:modules ((guix build utils) - (ice-9 popen) - (ice-9 rdelim) - (srfi srfi-1) - (guix build gnu-build-system)) - #:tests? #f ; there is no test target - #:phases - (modify-phases %standard-phases - (delete 'configure) - (delete 'build) - (replace 'install - (lambda* (#:key outputs #:allow-other-keys) - (let* ((cwd (getcwd)) - (scm-files (find-files "." "\\.scm$")) - (effective (read-line - (open-pipe* OPEN_READ - "guile" "-c" - "(display (effective-version))"))) - (module-dir (string-append (assoc-ref outputs "out") - "/share/guile/site/" - effective))) - - ;; Make installation directories. - (mkdir-p module-dir) - - (setenv "GUILE_AUTO_COMPILE" "0") - - ;; Compile .scm files and install. - (every (lambda (file) - (let ((go-file (string-append module-dir "/" - (basename file ".scm") ".go"))) - ;; Install source module. - (install-file file module-dir) - ;; Compile and install module. - (zero? (system* "guild" "compile" "-L" cwd - "-o" go-file file)))) - scm-files))))))) - (inputs + (build-system guile-build-system) + (native-inputs `(("guile" ,guile-2.2))) (home-page "https://github.com/fisherdj/miniAdapton") (synopsis "Minimal implementation of incremental computation in Guile @@ -1120,65 +1031,25 @@ understand, extend, and port to host languages other than Scheme.") (sha256 (base32 "1ia3m7dp3lcxa048q0gqbiwwsyvn99baw6xkhb4bhhzn4k7bwyqq")))) - (build-system gnu-build-system) + (build-system guile-build-system) (arguments - `(#:modules ((guix build utils) - (ice-9 match) - (ice-9 rdelim) - (ice-9 popen) - (guix build gnu-build-system)) - #:phases - (modify-phases %standard-phases - (delete 'configure) - (delete 'build) - (delete 'check) - (replace 'install - (lambda* (#:key inputs outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (effective (read-line - (open-pipe* OPEN_READ - "guile" "-c" - "(display (effective-version))"))) - (module-dir (string-append out "/share/guile/site/" - effective)) - (source (assoc-ref inputs "source")) - (doc (string-append out "/share/doc/guile-irregex/")) - (guild (string-append (assoc-ref %build-inputs "guile") - "/bin/guild"))) - ;; Make installation directories. - (mkdir-p (string-append module-dir "/rx/source")) - (mkdir-p doc) - - ;; Compile .scm files and install. - (setenv "GUILE_AUTO_COMPILE" "0") - - (for-each (lambda (copy-info) - (match copy-info - ((src-file dest-file-basis) - (let* ((dest-file (string-append - module-dir dest-file-basis - ".scm")) - (go-file (string-append - module-dir dest-file-basis - ".go"))) - ;; Install source module. - (copy-file src-file - dest-file) - ;; Install compiled module. - (invoke guild "compile" - "-L" (getcwd) - "-o" go-file - src-file))))) - '(("irregex-guile.scm" "/rx/irregex") - ("irregex.scm" "/rx/source/irregex") - ;; Not really reachable via guile's packaging system, - ;; but nice to have around - ("irregex-utils.scm" "/rx/source/irregex-utils"))) - - ;; Also copy over the README. - (install-file "irregex.html" doc) - #t)))))) - (inputs + '(#:phases (modify-phases %standard-phases + (add-after 'unpack 'move-files-around + (lambda _ + ;; Move the relevant source files to src/ and create the + ;; rx/ directory to match the expected module hierarchy. + (mkdir-p "src/rx/source") + (rename-file "irregex-guile.scm" + "src/rx/irregex.scm") + (rename-file "irregex.scm" + "src/rx/source/irregex.scm") + ;; Not really reachable via guile's packaging system, + ;; but nice to have around. + (rename-file "irregex-utils.scm" + "src/rx/source/irregex-utils.scm") + #t))) + #:source-directory "src")) + (native-inputs `(("guile" ,guile-2.2))) (home-page "http://synthcode.com/scheme/irregex") (synopsis "S-expression based regular expressions") @@ -1207,83 +1078,35 @@ inspired by the SCSH regular expression system.") (url "https://github.com/ijp/guile-gdbm.git") (commit "fa1d5b6231d0e4d096687b378c025f2148c5f246"))) (file-name (string-append name "-" version "-checkout")) + (patches (search-patches + "guile-gdbm-ffi-support-gdbm-1.14.patch")) (sha256 (base32 "1j8wrsw7v9w6qkl47xz0rdikg50v16nn6kbs3lgzcymjzpa7babj")))) - (build-system trivial-build-system) + (build-system guile-build-system) + (arguments + '(#:phases (modify-phases %standard-phases + (add-after 'unpack 'move-examples + (lambda* (#:key outputs #:allow-other-keys) + ;; Move examples where they belong. + (let* ((out (assoc-ref outputs "out")) + (doc (string-append out "/share/doc/" + (strip-store-file-name out) + "/examples"))) + (copy-recursively "examples" doc) + (delete-file-recursively "examples") + #t))) + (add-after 'unpack 'set-libgdbm-file-name + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "gdbm.scm" + (("\\(dynamic-link \"libgdbm\"\\)") + (format #f "(dynamic-link \"~a/lib/libgdbm.so\")" + (assoc-ref inputs "gdbm")))) + #t))))) + (native-inputs + `(("guile" ,guile-2.2))) (inputs - `(("guile" ,guile-2.2) - ;; patch-and-repack doesn't work for git checkouts, - ;; so we must apply the patch manually. - ("patch" ,patch) - ("patch-file" ,(search-patch - "guile-gdbm-ffi-support-gdbm-1.14.patch")))) - (propagated-inputs `(("gdbm" ,gdbm))) - (arguments - `(#:modules - ((guix build utils)) - #:builder - (begin - (use-modules (guix build utils) - (ice-9 rdelim) - (ice-9 popen)) - - ;; Avoid warnings we can safely ignore - (setenv "GUILE_AUTO_COMPILE" "0") - - (let* ((out (assoc-ref %outputs "out")) - (effective-version - (read-line - (open-pipe* OPEN_READ - (string-append - (assoc-ref %build-inputs "guile") - "/bin/guile") - "-c" "(display (effective-version))"))) - (module-dir (string-append out "/share/guile/site/" - effective-version)) - (source (assoc-ref %build-inputs "source")) - (doc (string-append out "/share/doc")) - (guild (string-append (assoc-ref %build-inputs "guile") - "/bin/guild")) - (gdbm.scm-dest - (string-append module-dir "/gdbm.scm")) - (gdbm.go-dest - (string-append module-dir "/gdbm.go")) - (compile-file - (lambda (in-file out-file) - (invoke guild "compile" "-o" out-file in-file)))) - ;; Switch directory for compiling and installing - (chdir source) - - ;; Install the documentation. - (install-file "README.md" doc) - (copy-recursively "examples" (string-append doc "/examples")) - - ;; Make installation directories. - (mkdir-p module-dir) - - ;; copy the source - (copy-file "gdbm.scm" gdbm.scm-dest) - - ;; Patch the FFI - (substitute* gdbm.scm-dest - (("\\(dynamic-link \"libgdbm\"\\)") - (format #f "(dynamic-link \"~a/lib/libgdbm.so\")" - (assoc-ref %build-inputs "gdbm")))) - - ;; Apply the patch to add support for gdbm-1.14. - (let ((patch-command (string-append (assoc-ref %build-inputs "patch") - "/bin/patch")) - (patch-file (assoc-ref %build-inputs "patch-file"))) - (with-directory-excursion (dirname gdbm.scm-dest) - (format #t "applying '~a'...~%" patch-file) - (invoke patch-command "--force" "--input" patch-file))) - - ;; compile to the destination - (compile-file gdbm.scm-dest gdbm.go-dest) - - #t)))) (home-page "https://github.com/ijp/guile-gdbm") (synopsis "Guile bindings to the GDBM library via Guile's FFI") (description @@ -2142,32 +1965,8 @@ It has a nice, simple s-expression based syntax.") (sha256 (base32 "16xhc3an6aglnca8xl3mvgi8hsqzqn68vsl5ga4bz8bvbap5fn4p")))) - (build-system gnu-build-system) - (arguments - `(#:modules ((system base compile) - ,@%gnu-build-system-modules) - #:tests? #f ;No tests included - #:phases - (modify-phases %standard-phases - (delete 'configure) ;No configure script - (replace 'install - (lambda* (#:key outputs inputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (module-dir (string-append out "/share/guile/site/2.2")) - (language-dir (string-append module-dir "/ice-9")) - (guild (string-append (assoc-ref inputs "guile") - "/bin/guild"))) - ;; The original 'make install' is too primitive. - - ;; copy the source - (install-file "ice-9/colorized.scm" language-dir) - - ;; compile to the destination - (compile-file "ice-9/colorized.scm" - #:output-file (string-append - language-dir "/colorized.go")) - #t)))))) - (inputs + (build-system guile-build-system) + (native-inputs `(("guile" ,guile-2.2))) (home-page "https://github.com/NalaGinrut/guile-colorized") (synopsis "Colorized REPL for Guile") @@ -2175,6 +1974,78 @@ It has a nice, simple s-expression based syntax.") "Guile-colorized provides you with a colorized REPL for GNU Guile.") (license license:gpl3+))) +(define-public guile-pfds + (package + (name "guile-pfds") + (version "0.3") + (home-page "https://github.com/ijp/pfds") + (source (origin + (method git-fetch) + (uri (git-reference + (url home-page) + (commit (string-append "v" version)))) + (sha256 + (base32 + "19y33wg94pf0n98dkfqd1zbw93fgky4sawxsxl6s3vyqwl0yi5vh")) + (file-name (string-append name "-" version "-checkout")))) + (build-system guile-build-system) + (arguments + '(#:source-directory "src" + #:phases (modify-phases %standard-phases + (add-after 'unpack 'move-files-around + (lambda _ + ;; Move files under a pfds/ directory to reflect the + ;; module hierarchy. + (mkdir-p "src/pfds") + (for-each (lambda (file) + (rename-file file + (string-append "src/pfds/" + file))) + '("bbtrees.sls" + "deques" + "deques.sls" + "dlists.sls" + "fingertrees.sls" + "hamts.sls" + "heaps.sls" + "private" + "psqs.sls" + "queues" + "queues.sls" + "sequences.sls" + "sets.sls")) + + ;; In Guile <= 2.2.4, there's no way to tell 'guild + ;; compile' to accept the ".sls" extension. So... + (for-each (lambda (file) + (rename-file file + (string-append + (string-drop-right file 4) + ".scm"))) + (find-files "." "\\.sls$")) + #t))))) + (native-inputs + `(("guile" ,guile-2.2))) + (synopsis "Purely functional data structures for Guile") + (description + "This package provides purely functional data structures written in R6RS +Scheme and compiled for Guile. It has been tested with Racket, Guile 2, +Vicare Scheme and IronScheme. Right now it contains: + +@itemize +@item queues +@item deques +@item bbtrees +@item sets +@item dlists +@item priority search queues (PSQs) +@item finger trees +@item sequences +@item heaps +@item hash array mapped tries (HAMTs). +@end itemize\n") + (license license:bsd-3))) + (define-public guile-simple-zmq (let ((commit "1f3b7c0b9b249c6fde8e8a632b252d8a1b794424") (revision "1")) @@ -2191,72 +2062,20 @@ It has a nice, simple s-expression based syntax.") (base32 "0nj2pd5bsmmgd3c54wh4sixfhmsv1arsq7yam2d7487h3n9q57r7")) (file-name (git-file-name name version)))) - (build-system trivial-build-system) + (build-system guile-build-system) (arguments - `(#:modules ((guix build utils)) - #:builder - (begin - (use-modules (guix build utils) - (srfi srfi-26) - (ice-9 match) - (ice-9 popen) - (ice-9 rdelim)) - - (let* ((out (assoc-ref %outputs "out")) - (guile (assoc-ref %build-inputs "guile")) - (effective (read-line - (open-pipe* OPEN_READ - (string-append guile "/bin/guile") - "-c" "(display (effective-version))"))) - (module-dir (string-append out "/share/guile/site/" - effective)) - (go-dir (string-append out "/lib/guile/" - effective "/site-ccache/")) - (source (string-append (assoc-ref %build-inputs "source") - "/src")) - (scm-file "simple-zmq.scm") - (guild (string-append (assoc-ref %build-inputs "guile") - "/bin/guild")) - (zmq (assoc-ref %build-inputs "zeromq")) - (deps (list zmq)) - (path (string-join - (map (cut string-append <> - "/lib/") - deps) - ":"))) - ;; Make installation directories. - (mkdir-p module-dir) - (mkdir-p go-dir) - - ;; Compile .scm files and install. - (chdir source) - (setenv "GUILE_AUTO_COMPILE" "0") - (for-each (lambda (file) - (let* ((dest-file (string-append module-dir "/" - file)) - (go-file (match (string-split file #\.) - ((base _) - (string-append go-dir "/" - base ".go"))))) - ;; Install source module. - (copy-file file dest-file) - (substitute* dest-file - (("\\(dynamic-link \"libzmq\"\\)") - (format #f "(dynamic-link \"~a/lib/libzmq.so\")" - (assoc-ref %build-inputs "zeromq")))) - - ;; Install and compile module. - (unless (zero? (system* guild "compile" - "-L" source - "-o" go-file - dest-file)) - (error (format #f "Failed to compile ~s to ~s!" - file go-file))))) - (list scm-file)) - #t)))) - (inputs + `(#:source-directory "src" + #:phases (modify-phases %standard-phases + (add-after 'unpack 'set-libzmq-file-name + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "src/simple-zmq.scm" + (("\\(dynamic-link \"libzmq\"\\)") + (format #f "(dynamic-link \"~a/lib/libzmq.so\")" + (assoc-ref inputs "zeromq")))) + #t))))) + (native-inputs `(("guile" ,guile-2.2))) - (propagated-inputs + (inputs `(("zeromq" ,zeromq))) (home-page "https://github.com/jerry40/guile-simple-zmq") (synopsis "Guile wrapper over ZeroMQ library") @@ -2280,106 +2099,46 @@ messaging library.") (sha256 (base32 "0y5jr0f0dyskvsawqbf6n0bpg8jirw4mhqbarf2a6p9lxhqha9s9")))) - (build-system trivial-build-system) + (build-system guile-build-system) (arguments - `(#:modules ((guix build utils)) - #:builder - (begin - (use-modules (guix build utils) - (srfi srfi-26) - (ice-9 match) - (ice-9 popen) - (ice-9 rdelim)) - - (let* ((out (assoc-ref %outputs "out")) - (guile (assoc-ref %build-inputs "guile")) - (effective (read-line - (open-pipe* OPEN_READ - (string-append guile "/bin/guile") - "-c" "(display (effective-version))"))) - (module-dir (string-append out "/share/guile/site/" - effective)) - (kernel-dir (string-append out "/share/jupyter/kernels/guile")) - (go-dir (string-append out "/lib/guile/" - effective - "/site-ccache")) - (source (string-append (assoc-ref %build-inputs "source") - "/src")) - (scm-files '("hmac.scm" - "tools.scm" - "guile-jupyter-kernel.scm")) - (kernel-file "kernel.json") - (guild (string-append (assoc-ref %build-inputs "guile") - "/bin/guild")) - (g-szmq (assoc-ref %build-inputs "guile-simple-zmq")) - (json (assoc-ref %build-inputs "guile-json")) - (deps (list g-szmq json)) - (path (string-join - (map (cut string-append <> - "/share/guile/site/" - effective) - deps) - ":")) - (gopath (string-join - (map (cut string-append <> - "/lib/guile/" effective - "/site-ccache/") - deps) - ":"))) - - ;; Make installation directories. - (mkdir-p module-dir) - (mkdir-p kernel-dir) - (mkdir-p go-dir) - - ;; Make a writable copy of SOURCE. - (copy-recursively source ".") - - ;; Record the absolute file name of the 'openssl' command. - (substitute* "hmac.scm" - (("openssl") - (string-append (assoc-ref %build-inputs "openssl") - "/bin/openssl"))) - - ;; Compile .scm files and install. - (setenv "GUILE_AUTO_COMPILE" "0") - (setenv "GUILE_LOAD_PATH" path) - (setenv "GUILE_LOAD_COMPILED_PATH" gopath) - - (for-each (lambda (file) - (let* ((dest-file (string-append module-dir "/" - file)) - (go-file (match (string-split file #\.) - ((base _) - (string-append go-dir "/" - base ".go"))))) - ;; Install source module. - (copy-file file dest-file) - - ;; Install compiled module. - (unless (zero? (system* guild "compile" - "-L" source - "-o" go-file - file)) - (error (format #f "Failed to compile ~s to ~s!" - file go-file))))) - scm-files) - - ;; Install kernel - (copy-file kernel-file (string-append kernel-dir "/" - kernel-file)) - ;; Fix hard-coded file name in the kernel - (substitute* (string-append kernel-dir "/" - kernel-file) - (("/home/jerry/.local/share/jupyter/kernels/guile/guile-jupyter-kernel.scm") - (string-append module-dir "/guile-jupyter-kernel.scm")) - (("\"guile\"") - (string-append "\"" (assoc-ref %build-inputs "guile") - "/bin/guile\"")) - (("-s") - (string-append "--no-auto-compile\", \"-s"))) - - #t)))) + '(#:phases (modify-phases %standard-phases + (add-after 'unpack 'set-openssl-file-name + (lambda* (#:key inputs #:allow-other-keys) + ;; Record the absolute file name of the 'openssl' + ;; command. + (substitute* "src/hmac.scm" + (("openssl") + (string-append (assoc-ref inputs "openssl") + "/bin/openssl"))) + #t)) + + ;; XXX: The code uses 'include' to include its own source + ;; files, and "-L src" isn't enough in this case. + (add-before 'build 'chdir + (lambda _ (chdir "src") #t)) + (add-after 'build 'chdir-back + (lambda _ (chdir "..") #t)) + + (add-after 'install 'install-kernel + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (dir (string-append + out "/share/jupyter/kernels/guile"))) + ;; Install kernel. + (install-file "src/kernel.json" dir) + + ;; Fix hard-coded file name in the kernel. + (substitute* (string-append dir "/kernel.json") + (("/home/.*/guile-jupyter-kernel.scm") + (string-append out "/share/guile/site/" + (target-guile-effective-version) + "/guile-jupyter-kernel.scm")) + (("\"guile\"") + (string-append "\"" (assoc-ref inputs "guile") + "/bin/guile\"")) + (("-s") + (string-append "--no-auto-compile\", \"-s"))) + #t)))))) (inputs `(("openssl" ,openssl) ("guile" ,guile-2.2))) diff --git a/gnu/packages/haskell.scm b/gnu/packages/haskell.scm index 2176f07cc4..8d2dcba208 100644 --- a/gnu/packages/haskell.scm +++ b/gnu/packages/haskell.scm @@ -2487,6 +2487,31 @@ Haskell library @code{regex-base}.") @code{libtre} (fork by Roman Cheplyaka).") (license license:bsd-3))) +(define-public ghc-regex-tdfa-text + (package + (name "ghc-regex-tdfa-text") + (version "1.0.0.3") + (source + (origin + (method url-fetch) + (uri (string-append + "https://hackage.haskell.org/package/regex-tdfa-text/" + "regex-tdfa-text-" version ".tar.gz")) + (sha256 + (base32 + "0090g6lgbdm9lywpqm2d3724nnnh24nx3vnlqr96qc2w486pmmrq")))) + (build-system haskell-build-system) + (inputs + `(("ghc-text" ,ghc-text) + ("ghc-regex-base" ,ghc-regex-base) + ("ghc-regex-tdfa" ,ghc-regex-tdfa))) + (home-page + "http://hackage.haskell.org/package/regex-tdfa-text") + (synopsis "Text interface for regex-tdfa") + (description + "This provides an extra text interface for regex-tdfa.") + (license license:bsd-3))) + (define-public ghc-parsers (package (name "ghc-parsers") @@ -9678,4 +9703,23 @@ serialization code.") disk space usage.") (license license:bsd-3))) +(define-public ghc-xdg-basedir + (package + (name "ghc-xdg-basedir") + (version "0.2.2") + (source + (origin + (method url-fetch) + (uri (string-append + "https://hackage.haskell.org/package/xdg-basedir/" + "xdg-basedir-" version ".tar.gz")) + (sha256 + (base32 + "0azlzaxp2dn4l1nr7shsxah2magk1szf6fx0mv75az00qsjw6qg4")))) + (build-system haskell-build-system) + (home-page "http://github.com/willdonnelly/xdg-basedir") + (synopsis "XDG Base Directory library for Haskell") + (description "This package provides a library implementing the XDG Base Directory spec.") + (license license:bsd-3))) + ;;; haskell.scm ends here diff --git a/gnu/packages/image-viewers.scm b/gnu/packages/image-viewers.scm index b2e67e52f9..3410880a67 100644 --- a/gnu/packages/image-viewers.scm +++ b/gnu/packages/image-viewers.scm @@ -60,7 +60,7 @@ (define-public feh (package (name "feh") - (version "2.27") + (version "2.27.1") (home-page "https://feh.finalrewind.org/") (source (origin (method url-fetch) @@ -68,7 +68,7 @@ name "-" version ".tar.bz2")) (sha256 (base32 - "0kn6cka9m76697i495npd60ad64jnfnzv5z6znzyr0vlxx2nhcmg")))) + "10zk76l491s22qrv86rax6cvpgwyl3qq0izl2pbk0k1z1kw3ihvf")))) (build-system gnu-build-system) (arguments '(#:phases (modify-phases %standard-phases (delete 'configure)) diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm index 5ad6fe9487..b381c3f97b 100644 --- a/gnu/packages/image.scm +++ b/gnu/packages/image.scm @@ -1223,21 +1223,21 @@ PNG, and performs PNG integrity checks and corrections.") (define-public libjpeg-turbo (package (name "libjpeg-turbo") - (version "1.5.3") + (version "2.0.0") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/" name "/" version "/" name "-" version ".tar.gz")) (sha256 (base32 - "08r5b5mywwrxv4axvq80dm31cklz81grczlzlxr2xqa6pgi90j5j")))) - (build-system gnu-build-system) + "0s48zz6awd493hmb200abmsizh68fh1jmz98r41n4c8dbl87d23p")))) + (build-system cmake-build-system) (native-inputs `(("nasm" ,nasm))) (arguments - '(#:test-target "test" - #:configure-flags (list "--with-build-date=1970-01-01"))) - (home-page "http://www.libjpeg-turbo.org/") + '(#:configure-flags '("-DCMAKE_INSTALL_LIBDIR:PATH=lib" + "-DENABLE_STATIC=0"))) + (home-page "https://libjpeg-turbo.org/") (synopsis "SIMD-accelerated JPEG image handling library") (description "libjpeg-turbo is a JPEG image codec that accelerates baseline JPEG compression and decompression using SIMD instructions: MMX on x86, SSE2 on @@ -1248,8 +1248,10 @@ libjpeg-turbo implements both the traditional libjpeg API and the less powerful but more straightforward TurboJPEG API, and provides a full-featured Java interface. It supports color space extensions that allow it to compress from and decompress to 32-bit and big-endian pixel buffers (RGBX, XBGR, etc.).") - (license (list license:bsd-3 ; jsimd*.[ch] and most of simd/ - license:ijg)))) ; the rest + ;; libjpeg-turbo is covered by three different licenses; see LICENSE.md. + (license (list license:bsd-3 ;the TurboJPEG API library and programs + license:ijg ;the libjpeg library and associated tools + license:zlib)))) ;the libjpeg-turbo SIMD extensions (define-public niftilib (package diff --git a/gnu/packages/imagemagick.scm b/gnu/packages/imagemagick.scm index 2a8479ed26..fee335609c 100644 --- a/gnu/packages/imagemagick.scm +++ b/gnu/packages/imagemagick.scm @@ -47,14 +47,14 @@ ;; The 7 release series has an incompatible API, while the 6 series is still ;; maintained. Don't update to 7 until we've made sure that the ImageMagick ;; users are ready for the 7-series API. - (version "6.9.10-5") + (version "6.9.10-8") (source (origin (method url-fetch) (uri (string-append "mirror://imagemagick/ImageMagick-" version ".tar.xz")) (sha256 (base32 - "0sl6f9r7wb081gv8zm450x37lankwp683in1crlx6pskrbsvwc08")))) + "0l2fhqrphcx6aw8k2lc6bianfqc1dy17lkyaypfw8scgak8wq6wr")))) (build-system gnu-build-system) (arguments `(#:configure-flags '("--with-frozenpaths" "--without-gcc-arch") diff --git a/gnu/packages/irc.scm b/gnu/packages/irc.scm index 5a1df6d600..4f4e494ee5 100644 --- a/gnu/packages/irc.scm +++ b/gnu/packages/irc.scm @@ -74,7 +74,6 @@ (sha256 (base32 "1qkl3sb4ijx4k17m0c42j2p5bc4jymypwhmplm942rbrzm6mg50q")) - (patches (search-patches "quassel-qt-5.11.patch")) (modules '((guix build utils))) ;; We don't want to install the bundled scripts. (snippet diff --git a/gnu/packages/iso-codes.scm b/gnu/packages/iso-codes.scm index 9f67cf2868..67c6dc73e5 100644 --- a/gnu/packages/iso-codes.scm +++ b/gnu/packages/iso-codes.scm @@ -45,7 +45,7 @@ `(("gettext" ,gettext-minimal) ("perl" ,perl) ("python" ,python-wrapper))) - (home-page "https://pkg-isocodes.alioth.debian.org/") + (home-page "https://salsa.debian.org/iso-codes-team/iso-codes") (synopsis "Various ISO standards") (description "This package provides lists of various ISO standards (e.g. country, diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm index f73eaeacb6..e6a989d067 100644 --- a/gnu/packages/java.scm +++ b/gnu/packages/java.scm @@ -2537,6 +2537,37 @@ ClasspathX project. It provides implementations of version 3.0 of the servlet API and version 2.1 of the Java ServerPages API.") (license license:gpl3+))) +(define-public java-javaee-servletapi + (package + (name "java-javaee-servletapi") + (version "3.1.0") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/javaee/servlet-spec/" + "archive/" version ".zip")) + (file-name (string-append name "-" version ".zip")) + (sha256 + (base32 + "0m6p13vgfb1ihich1jp5j6fqlhkjsrkn32c86bsbkryp38ipwg8w")))) + (build-system ant-build-system) + (arguments + `(#:jar-name "javax-servletapi.jar" + ;; no tests + #:tests? #f + #:source-dir "src/main/java")) + (native-inputs + `(("unzip" ,unzip))) + (home-page "https://javaee.github.io/servlet-spec/") + (synopsis "Java servlet API") + (description "Java Servlet is the foundation web specification in the +Java Enterprise Platform. Developers can build web applications using the +Servlet API to interact with the request/response workflow. This project +provides information on the continued development of the Java Servlet +specification.") + ;; Main code is dual-licensed by Oracle under either GLP2 or CDDL 1.1. + ;; Some files are licensed under ASL 2.0. + (license (list license:asl2.0 license:gpl2 license:cddl1.1)))) + (define-public java-swt (package (name "java-swt") @@ -4450,7 +4481,7 @@ these scripting language engines.") #:tests? #f #:source-dir "src/java")) (inputs - `(("java-tomcat" ,java-tomcat) + `(("servlet" ,java-classpathx-servletapi) ("java-jdom" ,java-jdom) ("java-commons-beanutils" ,java-commons-beanutils))) (native-inputs @@ -6165,8 +6196,6 @@ StringTemplate also powers ANTLR.") (substitute* "ANTLRv3Parser.java" (("public Object getTree") "public CommonTree getTree")) (chdir "../../../../../java") - (invoke "antlr" "-o" "org/antlr/tool" - "org/antlr/tool/serialize.g") (substitute* "org/antlr/tool/LeftRecursiveRuleAnalyzer.java" (("import org.antlr.grammar.v3.\\*;") "import org.antlr.grammar.v3.*; import org.antlr.grammar.v3.ANTLRTreePrinter;")) @@ -7911,6 +7940,10 @@ the dependency is said to be unsatisfied, and the application is broken.") (uri (string-append "https://github.com/google/guice/archive/" version ".tar.gz")) (file-name (string-append name "-" version ".tar.gz")) + (modules '((guix build utils))) + (snippet + `(begin + (for-each delete-file (find-files "." ".*.jar")))) (sha256 (base32 "0dwmqjzlavb144ywqqglj3h68hqszkff8ai0a42hyb5il0qh4rbp")))) @@ -7943,7 +7976,7 @@ Java 6 and above.") #:tests? #f)); FIXME: not in a java subdir (inputs `(("guice" ,java-guice) - ("servlet" ,java-tomcat) + ("servlet" ,java-classpathx-servletapi) ,@(package-inputs java-guice))))) (define-public java-assertj @@ -8428,15 +8461,15 @@ algorithms and xxHash hashing algorithm.") (define-public java-bouncycastle (package (name "java-bouncycastle") - (version "1.59") + (version "1.60") (source (origin (method url-fetch) (uri (string-append "https://github.com/bcgit/bc-java/archive/r" - (substring version 0 1) "rv" + (substring version 0 1) "v" (substring version 2 4) ".tar.gz")) (sha256 (base32 - "1bwl499whlbq896w18idqw2dkp8v0wp0npv9g71i5fgf8xjh0k3q")) + "0v434513y708qc87k4xz13p2kzydc736lk3ks67df9mg11s7hchv")) (modules '((guix build utils))) (snippet '(begin @@ -10112,7 +10145,7 @@ and reporting) project dependencies. It is characterized by the following: `(("java-guice" ,java-guice) ("java-guice-servlet" ,java-guice-servlet) ("java-javax-inject" ,java-javax-inject) - ("java-tomcat" ,java-tomcat) + ("java-javaee-servletapi" ,java-javaee-servletapi) ("java-junit" ,java-junit) ("java-slf4j-api" ,java-slf4j-api) ("java-jsr305" ,java-jsr305) @@ -10276,6 +10309,7 @@ static code analysis or code manipulation."))) (method url-fetch) (uri (string-append "https://github.com/qos-ch/logback/archive/v_" version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 "1x6ga74yfgm94cfx98gybakbrlilx8i2gn6dx13l40kasmys06mi")) @@ -10306,7 +10340,7 @@ static code analysis or code manipulation."))) #t))))) (inputs `(("java-javax-mail" ,java-javax-mail) - ("java-tomcat" ,java-tomcat) + ("servlet" ,java-javaee-servletapi) ("java-commons-compiler" ,java-commons-compiler) ("java-janino" ,java-janino))) (native-inputs @@ -10350,7 +10384,7 @@ This module lays the groundwork for the other two modules.") (find-files (assoc-ref inputs input) ".*.jar")) '("java-logback-core" "java-slf4j-api" - "java-commons-compiler" "java-tomcat" + "java-commons-compiler" "servlet" "groovy"))) ":")) (apply invoke "groovyc" "-d" "build/classes" "-j" diff --git a/gnu/packages/julia.scm b/gnu/packages/julia.scm index 6fb1eee6cc..39e2322739 100644 --- a/gnu/packages/julia.scm +++ b/gnu/packages/julia.scm @@ -314,7 +314,7 @@ "USE_SYSTEM_LIBGIT2=1" "USE_SYSTEM_OPENSPECFUN=1"))) (inputs - `(("llvm" ,llvm) + `(("llvm" ,llvm-3.9.1) ;; The bundled version is 3.3.0 so stick to that version. With other ;; versions, we get test failures in 'linalg/arnoldi' as described in diff --git a/gnu/packages/kodi.scm b/gnu/packages/kodi.scm index 6f8571d22a..62a971a0a8 100644 --- a/gnu/packages/kodi.scm +++ b/gnu/packages/kodi.scm @@ -395,7 +395,7 @@ generator library for C++.") ("libxrender" ,libxrender) ("libxslt" ,libxslt) ("lzo" ,lzo) - ("mysql" ,mysql) + ("mariadb" ,mariadb) ("openssl" ,openssl) ("pcre" ,pcre) ("pulseaudio" ,pulseaudio) diff --git a/gnu/packages/libreoffice.scm b/gnu/packages/libreoffice.scm index 33ecdc47f0..dc13be19d2 100644 --- a/gnu/packages/libreoffice.scm +++ b/gnu/packages/libreoffice.scm @@ -754,7 +754,7 @@ word compounding or character encoding.") (name (match variant ("classique" "hunspell-dict-fr") (_ (string-append "hunspell-dict-fr-" variant)))) - (version "6.1") + (version "6.2") (source (origin (uri (string-append "http://www.dicollecte.org/download/fr/hunspell-french-dictionaries-v" @@ -762,7 +762,7 @@ word compounding or character encoding.") (method url-fetch) (sha256 (base32 - "0w2hzh36wj3lsj2yd4mh7z7547dg452sywj79vnzx27csclwqshc")))) + "139hfrn5p87sl8hqmgkf6sgvnxrk2mm8vd8xsm8sm98qjnwlg0f9")))) (build-system trivial-build-system) (native-inputs `(("unzip" ,unzip))) (arguments diff --git a/gnu/packages/libusb.scm b/gnu/packages/libusb.scm index e4b8bbbbed..73788ea80f 100644 --- a/gnu/packages/libusb.scm +++ b/gnu/packages/libusb.scm @@ -65,7 +65,7 @@ (arguments `(#:configure-flags '("--disable-udev"))) ;; (inputs `(("eudev" ,eudev))) - (home-page "http://libusb.info") + (home-page "https://libusb.info") (synopsis "User-space USB library") (description "Libusb is a library that gives applications easy access to USB @@ -91,7 +91,7 @@ devices on various operating systems.") `(("pkg-config" ,pkg-config))) (inputs `(("libusb" ,libusb))) - (home-page "http://libusb.info") + (home-page "https://libusb.info") (synopsis "Compatibility shim for libusb") (description "Libusb-compat provides a shim allowing applications based on older diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm index 6c79f29837..70615df93c 100644 --- a/gnu/packages/linux.scm +++ b/gnu/packages/linux.scm @@ -28,6 +28,7 @@ ;;; Copyright © 2017 nee <nee-git@hidamari.blue> ;;; Copyright © 2017 Dave Love <fx@gnu.org> ;;; Copyright © 2018 Pierre-Antoine Rouby <pierre-antoine.rouby@inria.fr> +;;; Copyright © 2018 Brendan Tildesley <brendan.tildesley@openmailbox.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -59,6 +60,7 @@ #:use-module (gnu packages calendar) #:use-module (gnu packages check) #:use-module (gnu packages crypto) + #:use-module (gnu packages cryptsetup) #:use-module (gnu packages compression) #:use-module (gnu packages databases) #:use-module (gnu packages datastructures) @@ -402,8 +404,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.17.4") -(define %linux-libre-hash "1qdywncwwaxghjidihyzvdjq7pffzlswlspjyy420ny967n818jd") +(define %linux-libre-version "4.17.10") +(define %linux-libre-hash "1ab349s18avigd2592i11pab4klqzzxy11a1zp16mb842d8chkj2") (define-public linux-libre (make-linux-libre %linux-libre-version @@ -411,8 +413,8 @@ It has been modified to remove all non-free binary blobs.") %linux-compatible-systems #:configuration-file kernel-config)) -(define %linux-libre-4.14-version "4.14.53") -(define %linux-libre-4.14-hash "1bl20q85vnhbkmjj6gvqhgp379hk26rrivwmc5g5wqz46xyavk2a") +(define %linux-libre-4.14-version "4.14.58") +(define %linux-libre-4.14-hash "1ny2b5zmgvbxglpy88aicdxix2ygr1qmar2rgaa336czfjninwr5") (define-public linux-libre-4.14 (make-linux-libre %linux-libre-4.14-version @@ -421,14 +423,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.111" - "0ld57627k6mjp14x5bvndakj6lc4l31zp2yq74h7ski2g3k7ppk2" + (make-linux-libre "4.9.115" + "12n3wwfz22hxqqy7bdchl894x5krylcd4vx65837w7rybnb5w2wj" %intel-compatible-systems #:configuration-file kernel-config)) (define-public linux-libre-4.4 - (make-linux-libre "4.4.139" - "0x58ykgx7vbv23q763ydifi548mz39nal7wbvrrl4i9ndk7pzfzz" + (make-linux-libre "4.4.144" + "1001nw9d51vbiisrjv5ffqigcwfs0r9gav2f8hkw9hzjw64nhanp" %intel-compatible-systems #:configuration-file kernel-config)) @@ -537,15 +539,15 @@ at login. Local and dynamic reconfiguration are its key features.") (define-public psmisc (package (name "psmisc") - (version "22.21") + (version "23.1") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/psmisc/psmisc/psmisc-" - version ".tar.gz")) + version ".tar.xz")) (sha256 (base32 - "0nhlm1vrrwn4a845p6y4nnnb4liq70n74zbdd5dq844jc6nkqclp")))) + "0c5s94hqpwfmyswx2f96gifa6wdbpxxpkyxcrlzbxpvmrxsd911f")))) (build-system gnu-build-system) (inputs `(("ncurses" ,ncurses))) (home-page "https://gitlab.com/psmisc/psmisc") @@ -1609,7 +1611,7 @@ processes currently causing I/O.") (define-public fuse (package (name "fuse") - (version "2.9.7") + (version "2.9.8") (source (origin (method url-fetch) (uri (string-append "https://github.com/libfuse/libfuse/releases/" @@ -1617,7 +1619,7 @@ processes currently causing I/O.") "/fuse-" version ".tar.gz")) (sha256 (base32 - "0x486nri30f7cgy0acj87v9sjxsjrr0cymrvw4h3r0sgmp8k4943")) + "1qxg1r1mgysfq6qakmvid2njph3lr00w0swvydsfl9ymilfzi12y")) (patches (search-patches "fuse-overlapping-headers.patch")))) (build-system gnu-build-system) (inputs `(("util-linux" ,util-linux))) @@ -3283,7 +3285,7 @@ and copy/paste text in the console and in xterm.") ("which" ,which) ;; The tests need 'grep' with perl regexp support. ("grep" ,grep))) - (home-page "https://btrfs.wiki.kernel.org/") + (home-page "https://btrfs.wiki.kernel.org/index.php/Main_Page") (synopsis "Create and manage btrfs copy-on-write file systems") (description "Btrfs is a @dfn{copy-on-write} (CoW) file system for Linux aimed at implementing advanced features while focusing on fault tolerance, @@ -3588,7 +3590,7 @@ The following service daemons are also provided: (define-public rng-tools (package (name "rng-tools") - (version "6.2") + (version "6.3.1") (source (origin (method url-fetch) (uri (string-append "https://github.com/nhorman/rng-tools/" @@ -3596,7 +3598,7 @@ The following service daemons are also provided: (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "0xy4qmfhvkr5z4jr9j55dn5gnajr2jccdp6n0xsxkipjcgag342j")))) + "04p7wvcm389s21y9mq8ss6z2szxi4nfrfixzwqjkq2qciz705i4s")))) (build-system gnu-build-system) (arguments `(;; Avoid using OpenSSL, curl, and libxml2, reducing the closure by 166 MiB. @@ -3699,7 +3701,45 @@ as used on certified hardware security devices.") "0zwq19siiwf09h7lwa7n7mgmrr8cxifp45lmwgcfr8c1gviv6b0i")))) (build-system gnu-build-system) (arguments - `(#:configure-flags (list "--disable-pywrap"))) + `(#:configure-flags (list "--disable-pywrap") + #:phases + (modify-phases %standard-phases + (add-after 'patch-source-shebangs 'patch-hardcoded-paths + (lambda* (#:key inputs outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (utils-linux (assoc-ref inputs "utils-linux")) + (cryptsetup (assoc-ref inputs "cryptsetup")) + (linux-pam (assoc-ref inputs "linux-pam")) + (lvm2 (assoc-ref inputs "lvm2"))) + (substitute* '("src/utils/ecryptfs-mount-private" + "src/utils/ecryptfs-umount-private" + "src/utils/ecryptfs-setup-private" + "src/utils/ecryptfs-setup-swap" + "src/utils/mount.ecryptfs.c" + "src/utils/umount.ecryptfs.c" + "src/pam_ecryptfs/pam_ecryptfs.c" + "src/desktop/ecryptfs-mount-private.desktop.in" + "src/desktop/ecryptfs-setup-private.desktop.in") + (("/bin/mount") + (string-append utils-linux "/bin/mount")) + (("/bin/umount") + (string-append utils-linux "/bin/umount")) + (("/sbin/mount.ecryptfs_private") + (string-append out "/sbin/mount.ecryptfs_private")) + (("/sbin/umount.ecryptfs_private") + (string-append out "/sbin/umount.ecryptfs_private")) + (("/usr/bin/ecryptfs-mount-private") + (string-append out "/bin/ecryptfs-mount-private")) + (("/usr/bin/ecryptfs-rewrite-file") + (string-append out "/bin/ecryptfs-rewrite-file")) + (("/usr/bin/ecryptfs-setup-private") + (string-append out "/bin/ecryptfs-setup-private")) + (("/sbin/cryptsetup") + (string-append cryptsetup "/sbin/cryptsetup")) + (("/sbin/unix_chkpwd") + (string-append linux-pam "/sbin/unix_chkpwd")) + (("/sbin/dmsetup") + (string-append lvm2 "/sbin/dmsetup"))))))))) (native-inputs `(("intltool" ,intltool) ("perl" ,perl) ; for pod2man @@ -3707,6 +3747,9 @@ as used on certified hardware security devices.") (inputs `(("keyutils" ,keyutils) ("linux-pam" ,linux-pam) + ("utils-linux" ,util-linux) + ("cryptsetup" ,cryptsetup) + ("lvm2" ,lvm2) ("nss" ,nss))) (home-page "http://ecryptfs.org/") (synopsis "eCryptfs cryptographic file system utilities") diff --git a/gnu/packages/lsof.scm b/gnu/packages/lsof.scm index 098242dc7a..8b3ebe2945 100644 --- a/gnu/packages/lsof.scm +++ b/gnu/packages/lsof.scm @@ -28,7 +28,7 @@ (define-public lsof (package (name "lsof") - (version "4.89") + (version "4.91") (source (origin (method url-fetch) @@ -53,7 +53,7 @@ (string-append "ftp://ftp.mirrorservice.org/sites/" "lsof.itap.purdue.edu/pub/tools/unix/lsof"))))) (sha256 - (base32 "061p18v0mhzq517791xkjs8a5dfynq1418a1mwxpji69zp2jzb41")))) + (base32 "18sh4hbl9jw2szkf0gvgan8g13f3g4c6s2q9h3zq5gsza9m99nn9")))) (build-system gnu-build-system) (native-inputs `(("perl" ,perl))) (arguments @@ -73,14 +73,16 @@ (add-after 'configure 'patch-timestamps (lambda _ (substitute* "Makefile" - (("`date`") "`date --date=@1`")))) + (("`date`") "`date --date=@1`")) + #t)) (add-before 'check 'disable-failing-tests (lambda _ (substitute* "tests/Makefile" ;; Fails with ‘ERROR!!! client gethostbyaddr() failure’. (("(STDTST=.*) LTsock" _ prefix) prefix) ;; Fails without access to a remote NFS server. - (("(OPTTST=.*) LTnfs" _ prefix) prefix)))) + (("(OPTTST=.*) LTnfs" _ prefix) prefix)) + #t)) (replace 'check (lambda _ (with-directory-excursion "tests" diff --git a/gnu/packages/lua.scm b/gnu/packages/lua.scm index 82ea6e02de..be77ac4a63 100644 --- a/gnu/packages/lua.scm +++ b/gnu/packages/lua.scm @@ -48,13 +48,13 @@ (define-public lua (package (name "lua") - (version "5.3.4") + (version "5.3.5") (source (origin (method url-fetch) (uri (string-append "https://www.lua.org/ftp/lua-" version ".tar.gz")) (sha256 - (base32 "0320a8dg3aci4hxla380dx1ifkw8gj4gbw5c4dz41g1kh98sm0gn")) + (base32 "1b2qn2rv96nmbm6zab4l877bd4zq7wpwm8drwjiy2ih4jqzysbhc")) (patches (search-patches "lua-pkgconfig.patch" "lua-liblua-so.patch")))) (build-system gnu-build-system) diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm index bf77b0a7fe..3d7b0e4632 100644 --- a/gnu/packages/mail.scm +++ b/gnu/packages/mail.scm @@ -261,14 +261,14 @@ aliasing facilities to work just as they would on normal mail.") (define-public mutt (package (name "mutt") - (version "1.10.0") + (version "1.10.1") (source (origin (method url-fetch) (uri (string-append "https://bitbucket.org/mutt/mutt/downloads/" "mutt-" version ".tar.gz")) (sha256 (base32 - "0nskymwr2cdapxlfv0ysz3bjwhb4kcvl5a3c39237k7r1vwva582")) + "182lkbkpd3q3l1x6bvyds90ycp38gyyxhf35ry0d3hwf2n1khjkk")) (patches (search-patches "mutt-store-references.patch")))) (build-system gnu-build-system) (inputs @@ -1071,15 +1071,15 @@ which can add many functionalities to the base client.") (define-public msmtp (package (name "msmtp") - (version "1.6.6") + (version "1.6.8") (source (origin (method url-fetch) - (uri (string-append "mirror://sourceforge/msmtp/msmtp/" version + (uri (string-append "https://marlam.de/msmtp/releases/" "/msmtp-" version ".tar.xz")) (sha256 (base32 - "0ppvww0sb09bnsrpqnvlrn8vx231r24xn2iiwpy020mxc8gxn5fs")))) + "1ysrnshvwhzwmvb2walw5i9jdzlvmckj7inr0xnvb26q0jirbzsm")))) (build-system gnu-build-system) (inputs `(("libidn" ,libidn) @@ -1089,7 +1089,7 @@ which can add many functionalities to the base client.") ("gsasl" ,gsasl))) (native-inputs `(("pkg-config" ,pkg-config))) - (home-page "http://msmtp.sourceforge.net/") + (home-page "https://marlam.de/msmtp/") (arguments `(#:configure-flags (list "--with-libgsasl" "--with-libidn" diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm index 0ffd82c377..8a4f6fb21e 100644 --- a/gnu/packages/maths.scm +++ b/gnu/packages/maths.scm @@ -207,6 +207,37 @@ programming languages.") (home-page "https://stcorp.nl/coda") (license license:gpl2+))) +(define-public qhull + (package + (name "qhull") + (version "2015.2") + (source (origin + (method url-fetch) + (uri (string-append "http://www.qhull.org/download/qhull-" + (car (string-split version #\.)) + "-src-7.2.0.tgz")) + (sha256 + (base32 + "0dm4b2xr3asy6w74khq2zg4gf26zsy3qf9sq7pf7lmrvbj911c3q")))) + (build-system cmake-build-system) + (synopsis "Calculate convex hulls and related structures") + (description + "@code{Qhull} computes the convex hull, Delaunay triangulation, Voronoi +diagram, halfspace intersection about a point, furthest-site Delaunay +triangulation, and furthest-site Voronoi diagram. The source code runs in 2-d, +3-d, 4-d, and higher dimensions. @code{Qhull} implements the Quickhull +algorithm for computing the convex hull. It handles roundoff errors from +floating point arithmetic. It computes volumes, surface areas, and +approximations to the convex hull. + +@code{Qhull} does not support triangulation of non-convex surfaces, mesh +generation of non-convex objects, medium-sized inputs in 9-D and higher, alpha +shapes, weighted Voronoi diagrams, Voronoi volumes, or constrained Delaunay +triangulations.") + (home-page "http://qhull.org") + (license (license:non-copyleft "file://COPYING.txt" + "See COPYING in the distribution.")))) + (define-public units (package (name "units") @@ -1334,6 +1365,7 @@ can solve two kinds of problems: (build-system gnu-build-system) (inputs `(("lapack" ,lapack) + ("qhull" ,qhull) ("readline" ,readline) ("gl2ps" ,gl2ps) ("glpk" ,glpk) @@ -2952,7 +2984,7 @@ access to BLIS implementations via traditional BLAS routine calls.") (define-public openlibm (package (name "openlibm") - (version "0.5.5") + (version "0.6.0") (source (origin (method url-fetch) @@ -2961,7 +2993,7 @@ access to BLIS implementations via traditional BLAS routine calls.") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "1z8cj5q8ca8kmrakwkpjxf8svi81waw0c568cx8v8pv9kvswbp07")))) + "0a5fpm8nra5ldhjk0cqd2rx1qh32wiarkxmcqcm5xl8z7l4kjm6l")))) (build-system gnu-build-system) (arguments `(#:make-flags @@ -3207,19 +3239,19 @@ Failure to do so will result in a library with poor performance.") (define-public glm (package (name "glm") - (version "0.9.6.3") + (version "0.9.9.0") (source (origin (method url-fetch) - (uri (string-append "mirror://sourceforge/ogl-math/glm-" version - "/glm-" version ".zip")) + (uri (string-append "https://github.com/g-truc/glm/releases/download/" + version "/glm-" version ".zip")) (sha256 (base32 - "1cnjmi033a16a95v6xfkr1bvfmkd26hzdjka8j1819hgn5b1nr8l")))) + "0ihjadp2sb8w312a276skfjsljm3y41bjscbxf79wn23gi00giz1")))) (build-system cmake-build-system) (native-inputs `(("unzip" ,unzip))) - (home-page "http://glm.g-truc.net") + (home-page "https://glm.g-truc.net/") (synopsis "OpenGL Mathematics library") (description "OpenGL Mathematics (GLM) is a header-only C++ mathematics library for graphics software based on the OpenGL Shading Language (GLSL) diff --git a/gnu/packages/maven.scm b/gnu/packages/maven.scm index a3e5687dc8..34fbce0e62 100644 --- a/gnu/packages/maven.scm +++ b/gnu/packages/maven.scm @@ -428,7 +428,7 @@ artifact and repository handling code.") ("java-eclipse-jetty-server-9.2" ,java-eclipse-jetty-server-9.2) ("java-eclipse-jetty-servlet-9.2" ,java-eclipse-jetty-servlet-9.2) ("java-slf4j-api" ,java-slf4j-api) - ("java-tomcat" ,java-tomcat) + ("java-javaee-servletapi" ,java-javaee-servletapi) ("maven-wagon-provider-api" ,maven-wagon-provider-api))) (synopsis "Test classes from maven-wagon") (description "Maven Wagon is a transport abstraction that is used in Maven's diff --git a/gnu/packages/mes.scm b/gnu/packages/mes.scm index 52464e28d4..8bde7b1525 100644 --- a/gnu/packages/mes.scm +++ b/gnu/packages/mes.scm @@ -25,8 +25,10 @@ #:use-module (gnu packages cross-base) #:use-module (gnu packages gcc) #:use-module (gnu packages guile) + #:use-module (gnu packages man) #:use-module (gnu packages package-management) #:use-module (gnu packages perl) + #:use-module (gnu packages texinfo) #:use-module (guix build-system gnu) #:use-module (guix download) #:use-module (guix git-download) @@ -73,7 +75,7 @@ extensive examples, including parsers for the Javascript and C99 languages.") (let ((triplet "i686-unknown-linux-gnu")) (package (name "mes") - (version "0.16") + (version "0.16.1") (source (origin (method url-fetch) (uri (string-append "https://gitlab.com/janneke/mes" @@ -81,7 +83,7 @@ extensive examples, including parsers for the Javascript and C99 languages.") "/mes-" version ".tar.gz")) (sha256 (base32 - "0c4vz1qw767af5h615055hh8zjwwmwf5mwkb64l0l921zaa9hg2n")))) + "0qghlbx2qn674q8vckxpzsd0p845kclg457bw6r25jpmslgm0bz2")))) (build-system gnu-build-system) (supported-systems '("i686-linux" "x86_64-linux")) (propagated-inputs @@ -96,7 +98,9 @@ extensive examples, including parsers for the Javascript and C99 languages.") `(("i686-linux-binutils" ,(cross-binutils triplet)) ("i686-linux-gcc" ,(cross-gcc triplet))) '()) - ("perl" ,perl))) ;build-aux/gitlog-to-changelog + ("help2man" ,help2man) + ("perl" ,perl) ;build-aux/gitlog-to-changelog + ("texinfo" ,texinfo))) (arguments `(#:phases (modify-phases %standard-phases diff --git a/gnu/packages/messaging.scm b/gnu/packages/messaging.scm index cdcd1225f2..a34f744659 100644 --- a/gnu/packages/messaging.scm +++ b/gnu/packages/messaging.scm @@ -9,10 +9,10 @@ ;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca> ;;; Copyright © 2016, 2017, 2018 Clément Lassieur <clement@lassieur.org> ;;; Copyright © 2017 Mekeor Melire <mekeor.melire@gmail.com> -;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net> +;;; Copyright © 2017, 2018 Arun Isaac <arunisaac@systemreboot.net> ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2017 Theodoros Foradis <theodoros@foradis.org> -;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com> +;;; Copyright © 2017, 2018 Rutger Helling <rhelling@mykolab.com> ;;; Copyright © 2018 Leo Famulari <leo@famulari.name> ;;; Copyright © 2018 Pierre-Antoine Rouby <contact@parouby.fr> ;;; @@ -487,14 +487,14 @@ compromised.") (define-public znc (package (name "znc") - (version "1.7.0") + (version "1.7.1") (source (origin (method url-fetch) (uri (string-append "http://znc.in/releases/archive/znc-" version ".tar.gz")) (sha256 (base32 - "0vxra50418bsjfdpf8vl70fijv8syvasjqdxfyjliff6k91k2zn0")))) + "1i1r1lh9q2mr1bg520zrvrlwhrhy6wibrin78wjxq1gab1qymks4")))) ;; TODO: autotools support has been deprecated, and new features like i18n ;; are only supported when building with cmake. (build-system gnu-build-system) @@ -873,7 +873,7 @@ protocols.") (define-public c-toxcore (package (name "c-toxcore") - (version "0.2.2") + (version "0.2.4") (source (origin (method url-fetch) @@ -882,7 +882,7 @@ protocols.") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "18bfqx0ylbas9gs91rkspf04l5fjjcl0mxm1gfs2d59bv65mvcm3")))) + "0sdszy079f82ncrgq1wsjpk2374n5hm4las75gj3lrdhljl15izl")))) (arguments `(#:tests? #f)) ; FIXME: Testsuite seems to stay stuck on test 3. Disable ; for now. @@ -961,14 +961,14 @@ instant messenger with audio and video chat capabilities.") (define-public qtox (package (name "qtox") - (version "1.16.1") + (version "1.16.3") (source (origin (method url-fetch) (uri (string-append "https://github.com/qTox/qTox/archive/v" version ".tar.gz")) (sha256 (base32 - "11l4klw0g6j4qq95krgyd0npxmmpcgk4vp9jq429sbsqn1s039j4")) + "10n3cgw9xaqin9la8wpd8v83bkjmimicgbyp5ninsdgsrgky4hmq")) (file-name (string-append name "-" version ".tar.gz")))) (build-system cmake-build-system) (arguments @@ -990,7 +990,7 @@ instant messenger with audio and video chat capabilities.") ,(list (string-append (assoc-ref inputs "qtsvg") "/lib/qt5/plugins/")))))))))) (inputs - `(("ffmpeg" ,ffmpeg-3.4) + `(("ffmpeg" ,ffmpeg) ("filteraudio" ,filteraudio) ("glib" ,glib) ("gtk+" ,gtk+-2) @@ -1644,4 +1644,77 @@ c-toxcore and ncurses. It provides audio calls, sound and desktop notifications, and Python scripting support.") (license license:gpl3+))) +(define-public libqmatrixclient + (package + (name "libqmatrixclient") + (version "0.3.0.2") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/QMatrixClient/libqmatrixclient/archive/v" + version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "0yl7lw0s2z98xkxbklkb3i8xcd9af9qayl1zxl070d8ykl6ayqy3")))) + (build-system cmake-build-system) + (inputs + `(("qt" ,qt))) + (arguments + `(#:configure-flags (list "-DBUILD_SHARED_LIBS=ON") + #:tests? #f)) ; No tests + (home-page "https://matrix.org/docs/projects/sdk/libqmatrixclient.html") + (synopsis "Qt5 client library for the Matrix instant messaging protocol") + (description "libqmatrixclient is a Qt5 library to write clients for the +Matrix instant messaging protocol. Quaternion is the reference client +implementation. Quaternion and libqmatrixclient together form the +QMatrixClient project.") + (license license:lgpl2.1+))) + +(define-public quaternion + (package + (name "quaternion") + (version "0.0.9.2") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/QMatrixClient/Quaternion/archive/v" + version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "0s2mpw11s2n21ds1spf94j1p2lj2px2bv5zxldlcx81ch0rb4ng8")))) + (build-system cmake-build-system) + (inputs + `(("libqmatrixclient" ,libqmatrixclient) + ("qt" ,qt))) + (arguments + `(#:tests? #f ; No tests + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'fix-libqmatrixclient-dynamic-linking + ;; Upstream recommends statically linking with + ;; libqmatrixclient. Patch the source so that we can dynamically + ;; link instead. In a future release, when upstream moves to + ;; dynamic linking, remove this phase. + (lambda _ + (substitute* "CMakeLists.txt" + (("^add_subdirectory\\(lib\\)" all) + (string-append "#" all))) + (for-each + (lambda (file) + (substitute* file + (("#include \"lib/([^\"]*)\"" all header) + (string-append "#include <" header ">")))) + (find-files "client" "\\.(cpp|h)$")) + #t))))) + (home-page "https://matrix.org/docs/projects/client/quaternion.html") + (synopsis "Graphical client for the Matrix instant messaging protocol") + (description "Quaternion is a Qt5 desktop client for the Matrix instant +messaging protocol. It uses libqmatrixclient and is its reference client +implementation. Quaternion and libqmatriclient together form the +QMatrixClient project.") + (license (list license:gpl3+ ; all source code + license:lgpl3+)))) ; icons/breeze + ;;; messaging.scm ends here diff --git a/gnu/packages/monitoring.scm b/gnu/packages/monitoring.scm index db6c22a69c..fae62d5493 100644 --- a/gnu/packages/monitoring.scm +++ b/gnu/packages/monitoring.scm @@ -3,6 +3,7 @@ ;;; Copyright © 2018 Sou Bunnbu <iyzsong@member.fsf.org> ;;; Copyright © 2017, 2018 Ricardo Wurmus <rekado@elephly.net> ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr> +;;; Copyright © 2018 Gábor Boskovits <boskovits@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm index bdc6d050a9..0185b8fd9c 100644 --- a/gnu/packages/music.scm +++ b/gnu/packages/music.scm @@ -50,6 +50,7 @@ #:use-module (guix build-system glib-or-gtk) #:use-module (guix build-system waf) #:use-module (guix build-system trivial) + #:use-module (guix build-system go) #:use-module (gnu packages) #:use-module (gnu packages algebra) #:use-module (gnu packages apr) @@ -128,6 +129,8 @@ #:use-module (gnu packages xml) #:use-module (gnu packages xorg) #:use-module (gnu packages xiph) + #:use-module (gnu packages golang) + #:use-module (gnu packages lua) #:use-module ((srfi srfi-1) #:select (last))) (define-public aria-maestosa @@ -4131,3 +4134,89 @@ at @code{musicbrainz.org}.") It can be used in daemon mode along with the Music-on-Console (MOC) and cmus console music players.") (license license:gpl3+))) + +(define-public demlo + (let ((commit "fe9ec4c8ac2fa995ec18e6ac86d50d46df06ec01") + (revision "0")) + (package + (name "demlo") + (version (git-version "3.8" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url + "https://gitlab.com/ambrevar/demlo") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1afkbqhzn6da7zaf5ab7dvyqj1izqhzprwfb4hw448fllda9bdvk")))) + (build-system go-build-system) + (native-inputs + `(("lua" ,lua) + ("go-github-com-mattn-go-isatty" ,go-github-com-mattn-go-isatty) + ("go-github-com-mattn-go-colorable" ,go-github-com-mattn-go-colorable) + ("go-github-com-aarzilli-golua" ,go-github-com-aarzilli-golua) + ("go-gitlab-com-ambrevar-damerau" ,go-gitlab-com-ambrevar-damerau) + ("go-gitlab-com-ambrevar-golua-unicode" ,go-gitlab-com-ambrevar-golua-unicode) + ("go-github-com-mgutz-ansi" ,go-github-com-mgutz-ansi) + ("go-github-com-michiwend-gomusicbrainz" ,go-github-com-michiwend-gomusicbrainz) + ("go-github-com-stevedonovan-luar" ,go-github-com-stevedonovan-luar) + ("go-github-com-wtolson-go-taglib" ,go-github-com-wtolson-go-taglib) + ("go-github-com-yookoala-realpath" ,go-github-com-yookoala-realpath))) + (inputs + `(("chromaprint" ,chromaprint) + ("ffmpeg" ,ffmpeg))) + (arguments + `(#:import-path "gitlab.com/ambrevar/demlo" + #:phases + (modify-phases %standard-phases + (add-after 'install 'wrap-program + (lambda* (#:key inputs outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (ffmpeg (assoc-ref inputs "ffmpeg")) + (chromaprint (assoc-ref inputs "chromaprint"))) + (wrap-program (string-append out "/bin/demlo") + `("XDG_DATA_DIRS" ":" prefix (,out)) + `("PATH" ":" prefix + ,(map (lambda (dir) + (string-append dir "/bin:" + dir "/sbin")) + (list ffmpeg chromaprint)))) + #t))) + (add-after 'install-source 'install-scripts + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (root (string-append out "/src/gitlab.com/ambrevar/demlo")) + (xdg-data-dirs (string-append out "/demlo"))) + (copy-recursively (string-append root "/actions") + (string-append xdg-data-dirs "/actions")) + (copy-recursively (string-append root "/scripts") + (string-append xdg-data-dirs "/scripts")) + (install-file (string-append root "/config.lua") xdg-data-dirs) + ;; TODO: Test fish completion. + (install-file (string-append root "/completion/demlo.fish") + (string-append out "/share/fish/vendor_completions.d")) + #t)))))) + (home-page "https://gitlab.com/ambrevar/demlo") + (synopsis "Dynamic and extensible music library organizer") + (description "Demlo is a music library organizer. It can encode, fix +case, change folder hierarchy according to tags or file properties, tag from +an online database, copy covers while ignoring duplicates or those below a +quality threshold, and much more. It makes it possible to manage your +libraries uniformly and dynamically. You can write your own rules to fit your +needs best. + +Demlo can address any of these recurring music library issues (and much more): + +@itemize +@item Fix the lack of folder structure. +@item Normalize tags, fix their case, chose which tags to keep and which to +discard. +@item Handle lossy and lossless audio differently. +@item Handle mp3 id3tags hell... +@item Handle multiple covers, whether embedded and/or external, resize covers, +discard bad quality ones. +@end itemize\n") + (license license:expat)))) diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm index b72a4734d7..90967b9b1f 100644 --- a/gnu/packages/networking.scm +++ b/gnu/packages/networking.scm @@ -22,6 +22,7 @@ ;;; Copyright © 2018 Fis Trivial <ybbs.daans@hotmail.com> ;;; Copyright © 2018 Tonton <tonton@riseup.net> ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org> +;;; Copyright © 2018 Theodoros Foradis <theodoros@foradis.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -315,6 +316,35 @@ more.") between different versions of ØMQ.") (license license:mpl2.0))) +(define-public cppzmq + (let ((revision "0") + (commit "d9f0f016c07046742738c65e1eb84722ae32d7d4")) + (package + (name "cppzmq") + (version (string-append "4.2.2-" revision "." + (string-take commit 7))) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/zeromq/cppzmq") + (commit commit))) + (sha256 + (base32 + "1gmqlm00y6xpa5m6d4ajq3ww63n2w7h4sy997wj81vcqmqx45b1f")) + (file-name (string-append name "-" version "-checkout")))) + (build-system cmake-build-system) + (arguments '(#:tests? #f)) ; No tests. + (native-inputs + `(("pkg-config" ,pkg-config))) + (inputs + `(("zeromq" ,zeromq))) + (home-page "http://zeromq.org") + (synopsis "C++ bindings for the ØMQ messaging library") + (description + "This package provides header-only C++ bindings for ØMQ. The header +files contain direct mappings of the abstractions provided by the ØMQ C API.") + (license license:expat)))) + (define-public librdkafka (package (name "librdkafka") @@ -504,7 +534,7 @@ and up to 1 Mbit/s downstream.") (define-public whois (package (name "whois") - (version "5.3.1") + (version "5.3.2") (source (origin (method url-fetch) @@ -512,7 +542,7 @@ and up to 1 Mbit/s downstream.") name "_" version ".tar.xz")) (sha256 (base32 - "0gl98l26dcgmlap0pxllbv4b9n2fr5b7zml3ijf8sf3a60qsskpg")))) + "0m3352d5b0ragygbqjbaimghrbx4va2rixa34j5a1g3jj6l4nwbr")))) (build-system gnu-build-system) (arguments `(#:tests? #f ; no test suite diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm index 61e203c611..b7e3b320f6 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 "4876bc8234095e2af191b0c6470455ce67d9f5f7") - (revision 1)) + (commit "8bbb79cf95a07a40950448a8a09d888254404ed4") + (revision 2)) (package (name "guix") @@ -118,7 +118,7 @@ (commit commit))) (sha256 (base32 - "0qw0ffrxzxfk76pp38kx222ndpsv9mbhlmfycagyipgypgjdd9lq")) + "0h83l91v2cg9bb78c7vqx9wj71ckz22jbjmm2fy4vqs9216jnvc0")) (file-name (string-append "guix-" version "-checkout")))) (build-system gnu-build-system) (arguments @@ -263,7 +263,10 @@ ("sqlite" ,sqlite) ("libgcrypt" ,libgcrypt) - ("guile" ,guile-2.2) + + ;; Use 2.2.4 to avoid various thread-safety issues while building + ;; code in parallel. + ("guile" ,guile-2.2.4) ;; Many tests rely on the 'guile-bootstrap' package, which is why we ;; have it here. @@ -345,7 +348,7 @@ the Nix package manager.") (let ((out (assoc-ref outputs "out"))) (substitute* (find-files (string-append out "/libexec")) (("exec \".*/bin/guix\"") - "exec ~root/.config/current/bin/guix")) + "exec ~root/.config/guix/current/bin/guix")) #t))) (delete 'wrap-program))))))) diff --git a/gnu/packages/patches/bind-CVE-2018-5738.patch b/gnu/packages/patches/bind-CVE-2018-5738.patch deleted file mode 100644 index ddef014651..0000000000 --- a/gnu/packages/patches/bind-CVE-2018-5738.patch +++ /dev/null @@ -1,100 +0,0 @@ -Fix CVE-2018-5738: - -https://kb.isc.org/article/AA-01616/0/CVE-2018-5738 -https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-5738 - -diff --git a/bin/named/server.c b/bin/named/server.c -index f63554e..847c4ff 100644 ---- a/bin/named/server.c -+++ b/bin/named/server.c -@@ -3725,10 +3725,6 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist, - CHECKM(named_config_getport(config, &port), "port"); - dns_view_setdstport(view, port); - -- CHECK(configure_view_acl(vconfig, config, named_g_config, -- "allow-query", NULL, actx, -- named_g_mctx, &view->queryacl)); -- - /* - * Make the list of response policy zone names for a view that - * is used for real lookups and so cares about hints. -@@ -4692,21 +4688,35 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist, - "allow-query-cache-on", NULL, actx, - named_g_mctx, &view->cacheonacl)); - /* -- * Set "allow-query-cache", "allow-recursion", and -- * "allow-recursion-on" acls if configured in named.conf. -- * (Ignore the global defaults for now, because these ACLs -- * can inherit from each other when only some of them set at -- * the options/view level.) -+ * Set the "allow-query", "allow-query-cache", "allow-recursion", -+ * and "allow-recursion-on" ACLs if configured in named.conf, but -+ * NOT from the global defaults. This is done by leaving the third -+ * argument to configure_view_acl() NULL. -+ * -+ * We ignore the global defaults here because these ACLs -+ * can inherit from each other. If any are still unset after -+ * applying the inheritance rules, we'll look up the defaults at -+ * that time. - */ -- CHECK(configure_view_acl(vconfig, config, NULL, "allow-query-cache", -- NULL, actx, named_g_mctx, &view->cacheacl)); -+ -+ /* named.conf only */ -+ CHECK(configure_view_acl(vconfig, config, NULL, -+ "allow-query", NULL, actx, -+ named_g_mctx, &view->queryacl)); -+ -+ /* named.conf only */ -+ CHECK(configure_view_acl(vconfig, config, NULL, -+ "allow-query-cache", NULL, actx, -+ named_g_mctx, &view->cacheacl)); - - if (strcmp(view->name, "_bind") != 0 && - view->rdclass != dns_rdataclass_chaos) - { -+ /* named.conf only */ - CHECK(configure_view_acl(vconfig, config, NULL, - "allow-recursion", NULL, actx, - named_g_mctx, &view->recursionacl)); -+ /* named.conf only */ - CHECK(configure_view_acl(vconfig, config, NULL, - "allow-recursion-on", NULL, actx, - named_g_mctx, &view->recursiononacl)); -@@ -4744,18 +4754,21 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist, - * the global config. - */ - if (view->recursionacl == NULL) { -+ /* global default only */ - CHECK(configure_view_acl(NULL, NULL, named_g_config, - "allow-recursion", NULL, - actx, named_g_mctx, - &view->recursionacl)); - } - if (view->recursiononacl == NULL) { -+ /* global default only */ - CHECK(configure_view_acl(NULL, NULL, named_g_config, - "allow-recursion-on", NULL, - actx, named_g_mctx, - &view->recursiononacl)); - } - if (view->cacheacl == NULL) { -+ /* global default only */ - CHECK(configure_view_acl(NULL, NULL, named_g_config, - "allow-query-cache", NULL, - actx, named_g_mctx, -@@ -4769,6 +4782,14 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist, - CHECK(dns_acl_none(mctx, &view->cacheacl)); - } - -+ if (view->queryacl == NULL) { -+ /* global default only */ -+ CHECK(configure_view_acl(NULL, NULL, named_g_config, -+ "allow-query", NULL, -+ actx, named_g_mctx, -+ &view->queryacl)); -+ } -+ - /* - * Ignore case when compressing responses to the specified - * clients. This causes case not always to be preserved, diff --git a/gnu/packages/patches/file-CVE-2017-1000249.patch b/gnu/packages/patches/file-CVE-2017-1000249.patch deleted file mode 100644 index 505acf1592..0000000000 --- a/gnu/packages/patches/file-CVE-2017-1000249.patch +++ /dev/null @@ -1,27 +0,0 @@ -https://github.com/file/file/commit/35c94dc6acc418f1ad7f6241a6680e5327495793.patch -http://openwall.com/lists/oss-security/2017/09/05/3 - -The patch is minorly modified to apply to file-5.30 - -From 35c94dc6acc418f1ad7f6241a6680e5327495793 Mon Sep 17 00:00:00 2001 -From: Christos Zoulas <christos@zoulas.com> -Date: Sun, 27 Aug 2017 07:55:02 +0000 -Subject: [PATCH] Fix always true condition (Thomas Jarosch) - ---- - src/readelf.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/readelf.c b/src/readelf.c -index 81451827..5f425c97 100644 ---- a/src/readelf.c -+++ b/src/readelf.c -@@ -511,7 +511,7 @@ do_bid_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type, - size_t noff, size_t doff, int *flags) - { - if (namesz == 4 && strcmp((char *)&nbuf[noff], "GNU") == 0 && -- type == NT_GNU_BUILD_ID && (descsz >= 4 || descsz <= 20)) { -+ type == NT_GNU_BUILD_ID && (descsz >= 4 && descsz <= 20)) { - uint8_t desc[20]; - const char *btype; - uint32_t i; diff --git a/gnu/packages/patches/fltk-shared-lib-defines.patch b/gnu/packages/patches/fltk-shared-lib-defines.patch deleted file mode 100644 index d36a50ff5e..0000000000 --- a/gnu/packages/patches/fltk-shared-lib-defines.patch +++ /dev/null @@ -1,51 +0,0 @@ -This patch from upstream revision 10588. - ---- fltk-1.3.3/src/Xutf8.h -+++ fltk-1.3.3/src/Xutf8.h -@@ -25,6 +25,7 @@ - #include <X11/Xlib.h> - #include <X11/Xlocale.h> - #include <X11/Xutil.h> -+#include <FL/Fl_Export.H> - - typedef struct { - int nb_font; -@@ -98,8 +99,8 @@ - XUtf8FontStruct *font_set, - unsigned int ucs); - --int --XGetUtf8FontAndGlyph( -+FL_EXPORT int -+fl_XGetUtf8FontAndGlyph( - XUtf8FontStruct *font_set, - unsigned int ucs, - XFontStruct **fnt, ---- fltk-1.3.3/src/gl_draw.cxx -+++ fltk-1.3.3/src/gl_draw.cxx -@@ -114,7 +114,7 @@ - for (int i = 0; i < 0x400; i++) { - XFontStruct *font = NULL; - unsigned short id; -- XGetUtf8FontAndGlyph(gl_fontsize->font, ii, &font, &id); -+ fl_XGetUtf8FontAndGlyph(gl_fontsize->font, ii, &font, &id); - if (font) glXUseXFont(font->fid, id, 1, gl_fontsize->listbase+ii); - ii++; - } ---- fltk-1.3.3/src/xutf8/utf8Wrap.c -+++ fltk-1.3.3/src/xutf8/utf8Wrap.c -@@ -816,10 +816,10 @@ - /** get the X font and glyph ID of a UCS char **/ - /*****************************************************************************/ - int --XGetUtf8FontAndGlyph(XUtf8FontStruct *font_set, -- unsigned int ucs, -- XFontStruct **fnt, -- unsigned short *id) { -+fl_XGetUtf8FontAndGlyph(XUtf8FontStruct *font_set, -+ unsigned int ucs, -+ XFontStruct **fnt, -+ unsigned short *id) { - - /* int x; */ - int *encodings; /* encodings array */ diff --git a/gnu/packages/patches/fltk-xfont-on-demand.patch b/gnu/packages/patches/fltk-xfont-on-demand.patch deleted file mode 100644 index cdcdd9af05..0000000000 --- a/gnu/packages/patches/fltk-xfont-on-demand.patch +++ /dev/null @@ -1,45 +0,0 @@ -Fixes undefined reference to `Fl_XFont_On_Demand::value()'. -From <http://www.fltk.org/str.php?L3156+P0+S0+C0+I0+E0+V1+QOn_Demand>. - -Index: src/fl_font.cxx -=================================================================== ---- fltk-1.3.3/src/fl_font.cxx (revision 10503) -+++ fltk-1.3.3/src/fl_font.cxx (revision 10504) -@@ -55,6 +55,12 @@ - # include "fl_font_x.cxx" - #endif // WIN32 - -+#if ! (defined(WIN32) || defined(__APPLE__)) -+XFontStruct *fl_X_core_font() -+{ -+ return fl_xfont.value(); -+} -+#endif - - double fl_width(const char* c) { - if (c) return fl_width(c, (int) strlen(c)); -Index: src/gl_draw.cxx -=================================================================== ---- fltk-1.3.3/src/gl_draw.cxx (revision 10503) -+++ fltk-1.3.3/src/gl_draw.cxx (revision 10504) -@@ -81,7 +81,7 @@ - * then sorting through them at draw time (for normal X rendering) to find which one can - * render the current glyph... But for now, just use the first font in the list for GL... - */ -- XFontStruct *font = fl_xfont; -+ XFontStruct *font = fl_X_core_font(); - int base = font->min_char_or_byte2; - int count = font->max_char_or_byte2-base+1; - fl_fontsize->listbase = glGenLists(256); -Index: FL/x.H -=================================================================== ---- fltk-1.3.3/FL/x.H (revision 10503) -+++ fltk-1.3.3/FL/x.H (revision 10504) -@@ -132,6 +132,7 @@ - XFontStruct *ptr; - }; - extern FL_EXPORT Fl_XFont_On_Demand fl_xfont; -+extern FL_EXPORT XFontStruct* fl_X_core_font(); - - // this object contains all X-specific stuff about a window: - // Warning: this object is highly subject to change! diff --git a/gnu/packages/patches/ghostscript-CVE-2018-10194.patch b/gnu/packages/patches/ghostscript-CVE-2018-10194.patch new file mode 100644 index 0000000000..242e57c27c --- /dev/null +++ b/gnu/packages/patches/ghostscript-CVE-2018-10194.patch @@ -0,0 +1,52 @@ +Fix CVE-2018-10194: + +https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-10194 +https://bugs.ghostscript.com/show_bug.cgi?id=699255 + +Patch copied from upstream source repository: + +https://git.ghostscript.com/?p=ghostpdl.git;a=commit;h=39b1e54b2968620723bf32e96764c88797714879 + +From 39b1e54b2968620723bf32e96764c88797714879 Mon Sep 17 00:00:00 2001 +From: Ken Sharp <ken.sharp@artifex.com> +Date: Wed, 18 Apr 2018 15:46:32 +0100 +Subject: [PATCH] pdfwrite - Guard against trying to output an infinite number + +Bug #699255 " Buffer overflow on pprintg1 due to mishandle postscript file data to pdf" + +The file uses an enormous parameter to xyxhow, causing an overflow in +the calculation of text positioning (value > 1e39). + +Since this is basically a nonsense value, and PostScript only supports +real values up to 1e38, this patch follows the same approach as for +a degenerate CTM, and treats it as 0. + +Adobe Acrobat Distiller throws a limitcheck error, so we could do that +instead if this approach proves to be a problem. +--- + devices/vector/gdevpdts.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/devices/vector/gdevpdts.c b/devices/vector/gdevpdts.c +index 848ad781f..172fe6bc3 100644 +--- a/devices/vector/gdevpdts.c ++++ b/devices/vector/gdevpdts.c +@@ -103,9 +103,14 @@ append_text_move(pdf_text_state_t *pts, double dw) + static int + set_text_distance(gs_point *pdist, double dx, double dy, const gs_matrix *pmat) + { +- int code = gs_distance_transform_inverse(dx, dy, pmat, pdist); ++ int code; + double rounded; + ++ if (dx > 1e38 || dy > 1e38) ++ code = gs_error_undefinedresult; ++ else ++ code = gs_distance_transform_inverse(dx, dy, pmat, pdist); ++ + if (code == gs_error_undefinedresult) { + /* The CTM is degenerate. + Can't know the distance in user space. +-- +2.18.0 + diff --git a/gnu/packages/patches/mariadb-gcc-ice.patch b/gnu/packages/patches/mariadb-gcc-ice.patch new file mode 100644 index 0000000000..59b188f45a --- /dev/null +++ b/gnu/packages/patches/mariadb-gcc-ice.patch @@ -0,0 +1,24 @@ +Work around this GCC ICE: <https://bugs.gnu.org/31708>. It shows up +only when doing native compiles on armhf-linux. + +--- mariadb-10.1.33/plugin/semisync/semisync_master.cc 2018-07-28 02:13:12.604020250 +0200 ++++ mariadb-10.1.33/plugin/semisync/semisync_master.cc 2018-07-28 02:14:11.907753417 +0200 +@@ -847,6 +847,8 @@ + return function_exit(kWho, 0); + } + ++volatile const void *kSyncHeaderPtr = &ReplSemiSyncMaster::kSyncHeader; ++ + int ReplSemiSyncMaster::reserveSyncHeader(unsigned char *header, + unsigned long size) + { +@@ -873,7 +875,7 @@ + /* Set the magic number and the sync status. By default, no sync + * is required. + */ +- memcpy(header, kSyncHeader, sizeof(kSyncHeader)); ++ memcpy(header, (void *)kSyncHeaderPtr, sizeof(kSyncHeader)); + hlen= sizeof(kSyncHeader); + } + return function_exit(kWho, hlen); + diff --git a/gnu/packages/patches/monero-use-system-miniupnpc.patch b/gnu/packages/patches/monero-use-system-miniupnpc.patch new file mode 100644 index 0000000000..6bc825d121 --- /dev/null +++ b/gnu/packages/patches/monero-use-system-miniupnpc.patch @@ -0,0 +1,111 @@ +This reverts commit 1e20d705e7c64d2b17c031f345057d1e8850fafa, so that it's possible to use our own +miniupnpc, instead of a git submodule. +--- + CMakeLists.txt | 8 ++++++++ + external/CMakeLists.txt | 41 +++++++++++++++++++++++++++++++---------- + src/p2p/net_node.inl | 13 ++++++++++--- + 3 files changed, 49 insertions(+), 13 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 3b93988e..ef948885 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -430,6 +430,14 @@ include_directories("${CMAKE_CURRENT_BINARY_DIR}/translations") + + add_subdirectory(external) + ++# Final setup for miniupnpc ++if(UPNP_STATIC OR IOS) ++ add_definitions("-DUPNP_STATIC") ++else() ++ add_definitions("-DUPNP_DYNAMIC") ++ include_directories(${UPNP_INCLUDE}) ++endif() ++ + # Final setup for libunbound + include_directories(${UNBOUND_INCLUDE}) + link_directories(${UNBOUND_LIBRARY_DIRS}) +diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt +index 1fc4d64c..b4f712ee 100644 +--- a/external/CMakeLists.txt ++++ b/external/CMakeLists.txt +@@ -34,21 +34,42 @@ + # We always compile if we are building statically to reduce static dependency issues... + # ...except for FreeBSD, because FreeBSD is a special case that doesn't play well with + # others. ++if(NOT IOS) ++ find_package(Miniupnpc QUIET) ++endif() + +-find_package(Miniupnpc REQUIRED) ++# If we have the correct shared version and we're not building static, use it ++if(STATIC OR IOS) ++ set(USE_SHARED_MINIUPNPC false) ++elseif(MINIUPNP_FOUND AND MINIUPNPC_VERSION_1_7_OR_HIGHER) ++ set(USE_SHARED_MINIUPNPC true) ++endif() + +-message(STATUS "Using in-tree miniupnpc") ++if(USE_SHARED_MINIUPNPC) ++ message(STATUS "Using shared miniupnpc found at ${MINIUPNP_INCLUDE_DIR}") + +-add_subdirectory(miniupnp/miniupnpc) ++ set(UPNP_STATIC false PARENT_SCOPE) ++ set(UPNP_INCLUDE ${MINIUPNP_INCLUDE_DIR} PARENT_SCOPE) ++ set(UPNP_LIBRARIES ${MINIUPNP_LIBRARY} PARENT_SCOPE) ++else() ++ if(STATIC) ++ message(STATUS "Using miniupnpc from local source tree for static build") ++ else() ++ message(STATUS "Using miniupnpc from local source tree (/external/miniupnp/miniupnpc)") ++ endif() + +-set_property(TARGET libminiupnpc-static PROPERTY FOLDER "external") +-if(MSVC) +- set_property(TARGET libminiupnpc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -wd4244 -wd4267") +-elseif(NOT MSVC) +- set_property(TARGET libminiupnpc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-undef -Wno-unused-result -Wno-unused-value") +-endif() ++ add_subdirectory(miniupnp/miniupnpc) ++ ++ set_property(TARGET libminiupnpc-static PROPERTY FOLDER "external") ++ if(MSVC) ++ set_property(TARGET libminiupnpc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -wd4244 -wd4267") ++ elseif(NOT MSVC) ++ set_property(TARGET libminiupnpc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-undef -Wno-unused-result -Wno-unused-value") ++ endif() + +-set(UPNP_LIBRARIES "libminiupnpc-static" PARENT_SCOPE) ++ set(UPNP_STATIC true PARENT_SCOPE) ++ set(UPNP_LIBRARIES "libminiupnpc-static" PARENT_SCOPE) ++endif() + + find_package(Unbound) + +diff --git a/src/p2p/net_node.inl b/src/p2p/net_node.inl +index 9b21705e..76340a22 100644 +--- a/src/p2p/net_node.inl ++++ b/src/p2p/net_node.inl +@@ -49,9 +49,16 @@ + #include "storages/levin_abstract_invoke2.h" + #include "cryptonote_core/cryptonote_core.h" + +-#include <miniupnp/miniupnpc/miniupnpc.h> +-#include <miniupnp/miniupnpc/upnpcommands.h> +-#include <miniupnp/miniupnpc/upnperrors.h> ++// We have to look for miniupnpc headers in different places, dependent on if its compiled or external ++#ifdef UPNP_STATIC ++ #include <miniupnp/miniupnpc/miniupnpc.h> ++ #include <miniupnp/miniupnpc/upnpcommands.h> ++ #include <miniupnp/miniupnpc/upnperrors.h> ++#else ++ #include "miniupnpc.h" ++ #include "upnpcommands.h" ++ #include "upnperrors.h" ++#endif + + #undef MONERO_DEFAULT_LOG_CATEGORY + #define MONERO_DEFAULT_LOG_CATEGORY "net.p2p" +-- +2.16.2 + diff --git a/gnu/packages/patches/openbabel-fix-crash-on-nwchem-output.patch b/gnu/packages/patches/openbabel-fix-crash-on-nwchem-output.patch new file mode 100644 index 0000000000..879df026a1 --- /dev/null +++ b/gnu/packages/patches/openbabel-fix-crash-on-nwchem-output.patch @@ -0,0 +1,34 @@ +From 52cea818bf68f8a2d3c48d55d00c2f8b7da25e4c Mon Sep 17 00:00:00 2001 +From: Daniel Hogan <daniel.hogan@usask.ca> +Date: Tue, 28 Mar 2017 22:21:18 -0600 +Subject: [PATCH] Remove delete statement. + +When from_scratch is true, coordinates is not allocated. A separate if +statement was added to handle the case when from_scratch is true that +does not try to free coordinates. +--- + src/formats/nwchemformat.cpp | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +diff --git a/src/formats/nwchemformat.cpp b/src/formats/nwchemformat.cpp +index 6f625ad5b..79298555f 100644 +--- a/src/formats/nwchemformat.cpp ++++ b/src/formats/nwchemformat.cpp +@@ -232,11 +232,14 @@ static const char* OPTIMIZATION_END_PATTERN = " Optimization converged"; + break; + tokenize(vs,buffer); + } +- if ((from_scratch)||(i != natoms)) +- { ++ if (from_scratch) ++ { ++ return; ++ } ++ if (i != natoms) { + delete[] coordinates; + return; +- } ++ } + molecule->AddConformer(coordinates); + } + diff --git a/gnu/packages/patches/openscenegraph-ffmpeg3.patch b/gnu/packages/patches/openscenegraph-ffmpeg3.patch deleted file mode 100644 index 02c04a5583..0000000000 --- a/gnu/packages/patches/openscenegraph-ffmpeg3.patch +++ /dev/null @@ -1,156 +0,0 @@ -Description: Replace deprecated FFmpeg API -Author: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com> -See <http://forum.openscenegraph.org/viewtopic.php?t=15832>. ---- a/src/osgPlugins/ffmpeg/FFmpegDecoderVideo.cpp -+++ b/src/osgPlugins/ffmpeg/FFmpegDecoderVideo.cpp -@@ -71,7 +71,7 @@ void FFmpegDecoderVideo::open(AVStream * - findAspectRatio(); - - // Find out whether we support Alpha channel -- m_alpha_channel = (m_context->pix_fmt == PIX_FMT_YUVA420P); -+ m_alpha_channel = (m_context->pix_fmt == AV_PIX_FMT_YUVA420P); - - // Find out the framerate - m_frame_rate = av_q2d(stream->avg_frame_rate); -@@ -91,20 +91,19 @@ void FFmpegDecoderVideo::open(AVStream * - throw std::runtime_error("avcodec_open() failed"); - - // Allocate video frame -- m_frame.reset(avcodec_alloc_frame()); -+ m_frame.reset(av_frame_alloc()); - - // Allocate converted RGB frame -- m_frame_rgba.reset(avcodec_alloc_frame()); -- m_buffer_rgba[0].resize(avpicture_get_size(PIX_FMT_RGB24, width(), height())); -+ m_frame_rgba.reset(av_frame_alloc()); -+ m_buffer_rgba[0].resize(avpicture_get_size(AV_PIX_FMT_RGB24, width(), height())); - m_buffer_rgba[1].resize(m_buffer_rgba[0].size()); - - // Assign appropriate parts of the buffer to image planes in m_frame_rgba -- avpicture_fill((AVPicture *) (m_frame_rgba).get(), &(m_buffer_rgba[0])[0], PIX_FMT_RGB24, width(), height()); -+ avpicture_fill((AVPicture *) (m_frame_rgba).get(), &(m_buffer_rgba[0])[0], AV_PIX_FMT_RGB24, width(), height()); - - // Override get_buffer()/release_buffer() from codec context in order to retrieve the PTS of each frame. - m_context->opaque = this; -- m_context->get_buffer = getBuffer; -- m_context->release_buffer = releaseBuffer; -+ m_context->get_buffer2 = getBuffer; - } - - -@@ -263,8 +262,8 @@ int FFmpegDecoderVideo::convert(AVPictur - #ifdef USE_SWSCALE - if (m_swscale_ctx==0) - { -- m_swscale_ctx = sws_getContext(src_width, src_height, (PixelFormat) src_pix_fmt, -- src_width, src_height, (PixelFormat) dst_pix_fmt, -+ m_swscale_ctx = sws_getContext(src_width, src_height, (AVPixelFormat) src_pix_fmt, -+ src_width, src_height, (AVPixelFormat) dst_pix_fmt, - /*SWS_BILINEAR*/ SWS_BICUBIC, NULL, NULL, NULL); - } - -@@ -311,14 +310,14 @@ void FFmpegDecoderVideo::publishFrame(co - AVPicture * const dst = (AVPicture *) m_frame_rgba.get(); - - // Assign appropriate parts of the buffer to image planes in m_frame_rgba -- avpicture_fill((AVPicture *) (m_frame_rgba).get(), &(m_buffer_rgba[m_writeBuffer])[0], PIX_FMT_RGB24, width(), height()); -+ avpicture_fill((AVPicture *) (m_frame_rgba).get(), &(m_buffer_rgba[m_writeBuffer])[0], AV_PIX_FMT_RGB24, width(), height()); - - // Convert YUVA420p (i.e. YUV420p plus alpha channel) using our own routine - -- if (m_context->pix_fmt == PIX_FMT_YUVA420P) -+ if (m_context->pix_fmt == AV_PIX_FMT_YUVA420P) - yuva420pToRgba(dst, src, width(), height()); - else -- convert(dst, PIX_FMT_RGB24, src, m_context->pix_fmt, width(), height()); -+ convert(dst, AV_PIX_FMT_RGB24, src, m_context->pix_fmt, width(), height()); - - // Wait 'delay' seconds before publishing the picture. - int i_delay = static_cast<int>(delay * 1000000 + 0.5); -@@ -345,7 +344,7 @@ void FFmpegDecoderVideo::publishFrame(co - - void FFmpegDecoderVideo::yuva420pToRgba(AVPicture * const dst, AVPicture * const src, int width, int height) - { -- convert(dst, PIX_FMT_RGB24, src, m_context->pix_fmt, width, height); -+ convert(dst, AV_PIX_FMT_RGB24, src, m_context->pix_fmt, width, height); - - const size_t bpp = 4; - -@@ -363,31 +362,28 @@ void FFmpegDecoderVideo::yuva420pToRgba( - } - } - -- -- --int FFmpegDecoderVideo::getBuffer(AVCodecContext * const context, AVFrame * const picture) -+int FFmpegDecoderVideo::getBuffer(AVCodecContext * const context, AVFrame * const picture, int flags) - { -+ AVBufferRef *ref; - const FFmpegDecoderVideo * const this_ = reinterpret_cast<const FFmpegDecoderVideo*>(context->opaque); - -- const int result = avcodec_default_get_buffer(context, picture); -+ const int result = avcodec_default_get_buffer2(context, picture, flags); - int64_t * p_pts = reinterpret_cast<int64_t*>( av_malloc(sizeof(int64_t)) ); - - *p_pts = this_->m_packet_pts; - picture->opaque = p_pts; - -+ ref = av_buffer_create((uint8_t *)picture->opaque, sizeof(int64_t), FFmpegDecoderVideo::freeBuffer, picture->buf[0], flags); -+ picture->buf[0] = ref; -+ - return result; - } - -- -- --void FFmpegDecoderVideo::releaseBuffer(AVCodecContext * const context, AVFrame * const picture) -+void FFmpegDecoderVideo::freeBuffer(void *opaque, uint8_t *data) - { -- if (picture != 0) -- av_freep(&picture->opaque); -- -- avcodec_default_release_buffer(context, picture); -+ AVBufferRef *ref = (AVBufferRef *)opaque; -+ av_buffer_unref(&ref); -+ av_free(data); - } - -- -- - } // namespace osgFFmpeg ---- a/src/osgPlugins/ffmpeg/FFmpegDecoderVideo.hpp -+++ b/src/osgPlugins/ffmpeg/FFmpegDecoderVideo.hpp -@@ -94,8 +94,8 @@ private: - int src_pix_fmt, int src_width, int src_height); - - -- static int getBuffer(AVCodecContext * context, AVFrame * picture); -- static void releaseBuffer(AVCodecContext * context, AVFrame * picture); -+ static int getBuffer(AVCodecContext * context, AVFrame * picture, int flags); -+ static void freeBuffer(void * opaque, uint8_t *data); - - PacketQueue & m_packets; - FFmpegClocks & m_clocks; ---- a/src/osgPlugins/ffmpeg/FFmpegParameters.cpp -+++ b/src/osgPlugins/ffmpeg/FFmpegParameters.cpp -@@ -19,7 +19,7 @@ extern "C" - #include <libavutil/pixdesc.h> - } - --inline PixelFormat osg_av_get_pix_fmt(const char *name) { return av_get_pix_fmt(name); } -+inline AVPixelFormat osg_av_get_pix_fmt(const char *name) { return av_get_pix_fmt(name); } - - - namespace osgFFmpeg { ---- a/src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp 2016-02-18 21:25:39.627923629 +0000 -+++ b/src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp 2016-02-18 21:26:17.071140100 +0000 -@@ -227,8 +227,7 @@ - if (avcodec_open2(m_context, p_codec, NULL) < 0) - throw std::runtime_error("avcodec_open() failed"); - -- m_context->get_buffer = avcodec_default_get_buffer; -- m_context->release_buffer = avcodec_default_release_buffer; -+ m_context->get_buffer2 = avcodec_default_get_buffer2; - - } - diff --git a/gnu/packages/patches/pyqt-public-sip.patch b/gnu/packages/patches/pyqt-public-sip.patch new file mode 100644 index 0000000000..5ec45f032b --- /dev/null +++ b/gnu/packages/patches/pyqt-public-sip.patch @@ -0,0 +1,55 @@ +https://sources.debian.org/data/main/p/pyqt5/5.11.2+dfsg-1/debian/patches/public_sip.diff + +From: Dmitry Shachnev <mitya57@debian.org> +Date: Tue, 3 Jul 2018 09:46:42 +0300 +Subject: Use the public version of sip module + +Per https://www.debian.org/doc/debian-policy/#convenience-copies-of-code. +--- + configure.py | 19 +------------------ + 1 file changed, 1 insertion(+), 18 deletions(-) + +diff --git a/configure.py b/configure.py +index 7c48136..ca23f93 100644 +--- a/configure.py ++++ b/configure.py +@@ -642,15 +642,6 @@ class TargetConfiguration: + "Unable to import enum. Please install the enum34 " + "package from PyPI.") + +- # Check there is a private copy of the sip module already installed. +- try: +- from PyQt5 import sip +- except ImportError: +- error( +- "Unable to import PyQt5.sip. Make sure you have " +- "configured SIP to create a private copy of the sip " +- "module.") +- + # Get the details of the Python interpreter library. + py_major = self.py_version >> 16 + py_minor = (self.py_version >> 8) & 0x0ff +@@ -2438,7 +2429,7 @@ def get_sip_flags(target_config): + the target configuration. + """ + +- sip_flags = ['-n', 'PyQt5.sip'] ++ sip_flags = ['-n', 'sip'] + + # If we don't check for signed interpreters, we exclude the 'VendorID' + # feature +@@ -2914,14 +2905,6 @@ def check_sip(target_config): + target_config is the target configuration. + """ + +- # Check there is a private copy of the sip module already installed. +- try: +- from PyQt5 import sip +- except ImportError: +- error( +- "Unable to import PyQt5.sip. Make sure you have configured " +- "SIP to create a private copy of the sip module.") +- + if target_config.sip is None: + error( + "Make sure you have a working sip on your PATH or use the " diff --git a/gnu/packages/patches/python-cairocffi-dlopen-path.patch b/gnu/packages/patches/python-cairocffi-dlopen-path.patch new file mode 100644 index 0000000000..e7a7fe3737 --- /dev/null +++ b/gnu/packages/patches/python-cairocffi-dlopen-path.patch @@ -0,0 +1,10 @@ +--- cairocffi-0.8.0/cairocffi/__init__.py.orig 2018-07-16 11:00:59.075664158 +0200 ++++ cairocffi-0.8.0/cairocffi/__init__.py 2018-07-16 17:09:42.471958015 +0200 +@@ -35,6 +35,7 @@ + return lib + except OSError: + pass ++ return ffi.dlopen(name) + raise OSError("dlopen() failed to load a library: %s" % ' / '.join(names)) + + diff --git a/gnu/packages/patches/quassel-qt-5.11.patch b/gnu/packages/patches/quassel-qt-5.11.patch deleted file mode 100644 index 545f8b7610..0000000000 --- a/gnu/packages/patches/quassel-qt-5.11.patch +++ /dev/null @@ -1,72 +0,0 @@ -https://github.com/quassel/quassel/commit/92f4dca367c3a6f0536a1e0f3fbb44bb6ed4da62.patch -This can be removed after quassel 0.12.5. - -From 92f4dca367c3a6f0536a1e0f3fbb44bb6ed4da62 Mon Sep 17 00:00:00 2001 -From: Manuel Nickschas <sputnick@quassel-irc.org> -Date: Thu, 3 May 2018 23:19:34 +0200 -Subject: [PATCH] cmake: Fix build with Qt 5.11 - -Qt 5.11 removes the qt5_use_modules function, so add a copy. If -present, the Qt-provided function will be used instead. - -Closes GH-355. ---- - cmake/QuasselMacros.cmake | 38 ++++++++++++++++++++++++++++++++++++++ - 1 file changed, 38 insertions(+) - -diff --git a/cmake/QuasselMacros.cmake b/cmake/QuasselMacros.cmake -index 652c0042d..d77ba1cfb 100644 ---- a/cmake/QuasselMacros.cmake -+++ b/cmake/QuasselMacros.cmake -@@ -5,6 +5,9 @@ - # The qt4_use_modules function was taken from CMake's Qt4Macros.cmake: - # (C) 2005-2009 Kitware, Inc. - # -+# The qt5_use_modules function was taken from Qt 5.10.1 (and modified): -+# (C) 2005-2011 Kitware, Inc. -+# - # Redistribution and use is allowed according to the terms of the BSD license. - # For details see the accompanying COPYING-CMAKE-SCRIPTS file. - -@@ -43,6 +46,41 @@ function(qt4_use_modules _target _link_type) - endforeach() - endfunction() - -+# Qt 5.11 removed the qt5_use_modules function, so we need to provide it until we can switch to a modern CMake version. -+# If present, the Qt-provided version will be used automatically instead. -+function(qt5_use_modules _target _link_type) -+ if (NOT TARGET ${_target}) -+ message(FATAL_ERROR "The first argument to qt5_use_modules must be an existing target.") -+ endif() -+ if ("${_link_type}" STREQUAL "LINK_PUBLIC" OR "${_link_type}" STREQUAL "LINK_PRIVATE" ) -+ set(_qt5_modules ${ARGN}) -+ set(_qt5_link_type ${_link_type}) -+ else() -+ set(_qt5_modules ${_link_type} ${ARGN}) -+ endif() -+ -+ if ("${_qt5_modules}" STREQUAL "") -+ message(FATAL_ERROR "qt5_use_modules requires at least one Qt module to use.") -+ endif() -+ foreach(_module ${_qt5_modules}) -+ if (NOT Qt5${_module}_FOUND) -+ find_package(Qt5${_module} PATHS "${_Qt5_COMPONENT_PATH}" NO_DEFAULT_PATH) -+ if (NOT Qt5${_module}_FOUND) -+ message(FATAL_ERROR "Can not use \"${_module}\" module which has not yet been found.") -+ endif() -+ endif() -+ target_link_libraries(${_target} ${_qt5_link_type} ${Qt5${_module}_LIBRARIES}) -+ set_property(TARGET ${_target} APPEND PROPERTY INCLUDE_DIRECTORIES ${Qt5${_module}_INCLUDE_DIRS}) -+ set_property(TARGET ${_target} APPEND PROPERTY COMPILE_DEFINITIONS ${Qt5${_module}_COMPILE_DEFINITIONS}) -+ if (Qt5_POSITION_INDEPENDENT_CODE -+ AND (CMAKE_VERSION VERSION_LESS 2.8.12 -+ AND (NOT CMAKE_CXX_COMPILER_ID STREQUAL "GNU" -+ OR CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0))) -+ set_property(TARGET ${_target} PROPERTY POSITION_INDEPENDENT_CODE ${Qt5_POSITION_INDEPENDENT_CODE}) -+ endif() -+ endforeach() -+endfunction() -+ - # Some wrappers for simplifying dual-Qt support - - function(qt_use_modules) diff --git a/gnu/packages/patches/rust-bootstrap-stage0-test.patch b/gnu/packages/patches/rust-bootstrap-stage0-test.patch new file mode 100644 index 0000000000..e8484903e5 --- /dev/null +++ b/gnu/packages/patches/rust-bootstrap-stage0-test.patch @@ -0,0 +1,55 @@ +Bootstrap tests failed with local stage0 cargo and rustc +Backported changes from https://github.com/rust-lang/rust/pull/51977 + +From 0834d9d771e912f51deca6c25699e44734624546 Mon Sep 17 00:00:00 2001 +From: Nikolai Merinov <nikolai.merinov@member.fsf.org> +Date: Mon, 2 Jul 2018 01:45:35 +0500 +Subject: [PATCH] bootstrap: tests should use rustc from config.toml + +Tests should always use "rustc" and "cargo" from config.toml instead +of assuming that stage0 binaries was downloaded to build directory. +--- + src/bootstrap/bootstrap.py | 2 ++ + src/bootstrap/config.rs | 6 ++---- + 2 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/src/bootstrap/bootstrap.py b/src/bootstrap/bootstrap.py +index 487440becf..1701f7b83a 100644 +--- a/src/bootstrap/bootstrap.py ++++ b/src/bootstrap/bootstrap.py +@@ -788,6 +788,8 @@ def bootstrap(help_triggered): + env["BOOTSTRAP_PARENT_ID"] = str(os.getpid()) + env["BOOTSTRAP_PYTHON"] = sys.executable + env["BUILD_DIR"] = build.build_dir ++ env["CARGO"] = build.cargo() ++ env["RUSTC"] = build.rustc() + run(args, env=env, verbose=build.verbose) + + +diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs +index 6dd6291be2..d1a0deb583 100644 +--- a/src/bootstrap/config.rs ++++ b/src/bootstrap/config.rs +@@ -23,7 +23,6 @@ use std::cmp; + + use num_cpus; + use toml; +-use util::exe; + use cache::{INTERNER, Interned}; + use flags::Flags; + pub use flags::Subcommand; +@@ -362,9 +361,8 @@ impl Config { + config.src = Config::path_from_python("SRC"); + config.out = Config::path_from_python("BUILD_DIR"); + +- let stage0_root = config.out.join(&config.build).join("stage0/bin"); +- config.initial_rustc = stage0_root.join(exe("rustc", &config.build)); +- config.initial_cargo = stage0_root.join(exe("cargo", &config.build)); ++ config.initial_rustc = Config::path_from_python("RUSTC"); ++ config.initial_cargo = Config::path_from_python("CARGO"); + + config + } +-- +2.17.1 + diff --git a/gnu/packages/patches/rust-coresimd-doctest.patch b/gnu/packages/patches/rust-coresimd-doctest.patch new file mode 100644 index 0000000000..bfa0ab224b --- /dev/null +++ b/gnu/packages/patches/rust-coresimd-doctest.patch @@ -0,0 +1,21 @@ +Doctest coresimd::x86::__m256 failed on processors withouth "avx" feature. +Backported patch with changes from https://github.com/rust-lang-nursery/stdsimd/issues/481 + +--- rustc-1.26.2-src-orig/src/stdsimd/coresimd/x86/mod.rs 1970-01-01 05:00:00.000000000 +0500 ++++ rustc-1.26.2-src/src/stdsimd/coresimd/x86/mod.rs 2018-06-22 00:01:55.142026720 +0500 +@@ -293,13 +293,13 @@ + /// use std::arch::x86_64::*; + /// + /// # fn main() { +- /// # #[target_feature(enable = "sse")] ++ /// # #[target_feature(enable = "avx")] + /// # unsafe fn foo() { + /// let eight_zeros = _mm256_setzero_ps(); + /// let eight_ones = _mm256_set1_ps(1.0); + /// let eight_floats = _mm256_set_ps(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0); + /// # } +- /// # if is_x86_feature_detected!("sse") { unsafe { foo() } } ++ /// # if is_x86_feature_detected!("avx") { unsafe { foo() } } + /// # } + /// ``` + pub struct __m256(f32, f32, f32, f32, f32, f32, f32, f32); diff --git a/gnu/packages/patches/sddm-fix-build-with-qt-5.11-1024.patch b/gnu/packages/patches/sddm-fix-build-with-qt-5.11-1024.patch deleted file mode 100644 index 53c184230a..0000000000 --- a/gnu/packages/patches/sddm-fix-build-with-qt-5.11-1024.patch +++ /dev/null @@ -1,28 +0,0 @@ -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 2efc649..8903b52 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -93,7 +95,7 @@ - find_package(XKB REQUIRED) - - # Qt 5 --find_package(Qt5 5.6.0 CONFIG REQUIRED Core DBus Gui Qml Quick LinguistTools) -+find_package(Qt5 5.8.0 CONFIG REQUIRED Core DBus Gui Qml Quick LinguistTools Test) - - # find qt5 imports dir - get_target_property(QMAKE_EXECUTABLE Qt5::qmake LOCATION) -diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt -index c9d935a..bb85ddd 100644 ---- a/test/CMakeLists.txt -+++ b/test/CMakeLists.txt -@@ -2,9 +2,8 @@ - - include_directories(../src/common) - -- - set(ConfigurationTest_SRCS ConfigurationTest.cpp ../src/common/ConfigReader.cpp) - add_executable(ConfigurationTest ${ConfigurationTest_SRCS}) - add_test(NAME Configuration COMMAND ConfigurationTest) - --qt5_use_modules(ConfigurationTest Test) -+target_link_libraries(ConfigurationTest Qt5::Core Qt5::Test) diff --git a/gnu/packages/patches/twinkle-include-qregexpvalidator.patch b/gnu/packages/patches/twinkle-include-qregexpvalidator.patch new file mode 100755 index 0000000000..4096cc8712 --- /dev/null +++ b/gnu/packages/patches/twinkle-include-qregexpvalidator.patch @@ -0,0 +1,123 @@ +Copied from upstream: + +https://github.com/LubosD/twinkle/commit/4b42755619011c117a76bdf98e417ebedc47e319 + +From 4b42755619011c117a76bdf98e417ebedc47e319 Mon Sep 17 00:00:00 2001 +From: Michal Kubecek <mkubecek@suse.cz> +Date: Wed, 6 Jun 2018 10:07:21 +0200 +Subject: [PATCH] Include <QRegExpValidator> explicitly + +Since Qt 5.11, generated ui_getprofilename.h no longer includes QHeaderView +which breaks the chain that included qvalidator.h in getprofilename.cpp. +As it feels rather fragile to rely on such indirect includes, let's include +<QRegExpValidator> explicitly in each file using QRegExpValidator class. +--- + src/gui/diamondcardprofileform.cpp | 1 + + src/gui/getprofilenameform.cpp | 2 +- + src/gui/inviteform.cpp | 1 + + src/gui/mphoneform.cpp | 1 + + src/gui/numberconversionform.cpp | 1 + + src/gui/syssettingsform.cpp | 1 + + src/gui/userprofileform.cpp | 1 + + src/gui/wizardform.cpp | 1 + + 8 files changed, 8 insertions(+), 1 deletion(-) + +diff --git a/src/gui/diamondcardprofileform.cpp b/src/gui/diamondcardprofileform.cpp +index 6656909..517180b 100644 +--- a/src/gui/diamondcardprofileform.cpp ++++ b/src/gui/diamondcardprofileform.cpp +@@ -21,6 +21,7 @@ + + #include <QRegExp> + #include <QValidator> ++#include <QRegExpValidator> + #include "gui.h" + #include "diamondcard.h" + #include "getprofilenameform.h" +diff --git a/src/gui/getprofilenameform.cpp b/src/gui/getprofilenameform.cpp +index 1319e1d..89c715e 100644 +--- a/src/gui/getprofilenameform.cpp ++++ b/src/gui/getprofilenameform.cpp +@@ -1,7 +1,7 @@ + #include "getprofilenameform.h" +- + #include <QDir> + #include <QMessageBox> ++#include <QRegExpValidator> + #include "user.h" + #include "protocol.h" + +diff --git a/src/gui/inviteform.cpp b/src/gui/inviteform.cpp +index 433fb22..2a5b68d 100644 +--- a/src/gui/inviteform.cpp ++++ b/src/gui/inviteform.cpp +@@ -7,6 +7,7 @@ + #include "sys_settings.h" + #include <QRegExp> + #include <QValidator> ++#include <QRegExpValidator> + + /* + Copyright (C) 2005-2009 Michel de Boer <michel@twinklephone.com> +diff --git a/src/gui/mphoneform.cpp b/src/gui/mphoneform.cpp +index 260fda7..c4e3c1d 100644 +--- a/src/gui/mphoneform.cpp ++++ b/src/gui/mphoneform.cpp +@@ -54,6 +54,7 @@ + #include <QRegExp> + #include <QValidator> + #include <QSettings> ++#include <QRegExpValidator> + #include "buddyform.h" + #include "diamondcardprofileform.h" + #include "osd.h" +diff --git a/src/gui/numberconversionform.cpp b/src/gui/numberconversionform.cpp +index f8ae64c..8481a9b 100644 +--- a/src/gui/numberconversionform.cpp ++++ b/src/gui/numberconversionform.cpp +@@ -1,5 +1,6 @@ + #include "numberconversionform.h" + ++#include <QRegExpValidator> + #include "gui.h" + + /* +diff --git a/src/gui/syssettingsform.cpp b/src/gui/syssettingsform.cpp +index 216af54..355df59 100644 +--- a/src/gui/syssettingsform.cpp ++++ b/src/gui/syssettingsform.cpp +@@ -28,6 +28,7 @@ + #include "twinkle_config.h" + #include <QRegExp> + #include <QValidator> ++#include <QRegExpValidator> + #include "syssettingsform.h" + /* + * Constructs a SysSettingsForm as a child of 'parent', with the +diff --git a/src/gui/userprofileform.cpp b/src/gui/userprofileform.cpp +index 28700a6..9ed9209 100644 +--- a/src/gui/userprofileform.cpp ++++ b/src/gui/userprofileform.cpp +@@ -31,6 +31,7 @@ + #include <QStringList> + #include "twinkle_config.h" + #include <QListWidget> ++#include <QRegExpValidator> + #include "numberconversionform.h" + #include "util.h" + #include "userprofileform.h" +diff --git a/src/gui/wizardform.cpp b/src/gui/wizardform.cpp +index 777aa12..f925875 100644 +--- a/src/gui/wizardform.cpp ++++ b/src/gui/wizardform.cpp +@@ -23,6 +23,7 @@ + #include <QTextStream> + #include "gui.h" + #include <QFile> ++#include <QRegExpValidator> + #include "wizardform.h" + + #define PROV_NONE QT_TRANSLATE_NOOP("WizardForm", "None (direct IP to IP calls)") +-- +2.17.0 + diff --git a/gnu/packages/patches/x265-arm-asm-primitives.patch b/gnu/packages/patches/x265-arm-asm-primitives.patch new file mode 100644 index 0000000000..f49aafe577 --- /dev/null +++ b/gnu/packages/patches/x265-arm-asm-primitives.patch @@ -0,0 +1,360 @@ +From <https://git.busybox.net/buildroot/tree/package/x265/0003-arm-asm-primitives.patch?id=57d4a27eaf1a9e59d767c321e7b7500c5060a2ac>. +This fixes build errors like: + + cd /tmp/guix-build-x265-2.8.drv-0/x265_2.8/build/encoder && /gnu/store/cd5q2pni1d95fs3cdabbclyh9hqhw2nq-gcc-5.5.0/bin/c++ -DEXPORT_C_API=1 -DHAVE_ARMV6=1 -DHAVE_INT_TYPES_H=1 -DHAVE_NEON -DHIGH_BIT_DEPTH=0 -DX265_ARCH_ARM=1 -DX265_DEPTH=8 -DX265_NS=x265 -D__STDC_LIMIT_MACROS=1 -I/tmp/guix-build-x265-2.8.drv-0/x265_2.8/source/. -I/tmp/guix-build-x265-2.8.drv-0/x265_2.8/source/common -I/tmp/guix-build-x265-2.8.drv-0/x265_2.8/source/encoder -I/tmp/guix-build-x265-2.8.drv-0/x265_2.8/build -O2 -g -DNDEBUG -Wall -Wextra -Wshadow -std=gnu++98 -fPIC -mcpu=native -mfloat-abi=hard -mfpu=neon -marm -fPIC -Wno-array-bounds -ffast-math -fno-exceptions -Wno-uninitialized -o CMakeFiles/encoder.dir/search.cpp.o -c /tmp/guix-build-x265-2.8.drv-0/x265_2.8/source/encoder/search.cpp + /tmp/guix-build-x265-2.8.drv-0/x265_2.8/source/common/arm/asm-primitives.cpp:437:38: error: incompatible types in assignment of ?void(const pixel*, intptr_t, int16_t*, intptr_t) {aka void(const unsigned char*, int, short int*, int)}? to ?void (* [2])(const pixel*, intptr_t, int16_t*, intptr_t) {aka void (* [2])(const unsigned char*, int, short int*, int)}? + p.pu[LUMA_64x48].convert_p2s = PFX(filterPixelToShort_64x48_neon); + ^ + +Downloaded from upstream bug report: +https://bitbucket.org/multicoreware/x265/issues/406 + +Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de> + +--- ./source/common/arm/asm-primitives.cpp.orig 2018-05-21 02:33:10.000000000 -0600 ++++ ./source/common/arm/asm-primitives.cpp 2018-05-28 20:38:37.302378303 -0600 +@@ -48,77 +48,77 @@ void setupAssemblyPrimitives(EncoderPrim + p.ssim_4x4x2_core = PFX(ssim_4x4x2_core_neon); + + // addAvg +- p.pu[LUMA_4x4].addAvg = PFX(addAvg_4x4_neon); +- p.pu[LUMA_4x8].addAvg = PFX(addAvg_4x8_neon); +- p.pu[LUMA_4x16].addAvg = PFX(addAvg_4x16_neon); +- p.pu[LUMA_8x4].addAvg = PFX(addAvg_8x4_neon); +- p.pu[LUMA_8x8].addAvg = PFX(addAvg_8x8_neon); +- p.pu[LUMA_8x16].addAvg = PFX(addAvg_8x16_neon); +- p.pu[LUMA_8x32].addAvg = PFX(addAvg_8x32_neon); +- p.pu[LUMA_12x16].addAvg = PFX(addAvg_12x16_neon); +- p.pu[LUMA_16x4].addAvg = PFX(addAvg_16x4_neon); +- p.pu[LUMA_16x8].addAvg = PFX(addAvg_16x8_neon); +- p.pu[LUMA_16x12].addAvg = PFX(addAvg_16x12_neon); +- p.pu[LUMA_16x16].addAvg = PFX(addAvg_16x16_neon); +- p.pu[LUMA_16x32].addAvg = PFX(addAvg_16x32_neon); +- p.pu[LUMA_16x64].addAvg = PFX(addAvg_16x64_neon); +- p.pu[LUMA_24x32].addAvg = PFX(addAvg_24x32_neon); +- p.pu[LUMA_32x8].addAvg = PFX(addAvg_32x8_neon); +- p.pu[LUMA_32x16].addAvg = PFX(addAvg_32x16_neon); +- p.pu[LUMA_32x24].addAvg = PFX(addAvg_32x24_neon); +- p.pu[LUMA_32x32].addAvg = PFX(addAvg_32x32_neon); +- p.pu[LUMA_32x64].addAvg = PFX(addAvg_32x64_neon); +- p.pu[LUMA_48x64].addAvg = PFX(addAvg_48x64_neon); +- p.pu[LUMA_64x16].addAvg = PFX(addAvg_64x16_neon); +- p.pu[LUMA_64x32].addAvg = PFX(addAvg_64x32_neon); +- p.pu[LUMA_64x48].addAvg = PFX(addAvg_64x48_neon); +- p.pu[LUMA_64x64].addAvg = PFX(addAvg_64x64_neon); ++ p.pu[LUMA_4x4].addAvg[ALIGNED] = PFX(addAvg_4x4_neon); ++ p.pu[LUMA_4x8].addAvg[ALIGNED] = PFX(addAvg_4x8_neon); ++ p.pu[LUMA_4x16].addAvg[ALIGNED] = PFX(addAvg_4x16_neon); ++ p.pu[LUMA_8x4].addAvg[ALIGNED] = PFX(addAvg_8x4_neon); ++ p.pu[LUMA_8x8].addAvg[ALIGNED] = PFX(addAvg_8x8_neon); ++ p.pu[LUMA_8x16].addAvg[ALIGNED] = PFX(addAvg_8x16_neon); ++ p.pu[LUMA_8x32].addAvg[ALIGNED] = PFX(addAvg_8x32_neon); ++ p.pu[LUMA_12x16].addAvg[ALIGNED] = PFX(addAvg_12x16_neon); ++ p.pu[LUMA_16x4].addAvg[ALIGNED] = PFX(addAvg_16x4_neon); ++ p.pu[LUMA_16x8].addAvg[ALIGNED] = PFX(addAvg_16x8_neon); ++ p.pu[LUMA_16x12].addAvg[ALIGNED] = PFX(addAvg_16x12_neon); ++ p.pu[LUMA_16x16].addAvg[ALIGNED] = PFX(addAvg_16x16_neon); ++ p.pu[LUMA_16x32].addAvg[ALIGNED] = PFX(addAvg_16x32_neon); ++ p.pu[LUMA_16x64].addAvg[ALIGNED] = PFX(addAvg_16x64_neon); ++ p.pu[LUMA_24x32].addAvg[ALIGNED] = PFX(addAvg_24x32_neon); ++ p.pu[LUMA_32x8].addAvg[ALIGNED] = PFX(addAvg_32x8_neon); ++ p.pu[LUMA_32x16].addAvg[ALIGNED] = PFX(addAvg_32x16_neon); ++ p.pu[LUMA_32x24].addAvg[ALIGNED] = PFX(addAvg_32x24_neon); ++ p.pu[LUMA_32x32].addAvg[ALIGNED] = PFX(addAvg_32x32_neon); ++ p.pu[LUMA_32x64].addAvg[ALIGNED] = PFX(addAvg_32x64_neon); ++ p.pu[LUMA_48x64].addAvg[ALIGNED] = PFX(addAvg_48x64_neon); ++ p.pu[LUMA_64x16].addAvg[ALIGNED] = PFX(addAvg_64x16_neon); ++ p.pu[LUMA_64x32].addAvg[ALIGNED] = PFX(addAvg_64x32_neon); ++ p.pu[LUMA_64x48].addAvg[ALIGNED] = PFX(addAvg_64x48_neon); ++ p.pu[LUMA_64x64].addAvg[ALIGNED] = PFX(addAvg_64x64_neon); + + // chroma addAvg +- p.chroma[X265_CSP_I420].pu[CHROMA_420_4x2].addAvg = PFX(addAvg_4x2_neon); +- p.chroma[X265_CSP_I420].pu[CHROMA_420_4x4].addAvg = PFX(addAvg_4x4_neon); +- p.chroma[X265_CSP_I420].pu[CHROMA_420_4x8].addAvg = PFX(addAvg_4x8_neon); +- p.chroma[X265_CSP_I420].pu[CHROMA_420_4x16].addAvg = PFX(addAvg_4x16_neon); +- p.chroma[X265_CSP_I420].pu[CHROMA_420_6x8].addAvg = PFX(addAvg_6x8_neon); +- p.chroma[X265_CSP_I420].pu[CHROMA_420_8x2].addAvg = PFX(addAvg_8x2_neon); +- p.chroma[X265_CSP_I420].pu[CHROMA_420_8x4].addAvg = PFX(addAvg_8x4_neon); +- p.chroma[X265_CSP_I420].pu[CHROMA_420_8x6].addAvg = PFX(addAvg_8x6_neon); +- p.chroma[X265_CSP_I420].pu[CHROMA_420_8x8].addAvg = PFX(addAvg_8x8_neon); +- p.chroma[X265_CSP_I420].pu[CHROMA_420_8x16].addAvg = PFX(addAvg_8x16_neon); +- p.chroma[X265_CSP_I420].pu[CHROMA_420_8x32].addAvg = PFX(addAvg_8x32_neon); +- p.chroma[X265_CSP_I420].pu[CHROMA_420_12x16].addAvg = PFX(addAvg_12x16_neon); +- p.chroma[X265_CSP_I420].pu[CHROMA_420_16x4].addAvg = PFX(addAvg_16x4_neon); +- p.chroma[X265_CSP_I420].pu[CHROMA_420_16x8].addAvg = PFX(addAvg_16x8_neon); +- p.chroma[X265_CSP_I420].pu[CHROMA_420_16x12].addAvg = PFX(addAvg_16x12_neon); +- p.chroma[X265_CSP_I420].pu[CHROMA_420_16x16].addAvg = PFX(addAvg_16x16_neon); +- p.chroma[X265_CSP_I420].pu[CHROMA_420_16x32].addAvg = PFX(addAvg_16x32_neon); +- p.chroma[X265_CSP_I420].pu[CHROMA_420_24x32].addAvg = PFX(addAvg_24x32_neon); +- p.chroma[X265_CSP_I420].pu[CHROMA_420_32x8].addAvg = PFX(addAvg_32x8_neon); +- p.chroma[X265_CSP_I420].pu[CHROMA_420_32x16].addAvg = PFX(addAvg_32x16_neon); +- p.chroma[X265_CSP_I420].pu[CHROMA_420_32x24].addAvg = PFX(addAvg_32x24_neon); +- p.chroma[X265_CSP_I420].pu[CHROMA_420_32x32].addAvg = PFX(addAvg_32x32_neon); +- +- p.chroma[X265_CSP_I422].pu[CHROMA_422_4x8].addAvg = PFX(addAvg_4x8_neon); +- p.chroma[X265_CSP_I422].pu[CHROMA_422_4x16].addAvg = PFX(addAvg_4x16_neon); +- p.chroma[X265_CSP_I422].pu[CHROMA_422_4x32].addAvg = PFX(addAvg_4x32_neon); +- p.chroma[X265_CSP_I422].pu[CHROMA_422_6x16].addAvg = PFX(addAvg_6x16_neon); +- p.chroma[X265_CSP_I422].pu[CHROMA_422_8x4].addAvg = PFX(addAvg_8x4_neon); +- p.chroma[X265_CSP_I422].pu[CHROMA_422_8x8].addAvg = PFX(addAvg_8x8_neon); +- p.chroma[X265_CSP_I422].pu[CHROMA_422_8x12].addAvg = PFX(addAvg_8x12_neon); +- p.chroma[X265_CSP_I422].pu[CHROMA_422_8x16].addAvg = PFX(addAvg_8x16_neon); +- p.chroma[X265_CSP_I422].pu[CHROMA_422_8x32].addAvg = PFX(addAvg_8x32_neon); +- p.chroma[X265_CSP_I422].pu[CHROMA_422_8x64].addAvg = PFX(addAvg_8x64_neon); +- p.chroma[X265_CSP_I422].pu[CHROMA_422_12x32].addAvg = PFX(addAvg_12x32_neon); +- p.chroma[X265_CSP_I422].pu[CHROMA_422_16x8].addAvg = PFX(addAvg_16x8_neon); +- p.chroma[X265_CSP_I422].pu[CHROMA_422_16x16].addAvg = PFX(addAvg_16x16_neon); +- p.chroma[X265_CSP_I422].pu[CHROMA_422_16x24].addAvg = PFX(addAvg_16x24_neon); +- p.chroma[X265_CSP_I422].pu[CHROMA_422_16x32].addAvg = PFX(addAvg_16x32_neon); +- p.chroma[X265_CSP_I422].pu[CHROMA_422_16x64].addAvg = PFX(addAvg_16x64_neon); +- p.chroma[X265_CSP_I422].pu[CHROMA_422_24x64].addAvg = PFX(addAvg_24x64_neon); +- p.chroma[X265_CSP_I422].pu[CHROMA_422_32x16].addAvg = PFX(addAvg_32x16_neon); +- p.chroma[X265_CSP_I422].pu[CHROMA_422_32x32].addAvg = PFX(addAvg_32x32_neon); +- p.chroma[X265_CSP_I422].pu[CHROMA_422_32x48].addAvg = PFX(addAvg_32x48_neon); +- p.chroma[X265_CSP_I422].pu[CHROMA_422_32x64].addAvg = PFX(addAvg_32x64_neon); ++ p.chroma[X265_CSP_I420].pu[CHROMA_420_4x2].addAvg[ALIGNED] = PFX(addAvg_4x2_neon); ++ p.chroma[X265_CSP_I420].pu[CHROMA_420_4x4].addAvg[ALIGNED] = PFX(addAvg_4x4_neon); ++ p.chroma[X265_CSP_I420].pu[CHROMA_420_4x8].addAvg[ALIGNED] = PFX(addAvg_4x8_neon); ++ p.chroma[X265_CSP_I420].pu[CHROMA_420_4x16].addAvg[ALIGNED] = PFX(addAvg_4x16_neon); ++ p.chroma[X265_CSP_I420].pu[CHROMA_420_6x8].addAvg[ALIGNED] = PFX(addAvg_6x8_neon); ++ p.chroma[X265_CSP_I420].pu[CHROMA_420_8x2].addAvg[ALIGNED] = PFX(addAvg_8x2_neon); ++ p.chroma[X265_CSP_I420].pu[CHROMA_420_8x4].addAvg[ALIGNED] = PFX(addAvg_8x4_neon); ++ p.chroma[X265_CSP_I420].pu[CHROMA_420_8x6].addAvg[ALIGNED] = PFX(addAvg_8x6_neon); ++ p.chroma[X265_CSP_I420].pu[CHROMA_420_8x8].addAvg[ALIGNED] = PFX(addAvg_8x8_neon); ++ p.chroma[X265_CSP_I420].pu[CHROMA_420_8x16].addAvg[ALIGNED] = PFX(addAvg_8x16_neon); ++ p.chroma[X265_CSP_I420].pu[CHROMA_420_8x32].addAvg[ALIGNED] = PFX(addAvg_8x32_neon); ++ p.chroma[X265_CSP_I420].pu[CHROMA_420_12x16].addAvg[ALIGNED] = PFX(addAvg_12x16_neon); ++ p.chroma[X265_CSP_I420].pu[CHROMA_420_16x4].addAvg[ALIGNED] = PFX(addAvg_16x4_neon); ++ p.chroma[X265_CSP_I420].pu[CHROMA_420_16x8].addAvg[ALIGNED] = PFX(addAvg_16x8_neon); ++ p.chroma[X265_CSP_I420].pu[CHROMA_420_16x12].addAvg[ALIGNED] = PFX(addAvg_16x12_neon); ++ p.chroma[X265_CSP_I420].pu[CHROMA_420_16x16].addAvg[ALIGNED] = PFX(addAvg_16x16_neon); ++ p.chroma[X265_CSP_I420].pu[CHROMA_420_16x32].addAvg[ALIGNED] = PFX(addAvg_16x32_neon); ++ p.chroma[X265_CSP_I420].pu[CHROMA_420_24x32].addAvg[ALIGNED] = PFX(addAvg_24x32_neon); ++ p.chroma[X265_CSP_I420].pu[CHROMA_420_32x8].addAvg[ALIGNED] = PFX(addAvg_32x8_neon); ++ p.chroma[X265_CSP_I420].pu[CHROMA_420_32x16].addAvg[ALIGNED] = PFX(addAvg_32x16_neon); ++ p.chroma[X265_CSP_I420].pu[CHROMA_420_32x24].addAvg[ALIGNED] = PFX(addAvg_32x24_neon); ++ p.chroma[X265_CSP_I420].pu[CHROMA_420_32x32].addAvg[ALIGNED] = PFX(addAvg_32x32_neon); ++ ++ p.chroma[X265_CSP_I422].pu[CHROMA_422_4x8].addAvg[ALIGNED] = PFX(addAvg_4x8_neon); ++ p.chroma[X265_CSP_I422].pu[CHROMA_422_4x16].addAvg[ALIGNED] = PFX(addAvg_4x16_neon); ++ p.chroma[X265_CSP_I422].pu[CHROMA_422_4x32].addAvg[ALIGNED] = PFX(addAvg_4x32_neon); ++ p.chroma[X265_CSP_I422].pu[CHROMA_422_6x16].addAvg[ALIGNED] = PFX(addAvg_6x16_neon); ++ p.chroma[X265_CSP_I422].pu[CHROMA_422_8x4].addAvg[ALIGNED] = PFX(addAvg_8x4_neon); ++ p.chroma[X265_CSP_I422].pu[CHROMA_422_8x8].addAvg[ALIGNED] = PFX(addAvg_8x8_neon); ++ p.chroma[X265_CSP_I422].pu[CHROMA_422_8x12].addAvg[ALIGNED] = PFX(addAvg_8x12_neon); ++ p.chroma[X265_CSP_I422].pu[CHROMA_422_8x16].addAvg[ALIGNED] = PFX(addAvg_8x16_neon); ++ p.chroma[X265_CSP_I422].pu[CHROMA_422_8x32].addAvg[ALIGNED] = PFX(addAvg_8x32_neon); ++ p.chroma[X265_CSP_I422].pu[CHROMA_422_8x64].addAvg[ALIGNED] = PFX(addAvg_8x64_neon); ++ p.chroma[X265_CSP_I422].pu[CHROMA_422_12x32].addAvg[ALIGNED] = PFX(addAvg_12x32_neon); ++ p.chroma[X265_CSP_I422].pu[CHROMA_422_16x8].addAvg[ALIGNED] = PFX(addAvg_16x8_neon); ++ p.chroma[X265_CSP_I422].pu[CHROMA_422_16x16].addAvg[ALIGNED] = PFX(addAvg_16x16_neon); ++ p.chroma[X265_CSP_I422].pu[CHROMA_422_16x24].addAvg[ALIGNED] = PFX(addAvg_16x24_neon); ++ p.chroma[X265_CSP_I422].pu[CHROMA_422_16x32].addAvg[ALIGNED] = PFX(addAvg_16x32_neon); ++ p.chroma[X265_CSP_I422].pu[CHROMA_422_16x64].addAvg[ALIGNED] = PFX(addAvg_16x64_neon); ++ p.chroma[X265_CSP_I422].pu[CHROMA_422_24x64].addAvg[ALIGNED] = PFX(addAvg_24x64_neon); ++ p.chroma[X265_CSP_I422].pu[CHROMA_422_32x16].addAvg[ALIGNED] = PFX(addAvg_32x16_neon); ++ p.chroma[X265_CSP_I422].pu[CHROMA_422_32x32].addAvg[ALIGNED] = PFX(addAvg_32x32_neon); ++ p.chroma[X265_CSP_I422].pu[CHROMA_422_32x48].addAvg[ALIGNED] = PFX(addAvg_32x48_neon); ++ p.chroma[X265_CSP_I422].pu[CHROMA_422_32x64].addAvg[ALIGNED] = PFX(addAvg_32x64_neon); + + // quant + p.quant = PFX(quant_neon); +@@ -402,7 +402,7 @@ void setupAssemblyPrimitives(EncoderPrim + p.scale2D_64to32 = PFX(scale2D_64to32_neon); + + // scale1D_128to64 +- p.scale1D_128to64 = PFX(scale1D_128to64_neon); ++ p.scale1D_128to64[ALIGNED] = PFX(scale1D_128to64_neon); + + // copy_count + p.cu[BLOCK_4x4].copy_cnt = PFX(copy_cnt_4_neon); +@@ -411,37 +411,37 @@ void setupAssemblyPrimitives(EncoderPrim + p.cu[BLOCK_32x32].copy_cnt = PFX(copy_cnt_32_neon); + + // filterPixelToShort +- p.pu[LUMA_4x4].convert_p2s = PFX(filterPixelToShort_4x4_neon); +- p.pu[LUMA_4x8].convert_p2s = PFX(filterPixelToShort_4x8_neon); +- p.pu[LUMA_4x16].convert_p2s = PFX(filterPixelToShort_4x16_neon); +- p.pu[LUMA_8x4].convert_p2s = PFX(filterPixelToShort_8x4_neon); +- p.pu[LUMA_8x8].convert_p2s = PFX(filterPixelToShort_8x8_neon); +- p.pu[LUMA_8x16].convert_p2s = PFX(filterPixelToShort_8x16_neon); +- p.pu[LUMA_8x32].convert_p2s = PFX(filterPixelToShort_8x32_neon); +- p.pu[LUMA_12x16].convert_p2s = PFX(filterPixelToShort_12x16_neon); +- p.pu[LUMA_16x4].convert_p2s = PFX(filterPixelToShort_16x4_neon); +- p.pu[LUMA_16x8].convert_p2s = PFX(filterPixelToShort_16x8_neon); +- p.pu[LUMA_16x12].convert_p2s = PFX(filterPixelToShort_16x12_neon); +- p.pu[LUMA_16x16].convert_p2s = PFX(filterPixelToShort_16x16_neon); +- p.pu[LUMA_16x32].convert_p2s = PFX(filterPixelToShort_16x32_neon); +- p.pu[LUMA_16x64].convert_p2s = PFX(filterPixelToShort_16x64_neon); +- p.pu[LUMA_24x32].convert_p2s = PFX(filterPixelToShort_24x32_neon); +- p.pu[LUMA_32x8].convert_p2s = PFX(filterPixelToShort_32x8_neon); +- p.pu[LUMA_32x16].convert_p2s = PFX(filterPixelToShort_32x16_neon); +- p.pu[LUMA_32x24].convert_p2s = PFX(filterPixelToShort_32x24_neon); +- p.pu[LUMA_32x32].convert_p2s = PFX(filterPixelToShort_32x32_neon); +- p.pu[LUMA_32x64].convert_p2s = PFX(filterPixelToShort_32x64_neon); +- p.pu[LUMA_48x64].convert_p2s = PFX(filterPixelToShort_48x64_neon); +- p.pu[LUMA_64x16].convert_p2s = PFX(filterPixelToShort_64x16_neon); +- p.pu[LUMA_64x32].convert_p2s = PFX(filterPixelToShort_64x32_neon); +- p.pu[LUMA_64x48].convert_p2s = PFX(filterPixelToShort_64x48_neon); +- p.pu[LUMA_64x64].convert_p2s = PFX(filterPixelToShort_64x64_neon); ++ p.pu[LUMA_4x4].convert_p2s[ALIGNED] = PFX(filterPixelToShort_4x4_neon); ++ p.pu[LUMA_4x8].convert_p2s[ALIGNED] = PFX(filterPixelToShort_4x8_neon); ++ p.pu[LUMA_4x16].convert_p2s[ALIGNED] = PFX(filterPixelToShort_4x16_neon); ++ p.pu[LUMA_8x4].convert_p2s[ALIGNED] = PFX(filterPixelToShort_8x4_neon); ++ p.pu[LUMA_8x8].convert_p2s[ALIGNED] = PFX(filterPixelToShort_8x8_neon); ++ p.pu[LUMA_8x16].convert_p2s[ALIGNED] = PFX(filterPixelToShort_8x16_neon); ++ p.pu[LUMA_8x32].convert_p2s[ALIGNED] = PFX(filterPixelToShort_8x32_neon); ++ p.pu[LUMA_12x16].convert_p2s[ALIGNED] = PFX(filterPixelToShort_12x16_neon); ++ p.pu[LUMA_16x4].convert_p2s[ALIGNED] = PFX(filterPixelToShort_16x4_neon); ++ p.pu[LUMA_16x8].convert_p2s[ALIGNED] = PFX(filterPixelToShort_16x8_neon); ++ p.pu[LUMA_16x12].convert_p2s[ALIGNED] = PFX(filterPixelToShort_16x12_neon); ++ p.pu[LUMA_16x16].convert_p2s[ALIGNED] = PFX(filterPixelToShort_16x16_neon); ++ p.pu[LUMA_16x32].convert_p2s[ALIGNED] = PFX(filterPixelToShort_16x32_neon); ++ p.pu[LUMA_16x64].convert_p2s[ALIGNED] = PFX(filterPixelToShort_16x64_neon); ++ p.pu[LUMA_24x32].convert_p2s[ALIGNED] = PFX(filterPixelToShort_24x32_neon); ++ p.pu[LUMA_32x8].convert_p2s[ALIGNED] = PFX(filterPixelToShort_32x8_neon); ++ p.pu[LUMA_32x16].convert_p2s[ALIGNED] = PFX(filterPixelToShort_32x16_neon); ++ p.pu[LUMA_32x24].convert_p2s[ALIGNED] = PFX(filterPixelToShort_32x24_neon); ++ p.pu[LUMA_32x32].convert_p2s[ALIGNED] = PFX(filterPixelToShort_32x32_neon); ++ p.pu[LUMA_32x64].convert_p2s[ALIGNED] = PFX(filterPixelToShort_32x64_neon); ++ p.pu[LUMA_48x64].convert_p2s[ALIGNED] = PFX(filterPixelToShort_48x64_neon); ++ p.pu[LUMA_64x16].convert_p2s[ALIGNED] = PFX(filterPixelToShort_64x16_neon); ++ p.pu[LUMA_64x32].convert_p2s[ALIGNED] = PFX(filterPixelToShort_64x32_neon); ++ p.pu[LUMA_64x48].convert_p2s[ALIGNED] = PFX(filterPixelToShort_64x48_neon); ++ p.pu[LUMA_64x64].convert_p2s[ALIGNED] = PFX(filterPixelToShort_64x64_neon); + + // Block_fill +- p.cu[BLOCK_4x4].blockfill_s = PFX(blockfill_s_4x4_neon); +- p.cu[BLOCK_8x8].blockfill_s = PFX(blockfill_s_8x8_neon); +- p.cu[BLOCK_16x16].blockfill_s = PFX(blockfill_s_16x16_neon); +- p.cu[BLOCK_32x32].blockfill_s = PFX(blockfill_s_32x32_neon); ++ p.cu[BLOCK_4x4].blockfill_s[ALIGNED] = PFX(blockfill_s_4x4_neon); ++ p.cu[BLOCK_8x8].blockfill_s[ALIGNED] = PFX(blockfill_s_8x8_neon); ++ p.cu[BLOCK_16x16].blockfill_s[ALIGNED] = PFX(blockfill_s_16x16_neon); ++ p.cu[BLOCK_32x32].blockfill_s[ALIGNED] = PFX(blockfill_s_32x32_neon); + + // Blockcopy_ss + p.cu[BLOCK_4x4].copy_ss = PFX(blockcopy_ss_4x4_neon); +@@ -495,21 +495,21 @@ void setupAssemblyPrimitives(EncoderPrim + p.chroma[X265_CSP_I422].cu[BLOCK_422_32x64].copy_sp = PFX(blockcopy_sp_32x64_neon); + + // pixel_add_ps +- p.cu[BLOCK_4x4].add_ps = PFX(pixel_add_ps_4x4_neon); +- p.cu[BLOCK_8x8].add_ps = PFX(pixel_add_ps_8x8_neon); +- p.cu[BLOCK_16x16].add_ps = PFX(pixel_add_ps_16x16_neon); +- p.cu[BLOCK_32x32].add_ps = PFX(pixel_add_ps_32x32_neon); +- p.cu[BLOCK_64x64].add_ps = PFX(pixel_add_ps_64x64_neon); ++ p.cu[BLOCK_4x4].add_ps[ALIGNED] = PFX(pixel_add_ps_4x4_neon); ++ p.cu[BLOCK_8x8].add_ps[ALIGNED] = PFX(pixel_add_ps_8x8_neon); ++ p.cu[BLOCK_16x16].add_ps[ALIGNED] = PFX(pixel_add_ps_16x16_neon); ++ p.cu[BLOCK_32x32].add_ps[ALIGNED] = PFX(pixel_add_ps_32x32_neon); ++ p.cu[BLOCK_64x64].add_ps[ALIGNED] = PFX(pixel_add_ps_64x64_neon); + + // chroma add_ps +- p.chroma[X265_CSP_I420].cu[BLOCK_420_4x4].add_ps = PFX(pixel_add_ps_4x4_neon); +- p.chroma[X265_CSP_I420].cu[BLOCK_420_8x8].add_ps = PFX(pixel_add_ps_8x8_neon); +- p.chroma[X265_CSP_I420].cu[BLOCK_420_16x16].add_ps = PFX(pixel_add_ps_16x16_neon); +- p.chroma[X265_CSP_I420].cu[BLOCK_420_32x32].add_ps = PFX(pixel_add_ps_32x32_neon); +- p.chroma[X265_CSP_I422].cu[BLOCK_422_4x8].add_ps = PFX(pixel_add_ps_4x8_neon); +- p.chroma[X265_CSP_I422].cu[BLOCK_422_8x16].add_ps = PFX(pixel_add_ps_8x16_neon); +- p.chroma[X265_CSP_I422].cu[BLOCK_422_16x32].add_ps = PFX(pixel_add_ps_16x32_neon); +- p.chroma[X265_CSP_I422].cu[BLOCK_422_32x64].add_ps = PFX(pixel_add_ps_32x64_neon); ++ p.chroma[X265_CSP_I420].cu[BLOCK_420_4x4].add_ps[ALIGNED] = PFX(pixel_add_ps_4x4_neon); ++ p.chroma[X265_CSP_I420].cu[BLOCK_420_8x8].add_ps[ALIGNED] = PFX(pixel_add_ps_8x8_neon); ++ p.chroma[X265_CSP_I420].cu[BLOCK_420_16x16].add_ps[ALIGNED] = PFX(pixel_add_ps_16x16_neon); ++ p.chroma[X265_CSP_I420].cu[BLOCK_420_32x32].add_ps[ALIGNED] = PFX(pixel_add_ps_32x32_neon); ++ p.chroma[X265_CSP_I422].cu[BLOCK_422_4x8].add_ps[ALIGNED] = PFX(pixel_add_ps_4x8_neon); ++ p.chroma[X265_CSP_I422].cu[BLOCK_422_8x16].add_ps[ALIGNED] = PFX(pixel_add_ps_8x16_neon); ++ p.chroma[X265_CSP_I422].cu[BLOCK_422_16x32].add_ps[ALIGNED] = PFX(pixel_add_ps_16x32_neon); ++ p.chroma[X265_CSP_I422].cu[BLOCK_422_32x64].add_ps[ALIGNED] = PFX(pixel_add_ps_32x64_neon); + + // cpy2Dto1D_shr + p.cu[BLOCK_4x4].cpy2Dto1D_shr = PFX(cpy2Dto1D_shr_4x4_neon); +@@ -518,10 +518,10 @@ void setupAssemblyPrimitives(EncoderPrim + p.cu[BLOCK_32x32].cpy2Dto1D_shr = PFX(cpy2Dto1D_shr_32x32_neon); + + // ssd_s +- p.cu[BLOCK_4x4].ssd_s = PFX(pixel_ssd_s_4x4_neon); +- p.cu[BLOCK_8x8].ssd_s = PFX(pixel_ssd_s_8x8_neon); +- p.cu[BLOCK_16x16].ssd_s = PFX(pixel_ssd_s_16x16_neon); +- p.cu[BLOCK_32x32].ssd_s = PFX(pixel_ssd_s_32x32_neon); ++ p.cu[BLOCK_4x4].ssd_s[ALIGNED] = PFX(pixel_ssd_s_4x4_neon); ++ p.cu[BLOCK_8x8].ssd_s[ALIGNED] = PFX(pixel_ssd_s_8x8_neon); ++ p.cu[BLOCK_16x16].ssd_s[ALIGNED] = PFX(pixel_ssd_s_16x16_neon); ++ p.cu[BLOCK_32x32].ssd_s[ALIGNED] = PFX(pixel_ssd_s_32x32_neon); + + // sse_ss + p.cu[BLOCK_4x4].sse_ss = PFX(pixel_sse_ss_4x4_neon); +@@ -548,10 +548,10 @@ void setupAssemblyPrimitives(EncoderPrim + p.chroma[X265_CSP_I422].cu[BLOCK_422_32x64].sub_ps = PFX(pixel_sub_ps_32x64_neon); + + // calc_Residual +- p.cu[BLOCK_4x4].calcresidual = PFX(getResidual4_neon); +- p.cu[BLOCK_8x8].calcresidual = PFX(getResidual8_neon); +- p.cu[BLOCK_16x16].calcresidual = PFX(getResidual16_neon); +- p.cu[BLOCK_32x32].calcresidual = PFX(getResidual32_neon); ++ p.cu[BLOCK_4x4].calcresidual[ALIGNED] = PFX(getResidual4_neon); ++ p.cu[BLOCK_8x8].calcresidual[ALIGNED] = PFX(getResidual8_neon); ++ p.cu[BLOCK_16x16].calcresidual[ALIGNED] = PFX(getResidual16_neon); ++ p.cu[BLOCK_32x32].calcresidual[ALIGNED] = PFX(getResidual32_neon); + + // sse_pp + p.cu[BLOCK_4x4].sse_pp = PFX(pixel_sse_pp_4x4_neon); +@@ -722,31 +722,31 @@ void setupAssemblyPrimitives(EncoderPrim + p.pu[LUMA_64x64].sad_x4 = PFX(sad_x4_64x64_neon); + + // pixel_avg_pp +- p.pu[LUMA_4x4].pixelavg_pp = PFX(pixel_avg_pp_4x4_neon); +- p.pu[LUMA_4x8].pixelavg_pp = PFX(pixel_avg_pp_4x8_neon); +- p.pu[LUMA_4x16].pixelavg_pp = PFX(pixel_avg_pp_4x16_neon); +- p.pu[LUMA_8x4].pixelavg_pp = PFX(pixel_avg_pp_8x4_neon); +- p.pu[LUMA_8x8].pixelavg_pp = PFX(pixel_avg_pp_8x8_neon); +- p.pu[LUMA_8x16].pixelavg_pp = PFX(pixel_avg_pp_8x16_neon); +- p.pu[LUMA_8x32].pixelavg_pp = PFX(pixel_avg_pp_8x32_neon); +- p.pu[LUMA_12x16].pixelavg_pp = PFX(pixel_avg_pp_12x16_neon); +- p.pu[LUMA_16x4].pixelavg_pp = PFX(pixel_avg_pp_16x4_neon); +- p.pu[LUMA_16x8].pixelavg_pp = PFX(pixel_avg_pp_16x8_neon); +- p.pu[LUMA_16x12].pixelavg_pp = PFX(pixel_avg_pp_16x12_neon); +- p.pu[LUMA_16x16].pixelavg_pp = PFX(pixel_avg_pp_16x16_neon); +- p.pu[LUMA_16x32].pixelavg_pp = PFX(pixel_avg_pp_16x32_neon); +- p.pu[LUMA_16x64].pixelavg_pp = PFX(pixel_avg_pp_16x64_neon); +- p.pu[LUMA_24x32].pixelavg_pp = PFX(pixel_avg_pp_24x32_neon); +- p.pu[LUMA_32x8].pixelavg_pp = PFX(pixel_avg_pp_32x8_neon); +- p.pu[LUMA_32x16].pixelavg_pp = PFX(pixel_avg_pp_32x16_neon); +- p.pu[LUMA_32x24].pixelavg_pp = PFX(pixel_avg_pp_32x24_neon); +- p.pu[LUMA_32x32].pixelavg_pp = PFX(pixel_avg_pp_32x32_neon); +- p.pu[LUMA_32x64].pixelavg_pp = PFX(pixel_avg_pp_32x64_neon); +- p.pu[LUMA_48x64].pixelavg_pp = PFX(pixel_avg_pp_48x64_neon); +- p.pu[LUMA_64x16].pixelavg_pp = PFX(pixel_avg_pp_64x16_neon); +- p.pu[LUMA_64x32].pixelavg_pp = PFX(pixel_avg_pp_64x32_neon); +- p.pu[LUMA_64x48].pixelavg_pp = PFX(pixel_avg_pp_64x48_neon); +- p.pu[LUMA_64x64].pixelavg_pp = PFX(pixel_avg_pp_64x64_neon); ++ p.pu[LUMA_4x4].pixelavg_pp[ALIGNED] = PFX(pixel_avg_pp_4x4_neon); ++ p.pu[LUMA_4x8].pixelavg_pp[ALIGNED] = PFX(pixel_avg_pp_4x8_neon); ++ p.pu[LUMA_4x16].pixelavg_pp[ALIGNED] = PFX(pixel_avg_pp_4x16_neon); ++ p.pu[LUMA_8x4].pixelavg_pp[ALIGNED] = PFX(pixel_avg_pp_8x4_neon); ++ p.pu[LUMA_8x8].pixelavg_pp[ALIGNED] = PFX(pixel_avg_pp_8x8_neon); ++ p.pu[LUMA_8x16].pixelavg_pp[ALIGNED] = PFX(pixel_avg_pp_8x16_neon); ++ p.pu[LUMA_8x32].pixelavg_pp[ALIGNED] = PFX(pixel_avg_pp_8x32_neon); ++ p.pu[LUMA_12x16].pixelavg_pp[ALIGNED] = PFX(pixel_avg_pp_12x16_neon); ++ p.pu[LUMA_16x4].pixelavg_pp[ALIGNED] = PFX(pixel_avg_pp_16x4_neon); ++ p.pu[LUMA_16x8].pixelavg_pp[ALIGNED] = PFX(pixel_avg_pp_16x8_neon); ++ p.pu[LUMA_16x12].pixelavg_pp[ALIGNED] = PFX(pixel_avg_pp_16x12_neon); ++ p.pu[LUMA_16x16].pixelavg_pp[ALIGNED] = PFX(pixel_avg_pp_16x16_neon); ++ p.pu[LUMA_16x32].pixelavg_pp[ALIGNED] = PFX(pixel_avg_pp_16x32_neon); ++ p.pu[LUMA_16x64].pixelavg_pp[ALIGNED] = PFX(pixel_avg_pp_16x64_neon); ++ p.pu[LUMA_24x32].pixelavg_pp[ALIGNED] = PFX(pixel_avg_pp_24x32_neon); ++ p.pu[LUMA_32x8].pixelavg_pp[ALIGNED] = PFX(pixel_avg_pp_32x8_neon); ++ p.pu[LUMA_32x16].pixelavg_pp[ALIGNED] = PFX(pixel_avg_pp_32x16_neon); ++ p.pu[LUMA_32x24].pixelavg_pp[ALIGNED] = PFX(pixel_avg_pp_32x24_neon); ++ p.pu[LUMA_32x32].pixelavg_pp[ALIGNED] = PFX(pixel_avg_pp_32x32_neon); ++ p.pu[LUMA_32x64].pixelavg_pp[ALIGNED] = PFX(pixel_avg_pp_32x64_neon); ++ p.pu[LUMA_48x64].pixelavg_pp[ALIGNED] = PFX(pixel_avg_pp_48x64_neon); ++ p.pu[LUMA_64x16].pixelavg_pp[ALIGNED] = PFX(pixel_avg_pp_64x16_neon); ++ p.pu[LUMA_64x32].pixelavg_pp[ALIGNED] = PFX(pixel_avg_pp_64x32_neon); ++ p.pu[LUMA_64x48].pixelavg_pp[ALIGNED] = PFX(pixel_avg_pp_64x48_neon); ++ p.pu[LUMA_64x64].pixelavg_pp[ALIGNED] = PFX(pixel_avg_pp_64x64_neon); + + // planecopy + p.planecopy_cp = PFX(pixel_planecopy_cp_neon); diff --git a/gnu/packages/patches/xapian-revert-5489fb2f8.patch b/gnu/packages/patches/xapian-revert-5489fb2f8.patch new file mode 100644 index 0000000000..7b78e2abb5 --- /dev/null +++ b/gnu/packages/patches/xapian-revert-5489fb2f8.patch @@ -0,0 +1,23 @@ +Revert this upstream commit which breaks a test case in "notmuch": + +https://git.xapian.org/?p=xapian;a=commitdiff;h=5489fb2f838c0f0b0a593b4c17df282a93a1fe5a + +See the notmuch FAQ entry: + +https://notmuchmail.org/faq/#index12h2 + +This should be fixed for later releases. + +diff --git a/backends/glass/glass_postlist.cc b/xapian-core/backends/glass/glass_postlist.cc +index 80e578b85..a47f14a68 100644 +--- a/backends/glass/glass_postlist.cc ++++ b/backends/glass/glass_postlist.cc +@@ -759,7 +759,7 @@ GlassPostList::open_nearby_postlist(const std::string & term_, + (void)need_pos; + if (term_.empty()) + RETURN(NULL); +- if (!this_db.get() || this_db->postlist_table.is_modified()) ++ if (!this_db.get() || this_db->postlist_table.is_writable()) + RETURN(NULL); + RETURN(new GlassPostList(this_db, term_, cursor->clone())); + } diff --git a/gnu/packages/patches/xorg-server-rotate-fb.patch b/gnu/packages/patches/xorg-server-rotate-fb.patch new file mode 100644 index 0000000000..f47036b2a7 --- /dev/null +++ b/gnu/packages/patches/xorg-server-rotate-fb.patch @@ -0,0 +1,35 @@ +commit a85e94a50c94b07574c8701a3ff3c1243f4257f4 +Author: Olivier Fourdan <ofourdan@redhat.com> +Date: Fri Jun 15 08:57:12 2018 +0200 + + modesetting: use drmmode_bo_import() for rotate_fb + + drmmode_shadow_allocate() still uses drmModeAddFB() which may fail if + the format is not as expected, preventing from using a rotated output. + + Change it to use the new function drmmode_bo_import() which takes care + of calling the drmModeAddFB2() API. + + Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=106715 + Signed-off-by: Olivier Fourdan <ofourdan@redhat.com> + Tested-by: Tomas Pelka <tpelka@redhat.com> + Reviewed-by: Lyude Paul <lyude@redhat.com> + +diff --git a/hw/xfree86/drivers/modesetting/drmmode_display.c b/hw/xfree86/drivers/modesetting/drmmode_display.c +index 859a21a9d..ec11b3f56 100644 +--- a/hw/xfree86/drivers/modesetting/drmmode_display.c ++++ b/hw/xfree86/drivers/modesetting/drmmode_display.c +@@ -1794,11 +1794,8 @@ drmmode_shadow_allocate(xf86CrtcPtr crtc, int width, int height) + return NULL; + } + +- ret = drmModeAddFB(drmmode->fd, width, height, crtc->scrn->depth, +- drmmode->kbpp, +- drmmode_bo_get_pitch(&drmmode_crtc->rotate_bo), +- drmmode_bo_get_handle(&drmmode_crtc->rotate_bo), +- &drmmode_crtc->rotate_fb_id); ++ ret = drmmode_bo_import(drmmode, &drmmode_crtc->rotate_bo, ++ &drmmode_crtc->rotate_fb_id); + + if (ret) { + ErrorF("failed to add rotate fb\n"); diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm index de680f4990..03b311da14 100644 --- a/gnu/packages/pdf.scm +++ b/gnu/packages/pdf.scm @@ -169,43 +169,6 @@ When present, Poppler is able to correctly render CJK and Cyrillic text.") ,@(package-inputs poppler))) (synopsis "Qt5 frontend for the Poppler PDF rendering library"))) -(define-public python-poppler-qt4 - (package - (name "python-poppler-qt4") - (version "0.24.0") - (source - (origin - (method url-fetch) - (uri (string-append "https://pypi.python.org/packages/source/p" - "/python-poppler-qt4/python-poppler-qt4-" - version ".tar.gz")) - (sha256 - (base32 - "0x63niylkk4q3h3ay8zrk3m1xiik0x3hlr4gvj7kswx48qi1vb99")))) - (build-system python-build-system) - (arguments - `(#:phases - (modify-phases %standard-phases - (add-after - 'unpack 'patch-poppler-include-paths - (lambda _ - (substitute* (find-files "." "poppler-.*\\.sip") - (("qt4/poppler-.*\\.h" header) - (string-append "poppler/" header))) - #t))))) - (native-inputs - `(("pkg-config" ,pkg-config))) - (inputs - `(("python-sip" ,python-sip) - ("python-pyqt-4" ,python-pyqt-4) - ("poppler-qt4" ,poppler-qt4))) - (home-page "https://pypi.python.org/pypi/python-poppler-qt4") - (synopsis "Python bindings for Poppler-Qt4") - (description - "This package provides Python bindings for the Qt4 interface of the -Poppler PDF rendering library.") - (license license:lgpl2.1+))) - (define-public python-poppler-qt5 (package (name "python-poppler-qt5") @@ -585,23 +548,26 @@ interaction.") (define-public podofo (package (name "podofo") - (version "0.9.5") + (version "0.9.6") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/podofo/podofo/" version "/podofo-" version ".tar.gz")) (sha256 (base32 - "012kgfx5j5n6w4zkc1d290d2cwjk60jhzsjlr2x19g3yi75q2jc5")))) + "0wj0y4zcmj4q79wrn3vv3xq4bb0vhhxs8yifafwy9f2sjm83c5p9")))) (build-system cmake-build-system) - (inputs ; TODO: Add cppunit for tests - `(("lua" ,lua-5.1) - ("libpng" ,libpng) - ("openssl" ,openssl) - ("fontconfig" ,fontconfig) + (native-inputs + `(("cppunit" ,cppunit) + ("pkg-config" ,pkg-config))) + (inputs + `(("libjpeg" ,libjpeg) ("libtiff" ,libtiff) - ("libjpeg" ,libjpeg-8) + ("fontconfig" ,fontconfig) ("freetype" ,freetype) + ("libpng" ,libpng) + ("lua" ,lua-5.1) + ("openssl" ,openssl) ("zlib" ,zlib))) (arguments `(#:configure-flags '("-DPODOFO_BUILD_SHARED=ON" diff --git a/gnu/packages/photo.scm b/gnu/packages/photo.scm index 7bf1d60f7c..88fa1aba68 100644 --- a/gnu/packages/photo.scm +++ b/gnu/packages/photo.scm @@ -2,7 +2,7 @@ ;;; Copyright © 2014, 2015, 2017 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net> ;;; Copyright © 2015, 2017 Andreas Enge <andreas@enge.fr> -;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il> +;;; Copyright © 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2017 Roel Janssen <roel@gnu.org> ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2018 Leo Famulari <leo@famulari.name> @@ -81,7 +81,7 @@ (native-inputs `(("pkg-config" ,pkg-config))) (inputs - `(("libjpeg" ,libjpeg-8))) ;for lossy DNGs and old Kodak cameras + `(("libjpeg" ,libjpeg))) ;for lossy DNGs and old Kodak cameras (propagated-inputs `(("lcms" ,lcms))) ;for color profiles (home-page "https://www.libraw.org") diff --git a/gnu/packages/php.scm b/gnu/packages/php.scm index 90e6ab1c1c..121ffab767 100644 --- a/gnu/packages/php.scm +++ b/gnu/packages/php.scm @@ -62,7 +62,7 @@ (define-public php (package (name "php") - (version "7.2.4") + (version "7.2.8") (home-page "https://secure.php.net/") (source (origin (method url-fetch) @@ -70,7 +70,7 @@ name "-" version ".tar.xz")) (sha256 (base32 - "123s0lbyz4fxr3kk91r4v658mk899dym36lggxnx9pwd2jyv25kr")) + "03zv1y8ygzsir60617hinpji3f4irk79zbp3ar1b8zcapq40gfjk")) (modules '((guix build utils))) (snippet '(with-directory-excursion "ext" @@ -248,6 +248,9 @@ ;; iconv breaks the loop after the first error with Termsig=11. "ext/iconv/tests/iconv_strpos_variation4.phpt" "ext/iconv/tests/iconv_strrpos_variation3.phpt" + ;; Expects "invalid multibyte sequence" but got + ;; "unknown error". + "ext/iconv/tests/bug76249.phpt" ;; XXX: These test failures appear legitimate, needs investigation. ;; open_basedir() restriction failure. @@ -288,7 +291,10 @@ "ext/mbstring/tests/mb_ereg_variation3.phpt" "ext/mbstring/tests/mb_ereg_replace_variation1.phpt" "ext/mbstring/tests/bug72994.phpt" - "ext/ldap/tests/ldap_set_option_error.phpt")) + "ext/ldap/tests/ldap_set_option_error.phpt" + + ;; Sometimes cannot start the LDAP server. + "ext/ldap/tests/bug76248.phpt")) ;; Skip tests requiring network access. (setenv "SKIP_ONLINE_TESTS" "1") @@ -318,7 +324,7 @@ ("libxpm" ,libxpm) ("libxslt" ,libxslt) ("libx11" ,libx11) - ("oniguruma" ,oniguruma) + ("oniguruma" ,oniguruma-5) ("openldap" ,openldap) ("openssl" ,openssl) ("pcre" ,pcre) diff --git a/gnu/packages/python-crypto.scm b/gnu/packages/python-crypto.scm index 2d865a92b3..ed8aa836fd 100644 --- a/gnu/packages/python-crypto.scm +++ b/gnu/packages/python-crypto.scm @@ -1,6 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr> -;;; Copyright © 2015, 2016, 2017 Efraim Flashner <efraim@flashner.co.il> +;;; Copyright © 2015, 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2015, 2016, 2017 Leo Famulari <leo@famulari.name> ;;; Copyright © 2016, 2017 Marius Bakke <mbakke@fastmail.com> ;;; Copyright © 2017 Ben Sturmfels <ben@sturm.com.au> @@ -610,16 +610,17 @@ ECB and OFB).") (define-public python-asn1crypto (package (name "python-asn1crypto") - (version "0.22.0") + (version "0.24.0") (source (origin - (method url-fetch) - (uri (string-append "https://github.com/wbond/asn1crypto/archive/" - version ".tar.gz")) - (file-name (string-append name "-" version ".tar.gz")) + (method git-fetch) + (uri (git-reference + (url "https://github.com/wbond/asn1crypto.git") + (commit version))) + (file-name (git-file-name name version)) (sha256 (base32 - "1kn910896l3knmilla1c9ly20q181s43w1ah08lzkbm1h3j6pcz0")))) + "10lai2cs5mnz3gpaffbw1m7b885ls8328q5wxm35vfmcip1f0xmb")))) (build-system python-build-system) (home-page "https://github.com/wbond/asn1crypto") (synopsis "ASN.1 parser and serializer in Python") diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm index a984670f6e..10d8df7b0c 100644 --- a/gnu/packages/python.scm +++ b/gnu/packages/python.scm @@ -14,7 +14,7 @@ ;;; Copyright © 2015, 2016, 2017 Leo Famulari <leo@famulari.name> ;;; Copyright © 2015, 2017 Ben Woodcroft <donttrustben@gmail.com> ;;; Copyright © 2015, 2016 Erik Edrosa <erik.edrosa@gmail.com> -;;; Copyright © 2015, 2016, 2017 Efraim Flashner <efraim@flashner.co.il> +;;; Copyright © 2015, 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2015, 2017 Kyle Meyer <kyle@kyleam.com> ;;; Copyright © 2015, 2016 Chris Marusich <cmmarusich@gmail.com> ;;; Copyright © 2016 Danny Milosavljevic <dannym+a@scratchpost.org> @@ -782,14 +782,14 @@ NetCDF files can also be read and modified. Python-HDF4 is a fork of (define-public python-h5py (package (name "python-h5py") - (version "2.7.0") + (version "2.8.0") (source (origin (method url-fetch) (uri (pypi-uri "h5py" version)) (sha256 (base32 - "0433sdv6xc9p7v1xs1gvbxp7p152ywi3nplgjb258q9fvw9469br")))) + "0mdr6wrq02ac93m1aqx9kad0ppfzmm4imlxqgyy1x4l7hmdcc9p6")))) (build-system python-build-system) (arguments `(#:tests? #f ; no test target @@ -2218,14 +2218,14 @@ environments and back.") (define-public python-pyyaml (package (name "python-pyyaml") - (version "3.12") + (version "3.13") (source (origin (method url-fetch) (uri (pypi-uri "PyYAML" version)) (sha256 (base32 - "1aqjl8dk9amd4zr99n8v2qxzgmr2hdvqfma4zh7a41rj6336c9sr")))) + "1gx603g484z46cb74j9rzr6sjlh2vndxayicvlyhxdz98lhhkwry")))) (build-system python-build-system) (inputs `(("libyaml" ,libyaml))) @@ -4210,23 +4210,53 @@ support for Python 3 and PyPy. It is based on cffi.") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "1rk2dvy3fxrga6bvvxc2fi5lbaynm5h4a0w0aaxyn3bc77rszjg9")))) + "1rk2dvy3fxrga6bvvxc2fi5lbaynm5h4a0w0aaxyn3bc77rszjg9")) + (patches (search-patches "python-cairocffi-dlopen-path.patch")))) (build-system python-build-system) (outputs '("out" "doc")) (inputs - `(("gdk-pixbuf" ,gdk-pixbuf) - ("cairo" ,cairo))) + `(("glib" ,glib) + ("gtk+" ,gtk+) + ("gdk-pixbuf" ,gdk-pixbuf) + ("cairo" ,cairo) + ("pango" ,pango))) (native-inputs `(("pkg-config" ,pkg-config) + ("python-pytest" ,python-pytest) ("python-sphinx" ,python-sphinx) ("python-docutils" ,python-docutils))) (propagated-inputs `(("python-xcffib" ,python-xcffib))) ; used at run time (arguments `(;; FIXME: Tests cannot find 'libcairo.so.2'. - #:tests? #f + #:tests? #t #:phases (modify-phases %standard-phases + (add-after 'unpack 'patch-paths + (lambda* (#:key inputs outputs #:allow-other-keys) + (substitute* (find-files "." "\\.py$") + (("dlopen\\(ffi, 'cairo'") + (string-append "dlopen(ffi, '" (assoc-ref inputs "cairo") + "/lib/libcairo.so.2'")) + (("dlopen\\(ffi, 'gdk-3'") + (string-append "dlopen(ffi, '" (assoc-ref inputs "gtk+") + "/lib/libgtk-3.so.0'")) + (("dlopen\\(ffi, 'gdk_pixbuf-2.0'") + (string-append "dlopen(ffi, '" (assoc-ref inputs "gdk-pixbuf") + "/lib/libgdk_pixbuf-2.0.so.0'")) + (("dlopen\\(ffi, 'glib-2.0'") + (string-append "dlopen(ffi, '" (assoc-ref inputs "glib") + "/lib/libglib-2.0.so.0'")) + (("dlopen\\(ffi, 'gobject-2.0'") + (string-append "dlopen(ffi, '" (assoc-ref inputs "glib") + "/lib/libgobject-2.0.so.0'")) + (("dlopen\\(ffi, 'pangocairo-1.0'") + (string-append "dlopen(ffi, '" (assoc-ref inputs "pango") + "/lib/libpangocairo-1.0.so.0'")) + (("dlopen\\(ffi, 'pango-1.0'") + (string-append "dlopen(ffi, '" (assoc-ref inputs "pango") + "/lib/libpango-1.0.so.0'"))) + #t)) (add-after 'install 'install-doc (lambda* (#:key inputs outputs #:allow-other-keys) (let* ((data (string-append (assoc-ref outputs "doc") "/share")) @@ -5106,16 +5136,40 @@ of the structure, dynamics, and functions of complex networks.") (define-public python2-networkx2 (package-with-python2 python-networkx2)) +(define-public python-datrie + (package + (name "python-datrie") + (version "0.7.1") + (source + (origin + (method url-fetch) + (uri (pypi-uri "datrie" version)) + (sha256 + (base32 + "08r0if7dry2q7p34gf7ffyrlnf4bdvnprxgydlfxgfnvq8f3f4bs")))) + (build-system python-build-system) + (native-inputs + `(("python-cython" ,python-cython) + ("python-hypothesis" ,python-hypothesis) + ("python-pytest" ,python-pytest) + ("python-pytest-runner" ,python-pytest-runner))) + (home-page "https://github.com/kmike/datrie") + (synopsis "Fast, efficiently stored trie for Python") + (description + "This package provides a fast, efficiently stored trie implementation for +Python.") + (license license:lgpl2.1+))) + (define-public snakemake (package (name "snakemake") - (version "4.4.0") + (version "5.2.0") (source (origin (method url-fetch) (uri (pypi-uri "snakemake" version)) (sha256 - (base32 "0g0paia4z7w3srnqdmavq3hrb2x7qnpf81jx50njl0p7y4y0j8jv")))) + (base32 "0a1i5v5qxbmmpznp7my9nva8y7pxp8pjrwk2gxgisdskg35sq8s1")))) (build-system python-build-system) (arguments ;; TODO: Package missing test dependencies. @@ -5137,6 +5191,11 @@ of the structure, dynamics, and functions of complex networks.") ("python-requests" ,python-requests) ("python-appdirs" ,python-appdirs) ("python-configargparse" ,python-configargparse) + ("python-datrie" ,python-datrie) + ("python-docutils" ,python-docutils) + ("python-jinja2" ,python-jinja2) + ("python-jsonschema" ,python-jsonschema) + ("python-networkx" ,python-networkx) ("python-pyyaml" ,python-pyyaml) ("python-ratelimiter" ,python-ratelimiter))) (home-page "https://bitbucket.org/snakemake/snakemake/wiki/Home") @@ -5147,6 +5206,24 @@ providing a clean and modern domain specific specification language (DSL) in Python style, together with a fast and comfortable execution environment.") (license license:expat))) +;; This is currently needed for the pigx-* packages. +(define-public snakemake-4 + (package (inherit snakemake) + (version "4.4.0") + (source + (origin + (method url-fetch) + (uri (pypi-uri "snakemake" version)) + (sha256 + (base32 "0g0paia4z7w3srnqdmavq3hrb2x7qnpf81jx50njl0p7y4y0j8jv")))) + (propagated-inputs + `(("python-wrapt" ,python-wrapt) + ("python-requests" ,python-requests) + ("python-appdirs" ,python-appdirs) + ("python-configargparse" ,python-configargparse) + ("python-pyyaml" ,python-pyyaml) + ("python-ratelimiter" ,python-ratelimiter))))) + (define-public python-pyqrcode (package (name "python-pyqrcode") @@ -6284,14 +6361,14 @@ designed to efficiently cope with extremely large amounts of data.") (define-public python-pyasn1 (package (name "python-pyasn1") - (version "0.4.2") + (version "0.4.3") (source (origin (method url-fetch) (uri (pypi-uri "pyasn1" version)) (sha256 (base32 - "05bxnr4wmrg62m4qr1pg1p3z7bhwrv74jll3k42pgxwl36kv0n6j")))) + "1z5h38anjzzrxpraa9iq9llffyx2zs8gx0q6dc1g029miwnn50gv")))) (build-system python-build-system) (home-page "http://pyasn1.sourceforge.net/") (synopsis "ASN.1 types and codecs") @@ -6306,14 +6383,14 @@ suitable for a wide range of protocols based on the ASN.1 specification.") (define-public python-pyasn1-modules (package (name "python-pyasn1-modules") - (version "0.0.8") + (version "0.2.2") (source (origin (method url-fetch) (uri (pypi-uri "pyasn1-modules" version)) (sha256 (base32 - "0drqgw81xd3fxdlg89kgd79zzrabvfncvkbybi2wr6w2y4s1jmhh")))) + "0ivm850yi7ajjbi8j115qpsj95bgxdsx48nbjzg0zip788c3xkx0")))) (build-system python-build-system) (propagated-inputs `(("python-pyasn1" ,python-pyasn1))) @@ -12242,14 +12319,14 @@ pure Python module.") (define-public python-xenon (package (name "python-xenon") - (version "0.5.1") + (version "0.5.4") (source (origin (method url-fetch) (uri (pypi-uri "xenon" version)) (sha256 (base32 - "14kby2y48vp3sgwxqlm5d5789yibqwb1qli5fwcmdqg3iayrbklc")))) + "029cbhysg2vr5n4jz8gpg2793f8wkwnqpr1qgv6c1dn685vy31mc")))) (build-system python-build-system) (native-inputs `(("python-pyyaml" ,python-pyyaml) @@ -12261,12 +12338,7 @@ pure Python module.") `(#:phases (modify-phases %standard-phases (add-before 'build 'patch-test-requirements - (lambda* (#:key inputs #:allow-other-keys) - ;; Update requirements from dependency==version to - ;; dependency>=version. - (substitute* "requirements.txt" - (("==") ">=") - ((",<1.5.0") "")) + (lambda _ ;; Remove httpretty dependency for tests. (substitute* "setup.py" (("httpretty") "")) diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm index a15d6453c9..cefceb6b68 100644 --- a/gnu/packages/qt.scm +++ b/gnu/packages/qt.scm @@ -105,7 +105,7 @@ system, and the core design of Django is reused in Grantlee.") (define-public qt (package (name "qt") - (version "5.9.4") + (version "5.11.1") (outputs '("out" "examples")) (source (origin (method url-fetch) @@ -114,11 +114,11 @@ system, and the core design of Django is reused in Grantlee.") "http://download.qt.io/official_releases/qt/" (version-major+minor version) "/" version - "/single/qt-everywhere-opensource-src-" + "/single/qt-everywhere-src-" version ".tar.xz")) (sha256 (base32 - "1mblh8k04l13nk9fhhrr43h5bcph1gbz94j5y7csx8zvxb5xkb73")) + "0azva1wx298jh0xskymz8jic83yhxs1xfxf321wqd5lwiyq2qq1r")) (modules '((guix build utils))) (snippet '(begin @@ -135,7 +135,7 @@ system, and the core design of Django is reused in Grantlee.") (lambda (dir) (delete-file-recursively (string-append "qtbase/src/3rdparty/" dir))) (list "double-conversion" "freetype" "harfbuzz-ng" - "libpng" "libjpeg" "pcre2" "sqlite" "xcb" + "libpng" "libjpeg" "pcre2" "xcb" "xkbcommon" "zlib")) (for-each (lambda (dir) @@ -143,10 +143,23 @@ system, and the core design of Django is reused in Grantlee.") (list "qtimageformats/src/3rdparty" "qtmultimedia/examples/multimedia/spectrum/3rdparty" "qtwayland/examples" + "qtscxml/tests/3rdparty" "qtcanvas3d/examples/canvas3d/3rdparty")) ;; Tests depend on this example, which depends on the 3rd party code. (substitute* "qtmultimedia/examples/multimedia/multimedia.pro" (("spectrum") "#")) + (substitute* "qtxmlpatterns/tests/auto/auto.pro" + (("qxmlquery") "# qxmlquery") + (("xmlpatterns ") "# xmlpatterns")) + (substitute* "qtwebglplugin/tests/plugins/platforms/platforms.pro" + (("webgl") "# webgl")) + (substitute* "qtscxml/tests/auto/auto.pro" + (("scion") "#")) + (substitute* "qtnetworkauth/tests/auto/auto.pro" + (("oauth1 ") "# oauth1 ")) + (substitute* "qtremoteobjects/tests/auto/qml/qml.pro" + (("integration") "# integration") + (("usertypes") "# usertypes")) #t)))) (build-system gnu-build-system) (propagated-inputs @@ -193,7 +206,7 @@ system, and the core design of Django is reused in Grantlee.") ("postgresql" ,postgresql) ("pulseaudio" ,pulseaudio) ("pcre2" ,pcre2) - ("sqlite" ,sqlite) + ;("sqlite" ,sqlite) ("udev" ,eudev) ("unixodbc" ,unixodbc) ("wayland" ,wayland) @@ -213,7 +226,8 @@ system, and the core design of Django is reused in Grantlee.") ("ruby" ,ruby) ("which" ,(@ (gnu packages base) which)))) (arguments - `(#:phases + `(#:parallel-build? #f ; Triggers race condition in qtbase module on Hydra. + #:phases (modify-phases %standard-phases (add-after 'configure 'patch-bin-sh (lambda _ @@ -236,16 +250,32 @@ system, and the core design of Django is reused in Grantlee.") "./configure" "-verbose" "-prefix" out - "-examplesdir" examples ; 89MiB + "-docdir" (string-append out "/share/doc/qt5") + "-headerdir" (string-append out "/include/qt5") + "-archdatadir" (string-append out "/lib/qt5") + "-datadir" (string-append out "/share/qt5") + "-examplesdir" (string-append + examples "/share/doc/qt5/examples") ; 151MiB "-opensource" "-confirm-license" + + ;; These features require higher versions of Linux than the + ;; minimum version of the glibc. See + ;; src/corelib/global/minimum-linux_p.h. By disabling these + ;; features Qt5 applications can be used on the oldest + ;; kernels that the glibc supports, including the RHEL6 + ;; (2.6.32) and RHEL7 (3.10) kernels. + "-no-feature-getentropy" ; requires Linux 3.17 + "-no-feature-renameat2" ; requires Linux 3.16 + ;; Do not build examples; for the time being, we ;; prefer to save the space and build time. "-no-compile-examples" ;; Most "-system-..." are automatic, but some use ;; the bundled copy by default. - "-system-sqlite" + ;"-system-sqlite" "-system-harfbuzz" + "-system-pcre" ;; explicitly link with openssl instead of dlopening it "-openssl-linked" ;; explicitly link with dbus instead of dlopening it @@ -260,12 +290,92 @@ system, and the core design of Django is reused in Grantlee.") '() '("-no-sse2")) "-no-mips_dsp" - "-no-mips_dspr2")))))))) - (home-page "https://www.qt.io/") - (synopsis "Cross-platform GUI library") - (description "Qt is a cross-platform application and UI framework for -developers using C++ or QML, a CSS & JavaScript like language.") - (license license:lgpl2.1) + "-no-mips_dspr2"))))) + (add-after 'install 'patch-mkspecs + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (archdata (string-append out "/lib/qt5")) + (mkspecs (string-append archdata "/mkspecs")) + (qt_config.prf (string-append + mkspecs "/features/qt_config.prf"))) + ;; For each Qt module, let `qmake' uses search paths in the + ;; module directory instead of all in QT_INSTALL_PREFIX. + (substitute* qt_config.prf + (("\\$\\$\\[QT_INSTALL_HEADERS\\]") + "$$clean_path($$replace(dir, mkspecs/modules, ../../include/qt5))") + (("\\$\\$\\[QT_INSTALL_LIBS\\]") + "$$clean_path($$replace(dir, mkspecs/modules, ../../lib))") + (("\\$\\$\\[QT_HOST_LIBS\\]") + "$$clean_path($$replace(dir, mkspecs/modules, ../../lib))") + (("\\$\\$\\[QT_INSTALL_BINS\\]") + "$$clean_path($$replace(dir, mkspecs/modules, ../../bin))")) + + ;; Searches Qt tools in the current PATH instead of QT_HOST_BINS. + (substitute* (string-append mkspecs "/features/qt_functions.prf") + (("cmd = \\$\\$\\[QT_HOST_BINS\\]/\\$\\$2") + "cmd = $$system(which $${2}.pl 2>/dev/null || which $${2})")) + + ;; Resolve qmake spec files within qtbase by absolute paths. + (substitute* + (map (lambda (file) + (string-append mkspecs "/features/" file)) + '("device_config.prf" "moc.prf" "qt_build_config.prf" + "qt_config.prf" "winrt/package_manifest.prf")) + (("\\$\\$\\[QT_HOST_DATA/get\\]") archdata) + (("\\$\\$\\[QT_HOST_DATA/src\\]") archdata)) + #t))) + (add-after 'unpack 'patch-paths + ;; Use the absolute paths for dynamically loaded libs, otherwise + ;; the lib will be searched in LD_LIBRARY_PATH which typically is + ;; not set in guix. + (lambda* (#:key inputs #:allow-other-keys) + ;; libresolve + (let ((glibc (assoc-ref inputs ,(if (%current-target-system) + "cross-libc" "libc")))) + (substitute* '("qtbase/src/network/kernel/qdnslookup_unix.cpp" + "qtbase/src/network/kernel/qhostinfo_unix.cpp") + (("^\\s*(lib.setFileName\\(QLatin1String\\(\")(resolv\"\\)\\);)" _ a b) + (string-append a glibc "/lib/lib" b)))) + ;; X11/locale (compose path) + (substitute* "qtbase/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp" + ;; Don't search in /usr/…/X11/locale, … + (("^\\s*m_possibleLocations.append\\(QStringLiteral\\(\"/usr/.*/X11/locale\"\\)\\);" line) + (string-append "// " line)) + ;; … but use libx11's path + (("^\\s*(m_possibleLocations.append\\(QStringLiteral\\()X11_PREFIX \"(/.*/X11/locale\"\\)\\);)" _ a b) + (string-append a "\"" (assoc-ref inputs "libx11") b))) + ;; libGL + (substitute* "qtbase/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp" + (("^\\s*(QLibrary lib\\(QLatin1String\\(\")(GL\"\\)\\);)" _ a b) + (string-append a (assoc-ref inputs "mesa") "/lib/lib" b))) + ;; libXcursor + (substitute* "qtbase/src/plugins/platforms/xcb/qxcbcursor.cpp" + (("^\\s*(QLibrary xcursorLib\\(QLatin1String\\(\")(Xcursor\"\\), 1\\);)" _ a b) + (string-append a (assoc-ref inputs "libxcursor") "/lib/lib" b)) + (("^\\s*(xcursorLib.setFileName\\(QLatin1String\\(\")(Xcursor\"\\)\\);)" _ a b) + (string-append a (assoc-ref inputs "libxcursor") "/lib/lib" b))) + #t))))) + (native-search-paths + (list (search-path-specification + (variable "QMAKEPATH") + (files '("lib/qt5"))) + (search-path-specification + (variable "QML2_IMPORT_PATH") + (files '("lib/qt5/qml"))) + (search-path-specification + (variable "QT_PLUGIN_PATH") + (files '("lib/qt5/plugins"))) + (search-path-specification + (variable "XDG_DATA_DIRS") + (files '("share"))) + (search-path-specification + (variable "XDG_CONFIG_DIRS") + (files '("etc/xdg"))))) + (home-page "https://www.qt.io/") + (synopsis "Cross-platform GUI library") + (description "Qt is a cross-platform application and UI framework for + developers using C++ or QML, a CSS & JavaScript like language.") + (license (list license:lgpl2.1 license:lgpl3)) ;; Qt 4: 'QBasicAtomicPointer' leads to build failures on MIPS; ;; see <http://hydra.gnu.org/build/112828>. @@ -373,7 +483,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") (define-public qtbase (package (name "qtbase") - (version "5.11.0") + (version "5.11.1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -382,7 +492,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") version ".tar.xz")) (sha256 (base32 - "0rny87ypnkkvyp9p76nim77v6np0cdf1dbjfmcilklzphkdlcvpd")) + "0ipv18ypbgpxhh49rfplqmflskmnhhwj1bjr5hrwi0jpvar4gl50")) ;; Use TZDIR to avoid depending on package "tzdata". (patches (search-patches "qtbase-use-TZDIR.patch")) (modules '((guix build utils))) @@ -616,7 +726,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") (define-public qtsvg (package (inherit qtbase) (name "qtsvg") - (version "5.11.0") + (version "5.11.1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -625,7 +735,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") version ".tar.xz")) (sha256 (base32 - "0m0zglp0m5gv75ivma6l3hm8brb0cf44dhbc6lqwfdwacxhgx3jb")))) + "0drhig0jcss3cf01aqfmafajf8gzf6bh468g1ikyrkh46czgyshx")))) (propagated-inputs `()) (native-inputs `(("perl" ,perl))) (inputs @@ -691,7 +801,7 @@ HostData=lib/qt5 (define-public qtimageformats (package (inherit qtsvg) (name "qtimageformats") - (version "5.11.0") + (version "5.11.1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -700,7 +810,7 @@ HostData=lib/qt5 version ".tar.xz")) (sha256 (base32 - "0w0yy7zzln3v7dm7ksjxkzhq8r0a9nwk823wv4f1x7vsa3pnyh2q")) + "05jnyrq7klr3mdiz0r9c151vl829yc8y9cxfbw5dwbp1rkndwl7b")) (modules '((guix build utils))) (snippet '(begin @@ -722,7 +832,7 @@ support for MNG, TGA, TIFF and WBMP image formats."))) (define-public qtx11extras (package (inherit qtsvg) (name "qtx11extras") - (version "5.11.0") + (version "5.11.1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -731,7 +841,7 @@ support for MNG, TGA, TIFF and WBMP image formats."))) version ".tar.xz")) (sha256 (base32 - "13vbx61wcd8pnpgk3j5r665pm03s7jp2s98apvc6fhp1njlr0rhi")))) + "0rccpmhz48kq4xs441lj9mnwpbi6kxwl8y7dj7w7g5zvpv41kwmw")))) (arguments (substitute-keyword-arguments (package-arguments qtsvg) ((#:tests? _ #f) #f))) ; TODO: Enable the tests @@ -746,7 +856,7 @@ from within Qt 5."))) (define-public qtxmlpatterns (package (inherit qtsvg) (name "qtxmlpatterns") - (version "5.11.0") + (version "5.11.1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -755,7 +865,7 @@ from within Qt 5."))) version ".tar.xz")) (sha256 (base32 - "13nj2pa706sy874bqbv7y94ypicr4k09x6n2jyxkw93flb5pi8qr")))) + "0n5gacpni019i2872m4b1p5qaqibhszsdl3xhw3xsckvr0hf25v1")))) (arguments (substitute-keyword-arguments (package-arguments qtsvg) ((#:phases phases) @@ -775,7 +885,7 @@ xmlpatternsvalidator."))) (define-public qtdeclarative (package (inherit qtsvg) (name "qtdeclarative") - (version "5.11.0") + (version "5.11.1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -784,7 +894,7 @@ xmlpatternsvalidator."))) version ".tar.xz")) (sha256 (base32 - "1h2pbyr7dnak4q96373xpa6gk6rl528rnqima8xnvhdi2y5kgagf")))) + "0fjg9ii64mhx2ww70rj44cy65rwwkwyjxcm435kwp3v1pzv5xkwy")))) (arguments (substitute-keyword-arguments (package-arguments qtsvg) ((#:tests? _ #f) #f))) ; TODO: Enable the tests @@ -807,7 +917,7 @@ with JavaScript and C++."))) (define-public qtconnectivity (package (inherit qtsvg) (name "qtconnectivity") - (version "5.11.0") + (version "5.11.1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -816,7 +926,7 @@ with JavaScript and C++."))) version ".tar.xz")) (sha256 (base32 - "0wqq5q5saf007aphvpn5pvj6l0qp0z7wxvfba6v9iq5ylyqm6bnd")))) + "0mz6mbf069yqdvi6mcvp6izskcn9wzig4s3dzmygwd430pmx93kk")))) (native-inputs `(("perl" ,perl) ("pkg-config" ,pkg-config) @@ -831,7 +941,7 @@ with Bluetooth and NFC."))) (define-public qtwebsockets (package (inherit qtsvg) (name "qtwebsockets") - (version "5.11.0") + (version "5.11.1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -840,7 +950,7 @@ with Bluetooth and NFC."))) version ".tar.xz")) (sha256 (base32 - "1drr6nxxbkwpmz39bhyfmmsqjhy11bj3w1nc3q9dwhpcbf04an3x")))) + "1bj82y3f1nd2adnj3ljfr4vlx4bkgdlm3zvhlsas2lz837vi5aks")))) (arguments (substitute-keyword-arguments (package-arguments qtsvg) ((#:tests? _ #f) #f))) ; TODO: Enable the tests @@ -858,7 +968,7 @@ consume data received from the server, or both."))) (define-public qtsensors (package (inherit qtsvg) (name "qtsensors") - (version "5.11.0") + (version "5.11.1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -867,7 +977,7 @@ consume data received from the server, or both."))) version ".tar.xz")) (sha256 (base32 - "1az22rdkpc1m44qb3dyh7cpiprplkvynzjr629ai05i8ngbfdi0g")))) + "1yn065l6kzs3fn74950pkxxglqi55lzk7alf15klsd1wnxc0zsfb")))) (arguments (substitute-keyword-arguments (package-arguments qtsvg) ((#:parallel-tests? _ #f) #f) ; can lead to race condition @@ -891,7 +1001,7 @@ recognition API for devices."))) (define-public qtmultimedia (package (inherit qtsvg) (name "qtmultimedia") - (version "5.11.0") + (version "5.11.1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -900,7 +1010,7 @@ recognition API for devices."))) version ".tar.xz")) (sha256 (base32 - "0g4x1w251imq58zp1px6yschwj6icsxzwl3fy7pjfbgd27qjhlzg")) + "0369b0mh7sr718l119b07grb1v8xqlq6l4damyd6lrmlj1wbb2zj")) (modules '((guix build utils))) (snippet '(begin @@ -942,7 +1052,7 @@ set of plugins for interacting with pulseaudio and GStreamer."))) (define-public qtwayland (package (inherit qtsvg) (name "qtwayland") - (version "5.11.0") + (version "5.11.1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -951,7 +1061,7 @@ set of plugins for interacting with pulseaudio and GStreamer."))) version ".tar.xz")) (sha256 (base32 - "09s1ckqj0cgjmmi7jylsf039vgzlq7i9rr4swb590fkz427lx0b8")) + "1sj4lsza48xji1qhmi1wqpx07jgm1mpa95gmd2w1kxw240hbr6p0")) (modules '((guix build utils))) (snippet ;; The examples try to build and cause the build to fail @@ -994,7 +1104,7 @@ compositor libraries."))) (define-public qtserialport (package (inherit qtsvg) (name "qtserialport") - (version "5.11.0") + (version "5.11.1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -1003,7 +1113,7 @@ compositor libraries."))) version ".tar.xz")) (sha256 (base32 - "1cbf1jsginp5p3y17cyb6dfhsafxal0bn9pya6aybz0q799zgvl5")))) + "18v4pbq7bnmrl81m8s11ksbjlvzbb4kw5py6ji2dhmnm44w9k9sn")))) (native-inputs `(("perl" ,perl))) (inputs `(("qtbase" ,qtbase) @@ -1028,7 +1138,7 @@ interacting with serial ports from within Qt."))) (define-public qtserialbus (package (inherit qtsvg) (name "qtserialbus") - (version "5.11.0") + (version "5.11.1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -1037,7 +1147,7 @@ interacting with serial ports from within Qt."))) version ".tar.xz")) (sha256 (base32 - "0r3crk7gw0xs6wk1gvw2k8r9s9vam3sfwrji1njhswavii9fbp85")))) + "0jjmdd6vkvs5izqazp1rsrad0b1fzk6knrbdjl37lvcsawyfxfyk")))) (inputs `(("qtbase" ,qtbase) ("qtserialport" ,qtserialport))) @@ -1049,7 +1159,7 @@ and others."))) (define-public qtwebchannel (package (inherit qtsvg) (name "qtwebchannel") - (version "5.11.0") + (version "5.11.1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -1058,7 +1168,7 @@ and others."))) version ".tar.xz")) (sha256 (base32 - "05fa5pwvk24cjp8m6pbw3ma95vnls762crpjdgvygfk0h8xilxmh")))) + "11rfjkb4h8dzxfmk889x7kkc73cbk26smc7h62lnh35f2nppd95r")))) (native-inputs `(("perl" ,perl) ("qtdeclarative" ,qtdeclarative) @@ -1073,7 +1183,7 @@ popular web engines, Qt WebKit 2 and Qt WebEngine."))) (define-public qtwebglplugin (package (inherit qtsvg) (name "qtwebglplugin") - (version "5.11.0") + (version "5.11.1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -1082,11 +1192,20 @@ popular web engines, Qt WebKit 2 and Qt WebEngine."))) version ".tar.xz")) (sha256 (base32 - "1al7dv7i9rg4z4p8vnipbjbbgc6113lbfjggxxap3sn6hqs986fm")))) + "108yhi3sj6d1ysmlpka69ivb20mx9h6jpra6yq099i3jw4gc753x")))) + (arguments + (substitute-keyword-arguments (package-arguments qtsvg) + ((#:phases phases) + `(modify-phases ,phases + (add-after 'unpack 'disable-network-tests + (lambda _ (substitute* "tests/plugins/platforms/platforms.pro" + (("webgl") "# webgl")) + #t)))))) (native-inputs '()) (inputs `(("mesa" ,mesa) ("qtbase" ,qtbase) + ("qtdeclarative" ,qtdeclarative) ("qtwebsockets" ,qtwebsockets))) (synopsis "QPA plugin for running an application via a browser using streamed WebGL commands") @@ -1099,7 +1218,7 @@ OpenGL ES 2.0 and can be used in HTML5 canvas elements"))) (define-public qtwebview (package (inherit qtsvg) (name "qtwebview") - (version "5.11.0") + (version "5.11.1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -1108,7 +1227,7 @@ OpenGL ES 2.0 and can be used in HTML5 canvas elements"))) version ".tar.xz")) (sha256 (base32 - "0a89v8mj5pb7a7whyhasf4ms0n34ghfmv2qp0pyxnq56f2bsjbl4")))) + "18da6a13wpb23vb6mbg9v75gphdf5mjmch7q3v1qjrv2sdwbpjbp")))) (native-inputs `(("perl" ,perl))) (inputs @@ -1122,7 +1241,7 @@ native APIs where it makes sense."))) (define-public qtlocation (package (inherit qtsvg) (name "qtlocation") - (version "5.11.0") + (version "5.11.1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -1131,7 +1250,7 @@ native APIs where it makes sense."))) version ".tar.xz")) (sha256 (base32 - "074cjqhr14mqlsqj9rzagzdcqnayyichp31lq02k05q07wg93xi8")))) + "03vrbymwbn4nqsypcmr4ccqv20nvwdfs9gb01pi3jxr6x0wrlb0p")))) (arguments (substitute-keyword-arguments (package-arguments qtsvg) ((#:tests? _ #f) #f))) ; TODO: Enable the tests @@ -1152,7 +1271,7 @@ positioning and geolocation plugins."))) (define-public qttools (package (inherit qtsvg) (name "qttools") - (version "5.11.0") + (version "5.11.1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -1161,7 +1280,7 @@ positioning and geolocation plugins."))) version ".tar.xz")) (sha256 (base32 - "1nb77bfs63nyy0wkhsci9qbqmahncy3sdcrwj4qr1prc4y2cm4wx")))) + "1zhl8p29mbabf07rhaks13qcm45zdckzymvz9qn95nxfj9piiyxp")))) (arguments (substitute-keyword-arguments (package-arguments qtsvg) ((#:tests? _ #f) #f))) ; TODO: Enable the tests @@ -1179,7 +1298,7 @@ that helps in Qt development."))) (define-public qtscript (package (inherit qtsvg) (name "qtscript") - (version "5.11.0") + (version "5.11.1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -1188,7 +1307,7 @@ that helps in Qt development."))) version ".tar.xz")) (sha256 (base32 - "1ib8a5gsxarbm2j94j5d097ly3ap4snqkx2imz3sl6xk6gknm4i5")) + "0z6sb4b9ds5lwkr0sxrnx6nim3aq2qx4a8illjy5vclfdv80yhqw")) (patches (search-patches "qtscript-disable-tests.patch")))) (native-inputs `(("perl" ,perl) @@ -1203,7 +1322,7 @@ ECMAScript and Qt."))) (define-public qtquickcontrols (package (inherit qtsvg) (name "qtquickcontrols") - (version "5.11.0") + (version "5.11.1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -1212,7 +1331,7 @@ ECMAScript and Qt."))) version ".tar.xz")) (sha256 (base32 - "01ziibf4afdhb5b3gfci8maprmviqwhdvma2z1jlq2ck45cpsqi6")))) + "0mn662j0gkpama7zlrsn4h27sjrk49kpbha1h0zxxyiza5cpzsms")))) (arguments (substitute-keyword-arguments (package-arguments qtsvg) ((#:tests? _ #f) #f))) ; TODO: Enable the tests @@ -1227,7 +1346,7 @@ can be used to build complete interfaces in Qt Quick."))) (define-public qtquickcontrols2 (package (inherit qtsvg) (name "qtquickcontrols2") - (version "5.11.0") + (version "5.11.1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -1236,7 +1355,7 @@ can be used to build complete interfaces in Qt Quick."))) version ".tar.xz")) (sha256 (base32 - "1hsa8n4dlqpyz9xq2kq1hsxrxsjc7ywzzfhqijylgzzclvlqgb7y")))) + "0hn4kvrkz5ivwrp9p6yzwlw7cn4j72kcpm2nqyi3dbai1px6dc5x")))) (arguments (substitute-keyword-arguments (package-arguments qtsvg) ((#:tests? _ #f) #f))) ; TODO: Enable the tests @@ -1252,7 +1371,7 @@ not available."))) (define-public qtgraphicaleffects (package (inherit qtsvg) (name "qtgraphicaleffects") - (version "5.11.0") + (version "5.11.1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -1261,7 +1380,7 @@ not available."))) version ".tar.xz")) (sha256 (base32 - "0xzr4421w7idlgndxnd68wwc2asabycjiskkyl1f8nwqv34lcy3j")))) + "1ws8aj7bq3rxpzjs370dcyqk8a5v1y6fwvrdhf70j8b2d4v75lnr")))) (arguments (substitute-keyword-arguments (package-arguments qtsvg) ((#:tests? _ #f) #f))) ; TODO: Enable the tests @@ -1307,7 +1426,7 @@ backend for QtQuick scene graph.") (define-public qtgamepad (package (inherit qtsvg) (name "qtgamepad") - (version "5.11.0") + (version "5.11.1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -1316,7 +1435,7 @@ backend for QtQuick scene graph.") version ".tar.xz")) (sha256 (base32 - "0g52c03gdgz57h7szdxvc5hdy45l7q7m29yfzhwqc57hwdfl98bi")))) + "1n97w9rcbg8mzkvjgn3i8jbfmplp7w0p80ykdchpml47gxk1kwma")))) (native-inputs `(("perl" ,perl) ("pkg-config" ,pkg-config))) @@ -1337,7 +1456,7 @@ and mobile applications targeting TV-like form factors."))) (define-public qtscxml (package (inherit qtsvg) (name "qtscxml") - (version "5.11.0") + (version "5.11.1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -1346,7 +1465,7 @@ and mobile applications targeting TV-like form factors."))) version ".tar.xz")) (sha256 (base32 - "00wb89ris8fyivhz9qpqn72mzpkh6mqdjss82j3q10g3c142072k")) + "0f1k4fnk2aydagxqvkb636pcsi17sbq2zj2fn0ad50dvq013yiph")) (modules '((guix build utils))) (snippet '(begin @@ -1368,7 +1487,7 @@ also contains functionality to support data models and executable content."))) (define-public qtpurchasing (package (inherit qtsvg) (name "qtpurchasing") - (version "5.11.0") + (version "5.11.1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -1377,7 +1496,7 @@ also contains functionality to support data models and executable content."))) version ".tar.xz")) (sha256 (base32 - "1c92yv2yi38sic06nyr9r6zpq3y4sxnasmj14d3jmg50gc1ncqfs")))) + "0crm39fy9aqns10mjlbxvkkna9xklic49zfp3f7v7cwl66wap6dc")))) (inputs `(("qtbase" ,qtbase) ("qtdeclarative" ,qtdeclarative))) @@ -1388,7 +1507,7 @@ purchasing goods and services."))) (define-public qtcanvas3d (package (inherit qtsvg) (name "qtcanvas3d") - (version "5.11.0") + (version "5.11.1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -1397,7 +1516,7 @@ purchasing goods and services."))) version ".tar.xz")) (sha256 (base32 - "1kqcaks6lkz8cp9s3pwrvgrr8381rjzf5fbf2bzshdw7psphxiiz")) + "1pif3m1f44jrly2nh0hzid6dmdxqiy5qgx645hz6g5fmpl113d8g")) (modules '((guix build utils))) (snippet '(begin @@ -1427,7 +1546,7 @@ drawing calls from Qt Quick JavaScript."))) (define-public qtcharts (package (inherit qtsvg) (name "qtcharts") - (version "5.11.0") + (version "5.11.1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -1436,7 +1555,7 @@ drawing calls from Qt Quick JavaScript."))) version ".tar.xz")) (sha256 (base32 - "0lg39vd6i0l76spjz6bhb1kkpbk2mgc0hxccj7733xxbxaz14vn4")))) + "0avscsni84zrzydilkkp456sbaypyzhkn42qygjdq7wcn045zxk2")))) (arguments (substitute-keyword-arguments (package-arguments qtsvg) ((#:tests? _ #f) #f))) ; TODO: Enable the tests @@ -1454,7 +1573,7 @@ selecting one of the charts themes.") (define-public qtdatavis3d (package (inherit qtsvg) (name "qtdatavis3d") - (version "5.11.0") + (version "5.11.1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -1463,7 +1582,7 @@ selecting one of the charts themes.") version ".tar.xz")) (sha256 (base32 - "1s7gmgh6g3aia74yiqahffrc6n8f4491vb7g3i4i10ilandipg34")))) + "0gay0dsz05xfrlx190y95hp9wipzb988h02fqbqvyn00ds3s178w")))) (arguments (substitute-keyword-arguments (package-arguments qtsvg) ((#:tests? _ #f) #f))) ; TODO: Enable the tests @@ -1481,7 +1600,7 @@ customized by using themes or by adding custom items and labels to them.") (define-public qtnetworkauth (package (inherit qtsvg) (name "qtnetworkauth") - (version "5.11.0") + (version "5.11.1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -1490,7 +1609,7 @@ customized by using themes or by adding custom items and labels to them.") version ".tar.xz")) (sha256 (base32 - "1kr8hwjsb8a5cypvqj48vrnkcvm2rcni102dh6i909i70a7hcsym")))) + "05p4pvfp3k5612d54anvpj39bgc7v572x6kgk3fy69xgn7lhbd02")))) (arguments (substitute-keyword-arguments (package-arguments qtsvg) ((#:phases phases) @@ -1510,7 +1629,7 @@ implementation of OAuth and OAuth2 authenticathon methods for Qt."))) (define-public qtremoteobjects (package (inherit qtsvg) (name "qtremoteobjects") - (version "5.11.0") + (version "5.11.1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -1519,7 +1638,7 @@ implementation of OAuth and OAuth2 authenticathon methods for Qt."))) version ".tar.xz")) (sha256 (base32 - "1chn1xxhapfwvhrlv4chwfgf2dw8x8kn1lssdmpmg5s420z3pbq9")))) + "1yv9f2329nv4viiyqmq7ciz51574wd11grj8s88qm0ndcb36jbgb")))) (arguments (substitute-keyword-arguments (package-arguments qtsvg) ((#:phases phases) @@ -1528,7 +1647,8 @@ implementation of OAuth and OAuth2 authenticathon methods for Qt."))) (lambda _ ;; This test can't find its imports. (substitute* "tests/auto/qml/qml.pro" - (("integration") "# integration")) + (("integration") "# integration") + (("usertypes") "# usertypes")) #t)))))) (inputs `(("qtbase" ,qtbase) @@ -1542,7 +1662,7 @@ processes or computers."))) (define-public qtspeech (package (inherit qtsvg) (name "qtspeech") - (version "5.11.0") + (version "5.11.1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -1551,7 +1671,10 @@ processes or computers."))) version ".tar.xz")) (sha256 (base32 - "1bgfg0akqf1nfzm28n8dhvhj0p1niwxrfs763gj7m0g6vpwjbhd1")))) + "1nwvbaijg35i98yaiqgnyn5vv0cn4v3wrxhwi1s0hfv9sv3q5iyw")))) + (arguments + (substitute-keyword-arguments (package-arguments qtsvg) + ((#:tests? _ #f) #f))) ; TODO: Enable the tests (inputs `(("qtbase" ,qtbase))) (native-inputs @@ -1571,7 +1694,7 @@ message."))) (define-public python-sip (package (name "python-sip") - (version "4.19.8") + (version "4.19.12") (source (origin (method url-fetch) @@ -1580,7 +1703,7 @@ message."))) "sip-" version "/sip-" version ".tar.gz")) (sha256 (base32 - "1g4pq9vj753r2s061jc4y9ydzgb48ibhc9bdvmb8mlyllwp7mbvy")))) + "08iqj9qyanc6a4bllbd87gv8pd1gkplw1jhfa1sz0gcq3g1pyq94")))) (build-system gnu-build-system) (native-inputs `(("python" ,python-wrapper))) @@ -1605,11 +1728,10 @@ message."))) (lib (string-append out "/lib/python" python-major+minor "/site-packages"))) - (zero? - (system* "python" "configure.py" - "--bindir" bin - "--destdir" lib - "--incdir" include)))))))) + (invoke "python" "configure.py" + "--bindir" bin + "--destdir" lib + "--incdir" include))))))) (home-page "https://www.riverbankcomputing.com/software/sip/intro") (synopsis "Python binding creator for C and C++ libraries") (description @@ -1634,7 +1756,7 @@ module provides support functions to the automatically generated code.") (define-public python-pyqt (package (name "python-pyqt") - (version "5.10.1") + (version "5.11.2") (source (origin (method url-fetch) @@ -1644,8 +1766,9 @@ module provides support functions to the automatically generated code.") version ".tar.gz")) (sha256 (base32 - "1vz9c4v0k8azk2b08swwybrshzw32x8djjpq13mf9v15x1qyjclr")) - (patches (search-patches "pyqt-configure.patch")))) + "00wn9svgyp0fsrkc4ma15zcxg31pw4gsgaz6nwb3fhy3al8miakw")) + (patches (search-patches "pyqt-configure.patch" + "pyqt-public-sip.patch")))) (build-system gnu-build-system) (native-inputs `(("qtbase" ,qtbase))) ; for qmake @@ -1672,12 +1795,6 @@ module provides support functions to the automatically generated code.") ,@%gnu-build-system-modules) #:phases (modify-phases %standard-phases - (add-after 'unpack 'fix-build-with-qt-5.11 - ;; See: https://bugs.gentoo.org/654742 - (lambda _ - (substitute* "sip/QtTest/qtestmouse.sip" - (("void waitForEvents\\(\\) /ReleaseGIL/;") "")) - #t)) (replace 'configure (lambda* (#:key inputs outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) @@ -1697,18 +1814,18 @@ module provides support functions to the automatically generated code.") python-major+minor "/site-packages")) (stubs (string-append lib "/PyQt5"))) - (zero? (system* "python" "configure.py" - "--confirm-license" - "--bindir" bin - "--destdir" lib - "--designer-plugindir" designer - "--qml-plugindir" qml - ; Where to install the PEP 484 Type Hints stub - ; files. Without this the stubs are tried to be - ; installed into the python package's - ; site-package directory, which is read-only. - "--stubsdir" stubs - "--sipdir" sip)))))))) + (invoke "python" "configure.py" + "--confirm-license" + "--bindir" bin + "--destdir" lib + "--designer-plugindir" designer + "--qml-plugindir" qml + ; Where to install the PEP 484 Type Hints stub + ; files. Without this the stubs are tried to be + ; installed into the python package's + ; site-package directory, which is read-only. + "--stubsdir" stubs + "--sipdir" sip))))))) (home-page "https://www.riverbankcomputing.com/software/pyqt/intro") (synopsis "Python bindings for Qt") (description @@ -1725,11 +1842,12 @@ contain over 620 classes.") ("qtbase" ,qtbase))) (inputs `(("python" ,python-2) + ("python2-enum34" ,python2-enum34) ,@(alist-delete "python" (package-inputs python-pyqt)))))) -(define-public python-pyqt-4 +(define-public python2-pyqt-4 (package (inherit python-pyqt) - (name "python-pyqt") + (name "python2-pyqt") (version "4.12") (source (origin @@ -1742,9 +1860,9 @@ contain over 620 classes.") (base32 "1nw8r88a5g2d550yvklawlvns8gd5slw53yy688kxnsa65aln79w")))) (native-inputs - `(("python-sip" ,python-sip) + `(("python-sip" ,python2-sip) ("qt" ,qt-4))) - (inputs `(("python" ,python-wrapper))) + (inputs `(("python" ,python-2))) (arguments `(#:tests? #f ; no check target #:modules ((srfi srfi-1) @@ -1773,19 +1891,10 @@ contain over 620 classes.") "--sipdir" sip)))))))) (license (list license:gpl2 license:gpl3)))) ; choice of either license -(define-public python2-pyqt-4 - (package (inherit python-pyqt-4) - (name "python2-pyqt") - (native-inputs - `(("python-sip" ,python2-sip) - ("qt" ,qt-4))) - (inputs - `(("python" ,python-2))))) - (define-public qscintilla (package (name "qscintilla") - (version "2.10.3") + (version "2.10.7") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/pyqt/QScintilla2/" @@ -1793,7 +1902,7 @@ contain over 620 classes.") version ".tar.gz")) (sha256 (base32 - "1rw1nlwnyzj5pb86cc5kk56qhrvwvrjvjzgrkwh3g7b9wxl7lrfj")))) + "06hs6civq13dvzlws0spjb7gwyk6kynpnfwg5plhahnxf7g5h137")))) (build-system gnu-build-system) (arguments `(#:phases @@ -1850,6 +1959,10 @@ indicators, code completion and call tips.") "Qsci/Makefile") (("\\$\\(INSTALL_ROOT\\)/gnu/store/[^/]+") (assoc-ref outputs "out"))) + ;; And fix the installed.txt file + (substitute* "installed.txt" + (("/gnu/store/[^/]+") + (assoc-ref outputs "out"))) #t))))) (inputs `(("qscintilla" ,qscintilla) diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm index 1602fd5d5e..aa4cae6f97 100644 --- a/gnu/packages/ruby.scm +++ b/gnu/packages/ruby.scm @@ -446,6 +446,29 @@ outcomes of a code example.") (propagated-inputs `(("ruby-diff-lcs" ,ruby-diff-lcs))))) +(define-public ruby-rspec-its + (package + (name "ruby-rspec-its") + (version "1.2.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "rspec-its" version)) + (sha256 + (base32 + "1pwphny5jawcm1hda3vs9pjv1cybaxy17dc1s75qd7drrvx697p3")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) ; needs cucumber. + (propagated-inputs + `(("ruby-rspec-core" ,ruby-rspec-core) + ("ruby-rspec-expectations" ,ruby-rspec-expectations))) + (synopsis "RSpec extension gem for attribute matching") + (description "@code{rspec-its} is an RSpec extension gem for attribute +matching.") + (home-page "https://github.com/rspec/rspec-its") + (license license:expat))) + (define-public ruby-rspec-mocks (package (name "ruby-rspec-mocks") @@ -883,7 +906,8 @@ complexity.") (lambda _ ;; This is used in the Rakefile, and setting it avoids an issue ;; with running the tests. - (setenv "LIB" "options")))))) + (setenv "LIB" "options") + #t))))) (synopsis "Ruby library to parse options from *args cleanly") (description "The @code{options} library helps with parsing keyword options in Ruby @@ -1825,6 +1849,32 @@ with processes on remote servers, via SSH2.") (home-page "https://github.com/net-ssh/net-ssh") (license license:expat))) +(define-public ruby-net-scp + (package + (name "ruby-net-scp") + ;; The 1.2.1 release would be incompatible with ruby-net-ssh >= 4. + (version "1.2.2.rc2") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/net-ssh/net-scp/archive/v" + version ".tar.gz")) + (sha256 + (base32 + "0xyf17mhgvyz54xjj9ria4wnq3x62bhmkfgzqv8jwiip2bplv1nk")))) + (build-system ruby-build-system) + (native-inputs + `(("bundler" ,bundler) + ("ruby-test-unit" ,ruby-test-unit) + ("ruby-mocha" ,ruby-mocha))) + (propagated-inputs + `(("ruby-net-ssh" ,ruby-net-ssh))) + (synopsis "Pure-Ruby SCP client library") + (description "@code{Net::SCP} is a pure-Ruby implementation of the SCP +client protocol.") + (home-page "https://github.com/net-ssh/net-scp") + (license license:expat))) + (define-public ruby-minitest (package (name "ruby-minitest") @@ -4982,3 +5032,28 @@ Markdown.") in standard Ruby syntax.") (home-page "https://github.com/ruby/rake") (license license:expat))) + +(define-public ruby-childprocess + (package + (name "ruby-childprocess") + (version "0.9.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "childprocess" version)) + (sha256 + (base32 + "0a61922kmvcxyj5l70fycapr87gz1dzzlkfpq85rfqk5vdh3d28p")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) + (native-inputs + `(("bundler" ,bundler) + ("ruby-rspec" ,ruby-rspec))) + (propagated-inputs + `(("ruby-ffi" ,ruby-ffi))) + (synopsis "Control external programs running in the background, in Ruby") + (description "@code{childprocess} provides a gem to control external +programs running in the background, in Ruby.") + (home-page "http://github.com/enkessler/childprocess") + (license license:expat))) diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm index 7fcc795b6f..28bffb44bb 100644 --- a/gnu/packages/rust.scm +++ b/gnu/packages/rust.scm @@ -157,16 +157,17 @@ in turn be used to build the final Rust.") (license license:asl2.0))) -(define (rust-source version hash) +(define* (rust-source version hash #:key (patches '())) (origin (method url-fetch) (uri (string-append "https://static.rust-lang.org/dist/" "rustc-" version "-src.tar.gz")) (sha256 (base32 hash)) (modules '((guix build utils))) - (snippet '(begin (delete-file-recursively "src/llvm") #t)))) + (snippet '(begin (delete-file-recursively "src/llvm") #t)) + (patches (map search-patch patches)))) -(define-public rust-1.19 +(define rust-1.19 (package (name "rust") (version "1.19.0") @@ -203,20 +204,29 @@ in turn be used to build the final Rust.") (("fn test_process_mask") "#[allow(unused_attributes)] #[ignore] fn test_process_mask")) - ;; Our ld-wrapper cannot process non-UTF8 bytes in LIBRARY_PATH. - ;; <https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00193.html> - (delete-file-recursively "src/test/run-make/linker-output-non-utf8") - (substitute* "src/librustc_back/dynamic_lib.rs" - ;; This test is known to fail on aarch64 and powerpc64le: - ;; https://github.com/rust-lang/rust/issues/45410 - (("fn test_loading_cosine") "#[ignore]\nfn test_loading_cosine")) - ;; nm doesn't recognize the file format because of the - ;; nonstandard sections used by the Rust compiler, but readelf - ;; ignores them. - (substitute* "src/test/run-make/atomic-lock-free/Makefile" - (("\tnm ") - "\treadelf -c ")) #t))) + (add-after 'patch-tests 'patch-aarch64-test + (lambda* _ + (substitute* "src/librustc_back/dynamic_lib.rs" + ;; This test is known to fail on aarch64 and powerpc64le: + ;; https://github.com/rust-lang/rust/issues/45410 + (("fn test_loading_cosine") "#[ignore]\nfn test_loading_cosine")) + #t)) + (add-after 'patch-tests 'use-readelf-for-tests + (lambda* _ + ;; nm doesn't recognize the file format because of the + ;; nonstandard sections used by the Rust compiler, but readelf + ;; ignores them. + (substitute* "src/test/run-make/atomic-lock-free/Makefile" + (("\tnm ") + "\treadelf -c ")) + #t)) + (add-after 'patch-tests 'remove-unsupported-tests + (lambda* _ + ;; Our ld-wrapper cannot process non-UTF8 bytes in LIBRARY_PATH. + ;; <https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00193.html> + (delete-file-recursively "src/test/run-make/linker-output-non-utf8") + #t)) (add-after 'patch-source-shebangs 'patch-cargo-checksums (lambda* _ (substitute* "src/Cargo.lock" @@ -279,13 +289,14 @@ safety and thread safety guarantees.") ;; Dual licensed. (license (list license:asl2.0 license:expat)))) -(define (rust-bootstrapped-package base-rust version checksum) - "Bootstrap rust VERSION with source checksum CHECKSUM using BASE-RUST." +(define* (rust-bootstrapped-package base-rust version checksum + #:key (patches '())) + "Bootstrap rust VERSION with source checksum CHECKSUM patched with PATCHES using BASE-RUST." (package (inherit base-rust) (version version) (source - (rust-source version checksum)) + (rust-source version checksum #:patches patches)) (native-inputs (alist-replace "cargo-bootstrap" (list base-rust "cargo") (alist-replace "rustc-bootstrap" (list base-rust) @@ -410,7 +421,12 @@ safety and thread safety guarantees.") (substitute* "src/tools/cargo/tests/test.rs" (("fn cargo_test_env") "#[ignore]\nfn cargo_test_env")) #t)) - (add-after 'patch-cargo-tests 'fix-mtime-bug + (add-after 'patch-cargo-tests 'ignore-glibc-2.27-incompatible-test + ;; https://github.com/rust-lang/rust/issues/47863 + (lambda _ + (substitute* "src/test/run-pass/out-of-stack.rs" + (("// ignore-android") "// ignore-test\n// ignore-android")))) + (add-after 'ignore-glibc-2.27-incompatible-test 'fix-mtime-bug (lambda* _ (substitute* "src/build_helper/lib.rs" ;; Bug in Rust code. @@ -452,10 +468,10 @@ localstatedir = \"var/lib\" default-linker = \"" gcc "/bin/gcc" "\" channel = \"stable\" rpath = true -# There is 2 failed codegen tests: -# codegen/mainsubprogram.rs and codegen/mainsubprogramstart.rs -# This tests required patched LLVM -codegen-tests = false +" ;; There are 2 failed codegen tests: + ;; codegen/mainsubprogram.rs and codegen/mainsubprogramstart.rs + ;; These tests require a patched LLVM +"codegen-tests = false [target." ,(nix-system->gnu-triplet-for-rust) "] llvm-config = \"" llvm "/bin/llvm-config" "\" cc = \"" gcc "/bin/gcc" "\" @@ -513,51 +529,120 @@ jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\" (substitute-keyword-arguments (package-arguments base-rust) ((#:phases phases) `(modify-phases ,phases - (replace 'patch-tests - (lambda* (#:key inputs #:allow-other-keys) - (let ((bash (assoc-ref inputs "bash"))) - (substitute* "src/libstd/process.rs" - ;; The newline is intentional. - ;; There's a line length "tidy" check in Rust which would - ;; fail otherwise. - (("\"/bin/sh\"") (string-append "\n\"" bash "/bin/sh\""))) - (substitute* "src/libstd/net/tcp.rs" - ;; There is no network in build environment - (("fn connect_timeout_unroutable") - "#[ignore]\nfn connect_timeout_unroutable")) - ;; <https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00222.html> - (substitute* "src/libstd/sys/unix/process/process_common.rs" - (("fn test_process_mask") "#[allow(unused_attributes)] - #[ignore] - fn test_process_mask")) - ;; Our ld-wrapper cannot process non-UTF8 bytes in LIBRARY_PATH. - ;; <https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00193.html> - (delete-file-recursively "src/test/run-make/linker-output-non-utf8") - (substitute* "src/librustc_metadata/dynamic_lib.rs" - ;; This test is known to fail on aarch64 and powerpc64le: - ;; https://github.com/rust-lang/rust/issues/45410 - (("fn test_loading_cosine") "#[ignore]\nfn test_loading_cosine")) - #t))) + (delete 'use-readelf-for-tests) + (replace 'patch-aarch64-test + (lambda* _ + (substitute* "src/librustc_metadata/dynamic_lib.rs" + ;; This test is known to fail on aarch64 and powerpc64le: + ;; https://github.com/rust-lang/rust/issues/45410 + (("fn test_loading_cosine") "#[ignore]\nfn test_loading_cosine")) + #t)) (delete 'fix-mtime-bug)))))))) -(define-public rust - (let ((base-rust rust-1.24)) +(define-public rust-1.25 + (let ((base-rust + (rust-bootstrapped-package rust-1.24 "1.25.0" + "0baxjr99311lvwdq0s38bipbnj72pn6fgbk6lcq7j555xq53mxpf"))) (package (inherit base-rust) - (version "1.25.0") - (source - (rust-source version - "0baxjr99311lvwdq0s38bipbnj72pn6fgbk6lcq7j555xq53mxpf")) - (native-inputs - (alist-replace "cargo-bootstrap" (list base-rust "cargo") - (alist-replace "rustc-bootstrap" (list base-rust) - (package-native-inputs base-rust)))) + (inputs + ;; Use LLVM 6.0 + (alist-replace "llvm" (list llvm) + (package-inputs base-rust))) (arguments (substitute-keyword-arguments (package-arguments base-rust) ((#:phases phases) `(modify-phases ,phases (add-after 'patch-cargo-tests 'patch-cargo-index-update - (lambda* _ + (lambda _ (substitute* "src/tools/cargo/tests/generate-lockfile.rs" ;; This test wants to update the crate index. - (("fn no_index_update") "#[ignore]\nfn no_index_update"))))))))))) + (("fn no_index_update") "#[ignore]\nfn no_index_update")) + #t)) + (add-after 'configure 'enable-codegen-tests + (lambda _ + (substitute* "config.toml" + (("codegen-tests = false") "")) + #t)) + (replace 'patch-aarch64-test + (lambda _ + (substitute* "src/librustc_metadata/dynamic_lib.rs" + ;; This test is known to fail on aarch64 and powerpc64le: + ;; https://github.com/rust-lang/rust/issues/45410 + (("fn test_loading_cosine") "#[ignore]\nfn test_loading_cosine")) + ;; This test fails on aarch64 with llvm@6.0: + ;; https://github.com/rust-lang/rust/issues/49807 + ;; other possible solution: + ;; https://github.com/rust-lang/rust/pull/47688 + (delete-file "src/test/debuginfo/by-value-self-argument-in-trait-impl.rs") + #t)) + (delete 'ignore-glibc-2.27-incompatible-test)))))))) + +(define-public rust-1.26 + (let ((base-rust + (rust-bootstrapped-package rust-1.25 "1.26.2" + "0047ais0fvmqvngqkdsxgrzhb0kljg8wy85b01kbbjc88hqcz7pv" + #:patches '("rust-coresimd-doctest.patch")))) + (package + (inherit base-rust) + (arguments + (substitute-keyword-arguments (package-arguments base-rust) + ((#:phases phases) + `(modify-phases ,phases + ;; binaryen was replaced with LLD project from LLVM + (delete 'dont-build-native) + (replace 'remove-unsupported-tests + (lambda* _ + ;; Our ld-wrapper cannot process non-UTF8 bytes in LIBRARY_PATH. + ;; <https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00193.html> + (delete-file-recursively "src/test/run-make-fulldeps/linker-output-non-utf8") + #t)) + (replace 'patch-cargo-tests + (lambda* _ + (substitute* "src/tools/cargo/tests/testsuite/build.rs" + (("/usr/bin/env") (which "env")) + ;; Guix llvm is compiled without asmjs-unknown-emscripten. + (("fn wasm32_final_outputs") "#[ignore]\nfn wasm32_final_outputs")) + (substitute* "src/tools/cargo/tests/testsuite/death.rs" + ;; This is stuck when built in container. + (("fn ctrl_c_kills_everyone") "#[ignore]\nfn ctrl_c_kills_everyone")) + ;; Prints test output in the wrong order when built on + ;; i686-linux. + (substitute* "src/tools/cargo/tests/testsuite/test.rs" + (("fn cargo_test_env") "#[ignore]\nfn cargo_test_env")) + #t)) + (add-after 'patch-cargo-tests 'disable-cargo-test-for-nightly-channel + (lambda* _ + ;; This test failed to work on "nightly" channel builds + ;; https://github.com/rust-lang/cargo/issues/5648 + (substitute* "src/tools/cargo/tests/testsuite/resolve.rs" + (("fn test_resolving_minimum_version_with_transitive_deps") + "#[ignore]\nfn test_resolving_minimum_version_with_transitive_deps")) + #t)) + (replace 'patch-cargo-index-update + (lambda* _ + (substitute* "src/tools/cargo/tests/testsuite/generate_lockfile.rs" + ;; This test wants to update the crate index. + (("fn no_index_update") "#[ignore]\nfn no_index_update")) + #t))))))))) + +(define-public rust + (let ((base-rust + (rust-bootstrapped-package rust-1.26 "1.27.0" + "089d7rhw55zpvnw71dj8vil6qrylvl4xjr4m8bywjj83d4zq1f9c" + #:patches + '("rust-coresimd-doctest.patch" + "rust-bootstrap-stage0-test.patch")))) + (package + (inherit base-rust) + (arguments + (substitute-keyword-arguments (package-arguments base-rust) + ((#:phases phases) + `(modify-phases ,phases + (add-before 'install 'mkdir-prefix-paths + (lambda* (#:key outputs #:allow-other-keys) + ;; As result of https://github.com/rust-lang/rust/issues/36989 + ;; `prefix' directory should exist before `install' call + (mkdir-p (assoc-ref outputs "out")) + (mkdir-p (assoc-ref outputs "cargo")) + #t))))))))) diff --git a/gnu/packages/samba.scm b/gnu/packages/samba.scm index 0ce46056f5..64017224a7 100644 --- a/gnu/packages/samba.scm +++ b/gnu/packages/samba.scm @@ -236,14 +236,14 @@ Desktops into Active Directory environments using the winbind daemon.") (define-public talloc (package (name "talloc") - (version "2.1.13") + (version "2.1.14") (source (origin (method url-fetch) (uri (string-append "https://www.samba.org/ftp/talloc/talloc-" version ".tar.gz")) (sha256 (base32 - "0iv09iv385x69gfzvassq6m3y0rd8ncylls95dm015xdy3drkww4")))) + "1kk76dyav41ip7ddbbf04yfydb4jvywzi2ps0z2vla56aqkn11di")))) (build-system gnu-build-system) (arguments '(#:phases @@ -306,14 +306,14 @@ destructors. It is the core memory allocator used in Samba.") (define-public tevent (package (name "tevent") - (version "0.9.36") + (version "0.9.37") (source (origin (method url-fetch) (uri (string-append "https://www.samba.org/ftp/tevent/tevent-" version ".tar.gz")) (sha256 (base32 - "0k1v4vnlzpf7h3p4khaw8a7damrc68g136bf2xzys08nzpinnaxx")))) + "1q77vbjic2bb79li2a54ffscnrnwwww55fbpry2kgh7acpnlb0qn")))) (build-system gnu-build-system) (arguments '(#:phases @@ -341,14 +341,14 @@ many event types, including timers, signals, and the classic file descriptor eve (define-public ldb (package (name "ldb") - (version "1.4.0") + (version "1.3.3") (source (origin (method url-fetch) (uri (string-append "https://www.samba.org/ftp/ldb/ldb-" version ".tar.gz")) (sha256 (base32 - "1d591ny4j4s409s2afjv4fn7inqlclr0zlyclw3619rkbaixlzm8")) + "14gsrm7dvyjpbpnc60z75j6fz2p187abm2h353lq95kx2bv70c1b")) (modules '((guix build utils))) (snippet '(begin @@ -361,10 +361,7 @@ many event types, including timers, signals, and the classic file descriptor eve #t)))) (build-system gnu-build-system) (arguments - '(;; LMDB is only supported on 64-bit systems, yet the test suite - ;; requires it. - #:tests? (assoc-ref %build-inputs "lmdb") - #:phases + '(#:phases (modify-phases %standard-phases (replace 'configure ;; ldb use a custom configuration script that runs waf. @@ -384,10 +381,7 @@ many event types, including timers, signals, and the classic file descriptor eve `(("talloc" ,talloc) ("tdb" ,tdb))) (inputs - `(,@(if (target-64bit?) - `(("lmdb" ,lmdb)) - '()) - ("popt" ,popt) + `(("popt" ,popt) ("tevent" ,tevent))) (synopsis "LDAP-like embedded database") (home-page "https://ldb.samba.org/") diff --git a/gnu/packages/scanner.scm b/gnu/packages/scanner.scm index 33a573d531..d030d8ade5 100644 --- a/gnu/packages/scanner.scm +++ b/gnu/packages/scanner.scm @@ -3,6 +3,7 @@ ;;; Copyright © 2015 Andy Wingo <wingo@igalia.com> ;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca> ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr> +;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il> ;;; ;;; This file is part of GNU Guix. ;;; @@ -102,7 +103,7 @@ package contains the library, but no drivers.") (inherit sane-backends-minimal) (name "sane-backends") (inputs - `(("hplip" ,(@ (gnu packages cups) hplip)) + `(("hplip" ,(@ (gnu packages cups) hplip-minimal)) ,@(package-inputs sane-backends-minimal))) (arguments (substitute-keyword-arguments (package-arguments sane-backends-minimal) diff --git a/gnu/packages/sdl.scm b/gnu/packages/sdl.scm index 3e21cde83c..55ce45ce78 100644 --- a/gnu/packages/sdl.scm +++ b/gnu/packages/sdl.scm @@ -132,7 +132,7 @@ joystick, and graphics hardware.") (define-public libmikmod (package (name "libmikmod") - (version "3.3.10") + (version "3.3.11.1") (source (origin (method url-fetch) (uri (list @@ -144,7 +144,7 @@ joystick, and graphics hardware.") version "/libmikmod-" version ".tar.gz"))) (sha256 (base32 - "0j7g4jpa2zgzw7x6s3rldypa7zlwjvn97rwx0sylx1iihhlzbcq0")))) + "06bdnhb0l81srdzg6gn2v2ydhhaazza7rshrcj3q8dpqr3gn97dd")))) (build-system gnu-build-system) (arguments ;; By default, libmikmod tries to dlopen libasound etc., which won't work @@ -484,7 +484,7 @@ sound and device input (keyboards, joysticks, mice, etc.).") (define-public guile-sdl2 (package (name "guile-sdl2") - (version "0.2.0") + (version "0.3.0") (source (origin (method url-fetch) (uri (string-append @@ -492,7 +492,7 @@ sound and device input (keyboards, joysticks, mice, etc.).") version ".tar.gz")) (sha256 (base32 - "0yq9lsl17cdvj77padvpk3jcw2g6g0pck9jrchc7n2767rrc012b")))) + "0iq6fw213qw292fxhrsg40al7hqyqyh4qpgl0x9rh08y949h2w97")))) (build-system gnu-build-system) (arguments '(#:make-flags '("GUILE_AUTO_COMPILE=0") @@ -504,16 +504,7 @@ sound and device input (keyboards, joysticks, mice, etc.).") (string-append "--with-libsdl2-ttf-prefix=" (assoc-ref %build-inputs "sdl2-ttf")) (string-append "--with-libsdl2-mixer-prefix=" - (assoc-ref %build-inputs "sdl2-mixer"))) - #:phases - (modify-phases %standard-phases - (add-after 'configure 'patch-makefile - (lambda _ - ;; Install compiled Guile files in the expected place. - (substitute* '("Makefile") - (("^godir = .*$") - "godir = $(moddir)\n")) - #t))))) + (assoc-ref %build-inputs "sdl2-mixer"))))) (native-inputs `(("guile" ,guile-2.2) ("pkg-config" ,pkg-config))) diff --git a/gnu/packages/search.scm b/gnu/packages/search.scm index e9e74817f2..386092b358 100644 --- a/gnu/packages/search.scm +++ b/gnu/packages/search.scm @@ -46,14 +46,15 @@ (define-public xapian (package (name "xapian") - (version "1.4.5") + (version "1.4.6") ;; Note: When updating Xapian, remember to update xapian-bindings below. (source (origin (method url-fetch) (uri (string-append "https://oligarchy.co.uk/xapian/" version "/xapian-core-" version ".tar.xz")) + (patches (search-patches "xapian-revert-5489fb2f8.patch")) (sha256 - (base32 "0axhqrj202hbll9mcx1qdm8gsqj19216w3z02gyjbycxvr9gkdc5")))) + (base32 "166qpfq7pvyrj2w2x07v31ypvqg6c2xyvds5sms9h4g2sg0z23hy")))) (build-system gnu-build-system) (inputs `(("zlib" ,zlib) ("util-linux" ,util-linux))) @@ -91,7 +92,7 @@ rich set of boolean query operators.") "/xapian-bindings-" version ".tar.xz")) (sha256 (base32 - "0cwx39764w24xd25w271had4w78lnw1dgz36yvlw1g3i19rqcy34")))) + "0z5ma66n742241ys037i3k66c6lvsywviqf33vqsf4jb7j03qsbi")))) (build-system gnu-build-system) (arguments `(#:configure-flags '("--with-python3") diff --git a/gnu/packages/statistics.scm b/gnu/packages/statistics.scm index 8be3ce1a80..d8c1e6df33 100644 --- a/gnu/packages/statistics.scm +++ b/gnu/packages/statistics.scm @@ -5642,6 +5642,26 @@ table made by the command @code{show256Colors()}. You can also set the colors to any arbitrary string. In this case, it is up to you to set valid values.") (license license:gpl3+))) +(define-public r-txtplot + (package + (name "r-txtplot") + (version "1.0-3") + (source + (origin + (method url-fetch) + (uri (cran-uri "txtplot" version)) + (sha256 + (base32 + "1949ab1bzvysdb79g8x1gaknj0ih3d6g63pv9512h5m5l3a6c31h")))) + (build-system r-build-system) + (home-page "https://cran.r-project.org/web/packages/txtplot/") + (synopsis "Text-based plotting") + (description "This package provides functions to produce rudimentary ASCII +graphics directly in the terminal window. This package provides a basic +plotting function (and equivalents of curve, density, acf and barplot) as well +as a boxplot function.") + (license license:lgpl3+))) + (define-public java-jdistlib (package (name "java-jdistlib") diff --git a/gnu/packages/stb.scm b/gnu/packages/stb.scm new file mode 100644 index 0000000000..df31bd0f86 --- /dev/null +++ b/gnu/packages/stb.scm @@ -0,0 +1,103 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.com> +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +(define-module (gnu packages stb) + #:use-module (guix packages) + #:use-module (guix git-download) + #:use-module (guix build-system gnu) + #:use-module (guix build-system trivial) + #:use-module ((guix licenses) #:select (expat public-domain))) + +(define stb + ;; stb is a collection of libraries developed within the same repository. + ;; When updating this, remember to change versions below as appropriate. + (let ((commit "e6afb9cbae4064da8c3e69af3ff5c4629579c1d2") + (revision "0")) + (package + (name "stb") + (home-page "https://github.com/nothings/stb") + (version (git-version "0.0" revision commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url home-page) + (commit commit))) + (sha256 + (base32 + "079nsn9bnb8c0vfq26g5l53q6gzx19a5x9q2nb55mpcljxsgxnmf")) + (file-name (git-file-name name version)))) + (build-system gnu-build-system) + (arguments + `(#:modules ((ice-9 ftw) + (ice-9 regex) + (srfi srfi-26) + ,@%gnu-build-system-modules) + #:phases (modify-phases %standard-phases + (delete 'configure) + (delete 'build) + (replace 'check + (lambda _ + (invoke "make" "-C" "tests" "CC=gcc"))) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (files (make-regexp "\\.(c|h|md)$"))) + (for-each (lambda (file) + (install-file file out)) + (scandir "." (cut regexp-exec files <>))) + #t)))))) + (synopsis "Single file libraries for C/C++") + (description + "This package contains a variety of small independent libraries for +the C programming language.") + ;; The user can choose either license. + (license (list expat public-domain))))) + +(define (make-stb-header-package name version description) + (package + (inherit stb) + (name name) + (version version) + (source #f) + (inputs `(("stb" ,stb))) + (build-system trivial-build-system) + (arguments + `(#:modules ((guix build utils)) + #:builder (begin + (use-modules (guix build utils)) + (let ((stb (assoc-ref %build-inputs "stb")) + (lib (string-join (string-split ,name #\-) "_")) + (out (assoc-ref %outputs "out"))) + (install-file (string-append stb "/" lib ".h") + (string-append out "/include")) + #t)))) + (description description))) + +;; TODO: These descriptions are not translatable! They should be +;; converted to macros as outlined in <https://bugs.gnu.org/32155>. +(define-public stb-image + (make-stb-header-package + "stb-image" "2.19" + "stb-image is a small and self-contained library for image loading or +decoding from file or memory. A variety of formats are supported.")) + +(define-public stb-image-write + (make-stb-header-package + "stb-image-write" "1.09" + "stb-image-write is a small library for writing image files to the +C@tie{}@code{stdio} interface.")) diff --git a/gnu/packages/sync.scm b/gnu/packages/sync.scm index 6e57aaba1b..e0b0af3d96 100644 --- a/gnu/packages/sync.scm +++ b/gnu/packages/sync.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2015, 2016, 2017 Efraim Flashner <efraim@flashner.co.il> +;;; Copyright © 2015, 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net> ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2018 Ludovic Courtès <ludo@gnu.org> @@ -45,24 +45,22 @@ (define-public owncloud-client (package (name "owncloud-client") - (version "2.3.4") + (version "2.4.1") (source (origin (method url-fetch) (uri (string-append "https://download.owncloud.com/desktop/stable/" "owncloudclient-" version ".tar.xz")) (sha256 - (base32 "1fpi1mlp2b8sx2993b4mava5c6qw794dmlayih430299z1l9wh49")) + (base32 "08xayz0alvypwa1bjmw1rmh4m3sclld4yq7kcbf264983icawqj4")) (patches (search-patches "owncloud-disable-updatecheck.patch")) (modules '((guix build utils))) (snippet '(begin - ;; only allows bundled libcrashreporter-qt + ;; libcrashreporter-qt has its own bundled dependencies (delete-file-recursively "src/3rdparty/libcrashreporter-qt") - ;; we already package qtkeychain and sqlite - (delete-file-recursively "src/3rdparty/qtkeychain") (delete-file-recursively "src/3rdparty/sqlite3") - ;; qjson is packaged, qprogessindicator, qlockedfile, qtokenizer and + ;; qprogessindicator, qlockedfile, qtokenizer and ;; qtsingleapplication have not yet been packaged, but all are ;; explicitly used from the 3rdparty folder during build. ;; We can also remove the macgoodies folder @@ -72,20 +70,6 @@ (arguments `(#:phases (modify-phases %standard-phases - (add-after 'unpack 'change-rpath-dirs - (lambda _ - (substitute* '("src/libsync/CMakeLists.txt" - "csync/src/CMakeLists.txt") - ;; We store the libs in out/lib and not /usr/lib/appname, so we - ;; need the executable to point to the libraries in /lib and not - ;; in /lib/appname. - (("\\/\\$\\{APPLICATION_EXECUTABLE\\}") "")) - (substitute* '("src/cmd/CMakeLists.txt" - "src/crashreporter/CMakeLists.txt" - "src/gui/CMakeLists.txt") - ;; This has the same issue as the substitution above. - (("\\/\\$\\{APPLICATION_EXECUTABLE\\}\\\"") "\"")) - #t)) (add-after 'unpack 'delete-failing-tests ;; "Could not create autostart folder" (lambda _ @@ -93,18 +77,18 @@ (("owncloud_add_test\\(Utility \"\"\\)" test) (string-append "#" test))) #t))) - #:configure-flags '("-DUNIT_TESTING=ON"))) + #:configure-flags '("-DUNIT_TESTING=ON" + ;; build without qtwebkit, which causes the + ;; package to FTBFS while looking for QWebView. + "-DNO_SHIBBOLETH=1"))) (native-inputs `(("cmocka" ,cmocka) ("perl" ,perl) ("pkg-config" ,pkg-config) ("qtlinguist" ,qttools))) (inputs - `(("inotify-tools" ,inotify-tools) - ("openssl" ,openssl) - ("qtbase" ,qtbase) + `(("qtbase" ,qtbase) ("qtkeychain" ,qtkeychain) - ("qtwebkit" ,qtwebkit) ("sqlite" ,sqlite) ("zlib" ,zlib))) (home-page "https://owncloud.org") diff --git a/gnu/packages/syncthing.scm b/gnu/packages/syncthing.scm index 14e83b5861..58e3f02db8 100644 --- a/gnu/packages/syncthing.scm +++ b/gnu/packages/syncthing.scm @@ -24,12 +24,13 @@ #:use-module (guix download) #:use-module (guix git-download) #:use-module (guix licenses) + #:use-module (gnu packages) #:use-module (gnu packages golang)) (define-public syncthing (package (name "syncthing") - (version "0.14.48") + (version "0.14.49") (source (origin (method url-fetch) (uri (string-append "https://github.com/syncthing/syncthing" @@ -37,7 +38,7 @@ "/syncthing-source-v" version ".tar.gz")) (sha256 (base32 - "0bxkm5jlj6l4gai23bg0y31brr80r9qllh1rdg29pahjn0c2b4ml")) + "06mzzj5iwgqw3yva7azrsqs9zpl84srbamza4gm03grp7v9gf3sj")) (modules '((guix build utils))) ;; Delete bundled ("vendored") free software source code. (snippet '(begin @@ -128,7 +129,6 @@ ("go-github-com-golang-groupcache-lru" ,go-github-com-golang-groupcache-lru) ("go-github-com-jackpal-gateway" ,go-github-com-jackpal-gateway) - ("go-github-com-kardianos-osext" ,go-github-com-kardianos-osext) ("go-github-com-kballard-go-shellquote" ,go-github-com-kballard-go-shellquote) ("go-github-com-lib-pq" ,go-github-com-lib-pq) @@ -701,11 +701,11 @@ database in Go.") (license bsd-2)))) (define-public go-github-com-thejerf-suture - (let ((commit "87e298c9891673c9ae76e10c2c9be589127e5f49") + (let ((commit "3f1fb62fe0a3cc6429122d7dc45588a8b59c5bb6") (revision "0")) (package (name "go-github-com-thejerf-suture") - (version (git-version "2.0.1" revision commit)) + (version (git-version "2.0.3" revision commit)) (source (origin (method git-fetch) (uri (git-reference @@ -714,7 +714,7 @@ database in Go.") (file-name (git-file-name name version)) (sha256 (base32 - "0srw0g94z6jplvlsjqsr6wf7885alnbb6h4fhvbg2i7q1ia5ldy2")))) + "0mp7gz6bp6xhggkgmbl33vpmrq3a6n2dkgcxbkb7csnpv4r4d59k")))) (build-system go-build-system) (arguments `(#:import-path "github.com/thejerf/suture")) @@ -1086,8 +1086,8 @@ using sh's word-splitting rules.") (license expat)))) (define-public go-github-com-syncthing-notify - (let ((commit "b9ceffc925039c77cd9e0d38f248279ccc4399e2") - (revision "0")) + (let ((commit "cdf89c4039d13726e227d0a472053ea19de021b4") + (revision "1")) (package (name "go-github-com-syncthing-notify") (version (git-version "0.0.0" revision commit)) @@ -1099,7 +1099,7 @@ using sh's word-splitting rules.") (file-name (git-file-name name version)) (sha256 (base32 - "1scha9b2r35bvqzqx86sarzjxf72ywvj3g6n9pm3xq4i4xzpylxf")))) + "1ra1id9r06i4q8vhrrv1zpybhjxs3361rg35758dxglkyk4pzk6j")))) (build-system go-build-system) (arguments '(#:import-path "github.com/syncthing/notify")) diff --git a/gnu/packages/telephony.scm b/gnu/packages/telephony.scm index 246d85901c..2055034117 100644 --- a/gnu/packages/telephony.scm +++ b/gnu/packages/telephony.scm @@ -485,6 +485,8 @@ Mumble consists of two applications for separate usage: (uri (git-reference (url "https://github.com/LubosD/twinkle") (commit commit))) + (patches + (search-patches "twinkle-include-qregexpvalidator.patch")) (file-name (git-file-name name version)) (sha256 (base32 diff --git a/gnu/packages/textutils.scm b/gnu/packages/textutils.scm index 5dec41428b..355683df8a 100644 --- a/gnu/packages/textutils.scm +++ b/gnu/packages/textutils.scm @@ -338,7 +338,7 @@ as existing hashing techniques, with provably negligible risk of collisions.") (define-public oniguruma (package (name "oniguruma") - (version "5.9.6") + (version "6.8.2") (source (origin (method url-fetch) (uri (string-append "https://github.com/kkos/" @@ -346,7 +346,7 @@ as existing hashing techniques, with provably negligible risk of collisions.") "/onig-" version ".tar.gz")) (sha256 (base32 - "19s79vsclqn170mw0ajwv7j37qsbn4f1yjz3yavnhvva6c820r6m")))) + "00s9gjgb3srn5sbmx4x9bssn52mi04d868ghizssdhjlddgxmsmd")))) (build-system gnu-build-system) (home-page "https://github.com/kkos/oniguruma") (synopsis "Regular expression library") @@ -355,6 +355,20 @@ characteristic of this library is that different character encoding for every regular expression object can be specified.") (license license:bsd-2))) +;; PHP < 7.3.0 requires this old version. Remove once no longer needed. +(define-public oniguruma-5 + (package + (inherit oniguruma) + (version "5.9.6") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/kkos/" + "oniguruma/releases/download/v" version + "/onig-" version ".tar.gz")) + (sha256 + (base32 + "19s79vsclqn170mw0ajwv7j37qsbn4f1yjz3yavnhvva6c820r6m")))))) + (define-public antiword (package (name "antiword") diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm index e89dc85d18..bf464761e1 100644 --- a/gnu/packages/tls.scm +++ b/gnu/packages/tls.scm @@ -520,13 +520,13 @@ netcat implementation that supports TLS.") (package (name "python-acme") ;; Remember to update the hash of certbot when updating python-acme. - (version "0.25.1") + (version "0.26.1") (source (origin (method url-fetch) (uri (pypi-uri "acme" version)) (sha256 (base32 - "0d177dhy8a7472pz9v4blrlk02d8fp6s52li7z8v3dv97pvz7da7")))) + "1glhwqj6yyb11820lspgd0gl5dqdfljn43kcy4ar5caccpsbbrw6")))) (build-system python-build-system) (arguments `(#:phases @@ -577,7 +577,7 @@ netcat implementation that supports TLS.") (uri (pypi-uri name version)) (sha256 (base32 - "0kp56gwn1bnlrag9qidhm1i5ifdp5z6y1ravh3yimfrkc4cfa8sw")))) + "0rnayqhdabm0rljxh76blqd11h51dqnwlwvql0j6xwzpccym30s9")))) (build-system python-build-system) (arguments `(,@(substitute-keyword-arguments (package-arguments python-acme) @@ -824,7 +824,7 @@ then ported to the GNU / Linux environment.") (define-public mbedtls-apache (package (name "mbedtls-apache") - (version "2.7.4") + (version "2.7.5") (source (origin (method url-fetch) @@ -834,7 +834,7 @@ then ported to the GNU / Linux environment.") version "-apache.tgz")) (sha256 (base32 - "1x9qia3rd77brz6qiv46w3ham2q78shn2rsz1jbpgqq0jpa69q9l")))) + "0h4vks2z68bkwzg093mn0a7aqsva8rxr4m971n4bkasa17cjlc51")))) (build-system cmake-build-system) (arguments `(#:configure-flags diff --git a/gnu/packages/tor.scm b/gnu/packages/tor.scm index 054d1e4029..e897dff639 100644 --- a/gnu/packages/tor.scm +++ b/gnu/packages/tor.scm @@ -1,7 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org> -;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il> +;;; Copyright © 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2016, 2017 Nils Gillmann <ng0@n0.is> ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2017 Eric Bavier <bavier@member.fsf.org> @@ -47,14 +47,14 @@ (define-public tor (package (name "tor") - (version "0.3.3.7") + (version "0.3.3.9") (source (origin (method url-fetch) (uri (string-append "https://dist.torproject.org/tor-" version ".tar.gz")) (sha256 (base32 - "036ybfvldj7yfci9ipjki8smpzyxdg8c5r12bghc9yxdqh9basza")))) + "0vyf5z0dn5jghp2qjp076aq62lsz9g32qv9jiqf08skf096nnd45")))) (build-system gnu-build-system) (arguments `(#:configure-flags (list "--enable-gcc-hardening" diff --git a/gnu/packages/upnp.scm b/gnu/packages/upnp.scm index 475e1750a8..24b17111e9 100644 --- a/gnu/packages/upnp.scm +++ b/gnu/packages/upnp.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2014 Sree Harsha Totakura <sreeharsha@totakura.in> ;;; Copyright © 2015 Federico Beffa <beffa@fbengineering.ch> ;;; Copyright © 2016, 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr> +;;; Copyright © 2018 Theodoros Foradis <theodoros@foradis.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -22,7 +23,9 @@ #:use-module (gnu packages) #:use-module (gnu packages python) #:use-module (guix build-system gnu) + #:use-module (guix utils) #:use-module (guix download) + #:use-module (guix git-download) #:use-module (guix licenses) #:use-module (guix packages)) @@ -76,6 +79,49 @@ over IRC, instant messaging, network games, and most server software.") (license (x11-style "file://LICENSE" "See 'LICENSE' file in the distribution")))) +(define-public monero-miniupnpc + ;; This package is the bundled version of miniupnpc used with monero. + ;; Monero-project has been maintaining its own version of the package since + ;; release 0.12.2.0. It includes security fixes not included in upstream + ;; releases. + (let ((revision "0") + (commit "6a63f9954959119568fbc4af57d7b491b9428d87")) + (package + (inherit miniupnpc) + (name "miniupnpc-monero") + (version (string-append "2.1-monero-0.12.3.0-" revision "." + (string-take commit 7))) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/monero-project/miniupnp/") + (commit commit))) + (sha256 + (base32 + "0s67zcz978iapjlq30yy9dl8qda9xhrl3jdi5f99cnbglh5gy16a")) + (file-name (string-append name "-" version "-checkout")) + (modules '((guix build utils))) + (snippet + '(begin + ;; Delete miniupnp subprojects except for miniupnpc. + (for-each + delete-file-recursively + '("minissdpd" "miniupnpc-async" "miniupnpc-libevent" + "miniupnpd" )) + #t)))) + (arguments + (substitute-keyword-arguments (package-arguments miniupnpc) + ((#:phases phases) + `(modify-phases ,phases + (add-before 'build 'change-directory + (lambda _ + (chdir "miniupnpc") + #t)) + (add-after 'change-directory 'chmod-header-file + (lambda _ + (chmod "miniupnpc.h" #o644) + #t))))))))) + (define-public libupnp (package (name "libupnp") diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm index 2bd59ae95f..6cb3354204 100644 --- a/gnu/packages/version-control.scm +++ b/gnu/packages/version-control.scm @@ -419,7 +419,7 @@ everything from small to very large projects with speed and efficiency.") (define-public libgit2 (package (name "libgit2") - (version "0.26.4") + (version "0.26.5") (source (origin (method url-fetch) (uri (string-append "https://github.com/libgit2/libgit2/" @@ -427,7 +427,7 @@ everything from small to very large projects with speed and efficiency.") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "15ybzypyggx64ba7i0zxnnbvzh7z34fcrkwk2xj54kmv1dha4br9")) + "1adhq7pk9zdj85i5j4xzimq39qy6wpsi4h9fb8vc8jsncr8qmqjj")) (patches (search-patches "libgit2-mtime-0.patch")) ;; Remove bundled software. diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm index 21b676e7b5..3c28fb0787 100644 --- a/gnu/packages/video.scm +++ b/gnu/packages/video.scm @@ -26,6 +26,7 @@ ;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.com> ;;; Copyright © 2018 Pierre Neidhardt <ambrevar@gmail.com> ;;; Copyright © 2018 Leo Famulari <leo@famulari.name> +;;; Copyright © 2018 Brendan Tildesley <brendan.tildesley@openmailbox.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -396,7 +397,8 @@ and creating Matroska files from other media files (@code{mkvmerge}).") (sha256 (base32 "0qx8mavwdzdpkkby7n29i9av7zsnklavacwfz537mf62q2pzjnbf")) - (patches (search-patches "x265-fix-ppc64le-build.patch")) + (patches (search-patches "x265-fix-ppc64le-build.patch" + "x265-arm-asm-primitives.patch")) (modules '((guix build utils))) (snippet '(begin (delete-file-recursively "source/compat/getopt") @@ -612,14 +614,14 @@ standards (MPEG-2, MPEG-4 ASP/H.263, MPEG-4 AVC/H.264, and VC-1/VMW3).") (define-public ffmpeg (package (name "ffmpeg") - (version "4.0.1") + (version "4.0.2") (source (origin (method url-fetch) (uri (string-append "https://ffmpeg.org/releases/ffmpeg-" version ".tar.xz")) (sha256 (base32 - "1vn04n0n46zdxq14cma3w8ml2ckh5jxwlybsc4xmvcqdqq0mqpv0")))) + "15rgzcmdccy4flajs63gkz4n3k24wkkg50r13l1r83lrxg4hqp59")))) (build-system gnu-build-system) (inputs `(("fontconfig" ,fontconfig) @@ -788,26 +790,26 @@ audio/video codec library.") (define-public ffmpeg-3.4 (package (inherit ffmpeg) - (version "3.4.3") + (version "3.4.4") (source (origin (method url-fetch) (uri (string-append "https://ffmpeg.org/releases/ffmpeg-" version ".tar.xz")) (sha256 (base32 - "0p45s3h7mg7v0jm77bymw2617i08f086dlcdmaylnk7795yind3b")))))) + "1iizgnhjbhar9y1ykqlj1czqanlv24knkfq5vvfnppv5x00pcvrq")))))) (define-public ffmpeg-2.8 (package (inherit ffmpeg) - (version "2.8.14") + (version "2.8.15") (source (origin (method url-fetch) (uri (string-append "https://ffmpeg.org/releases/ffmpeg-" version ".tar.xz")) (sha256 (base32 - "05m1272r5qa2r0ym5vq4figdfnpvcys1fgb1026n5s6xdjd1s1pg")))) + "065xbvnfmxfbfrc14cavpqyd2slil99vcjksw4ndb7w8zdh0wp3v")))) (arguments (substitute-keyword-arguments (package-arguments ffmpeg) ((#:configure-flags flags) @@ -817,18 +819,48 @@ audio/video codec library.") flag)) ,flags)))))) +(define-public ffmpegthumbnailer + (package + (name "ffmpegthumbnailer") + (version "2.2.0") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/dirkvdb/" + name "/archive/" version ".tar.gz")) + (sha256 + (base32 + "13qs4iwd4l3iiim30s5051n80z0vgsnikym8vsn321cnm9algiwb")))) + (build-system cmake-build-system) + (native-inputs + `(("pkg-config" ,pkg-config))) + (inputs + `(("ffmpeg" ,ffmpeg) + ("libjpeg-turbo" ,libjpeg-turbo) + ("libpng" ,libpng) + ("gvfs" ,gvfs))) + (arguments + `(#:configure-flags (list "-DENABLE_GIO=ON" "-DENABLE_THUMBNAILER=ON"))) + (home-page "https://github.com/dirkvdb/ffmpegthumbnailer") + (synopsis "Create thumbnails from video files") + (description "FFmpegthumbnailer is a lightweight video thumbnailer that +can be used by file managers to create thumbnails for your video files. The +thumbnailer uses ffmpeg to decode frames from the video files, so supported +videoformats depend on the configuration flags of ffmpeg.") + (license license:gpl2+))) + (define-public vlc (package (name "vlc") - (version "3.0.3") + (version "3.0.3-1") (source (origin (method url-fetch) (uri (string-append "https://download.videolan.org/pub/videolan/vlc/" - version "/vlc-" version ".tar.xz")) + (car (string-split version #\-)) + "/vlc-" version ".tar.xz")) (sha256 (base32 - "0lavzly8l0ll1d9iris9cnirgcs77g48lxj14058dxqkvd5v1a4v")))) + "1p7qvdvg9w4lz8vckzhn6bswfkq3qw7fqkgvwjcskdgc266xx7dw")))) (build-system gnu-build-system) (native-inputs `(("flex" ,flex) @@ -998,7 +1030,7 @@ treaming protocols.") (inputs `(("alsa-lib" ,alsa-lib) ("cdparanoia" ,cdparanoia) - ("ffmpeg" ,ffmpeg) + ("ffmpeg" ,ffmpeg-3.4) ("fontconfig" ,fontconfig) ("freetype" ,freetype) ;; ("giflib" ,giflib) ; uses QuantizeBuffer, requires version >= 5 @@ -1075,7 +1107,7 @@ SVCD, DVD, 3ivx, DivX 3/4/5, WMV and H.264 movies.") (define-public mpv (package (name "mpv") - (version "0.28.2") + (version "0.29.0") (source (origin (method url-fetch) (uri (string-append @@ -1083,7 +1115,7 @@ SVCD, DVD, 3ivx, DivX 3/4/5, WMV and H.264 movies.") ".tar.gz")) (sha256 (base32 - "15fp4sa5glqhgidd54vs6knf9dp809wszzsqiqz5nyri4ph19nma")) + "06bk8836brzik1qmq8kycwg5n35r438sd2176k6msjg5rrwghakp")) (file-name (string-append name "-" version ".tar.gz")))) (build-system waf-build-system) (native-inputs @@ -1224,7 +1256,7 @@ access to mpv's powerful playback capabilities.") (define-public youtube-dl (package (name "youtube-dl") - (version "2018.06.19") + (version "2018.07.10") (source (origin (method url-fetch) (uri (string-append "https://yt-dl.org/downloads/" @@ -1232,7 +1264,7 @@ access to mpv's powerful playback capabilities.") version ".tar.gz")) (sha256 (base32 - "0ys2mc84r7mjpn7rykb57sn3ii1kp3divjdn2ivwqknj8jrzg3z6")))) + "1rigah941k2drzx5qz937lk68gw9jrizj5lgd9f9znp0bgi2d0xd")))) (build-system python-build-system) (arguments ;; The problem here is that the directory for the man page and completion @@ -2336,7 +2368,7 @@ supported players in addition to this package.") (inputs `(("bzip2" ,bzip2) ("dbus-glib" ,dbus-glib) - ("ffmpeg" ,ffmpeg) + ("ffmpeg" ,ffmpeg-3.4) ;compilation errors with ffmpeg-4 ("fontconfig" ,fontconfig) ("freetype" ,freetype) ("glib" ,glib) @@ -2410,15 +2442,16 @@ of modern, widely supported codecs.") (define-public openh264 (package (name "openh264") - (version "1.7.0") + (version "1.8.0") (source (origin (method url-fetch) (uri (string-append "https://github.com/cisco/" - name "/archive/v" version ".tar.gz")) + name "/releases/download/v" + version "/Source.Code.tar.gz.gz")) (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "0gv571bqkxk7ic64dmavs1q8nr7p59mcf4ibqp4lc070gn6w61ww")))) + "0niha3wnn1jsndvz9vfwy2wyql8mp9j6v75vjsipy0idwan5yzgf")))) (build-system gnu-build-system) (native-inputs `(("nasm" ,nasm) diff --git a/gnu/packages/web-browsers.scm b/gnu/packages/web-browsers.scm index e36677282a..56bfa6ab28 100644 --- a/gnu/packages/web-browsers.scm +++ b/gnu/packages/web-browsers.scm @@ -27,12 +27,16 @@ #:use-module (guix packages) #:use-module (gnu packages) #:use-module (gnu packages compression) + #:use-module (gnu packages databases) #:use-module (gnu packages documentation) #:use-module (gnu packages fltk) #:use-module (gnu packages fontutils) + #:use-module (gnu packages gtk) #:use-module (gnu packages gnupg) #:use-module (gnu packages libevent) #:use-module (gnu packages libidn) + #:use-module (gnu packages lua) + #:use-module (gnu packages gnome) #:use-module (gnu packages ncurses) #:use-module (gnu packages perl) #:use-module (gnu packages pkg-config) @@ -41,9 +45,11 @@ #:use-module (gnu packages qt) #:use-module (gnu packages image) #:use-module (gnu packages tls) + #:use-module (gnu packages webkit) #:use-module (gnu packages xorg) #:use-module (guix download) #:use-module (guix build-system gnu) + #:use-module (guix build-system glib-or-gtk) #:use-module (guix build-system python)) (define-public dillo @@ -128,6 +134,68 @@ features including, tables, builtin image display, bookmarks, SSL and more.") ;; linking of the program with openssl. (license license:gpl1+))) +(define-public luakit + (package + (name "luakit") + (version "2017.08.10") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/luakit/luakit/archive/" version + ".tar.gz")) + (sha256 + (base32 + "0dwxhnq90whakgdg21lzcf03n2g1c7hqgliwhav8av5na5mqpn93")) + (file-name (string-append name "-" version ".tar.gz")))) + (inputs + `(("lua-5.1", lua-5.1) + ("gtk+" ,gtk+) + ("gsettings-desktop-schemas", gsettings-desktop-schemas) + ("glib-networking", glib-networking) + ("lua5.1-filesystem", lua5.1-filesystem) + ("luajit", luajit) + ("webkitgtk", webkitgtk) + ("sqlite", sqlite))) + (native-inputs + `(("pkg-config", pkg-config))) + (build-system glib-or-gtk-build-system) + (arguments + '(#:make-flags + (let ((out (assoc-ref %outputs "out"))) + (list + "CC=gcc" + "LUA_BIN_NAME=lua" + "DEVELOPMENT_PATHS=0" + (string-append "PREFIX=" out) + (string-append "XDGPREFIX=" out "/etc/xdg"))) + #:phases + (modify-phases %standard-phases + (add-before 'build 'lfs-workaround + (lambda _ + (setenv "LUA_CPATH" + (string-append + (assoc-ref %build-inputs "lua5.1-filesystem") + "/lib/lua/5.1/?.so;;")) + #t)) + (delete 'configure) + (delete 'check) + (add-after 'install 'wrap + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((luakit (assoc-ref outputs "out")) + (lua5.1-filesystem (assoc-ref inputs "lua5.1-filesystem") ) + (gtk (assoc-ref inputs "gtk+")) + (gtk-share (string-append gtk "/share"))) + (wrap-program (string-append luakit "/bin/luakit") + `("LUA_CPATH" prefix + (,(string-append lua5.1-filesystem + "/lib/lua/5.1/?.so;;")))) + #t)))))) + (synopsis "Fast, lightweight, and simple browser based on WebKit") + (description "Luakit is a fast, lightweight, and simple to use +micro-browser framework extensible by Lua using the WebKit web content engine +and the GTK+ toolkit.") + (home-page "https://luakit.github.io/") + (license license:gpl3+))) + (define-public lynx (package (name "lynx") diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm index 1b08863908..b976d6ea08 100644 --- a/gnu/packages/web.scm +++ b/gnu/packages/web.scm @@ -10,7 +10,7 @@ ;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr> ;;; Copyright © 2016 Sou Bunnbu <iyzsong@gmail.com> ;;; Copyright © 2016 Jelle Licht <jlicht@fsfe.org> -;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il> +;;; Copyright © 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2016 Rene Saavedra <rennes@openmailbox.org> ;;; Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com> ;;; Copyright © 2016 Clément Lassieur <clement@lassieur.org> @@ -122,14 +122,14 @@ (define-public httpd (package (name "httpd") - (version "2.4.33") + (version "2.4.34") (source (origin (method url-fetch) (uri (string-append "mirror://apache/httpd/httpd-" version ".tar.bz2")) (sha256 (base32 - "01bghiq4pbgjbgd6gic0nb8bbk6mfpwx3gcsbf21f3dhb4c520ny")))) + "1w1q2smdgf6ln0x741lk5pv5r0gzrxj2iza1vslhifzy65bcjlzs")))) (build-system gnu-build-system) (native-inputs `(("pcre" ,pcre "bin"))) ;for 'pcre-config' (inputs `(("apr" ,apr) @@ -719,7 +719,14 @@ current version of any major web browser.") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "13nrpvw8f1wx0ga7svbzld7pgrv8l172nangpipnj7jaf0lysz5z")))) + "13nrpvw8f1wx0ga7svbzld7pgrv8l172nangpipnj7jaf0lysz5z")) + (modules '((guix build utils))) + (snippet + '(begin + ;; Remove code using the problematic JSON license (see + ;; <https://www.gnu.org/licenses/license-list.html#JSON>). + (delete-file-recursively "bin/jsonchecker") + #t)))) (build-system cmake-build-system) (arguments `(,@(if (string-prefix? "aarch64" (or (%current-target-system) @@ -752,6 +759,14 @@ style API.") (base32 "0nmcqpaiq4pv7dymyg3n3jsd57yhp5npxl26a1hzw3m3lmj37drz")))) (build-system cmake-build-system) + (arguments + '(#:phases + (modify-phases %standard-phases + (add-after 'patch-source-shebangs 'patch-tests + (lambda _ + (substitute* "test/parsing/run_tests.sh" + (("`which echo`") (which "echo"))) + #t))))) (home-page "https://lloyd.github.io/yajl/") (synopsis "C library for parsing JSON") (description @@ -5697,14 +5712,20 @@ encoder/decoder based on the draft-12 specification for UBJSON.") (define-public java-tomcat (package (name "java-tomcat") - (version "8.5.28") + (version "8.5.32") (source (origin (method url-fetch) (uri (string-append "mirror://apache/tomcat/tomcat-8/v" version "/src/apache-tomcat-" version "-src.tar.gz")) (sha256 (base32 - "0q2bc3sajrmcx3z3vhhwp78y47ryc2ky8ssbdmfk24zvqdb76hvl")))) + "1qjsr6zmkdciakya4jqz0ssnsk02qlmmd898c05rasfwcrpj0xi6")) + (modules '((guix build utils))) + ;; Delete bundled jars. + (snippet + '(begin + (for-each delete-file (find-files "." "\\.jar$")) + #t)))) (build-system ant-build-system) (inputs `(("java-eclipse-jdt-core" ,java-eclipse-jdt-core))) @@ -5726,6 +5747,14 @@ encoder/decoder based on the draft-12 specification for UBJSON.") (("depends=\"validate\"") "depends=\"build-prepare\"") ((",download-validate") "")) #t)) + (add-after 'unpack 'strip-timestamps + (lambda _ + (substitute* "build.xml" + (("<filter token=\"YEAR\" value=.*") + "<filter token=\"YEAR\" value=\"1970\"/>") + (("<filter token=\"VERSION_BUILT\" value=.*") + "<filter token=\"VERSION_BUILT\" value=\"Jan 1 1970 00:00:00 UTC\"/>")) + #t)) (add-after 'unpack 'generate-properties (lambda _ ;; This could have been passed to make-flags, but getcwd returns @@ -5923,7 +5952,7 @@ or embedded instantiation. This package provides utility classes.") #t))))) (inputs `(("slf4j" ,java-slf4j-api) - ("servlet" ,java-tomcat) + ("servlet" ,java-javaee-servletapi) ("util" ,java-eclipse-jetty-util))) (synopsis "Jetty :: IO Utility") (description "The Jetty Web Server provides an HTTP server and Servlet @@ -5966,7 +5995,7 @@ or embedded instantiation. This package provides IO-related utility classes.")) #t))))) (inputs `(("slf4j" ,java-slf4j-api) - ("servlet" ,java-tomcat) + ("servlet" ,java-javaee-servletapi) ("io" ,java-eclipse-jetty-io) ("util" ,java-eclipse-jetty-util))) (synopsis "Jetty :: Http Utility") @@ -6001,7 +6030,7 @@ or embedded instantiation. This package provides HTTP-related utility classes." #t))))) (inputs `(("slf4j" ,java-slf4j-api) - ("servlet" ,java-tomcat) + ("servlet" ,java-javaee-servletapi) ("util" ,java-eclipse-jetty-util))) (synopsis "Jetty :: JMX Management") (description "The Jetty Web Server provides an HTTP server and Servlet @@ -6082,7 +6111,7 @@ or embedded instantiation. This package provides the JMX management."))) #t))))) (inputs `(("slf4j" ,java-slf4j-api) - ("servlet" ,java-tomcat) + ("servlet" ,java-javaee-servletapi) ("http" ,java-eclipse-jetty-http) ("io" ,java-eclipse-jetty-io) ("jmx" ,java-eclipse-jetty-jmx) @@ -6278,7 +6307,7 @@ container."))) ("java-eclipse-jetty-servlet" ,java-eclipse-jetty-servlet) ("java-eclipse-jetty-security" ,java-eclipse-jetty-security) ("java-eclipse-jetty-xml" ,java-eclipse-jetty-xml) - ("java-tomcat" ,java-tomcat))) + ("java-javaee-servletapi" ,java-javaee-servletapi))) (native-inputs `(("java-eclipse-jetty-io" ,java-eclipse-jetty-io) ,@(package-native-inputs java-eclipse-jetty-util))))) diff --git a/gnu/packages/wine.scm b/gnu/packages/wine.scm index 91b37556a0..4562c817cd 100644 --- a/gnu/packages/wine.scm +++ b/gnu/packages/wine.scm @@ -223,7 +223,7 @@ integrate Windows applications into your desktop.") (define-public wine-staging-patchset-data (package (name "wine-staging-patchset-data") - (version "3.11") + (version "3.13") (source (origin (method url-fetch) @@ -232,7 +232,7 @@ integrate Windows applications into your desktop.") (file-name (string-append name "-" version ".zip")) (sha256 (base32 - "1sd9chv919y0wfqcshasl82899isvq9rik4h8d44g2cf4m9zzhvi")))) + "0h27h4z4m2m77chp3alkv6fagppjhh9ys39d3n21j0yfjknyhdd8")))) (build-system trivial-build-system) (native-inputs `(("bash" ,bash) @@ -279,7 +279,7 @@ integrate Windows applications into your desktop.") (file-name (string-append name "-" version ".tar.xz")) (sha256 (base32 - "0zlhkz6aybkr9jg8za9x56fp92q10df0abadn9bsa8ryparr5d15")))) + "1m5v854r5wgw68b97j6wim1a8692x5sih25c0xp1yb13a94dg187")))) (inputs `(("autoconf" ,autoconf) ; for autoreconf ("gtk+" ,gtk+) ("libva" ,libva) diff --git a/gnu/packages/xml.scm b/gnu/packages/xml.scm index 9112d0273f..1bf99f2fe5 100644 --- a/gnu/packages/xml.scm +++ b/gnu/packages/xml.scm @@ -200,15 +200,6 @@ project (but it is usable outside of the Gnome platform).") based on libxml for XML parsing, tree manipulation and XPath support.") (license license:x11))) -(define libxslt/fixed - (package - (inherit libxslt) - (source (origin - (inherit (package-source libxslt)) - (patches (search-patches "libxslt-CVE-2016-4738.patch" - "libxslt-CVE-2017-5029.patch" - "libxslt-generated-ids.patch")))))) - (define-public perl-graph-readwrite (package (name "perl-graph-readwrite") diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm index c0d22f05ae..57cea3fee5 100644 --- a/gnu/packages/xorg.scm +++ b/gnu/packages/xorg.scm @@ -2447,7 +2447,7 @@ including most mice, keyboards, tablets and touchscreens.") (define-public xf86-input-libinput (package (name "xf86-input-libinput") - (version "0.27.1") + (version "0.28.0") (source (origin (method url-fetch) (uri (string-append @@ -2455,7 +2455,7 @@ including most mice, keyboards, tablets and touchscreens.") name "-" version ".tar.bz2")) (sha256 (base32 - "1riflw6dc8fp5d74i7zfgsss0zz3z3lsj6zn2lzjm5kgmp2qvbfl")))) + "189h8vl0005yizwrs4d0sng6j8lwkd3xi1zwqg8qavn2bw34v691")))) (build-system gnu-build-system) (arguments '(#:configure-flags @@ -3177,46 +3177,28 @@ This driver is intended for the spice qxl virtio device.") (license license:x11))) (define-public xf86-video-r128 - ;; We need a newer version than 6.10.2 to build against the latest xorg-server. - ;; Remove this binding and the bootstrap inputs when >6.10.2 is released. - (let ((commit "c4c878d2ccb75fa75afe46e0e50ee9975c5c57fc") - (revision "0")) - (package - (name "xf86-video-r128") - (version (git-version "6.10.2" revision commit)) - (source (origin - (method git-fetch) - (uri (git-reference - (url (string-append "https://anongit.freedesktop.org/git/xorg" - "/driver/" name ".git")) - (commit commit))) - (file-name (git-file-name name version)) - (sha256 - (base32 - "01pff30zz4zxjhw28h8bn9x2kq7c6iswgn19b72wnfgl0arxb63j")))) - (build-system gnu-build-system) - (arguments - `(#:phases (modify-phases %standard-phases - (add-before 'bootstrap 'prevent-configure - (lambda _ - ;; Prevent autogen from calling "./configure" as part of - ;; the bootstrap step, which fails due to wrong shebang. - (setenv "NOCONFIGURE" "1") - #t))))) - (inputs `(("mesa" ,mesa) - ("xorgproto" ,xorgproto) - ("xorg-server" ,xorg-server))) - (native-inputs - `(("pkg-config" ,pkg-config) - ("autoconf" ,autoconf) - ("automake" ,automake) - ("libtool" ,libtool))) - (home-page "https://www.x.org/wiki/") - (synopsis "ATI Rage 128 video driver for X server") - (description - "xf86-video-r128 is a video driver for the Xorg X server. + (package + (name "xf86-video-r128") + (version "6.11.0") + (source (origin + (method url-fetch) + (uri (string-append "mirror://xorg/individual/driver/" + name "-" version ".tar.bz2")) + (sha256 + (base32 + "0snvwmrh8dqyyaq7ggicym6yrsg4brygkx9156r0m095m7fp3rav")))) + (build-system gnu-build-system) + (inputs `(("mesa" ,mesa) + ("xorgproto" ,xorgproto) + ("xorg-server" ,xorg-server))) + (native-inputs + `(("pkg-config" ,pkg-config))) + (home-page "https://www.x.org/wiki/") + (synopsis "ATI Rage 128 video driver for X server") + (description + "xf86-video-r128 is a video driver for the Xorg X server. This driver is intended for ATI Rage 128 based cards.") - (license license:x11)))) + (license license:x11))) (define-public xf86-video-savage (package @@ -5111,7 +5093,8 @@ over Xlib, including: (sha256 (base32 "0mm70y058r8s9y9jiv7q2myv0ycnaw3iqzm7d274410s0ik38w7q")) - (file-name "xorg-server-use-intel-only-on-pre-gen4.diff")))))) + (file-name "xorg-server-use-intel-only-on-pre-gen4.diff")) + (search-patch "xorg-server-rotate-fb.patch"))))) (build-system gnu-build-system) (propagated-inputs `(("libpciaccess" ,libpciaccess) @@ -5837,7 +5820,7 @@ programs that cannot use the window system directly.") ("xcb-proto" ,xcb-proto) ("xcb-util" ,xcb-util) ("xcb-util-wm" ,xcb-util-wm))) - (home-page "http://search.cpan.org/dist/X11-XCB") + (home-page "https://metacpan.org/release/X11-XCB") (synopsis "Perl bindings for libxcb") (description "These bindings wrap @code{libxcb} (a C library to speak with X11, @@ -5864,7 +5847,7 @@ interface to its methods (using @code{Mouse}).") "X11::Protocol is a client-side interface to the X11 Protocol, allowing perl programs to display windows and graphics on X11 servers.") (home-page - (string-append "http://search.cpan.org/~smccam/X11-Protocol-" version)) + (string-append "https://metacpan.org/release/SMCCAM/X11-Protocol-" version)) ;; From the package README: "you can redistribute and/or modify it under ;; the same terms as Perl itself. (As an exception, the file ;; Keysyms.pm,which is derived from a file in the standard X11 @@ -5892,7 +5875,7 @@ perl programs to display windows and graphics on X11 servers.") ("perl-module-util" ,perl-module-util))) (propagated-inputs `(("perl-x11-protocol" ,perl-x11-protocol))) - (home-page "http://search.cpan.org/dist/X11-Protocol-Other/") + (home-page "https://metacpan.org/release/X11-Protocol-Other") (synopsis "Miscellaneous helpers for @code{X11::Protocol} connections") (description "@code{X11::Protocol::Other} contains window manager related functions for diff --git a/gnu/services/cuirass.scm b/gnu/services/cuirass.scm index 4664a36dcf..9c62080629 100644 --- a/gnu/services/cuirass.scm +++ b/gnu/services/cuirass.scm @@ -4,6 +4,7 @@ ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com> ;;; Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org> ;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net> +;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -72,9 +73,7 @@ (one-shot? cuirass-configuration-one-shot? ;boolean (default #f)) (fallback? cuirass-configuration-fallback? ;boolean - (default #f)) - (load-path cuirass-configuration-load-path - (default '()))) + (default #f))) (define (cuirass-shepherd-service config) "Return a <shepherd-service> for the Cuirass service with CONFIG." @@ -92,8 +91,7 @@ (specs (cuirass-configuration-specifications config)) (use-substitutes? (cuirass-configuration-use-substitutes? config)) (one-shot? (cuirass-configuration-one-shot? config)) - (fallback? (cuirass-configuration-fallback? config)) - (load-path (cuirass-configuration-load-path config))) + (fallback? (cuirass-configuration-fallback? config))) (list (shepherd-service (documentation "Run Cuirass.") (provision '(cuirass)) @@ -109,9 +107,7 @@ "--interval" #$(number->string interval) #$@(if use-substitutes? '("--use-substitutes") '()) #$@(if one-shot? '("--one-shot") '()) - #$@(if fallback? '("--fallback") '()) - #$@(if (null? load-path) '() - `("--load-path" ,(string-join load-path ":")))) + #$@(if fallback? '("--fallback") '())) #:environment-variables (list "GIT_SSL_CAINFO=/etc/ssl/certs/ca-certificates.crt" diff --git a/gnu/services/herd.scm b/gnu/services/herd.scm index d882c232cf..8c96b70731 100644 --- a/gnu/services/herd.scm +++ b/gnu/services/herd.scm @@ -45,6 +45,7 @@ live-service-requirement live-service-running + with-shepherd-action current-services unload-services unload-service @@ -168,6 +169,8 @@ return #f." (define-syntax-rule (with-shepherd-action service (action args ...) result body ...) + "Invoke ACTION on SERVICE with the given ARGS, and evaluate BODY with RESULT +bound to the action's result." (invoke-action service action (list args ...) (lambda (result) body ...))) diff --git a/gnu/services/mcron.scm b/gnu/services/mcron.scm index 5bee02a587..5757bf8cf6 100644 --- a/gnu/services/mcron.scm +++ b/gnu/services/mcron.scm @@ -60,29 +60,71 @@ (define (job-file job) (scheme-file "mcron-job" job)) +(define (shepherd-schedule-action mcron files) + "Return a Shepherd action that runs MCRON with '--schedule' for the given +files." + (shepherd-action + (name 'schedule) + (documentation + "Display jobs that are going to be scheduled.") + (procedure + #~(lambda* (_ #:optional (n "5")) + ;; XXX: This is a global side effect. + (setenv "GUILE_AUTO_COMPILE" "0") + + ;; Run 'mcron' in a pipe so we can explicitly redirect its output to + ;; 'current-output-port', which at this stage is bound to the client + ;; connection. + (let ((pipe (open-pipe* OPEN_READ + #$(file-append mcron "/bin/mcron") + (string-append "--schedule=" n) + #$@files))) + (let loop () + (match (read-line pipe 'concat) + ((? eof-object?) + (catch 'system-error + (lambda () + (zero? (close-pipe pipe))) + (lambda args + ;; There's with race between the SIGCHLD handler, which + ;; could call 'waitpid' before 'close-pipe' above does. If + ;; we get ECHILD, that means we lost the race, but that's + ;; fine. + (or (= ECHILD (system-error-errno args)) + (apply throw args))))) + (line + (display line) + (loop))))))))) + (define mcron-shepherd-services (match-lambda (($ <mcron-configuration> mcron ()) ;nothing to do! '()) (($ <mcron-configuration> mcron jobs) - (list (shepherd-service - (provision '(mcron)) - (requirement '(user-processes)) - (modules `((srfi srfi-1) - (srfi srfi-26) - ,@%default-modules)) - (start #~(make-forkexec-constructor - (list (string-append #$mcron "/bin/mcron") - #$@(map job-file jobs)) + (let ((files (map job-file jobs))) + (list (shepherd-service + (provision '(mcron)) + (requirement '(user-processes)) + (modules `((srfi srfi-1) + (srfi srfi-26) + (ice-9 popen) ;for the 'schedule' action + (ice-9 rdelim) + (ice-9 match) + ,@%default-modules)) + (start #~(make-forkexec-constructor + (list (string-append #$mcron "/bin/mcron") #$@files) + + ;; Disable auto-compilation of the job files and set a + ;; sane value for 'PATH'. + #:environment-variables + (cons* "GUILE_AUTO_COMPILE=0" + "PATH=/run/current-system/profile/bin" + (remove (cut string-prefix? "PATH=" <>) + (environ))))) + (stop #~(make-kill-destructor)) - ;; Disable auto-compilation of the job files and set a - ;; sane value for 'PATH'. - #:environment-variables - (cons* "GUILE_AUTO_COMPILE=0" - "PATH=/run/current-system/profile/bin" - (remove (cut string-prefix? "PATH=" <>) - (environ))))) - (stop #~(make-kill-destructor))))))) + (actions + (list (shepherd-schedule-action mcron files))))))))) (define mcron-service-type (service-type (name 'mcron) diff --git a/gnu/services/monitoring.scm b/gnu/services/monitoring.scm index 49a65db4b5..aa3b63a0e4 100644 --- a/gnu/services/monitoring.scm +++ b/gnu/services/monitoring.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2018 Sou Bunnbu <iyzsong@member.fsf.org> +;;; Copyright © 2018 Gábor Boskovits <boskovits@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -26,7 +27,9 @@ #:use-module (guix records) #:use-module (ice-9 match) #:export (darkstat-configuration - darkstat-service-type)) + prometheus-node-exporter-configuration + darkstat-service-type + prometheus-node-exporter-service-type)) ;;; @@ -89,3 +92,36 @@ HTTP.") (const %darkstat-accounts)) (service-extension shepherd-root-service-type (compose list darkstat-shepherd-service)))))) + +(define-record-type* <prometheus-node-exporter-configuration> + prometheus-node-exporter-configuration + make-prometheus-node-exporter-configuration + prometheus-node-exporter-configuration? + (package prometheus-node-exporter-configuration-package + (default go-github-com-prometheus-node-exporter)) + (web-listen-address prometheus-node-exporter-web-listen-address + (default ":9100"))) + +(define prometheus-node-exporter-shepherd-service + (match-lambda + (( $ <prometheus-node-exporter-configuration> + package web-listen-address) + (shepherd-service + (documentation "Prometheus node exporter.") + (provision '(prometheus-node-exporter)) + (requirement '(networking)) + (start #~(make-forkexec-constructor + (list #$(file-append package "/bin/node_exporter") + "--web.listen-address" #$web-listen-address))) + (stop #~(make-kill-destructor)))))) + +(define prometheus-node-exporter-service-type + (service-type + (name 'prometheus-node-exporter) + (description + "Run @command{node_exporter} to serve hardware and OS metrics to +prometheus.") + (extensions + (list (service-extension + shepherd-root-service-type + (compose list prometheus-node-exporter-shepherd-service)))))) diff --git a/gnu/services/shepherd.scm b/gnu/services/shepherd.scm index 6ca53faa3d..4cd2249841 100644 --- a/gnu/services/shepherd.scm +++ b/gnu/services/shepherd.scm @@ -49,6 +49,12 @@ shepherd-service-auto-start? shepherd-service-modules + shepherd-action + shepherd-action? + shepherd-action-name + shepherd-action-documentation + shepherd-action-procedure + %default-modules shepherd-service-file @@ -146,11 +152,20 @@ DEFAULT is given, use it as the service's default value." (start shepherd-service-start) ;g-expression (procedure) (stop shepherd-service-stop ;g-expression (procedure) (default #~(const #f))) + (actions shepherd-service-actions ;list of <shepherd-action> + (default '())) (auto-start? shepherd-service-auto-start? ;Boolean (default #t)) (modules shepherd-service-modules ;list of module names (default %default-modules))) +(define-record-type* <shepherd-action> + shepherd-action make-shepherd-action + shepherd-action? + (name shepherd-action-name) ;symbol + (procedure shepherd-action-procedure) ;gexp + (documentation shepherd-action-documentation)) ;string + (define (shepherd-service-canonical-name service) "Return the 'canonical name' of SERVICE." (first (shepherd-service-provision service))) @@ -223,7 +238,13 @@ stored." #:requires '#$(shepherd-service-requirement service) #:respawn? '#$(shepherd-service-respawn? service) #:start #$(shepherd-service-start service) - #:stop #$(shepherd-service-stop service)))))) + #:stop #$(shepherd-service-stop service) + #:actions + (make-actions + #$@(map (match-lambda + (($ <shepherd-action> name proc doc) + #~(#$name #$doc #$proc))) + (shepherd-service-actions service)))))))) (define (shepherd-configuration-file services) "Return the shepherd configuration file for SERVICES." diff --git a/gnu/services/ssh.scm b/gnu/services/ssh.scm index f1d2be3f6b..f158fdf01f 100644 --- a/gnu/services/ssh.scm +++ b/gnu/services/ssh.scm @@ -455,7 +455,7 @@ of user-name/file-like tuples." (list (shepherd-service (documentation "OpenSSH server.") - (requirement '(syslogd)) + (requirement '(syslogd loopback)) (provision '(ssh-daemon)) (start #~(make-forkexec-constructor #$openssh-command #:pid-file #$pid-file)) diff --git a/gnu/services/virtualization.scm b/gnu/services/virtualization.scm index bf71e7f26a..705ed84d06 100644 --- a/gnu/services/virtualization.scm +++ b/gnu/services/virtualization.scm @@ -37,6 +37,7 @@ #:export (libvirt-configuration libvirt-service-type + virtlog-configuration virtlog-service-type %qemu-platforms diff --git a/gnu/system/install.scm b/gnu/system/install.scm index 6a3ae1947b..95661dc973 100644 --- a/gnu/system/install.scm +++ b/gnu/system/install.scm @@ -298,6 +298,13 @@ You have been warned. Thanks for being so brave.\x1b[0m `(("/bin/sh" ,(file-append (canonical-package bash) "/bin/sh")))) + ;; Loopback device, needed by OpenSSH notably. + (service static-networking-service-type + (list (static-networking (interface "lo") + (ip "127.0.0.1") + (requirement '()) + (provision '(loopback))))) + ;; Keep a reference to BARE-BONES-OS to make sure it can be ;; installed without downloading/building anything. Also keep the ;; things needed by 'profile-derivation' to minimize the amount of diff --git a/gnu/system/shadow.scm b/gnu/system/shadow.scm index b4db69f068..f800c3b546 100644 --- a/gnu/system/shadow.scm +++ b/gnu/system/shadow.scm @@ -210,7 +210,17 @@ include /run/current-system/profile/share/nano/*.nanorc\n")) ((module-ref module 'activate-readline)))) (else (display \"Consider installing the 'guile-readline' package for -convenient interactive line editing and input history.\\n\\n\")))\n")) +convenient interactive line editing and input history.\\n\\n\"))) + + (unless (getenv \"INSIDE_EMACS\") + (cond ((false-if-exception (resolve-interface '(ice-9 colorized))) + => + (lambda (module) + ;; Enable completion and input history at the REPL. + ((module-ref module 'activate-colorized)))) + (else + (display \"Consider installing the 'guile-colorized' package +for a colorful Guile experience.\\n\\n\"))))\n")) (".guile-wm" ,guile-wm) (".gdbinit" ,gdbinit)))) diff --git a/gnu/tests/base.scm b/gnu/tests/base.scm index 0efb4a6e55..f27064af85 100644 --- a/gnu/tests/base.scm +++ b/gnu/tests/base.scm @@ -632,6 +632,13 @@ non-ASCII names from /tmp.") (wait-for-file "/root/witness-touch" marionette #:read '(@ (ice-9 rdelim) read-string))) + ;; Make sure the 'schedule' action is accepted. + (test-equal "schedule action" + '(#t) ;one value, #t + (marionette-eval '(with-shepherd-action 'mcron ('schedule) result + result) + marionette)) + (test-end) (exit (= (test-runner-fail-count (test-runner-current)) 0))))) diff --git a/gnu/tests/monitoring.scm b/gnu/tests/monitoring.scm new file mode 100644 index 0000000000..67899987ce --- /dev/null +++ b/gnu/tests/monitoring.scm @@ -0,0 +1,97 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2018 Gábor Boskovits <boskovits@gmail.com> +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +(define-module (gnu tests monitoring) + #:use-module (gnu services) + #:use-module (gnu services monitoring) + #:use-module (gnu services networking) + #:use-module (gnu system vm) + #:use-module (gnu tests) + #:use-module (guix gexp) + #:export (%test-prometheus-node-exporter)) + + +;;; +;;; Prometheus Node Exporter +;;; + +(define* (run-prometheus-node-exporter-server-test name test-os) + "Run tests in %PROMETHEUS-NODE-EXPORTER-OS, which has prometheus-node-exporter running." + (define os + (marionette-operating-system + test-os + #:imported-modules '((gnu services herd)))) + + (define vm + (virtual-machine + (operating-system os) + (port-forwardings '((8080 . 9100))))) + + (define test + (with-imported-modules '((gnu build marionette)) + #~(begin + (use-modules (srfi srfi-11) + (srfi srfi-64) + (gnu build marionette) + (web client) + (web response)) + + (define marionette + (make-marionette (list #$vm))) + + (mkdir #$output) + (chdir #$output) + + (test-begin #$name) + + (test-assert "prometheus-node-exporter running" + (marionette-eval + '(begin + (use-modules (gnu services herd)) + (match (start-service 'prometheus-node-exporter) + (#f #f) + (('service response-parts ...) + (match (assq-ref response-parts 'running) + ((pid) (number? pid)))))) + marionette)) + + (test-equal "http-get" + 200 + (begin + (wait-for-tcp-port 9100 marionette) + (let-values (((response text) + (http-get "http://localhost:8080"))) + (response-code response)))) + + (test-end) + (exit (= (test-runner-fail-count (test-runner-current)) 0))))) + + (gexp->derivation (string-append name "-test") test)) + +(define %prometheus-node-exporter-os + (simple-operating-system + (dhcp-client-service) + (service prometheus-node-exporter-service-type + (prometheus-node-exporter-configuration)))) + +(define %test-prometheus-node-exporter + (system-test + (name "prometheus-node-exporter") + (description "Connect to a running prometheus-node-exporter server.") + (value (run-prometheus-node-exporter-server-test + name %prometheus-node-exporter-os)))) diff --git a/guix/build-system/guile.scm b/guix/build-system/guile.scm new file mode 100644 index 0000000000..77a5f00b01 --- /dev/null +++ b/guix/build-system/guile.scm @@ -0,0 +1,202 @@ +;;; 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 build-system guile) + #:use-module (guix store) + #:use-module (guix utils) + #:use-module (guix packages) + #:use-module (guix derivations) + #:use-module (guix search-paths) + #:use-module (guix build-system) + #:use-module (guix build-system gnu) + #:use-module (ice-9 match) + #:use-module (srfi srfi-26) + #:export (%guile-build-system-modules + guile-build-system)) + +(define %guile-build-system-modules + ;; Build-side modules imported by default. + `((guix build guile-build-system) + ,@%gnu-build-system-modules)) + +(define* (lower name + #:key source inputs native-inputs outputs system target + #:allow-other-keys + #:rest arguments) + "Return a bag for NAME." + + ;; Note: There's no #:guile argument (unlike, for instance, + ;; 'ocaml-build-system' which has #:ocaml.) This is so we can keep + ;; procedures like 'package-for-guile-2.0' unchanged and simple. + + (define private-keywords + '(#:target #:inputs #:native-inputs)) + + (bag + (name name) + (system system) (target target) + (host-inputs `( + ,@inputs)) + (build-inputs `(,@(if source + `(("source" ,source)) + '()) + ,@native-inputs + ,@(map (cute assoc <> (standard-packages)) + '("tar" "gzip" "bzip2" "xz" "locales")))) + (outputs outputs) + (build (if target guile-cross-build guile-build)) + (arguments (strip-keyword-arguments private-keywords arguments)))) + +(define %compile-flags + ;; Flags passed to 'guild compile' by default. We choose a common + ;; denominator between Guile 2.0 and 2.2. + ''("-Wunbound-variable" "-Warity-mismatch" "-Wformat")) + +(define* (guile-build store name inputs + #:key source + (guile #f) + (phases '%standard-phases) + (outputs '("out")) + (search-paths '()) + (system (%current-system)) + (source-directory ".") + (compile-flags %compile-flags) + (imported-modules %guile-build-system-modules) + (modules '((guix build guile-build-system) + (guix build utils)))) + "Build SOURCE using Guile taken from the native inputs, and with INPUTS." + (define builder + `(begin + (use-modules ,@modules) + (guile-build #:name ,name + #:source ,(match (assoc-ref inputs "source") + (((? derivation? source)) + (derivation->output-path source)) + ((source) + source) + (source + source)) + #:source-directory ,source-directory + #:compile-flags ,compile-flags + #:phases ,phases + #:system ,system + #:outputs %outputs + #:search-paths ',(map search-path-specification->sexp + search-paths) + #:inputs %build-inputs))) + + (define guile-for-build + (match guile + ((? package?) + (package-derivation store guile system #:graft? #f)) + (#f ; the default + (let* ((distro (resolve-interface '(gnu packages commencement))) + (guile (module-ref distro 'guile-final))) + (package-derivation store guile system #:graft? #f))))) + + (build-expression->derivation store name builder + #:inputs inputs + #:system system + #:modules imported-modules + #:outputs outputs + #:guile-for-build guile-for-build)) + +(define* (guile-cross-build store name + #:key + (system (%current-system)) target + native-drvs target-drvs + (guile #f) + source + (outputs '("out")) + (search-paths '()) + (native-search-paths '()) + + (phases '%standard-phases) + (source-directory ".") + (compile-flags %compile-flags) + (imported-modules %guile-build-system-modules) + (modules '((guix build guile-build-system) + (guix build utils)))) + (define builder + `(begin + (use-modules ,@modules) + + (let () + (define %build-host-inputs + ',(map (match-lambda + ((name (? derivation? drv) sub ...) + `(,name . ,(apply derivation->output-path drv sub))) + ((name path) + `(,name . ,path))) + native-drvs)) + + (define %build-target-inputs + ',(map (match-lambda + ((name (? derivation? drv) sub ...) + `(,name . ,(apply derivation->output-path drv sub))) + ((name (? package? pkg) sub ...) + (let ((drv (package-cross-derivation store pkg + target system))) + `(,name . ,(apply derivation->output-path drv sub)))) + ((name path) + `(,name . ,path))) + target-drvs)) + + (guile-build #:source ,(match (assoc-ref native-drvs "source") + (((? derivation? source)) + (derivation->output-path source)) + ((source) + source) + (source + source)) + #:system ,system + #:target ,target + #:outputs %outputs + #:source-directory ,source-directory + #:compile-flags ,compile-flags + #:inputs %build-target-inputs + #:native-inputs %build-host-inputs + #:search-paths ',(map search-path-specification->sexp + search-paths) + #:native-search-paths ',(map + search-path-specification->sexp + native-search-paths) + #:phases ,phases)))) + + (define guile-for-build + (match guile + ((? package?) + (package-derivation store guile system #:graft? #f)) + (#f ; the default + (let* ((distro (resolve-interface '(gnu packages commencement))) + (guile (module-ref distro 'guile-final))) + (package-derivation store guile system #:graft? #f))))) + + (build-expression->derivation store name builder + #:system system + #:inputs (append native-drvs target-drvs) + #:outputs outputs + #:modules imported-modules + #:substitutable? substitutable? + #:guile-for-build guile-for-build)) + +(define guile-build-system + (build-system + (name 'guile) + (description "The build system for simple Guile packages") + (lower lower))) diff --git a/guix/build/go-build-system.scm b/guix/build/go-build-system.scm index 7c833a616f..6be0167063 100644 --- a/guix/build/go-build-system.scm +++ b/guix/build/go-build-system.scm @@ -125,17 +125,17 @@ unset. When SOURCE is a directory, copy it instead of unpacking." (copy-recursively source dest #:keep-mtime? #t) #t) (if (string-suffix? ".zip" source) - (zero? (system* "unzip" "-d" dest source)) - (zero? (system* "tar" "-C" dest "-xvf" source)))))) + (invoke "unzip" "-d" dest source) + (invoke "tar" "-C" dest "-xvf" source))))) (define* (install-source #:key install-source? outputs #:allow-other-keys) "Install the source code to the output directory." (let* ((out (assoc-ref outputs "out")) (source "src") (dest (string-append out "/" source))) - (if install-source? - (copy-recursively source dest #:keep-mtime? #t) - #t))) + (when install-source? + (copy-recursively source dest #:keep-mtime? #t)) + #t)) (define (go-package? name) (string-prefix? "go-" name)) @@ -178,24 +178,26 @@ respectively." (define* (build #:key import-path #:allow-other-keys) "Build the package named by IMPORT-PATH." - (or - (zero? (system* "go" "install" - "-v" ; print the name of packages as they are compiled - "-x" ; print each command as it is invoked - ;; Respectively, strip the symbol table and debug - ;; information, and the DWARF symbol table. - "-ldflags=-s -w" - import-path)) - (begin + (with-throw-handler + #t + (lambda _ + (invoke "go" "install" + "-v" ; print the name of packages as they are compiled + "-x" ; print each command as it is invoked + ;; Respectively, strip the symbol table and debug + ;; information, and the DWARF symbol table. + "-ldflags=-s -w" + import-path)) + (lambda (key . args) (display (string-append "Building '" import-path "' failed.\n" "Here are the results of `go env`:\n")) - (system* "go" "env") - #f))) + (invoke "go" "env")))) (define* (check #:key tests? import-path #:allow-other-keys) "Run the tests for the package named by IMPORT-PATH." - (if tests? - (zero? (system* "go" "test" import-path)))) + (when tests? + (invoke "go" "test" import-path)) + #t) (define* (install #:key outputs #:allow-other-keys) "Install the compiled libraries. `go install` installs these files to diff --git a/guix/build/guile-build-system.scm b/guix/build/guile-build-system.scm new file mode 100644 index 0000000000..0bed049436 --- /dev/null +++ b/guix/build/guile-build-system.scm @@ -0,0 +1,153 @@ +;;; 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 build guile-build-system) + #:use-module ((guix build gnu-build-system) #:prefix gnu:) + #:use-module (guix build utils) + #:use-module (srfi srfi-26) + #:use-module (ice-9 match) + #:use-module (ice-9 popen) + #:use-module (ice-9 rdelim) + #:use-module (guix build utils) + #:export (target-guile-effective-version + %standard-phases + guile-build)) + +(define* (target-guile-effective-version #:optional guile) + "Return the effective version of GUILE or whichever 'guile' is in $PATH. +Return #false if it cannot be determined." + (let* ((pipe (open-pipe* OPEN_READ + (if guile + (string-append guile "/bin/guile") + "guile") + "-c" "(display (effective-version))")) + (line (read-line pipe))) + (and (zero? (close-pipe pipe)) + (string? line) + line))) + +(define (file-sans-extension file) ;TODO: factorize + "Return the substring of FILE without its extension, if any." + (let ((dot (string-rindex file #\.))) + (if dot + (substring file 0 dot) + file))) + +(define %scheme-file-regexp + ;; Regexp to match Scheme files. + "\\.(scm|sls)$") + +(define %documentation-file-regexp + ;; Regexp to match README files and the likes. + "^(README.*|.*\\.html|.*\\.org|.*\\.md)$") + +(define* (set-locale-path #:key inputs native-inputs + #:allow-other-keys) + "Set 'GUIX_LOCPATH'." + (match (assoc-ref (or native-inputs inputs) "locales") + (#f #t) + (locales + (setenv "GUIX_LOCPATH" (string-append locales "/lib/locale")) + #t))) + +(define* (build #:key outputs inputs native-inputs + (source-directory ".") + (compile-flags '()) + (scheme-file-regexp %scheme-file-regexp) + target + #:allow-other-keys) + "Build files in SOURCE-DIRECTORY that match SCHEME-FILE-REGEXP." + (let* ((out (assoc-ref outputs "out")) + (guile (assoc-ref (or native-inputs inputs) "guile")) + (effective (target-guile-effective-version guile)) + (module-dir (string-append out "/share/guile/site/" + effective)) + (go-dir (string-append out "/lib/guile/" + effective "/site-ccache/")) + (guild (string-append guile "/bin/guild")) + (flags (if target + (cons (string-append "--target=" target) + compile-flags) + compile-flags))) + (if target + (format #t "Cross-compiling for '~a' with Guile ~a...~%" + target effective) + (format #t "Compiling with Guile ~a...~%" effective)) + (format #t "compile flags: ~s~%" flags) + + ;; Make installation directories. + (mkdir-p module-dir) + (mkdir-p go-dir) + + ;; Compile .scm files and install. + (setenv "GUILE_AUTO_COMPILE" "0") + (setenv "GUILE_LOAD_COMPILED_PATH" + (string-append go-dir + (match (getenv "GUILE_LOAD_COMPILED_PATH") + (#f "") + (path (string-append ":" path))))) + (for-each (lambda (file) + (let* ((go (string-append go-dir + (file-sans-extension file) + ".go"))) + ;; Install source module. + (install-file (string-append source-directory "/" file) + (string-append module-dir + "/" (dirname file))) + + ;; Install and compile module. + (apply invoke guild "compile" "-L" source-directory + "-o" go + (string-append source-directory "/" file) + flags))) + + ;; Arrange to strip SOURCE-DIRECTORY from file names. + (with-directory-excursion source-directory + (find-files "." scheme-file-regexp))) + #t)) + +(define* (install-documentation #:key outputs + (documentation-file-regexp + %documentation-file-regexp) + #:allow-other-keys) + "Install files that mactch DOCUMENTATION-FILE-REGEXP." + (let* ((out (assoc-ref outputs "out")) + (doc (string-append out "/share/doc/" + (strip-store-file-name out)))) + (for-each (cut install-file <> doc) + (find-files "." documentation-file-regexp)) + #t)) + +(define %standard-phases + (modify-phases gnu:%standard-phases + (delete 'bootstrap) + (delete 'configure) + (add-before 'install-locale 'set-locale-path + set-locale-path) + (replace 'build build) + (add-after 'build 'install-documentation + install-documentation) + (delete 'check) + (delete 'strip) + (delete 'validate-runpath) + (delete 'install))) + +(define* (guile-build #:key (phases %standard-phases) + #:allow-other-keys #:rest args) + "Build the given Guile package, applying all of PHASES in order." + (apply gnu:gnu-build #:phases phases args)) diff --git a/guix/build/haskell-build-system.scm b/guix/build/haskell-build-system.scm index 268d59c1be..26519ce5a6 100644 --- a/guix/build/haskell-build-system.scm +++ b/guix/build/haskell-build-system.scm @@ -66,7 +66,7 @@ (format #t "running \"runhaskell Setup.hs\" with command ~s \ and parameters ~s~%" command params) - (zero? (apply system* "runhaskell" setup-file command params))) + (apply invoke "runhaskell" setup-file command params)) (error "no Setup.hs nor Setup.lhs found")))) (define* (configure #:key outputs inputs tests? (configure-flags '()) @@ -114,7 +114,8 @@ and parameters ~s~%" (setenv "CONFIG_SHELL" "sh")) (run-setuphs "configure" params) - (setenv "GHC_PACKAGE_PATH" ghc-path))) + (setenv "GHC_PACKAGE_PATH" ghc-path) + #t)) (define* (build #:rest empty) "Build a given Haskell package." diff --git a/guix/build/profiles.scm b/guix/build/profiles.scm index 819688a913..df785c85a7 100644 --- a/guix/build/profiles.scm +++ b/guix/build/profiles.scm @@ -89,7 +89,7 @@ definitions for all the SEARCH-PATHS." # When GUIX_PROFILE is undefined, the various environment variables refer # to this specific profile generation. \n" port) - (let ((variables (evaluate-search-paths (cons $PATH search-paths) + (let ((variables (evaluate-search-paths search-paths (list output)))) (for-each (write-environment-variable-definition port) (map (abstract-profile output) variables)))))) diff --git a/guix/build/ruby-build-system.scm b/guix/build/ruby-build-system.scm index abef6937bc..3a658e2557 100644 --- a/guix/build/ruby-build-system.scm +++ b/guix/build/ruby-build-system.scm @@ -52,18 +52,19 @@ directory." (define* (unpack #:key source #:allow-other-keys) "Unpack the gem SOURCE and enter the resulting directory." (if (gem-archive? source) - (and (zero? (system* "gem" "unpack" source)) - ;; The unpacked gem directory is named the same as the archive, - ;; sans the ".gem" extension. It is renamed to simply "gem" in an - ;; effort to keep file names shorter to avoid UNIX-domain socket - ;; file names and shebangs that exceed the system's fixed maximum - ;; length when running test suites. - (let ((dir (match:substring (string-match "^(.*)\\.gem$" - (basename source)) - 1))) - (rename-file dir "gem") - (chdir "gem") - #t)) + (begin + (invoke "gem" "unpack" source) + ;; The unpacked gem directory is named the same as the archive, + ;; sans the ".gem" extension. It is renamed to simply "gem" in an + ;; effort to keep file names shorter to avoid UNIX-domain socket + ;; file names and shebangs that exceed the system's fixed maximum + ;; length when running test suites. + (let ((dir (match:substring (string-match "^(.*)\\.gem$" + (basename source)) + 1))) + (rename-file dir "gem") + (chdir "gem")) + #t) ;; Use GNU unpack strategy for things that aren't gem archives. (gnu:unpack #:source source))) @@ -77,7 +78,8 @@ operation is not deterministic, we replace it with `find`." (when (not (gem-archive? source)) (let ((gemspec (first-gemspec))) (substitute* gemspec - (("`git ls-files`") "`find . -type f |sort`")))) + (("`git ls-files`") "`find . -type f |sort`") + (("`git ls-files -z`") "`find . -type f -print0 |sort -z`")))) #t) (define* (extract-gemspec #:key source #:allow-other-keys) @@ -104,7 +106,8 @@ generate the files list." (write-char (read-char pipe) out)))) #t) (lambda () - (close-pipe pipe))))))) + (close-pipe pipe))))) + #t)) (define* (build #:key source #:allow-other-keys) "Build a new gem using the gemspec from the SOURCE gem." @@ -112,13 +115,13 @@ generate the files list." ;; Build a new gem from the current working directory. This also allows any ;; dynamic patching done in previous phases to be present in the installed ;; gem. - (zero? (system* "gem" "build" (first-gemspec)))) + (invoke "gem" "build" (first-gemspec))) (define* (check #:key tests? test-target #:allow-other-keys) "Run the gem's test suite rake task TEST-TARGET. Skip the tests if TESTS? is #f." (if tests? - (zero? (system* "rake" test-target)) + (invoke "rake" test-target) #t)) (define* (install #:key inputs outputs (gem-flags '()) @@ -137,43 +140,42 @@ GEM-FLAGS are passed to the 'gem' invokation, if present." 0 (- (string-length gem-file-basename) 4)))) (setenv "GEM_VENDOR" vendor-dir) - (and (let ((install-succeeded? - (zero? - (apply system* "gem" "install" gem-file - "--local" "--ignore-dependencies" "--vendor" - ;; Executables should go into /bin, not - ;; /lib/ruby/gems. - "--bindir" (string-append out "/bin") - gem-flags)))) - (or install-succeeded? - (begin - (simple-format #t "installation failed\n") - (let ((failed-output-dir (string-append (getcwd) "/out"))) - (mkdir failed-output-dir) - (copy-recursively out failed-output-dir)) - #f))) - (begin - ;; Remove the cached gem file as this is unnecessary and contains - ;; timestamped files rendering builds not reproducible. - (let ((cached-gem (string-append vendor-dir "/cache/" gem-file))) - (log-file-deletion cached-gem) - (delete-file cached-gem)) - ;; For gems with native extensions, several Makefile-related files - ;; are created that contain timestamps or other elements making - ;; them not reproducible. They are unnecessary so we remove them. - (if (file-exists? (string-append vendor-dir "/ext")) - (begin - (for-each (lambda (file) - (log-file-deletion file) - (delete-file file)) - (append - (find-files (string-append vendor-dir "/doc") - "page-Makefile.ri") - (find-files (string-append vendor-dir "/extensions") - "gem_make.out") - (find-files (string-append vendor-dir "/ext") - "Makefile"))))) - #t)))) + + (or (zero? + (apply system* "gem" "install" gem-file + "--local" "--ignore-dependencies" "--vendor" + ;; Executables should go into /bin, not + ;; /lib/ruby/gems. + "--bindir" (string-append out "/bin") + gem-flags)) + (begin + (let ((failed-output-dir (string-append (getcwd) "/out"))) + (mkdir failed-output-dir) + (copy-recursively out failed-output-dir)) + (error "installation failed"))) + + ;; Remove the cached gem file as this is unnecessary and contains + ;; timestamped files rendering builds not reproducible. + (let ((cached-gem (string-append vendor-dir "/cache/" gem-file))) + (log-file-deletion cached-gem) + (delete-file cached-gem)) + + ;; For gems with native extensions, several Makefile-related files + ;; are created that contain timestamps or other elements making + ;; them not reproducible. They are unnecessary so we remove them. + (when (file-exists? (string-append vendor-dir "/ext")) + (for-each (lambda (file) + (log-file-deletion file) + (delete-file file)) + (append + (find-files (string-append vendor-dir "/doc") + "page-Makefile.ri") + (find-files (string-append vendor-dir "/extensions") + "gem_make.out") + (find-files (string-append vendor-dir "/ext") + "Makefile")))) + + #t)) (define* (wrap-ruby-program prog #:key (gem-clear-paths #t) #:rest vars) "Make a wrapper for PROG. VARS should look like this: @@ -301,7 +303,8 @@ extended with definitions for VARS." (let ((files (list-of-files dir))) (for-each (cut wrap-ruby-program <> var) files))) - bindirs))) + bindirs)) + #t) (define (log-file-deletion file) (display (string-append "deleting '" file "' for reproducibility\n"))) diff --git a/guix/gexp.scm b/guix/gexp.scm index 153b29bd42..ffc976d61b 100644 --- a/guix/gexp.scm +++ b/guix/gexp.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org> +;;; Copyright © 2018 Jan Nieuwenhuizen <janneke@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -23,6 +24,7 @@ #:use-module (guix derivations) #:use-module (guix grafts) #:use-module (guix utils) + #:use-module (rnrs bytevectors) #:use-module (srfi srfi-1) #:use-module (srfi srfi-9) #:use-module (srfi srfi-9 gnu) @@ -334,7 +336,7 @@ appears." (%plain-file name content references) plain-file? (name plain-file-name) ;string - (content plain-file-content) ;string + (content plain-file-content) ;string or bytevector (references plain-file-references)) ;list (currently unused) (define (plain-file name content) @@ -349,8 +351,10 @@ This is the declarative counterpart of 'text-file'." (define-gexp-compiler (plain-file-compiler (file <plain-file>) system target) ;; "Compile" FILE by adding it to the store. (match file - (($ <plain-file> name content references) - (text-file name content references)))) + (($ <plain-file> name (and (? string?) content) references) + (text-file name content references)) + (($ <plain-file> name (and (? bytevector?) content) references) + (binary-file name content references)))) (define-record-type <computed-file> (%computed-file name gexp guile options) @@ -597,6 +601,12 @@ names and file names suitable for the #:allowed-references argument to allowed-references disallowed-references leaked-env-vars local-build? (substitutable? #t) + + ;; TODO: This parameter is transitional; it's here + ;; to avoid a full rebuild. Remove it on the next + ;; rebuild cycle. + import-creates-derivation? + deprecation-warnings (script-name (string-append name "-builder"))) "Return a derivation NAME that runs EXP (a gexp) with GUILE-FOR-BUILD (a @@ -691,6 +701,8 @@ The other arguments are as for 'derivation'." extensions)) (modules (if (pair? %modules) (imported-modules %modules + #:derivation? + import-creates-derivation? #:system system #:module-path module-path #:guile guile-for-build @@ -699,6 +711,8 @@ The other arguments are as for 'derivation'." (return #f))) (compiled (if (pair? %modules) (compiled-modules %modules + #:derivation? + import-creates-derivation? #:system system #:module-path module-path #:extensions extensions @@ -731,7 +745,9 @@ The other arguments are as for 'derivation'." "/bin/guile") `("--no-auto-compile" ,@(if (pair? %modules) - `("-L" ,(derivation->output-path modules) + `("-L" ,(if (derivation? modules) + (derivation->output-path modules) + modules) "-C" ,(derivation->output-path compiled)) '()) ,@(append-map extension-flags exts) @@ -1009,6 +1025,49 @@ execution environment." ;;; Module handling. ;;; +(define %not-slash + (char-set-complement (char-set #\/))) + +(define (file-mapping->tree mapping) + "Convert MAPPING, an alist like: + + ((\"guix/build/utils.scm\" . \"…/utils.scm\")) + +to a tree suitable for 'interned-file-tree'." + (let ((mapping (map (match-lambda + ((destination . source) + (cons (string-tokenize destination + %not-slash) + source))) + mapping))) + (fold (lambda (pair result) + (match pair + ((destination . source) + (let loop ((destination destination) + (result result)) + (match destination + ((file) + (let* ((mode (stat:mode (stat source))) + (type (if (zero? (logand mode #o100)) + 'regular + 'executable))) + (alist-cons file + `(,type (file ,source)) + result))) + ((file rest ...) + (let ((directory (assoc-ref result file))) + (alist-cons file + `(directory + ,@(loop rest + (match directory + (('directory . entries) entries) + (#f '())))) + (if directory + (alist-delete file result) + result))))))))) + '() + mapping))) + (define %utils-module ;; This file provides 'mkdir-p', needed to implement 'imported-files' and ;; other primitives below. Note: We give the file name relative to this @@ -1017,22 +1076,24 @@ execution environment." (local-file "build/utils.scm" "build-utils.scm")) -(define* (imported-files files - #:key (name "file-import") - (system (%current-system)) - (guile (%guile-for-build)) - - ;; XXX: The only reason we have - ;; #:deprecation-warnings is because (guix build - ;; utils), which we use here, relies on _IO*, which - ;; is deprecated in 2.2. On the next full-rebuild - ;; cycle, we should disable such warnings - ;; unconditionally. - (deprecation-warnings #f)) +(define* (imported-files/derivation files + #:key (name "file-import") + (symlink? #f) + (system (%current-system)) + (guile (%guile-for-build)) + + ;; XXX: The only reason we have + ;; #:deprecation-warnings is because (guix + ;; build utils), which we use here, relies + ;; on _IO*, which is deprecated in 2.2. On + ;; the next full-rebuild cycle, we should + ;; disable such warnings unconditionally. + (deprecation-warnings #f)) "Return a derivation that imports FILES into STORE. FILES must be a list of (FINAL-PATH . FILE) pairs. Each FILE is mapped to FINAL-PATH in the resulting store path. FILE can be either a file name, or a file-like object, -as returned by 'local-file' for example." +as returned by 'local-file' for example. If SYMLINK? is true, create symlinks +to the source files instead of copying them." (define file-pair (match-lambda ((final-path . (? string? file-name)) @@ -1055,7 +1116,8 @@ as returned by 'local-file' for example." (for-each (match-lambda ((final-path store-path) (mkdir-p (dirname final-path)) - (symlink store-path final-path))) + ((ungexp (if symlink? 'symlink 'copy-file)) + store-path final-path))) '(ungexp files))))) ;; TODO: Pass FILES as an environment variable so that BUILD remains @@ -1077,8 +1139,39 @@ as returned by 'local-file' for example." (else '()))))) +(define* (imported-files files + #:key (name "file-import") + + ;; TODO: Remove this parameter on the next rebuild + ;; cycle. + (derivation? #f) + + ;; The following parameters make sense when creating + ;; an actual derivation. + (system (%current-system)) + (guile (%guile-for-build)) + (deprecation-warnings #f)) + "Import FILES into the store and return the resulting derivation or store +file name (a derivation is created if and only if some elements of FILES are +file-like objects and not local file names.) FILES must be a list +of (FINAL-PATH . FILE) pairs. Each FILE is mapped to FINAL-PATH in the +resulting store path. FILE can be either a file name, or a file-like object, +as returned by 'local-file' for example." + (if (or derivation? + (any (match-lambda + ((_ . (? struct? source)) #t) + (_ #f)) + files)) + (imported-files/derivation files #:name name + #:symlink? derivation? + #:system system #:guile guile + #:deprecation-warnings deprecation-warnings) + (interned-file-tree `(,name directory + ,@(file-mapping->tree files))))) + (define* (imported-modules modules #:key (name "module-import") + (derivation? #f) ;TODO: remove on next rebuild (system (%current-system)) (guile (%guile-for-build)) (module-path %load-path) @@ -1094,24 +1187,23 @@ by an arrow followed by a file-like object. For example: In this example, the first two modules are taken from MODULE-PATH, and the last one is created from the given <scheme-file> object." - (mlet %store-monad ((files - (mapm %store-monad - (match-lambda - (((module ...) '=> file) - (return - (cons (module->source-file-name module) - file))) - ((module ...) - (let ((f (module->source-file-name module))) - (return - (cons f (search-path* module-path f)))))) - modules))) - (imported-files files #:name name #:system system + (let ((files (map (match-lambda + (((module ...) '=> file) + (cons (module->source-file-name module) + file)) + ((module ...) + (let ((f (module->source-file-name module))) + (cons f (search-path* module-path f))))) + modules))) + (imported-files files #:name name + #:derivation? derivation? + #:system system #:guile guile #:deprecation-warnings deprecation-warnings))) (define* (compiled-modules modules #:key (name "module-import-compiled") + (derivation? #f) ;TODO: remove on next rebuild (system (%current-system)) (guile (%guile-for-build)) (module-path %load-path) @@ -1131,6 +1223,7 @@ they can refer to each other." (not (equal? module-path %load-path)))) (mlet %store-monad ((modules (imported-modules modules + #:derivation? derivation? #:system system #:guile guile #:module-path diff --git a/guix/git.scm b/guix/git.scm index 9e89cc0062..193e2df111 100644 --- a/guix/git.scm +++ b/guix/git.scm @@ -114,7 +114,8 @@ OID (roughly the commit hash) corresponding to REF." #:key (ref '(branch . "origin/master")) (cache-directory - (%repository-cache-directory))) + (url-cache-directory + url (%repository-cache-directory)))) "Update the cached checkout of URL to REF in CACHE-DIRECTORY. Return two values: the cache directory name, and the SHA1 commit (a string) corresponding to REF. @@ -122,11 +123,10 @@ to REF. REF is pair whose key is [branch | commit | tag] and value the associated data, respectively [<branch name> | <sha1> | <tag name>]." (with-libgit2 - (let* ((cache-dir (url-cache-directory url cache-directory)) - (cache-exists? (openable-repository? cache-dir)) + (let* ((cache-exists? (openable-repository? cache-directory)) (repository (if cache-exists? - (repository-open cache-dir) - (clone* url cache-dir)))) + (repository-open cache-directory) + (clone* url cache-directory)))) ;; Only fetch remote if it has not been cloned just before. (when cache-exists? (remote-fetch (remote-lookup repository "origin"))) @@ -138,7 +138,7 @@ data, respectively [<branch name> | <sha1> | <tag name>]." 'repository-close!) (repository-close! repository)) - (values cache-dir (oid->string oid)))))) + (values cache-directory (oid->string oid)))))) (define* (latest-repository-commit store url #:key @@ -157,12 +157,14 @@ Git repositories are kept in the cache directory specified by (and (string=? (basename file) ".git") (eq? 'directory (stat:type stat)))) - (let*-values (((checkout commit) - (update-cached-checkout url - #:ref ref - #:cache-directory cache-directory)) - ((name) - (url+commit->name url commit))) + (let*-values + (((checkout commit) + (update-cached-checkout url + #:ref ref + #:cache-directory + (url-cache-directory url cache-directory))) + ((name) + (url+commit->name url commit))) (values (add-to-store store name #t "sha256" checkout #:select? (negate dot-git?)) commit))) diff --git a/guix/gnu-maintenance.scm b/guix/gnu-maintenance.scm index c2a7a33b6a..3634f4bb27 100644 --- a/guix/gnu-maintenance.scm +++ b/guix/gnu-maintenance.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2012, 2013 Nikita Karetnikov <nikita@karetnikov.org> ;;; ;;; This file is part of GNU Guix. @@ -82,13 +82,14 @@ (define %package-list-url (string->uri - (string-append %gnumaint-base-url "gnupackages.txt"))) + (string-append %gnumaint-base-url "rec/gnupackages.rec"))) (define %package-description-url ;; This file contains package descriptions in recutils format. - ;; See <https://lists.gnu.org/archive/html/guix-devel/2013-10/msg00071.html>. + ;; See <https://lists.gnu.org/archive/html/guix-devel/2013-10/msg00071.html> + ;; and <https://lists.gnu.org/archive/html/guix-devel/2018-06/msg00362.html>. (string->uri - (string-append %gnumaint-base-url "pkgblurbs.txt"))) + (string-append %gnumaint-base-url "rec/pkgblurbs.rec"))) (define-record-type* <gnu-package-descriptor> gnu-package-descriptor @@ -121,7 +122,12 @@ to fetch the list of GNU packages over HTTP." (if (null? alist) (reverse result) (loop (recutils->alist port) - (cons alist result))))) + + ;; Ignore things like "%rec" (info "(recutils) Record + ;; Descriptors"). + (if (assoc-ref alist "package") + (cons alist result) + result))))) (define official-description (let ((db (read-records (fetch %package-description-url #:text? #t)))) @@ -148,12 +154,12 @@ to fetch the list of GNU packages over HTTP." (alist->record `(("description" . ,(official-description name)) ,@alist) make-gnu-package-descriptor - (list "package" "mundane-name" "copyright-holder" + (list "package" "mundane_name" "copyright_holder" "savannah" "fsd" "language" "logo" - "doc-category" "doc-summary" "description" - "doc-url" - "download-url") - '("doc-url" "language")))) + "doc_category" "doc_summary" "description" + "doc_url" + "download_url") + '("doc_url" "language")))) (let* ((port (fetch %package-list-url #:text? #t)) (lst (read-records port))) (close-port port) diff --git a/guix/hash.scm b/guix/hash.scm index 39834043e1..8d7ba21425 100644 --- a/guix/hash.scm +++ b/guix/hash.scm @@ -101,6 +101,7 @@ output port." (open-sha256-md)) (define digest #f) + (define position 0) (define (finalize!) (let ((ptr (md-read sha256-md 0))) @@ -114,14 +115,18 @@ output port." 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! #f #f + write! get-position #f close) (lambda () (unless digest diff --git a/guix/import/cabal.scm b/guix/import/cabal.scm index 09130e4498..1b8bda6f4e 100644 --- a/guix/import/cabal.scm +++ b/guix/import/cabal.scm @@ -34,6 +34,8 @@ #:export (read-cabal eval-cabal + cabal-custom-setup-dependencies + cabal-package? cabal-package-name cabal-package-version @@ -47,6 +49,7 @@ cabal-package-test-suites cabal-package-flags cabal-package-eval-environment + cabal-package-custom-setup cabal-source-repository? cabal-source-repository-use-case @@ -139,8 +142,8 @@ to the stack." "Generate a parser for Cabal files." (lalr-parser ;; --- token definitions - (CCURLY VCCURLY OPAREN CPAREN TEST ID VERSION RELATION TRUE FALSE - (right: IF FLAG EXEC TEST-SUITE SOURCE-REPO BENCHMARK LIB OCURLY) + (CCURLY VCCURLY OPAREN CPAREN TEST ID VERSION RELATION TRUE FALSE -ANY -NONE + (right: IF FLAG EXEC TEST-SUITE CUSTOM-SETUP SOURCE-REPO BENCHMARK LIB OCURLY) (left: OR) (left: PROPERTY AND) (right: ELSE NOT)) @@ -150,6 +153,7 @@ to the stack." (sections source-repo) : (append $1 (list $2)) (sections executables) : (append $1 $2) (sections test-suites) : (append $1 $2) + (sections custom-setup) : (append $1 $2) (sections benchmarks) : (append $1 $2) (sections lib-sec) : (append $1 (list $2)) () : '()) @@ -172,6 +176,7 @@ to the stack." (ts-sec) : (list $1)) (ts-sec (TEST-SUITE OCURLY exprs CCURLY) : `(section test-suite ,$1 ,$3) (TEST-SUITE open exprs close) : `(section test-suite ,$1 ,$3)) + (custom-setup (CUSTOM-SETUP exprs) : (list `(section custom-setup ,$1 ,$2))) (benchmarks (benchmarks bm-sec) : (append $1 (list $2)) (bm-sec) : (list $1)) (bm-sec (BENCHMARK OCURLY exprs CCURLY) : `(section benchmark ,$1 ,$3) @@ -211,6 +216,10 @@ to the stack." (FALSE) : 'false (TEST OPAREN ID RELATION VERSION CPAREN) : `(,$1 ,(string-append $3 " " $4 " " $5)) + (TEST OPAREN ID -ANY CPAREN) + : `(,$1 ,(string-append $3 " -any")) + (TEST OPAREN ID -NONE CPAREN) + : `(,$1 ,(string-append $3 " -none")) (TEST OPAREN ID RELATION VERSION AND RELATION VERSION CPAREN) : `(and (,$1 ,(string-append $3 " " $4 " " $5)) (,$1 ,(string-append $3 " " $7 " " $8))) @@ -349,6 +358,9 @@ matching a string against the created regexp." (define is-test-suite (make-rx-matcher "^test-suite +([a-z0-9_-]+)" regexp/icase)) +(define is-custom-setup (make-rx-matcher "^(custom-setup)" + regexp/icase)) + (define is-benchmark (make-rx-matcher "^benchmark +([a-z0-9_-]+)" regexp/icase)) @@ -362,13 +374,17 @@ matching a string against the created regexp." (define (is-false s) (string-ci=? s "false")) +(define (is-any s) (string-ci=? s "-any")) + +(define (is-none s) (string-ci=? s "-none")) + (define (is-and s) (string=? s "&&")) (define (is-or s) (string=? s "||")) (define (is-id s port) (let ((cabal-reserved-words - '("if" "else" "library" "flag" "executable" "test-suite" + '("if" "else" "library" "flag" "executable" "test-suite" "custom-setup" "source-repository" "benchmark")) (spaces (read-while (cut char-set-contains? char-set:blank <>) port)) (c (peek-char port))) @@ -392,8 +408,11 @@ matching a string against the created regexp." (define (lex-version loc port) (make-lexical-token 'VERSION loc - (read-while char-numeric? port - (cut char=? #\. <>) char-numeric?))) + (read-while (lambda (x) + (or (char-numeric? x) + (char=? x #\*) + (char=? x #\.))) + port))) (define* (read-while is? port #:optional (is-if-followed-by? (lambda (c) #f)) @@ -435,6 +454,8 @@ string with the read characters." (define (lex-test-suite ts-rx-res loc) (lex-rx-res ts-rx-res 'TEST-SUITE loc)) +(define (lex-custom-setup ts-rx-res loc) (lex-rx-res ts-rx-res 'CUSTOM-SETUP loc)) + (define (lex-benchmark bm-rx-res loc) (lex-rx-res bm-rx-res 'BENCHMARK loc)) (define (lex-lib loc) (make-lexical-token 'LIB loc #f)) @@ -447,6 +468,10 @@ string with the read characters." (define (lex-false loc) (make-lexical-token 'FALSE loc #f)) +(define (lex-any loc) (make-lexical-token '-ANY loc #f)) + +(define (lex-none loc) (make-lexical-token '-NONE loc #f)) + (define (lex-and loc) (make-lexical-token 'AND loc #f)) (define (lex-or loc) (make-lexical-token 'OR loc #f)) @@ -514,6 +539,8 @@ LOC is the current port location." ((is-test w port) (lex-test w loc)) ((is-true w) (lex-true loc)) ((is-false w) (lex-false loc)) + ((is-any w) (lex-any loc)) + ((is-none w) (lex-none loc)) ((is-and w) (lex-and loc)) ((is-or w) (lex-or loc)) ((is-id w port) (lex-id w loc)) @@ -529,6 +556,7 @@ the current port location." ((is-src-repo s) => (cut lex-src-repo <> loc)) ((is-exec s) => (cut lex-exec <> loc)) ((is-test-suite s) => (cut lex-test-suite <> loc)) + ((is-custom-setup s) => (cut lex-custom-setup <> loc)) ((is-benchmark s) => (cut lex-benchmark <> loc)) ((is-lib s) (lex-lib loc)) ((is-else s) (lex-else loc)) @@ -591,7 +619,7 @@ If #f use the function 'port-filename' to obtain it." (make-cabal-package name version license home-page source-repository synopsis description executables lib test-suites - flags eval-environment) + flags eval-environment custom-setup) cabal-package? (name cabal-package-name) (version cabal-package-version) @@ -604,7 +632,8 @@ If #f use the function 'port-filename' to obtain it." (lib cabal-package-library) ; 'library' is a Scheme keyword (test-suites cabal-package-test-suites) (flags cabal-package-flags) - (eval-environment cabal-package-eval-environment)) ; alist + (eval-environment cabal-package-eval-environment) ; alist + (custom-setup cabal-package-custom-setup)) (set-record-type-printer! <cabal-package> (lambda (package port) @@ -658,6 +687,12 @@ If #f use the function 'port-filename' to obtain it." (name cabal-test-suite-name) (dependencies cabal-test-suite-dependencies)) ; list of <cabal-dependency> +(define-record-type <cabal-custom-setup> + (make-cabal-custom-setup name dependencies) + cabal-custom-setup? + (name cabal-custom-setup-name) + (dependencies cabal-custom-setup-dependencies)) ; list of <cabal-dependency> + (define (cabal-flags->alist flag-list) "Retrun an alist associating the flag name to its default value from a list of <cabal-flag> objects." @@ -694,13 +729,20 @@ the ordering operation and the version." (let* ((with-ver-matcher-fn (make-rx-matcher "([a-zA-Z0-9_-]+) *([<>=]+) *([0-9.]+) *")) (without-ver-matcher-fn (make-rx-matcher "([a-zA-Z0-9_-]+)")) + (without-ver-matcher-fn-2 (make-rx-matcher "([a-zA-Z0-9_-]+) (-any|-none)")) (name (or (and=> (with-ver-matcher-fn spec) (cut match:substring <> 1)) + (and=> (without-ver-matcher-fn-2 spec) + (cut match:substring <> 1)) (match:substring (without-ver-matcher-fn spec) 1))) - (operator (and=> (with-ver-matcher-fn spec) - (cut match:substring <> 2))) - (version (and=> (with-ver-matcher-fn spec) - (cut match:substring <> 3)))) + (operator (or (and=> (with-ver-matcher-fn spec) + (cut match:substring <> 2)) + (and=> (without-ver-matcher-fn-2 spec) + (cut match:substring <> 2)))) + (version (or (and=> (with-ver-matcher-fn spec) + (cut match:substring <> 3)) + (and=> (without-ver-matcher-fn-2 spec) + (cut match:substring <> 2))))) (values name operator version))) (define (impl haskell) @@ -716,6 +758,8 @@ the ordering operation and the version." ((string= spec-op ">") (version>? comp-ver spec-ver)) ((string= spec-op "<=") (not (version>? comp-ver spec-ver))) ((string= spec-op "<") (not (version>=? comp-ver spec-ver))) + ((string= spec-op "-any") #t) + ((string= spec-op "-none") #f) (else (raise (condition (&message (message "Failed to evaluate 'impl' test.")))))) @@ -728,7 +772,6 @@ the ordering operation and the version." (let ((value (or (assoc-ref env name) (assoc-ref (cabal-flags->alist (cabal-flags)) name)))) (if (eq? value 'false) #f #t))) - (define (eval sexp) (match sexp (() '()) @@ -755,6 +798,8 @@ the ordering operation and the version." ;; no need to evaluate flag parameters (('section 'flag name parameters) (list 'section 'flag name parameters)) + (('section 'custom-setup parameters) + (list 'section 'custom-setup parameters)) ;; library does not have a name parameter (('section 'library parameters) (list 'section 'library (eval parameters))) @@ -785,22 +830,28 @@ See the manual for limitations."))))))) (lib (make-cabal-section evaluated-sexp 'library)) (test-suites (make-cabal-section evaluated-sexp 'test-suite)) (flags (make-cabal-section evaluated-sexp 'flag)) - (eval-environment '())) + (eval-environment '()) + (custom-setup (match + (make-cabal-section evaluated-sexp 'custom-setup) + ((x) x)))) (make-cabal-package name version license home-page-or-hackage source-repository synopsis description executables lib - test-suites flags eval-environment))) + test-suites flags eval-environment custom-setup))) ((compose cabal-evaluated-sexp->package eval) cabal-sexp)) (define (make-cabal-section sexp section-type) "Given an SEXP as produced by 'read-cabal', produce a list of objects pertaining to SECTION-TYPE sections. SECTION-TYPE must be one of: -'executable, 'flag, 'test-suite, 'source-repository or 'library." +'executable, 'flag, 'test-suite, 'custom-setup, 'source-repository or +'library." (filter-map (cut match <> (('section (? (cut equal? <> section-type)) name parameters) (case section-type ((test-suite) (make-cabal-test-suite name (dependencies parameters))) + ((custom-setup) (make-cabal-custom-setup + name (dependencies parameters "setup-depends"))) ((executable) (make-cabal-executable name (dependencies parameters))) ((source-repository) (make-cabal-source-repository @@ -843,10 +894,10 @@ to be added between the values found in different key/value pairs." (define dependency-name-version-rx (make-regexp "([a-zA-Z0-9_-]+) *(.*)")) -(define (dependencies key-values-list) +(define* (dependencies key-values-list #:optional (key "build-depends")) "Return a list of 'cabal-dependency' objects for the dependencies found in KEY-VALUES-LIST." - (let ((deps (string-tokenize (lookup-join key-values-list "build-depends" ",") + (let ((deps (string-tokenize (lookup-join key-values-list key ",") (char-set-complement (char-set #\,))))) (map (lambda (d) (let ((rx-result (regexp-exec dependency-name-version-rx d))) diff --git a/guix/import/gem.scm b/guix/import/gem.scm index 646163fb7b..ea576b5e4a 100644 --- a/guix/import/gem.scm +++ b/guix/import/gem.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015 David Thompson <davet@gnu.org> ;;; Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com> +;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -33,7 +34,8 @@ #:use-module (guix base32) #:use-module (guix build-system ruby) #:export (gem->guix-package - %gem-updater)) + %gem-updater + gem-recursive-import)) (define (rubygems-fetch name) "Return an alist representation of the RubyGems metadata for the package NAME, @@ -115,29 +117,30 @@ VERSION, HASH, HOME-PAGE, DESCRIPTION, DEPENDENCIES, and LICENSES." ((license) (license->symbol license)) (_ `(list ,@(map license->symbol licenses))))))) -(define* (gem->guix-package package-name #:optional version) +(define* (gem->guix-package package-name #:optional (repo 'rubygems) version) "Fetch the metadata for PACKAGE-NAME from rubygems.org, and return the `package' s-expression corresponding to that package, or #f on failure." (let ((package (rubygems-fetch package-name))) (and package - (let ((name (assoc-ref package "name")) - (version (assoc-ref package "version")) - (hash (assoc-ref package "sha")) - (synopsis (assoc-ref package "info")) ; nothing better to use - (description (beautify-description - (assoc-ref package "info"))) - (home-page (assoc-ref package "homepage_uri")) - (dependencies (map (lambda (dep) - (let ((name (assoc-ref dep "name"))) - (if (string=? name "bundler") - "bundler" ; special case, no prefix - (ruby-package-name name)))) - (assoc-ref* package "dependencies" - "runtime"))) - (licenses (map string->license - (assoc-ref package "licenses")))) - (make-gem-sexp name version hash home-page synopsis - description dependencies licenses))))) + (let* ((name (assoc-ref package "name")) + (version (assoc-ref package "version")) + (hash (assoc-ref package "sha")) + (synopsis (assoc-ref package "info")) ; nothing better to use + (description (beautify-description + (assoc-ref package "info"))) + (home-page (assoc-ref package "homepage_uri")) + (dependencies-names (map (lambda (dep) (assoc-ref dep "name")) + (assoc-ref* package "dependencies" "runtime"))) + (dependencies (map (lambda (dep) + (if (string=? dep "bundler") + "bundler" ; special case, no prefix + (ruby-package-name dep))) + dependencies-names)) + (licenses (map string->license + (assoc-ref package "licenses")))) + (values (make-gem-sexp name version hash home-page synopsis + description dependencies licenses) + dependencies-names))))) (define (guix-package->gem-name package) "Given a PACKAGE built from rubygems.org, return the name of the @@ -192,3 +195,8 @@ package on RubyGems." (description "Updater for RubyGem packages") (pred gem-package?) (latest latest-release))) + +(define* (gem-recursive-import package-name #:optional version) + (recursive-import package-name '() + #:repo->guix-package gem->guix-package + #:guix-name ruby-package-name)) diff --git a/guix/import/hackage.scm b/guix/import/hackage.scm index eb9e1d7d82..6f80d84b70 100644 --- a/guix/import/hackage.scm +++ b/guix/import/hackage.scm @@ -150,10 +150,9 @@ version." (_ #f))) -(define (cabal-dependencies->names cabal include-test-dependencies?) - "Return the list of dependencies names from the CABAL package object. If -INCLUDE-TEST-DEPENDENCIES? is #f, do not include dependencies required by test -suites." +(define (cabal-dependencies->names cabal) + "Return the list of dependencies names from the CABAL package object, +not including test suite dependencies or custom-setup dependencies." (let* ((lib (cabal-package-library cabal)) (lib-deps (if (pair? lib) (map cabal-dependency-name @@ -163,15 +162,25 @@ suites." (exe-deps (if (pair? exe) (map cabal-dependency-name (append-map cabal-executable-dependencies exe)) - '())) - (ts (cabal-package-test-suites cabal)) - (ts-deps (if (pair? ts) - (map cabal-dependency-name - (append-map cabal-test-suite-dependencies ts)) '()))) - (if include-test-dependencies? - (delete-duplicates (append lib-deps exe-deps ts-deps)) - (delete-duplicates (append lib-deps exe-deps))))) + (delete-duplicates (append lib-deps exe-deps)))) + +(define (cabal-test-dependencies->names cabal) + "Return the list of test suite dependencies from the CABAL package +object." + (let* ((ts (cabal-package-test-suites cabal)) + (ts-deps (if (pair? ts) + (map cabal-dependency-name + (append-map cabal-test-suite-dependencies ts)) + '()))) + ts-deps)) + +(define (cabal-custom-setup-dependencies->names cabal) + "Return the list of custom-setup dependencies from the CABAL package +object." + (let* ((custom-setup-dependencies (and=> (cabal-package-custom-setup cabal) + cabal-custom-setup-dependencies))) + (map cabal-dependency-name custom-setup-dependencies))) (define (filter-dependencies dependencies own-name) "Filter the dependencies included with the GHC compiler from DEPENDENCIES, a @@ -199,8 +208,23 @@ representation of a Cabal file as produced by 'read-cabal'." (map hackage-name->package-name ((compose (cut filter-dependencies <> (cabal-package-name cabal)) - (cut cabal-dependencies->names <> - include-test-dependencies?)) + (cut cabal-dependencies->names <>)) + cabal)))) + (map (lambda (name) + (list name (list 'unquote (string->symbol name)))) + names))) + + (define native-dependencies + (let ((names + (map hackage-name->package-name + ((compose (cut filter-dependencies <> + (cabal-package-name cabal)) + ;; FIXME: Check include-test-dependencies? + (lambda (cabal) + (append (if include-test-dependencies? + (cabal-test-dependencies->names cabal) + '()) + (cabal-custom-setup-dependencies->names cabal)))) cabal)))) (map (lambda (name) (list name (list 'unquote (string->symbol name)))) @@ -234,6 +258,7 @@ representation of a Cabal file as produced by 'read-cabal'." "failed to download tar archive"))))) (build-system haskell-build-system) ,@(maybe-inputs 'inputs dependencies) + ,@(maybe-inputs 'native-inputs native-dependencies) ,@(maybe-arguments) (home-page ,(cabal-package-home-page cabal)) (synopsis ,(cabal-package-synopsis cabal)) diff --git a/guix/import/opam.scm b/guix/import/opam.scm new file mode 100644 index 0000000000..f252bdc31a --- /dev/null +++ b/guix/import/opam.scm @@ -0,0 +1,193 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2018 Julien Lepiller <julien@lepiller.eu> +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +(define-module (guix import opam) + #:use-module (ice-9 match) + #:use-module (ice-9 vlist) + #:use-module ((ice-9 rdelim) #:select (read-line)) + #:use-module (srfi srfi-1) + #:use-module (web uri) + #:use-module (guix http-client) + #:use-module (guix utils) + #:use-module (guix import utils) + #:use-module ((guix licenses) #:prefix license:) + #:export (opam->guix-package)) + +(define (opam-urls) + "Fetch the urls.txt file from the opam repository and returns the list of +URLs it contains." + (let ((port (http-fetch/cached (string->uri "https://opam.ocaml.org/urls.txt")))) + (let loop ((result '())) + (let ((line (read-line port))) + (if (eof-object? line) + (begin + (close port) + result) + (loop (cons line result))))))) + +(define (vhash-ref hashtable key default) + (match (vhash-assoc key hashtable) + (#f default) + ((_ . x) x))) + +(define (hashtable-update hashtable line) + "Parse @var{line} to get the name and version of the package and adds them +to the hashtable." + (let* ((line (string-split line #\ ))) + (match line + ((url foo ...) + (if (equal? url "repo") + hashtable + (match (string-split url #\/) + ((type name1 versionstr foo ...) + (if (equal? type "packages") + (match (string-split versionstr #\.) + ((name2 versions ...) + (let ((version (string-join versions "."))) + (if (equal? name1 name2) + (let ((curr (vhash-ref hashtable name1 '()))) + (vhash-cons name1 (cons version curr) hashtable)) + hashtable))) + (_ hashtable)) + hashtable)) + (_ hashtable)))) + (_ hashtable)))) + +(define (urls->hashtable urls) + "Transform urls.txt in a hashtable whose keys are package names and values +the list of available versions." + (let ((hashtable vlist-null)) + (let loop ((urls urls) (hashtable hashtable)) + (match urls + (() hashtable) + ((url rest ...) (loop rest (hashtable-update hashtable url))))))) + +(define (latest-version versions) + "Find the most recent version from a list of versions." + (match versions + ((first rest ...) + (let loop ((versions rest) (m first)) + (match versions + (() m) + ((first rest ...) + (loop rest (if (version>? m first) m first)))))))) + +(define (fetch-package-url uri) + "Fetch and parse the url file. Return the URL the package can be downloaded +from." + (let ((port (http-fetch uri))) + (let loop ((result #f)) + (let ((line (read-line port))) + (if (eof-object? line) + (begin + (close port) + result) + (let* ((line (string-split line #\ ))) + (match line + ((key value rest ...) + (if (member key '("archive:" "http:")) + (loop (string-trim-both value #\")) + (loop result)))))))))) + +(define (fetch-package-metadata uri) + "Fetch and parse the opam file. Return an association list containing the +homepage, the license and the list of inputs." + (let ((port (http-fetch uri))) + (let loop ((result '()) (dependencies? #f)) + (let ((line (read-line port))) + (if (eof-object? line) + (begin + (close port) + result) + (let* ((line (string-split line #\ ))) + (match line + ((key value ...) + (let ((dependencies? + (if dependencies? + (not (equal? key "]")) + (equal? key "depends:"))) + (val (string-trim-both (string-join value "") #\"))) + (cond + ((equal? key "homepage:") + (loop (cons `("homepage" . ,val) result) dependencies?)) + ((equal? key "license:") + (loop (cons `("license" . ,val) result) dependencies?)) + ((and dependencies? (not (equal? val "["))) + (match (string-split val #\{) + ((val rest ...) + (let ((curr (assoc-ref result "inputs")) + (new (string-trim-both + val (list->char-set '(#\] #\[ #\"))))) + (loop (cons `("inputs" . ,(cons new (if curr curr '()))) result) + (if (string-contains val "]") #f dependencies?)))))) + (else (loop result dependencies?)))))))))))) + +(define (string->license str) + (cond + ((equal? str "MIT") '(license:expat)) + ((equal? str "GPL2") '(license:gpl2)) + ((equal? str "LGPLv2") '(license:lgpl2)) + (else `()))) + +(define (ocaml-name->guix-name name) + (cond + ((equal? name "ocamlfind") "ocaml-findlib") + ((string-prefix? "ocaml" name) name) + ((string-prefix? "conf-" name) (substring name 5)) + (else (string-append "ocaml-" name)))) + +(define (dependencies->inputs dependencies) + "Transform the list of dependencies in a list of inputs." + (if (not dependencies) + '() + (map (lambda (input) + (list input (list 'unquote (string->symbol input)))) + (map ocaml-name->guix-name dependencies)))) + +(define (opam->guix-package name) + (let* ((hashtable (urls->hashtable (opam-urls))) + (versions (vhash-ref hashtable name #f))) + (unless (eq? versions #f) + (let* ((version (latest-version versions)) + (package-url (string-append "https://opam.ocaml.org/packages/" name + "/" name "." version "/")) + (url-url (string-append package-url "url")) + (opam-url (string-append package-url "opam")) + (source-url (fetch-package-url url-url)) + (metadata (fetch-package-metadata opam-url)) + (dependencies (assoc-ref metadata "inputs")) + (inputs (dependencies->inputs dependencies))) + (call-with-temporary-output-file + (lambda (temp port) + (and (url-fetch source-url temp) + `(package + (name ,(ocaml-name->guix-name name)) + (version ,version) + (source + (origin + (method url-fetch) + (uri ,source-url) + (sha256 (base32 ,(guix-hash-url temp))))) + (build-system ocaml-build-system) + ,@(if (null? inputs) + '() + `((inputs ,(list 'quasiquote inputs)))) + (home-page ,(assoc-ref metadata "homepage")) + (synopsis "") + (description "") + (license ,@(string->license (assoc-ref metadata "license"))))))))))) diff --git a/guix/import/pypi.scm b/guix/import/pypi.scm index 6beab6b010..25560bac46 100644 --- a/guix/import/pypi.scm +++ b/guix/import/pypi.scm @@ -51,8 +51,7 @@ (define (pypi-fetch name) "Return an alist representation of the PyPI metadata for the package NAME, or #f on failure." - (json-fetch-alist (string-append "https://pypi.python.org/pypi/" - name "/json"))) + (json-fetch-alist (string-append "https://pypi.org/pypi/" name "/json"))) ;; For packages found on PyPI that lack a source distribution. (define-condition-type &missing-source-error &error @@ -87,7 +86,7 @@ package." (string-append "python-" (snake-case name)))) (define (guix-package->pypi-name package) - "Given a Python PACKAGE built from pypi.python.org, return the name of the + "Given a Python PACKAGE built from pypi.org, return the name of the package on PyPI." (define (url->pypi-name url) (hyphen-package-name->name+version @@ -269,7 +268,7 @@ VERSION, SOURCE-URL, HOME-PAGE, SYNOPSIS, DESCRIPTION, and LICENSE." (license ,(license->symbol license))))))) (define (pypi->guix-package package-name) - "Fetch the metadata for PACKAGE-NAME from pypi.python.org, and return the + "Fetch the metadata for PACKAGE-NAME from pypi.org, and return the `package' s-expression corresponding to that package, or #f on failure." (let ((package (pypi-fetch package-name))) (and package @@ -304,7 +303,8 @@ VERSION, SOURCE-URL, HOME-PAGE, SYNOPSIS, DESCRIPTION, and LICENSE." "Return true if PACKAGE is a Python package from PyPI." (define (pypi-url? url) - (or (string-prefix? "https://pypi.python.org/" url) + (or (string-prefix? "https://pypi.org/" url) + (string-prefix? "https://pypi.python.org/" url) (string-prefix? "https://pypi.io/packages" url))) (let ((source-url (and=> (package-source package) origin-uri)) diff --git a/guix/inferior.scm b/guix/inferior.scm new file mode 100644 index 0000000000..629c2c4313 --- /dev/null +++ b/guix/inferior.scm @@ -0,0 +1,197 @@ +;;; 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 inferior) + #:use-module (srfi srfi-9) + #:use-module (srfi srfi-9 gnu) + #:use-module (ice-9 match) + #:use-module (ice-9 popen) + #:export (inferior? + open-inferior + close-inferior + inferior-eval + inferior-object? + + inferior-package? + inferior-package-name + inferior-package-version + + inferior-packages + inferior-package-synopsis + inferior-package-description)) + +;;; Commentary: +;;; +;;; This module provides a way to spawn Guix "inferior" processes and to talk +;;; to them. It allows us, from one instance of Guix, to interact with +;;; another instance of Guix coming from a different commit. +;;; +;;; Code: + +;; Inferior Guix process. +(define-record-type <inferior> + (inferior pid socket version) + inferior? + (pid inferior-pid) + (socket inferior-socket) + (version inferior-version)) ;REPL protocol version + +(define (inferior-pipe directory command) + "Return an input/output pipe on the Guix instance in DIRECTORY. This runs +'DIRECTORY/COMMAND repl' if it exists, or falls back to some other method if +it's an old Guix." + (let ((pipe (with-error-to-port (%make-void-port "w") + (lambda () + (open-pipe* OPEN_BOTH + (string-append directory "/" command) + "repl" "-t" "machine"))))) + (if (eof-object? (peek-char pipe)) + (begin + (close-pipe pipe) + + ;; Older versions of Guix didn't have a 'guix repl' command, so + ;; emulate it. + (open-pipe* OPEN_BOTH "guile" + "-L" (string-append directory "/share/guile/site/" + (effective-version)) + "-C" (string-append directory "/share/guile/site/" + (effective-version)) + "-C" (string-append directory "/lib/guile/" + (effective-version) "/site-ccache") + "-c" + (object->string + `(begin + (primitive-load ,(search-path %load-path + "guix/scripts/repl.scm")) + ((@ (guix scripts repl) machine-repl)))))) + pipe))) + +(define* (open-inferior directory #:key (command "bin/guix")) + "Open the inferior Guix in DIRECTORY, running 'DIRECTORY/COMMAND repl' or +equivalent. Return #f if the inferior could not be launched." + (define pipe + (inferior-pipe directory command)) + + (setvbuf pipe _IOLBF) + (match (read pipe) + (('repl-version 0 rest ...) + (let ((result (inferior 'pipe pipe (cons 0 rest)))) + (inferior-eval '(use-modules (guix)) result) + (inferior-eval '(use-modules (gnu)) result) + (inferior-eval '(define %package-table (make-hash-table)) + result) + result)) + (_ + #f))) + +(define (close-inferior inferior) + "Close INFERIOR." + (close-pipe (inferior-socket inferior))) + +;; Non-self-quoting object of the inferior. +(define-record-type <inferior-object> + (inferior-object address appearance) + inferior-object? + (address inferior-object-address) + (appearance inferior-object-appearance)) + +(define (write-inferior-object object port) + (match object + (($ <inferior-object> _ appearance) + (format port "#<inferior-object ~a>" appearance)))) + +(set-record-type-printer! <inferior-object> write-inferior-object) + +(define (inferior-eval exp inferior) + "Evaluate EXP in INFERIOR." + (define sexp->object + (match-lambda + (('value value) + value) + (('non-self-quoting address string) + (inferior-object address string)))) + + (write exp (inferior-socket inferior)) + (newline (inferior-socket inferior)) + (match (read (inferior-socket inferior)) + (('values objects ...) + (apply values (map sexp->object objects))) + (('exception key objects ...) + (apply throw key (map sexp->object objects))))) + + +;;; +;;; Inferior packages. +;;; + +(define-record-type <inferior-package> + (inferior-package inferior name version id) + inferior-package? + (inferior inferior-package-inferior) + (name inferior-package-name) + (version inferior-package-version) + (id inferior-package-id)) + +(define (write-inferior-package package port) + (match package + (($ <inferior-package> _ name version) + (format port "#<inferior-package ~a@~a ~a>" + name version + (number->string (object-address package) 16))))) + +(set-record-type-printer! <inferior-package> write-inferior-package) + +(define (inferior-packages inferior) + "Return the list of packages known to INFERIOR." + (let ((result (inferior-eval + '(fold-packages (lambda (package result) + (let ((id (object-address package))) + (hashv-set! %package-table id package) + (cons (list (package-name package) + (package-version package) + id) + result))) + '()) + inferior))) + (map (match-lambda + ((name version id) + (inferior-package inferior name version id))) + result))) + +(define (inferior-package-field package getter) + "Return the field of PACKAGE, an inferior package, accessed with GETTER." + (let ((inferior (inferior-package-inferior package)) + (id (inferior-package-id package))) + (inferior-eval `(,getter (hashv-ref %package-table ,id)) + inferior))) + +(define* (inferior-package-synopsis package #:key (translate? #t)) + "Return the Texinfo synopsis of PACKAGE, an inferior package. When +TRANSLATE? is true, translate it to the current locale's language." + (inferior-package-field package + (if translate? + '(compose (@ (guix ui) P_) package-synopsis) + 'package-synopsis))) + +(define* (inferior-package-description package #:key (translate? #t)) + "Return the Texinfo description of PACKAGE, an inferior package. When +TRANSLATE? is true, translate it to the current locale's language." + (inferior-package-field package + (if translate? + '(compose (@ (guix ui) P_) package-description) + 'package-description))) diff --git a/guix/packages.scm b/guix/packages.scm index c762fa7c39..a220b9c476 100644 --- a/guix/packages.scm +++ b/guix/packages.scm @@ -646,6 +646,9 @@ specifies modules in scope when evaluating SNIPPET." (let ((name (tarxz-name original-file-name))) (gexp->derivation name build + ;; TODO: Remove this on the next rebuild cycle. + #:import-creates-derivation? #t + #:graft? #f #:system system #:deprecation-warnings #t ;to avoid a rebuild diff --git a/guix/profiles.scm b/guix/profiles.scm index e6b77e8d38..f34f4fcff6 100644 --- a/guix/profiles.scm +++ b/guix/profiles.scm @@ -91,6 +91,7 @@ manifest-lookup manifest-installed? manifest-matching-entries + manifest-search-paths manifest-transaction manifest-transaction? @@ -109,6 +110,7 @@ ca-certificate-bundle %default-profile-hooks profile-derivation + profile-search-paths generation-number generation-numbers @@ -545,6 +547,14 @@ no match.." (filter matches? (manifest-entries manifest))) +(define (manifest-search-paths manifest) + "Return the list of search path specifications that apply to MANIFEST, +including the search path specification for $PATH." + (delete-duplicates + (cons $PATH + (append-map manifest-entry-search-paths + (manifest-entries manifest))))) + ;;; ;;; Manifest transactions. @@ -1367,8 +1377,7 @@ are cross-built for TARGET." (map sexp->search-path-specification (delete-duplicates '#$(map search-path-specification->sexp - (append-map manifest-entry-search-paths - (manifest-entries manifest)))))) + (manifest-search-paths manifest))))) (build-profile #$output '#$inputs #:symlink #$(if relative-symlinks? @@ -1392,6 +1401,19 @@ are cross-built for TARGET." ;; to have no substitute to offer. #:substitutable? #f))) +(define* (profile-search-paths profile + #:optional (manifest (profile-manifest profile)) + #:key (getenv (const #f))) + "Read the manifest of PROFILE and evaluate the values of search path +environment variables required by PROFILE; return a list of +specification/value pairs. If MANIFEST is not #f, it is assumed to be the +manifest of PROFILE, which avoids rereading it. + +Use GETENV to determine the current settings and report only settings not +already effective." + (evaluate-search-paths (manifest-search-paths manifest) + (list profile) getenv)) + (define (profile-regexp profile) "Return a regular expression that matches PROFILE's name and number." (make-regexp (string-append "^" (regexp-quote (basename profile)) @@ -1499,7 +1521,7 @@ the generation that was current before switching." (profile profile) (generation number))))) (else - (switch-symlinks profile generation) + (switch-symlinks profile (basename generation)) current)))) (define (switch-to-previous-generation profile) diff --git a/guix/scripts/environment.scm b/guix/scripts/environment.scm index f8a9702b30..1c04800e42 100644 --- a/guix/scripts/environment.scm +++ b/guix/scripts/environment.scm @@ -1,6 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014, 2015, 2018 David Thompson <davet@gnu.org> -;;; Copyright © 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2018 Mike Gerwitz <mtg@gnu.org> ;;; ;;; This file is part of GNU Guix. @@ -49,11 +49,6 @@ #:use-module (srfi srfi-98) #:export (guix-environment)) -(define (evaluate-profile-search-paths profile search-paths) - "Evaluate SEARCH-PATHS, a list of search-path specifications, for the -directories in PROFILE, the store path of a profile." - (evaluate-search-paths search-paths (list profile))) - ;; Protect some env vars from purification. Borrowed from nix-shell. (define %precious-variables '("HOME" "USER" "LOGNAME" "DISPLAY" "TERM" "TZ" "PAGER")) @@ -70,8 +65,8 @@ as 'HOME' and 'USER' are left untouched." (((names . _) ...) names))))) -(define (create-environment profile paths pure?) - "Set the environment variables specified by PATHS for PROFILE. When PURE? +(define* (create-environment profile manifest #:key pure?) + "Set the environment variables specified by MANIFEST for PROFILE. When PURE? is #t, unset the variables in the current environment. Otherwise, augment existing environment variables with additional search paths." (when pure? (purify-environment)) @@ -84,53 +79,41 @@ existing environment variables with additional search paths." (string-append value separator current) value) value))))) - (evaluate-profile-search-paths profile paths)) + (profile-search-paths profile manifest)) ;; Give users a way to know that they're in 'guix environment', so they can ;; adjust 'PS1' accordingly, for instance. Set it to PROFILE so users can ;; conveniently access its contents. (setenv "GUIX_ENVIRONMENT" profile)) -(define (show-search-paths profile search-paths pure?) - "Display SEARCH-PATHS applied to PROFILE. When PURE? is #t, do not augment -existing environment variables with additional search paths." +(define* (show-search-paths profile manifest #:key pure?) + "Display the search paths of MANIFEST applied to PROFILE. When PURE? is #t, +do not augment existing environment variables with additional search paths." (for-each (match-lambda ((search-path . value) (display (search-path-definition search-path value #:kind (if pure? 'exact 'prefix))) (newline))) - (evaluate-profile-search-paths profile search-paths))) + (profile-search-paths profile manifest))) -(define (strip-input-name input) - "Remove the name element from the tuple INPUT." +(define (input->manifest-entry input) + "Return a manifest entry for INPUT, or #f if INPUT does not correspond to a +package." (match input - ((_ package) package) - ((_ package output) - (list package output)))) - -(define (package+propagated-inputs package output) - "Return the union of PACKAGE's OUTPUT and its transitive propagated inputs." - (cons (list package output) - (map strip-input-name - (package-transitive-propagated-inputs package)))) - -(define (package-or-package+output? expr) - "Return #t if EXPR is a package or a 2 element list consisting of a package -and an output string." - (match expr - ((or (? package?) ; bare package object - ((? package?) (? string?))) ; package+output tuple - #t) - (_ #f))) + ((_ (? package? package)) + (package->manifest-entry package)) + ((_ (? package? package) output) + (package->manifest-entry package output)) + (_ + #f))) (define (package-environment-inputs package) - "Return a list of the transitive input packages for PACKAGE." + "Return a list of manifest entries corresponding to the transitive input +packages for PACKAGE." ;; Remove non-package inputs such as origin records. - (filter package-or-package+output? - (map strip-input-name - (bag-transitive-inputs - (package->bag package))))) + (filter-map input->manifest-entry + (bag-transitive-inputs (package->bag package)))) (define (show-help) (display (G_ "Usage: guix environment [OPTION]... PACKAGE... [-- COMMAND...] @@ -287,55 +270,50 @@ COMMAND or an interactive shell in that environment.\n")) (_ memo))) '() alist)) -(define (compact lst) - "Remove all #f elements from LST." - (filter identity lst)) - (define (options/resolve-packages opts) - "Return OPTS with package specification strings replaced by actual -packages." - (define (package->output package mode) - (match package - ((? package?) - (list mode package "out")) - (((? package? package) (? string? output)) - (list mode package output)))) + "Return OPTS with package specification strings replaced by manifest entries +for the corresponding packages." + (define (manifest-entry=? e1 e2) + (and (eq? (manifest-entry-item e1) (manifest-entry-item e2)) + (string=? (manifest-entry-output e1) + (manifest-entry-output e2)))) (define (packages->outputs packages mode) (match packages - ((? package-or-package+output? package) ; single package - (list (package->output package mode))) - (((? package-or-package+output?) ...) ; many packages - (map (cut package->output <> mode) packages)))) - - (define (manifest->outputs manifest) - (map (lambda (entry) - (cons 'ad-hoc-package ; manifests are implicitly ad-hoc - (if (package? (manifest-entry-item entry)) - (list (manifest-entry-item entry) - (manifest-entry-output entry)) - ;; Direct store paths have no output. - (list (manifest-entry-item entry))))) - (manifest-entries manifest))) - - (compact - (append-map (match-lambda - (('package mode (? string? spec)) - (let-values (((package output) - (specification->package+output spec))) - (list (list mode package output)))) - (('expression mode str) - ;; Add all the outputs of the package STR evaluates to. - (packages->outputs (read/eval str) mode)) - (('load mode file) - ;; Add all the outputs of the package defined in FILE. - (let ((module (make-user-module '()))) - (packages->outputs (load* file module) mode))) - (('manifest . file) - (let ((module (make-user-module '((guix profiles) (gnu))))) - (manifest->outputs (load* file module)))) - (_ '(#f))) - opts))) + ((? package? package) + (if (eq? mode 'ad-hoc-package) + (list (package->manifest-entry package)) + (package-environment-inputs package))) + (((? package? package) (? string? output)) + (if (eq? mode 'ad-hoc-package) + (list (package->manifest-entry package output)) + (package-environment-inputs package))) + ((lst ...) + (append-map (cut packages->outputs <> mode) lst)))) + + (manifest + (delete-duplicates + (append-map (match-lambda + (('package 'ad-hoc-package (? string? spec)) + (let-values (((package output) + (specification->package+output spec))) + (list (package->manifest-entry package output)))) + (('package 'package (? string? spec)) + (package-environment-inputs + (specification->package+output spec))) + (('expression mode str) + ;; Add all the outputs of the package STR evaluates to. + (packages->outputs (read/eval str) mode)) + (('load mode file) + ;; Add all the outputs of the package defined in FILE. + (let ((module (make-user-module '()))) + (packages->outputs (load* file module) mode))) + (('manifest . file) + (let ((module (make-user-module '((guix profiles) (gnu))))) + (manifest-entries (load* file module)))) + (_ '())) + opts) + manifest-entry=?))) (define* (build-environment derivations opts) "Build the DERIVATIONS required by the environment using the build options @@ -350,11 +328,10 @@ in OPTS." (return #f) (built-derivations derivations))))) -(define (inputs->profile-derivation inputs system bootstrap?) - "Return the derivation for a profile consisting of INPUTS for SYSTEM. -BOOTSTRAP? specifies whether to use the bootstrap Guile to build the -profile." - (profile-derivation (packages->manifest inputs) +(define (manifest->derivation manifest system bootstrap?) + "Return the derivation for a profile of MANIFEST. +BOOTSTRAP? specifies whether to use the bootstrap Guile to build the profile." + (profile-derivation manifest #:system system ;; Packages can have conflicting inputs, or explicit @@ -397,32 +374,34 @@ and suitable for 'exit'." (define exit/status (compose exit status->exit-code)) (define primitive-exit/status (compose primitive-exit status->exit-code)) -(define (launch-environment command inputs paths pure?) +(define* (launch-environment command profile manifest + #:key pure?) "Run COMMAND in a new environment containing INPUTS, using the native search paths defined by the list PATHS. When PURE?, pre-existing environment variables are cleared before setting the new ones." ;; Properly handle SIGINT, so pressing C-c in an interactive terminal ;; application works. (sigaction SIGINT SIG_DFL) - (create-environment inputs paths pure?) + (create-environment profile manifest #:pure? pure?) (match command ((program . args) (apply execlp program program args)))) -(define (launch-environment/fork command inputs paths pure?) - "Run COMMAND in a new process with an environment containing INPUTS, using -the native search paths defined by the list PATHS. When PURE?, pre-existing -environment variables are cleared before setting the new ones." +(define* (launch-environment/fork command profile manifest #:key pure?) + "Run COMMAND in a new process with an environment containing PROFILE, with +the search paths specified by MANIFEST. When PURE?, pre-existing environment +variables are cleared before setting the new ones." (match (primitive-fork) - (0 (launch-environment command inputs paths pure?)) + (0 (launch-environment command profile manifest + #:pure? pure?)) (pid (match (waitpid pid) ((_ . status) status))))) (define* (launch-environment/container #:key command bash user user-mappings - profile paths link-profile? network?) + profile manifest link-profile? network?) "Run COMMAND within a container that features the software in PROFILE. -Environment variables are set according to PATHS, a list of native search -paths. The global shell is BASH, a file name for a GNU Bash binary in the +Environment variables are set according to the search paths of MANIFEST. +The global shell is BASH, a file name for a GNU Bash binary in the store. When NETWORK?, access to the host system network is permitted. USER-MAPPINGS, a list of file system mappings, contains the user-specified host file systems to mount inside the container. If USER is not #f, each @@ -514,7 +493,7 @@ will be used for the passwd entry. LINK-PROFILE? creates a symbolic link from (primitive-exit/status ;; A container's environment is already purified, so no need to ;; request it be purified again. - (launch-environment command profile paths #f))) + (launch-environment command profile manifest #:pure? #f))) #:namespaces (if network? (delq 'net %namespaces) ; share host network %namespaces))))))) @@ -671,25 +650,8 @@ message if any test fails." ;; within the container. '("/bin/sh") (list %default-shell)))) - (packages (options/resolve-packages opts)) - (mappings (pick-all opts 'file-system-mapping)) - (inputs (delete-duplicates - (append-map (match-lambda - (('ad-hoc-package package output) - (package+propagated-inputs package - output)) - (('package package _) - (package-environment-inputs package))) - packages))) - (paths (delete-duplicates - (cons $PATH - (append-map (match-lambda - ((or ((? package? p) _ ...) - (? package? p)) - (package-native-search-paths p)) - (_ '())) - inputs)) - eq?))) + (manifest (options/resolve-packages opts)) + (mappings (pick-all opts 'file-system-mapping))) (when container? (assert-container-features)) @@ -714,8 +676,8 @@ message if any test fails." (mlet* %store-monad ((bash (environment-bash container? bootstrap? system)) - (prof-drv (inputs->profile-derivation - inputs system bootstrap?)) + (prof-drv (manifest->derivation + manifest system bootstrap?)) (profile -> (derivation->output-path prof-drv)) (gc-root -> (assoc-ref opts 'gc-root))) @@ -734,7 +696,7 @@ message if any test fails." ((assoc-ref opts 'dry-run?) (return #t)) ((assoc-ref opts 'search-paths) - (show-search-paths profile paths pure?) + (show-search-paths profile manifest #:pure? pure?) (return #t)) (container? (let ((bash-binary @@ -747,11 +709,11 @@ message if any test fails." #:user user #:user-mappings mappings #:profile profile - #:paths paths + #:manifest manifest #:link-profile? link-prof? #:network? network?))) (else (return (exit/status - (launch-environment/fork command profile - paths pure?))))))))))))) + (launch-environment/fork command profile manifest + #:pure? pure?))))))))))))) diff --git a/guix/scripts/import.scm b/guix/scripts/import.scm index f8cb85700d..0b326e1049 100644 --- a/guix/scripts/import.scm +++ b/guix/scripts/import.scm @@ -75,7 +75,7 @@ rather than \\n." ;;; (define importers '("gnu" "nix" "pypi" "cpan" "hackage" "stackage" "elpa" "gem" - "cran" "crate" "texlive" "json")) + "cran" "crate" "texlive" "json" "opam")) (define (resolve-importer name) (let ((module (resolve-interface diff --git a/guix/scripts/import/gem.scm b/guix/scripts/import/gem.scm index 349a0a072a..b6d9ccaae4 100644 --- a/guix/scripts/import/gem.scm +++ b/guix/scripts/import/gem.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015 David Thompson <davet@gnu.org> +;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -25,6 +26,7 @@ #:use-module (srfi srfi-1) #:use-module (srfi srfi-11) #:use-module (srfi srfi-37) + #:use-module (srfi srfi-41) #:use-module (ice-9 match) #:use-module (ice-9 format) #:export (guix-import-gem)) @@ -44,6 +46,9 @@ Import and convert the RubyGems package for PACKAGE-NAME.\n")) -h, --help display this help and exit")) (display (G_ " -V, --version display version information and exit")) + (display (G_ " + -r, --recursive generate package expressions for all Gem packages\ + that are not yet in Guix")) (newline) (show-bug-report-information)) @@ -56,6 +61,9 @@ Import and convert the RubyGems package for PACKAGE-NAME.\n")) (option '(#\V "version") #f #f (lambda args (show-version-and-exit "guix import pypi"))) + (option '(#\r "recursive") #f #f + (lambda (opt name arg result) + (alist-cons 'recursive #t result))) %standard-import-options)) @@ -81,11 +89,20 @@ Import and convert the RubyGems package for PACKAGE-NAME.\n")) (reverse opts)))) (match args ((package-name) - (let ((sexp (gem->guix-package package-name))) - (unless sexp - (leave (G_ "failed to download meta-data for package '~a'~%") - package-name)) - sexp)) + (if (assoc-ref opts 'recursive) + (map (match-lambda + ((and ('package ('name name) . rest) pkg) + `(define-public ,(string->symbol name) + ,pkg)) + (_ #f)) + (reverse + (stream->list + (gem-recursive-import package-name 'rubygems)))) + (let ((sexp (gem->guix-package package-name))) + (unless sexp + (leave (G_ "failed to download meta-data for package '~a'~%") + package-name)) + sexp))) (() (leave (G_ "too few arguments~%"))) ((many ...) diff --git a/guix/scripts/import/opam.scm b/guix/scripts/import/opam.scm new file mode 100644 index 0000000000..b549878742 --- /dev/null +++ b/guix/scripts/import/opam.scm @@ -0,0 +1,92 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2018 Julien Lepiller <julien@lepiller.eu> +;;; +;;; 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 import opam) + #:use-module (guix ui) + #:use-module (guix utils) + #:use-module (guix scripts) + #:use-module (guix import opam) + #:use-module (guix scripts import) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-11) + #:use-module (srfi srfi-37) + #:use-module (ice-9 match) + #:use-module (ice-9 format) + #:export (guix-import-opam)) + + +;;; +;;; Command-line options. +;;; + +(define %default-options + '()) + +(define (show-help) + (display (G_ "Usage: guix import opam PACKAGE-NAME +Import and convert the opam package for PACKAGE-NAME.\n")) + (display (G_ " + -h, --help display this help and exit")) + (display (G_ " + -V, --version display version information and exit")) + (newline) + (show-bug-report-information)) + +(define %options + ;; Specification of the command-line options. + (cons* (option '(#\h "help") #f #f + (lambda args + (show-help) + (exit 0))) + (option '(#\V "version") #f #f + (lambda args + (show-version-and-exit "guix import opam"))) + %standard-import-options)) + + +;;; +;;; Entry point. +;;; + +(define (guix-import-opam . args) + (define (parse-options) + ;; Return the alist of option values. + (args-fold* args %options + (lambda (opt name arg result) + (leave (G_ "~A: unrecognized option~%") name)) + (lambda (arg result) + (alist-cons 'argument arg result)) + %default-options)) + + (let* ((opts (parse-options)) + (args (filter-map (match-lambda + (('argument . value) + value) + (_ #f)) + (reverse opts)))) + (match args + ((package-name) + (let ((sexp (opam->guix-package package-name))) + (unless sexp + (leave (G_ "failed to download meta-data for package '~a'~%") + package-name)) + sexp)) + (() + (leave (G_ "too few arguments~%"))) + ((many ...) + (leave (G_ "too many arguments~%")))))) diff --git a/guix/scripts/pack.scm b/guix/scripts/pack.scm index 6d5d745bc8..729850839b 100644 --- a/guix/scripts/pack.scm +++ b/guix/scripts/pack.scm @@ -1,6 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015, 2017, 2018 Ludovic Courtès <ludo@gnu.org> -;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2017, 2018 Ricardo Wurmus <rekado@elephly.net> ;;; Copyright © 2018 Konrad Hinsen <konrad.hinsen@fastmail.net> ;;; Copyright © 2018 Chris Marusich <cmmarusich@gmail.com> @@ -69,7 +68,7 @@ (compressor "lzip" ".lz" #~(#+(file-append lzip "/bin/lzip") "-9")) (compressor "xz" ".xz" - #~(#+(file-append xz "/bin/xz") "-e -T0")) + #~(#+(file-append xz "/bin/xz") "-e")) (compressor "bzip2" ".bz2" #~(#+(file-append bzip2 "/bin/bzip2") "-9")) (compressor "none" "" #f))) @@ -77,7 +76,7 @@ ;; This one is only for use in this module, so don't put it in %compressors. (define bootstrap-xz (compressor "bootstrap-xz" ".xz" - #~(#+(file-append %bootstrap-coreutils&co "/bin/xz") "-e -T0"))) + #~(#+(file-append %bootstrap-coreutils&co "/bin/xz") "-e"))) (define (lookup-compressor name) "Return the compressor object called NAME. Error out if it could not be diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm index 29829f52c8..b38a55d01c 100644 --- a/guix/scripts/package.scm +++ b/guix/scripts/package.scm @@ -190,7 +190,7 @@ do not treat collisions in MANIFEST as an error." (let* ((entries (manifest-entries manifest)) (count (length entries))) (switch-symlinks name prof) - (switch-symlinks profile name) + (switch-symlinks profile (basename name)) (unless (string=? profile %current-profile) (register-gc-root store name)) (format #t (N_ "~a package in profile~%" diff --git a/guix/scripts/pull.scm b/guix/scripts/pull.scm index 7202e3cc16..433502b5de 100644 --- a/guix/scripts/pull.scm +++ b/guix/scripts/pull.scm @@ -28,9 +28,12 @@ #:use-module (guix profiles) #:use-module (guix gexp) #:use-module (guix grafts) + #:use-module (guix memoization) #:use-module (guix monads) + #:autoload (guix inferior) (open-inferior) #:use-module (guix scripts build) #:autoload (guix self) (whole-package) + #:use-module (gnu packages) #:autoload (gnu packages ssh) (guile-ssh) #:autoload (gnu packages tls) (gnutls) #:use-module ((guix scripts package) #:select (build-and-use-profile)) @@ -45,9 +48,11 @@ #:use-module ((gnu packages certs) #:select (le-certs)) #:use-module (srfi srfi-1) #:use-module (srfi srfi-11) + #:use-module (srfi srfi-26) #:use-module (srfi srfi-35) #:use-module (srfi srfi-37) #:use-module (ice-9 match) + #:use-module (ice-9 vlist) #:export (guix-pull)) (module-autoload! (resolve-module '(guix scripts pull)) @@ -230,12 +235,32 @@ URL, BRANCH, and COMMIT as a property in the manifest entry." (branch ,branch) (commit ,commit)))))))))) +(define (display-profile-news profile) + "Display what's up in PROFILE--new packages, and all that." + (match (memv (generation-number profile) + (reverse (profile-generations profile))) + ((current previous _ ...) + (newline) + (let ((old (fold-packages (lambda (package result) + (alist-cons (package-name package) + (package-version package) + result)) + '())) + (new (profile-package-alist + (generation-file-name profile current)))) + (display-new/upgraded-packages old new + #:heading (G_ "New in this revision:\n")))) + (_ #t))) + (define* (build-and-install source config-dir #:key verbose? url branch commit) "Build the tool from SOURCE, and install it in CONFIG-DIR." (define update-profile (store-lift build-and-use-profile)) + (define profile + (string-append config-dir "/current")) + (mlet* %store-monad ((drv (build-from-source source #:commit commit #:verbose? verbose?)) @@ -243,8 +268,9 @@ URL, BRANCH, and COMMIT as a property in the manifest entry." #:url url #:branch branch #:commit commit))) - (update-profile (string-append config-dir "/current") - (manifest (list entry))))) + (mbegin %store-monad + (update-profile profile (manifest (list entry))) + (return (display-profile-news profile))))) (define (honor-lets-encrypt-certificates! store) "Tell Guile-Git to use the Let's Encrypt certificates." @@ -289,6 +315,7 @@ certificates~%")) (define (display-profile-content profile number) "Display the packages in PROFILE, generation NUMBER, in a human-readable way and displaying details about the channel's source code." + (display-generation profile number) (for-each (lambda (entry) (format #t " ~a ~a~%" (manifest-entry-name entry) @@ -310,6 +337,90 @@ way and displaying details about the channel's source code." (manifest-entries (profile-manifest (generation-file-name profile number)))))) +(define (indented-string str indent) + "Return STR with each newline preceded by IDENT spaces." + (define indent-string + (make-list indent #\space)) + + (list->string + (string-fold-right (lambda (chr result) + (if (eqv? chr #\newline) + (cons chr (append indent-string result)) + (cons chr result))) + '() + str))) + +(define profile-package-alist + (mlambda (profile) + "Return a name/version alist representing the packages in PROFILE." + (fold (lambda (package lst) + (alist-cons (inferior-package-name package) + (inferior-package-version package) + lst)) + '() + (let* ((inferior (open-inferior profile)) + (packages (inferior-packages inferior))) + (close-inferior inferior) + packages)))) + +(define* (display-new/upgraded-packages alist1 alist2 + #:key (heading "")) + "Given the two package name/version alists ALIST1 and ALIST2, display the +list of new and upgraded packages going from ALIST1 to ALIST2. When ALIST1 +and ALIST2 differ, display HEADING upfront." + (let* ((old (fold (match-lambda* + (((name . version) table) + (vhash-cons name version table))) + vlist-null + alist1)) + (new (remove (match-lambda + ((name . _) + (vhash-assoc name old))) + alist2)) + (upgraded (filter-map (match-lambda + ((name . new-version) + (match (vhash-fold* cons '() name old) + (() #f) + ((= (cut sort <> version>?) old-versions) + (and (version>? new-version + (first old-versions)) + (string-append name "@" + new-version)))))) + alist2))) + (unless (and (null? new) (null? upgraded)) + (display heading)) + + (match (length new) + (0 #t) + (count + (format #t (N_ " ~h new package: ~a~%" + " ~h new packages: ~a~%" count) + count + (indented-string + (fill-paragraph (string-join (sort (map first new) string<?) + ", ") + (- (%text-width) 4) 30) + 4)))) + (match (length upgraded) + (0 #t) + (count + (format #t (N_ " ~h package upgraded: ~a~%" + " ~h packages upgraded: ~a~%" count) + count + (indented-string + (fill-paragraph (string-join (sort upgraded string<?) ", ") + (- (%text-width) 4) 35) + 4)))))) + +(define (display-profile-content-diff profile gen1 gen2) + "Display the changes in PROFILE GEN2 compared to generation GEN1." + (define (package-alist generation) + (profile-package-alist (generation-file-name profile generation))) + + (display-profile-content profile gen2) + (display-new/upgraded-packages (package-alist gen1) + (package-alist gen2))) + (define (process-query opts) "Process any query specified by OPTS." (define profile @@ -317,29 +428,32 @@ way and displaying details about the channel's source code." (match (assoc-ref opts 'query) (('list-generations pattern) - (define (list-generation display-function number) - (unless (zero? number) - (display-generation profile number) - (display-function profile number) - (newline))) + (define (list-generations profile numbers) + (match numbers + ((first rest ...) + (display-profile-content profile first) + (let loop ((numbers numbers)) + (match numbers + ((first second rest ...) + (display-profile-content-diff profile + first second) + (loop (cons second rest))) + ((_) #t) + (() #t)))))) (leave-on-EPIPE (cond ((not (file-exists? profile)) ; XXX: race condition (raise (condition (&profile-not-found-error (profile profile))))) ((string-null? pattern) - (for-each (lambda (generation) - (list-generation display-profile-content generation)) - (profile-generations profile))) + (list-generations profile (profile-generations profile))) ((matching-generations pattern profile) => (match-lambda (() (exit 1)) ((numbers ...) - (for-each (lambda (generation) - (list-generation display-profile-content generation)) - numbers))))))))) + (list-generations profile numbers))))))))) (define (guix-pull . args) diff --git a/guix/scripts/repl.scm b/guix/scripts/repl.scm new file mode 100644 index 0000000000..b157833a49 --- /dev/null +++ b/guix/scripts/repl.scm @@ -0,0 +1,199 @@ +;;; 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 repl) + #:use-module (guix ui) + #:use-module (guix scripts) + #:use-module (guix utils) + #:use-module (guix packages) + #:use-module (gnu packages) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-37) + #:use-module (ice-9 match) + #:use-module (rnrs bytevectors) + #:autoload (system repl repl) (start-repl) + #:autoload (system repl server) + (make-tcp-server-socket make-unix-domain-server-socket) + #:export (machine-repl + guix-repl)) + +;;; Commentary: +;;; +;;; This command provides a Guile REPL + +(define %default-options + `((type . guile))) + +(define %options + (list (option '(#\h "help") #f #f + (lambda args + (show-help) + (exit 0))) + (option '(#\V "version") #f #f + (lambda args + (show-version-and-exit "guix repl"))) + (option '(#\t "type") #t #f + (lambda (opt name arg result) + (alist-cons 'type (string->symbol arg) result))) + (option '("listen") #t #f + (lambda (opt name arg result) + (alist-cons 'listen arg result))))) + + +(define (show-help) + (display (G_ "Usage: guix repl [OPTIONS...] +Start a Guile REPL in the Guix execution environment.\n")) + (display (G_ " + -t, --type=TYPE start a REPL of the given TYPE")) + (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 (self-quoting? x) + "Return #t if X is self-quoting." + (letrec-syntax ((one-of (syntax-rules () + ((_) #f) + ((_ pred rest ...) + (or (pred x) + (one-of rest ...)))))) + (one-of symbol? string? pair? null? vector? + bytevector? number? boolean?))) + +(define user-module + ;; Module where we execute user code. + (let ((module (resolve-module '(guix-user) #f #f #:ensure #t))) + (beautify-user-module! module) + module)) + +(define* (machine-repl #:optional + (input (current-input-port)) + (output (current-output-port))) + "Run a machine-usable REPL over ports INPUT and OUTPUT. + +The protocol of this REPL is meant to be machine-readable and provides proper +support to represent multiple-value returns, exceptions, objects that lack a +read syntax, and so on. As such it is more convenient and robust than parsing +Guile's REPL prompt." + (define (value->sexp value) + (if (self-quoting? value) + `(value ,value) + `(non-self-quoting ,(object-address value) + ,(object->string value)))) + + (write `(repl-version 0 0) output) + (newline output) + (force-output output) + + (let loop () + (match (read input) + ((? eof-object?) #t) + (exp + (catch #t + (lambda () + (let ((results (call-with-values + (lambda () + + (primitive-eval exp)) + list))) + (write `(values ,@(map value->sexp results)) + output) + (newline output) + (force-output output))) + (lambda (key . args) + (write `(exception ,key ,@(map value->sexp args))) + (newline output) + (force-output output))) + (loop))))) + +(define (call-with-connection spec thunk) + "Dynamically-bind the current input and output ports according to SPEC and +call THUNK." + (if (not spec) + (thunk) + + ;; Note: the "PROTO:" prefix in SPEC is here so that we can eventually + ;; parse things like "fd:123" in a non-ambiguous way. + (match (string-index spec #\:) + (#f + (leave (G_ "~A: invalid listen specification~%") spec)) + (index + (let ((protocol (string-take spec index)) + (address (string-drop spec (+ index 1)))) + (define socket + (match protocol + ("tcp" + (make-tcp-server-socket #:port (string->number address))) + ("unix" + (make-unix-domain-server-socket #:path address)) + (_ + (leave (G_ "~A: unsupported protocol family~%") + protocol)))) + + (listen socket 10) + (let loop () + (match (accept socket) + ((connection . address) + (if (= AF_UNIX (sockaddr:fam address)) + (info (G_ "accepted connection~%")) + (info (G_ "accepted connection from ~a~%") + (inet-ntop (sockaddr:fam address) + (sockaddr:addr address)))) + (dynamic-wind + (const #t) + (lambda () + (parameterize ((current-input-port connection) + (current-output-port connection)) + (thunk))) + (lambda () + (false-if-exception (close-port connection)) + (info (G_ "connection closed~%")))))) + (loop))))))) + + +(define (guix-repl . args) + (define opts + ;; Return the list of package names. + (args-fold* args %options + (lambda (opt name arg result) + (leave (G_ "~A: unrecognized option~%") name)) + (lambda (arg result) + (leave (G_ "~A: extraneous argument~%") arg)) + %default-options)) + + (with-error-handling + (let ((type (assoc-ref opts 'type))) + (call-with-connection (assoc-ref opts 'listen) + (lambda () + (case type + ((guile) + (save-module-excursion + (lambda () + (set-current-module user-module) + (start-repl)))) + ((machine) + (machine-repl)) + (else + (leave (G_ "~a: unknown type of REPL~%") type)))))))) + +;; Local Variables: +;; eval: (put 'call-with-connection 'scheme-indent-function 1) +;; End: diff --git a/guix/self.scm b/guix/self.scm index c9c7138e65..5ad644b1df 100644 --- a/guix/self.scm +++ b/guix/self.scm @@ -112,6 +112,27 @@ GUILE-VERSION (\"2.0\" or \"2.2\"), or #f if none of the packages matches." (dependencies node-dependencies) ;list of nodes (compiled node-compiled)) ;node -> lowerable object +;; File mappings are essentially an alist as passed to 'imported-files'. +(define-record-type <file-mapping> + (file-mapping name alist) + file-mapping? + (name file-mapping-name) + (alist file-mapping-alist)) + +(define-gexp-compiler (file-mapping-compiler (mapping <file-mapping>) + system target) + ;; Here we use 'imported-files', which can arrange to directly import all + ;; the files instead of creating a derivation, when possible. + (imported-files (map (match-lambda + ((destination (? local-file? file)) + (cons destination + (local-file-absolute-file-name file))) + ((destination source) + (cons destination source))) ;silliness + (file-mapping-alist mapping)) + #:name (file-mapping-name mapping) + #:system system)) + (define (node-fold proc init nodes) (let loop ((nodes nodes) (visited (setq)) @@ -166,8 +187,8 @@ must be present in the search path." (closure modules (node-modules/recursive dependencies)))) (module-files (map module->import modules)) - (source (imported-files (string-append name "-source") - (append module-files extra-files)))) + (source (file-mapping (string-append name "-source") + (append module-files extra-files)))) (node name modules source dependencies (compiled-modules name source (map car module-files) @@ -766,38 +787,6 @@ assumed to be part of MODULES." ;;; Building. ;;; -(define (imported-files name files) - ;; This is a non-monadic, simplified version of 'imported-files' from (guix - ;; gexp). - (define same-target? - (match-lambda* - (((file1 . _) (file2 . _)) - (string=? file1 file2)))) - - (define build - (with-imported-modules (source-module-closure - '((guix build utils))) - #~(begin - (use-modules (ice-9 match) - (guix build utils)) - - (mkdir (ungexp output)) (chdir (ungexp output)) - (for-each (match-lambda - ((final-path store-path) - (mkdir-p (dirname final-path)) - - ;; Note: We need regular files to be regular files, not - ;; symlinks, as this makes a difference for - ;; 'add-to-store'. - (copy-file store-path final-path))) - '#$(delete-duplicates files same-target?))))) - - ;; We're just copying files around, no need to substitute or offload it. - (computed-file name build - #:options '(#:local-build? #t - #:substitutable? #f - #:env-vars (("COLUMNS" . "200"))))) - (define* (compiled-modules name module-tree module-files #:optional (dependencies '()) diff --git a/guix/serialization.scm b/guix/serialization.scm index b41a0a09d1..129374f541 100644 --- a/guix/serialization.scm +++ b/guix/serialization.scm @@ -47,6 +47,7 @@ nar-read-error-token write-file + write-file-tree restore-file)) ;;; Comment: @@ -211,14 +212,19 @@ substitute invalid byte sequences with question marks. This is a (lambda () (close-port port)))))) - (write-string "contents" p) - (write-long-long size p) (call-with-binary-input-file file - ;; Use 'sendfile' when P is a file port. - (if (file-port? p) - (cut sendfile p <> size 0) - (cut dump <> p size))) - (write-padding size p)) + (lambda (input) + (write-contents-from-port input p size)))) + +(define (write-contents-from-port input output size) + "Write SIZE bytes from port INPUT to port OUTPUT." + (write-string "contents" output) + (write-long-long size output) + ;; Use 'sendfile' when both OUTPUT and INPUT are file ports. + (if (and (file-port? output) (file-port? input)) + (sendfile output input size 0) + (dump input output size)) + (write-padding size output)) (define (read-contents in out) "Read the contents of a file from the Nar at IN, write it to OUT, and return @@ -263,47 +269,113 @@ the size in bytes." sub-directories of FILE as needed. For each directory entry, call (SELECT? FILE STAT), where FILE is the entry's absolute file name and STAT is the result of 'lstat'; exclude entries for which SELECT? does not return true." + (write-file-tree file port + #:file-type+size + (lambda (file) + (let* ((stat (lstat file)) + (size (stat:size stat))) + (case (stat:type stat) + ((directory) + (values 'directory size)) + ((regular) + (values (if (zero? (logand (stat:mode stat) + #o100)) + 'regular + 'executable) + size)) + (else + (values (stat:type stat) size))))) ;bah! + #:file-port (cut open-file <> "r0b") + #:symlink-target readlink + + #:directory-entries + (lambda (directory) + ;; 'scandir' defaults to 'string-locale<?' to sort files, + ;; but this happens to be case-insensitive (at least in + ;; 'en_US' locale on libc 2.18.) Conversely, we want + ;; files to be sorted in a case-sensitive fashion. + (define basenames + (scandir directory (negate (cut member <> '("." ".."))) + string<?)) + + (filter-map (lambda (base) + (let ((file (string-append directory + "/" base))) + (and (not (member base '("." ".."))) + (select? file (lstat file)) + base))) + basenames)) + + ;; The 'scandir' call above gives us filtered and sorted + ;; entries, so no post-processing is needed. + #:postprocess-entries identity)) + +(define (filter/sort-directory-entries lst) + "Remove dot and dot-dot entries from LST, and sort it in lexicographical +order." + (delete-duplicates + (sort (remove (cute member <> '("." "..")) lst) + string<?) + string=?)) + +(define* (write-file-tree file port + #:key + file-type+size + file-port + symlink-target + directory-entries + (postprocess-entries filter/sort-directory-entries)) + "Write the contents of FILE to PORT in Nar format, recursing into +sub-directories of FILE as needed. + +This procedure does not make any file-system I/O calls. Instead, it calls the +user-provided FILE-TYPE+SIZE, FILE-PORT, SYMLINK-TARGET, and DIRECTORY-ENTRIES +procedures, which roughly correspond to 'lstat', 'readlink', and 'scandir'. +POSTPROCESS-ENTRIES ensures that directory entries are valid; leave it as-is +unless you know that DIRECTORY-ENTRIES provide filtered and sorted entries, in +which case you can use 'identity'." (define p port) (write-string %archive-version-1 p) - (let dump ((f file) (s (lstat file))) + (let dump ((f file)) + (define-values (type size) + (file-type+size f)) + (write-string "(" p) - (case (stat:type s) - ((regular) + (case type + ((regular executable) (write-string "type" p) (write-string "regular" p) - (if (not (zero? (logand (stat:mode s) #o100))) - (begin - (write-string "executable" p) - (write-string "" p))) - (write-contents f p (stat:size s))) + (when (eq? 'executable type) + (write-string "executable" p) + (write-string "" p)) + (let ((input (file-port f))) + (dynamic-wind + (const #t) + (lambda () + (write-contents-from-port input p size)) + (lambda () + (close-port input))))) ((directory) (write-string "type" p) (write-string "directory" p) - (let ((entries - ;; 'scandir' defaults to 'string-locale<?' to sort files, but - ;; this happens to be case-insensitive (at least in 'en_US' - ;; locale on libc 2.18.) Conversely, we want files to be - ;; sorted in a case-sensitive fashion. - (scandir f (negate (cut member <> '("." ".."))) string<?))) + (let ((entries (postprocess-entries (directory-entries f)))) (for-each (lambda (e) - (let* ((f (string-append f "/" e)) - (s (lstat f))) - (when (select? f s) - (write-string "entry" p) - (write-string "(" p) - (write-string "name" p) - (write-string e p) - (write-string "node" p) - (dump f s) - (write-string ")" p)))) + (let* ((f (string-append f "/" e))) + (write-string "entry" p) + (write-string "(" p) + (write-string "name" p) + (write-string e p) + (write-string "node" p) + (dump f) + (write-string ")" p))) entries))) ((symlink) (write-string "type" p) (write-string "symlink" p) (write-string "target" p) - (write-string (readlink f) p)) + (write-string (symlink-target f) p)) (else (raise (condition (&message (message "unsupported file type")) (&nar-error (file f) (port port)))))) @@ -379,4 +451,8 @@ Restore it as FILE." (&message (message "unsupported nar entry type")) (&nar-read-error (port port) (file file) (token x))))))))) +;;; Local Variables: +;;; eval: (put 'call-with-binary-input-file 'scheme-indent-function 1) +;;; End: + ;;; serialization.scm ends here diff --git a/guix/store.scm b/guix/store.scm index bac42f2738..f41a1e2690 100644 --- a/guix/store.scm +++ b/guix/store.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2018 Jan Nieuwenhuizen <janneke@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -77,6 +78,8 @@ add-data-to-store add-text-to-store add-to-store + add-file-tree-to-store + binary-file build-things build query-failed-paths @@ -135,6 +138,7 @@ set-current-system text-file interned-file + interned-file-tree %store-prefix store-path @@ -949,6 +953,101 @@ where FILE is the entry's absolute file name and STAT is the result of (hash-set! cache args path) path)))))) +(define %not-slash + (char-set-complement (char-set #\/))) + +(define* (add-file-tree-to-store server tree + #:key + (hash-algo "sha256") + (recursive? #t)) + "Add the given TREE to the store on SERVER. TREE must be an entry such as: + + (\"my-tree\" directory + (\"a\" regular (data \"hello\")) + (\"b\" symlink \"a\") + (\"c\" directory + (\"d\" executable (file \"/bin/sh\")))) + +This is a generalized version of 'add-to-store'. It allows you to reproduce +an arbitrary directory layout in the store without creating a derivation." + + ;; Note: The format of TREE was chosen to allow trees to be compared with + ;; 'equal?', which in turn allows us to memoize things. + + (define root + ;; TREE is a single entry. + (list tree)) + + (define basename + (match tree + ((name . _) name))) + + (define (lookup file) + (let loop ((components (string-tokenize file %not-slash)) + (tree root)) + (match components + ((basename) + (assoc basename tree)) + ((head . rest) + (loop rest + (match (assoc-ref tree head) + (('directory . entries) entries))))))) + + (define (file-type+size file) + (match (lookup file) + ((_ (and type (or 'directory 'symlink)) . _) + (values type 0)) + ((_ type ('file file)) + (values type (stat:size (stat file)))) + ((_ type ('data (? string? data))) + (values type (string-length data))) + ((_ type ('data (? bytevector? data))) + (values type (bytevector-length data))))) + + (define (file-port file) + (match (lookup file) + ((_ (or 'regular 'executable) content) + (match content + (('file (? string? file)) + (open-file file "r0b")) + (('data (? string? str)) + (open-input-string str)) + (('data (? bytevector? bv)) + (open-bytevector-input-port bv)))))) + + (define (symlink-target file) + (match (lookup file) + ((_ 'symlink target) target))) + + (define (directory-entries directory) + (match (lookup directory) + ((_ 'directory (names . _) ...) names))) + + (define cache + (nix-server-add-to-store-cache server)) + + (or (hash-ref cache tree) + (begin + ;; We don't use the 'operation' macro so we can use 'write-file-tree' + ;; instead of 'write-file'. + (record-operation 'add-to-store/tree) + (let ((port (nix-server-socket server))) + (write-int (operation-id add-to-store) port) + (write-string basename port) + (write-int 1 port) ;obsolete, must be #t + (write-int (if recursive? 1 0) port) + (write-string hash-algo port) + (write-file-tree basename port + #:file-type+size file-type+size + #:file-port file-port + #:symlink-target symlink-target + #:directory-entries directory-entries) + (let loop ((done? (process-stderr server))) + (or done? (loop (process-stderr server)))) + (let ((result (read-store-path port))) + (hash-set! cache tree result) + result))))) + (define build-things (let ((build (operation (build-things (string-list things) (integer mode)) @@ -1362,7 +1461,18 @@ taking the store as its first argument." ;; Store monad operators. ;; -(define* (text-file name text +(define* (binary-file name + data ;bytevector + #:optional (references '())) + "Return as a monadic value the absolute file name in the store of the file +containing DATA, a bytevector. REFERENCES is a list of store items that the +resulting text file refers to; it defaults to the empty list." + (lambda (store) + (values (add-data-to-store store name data references) + store))) + +(define* (text-file name + text ;string #:optional (references '())) "Return as a monadic value the absolute file name in the store of the file containing TEXT, a string. REFERENCES is a list of store items that the @@ -1389,6 +1499,9 @@ where FILE is the entry's absolute file name and STAT is the result of #:select? select?) store))) +(define interned-file-tree + (store-lift add-file-tree-to-store)) + (define build ;; Monadic variant of 'build-things'. (store-lift build-things)) diff --git a/guix/store/database.scm b/guix/store/database.scm index 8f35b63e37..0879a95d0b 100644 --- a/guix/store/database.scm +++ b/guix/store/database.scm @@ -190,12 +190,14 @@ Every store item in REFERENCES must already be registered." (define (reset-timestamps file) "Reset the modification time on FILE and on all the files it contains, if it's a directory. While at it, canonicalize file permissions." + ;; Note: We're resetting to one second after the Epoch like 'guix-daemon' + ;; has always done. (let loop ((file file) (type (stat:type (lstat file)))) (case type ((directory) (chmod file #o555) - (utime file 0 0 0 0) + (utime file 1 1 0 0) (let ((parent file)) (for-each (match-lambda (("." . _) #f) @@ -209,10 +211,10 @@ it's a directory. While at it, canonicalize file permissions." (type type)))))) (scandir* parent)))) ((symlink) - (utime file 0 0 0 0 AT_SYMLINK_NOFOLLOW)) + (utime file 1 1 0 0 AT_SYMLINK_NOFOLLOW)) (else (chmod file (if (executable-file? file) #o555 #o444)) - (utime file 0 0 0 0))))) + (utime file 1 1 0 0))))) (define* (register-path path #:key (references '()) deriver prefix diff --git a/guix/store/deduplication.scm b/guix/store/deduplication.scm index 6ff4a50de5..8c19d7309e 100644 --- a/guix/store/deduplication.scm +++ b/guix/store/deduplication.scm @@ -31,37 +31,39 @@ #:export (nar-sha256 deduplicate)) -;; Would it be better to just make WRITE-FILE give size as well? I question -;; the general utility of this approach. +;; XXX: This port is used as a workaround on Guile <= 2.2.4 where +;; 'port-position' throws to 'out-of-range' when the offset is great than or +;; equal to 2^32: <https://bugs.gnu.org/32161>. (define (counting-wrapper-port output-port) - "Some custom ports don't implement GET-POSITION at all. But if we want to -figure out how many bytes are being written, we will want to use that. So this -makes a wrapper around a port which implements GET-POSITION." + "Return two values: an output port that wraps OUTPUT-PORT, and a thunk to +retrieve the number of bytes written to OUTPUT-PORT." (let ((byte-count 0)) - (make-custom-binary-output-port "counting-wrapper" - (lambda (bytes offset count) - (set! byte-count - (+ byte-count count)) - (put-bytevector output-port bytes - offset count) - count) - (lambda () - byte-count) - #f - (lambda () - (close-port output-port))))) + (values (make-custom-binary-output-port "counting-wrapper" + (lambda (bytes offset count) + (put-bytevector output-port bytes + offset count) + (set! byte-count + (+ byte-count count)) + count) + (lambda () + byte-count) + #f + (lambda () + (close-port output-port))) + (lambda () + byte-count)))) (define (nar-sha256 file) "Gives the sha256 hash of a file and the size of the file in nar form." - (let-values (((port get-hash) (open-sha256-port))) - (let ((wrapper (counting-wrapper-port port))) - (write-file file wrapper) - (force-output wrapper) - (force-output port) - (let ((hash (get-hash)) - (size (port-position wrapper))) - (close-port wrapper) - (values hash size))))) + (let*-values (((port get-hash) (open-sha256-port)) + ((wrapper get-size) (counting-wrapper-port port))) + (write-file file wrapper) + (force-output wrapper) + (force-output port) + (let ((hash (get-hash)) + (size (get-size))) + (close-port wrapper) + (values hash size)))) (define (tempname-in directory) "Gives an unused temporary name under DIRECTORY. Not guaranteed to still be diff --git a/guix/ui.scm b/guix/ui.scm index 6a5feaa953..29c0b2b9ce 100644 --- a/guix/ui.scm +++ b/guix/ui.scm @@ -1428,7 +1428,7 @@ DURATION-RELATION with the current time." (format #t "~a~%" header))))) (define (display-profile-content-diff profile gen1 gen2) - "Display the changed packages in PROFILE GEN2 compared to generation GEN2." + "Display the changed packages in PROFILE GEN2 compared to generation GEN1." (define (equal-entry? first second) (string= (manifest-entry-item first) (manifest-entry-item second))) diff --git a/guix/utils.scm b/guix/utils.scm index f934b6ed13..9bad06d52f 100644 --- a/guix/utils.scm +++ b/guix/utils.scm @@ -5,7 +5,6 @@ ;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net> ;;; Copyright © 2016 Mathieu Lirzin <mthl@gnu.org> ;;; Copyright © 2015 David Thompson <davet@gnu.org> -;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com> ;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.com> ;;; @@ -33,10 +32,11 @@ #:use-module (srfi srfi-35) #:use-module (srfi srfi-39) #:use-module (ice-9 binary-ports) + #:use-module (ice-9 ftw) #:autoload (rnrs io ports) (make-custom-binary-input-port) #:use-module ((rnrs bytevectors) #:select (bytevector-u8-set!)) #:use-module (guix memoization) - #:use-module ((guix build utils) #:select (dump-port mkdir-p)) + #:use-module ((guix build utils) #:select (dump-port mkdir-p delete-file-recursively)) #:use-module ((guix build syscalls) #:select (mkdtemp! fdatasync)) #:use-module (ice-9 format) #:autoload (ice-9 popen) (open-pipe*) @@ -175,7 +175,7 @@ a symbol such as 'xz." (match compression ((or #f 'none) (values input '())) ('bzip2 (filtered-port `(,%bzip2 "-dc") input)) - ('xz (filtered-port `(,%xz "-dc" "-T0") input)) + ('xz (filtered-port `(,%xz "-dc") input)) ('gzip (filtered-port `(,%gzip "-dc") input)) (else (error "unsupported compression scheme" compression)))) @@ -185,7 +185,7 @@ a symbol such as 'xz." (match compression ((or #f 'none) (values input '())) ('bzip2 (filtered-port `(,%bzip2 "-c") input)) - ('xz (filtered-port `(,%xz "-c" "-T0") input)) + ('xz (filtered-port `(,%xz "-c") input)) ('gzip (filtered-port `(,%gzip "-c") input)) (else (error "unsupported compression scheme" compression)))) @@ -242,7 +242,7 @@ program--e.g., '(\"--fast\")." (match compression ((or #f 'none) (values output '())) ('bzip2 (filtered-output-port `(,%bzip2 "-c" ,@options) output)) - ('xz (filtered-output-port `(,%xz "-c" "-T0" ,@options) output)) + ('xz (filtered-output-port `(,%xz "-c" ,@options) output)) ('gzip (filtered-output-port `(,%gzip "-c" ,@options) output)) (else (error "unsupported compression scheme" compression)))) @@ -631,7 +631,7 @@ delete it when leaving the dynamic extent of this call." (lambda () (proc tmp-dir)) (lambda () - (false-if-exception (rmdir tmp-dir)))))) + (false-if-exception (delete-file-recursively tmp-dir)))))) (define (with-atomic-file-output file proc) "Call PROC with an output port for the file that is going to replace FILE. diff --git a/srfi/srfi-64.scm b/srfi/srfi-64.scm deleted file mode 100644 index f053443b39..0000000000 --- a/srfi/srfi-64.scm +++ /dev/null @@ -1,41 +0,0 @@ -(define-module (srfi srfi-64) - #:export (test-begin ;; must be listed first, since in Kawa (at least) it is "magic". - test-end test-assert test-eqv test-eq test-equal - test-approximate test-assert test-error test-apply test-with-runner - test-match-nth test-match-all test-match-any test-match-name - test-skip test-expect-fail test-read-eval-string - test-runner-group-path test-group test-group-with-cleanup - test-result-ref test-result-set! test-result-clear test-result-remove - test-result-kind test-passed? - test-log-to-file - ; Misc test-runner functions - test-runner? test-runner-reset test-runner-null - test-runner-simple test-runner-current test-runner-factory test-runner-get - test-runner-create test-runner-test-name - ;; test-runner field setter and getter functions - see %test-record-define: - test-runner-pass-count test-runner-pass-count! - test-runner-fail-count test-runner-fail-count! - test-runner-xpass-count test-runner-xpass-count! - test-runner-xfail-count test-runner-xfail-count! - test-runner-skip-count test-runner-skip-count! - test-runner-group-stack test-runner-group-stack! - test-runner-on-test-begin test-runner-on-test-begin! - test-runner-on-test-end test-runner-on-test-end! - test-runner-on-group-begin test-runner-on-group-begin! - test-runner-on-group-end test-runner-on-group-end! - test-runner-on-final test-runner-on-final! - test-runner-on-bad-count test-runner-on-bad-count! - test-runner-on-bad-end-name test-runner-on-bad-end-name! - test-result-alist test-result-alist! - test-runner-aux-value test-runner-aux-value! - ;; default/simple call-back functions, used in default test-runner, - ;; but can be called to construct more complex ones. - test-on-group-begin-simple test-on-group-end-simple - test-on-bad-count-simple test-on-bad-end-name-simple - test-on-final-simple test-on-test-end-simple - test-on-final-simple)) - -(cond-expand-provide (current-module) '(srfi-64)) - -;; Load Per Bothner's original SRFI-64 implementation. -(load-from-path "srfi/srfi-64.upstream.scm") diff --git a/srfi/srfi-64.upstream.scm b/srfi/srfi-64.upstream.scm deleted file mode 100644 index d686662bfd..0000000000 --- a/srfi/srfi-64.upstream.scm +++ /dev/null @@ -1,1040 +0,0 @@ -;; Copyright (c) 2005, 2006, 2007, 2012, 2013 Per Bothner -;; Added "full" support for Chicken, Gauche, Guile and SISC. -;; Alex Shinn, Copyright (c) 2005. -;; Modified for Scheme Spheres by Álvaro Castro-Castilla, Copyright (c) 2012. -;; Support for Guile 2 by Mark H Weaver <mhw@netris.org>, Copyright (c) 2014. -;; -;; Permission is hereby granted, free of charge, to any person -;; obtaining a copy of this software and associated documentation -;; files (the "Software"), to deal in the Software without -;; restriction, including without limitation the rights to use, copy, -;; modify, merge, publish, distribute, sublicense, and/or sell copies -;; of the Software, and to permit persons to whom the Software is -;; furnished to do so, subject to the following conditions: -;; -;; The above copyright notice and this permission notice shall be -;; included in all copies or substantial portions of the Software. -;; -;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS -;; BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -;; ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -;; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -;; SOFTWARE. - -(cond-expand - (chicken - (require-extension syntax-case)) - (guile-2 - (use-modules (srfi srfi-9) - ;; In 2.0.9, srfi-34 and srfi-35 are not well integrated - ;; with either Guile's native exceptions or R6RS exceptions. - ;;(srfi srfi-34) (srfi srfi-35) - (srfi srfi-39))) - (guile - (use-modules (ice-9 syncase) (srfi srfi-9) - ;;(srfi srfi-34) (srfi srfi-35) - not in Guile 1.6.7 - (srfi srfi-39))) - (sisc - (require-extension (srfi 9 34 35 39))) - (kawa - (module-compile-options warn-undefined-variable: #t - warn-invoke-unknown-method: #t) - (provide 'srfi-64) - (provide 'testing) - (require 'srfi-34) - (require 'srfi-35)) - (else () - )) - -(cond-expand - (kawa - (define-syntax %test-export - (syntax-rules () - ((%test-export test-begin . other-names) - (module-export %test-begin . other-names))))) - (else - (define-syntax %test-export - (syntax-rules () - ((%test-export . names) (if #f #f)))))) - -;; List of exported names -(%test-export - test-begin ;; must be listed first, since in Kawa (at least) it is "magic". - test-end test-assert test-eqv test-eq test-equal - test-approximate test-assert test-error test-apply test-with-runner - test-match-nth test-match-all test-match-any test-match-name - test-skip test-expect-fail test-read-eval-string - test-runner-group-path test-group test-group-with-cleanup - test-result-ref test-result-set! test-result-clear test-result-remove - test-result-kind test-passed? - test-log-to-file - ; Misc test-runner functions - test-runner? test-runner-reset test-runner-null - test-runner-simple test-runner-current test-runner-factory test-runner-get - test-runner-create test-runner-test-name - ;; test-runner field setter and getter functions - see %test-record-define: - test-runner-pass-count test-runner-pass-count! - test-runner-fail-count test-runner-fail-count! - test-runner-xpass-count test-runner-xpass-count! - test-runner-xfail-count test-runner-xfail-count! - test-runner-skip-count test-runner-skip-count! - test-runner-group-stack test-runner-group-stack! - test-runner-on-test-begin test-runner-on-test-begin! - test-runner-on-test-end test-runner-on-test-end! - test-runner-on-group-begin test-runner-on-group-begin! - test-runner-on-group-end test-runner-on-group-end! - test-runner-on-final test-runner-on-final! - test-runner-on-bad-count test-runner-on-bad-count! - test-runner-on-bad-end-name test-runner-on-bad-end-name! - test-result-alist test-result-alist! - test-runner-aux-value test-runner-aux-value! - ;; default/simple call-back functions, used in default test-runner, - ;; but can be called to construct more complex ones. - test-on-group-begin-simple test-on-group-end-simple - test-on-bad-count-simple test-on-bad-end-name-simple - test-on-final-simple test-on-test-end-simple - test-on-final-simple) - -(cond-expand - (srfi-9 - (define-syntax %test-record-define - (syntax-rules () - ((%test-record-define alloc runner? (name index setter getter) ...) - (define-record-type test-runner - (alloc) - runner? - (name setter getter) ...))))) - (else - (define %test-runner-cookie (list "test-runner")) - (define-syntax %test-record-define - (syntax-rules () - ((%test-record-define alloc runner? (name index getter setter) ...) - (begin - (define (runner? obj) - (and (vector? obj) - (> (vector-length obj) 1) - (eq (vector-ref obj 0) %test-runner-cookie))) - (define (alloc) - (let ((runner (make-vector 23))) - (vector-set! runner 0 %test-runner-cookie) - runner)) - (begin - (define (getter runner) - (vector-ref runner index)) ...) - (begin - (define (setter runner value) - (vector-set! runner index value)) ...))))))) - -(%test-record-define - %test-runner-alloc test-runner? - ;; Cumulate count of all tests that have passed and were expected to. - (pass-count 1 test-runner-pass-count test-runner-pass-count!) - (fail-count 2 test-runner-fail-count test-runner-fail-count!) - (xpass-count 3 test-runner-xpass-count test-runner-xpass-count!) - (xfail-count 4 test-runner-xfail-count test-runner-xfail-count!) - (skip-count 5 test-runner-skip-count test-runner-skip-count!) - (skip-list 6 %test-runner-skip-list %test-runner-skip-list!) - (fail-list 7 %test-runner-fail-list %test-runner-fail-list!) - ;; Normally #t, except when in a test-apply. - (run-list 8 %test-runner-run-list %test-runner-run-list!) - (skip-save 9 %test-runner-skip-save %test-runner-skip-save!) - (fail-save 10 %test-runner-fail-save %test-runner-fail-save!) - (group-stack 11 test-runner-group-stack test-runner-group-stack!) - (on-test-begin 12 test-runner-on-test-begin test-runner-on-test-begin!) - (on-test-end 13 test-runner-on-test-end test-runner-on-test-end!) - ;; Call-back when entering a group. Takes (runner suite-name count). - (on-group-begin 14 test-runner-on-group-begin test-runner-on-group-begin!) - ;; Call-back when leaving a group. - (on-group-end 15 test-runner-on-group-end test-runner-on-group-end!) - ;; Call-back when leaving the outermost group. - (on-final 16 test-runner-on-final test-runner-on-final!) - ;; Call-back when expected number of tests was wrong. - (on-bad-count 17 test-runner-on-bad-count test-runner-on-bad-count!) - ;; Call-back when name in test=end doesn't match test-begin. - (on-bad-end-name 18 test-runner-on-bad-end-name test-runner-on-bad-end-name!) - ;; Cumulate count of all tests that have been done. - (total-count 19 %test-runner-total-count %test-runner-total-count!) - ;; Stack (list) of (count-at-start . expected-count): - (count-list 20 %test-runner-count-list %test-runner-count-list!) - (result-alist 21 test-result-alist test-result-alist!) - ;; Field can be used by test-runner for any purpose. - ;; test-runner-simple uses it for a log file. - (aux-value 22 test-runner-aux-value test-runner-aux-value!) -) - -(define (test-runner-reset runner) - (test-result-alist! runner '()) - (test-runner-pass-count! runner 0) - (test-runner-fail-count! runner 0) - (test-runner-xpass-count! runner 0) - (test-runner-xfail-count! runner 0) - (test-runner-skip-count! runner 0) - (%test-runner-total-count! runner 0) - (%test-runner-count-list! runner '()) - (%test-runner-run-list! runner #t) - (%test-runner-skip-list! runner '()) - (%test-runner-fail-list! runner '()) - (%test-runner-skip-save! runner '()) - (%test-runner-fail-save! runner '()) - (test-runner-group-stack! runner '())) - -(define (test-runner-group-path runner) - (reverse (test-runner-group-stack runner))) - -(define (%test-null-callback runner) #f) - -(define (test-runner-null) - (let ((runner (%test-runner-alloc))) - (test-runner-reset runner) - (test-runner-on-group-begin! runner (lambda (runner name count) #f)) - (test-runner-on-group-end! runner %test-null-callback) - (test-runner-on-final! runner %test-null-callback) - (test-runner-on-test-begin! runner %test-null-callback) - (test-runner-on-test-end! runner %test-null-callback) - (test-runner-on-bad-count! runner (lambda (runner count expected) #f)) - (test-runner-on-bad-end-name! runner (lambda (runner begin end) #f)) - runner)) - -;; Not part of the specification. FIXME -;; Controls whether a log file is generated. -(define test-log-to-file #t) - -(define (test-runner-simple) - (let ((runner (%test-runner-alloc))) - (test-runner-reset runner) - (test-runner-on-group-begin! runner test-on-group-begin-simple) - (test-runner-on-group-end! runner test-on-group-end-simple) - (test-runner-on-final! runner test-on-final-simple) - (test-runner-on-test-begin! runner test-on-test-begin-simple) - (test-runner-on-test-end! runner test-on-test-end-simple) - (test-runner-on-bad-count! runner test-on-bad-count-simple) - (test-runner-on-bad-end-name! runner test-on-bad-end-name-simple) - runner)) - -(cond-expand - (srfi-39 - (define test-runner-current (make-parameter #f)) - (define test-runner-factory (make-parameter test-runner-simple))) - (else - (define %test-runner-current #f) - (define-syntax test-runner-current - (syntax-rules () - ((test-runner-current) - %test-runner-current) - ((test-runner-current runner) - (set! %test-runner-current runner)))) - (define %test-runner-factory test-runner-simple) - (define-syntax test-runner-factory - (syntax-rules () - ((test-runner-factory) - %test-runner-factory) - ((test-runner-factory runner) - (set! %test-runner-factory runner)))))) - -;; A safer wrapper to test-runner-current. -(define (test-runner-get) - (let ((r (test-runner-current))) - (if (not r) - (cond-expand - (srfi-23 (error "test-runner not initialized - test-begin missing?")) - (else #t))) - r)) - -(define (%test-specifier-matches spec runner) - (spec runner)) - -(define (test-runner-create) - ((test-runner-factory))) - -(define (%test-any-specifier-matches list runner) - (let ((result #f)) - (let loop ((l list)) - (cond ((null? l) result) - (else - (if (%test-specifier-matches (car l) runner) - (set! result #t)) - (loop (cdr l))))))) - -;; Returns #f, #t, or 'xfail. -(define (%test-should-execute runner) - (let ((run (%test-runner-run-list runner))) - (cond ((or - (not (or (eqv? run #t) - (%test-any-specifier-matches run runner))) - (%test-any-specifier-matches - (%test-runner-skip-list runner) - runner)) - (test-result-set! runner 'result-kind 'skip) - #f) - ((%test-any-specifier-matches - (%test-runner-fail-list runner) - runner) - (test-result-set! runner 'result-kind 'xfail) - 'xfail) - (else #t)))) - -(define (%test-begin suite-name count) - (if (not (test-runner-current)) - (test-runner-current (test-runner-create))) - (let ((runner (test-runner-current))) - ((test-runner-on-group-begin runner) runner suite-name count) - (%test-runner-skip-save! runner - (cons (%test-runner-skip-list runner) - (%test-runner-skip-save runner))) - (%test-runner-fail-save! runner - (cons (%test-runner-fail-list runner) - (%test-runner-fail-save runner))) - (%test-runner-count-list! runner - (cons (cons (%test-runner-total-count runner) - count) - (%test-runner-count-list runner))) - (test-runner-group-stack! runner (cons suite-name - (test-runner-group-stack runner))))) -(cond-expand - (kawa - ;; Kawa has test-begin built in, implemented as: - ;; (begin - ;; (cond-expand (srfi-64 #!void) (else (require 'srfi-64))) - ;; (%test-begin suite-name [count])) - ;; This puts test-begin but only test-begin in the default environment., - ;; which makes normal test suites loadable without non-portable commands. - ) - (else - (define-syntax test-begin - (syntax-rules () - ((test-begin suite-name) - (%test-begin suite-name #f)) - ((test-begin suite-name count) - (%test-begin suite-name count)))))) - -(define (test-on-group-begin-simple runner suite-name count) - (if (null? (test-runner-group-stack runner)) - (begin - (display "%%%% Starting test ") - (display suite-name) - (if test-log-to-file - (let* ((log-file-name - (if (string? test-log-to-file) test-log-to-file - (string-append suite-name ".log"))) - (log-file - (cond-expand (mzscheme - (open-output-file log-file-name 'truncate/replace)) - (else (open-output-file log-file-name))))) - (display "%%%% Starting test " log-file) - (display suite-name log-file) - (newline log-file) - (test-runner-aux-value! runner log-file) - (display " (Writing full log to \"") - (display log-file-name) - (display "\")"))) - (newline))) - (let ((log (test-runner-aux-value runner))) - (if (output-port? log) - (begin - (display "Group begin: " log) - (display suite-name log) - (newline log)))) - #f) - -(define (test-on-group-end-simple runner) - (let ((log (test-runner-aux-value runner))) - (if (output-port? log) - (begin - (display "Group end: " log) - (display (car (test-runner-group-stack runner)) log) - (newline log)))) - #f) - -(define (%test-on-bad-count-write runner count expected-count port) - (display "*** Total number of tests was " port) - (display count port) - (display " but should be " port) - (display expected-count port) - (display ". ***" port) - (newline port) - (display "*** Discrepancy indicates testsuite error or exceptions. ***" port) - (newline port)) - -(define (test-on-bad-count-simple runner count expected-count) - (%test-on-bad-count-write runner count expected-count (current-output-port)) - (let ((log (test-runner-aux-value runner))) - (if (output-port? log) - (%test-on-bad-count-write runner count expected-count log)))) - -(define (test-on-bad-end-name-simple runner begin-name end-name) - (let ((msg (string-append (%test-format-line runner) "test-end " begin-name - " does not match test-begin " end-name))) - (cond-expand - (srfi-23 (error msg)) - (else (display msg) (newline))))) - - -(define (%test-final-report1 value label port) - (if (> value 0) - (begin - (display label port) - (display value port) - (newline port)))) - -(define (%test-final-report-simple runner port) - (%test-final-report1 (test-runner-pass-count runner) - "# of expected passes " port) - (%test-final-report1 (test-runner-xfail-count runner) - "# of expected failures " port) - (%test-final-report1 (test-runner-xpass-count runner) - "# of unexpected successes " port) - (%test-final-report1 (test-runner-fail-count runner) - "# of unexpected failures " port) - (%test-final-report1 (test-runner-skip-count runner) - "# of skipped tests " port)) - -(define (test-on-final-simple runner) - (%test-final-report-simple runner (current-output-port)) - (let ((log (test-runner-aux-value runner))) - (if (output-port? log) - (%test-final-report-simple runner log)))) - -(define (%test-format-line runner) - (let* ((line-info (test-result-alist runner)) - (source-file (assq 'source-file line-info)) - (source-line (assq 'source-line line-info)) - (file (if source-file (cdr source-file) ""))) - (if source-line - (string-append file ":" - (number->string (cdr source-line)) ": ") - ""))) - -(define (%test-end suite-name line-info) - (let* ((r (test-runner-get)) - (groups (test-runner-group-stack r)) - (line (%test-format-line r))) - (test-result-alist! r line-info) - (if (null? groups) - (let ((msg (string-append line "test-end not in a group"))) - (cond-expand - (srfi-23 (error msg)) - (else (display msg) (newline))))) - (if (and suite-name (not (equal? suite-name (car groups)))) - ((test-runner-on-bad-end-name r) r suite-name (car groups))) - (let* ((count-list (%test-runner-count-list r)) - (expected-count (cdar count-list)) - (saved-count (caar count-list)) - (group-count (- (%test-runner-total-count r) saved-count))) - (if (and expected-count - (not (= expected-count group-count))) - ((test-runner-on-bad-count r) r group-count expected-count)) - ((test-runner-on-group-end r) r) - (test-runner-group-stack! r (cdr (test-runner-group-stack r))) - (%test-runner-skip-list! r (car (%test-runner-skip-save r))) - (%test-runner-skip-save! r (cdr (%test-runner-skip-save r))) - (%test-runner-fail-list! r (car (%test-runner-fail-save r))) - (%test-runner-fail-save! r (cdr (%test-runner-fail-save r))) - (%test-runner-count-list! r (cdr count-list)) - (if (null? (test-runner-group-stack r)) - ((test-runner-on-final r) r))))) - -(define-syntax test-group - (syntax-rules () - ((test-group suite-name . body) - (let ((r (test-runner-current))) - ;; Ideally should also set line-number, if available. - (test-result-alist! r (list (cons 'test-name suite-name))) - (if (%test-should-execute r) - (dynamic-wind - (lambda () (test-begin suite-name)) - (lambda () . body) - (lambda () (test-end suite-name)))))))) - -(define-syntax test-group-with-cleanup - (syntax-rules () - ((test-group-with-cleanup suite-name form cleanup-form) - (test-group suite-name - (dynamic-wind - (lambda () #f) - (lambda () form) - (lambda () cleanup-form)))) - ((test-group-with-cleanup suite-name cleanup-form) - (test-group-with-cleanup suite-name #f cleanup-form)) - ((test-group-with-cleanup suite-name form1 form2 form3 . rest) - (test-group-with-cleanup suite-name (begin form1 form2) form3 . rest)))) - -(define (test-on-test-begin-simple runner) - (let ((log (test-runner-aux-value runner))) - (if (output-port? log) - (let* ((results (test-result-alist runner)) - (source-file (assq 'source-file results)) - (source-line (assq 'source-line results)) - (source-form (assq 'source-form results)) - (test-name (assq 'test-name results))) - (display "Test begin:" log) - (newline log) - (if test-name (%test-write-result1 test-name log)) - (if source-file (%test-write-result1 source-file log)) - (if source-line (%test-write-result1 source-line log)) - (if source-form (%test-write-result1 source-form log)))))) - -(define-syntax test-result-ref - (syntax-rules () - ((test-result-ref runner pname) - (test-result-ref runner pname #f)) - ((test-result-ref runner pname default) - (let ((p (assq pname (test-result-alist runner)))) - (if p (cdr p) default))))) - -(define (test-on-test-end-simple runner) - (let ((log (test-runner-aux-value runner)) - (kind (test-result-ref runner 'result-kind))) - (if (memq kind '(fail xpass)) - (let* ((results (test-result-alist runner)) - (source-file (assq 'source-file results)) - (source-line (assq 'source-line results)) - (test-name (assq 'test-name results))) - (if (or source-file source-line) - (begin - (if source-file (display (cdr source-file))) - (display ":") - (if source-line (display (cdr source-line))) - (display ": "))) - (display (if (eq? kind 'xpass) "XPASS" "FAIL")) - (if test-name - (begin - (display " ") - (display (cdr test-name)))) - (newline))) - (if (output-port? log) - (begin - (display "Test end:" log) - (newline log) - (let loop ((list (test-result-alist runner))) - (if (pair? list) - (let ((pair (car list))) - ;; Write out properties not written out by on-test-begin. - (if (not (memq (car pair) - '(test-name source-file source-line source-form))) - (%test-write-result1 pair log)) - (loop (cdr list))))))))) - -(define (%test-write-result1 pair port) - (display " " port) - (display (car pair) port) - (display ": " port) - (write (cdr pair) port) - (newline port)) - -(define (test-result-set! runner pname value) - (let* ((alist (test-result-alist runner)) - (p (assq pname alist))) - (if p - (set-cdr! p value) - (test-result-alist! runner (cons (cons pname value) alist))))) - -(define (test-result-clear runner) - (test-result-alist! runner '())) - -(define (test-result-remove runner pname) - (let* ((alist (test-result-alist runner)) - (p (assq pname alist))) - (if p - (test-result-alist! runner - (let loop ((r alist)) - (if (eq? r p) (cdr r) - (cons (car r) (loop (cdr r))))))))) - -(define (test-result-kind . rest) - (let ((runner (if (pair? rest) (car rest) (test-runner-current)))) - (test-result-ref runner 'result-kind))) - -(define (test-passed? . rest) - (let ((runner (if (pair? rest) (car rest) (test-runner-get)))) - (memq (test-result-ref runner 'result-kind) '(pass xpass)))) - -(define (%test-report-result) - (let* ((r (test-runner-get)) - (result-kind (test-result-kind r))) - (case result-kind - ((pass) - (test-runner-pass-count! r (+ 1 (test-runner-pass-count r)))) - ((fail) - (test-runner-fail-count! r (+ 1 (test-runner-fail-count r)))) - ((xpass) - (test-runner-xpass-count! r (+ 1 (test-runner-xpass-count r)))) - ((xfail) - (test-runner-xfail-count! r (+ 1 (test-runner-xfail-count r)))) - (else - (test-runner-skip-count! r (+ 1 (test-runner-skip-count r))))) - (%test-runner-total-count! r (+ 1 (%test-runner-total-count r))) - ((test-runner-on-test-end r) r))) - -(cond-expand - (guile - (define-syntax %test-evaluate-with-catch - (syntax-rules () - ((%test-evaluate-with-catch test-expression) - (catch #t - (lambda () test-expression) - (lambda (key . args) - (test-result-set! (test-runner-current) 'actual-error - (cons key args)) - #f)))))) - (kawa - (define-syntax %test-evaluate-with-catch - (syntax-rules () - ((%test-evaluate-with-catch test-expression) - (try-catch test-expression - (ex <java.lang.Throwable> - (test-result-set! (test-runner-current) 'actual-error ex) - #f)))))) - (srfi-34 - (define-syntax %test-evaluate-with-catch - (syntax-rules () - ((%test-evaluate-with-catch test-expression) - (guard (err (else #f)) test-expression))))) - (chicken - (define-syntax %test-evaluate-with-catch - (syntax-rules () - ((%test-evaluate-with-catch test-expression) - (condition-case test-expression (ex () #f)))))) - (else - (define-syntax %test-evaluate-with-catch - (syntax-rules () - ((%test-evaluate-with-catch test-expression) - test-expression))))) - -(cond-expand - ((or kawa mzscheme) - (cond-expand - (mzscheme - (define-for-syntax (%test-syntax-file form) - (let ((source (syntax-source form))) - (cond ((string? source) file) - ((path? source) (path->string source)) - (else #f))))) - (kawa - (define (%test-syntax-file form) - (syntax-source form)))) - (define (%test-source-line2 form) - (let* ((line (syntax-line form)) - (file (%test-syntax-file form)) - (line-pair (if line (list (cons 'source-line line)) '()))) - (cons (cons 'source-form (syntax-object->datum form)) - (if file (cons (cons 'source-file file) line-pair) line-pair))))) - (guile-2 - (define (%test-source-line2 form) - (let* ((src-props (syntax-source form)) - (file (and src-props (assq-ref src-props 'filename))) - (line (and src-props (assq-ref src-props 'line))) - (file-alist (if file - `((source-file . ,file)) - '())) - (line-alist (if line - `((source-line . ,(+ line 1))) - '()))) - (datum->syntax (syntax here) - `((source-form . ,(syntax->datum form)) - ,@file-alist - ,@line-alist))))) - (else - (define (%test-source-line2 form) - '()))) - -(define (%test-on-test-begin r) - (%test-should-execute r) - ((test-runner-on-test-begin r) r) - (not (eq? 'skip (test-result-ref r 'result-kind)))) - -(define (%test-on-test-end r result) - (test-result-set! r 'result-kind - (if (eq? (test-result-ref r 'result-kind) 'xfail) - (if result 'xpass 'xfail) - (if result 'pass 'fail)))) - -(define (test-runner-test-name runner) - (test-result-ref runner 'test-name "")) - -(define-syntax %test-comp2body - (syntax-rules () - ((%test-comp2body r comp expected expr) - (let () - (if (%test-on-test-begin r) - (let ((exp expected)) - (test-result-set! r 'expected-value exp) - (let ((res (%test-evaluate-with-catch expr))) - (test-result-set! r 'actual-value res) - (%test-on-test-end r (comp exp res))))) - (%test-report-result))))) - -(define (%test-approximate= error) - (lambda (value expected) - (let ((rval (real-part value)) - (ival (imag-part value)) - (rexp (real-part expected)) - (iexp (imag-part expected))) - (and (>= rval (- rexp error)) - (>= ival (- iexp error)) - (<= rval (+ rexp error)) - (<= ival (+ iexp error)))))) - -(define-syntax %test-comp1body - (syntax-rules () - ((%test-comp1body r expr) - (let () - (if (%test-on-test-begin r) - (let () - (let ((res (%test-evaluate-with-catch expr))) - (test-result-set! r 'actual-value res) - (%test-on-test-end r res)))) - (%test-report-result))))) - -(cond-expand - ((or kawa mzscheme guile-2) - ;; Should be made to work for any Scheme with syntax-case - ;; However, I haven't gotten the quoting working. FIXME. - (define-syntax test-end - (lambda (x) - (syntax-case (list x (list (syntax quote) (%test-source-line2 x))) () - (((mac suite-name) line) - (syntax - (%test-end suite-name line))) - (((mac) line) - (syntax - (%test-end #f line)))))) - (define-syntax test-assert - (lambda (x) - (syntax-case (list x (list (syntax quote) (%test-source-line2 x))) () - (((mac tname expr) line) - (syntax - (let* ((r (test-runner-get)) - (name tname)) - (test-result-alist! r (cons (cons 'test-name tname) line)) - (%test-comp1body r expr)))) - (((mac expr) line) - (syntax - (let* ((r (test-runner-get))) - (test-result-alist! r line) - (%test-comp1body r expr))))))) - (define (%test-comp2 comp x) - (syntax-case (list x (list (syntax quote) (%test-source-line2 x)) comp) () - (((mac tname expected expr) line comp) - (syntax - (let* ((r (test-runner-get)) - (name tname)) - (test-result-alist! r (cons (cons 'test-name tname) line)) - (%test-comp2body r comp expected expr)))) - (((mac expected expr) line comp) - (syntax - (let* ((r (test-runner-get))) - (test-result-alist! r line) - (%test-comp2body r comp expected expr)))))) - (define-syntax test-eqv - (lambda (x) (%test-comp2 (syntax eqv?) x))) - (define-syntax test-eq - (lambda (x) (%test-comp2 (syntax eq?) x))) - (define-syntax test-equal - (lambda (x) (%test-comp2 (syntax equal?) x))) - (define-syntax test-approximate ;; FIXME - needed for non-Kawa - (lambda (x) - (syntax-case (list x (list (syntax quote) (%test-source-line2 x))) () - (((mac tname expected expr error) line) - (syntax - (let* ((r (test-runner-get)) - (name tname)) - (test-result-alist! r (cons (cons 'test-name tname) line)) - (%test-comp2body r (%test-approximate= error) expected expr)))) - (((mac expected expr error) line) - (syntax - (let* ((r (test-runner-get))) - (test-result-alist! r line) - (%test-comp2body r (%test-approximate= error) expected expr)))))))) - (else - (define-syntax test-end - (syntax-rules () - ((test-end) - (%test-end #f '())) - ((test-end suite-name) - (%test-end suite-name '())))) - (define-syntax test-assert - (syntax-rules () - ((test-assert tname test-expression) - (let* ((r (test-runner-get)) - (name tname)) - (test-result-alist! r '((test-name . tname))) - (%test-comp1body r test-expression))) - ((test-assert test-expression) - (let* ((r (test-runner-get))) - (test-result-alist! r '()) - (%test-comp1body r test-expression))))) - (define-syntax %test-comp2 - (syntax-rules () - ((%test-comp2 comp tname expected expr) - (let* ((r (test-runner-get)) - (name tname)) - (test-result-alist! r (list (cons 'test-name tname))) - (%test-comp2body r comp expected expr))) - ((%test-comp2 comp expected expr) - (let* ((r (test-runner-get))) - (test-result-alist! r '()) - (%test-comp2body r comp expected expr))))) - (define-syntax test-equal - (syntax-rules () - ((test-equal . rest) - (%test-comp2 equal? . rest)))) - (define-syntax test-eqv - (syntax-rules () - ((test-eqv . rest) - (%test-comp2 eqv? . rest)))) - (define-syntax test-eq - (syntax-rules () - ((test-eq . rest) - (%test-comp2 eq? . rest)))) - (define-syntax test-approximate - (syntax-rules () - ((test-approximate tname expected expr error) - (%test-comp2 (%test-approximate= error) tname expected expr)) - ((test-approximate expected expr error) - (%test-comp2 (%test-approximate= error) expected expr)))))) - -(cond-expand - (guile - (define-syntax %test-error - (syntax-rules () - ((%test-error r etype expr) - (cond ((%test-on-test-begin r) - (let ((et etype)) - (test-result-set! r 'expected-error et) - (%test-on-test-end r - (catch #t - (lambda () - (test-result-set! r 'actual-value expr) - #f) - (lambda (key . args) - ;; TODO: decide how to specify expected - ;; error types for Guile. - (test-result-set! r 'actual-error - (cons key args)) - #t))) - (%test-report-result)))))))) - (mzscheme - (define-syntax %test-error - (syntax-rules () - ((%test-error r etype expr) - (%test-comp1body r (with-handlers (((lambda (h) #t) (lambda (h) #t))) - (let () - (test-result-set! r 'actual-value expr) - #f))))))) - (chicken - (define-syntax %test-error - (syntax-rules () - ((%test-error r etype expr) - (%test-comp1body r (condition-case expr (ex () #t))))))) - (kawa - (define-syntax %test-error - (syntax-rules () - ((%test-error r #t expr) - (cond ((%test-on-test-begin r) - (test-result-set! r 'expected-error #t) - (%test-on-test-end r - (try-catch - (let () - (test-result-set! r 'actual-value expr) - #f) - (ex <java.lang.Throwable> - (test-result-set! r 'actual-error ex) - #t))) - (%test-report-result)))) - ((%test-error r etype expr) - (if (%test-on-test-begin r) - (let ((et etype)) - (test-result-set! r 'expected-error et) - (%test-on-test-end r - (try-catch - (let () - (test-result-set! r 'actual-value expr) - #f) - (ex <java.lang.Throwable> - (test-result-set! r 'actual-error ex) - (cond ((and (instance? et <gnu.bytecode.ClassType>) - (gnu.bytecode.ClassType:isSubclass et <java.lang.Throwable>)) - (instance? ex et)) - (else #t))))) - (%test-report-result))))))) - ((and srfi-34 srfi-35) - (define-syntax %test-error - (syntax-rules () - ((%test-error r etype expr) - (%test-comp1body r (guard (ex ((condition-type? etype) - (and (condition? ex) (condition-has-type? ex etype))) - ((procedure? etype) - (etype ex)) - ((equal? etype #t) - #t) - (else #t)) - expr #f)))))) - (srfi-34 - (define-syntax %test-error - (syntax-rules () - ((%test-error r etype expr) - (%test-comp1body r (guard (ex (else #t)) expr #f)))))) - (else - (define-syntax %test-error - (syntax-rules () - ((%test-error r etype expr) - (begin - ((test-runner-on-test-begin r) r) - (test-result-set! r 'result-kind 'skip) - (%test-report-result))))))) - -(cond-expand - ((or kawa mzscheme guile-2) - - (define-syntax test-error - (lambda (x) - (syntax-case (list x (list (syntax quote) (%test-source-line2 x))) () - (((mac tname etype expr) line) - (syntax - (let* ((r (test-runner-get)) - (name tname)) - (test-result-alist! r (cons (cons 'test-name tname) line)) - (%test-error r etype expr)))) - (((mac etype expr) line) - (syntax - (let* ((r (test-runner-get))) - (test-result-alist! r line) - (%test-error r etype expr)))) - (((mac expr) line) - (syntax - (let* ((r (test-runner-get))) - (test-result-alist! r line) - (%test-error r #t expr)))))))) - (else - (define-syntax test-error - (syntax-rules () - ((test-error name etype expr) - (let ((r (test-runner-get))) - (test-result-alist! r `((test-name . ,name))) - (%test-error r etype expr))) - ((test-error etype expr) - (let ((r (test-runner-get))) - (test-result-alist! r '()) - (%test-error r etype expr))) - ((test-error expr) - (let ((r (test-runner-get))) - (test-result-alist! r '()) - (%test-error r #t expr))))))) - -(define (test-apply first . rest) - (if (test-runner? first) - (test-with-runner first (apply test-apply rest)) - (let ((r (test-runner-current))) - (if r - (let ((run-list (%test-runner-run-list r))) - (cond ((null? rest) - (%test-runner-run-list! r (reverse run-list)) - (first)) ;; actually apply procedure thunk - (else - (%test-runner-run-list! - r - (if (eq? run-list #t) (list first) (cons first run-list))) - (apply test-apply rest) - (%test-runner-run-list! r run-list)))) - (let ((r (test-runner-create))) - (test-with-runner r (apply test-apply first rest)) - ((test-runner-on-final r) r)))))) - -(define-syntax test-with-runner - (syntax-rules () - ((test-with-runner runner form ...) - (let ((saved-runner (test-runner-current))) - (dynamic-wind - (lambda () (test-runner-current runner)) - (lambda () form ...) - (lambda () (test-runner-current saved-runner))))))) - -;;; Predicates - -(define (%test-match-nth n count) - (let ((i 0)) - (lambda (runner) - (set! i (+ i 1)) - (and (>= i n) (< i (+ n count)))))) - -(define-syntax test-match-nth - (syntax-rules () - ((test-match-nth n) - (test-match-nth n 1)) - ((test-match-nth n count) - (%test-match-nth n count)))) - -(define (%test-match-all . pred-list) - (lambda (runner) - (let ((result #t)) - (let loop ((l pred-list)) - (if (null? l) - result - (begin - (if (not ((car l) runner)) - (set! result #f)) - (loop (cdr l)))))))) - -(define-syntax test-match-all - (syntax-rules () - ((test-match-all pred ...) - (%test-match-all (%test-as-specifier pred) ...)))) - -(define (%test-match-any . pred-list) - (lambda (runner) - (let ((result #f)) - (let loop ((l pred-list)) - (if (null? l) - result - (begin - (if ((car l) runner) - (set! result #t)) - (loop (cdr l)))))))) - -(define-syntax test-match-any - (syntax-rules () - ((test-match-any pred ...) - (%test-match-any (%test-as-specifier pred) ...)))) - -;; Coerce to a predicate function: -(define (%test-as-specifier specifier) - (cond ((procedure? specifier) specifier) - ((integer? specifier) (test-match-nth 1 specifier)) - ((string? specifier) (test-match-name specifier)) - (else - (error "not a valid test specifier")))) - -(define-syntax test-skip - (syntax-rules () - ((test-skip pred ...) - (let ((runner (test-runner-get))) - (%test-runner-skip-list! runner - (cons (test-match-all (%test-as-specifier pred) ...) - (%test-runner-skip-list runner))))))) - -(define-syntax test-expect-fail - (syntax-rules () - ((test-expect-fail pred ...) - (let ((runner (test-runner-get))) - (%test-runner-fail-list! runner - (cons (test-match-all (%test-as-specifier pred) ...) - (%test-runner-fail-list runner))))))) - -(define (test-match-name name) - (lambda (runner) - (equal? name (test-runner-test-name runner)))) - -(define (test-read-eval-string string) - (let* ((port (open-input-string string)) - (form (read port))) - (if (eof-object? (read-char port)) - (cond-expand - (guile (eval form (current-module))) - (else (eval form))) - (cond-expand - (srfi-23 (error "(not at eof)")) - (else "error"))))) - diff --git a/tests/gem.scm b/tests/gem.scm index a39e8ba514..4220170ff0 100644 --- a/tests/gem.scm +++ b/tests/gem.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015 David Thompson <davet@gnu.org> ;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net> +;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -23,10 +24,11 @@ #:use-module (guix hash) #:use-module (guix tests) #:use-module ((guix build utils) #:select (delete-file-recursively)) + #:use-module (srfi srfi-41) #:use-module (srfi srfi-64) #:use-module (ice-9 match)) -(define test-json +(define test-foo-json "{ \"name\": \"foo\", \"version\": \"1.0.0\", @@ -42,6 +44,34 @@ \"licenses\": [\"MIT\", \"Apache 2.0\"] }") +(define test-bar-json + "{ + \"name\": \"bar\", + \"version\": \"1.0.0\", + \"sha\": \"f3676eafca9987cb5fe263df1edf2538bf6dafc712b30e17be3543a9680547a8\", + \"info\": \"Another cool gem\", + \"homepage_uri\": \"https://example.com\", + \"dependencies\": { + \"runtime\": [ + { \"name\": \"bundler\" }, + ] + }, + \"licenses\": [\"MIT\", \"Apache 2.0\"] +}") + +(define test-bundler-json + "{ + \"name\": \"bundler\", + \"version\": \"1.14.2\", + \"sha\": \"3bb53e03db0a8008161eb4c816ccd317120d3c415ba6fee6f90bbc7f7eec8690\", + \"info\": \"Ruby gem bundler\", + \"homepage_uri\": \"https://bundler.io/\", + \"dependencies\": { + \"runtime\": [] + }, + \"licenses\": [\"MIT\"] +}") + (test-begin "gem") (test-assert "gem->guix-package" @@ -50,8 +80,8 @@ (lambda (url . rest) (match url ("https://rubygems.org/api/v1/gems/foo.json" - (values (open-input-string test-json) - (string-length test-json))) + (values (open-input-string test-foo-json) + (string-length test-foo-json))) (_ (error "Unexpected URL: " url))))) (match (gem->guix-package "foo") (('package @@ -76,4 +106,76 @@ (x (pk 'fail x #f))))) +(test-assert "gem-recursive-import" + ;; Replace network resources with sample data. + (mock ((guix http-client) http-fetch + (lambda (url . rest) + (match url + ("https://rubygems.org/api/v1/gems/foo.json" + (values (open-input-string test-foo-json) + (string-length test-foo-json))) + ("https://rubygems.org/api/v1/gems/bar.json" + (values (open-input-string test-bar-json) + (string-length test-bar-json))) + ("https://rubygems.org/api/v1/gems/bundler.json" + (values (open-input-string test-bundler-json) + (string-length test-bundler-json))) + (_ (error "Unexpected URL: " url))))) + (match (stream->list (gem-recursive-import "foo")) + ((('package + ('name "ruby-foo") + ('version "1.0.0") + ('source + ('origin + ('method 'url-fetch) + ('uri ('rubygems-uri "foo" 'version)) + ('sha256 + ('base32 + "1a270mlajhrmpqbhxcqjqypnvgrq4pgixpv3w9gwp1wrrapnwrzk")))) + ('build-system 'ruby-build-system) + ('propagated-inputs + ('quasiquote + (("bundler" ('unquote 'bundler)) + ("ruby-bar" ('unquote 'ruby-bar))))) + ('synopsis "A cool gem") + ('description "This package provides a cool gem") + ('home-page "https://example.com") + ('license ('list 'license:expat 'license:asl2.0))) + ('package + ('name "ruby-bundler") + ('version "1.14.2") + ('source + ('origin + ('method 'url-fetch) + ('uri ('rubygems-uri "bundler" 'version)) + ('sha256 + ('base32 + "1446xiz7zg0bz7kgx9jv84y0s4hpsg61dj5l3qb0i00avc1kxd9v")))) + ('build-system 'ruby-build-system) + ('synopsis "Ruby gem bundler") + ('description "Ruby gem bundler") + ('home-page "https://bundler.io/") + ('license 'license:expat)) + ('package + ('name "ruby-bar") + ('version "1.0.0") + ('source + ('origin + ('method 'url-fetch) + ('uri ('rubygems-uri "bar" 'version)) + ('sha256 + ('base32 + "1a270mlajhrmpqbhxcqjqypnvgrq4pgixpv3w9gwp1wrrapnwrzk")))) + ('build-system 'ruby-build-system) + ('propagated-inputs + ('quasiquote + (('"bundler" ('unquote 'bundler))))) + ('synopsis "Another cool gem") + ('description "Another cool gem") + ('home-page "https://example.com") + ('license ('list 'license:expat 'license:asl2.0)))) + #t) + (x + (pk 'fail x #f))))) + (test-end "gem") diff --git a/tests/gexp.scm b/tests/gexp.scm index 83fe811546..b22e635805 100644 --- a/tests/gexp.scm +++ b/tests/gexp.scm @@ -635,18 +635,16 @@ "guix/derivations.scm")) ("p/q" . ,(search-path %load-path "guix.scm")) ("p/z" . ,(search-path %load-path "guix/store.scm")))) - (drv (imported-files files))) + (dir (imported-files files))) (mbegin %store-monad - (built-derivations (list drv)) - (let ((dir (derivation->output-path drv))) - (return - (every (match-lambda - ((path . source) - (equal? (call-with-input-file (string-append dir "/" path) - get-bytevector-all) - (call-with-input-file source - get-bytevector-all)))) - files)))))) + (return + (every (match-lambda + ((path . source) + (equal? (call-with-input-file (string-append dir "/" path) + get-bytevector-all) + (call-with-input-file source + get-bytevector-all)))) + files))))) (test-assertm "imported-files with file-like objects" (mlet* %store-monad ((plain -> (plain-file "foo" "bar!")) @@ -654,16 +652,19 @@ (files -> `(("a/b/c" . ,q-scm) ("p/q" . ,plain))) (drv (imported-files files))) + (define (file=? file1 file2) + ;; Assume deduplication is in place. + (= (stat:ino (lstat file1)) + (stat:ino (lstat file2)))) + (mbegin %store-monad (built-derivations (list drv)) (mlet %store-monad ((dir -> (derivation->output-path drv)) (plain* (text-file "foo" "bar!")) (q-scm* (interned-file q-scm "c"))) (return - (and (string=? (readlink (string-append dir "/a/b/c")) - q-scm*) - (string=? (readlink (string-append dir "/p/q")) - plain*))))))) + (and (file=? (string-append dir "/a/b/c") q-scm*) + (file=? (string-append dir "/p/q") plain*))))))) (test-equal "gexp-modules & ungexp" '((bar) (foo)) @@ -948,7 +949,7 @@ (return (and (zero? (close-pipe pipe)) (= (expt n 2) (string->number str))))))) -(test-assertm "gexp->script #:module-path" +(test-assert "gexp->script #:module-path" (call-with-temporary-directory (lambda (directory) (define str @@ -961,23 +962,24 @@ (define-public %fake! ,str)) port))) - (mlet* %store-monad ((exp -> (with-imported-modules '((guix base32)) - (gexp (begin - (use-modules (guix base32)) - (write (list %load-path - %fake!)))))) - (drv (gexp->script "guile-thing" exp - #:guile %bootstrap-guile - #:module-path (list directory))) - (out -> (derivation->output-path drv)) - (done (built-derivations (list drv)))) - (let* ((pipe (open-input-pipe out)) - (data (read pipe))) - (return (and (zero? (close-pipe pipe)) - (match data - ((load-path str*) - (and (string=? str* str) - (not (member directory load-path)))))))))))) + (run-with-store %store + (mlet* %store-monad ((exp -> (with-imported-modules '((guix base32)) + (gexp (begin + (use-modules (guix base32)) + (write (list %load-path + %fake!)))))) + (drv (gexp->script "guile-thing" exp + #:guile %bootstrap-guile + #:module-path (list directory))) + (out -> (derivation->output-path drv)) + (done (built-derivations (list drv)))) + (let* ((pipe (open-input-pipe out)) + (data (read pipe))) + (return (and (zero? (close-pipe pipe)) + (match data + ((load-path str*) + (and (string=? str* str) + (not (member directory load-path))))))))))))) (test-assertm "program-file" (let* ((n (random (expt 2 50))) @@ -996,7 +998,7 @@ (return (and (zero? (close-pipe pipe)) (= n (string->number str))))))))) -(test-assertm "program-file #:module-path" +(test-assert "program-file #:module-path" (call-with-temporary-directory (lambda (directory) (define text (random-text)) @@ -1014,14 +1016,15 @@ (file (program-file "program" exp #:guile %bootstrap-guile #:module-path (list directory)))) - (mlet* %store-monad ((drv (lower-object file)) - (out -> (derivation->output-path drv))) - (mbegin %store-monad - (built-derivations (list drv)) - (let* ((pipe (open-input-pipe out)) - (str (get-string-all pipe))) - (return (and (zero? (close-pipe pipe)) - (string=? text str)))))))))) + (run-with-store %store + (mlet* %store-monad ((drv (lower-object file)) + (out -> (derivation->output-path drv))) + (mbegin %store-monad + (built-derivations (list drv)) + (let* ((pipe (open-input-pipe out)) + (str (get-string-all pipe))) + (return (and (zero? (close-pipe pipe)) + (string=? text str))))))))))) (test-assertm "program-file & with-extensions" (let* ((exp (with-extensions (list %extension-package) diff --git a/tests/guix-package.sh b/tests/guix-package.sh index 3b3fa35cd8..cef3b3452e 100644 --- a/tests/guix-package.sh +++ b/tests/guix-package.sh @@ -185,6 +185,16 @@ grep -E 'emacs[[:blank:]]+42\.5\.9rc7[[:blank:]]+.*-emacs-42.5.9rc7' \ rm "$emacs_tarball" "$tmpfile" rmdir "$module_dir" +# Profiles with a relative file name. Make sure we don't create dangling +# symlinks--see bug report at +# <https://lists.gnu.org/archive/html/guix-devel/2018-07/msg00036.html>. +mkdir -p "$module_dir/foo" +( cd "$module_dir" ; \ + guix package --bootstrap -i guile-bootstrap -p foo/prof ) +test -f "$module_dir/foo/prof/bin/guile" +rm "$module_dir/foo"/* +rmdir "$module_dir/foo" +rmdir "$module_dir" # # Try with the default profile. @@ -215,7 +225,7 @@ do guix package --bootstrap --roll-back ! test -f "$HOME/.guix-profile/bin" ! test -f "$HOME/.guix-profile/lib" - test "`readlink "$default_profile"`" = "$default_profile-0-link" + test "`readlink "$default_profile"`" = "`basename $default_profile-0-link`" done # Check whether '-p ~/.guix-profile' makes any difference. diff --git a/tests/hackage.scm b/tests/hackage.scm index a4de8be91e..e17851a213 100644 --- a/tests/hackage.scm +++ b/tests/hackage.scm @@ -69,6 +69,65 @@ library mtl >= 2.0 && < 3 ") +;; Check "-any", "-none" when name is different. +(define test-cabal-4 + "name: foo +version: 1.0.0 +homepage: http://test.org +synopsis: synopsis +description: description +license: BSD3 +library + if impl(ghcjs -any) + Build-depends: ghc-a + if impl(ghc>=7.2&&<7.6) + Build-depends: ghc-b + if impl(ghc == 7.8) + Build-depends: + HTTP >= 4000.2.5 && < 4000.3, + mtl >= 2.0 && < 3 +") + +;; Check "-any", "-none". +(define test-cabal-5 + "name: foo +version: 1.0.0 +homepage: http://test.org +synopsis: synopsis +description: description +license: BSD3 +library + if impl(ghc == 7.8) + Build-depends: + HTTP >= 4000.2.5 && < 4000.3, + if impl(ghc -any) + Build-depends: mtl >= 2.0 && < 3 + if impl(ghc>=7.2&&<7.6) + Build-depends: ghc-b +") + +;; Check "custom-setup". +(define test-cabal-6 + "name: foo +build-type: Custom +version: 1.0.0 +homepage: http://test.org +synopsis: synopsis +description: description +license: BSD3 +custom-setup + setup-depends: base >= 4.7 && < 5, + Cabal >= 1.24, + haskell-gi == 0.21.* +library + if impl(ghc>=7.2&&<7.6) + Build-depends: ghc-b + if impl(ghc == 7.8) + Build-depends: + HTTP >= 4000.2.5 && < 4000.3, + mtl >= 2.0 && < 3 +") + ;; A fragment of a real Cabal file with minor modification to check precedence ;; of 'and' over 'or', missing final newline, spaces between keywords and ;; parentheses and between key and column. @@ -139,6 +198,18 @@ library (eval-test-with-cabal test-cabal-3 #:cabal-environment '(("impl" . "ghc-7.8")))) +(test-assert "hackage->guix-package test 4" + (eval-test-with-cabal test-cabal-4 + #:cabal-environment '(("impl" . "ghc-7.8")))) + +(test-assert "hackage->guix-package test 5" + (eval-test-with-cabal test-cabal-5 + #:cabal-environment '(("impl" . "ghc-7.8")))) + +(test-assert "hackage->guix-package test 6" + (eval-test-with-cabal test-cabal-6 + #:cabal-environment '(("impl" . "ghc-7.8")))) + (test-assert "read-cabal test 1" (match (call-with-input-string test-read-cabal-1 read-cabal) ((("name" ("test-me")) diff --git a/tests/hash.scm b/tests/hash.scm index da87616eec..47dff3915b 100644 --- a/tests/hash.scm +++ b/tests/hash.scm @@ -64,12 +64,12 @@ (get))) (test-equal "open-sha256-port, hello" - %hello-sha256 + (list %hello-sha256 (string-length "hello world")) (let-values (((port get) (open-sha256-port))) (put-bytevector port (string->utf8 "hello world")) (force-output port) - (get))) + (list (get) (port-position port)))) (test-assert "port-sha256" (let* ((file (search-path %load-path "ice-9/psyntax.scm")) diff --git a/tests/inferior.scm b/tests/inferior.scm new file mode 100644 index 0000000000..5e0f8ae66e --- /dev/null +++ b/tests/inferior.scm @@ -0,0 +1,69 @@ +;;; 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 (test-inferior) + #:use-module (guix inferior) + #:use-module (guix packages) + #:use-module (gnu packages) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-64)) + +(define %top-srcdir + (dirname (search-path %load-path "guix.scm"))) + +(define %top-builddir + (dirname (search-path %load-compiled-path "guix.go"))) + + +(test-begin "inferior") + +(test-equal "open-inferior" + '(42 #t) + (let ((inferior (open-inferior %top-builddir + #:command "scripts/guix"))) + (and (inferior? inferior) + (let ((a (inferior-eval '(apply * '(6 7)) inferior)) + (b (inferior-eval '(@ (gnu packages base) coreutils) + inferior))) + (close-inferior inferior) + (list a (inferior-object? b)))))) + +(test-equal "inferior-packages" + (take (sort (fold-packages (lambda (package lst) + (alist-cons (package-name package) + (package-version package) + lst)) + '()) + (lambda (x y) + (string<? (car x) (car y)))) + 10) + (let* ((inferior (open-inferior %top-builddir + #:command "scripts/guix")) + (packages (inferior-packages inferior))) + (and (every string? (map inferior-package-synopsis packages)) + (begin + (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))))) + +(test-end "inferior") diff --git a/tests/nar.scm b/tests/nar.scm index 61646db964..9b5fb984b4 100644 --- a/tests/nar.scm +++ b/tests/nar.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -152,6 +152,66 @@ (test-begin "nar") +(test-assert "write-file-tree + restore-file" + (let* ((file1 (search-path %load-path "guix.scm")) + (file2 (search-path %load-path "guix/base32.scm")) + (file3 "#!/bin/something") + (output (string-append %test-dir "/output"))) + (dynamic-wind + (lambda () #t) + (lambda () + (define-values (port get-bytevector) + (open-bytevector-output-port)) + (write-file-tree "root" port + #:file-type+size + (match-lambda + ("root" + (values 'directory 0)) + ("root/foo" + (values 'regular (stat:size (stat file1)))) + ("root/lnk" + (values 'symlink 0)) + ("root/dir" + (values 'directory 0)) + ("root/dir/bar" + (values 'regular (stat:size (stat file2)))) + ("root/dir/exe" + (values 'executable (string-length file3)))) + #:file-port + (match-lambda + ("root/foo" (open-input-file file1)) + ("root/dir/bar" (open-input-file file2)) + ("root/dir/exe" (open-input-string file3))) + #:symlink-target + (match-lambda + ("root/lnk" "foo")) + #:directory-entries + (match-lambda + ("root" '("foo" "dir" "lnk")) + ("root/dir" '("bar" "exe")))) + (close-port port) + + (rm-rf %test-dir) + (mkdir %test-dir) + (restore-file (open-bytevector-input-port (get-bytevector)) + output) + (and (file=? (string-append output "/foo") file1) + (string=? (readlink (string-append output "/lnk")) + "foo") + (file=? (string-append output "/dir/bar") file2) + (string=? (call-with-input-file (string-append output "/dir/exe") + get-string-all) + file3) + (> (logand (stat:mode (lstat (string-append output "/dir/exe"))) + #o100) + 0) + (equal? '("." ".." "bar" "exe") + (scandir (string-append output "/dir"))) + (equal? '("." ".." "dir" "foo" "lnk") + (scandir output)))) + (lambda () + (false-if-exception (rm-rf %test-dir)))))) + (test-assert "write-file supports non-file output ports" (let ((input (string-append (dirname (search-path %load-path "guix.scm")) "/guix")) diff --git a/tests/opam.scm b/tests/opam.scm new file mode 100644 index 0000000000..26832174a8 --- /dev/null +++ b/tests/opam.scm @@ -0,0 +1,118 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2018 Julien Lepiller <julien@lepiller.eu> +;;; +;;; 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-opam) + #:use-module (guix import opam) + #:use-module (guix base32) + #:use-module (guix hash) + #:use-module (guix tests) + #:use-module ((guix build utils) #:select (delete-file-recursively mkdir-p which)) + #:use-module (srfi srfi-64) + #:use-module (web uri) + #:use-module (ice-9 match)) + +(define test-url-file + "http: \"https://example.org/foo-1.0.0.tar.gz\" +checksum: \"ac8920f39a8100b94820659bc2c20817\"") + +(define test-source-hash + "") + +(define test-urls + "repo ac8920f39a8100b94820659bc2c20817 0o644 +packages/foo/foo.1.0.0/url ac8920f39a8100b94820659bc2c20817 0o644 +packages/foo/foo.1.0.0/opam ac8920f39a8100b94820659bc2c20817 0o644 +packages/foo/foo.1.0.0/descr ac8920f39a8100b94820659bc2c20817 0o644") + +(define test-opam-file +"opam-version: 1.2 +maintainer: \"Alice Doe\" +authors: \"Alice Doe, John Doe\" +homepage: \"https://example.org/\" +bug-reports: \"https://example.org/bugs\" +license: \"MIT\" +dev-repo: \"https://example.org/git\" +build: [ + \"ocaml\" \"pkg/pkg.ml\" \"build\" \"--pinned\" \"%{pinned}%\" +] +build-test: [ + \"ocaml\" \"pkg/pkg.ml\" \"build\" \"--pinned\" \"%{pinned}%\" \"--tests\" \"true\" +] +depends: [ + \"alcotest\" {test & >= \"0.7.2\"} + \"ocamlbuild\" {build & >= \"0.9.2\"} +]") + +(test-begin "opam") + +(test-assert "opam->guix-package" + ;; Replace network resources with sample data. + (mock ((guix import utils) url-fetch + (lambda (url file-name) + (match url + ("https://example.org/foo-1.0.0.tar.gz" + (begin + (mkdir-p "foo-1.0.0") + (system* "tar" "czvf" file-name "foo-1.0.0/") + (delete-file-recursively "foo-1.0.0") + (set! test-source-hash + (call-with-input-file file-name port-sha256)))) + (_ (error "Unexpected URL: " url))))) + (mock ((guix http-client) http-fetch/cached + (lambda (url . rest) + (match (uri->string url) + ("https://opam.ocaml.org/urls.txt" + (values (open-input-string test-urls) + (string-length test-urls))) + (_ (error "Unexpected URL: " url))))) + (mock ((guix http-client) http-fetch + (lambda (url . rest) + (match url + ("https://opam.ocaml.org/packages/foo/foo.1.0.0/url" + (values (open-input-string test-url-file) + (string-length test-url-file))) + ("https://opam.ocaml.org/packages/foo/foo.1.0.0/opam" + (values (open-input-string test-opam-file) + (string-length test-opam-file))) + (_ (error "Unexpected URL: " url))))) + (match (opam->guix-package "foo") + (('package + ('name "ocaml-foo") + ('version "1.0.0") + ('source ('origin + ('method 'url-fetch) + ('uri "https://example.org/foo-1.0.0.tar.gz") + ('sha256 + ('base32 + (? string? hash))))) + ('build-system 'ocaml-build-system) + ('inputs + ('quasiquote + (("ocamlbuild" ('unquote 'ocamlbuild)) + ("ocaml-alcotest" ('unquote 'ocaml-alcotest))))) + ('home-page "https://example.org/") + ('synopsis "") + ('description "") + ('license 'license:expat)) + (string=? (bytevector->nix-base32-string + test-source-hash) + hash)) + (x + (pk 'fail x #f))))))) + +(test-end "opam") diff --git a/tests/pypi.scm b/tests/pypi.scm index 74f13e9662..310c6c8f29 100644 --- a/tests/pypi.scm +++ b/tests/pypi.scm @@ -89,7 +89,7 @@ baz > 13.37") (dummy-package "foo" (source (dummy-origin (uri - "https://pypi.python.org/packages/a2/3b/4756e6a0ceb14e084042a2a65c615d68d25621c6fd446d0fc10d14c4ce7d/certbot-0.8.1.tar.gz")))))) + "https://pypi.org/packages/a2/3b/4756e6a0ceb14e084042a2a65c615d68d25621c6fd446d0fc10d14c4ce7d/certbot-0.8.1.tar.gz")))))) (test-equal "guix-package->pypi-name, several URLs" "cram" @@ -120,7 +120,7 @@ baz > 13.37") (mock ((guix http-client) http-fetch (lambda (url . rest) (match url - ("https://pypi.python.org/pypi/foo/json" + ("https://pypi.org/pypi/foo/json" (values (open-input-string test-json) (string-length test-json))) ("https://example.com/foo-1.0.0-py2.py3-none-any.whl" #f) @@ -182,7 +182,7 @@ baz > 13.37") (mock ((guix http-client) http-fetch (lambda (url . rest) (match url - ("https://pypi.python.org/pypi/foo/json" + ("https://pypi.org/pypi/foo/json" (values (open-input-string test-json) (string-length test-json))) ("https://example.com/foo-1.0.0-py2.py3-none-any.whl" #f) diff --git a/tests/store-database.scm b/tests/store-database.scm index fcae66e2de..4d91884250 100644 --- a/tests/store-database.scm +++ b/tests/store-database.scm @@ -32,7 +32,8 @@ (test-begin "store-database") -(test-assert "register-path" +(test-equal "register-path" + '(1 1) (let ((file (string-append (%store-prefix) "/" (make-string 32 #\f) "-fake"))) (when (valid-path? %store file) @@ -50,7 +51,9 @@ (and (valid-path? %store file) (equal? (references %store file) (list ref)) (null? (valid-derivers %store file)) - (null? (referrers %store file)))))) + (null? (referrers %store file)) + (list (stat:mtime (lstat file)) + (stat:mtime (lstat ref))))))) (test-equal "new database" (list 1 2) diff --git a/tests/store.scm b/tests/store.scm index afecec940a..47fab0df18 100644 --- a/tests/store.scm +++ b/tests/store.scm @@ -210,6 +210,52 @@ (valid-path? store path) (file-exists? path))))) +(test-equal "add-file-tree-to-store" + `(42 + ("." directory #t) + ("./bar" directory #t) + ("./foo" directory #t) + ("./foo/a" regular "file a") + ("./foo/b" symlink "a") + ("./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/y" symlink "..") + ("./foo/c/q/z" directory #t)) + (let* ((tree `("file-tree" directory + ("foo" directory + ("a" regular (data "file a")) + ("b" symlink "a") + ("c" directory + ("p" regular (data ,(string->utf8 "file p"))) + ("q" directory + ("x" executable + (data "#!/bin/sh\nexit 42")) + ("y" symlink "..") + ("z" directory)))) + ("bar" directory))) + (result (add-file-tree-to-store %store tree))) + (cons (status:exit-val (system* (string-append result "/foo/c/q/x"))) + (with-directory-excursion result + (map (lambda (file) + (let ((type (stat:type (lstat file)))) + `(,file ,type + ,(match type + ((or 'regular 'executable) + (call-with-input-file file + get-string-all)) + ('symlink (readlink file)) + ('directory #t))))) + (find-files "." #:directories? #t)))))) + +(test-equal "add-file-tree-to-store, flat" + "Hello, world!" + (let* ((tree `("flat-file" regular (data "Hello, world!"))) + (result (add-file-tree-to-store %store tree))) + (and (file-exists? result) + (call-with-input-file result get-string-all)))) + (test-assert "references" (let* ((t1 (add-text-to-store %store "random1" (random-text))) |