diff options
209 files changed, 12807 insertions, 3048 deletions
diff --git a/Makefile.am b/Makefile.am index a7a67e81cf..0e5ca02ed3 100644 --- a/Makefile.am +++ b/Makefile.am @@ -107,6 +107,7 @@ MODULES = \ guix/build-system/clojure.scm \ guix/build-system/cmake.scm \ guix/build-system/dub.scm \ + guix/build-system/dune.scm \ guix/build-system/emacs.scm \ guix/build-system/font.scm \ guix/build-system/go.scm \ @@ -144,6 +145,7 @@ MODULES = \ guix/build/cargo-build-system.scm \ guix/build/cmake-build-system.scm \ guix/build/dub-build-system.scm \ + guix/build/dune-build-system.scm \ guix/build/emacs-build-system.scm \ guix/build/meson-build-system.scm \ guix/build/minify-build-system.scm \ @@ -329,6 +331,7 @@ SCM_TESTS = \ tests/base16.scm \ tests/base32.scm \ tests/base64.scm \ + tests/channels.scm \ tests/cpan.scm \ tests/cpio.scm \ tests/crate.scm \ @@ -11,28 +11,38 @@ Copyright © 2016, 2017, 2018 Ricardo Wurmus <rekado@elephly.net> Please send Guix bug reports to bug-guix@gnu.org. -* Changes since 0.15.0 +* Changes in 0.16.0 (since 0.15.0) ** Package management +*** Default substitute URL changed to https://ci.guix.info *** ‘guix pull -l’ lists new and upgraded packages *** ‘guix pull’ now supports channels via ~/.config/guix/channels.scm *** New ‘--profile’ or ‘-p’ option for ‘guix pull’ +*** ~/.config/guix/current is now a symlink to /var/guix/profiles *** New ‘guix describe’ command *** ‘guix package’ no longer shows build logs by default *** ‘guix’ commands now produce colored output by default +*** User interface now reports grafts separately *** Manifests can now refer to arbitrary Guix commits using “inferiors” +*** New ‘--with-branch’ and ‘--with-commit’ package transformation options +*** ‘guix build -f’ now accepts any kind of “file-like object” +*** Git checkouts may now be fetched from Software Heritage +*** New ‘guix repl’ command for use by inferiors *** New ‘guix processes’ command *** ‘guix pack’ now honors ‘--localstatedir’ for all its backends +*** New ‘opam’ importer for ‘guix import’ *** ‘guix import pypi’ has a new ‘--recursive’ option *** ‘guix import hackage’ has a new ‘--recursive’ option *** ‘guix import stackage’ has a new ‘--recursive’ option The short option for ‘--lts-version’ is now ‘-l’ (used to be ‘-r’). *** ‘guix refresh’ now stores upstream keys in ~/.config/guix/upstream *** Guix now depends on Guile-Gcrypt +*** Guix now requires Guile-JSON ** Distribution +*** Rust is now bootstrapped from mrustc *** The GNU Shepherd was upgraded to 0.5.0 *** ‘guix system reconfigure’ now loads Shepherd service replacements *** ‘herd schedule mcron’ now displays mcron’s job schedule @@ -40,21 +50,59 @@ The short option for ‘--lts-version’ is now ‘-l’ (used to be ‘-r’). *** ‘herd invalidate nscd TABLE’ instructs nscd to invalidate TABLE *** New services -gitolite, iptables, pcscd, prometheus-node-exporter, varnish +ddclient, gitolite, iptables, pcscd, prometheus-node-exporter, varnish + +*** 985 new packages + +*** 1945 package updates + +Noteworthy updates: +bash 4.4.23, binutils 2.31.1, cups 2.2.8, enlightenment 0.22.4, gcc 8.2.0, +gdb 8.2, ghc 8.4.3, gimp 2.10.6, glibc 2.28, gnupg 2.2.11, go 1.11.1, +guile 2.2.4, icecat 60.3.0-gnu1, icedtea 3.7.0, libreoffice 6.1.3.2, +linux-libre 4.19.6, ocaml 4.07.1, octave 4.4.1, perl 5.28.0, +python2 2.7.15, python 3.7.0, racket 7.0, rust 1.28.0, r 3.5.1, +sbcl 1.4.13, shepherd 0.5.0, xorg-server 1.20.3 ** Programming interfaces -*** New (guix channels) module -*** New (guix inferior) module -*** New (guix status) module +*** New (guix channels) module, see “Channels” in the manual +*** New (guix inferior) module, see “Inferiors” in the manual +*** New (guix describe) module, used by ‘guix describe’ +*** New (guix status) module, for build progress reporting *** ‘packages->manifest’ now accepts inferior packages *** New build systems: ‘clojure’, ‘guile’ +*** New ‘git-checkout’ record constructor in (guix git) *** Shepherd services can now declare custom actions *** More of the (gnu system …) APIs are now non-monadic *** New ‘add-file-tree-to-store’ procedure in (guix store) +*** New (guix swh) module to access Software Heritage +*** New (guix build debug-link) module, for ELF ‘.gnu_debuglink’ sections ** Noteworthy bug fixes +*** Fix GCC crashes caused by a patch of ours (<https://bugs.gnu.org/31708>) +*** ‘guix import hackage’ now supports ‘custom-setup’ field + (<https://bugs.gnu.org/23961>) +*** ‘guix-daemon’ taken from ‘guix pull’ looks up ‘guix’ in the right place + (<https://bugs.gnu.org/32183>) +*** Try several file names when looking up kernel modules + (<https://bugs.gnu.org/31714>) +*** ‘file-system-*’ services are now always started after ‘udev’ + (<https://bugs.gnu.org/32313>) +*** Racket now ignores bytecode checksums for files in the store + (<https://bugs.gnu.org/30680>) +*** Grafting now updates CRCs in ‘.gnu_debuglink’ ELF sections + (<https://bugs.gnu.org/19973>) +*** UUID computation for VMs is now deterministic (<https://bugs.gnu.org/32652>) +*** ‘git-predicate’ from (guix git) now uses Guile-Git, which fixes corner cases + (<https://bugs.gnu.org/27925>) +*** (guix store database) registers each store item only once + (<https://bugs.gnu.org/32600>) +*** The File > Open dialog in LibreOffice no longer triggers a crash + (<https://bugs.gnu.org/30642>) +*** Account home directory is always honored (<https://bugs.gnu.org/33422>) + ** Native language support *** The manual is now partially translated into German, in addition to French diff --git a/build-aux/hydra/gnu-system.scm b/build-aux/hydra/gnu-system.scm index d6b0132807..b225c02077 100644 --- a/build-aux/hydra/gnu-system.scm +++ b/build-aux/hydra/gnu-system.scm @@ -162,6 +162,8 @@ SYSTEM." (long-description . "This is a demo stand-alone QEMU image of the GNU system.") (license . ,gpl3+) + (max-silent-time . 600) + (timeout . 3600) (home-page . ,%guix-home-page-url) (maintainers . ("bug-guix@gnu.org")))) @@ -187,14 +189,14 @@ system.") (bootloader u-boot-bootloader) (target #f)))) #:disk-image-size - (* 1024 MiB)))))) + (* 1500 MiB)))))) (list (->job 'usb-image (run-with-store store (mbegin %store-monad (set-guile-for-build (default-guile)) (system-disk-image installation-os #:disk-image-size - (* 1024 MiB))))) + (* 1500 MiB))))) (->job 'iso9660-image (run-with-store store (mbegin %store-monad @@ -221,6 +223,8 @@ system.") (system-test-name test))) (long-description . ,(system-test-description test)) (license . ,gpl3+) + (max-silent-time . 600) + (timeout . 3600) (home-page . ,%guix-home-page-url) (maintainers . ("bug-guix@gnu.org"))))) diff --git a/build-aux/update-NEWS.scm b/build-aux/update-NEWS.scm index a9dffef1d2..bf5f0e141b 100644 --- a/build-aux/update-NEWS.scm +++ b/build-aux/update-NEWS.scm @@ -30,6 +30,7 @@ (ice-9 match) (ice-9 rdelim) (ice-9 regex) + (ice-9 vlist) (ice-9 pretty-print)) (define %header-rx @@ -98,31 +99,60 @@ paragraph." (lambda (match port) (let ((stars (match:substring match 1))) (format port - "~a ~a new packages~%~%~a~%~%" - stars (length added) - (enumeration->paragraph added))))))))) + "~a ~a new packages~%~%" + stars (length added))))))))) (define (write-packages-updates news-file old new) "Write to NEWS-FILE the list of packages upgraded between OLD and NEW." - (let ((upgraded (filter-map (match-lambda - ((package . new-version) - (match (assoc package old) - ((_ . old-version) - (and (version>? new-version old-version) - (string-append package "@" - new-version))) - (_ #f)))) - new))) + (define important + '("gcc" "glibc" "binutils" "gdb" ;toolchain + "shepherd" "linux-libre" "xorg-server" "cups" ;OS + "gnome" "xfce" "enlightenment" "lxde" "mate" ;desktop env. + "guile" "bash" "python" "python2" "perl" ;languages + "ghc" "rust" "go" "julia" "r" "ocaml" + "icedtea" "openjdk" "clojure" "sbcl" "racket" + "emacs" "gimp" "inkscape" "libreoffice" ;applications + "octave" "icecat" "gnupg")) + + (let* ((table (fold (lambda (package table) + (match package + ((name . version) + (vhash-cons name version table)))) + vlist-null + new)) + (latest (lambda (name) + (let ((versions (vhash-fold* cons '() name table))) + (match (sort versions version>?) + ((latest . _) latest))))) + (upgraded (filter-map (match-lambda + ((package . new-version) + (match (assoc package old) + ((_ . old-version) + (and (string=? new-version + (latest package)) + (version>? new-version old-version) + (cons package new-version))) + (_ #f)))) + new)) + (noteworthy (filter (match-lambda + ((package . version) + (member package important))) + upgraded))) (with-atomic-file-replacement news-file (lambda (input output) (rewrite-org-section input output (make-regexp "^(\\*+) (.*) package updates") (lambda (match port) - (let ((stars (match:substring match 1))) + (let ((stars (match:substring match 1)) + (lst (map (match-lambda + ((package . version) + (string-append package " " + version))) + noteworthy))) (format port - "~a ~a package updates~%~%~a~%~%" + "~a ~a package updates~%~%Noteworthy updates:~%~a~%~%" stars (length upgraded) - (enumeration->paragraph upgraded))))))))) + (enumeration->paragraph lst))))))))) (define (main . args) @@ -138,6 +168,8 @@ paragraph." (let-values (((previous-version new-version) (call-with-input-file news-file NEWS->versions))) + (format (current-error-port) "Updating NEWS for ~a to ~a...~%" + previous-version new-version) (let* ((old (call-with-input-file (package-file previous-version) read)) (new (fold-packages (lambda (p r) diff --git a/build-aux/update-guix-package.scm b/build-aux/update-guix-package.scm index 9598872dfd..83f6eca6bb 100644 --- a/build-aux/update-guix-package.scm +++ b/build-aux/update-guix-package.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2017 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2017, 2018 Ludovic Courtès <ludo@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -133,7 +133,8 @@ COMMIT." ;; Add an indirect GC root for SOURCE in the current directory. (false-if-exception (delete-file root)) (symlink source root) - (add-indirect-root store root) + (add-indirect-root store + (string-append (getcwd) "/" root)) (format #t "source code for commit ~a: ~a (GC root: ~a)~%" commit source root))))) diff --git a/doc/contributing.texi b/doc/contributing.texi index c55eb63382..f24886233d 100644 --- a/doc/contributing.texi +++ b/doc/contributing.texi @@ -382,7 +382,9 @@ Take a look at the profile reported by @command{guix size} (@pxref{Invoking guix size}). This will allow you to notice references to other packages unwillingly retained. It may also help determine whether to split the package (@pxref{Packages with Multiple Outputs}), -and which optional dependencies should be used. +and which optional dependencies should be used. In particular, avoid adding +@code{texlive} as a dependency: because of its extreme size, use +@code{texlive-tiny} or @code{texlive-union} instead. @item For important changes, check that dependent package (if applicable) are diff --git a/doc/guix.texi b/doc/guix.texi index c138d43242..fcb5b8c088 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -14,7 +14,7 @@ @set KEY-SERVER pool.sks-keyservers.net @c The official substitute server used by default. -@set SUBSTITUTE-SERVER mirror.hydra.gnu.org +@set SUBSTITUTE-SERVER ci.guix.info @copying Copyright @copyright{} 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès@* @@ -585,12 +585,12 @@ Info search path.) @item @cindex substitutes, authorization thereof -To use substitutes from @code{hydra.gnu.org} or one of its mirrors +To use substitutes from @code{@value{SUBSTITUTE-SERVER}} or one of its mirrors (@pxref{Substitutes}), authorize them: @example # guix archive --authorize < \ - ~root/.config/guix/current/share/guix/hydra.gnu.org.pub + ~root/.config/guix/current/share/guix/@value{SUBSTITUTE-SERVER}.pub @end example @item @@ -1051,13 +1051,11 @@ name, and they will be scheduled on matching build machines. @end table @end deftp -The @code{guile} command must be in the search path on the build -machines. In addition, the Guix modules must be in -@code{$GUILE_LOAD_PATH} on the build machine---you can check whether -this is the case by running: +The @command{guix} command must be in the search path on the build +machines. You can check whether this is the case by running: @example -ssh build-machine guile -c "'(use-modules (guix config))'" +ssh build-machine guix repl --version @end example There is one last thing to do once @file{machines.scm} is in place. As @@ -2120,7 +2118,8 @@ availability of packages: @itemx -s @var{regexp} @cindex searching for packages List the available packages whose name, synopsis, or description matches -@var{regexp}, sorted by relevance. Print all the metadata of matching packages in +@var{regexp} (in a case-insensitive fashion), sorted by relevance. +Print all the metadata of matching packages in @code{recutils} format (@pxref{Top, GNU recutils databases,, recutils, GNU recutils manual}). @@ -2888,6 +2887,11 @@ Use @var{profile} instead of @file{~/.config/guix/current}. Show which channel commit(s) would be used and what would be built or substituted but do not actually do it. +@item --system=@var{system} +@itemx -s @var{system} +Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of +the system type of the build host. + @item --verbose Produce verbose output, writing build logs to the standard error output. @@ -3037,6 +3041,39 @@ the new and upgraded packages that are listed, some like @code{my-gimp} and @code{my-emacs-with-cool-features} might come from @code{my-personal-packages}, while others come from the Guix default channel. +@cindex dependencies, channels +@cindex meta-data, channels +@subsection Declaring Channel Dependencies + +Channel authors may decide to augment a package collection provided by other +channels. They can declare their channel to be dependent on other channels in +a meta-data file @file{.guix-channel}, which is to be placed in the root of +the channel repository. + +The meta-data file should contain a simple S-expression like this: + +@lisp +(channel + (version 0) + (dependencies + (channel + (name some-collection) + (url "https://example.org/first-collection.git")) + (channel + (name some-other-collection) + (url "https://example.org/second-collection.git") + (branch "testing")))) +@end lisp + +In the above example this channel is declared to depend on two other channels, +which will both be fetched automatically. The modules provided by the channel +will be compiled in an environment where the modules of all these declared +channels are available. + +For the sake of reliability and maintainability, you should avoid dependencies +on channels that you don't control, and you should aim to keep the number of +dependencies to a minimum. + @subsection Replicating Guix @cindex pinning, channels @@ -4479,6 +4516,27 @@ debugging information''), which roughly means that code is compiled with @code{-O2 -g}, as is the case for Autoconf-based packages by default. @end defvr +@defvr {Scheme Variable} dune-build-system +This variable is exported by @code{(guix build-system dune)}. It +supports builds of packages using @uref{https://dune.build/, Dune}, a build +tool for the OCaml programming language. It is implemented as an extension +of the @code{ocaml-build-system} which is described below. As such, the +@code{#:ocaml} and @code{#:findlib} parameters can be passed to this build +system. + +It automatically adds the @code{dune} package to the set of inputs. +Which package is used can be specified with the @code{#:dune} +parameter. + +There is no @code{configure} phase because dune packages typically don't +need to be configured. The @code{#:build-flags} parameter is taken as a +list of flags passed to the @code{dune} command during the build. + +The @code{#:jbuild?} parameter can be passed to use the @code{jbuild} +command instead of the more recent @code{dune} command while building +a package. Its default value is @code{#f}. +@end defvr + @defvr {Scheme Variable} go-build-system This variable is exported by @code{(guix build-system go)}. It implements a build procedure for Go packages using the standard @@ -7337,6 +7395,22 @@ are many packages, though, for which it lacks a method to determine whether a new upstream release is available. However, the mechanism is extensible, so feel free to get in touch with us to add a new method! +@table @code + +@item --recursive +Consider the packages specified, and all the packages upon which they depend. + +@example +$ guix refresh --recursive coreutils +gnu/packages/acl.scm:35:2: warning: no updater for acl +gnu/packages/m4.scm:30:12: info: 1.4.18 is already the latest version of m4 +gnu/packages/xml.scm:68:2: warning: no updater for expat +gnu/packages/multiprecision.scm:40:12: info: 6.1.2 is already the latest version of gmp +@dots{} +@end example + +@end table + Sometimes the upstream name differs from the package name used in Guix, and @command{guix refresh} needs a little help. Most updaters honor the @code{upstream-name} property in package definitions, which can be used @@ -7510,6 +7584,22 @@ hop@@2.4.0 geiser@@0.4 notmuch@@0.18 mu@@0.9.9.5 cflow@@1.4 idutils@@4.6 @dots{} The command above lists a set of packages that could be built to check for compatibility with an upgraded @code{flex} package. +@table @code + +@item --list-transitive +List all the packages which one or more packages depend upon. + +@example +$ guix refresh --list-transitive flex +flex@@2.6.4 depends on the following 25 packages: perl@@5.28.0 help2man@@1.47.6 +bison@@3.0.5 indent@@2.2.10 tar@@1.30 gzip@@1.9 bzip2@@1.0.6 xz@@5.2.4 file@@5.33 @dots{} +@end example + +@end table + +The command above lists a set of packages which, when changed, would cause +@code{flex} to be rebuilt. + The following options can be used to customize GnuPG operation: @table @code @@ -7605,12 +7695,19 @@ Identify inputs that should most likely be native inputs. @item source @itemx home-page @itemx mirror-url +@itemx github-url @itemx source-file-name Probe @code{home-page} and @code{source} URLs and report those that are -invalid. Suggest a @code{mirror://} URL when applicable. Check that -the source file name is meaningful, e.g.@: is not -just a version number or ``git-checkout'', without a declared -@code{file-name} (@pxref{origin Reference}). +invalid. Suggest a @code{mirror://} URL when applicable. If the +@code{source} URL redirects to a GitHub URL, recommend usage of the GitHub +URL. Check that the source file name is meaningful, e.g.@: is not just a +version number or ``git-checkout'', without a declared @code{file-name} +(@pxref{origin Reference}). + +@item source-unstable-tarball +Parse the @code{source} URL to determine if a tarball from GitHub is +autogenerated or if it is a release tarball. Unfortunately GitHub's +autogenerated tarballs are sometimes regenerated. @item cve @cindex security vulnerabilities @@ -8317,7 +8414,8 @@ guix environment --container --share=$HOME=/exchange --ad-hoc guile -- guile @command{guix environment} also supports all of the common build options that @command{guix -build} supports (@pxref{Common Build Options}). +build} supports (@pxref{Common Build Options}) as well as package +transformation options (@pxref{Package Transformation Options}). @node Invoking guix publish @@ -9069,7 +9167,7 @@ More and more system services are provided (@pxref{Services}), but some may be missing. @item -More than 7,500 packages are available, but you might +More than 8,500 packages are available, but you might occasionally find that a useful package is missing. @item @@ -11275,6 +11373,7 @@ Run @var{udev}, which populates the @file{/dev} directory dynamically. udev rules can be provided as a list of files through the @var{rules} variable. The procedures @var{udev-rule} and @var{file->udev-rule} from @code{(gnu services base)} simplify the creation of such rule files. +@end deffn @deffn {Scheme Procedure} udev-rule [@var{file-name} @var{contents}] Return a udev-rule file named @var{file-name} containing the rules @@ -11292,6 +11391,9 @@ upon detecting a USB device with a given product identifier. "ATTR@{product@}==\"Example\", " "RUN+=\"/path/to/script\""))) @end example + +The @command{herd rules udev} command, as root, returns the name of the +directory containing all the active udev rules. @end deffn Here we show how the default @var{udev-service} can be extended with it. @@ -11373,7 +11475,6 @@ well as in the @var{groups} field of the @var{operating-system} record. (rules (cons* android-udev-rules (udev-configuration-rules config)))))))) @end example -@end deffn @defvr {Scheme Variable} urandom-seed-service-type Save some entropy in @var{%random-seed-file} to seed @file{/dev/urandom} @@ -16237,6 +16338,37 @@ Configuration snippet added as-is to the BitlBee configuration file. @end table @end deftp +@subsubheading Quassel Service + +@cindex IRC (Internet Relay Chat) +@url{https://quassel-irc.org/,Quassel} is a distributed IRC client, +meaning that one or more clients can attach to and detach from the +central core. + +@defvr {Scheme Variable} quassel-service-type +This is the service type for the @url{https://quassel-irc.org/,Quassel} +IRC backend daemon. Its value is a @code{quassel-configuration} +(see below). +@end defvr + +@deftp {Data Type} quassel-configuration +This is the configuration for Quassel, with the following fields: + +@table @asis +@item @code{quassel} (default: @code{quassel}) +The Quassel package to use. + +@item @code{interface} (default: @code{"::,0.0.0.0"}) +@item @code{port} (default: @code{4242}) +Listen on the network interface(s) corresponding to the IPv4 or IPv6 +interfaces specified in the comma delimited @var{interface}, on +@var{port}. + +@item @code{loglevel} (default: @code{"Info"}) +The level of logging desired. Accepted values are Debug, Info, Warning +and Error. +@end table +@end deftp @node Telephony Services @subsubsection Telephony Services @@ -16629,6 +16761,325 @@ Bind the web interface to the specified address. @end table @end deftp +@subsubheading Zabbix server +@cindex zabbix zabbix-server +Zabbix provides monitoring metrics, among others network utilization, CPU load +and disk space consumption: + +@itemize +@item High performance, high capacity (able to monitor hundreds of thousands of devices). +@item Auto-discovery of servers and network devices and interfaces. +@item Low-level discovery, allows to automatically start monitoring new items, file systems or network interfaces among others. +@item Distributed monitoring with centralized web administration. +@item Native high performance agents. +@item SLA, and ITIL KPI metrics on reporting. +@item High-level (business) view of monitored resources through user-defined visual console screens and dashboards. +@item Remote command execution through Zabbix proxies. +@end itemize + +@c %start of fragment + +Available @code{zabbix-server-configuration} fields are: + +@deftypevr {@code{zabbix-server-configuration} parameter} package zabbix-server +The zabbix-server package. + +@end deftypevr + +@deftypevr {@code{zabbix-server-configuration} parameter} string user +User who will run the Zabbix server. + +Defaults to @samp{"zabbix"}. + +@end deftypevr + +@deftypevr {@code{zabbix-server-configuration} parameter} group group +Group who will run the Zabbix server. + +Defaults to @samp{"zabbix"}. + +@end deftypevr + +@deftypevr {@code{zabbix-server-configuration} parameter} string db-host +Database host name. + +Defaults to @samp{"127.0.0.1"}. + +@end deftypevr + +@deftypevr {@code{zabbix-server-configuration} parameter} string db-name +Database name. + +Defaults to @samp{"zabbix"}. + +@end deftypevr + +@deftypevr {@code{zabbix-server-configuration} parameter} string db-user +Database user. + +Defaults to @samp{"zabbix"}. + +@end deftypevr + +@deftypevr {@code{zabbix-server-configuration} parameter} string db-password +Database password. Please, use @code{include-files} with +@code{DBPassword=SECRET} inside a specified file instead. + +Defaults to @samp{""}. + +@end deftypevr + +@deftypevr {@code{zabbix-server-configuration} parameter} number db-port +Database port. + +Defaults to @samp{5432}. + +@end deftypevr + +@deftypevr {@code{zabbix-server-configuration} parameter} string log-type +Specifies where log messages are written to: + +@itemize @bullet +@item +@code{system} - syslog. + +@item +@code{file} - file specified with @code{log-file} parameter. + +@item +@code{console} - standard output. + +@end itemize + +Defaults to @samp{""}. + +@end deftypevr + +@deftypevr {@code{zabbix-server-configuration} parameter} string log-file +Log file name for @code{log-type} @code{file} parameter. + +Defaults to @samp{"/var/log/zabbix/server.log"}. + +@end deftypevr + +@deftypevr {@code{zabbix-server-configuration} parameter} string pid-file +Name of PID file. + +Defaults to @samp{"/var/run/zabbix/zabbix_server.pid"}. + +@end deftypevr + +@deftypevr {@code{zabbix-server-configuration} parameter} string ssl-ca-location +The location of certificate authority (CA) files for SSL server +certificate verification. + +Defaults to @samp{"/etc/ssl/certs/ca-certificates.crt"}. + +@end deftypevr + +@deftypevr {@code{zabbix-server-configuration} parameter} string ssl-cert-location +Location of SSL client certificates. + +Defaults to @samp{"/etc/ssl/certs"}. + +@end deftypevr + +@deftypevr {@code{zabbix-server-configuration} parameter} string extra-options +Extra options will be appended to Zabbix server configuration file. + +Defaults to @samp{""}. + +@end deftypevr + +@deftypevr {@code{zabbix-server-configuration} parameter} include-files include-files +You may include individual files or all files in a directory in the +configuration file. + +Defaults to @samp{()}. + +@end deftypevr + +@c %end of fragment + +@subsubheading Zabbix agent +@cindex zabbix zabbix-agent + +Zabbix agent gathers information for Zabbix server. + +@c %start of fragment + +Available @code{zabbix-agent-configuration} fields are: + +@deftypevr {@code{zabbix-agent-configuration} parameter} package zabbix-agent +The zabbix-agent package. + +@end deftypevr + +@deftypevr {@code{zabbix-agent-configuration} parameter} string user +User who will run the Zabbix agent. + +Defaults to @samp{"zabbix"}. + +@end deftypevr + +@deftypevr {@code{zabbix-agent-configuration} parameter} group group +Group who will run the Zabbix agent. + +Defaults to @samp{"zabbix"}. + +@end deftypevr + +@deftypevr {@code{zabbix-agent-configuration} parameter} string hostname +Unique, case sensitive hostname which is required for active checks and +must match hostname as configured on the server. + +Defaults to @samp{"Zabbix server"}. + +@end deftypevr + +@deftypevr {@code{zabbix-agent-configuration} parameter} string log-type +Specifies where log messages are written to: + +@itemize @bullet +@item +@code{system} - syslog. + +@item +@code{file} - file specified with @code{log-file} parameter. + +@item +@code{console} - standard output. + +@end itemize + +Defaults to @samp{""}. + +@end deftypevr + +@deftypevr {@code{zabbix-agent-configuration} parameter} string log-file +Log file name for @code{log-type} @code{file} parameter. + +Defaults to @samp{"/var/log/zabbix/agent.log"}. + +@end deftypevr + +@deftypevr {@code{zabbix-agent-configuration} parameter} string pid-file +Name of PID file. + +Defaults to @samp{"/var/run/zabbix/zabbix_agent.pid"}. + +@end deftypevr + +@deftypevr {@code{zabbix-agent-configuration} parameter} list server +List of IP addresses, optionally in CIDR notation, or hostnames of +Zabbix servers and Zabbix proxies. Incoming connections will be +accepted only from the hosts listed here. + +Defaults to @samp{("127.0.0.1")}. + +@end deftypevr + +@deftypevr {@code{zabbix-agent-configuration} parameter} list server-active +List of IP:port (or hostname:port) pairs of Zabbix servers and Zabbix +proxies for active checks. If port is not specified, default port is +used. If this parameter is not specified, active checks are disabled. + +Defaults to @samp{("127.0.0.1")}. + +@end deftypevr + +@deftypevr {@code{zabbix-agent-configuration} parameter} string extra-options +Extra options will be appended to Zabbix server configuration file. + +Defaults to @samp{""}. + +@end deftypevr + +@deftypevr {@code{zabbix-agent-configuration} parameter} include-files include-files +You may include individual files or all files in a directory in the +configuration file. + +Defaults to @samp{()}. + +@end deftypevr + +@c %end of fragment + +@subsubheading Zabbix front-end +@cindex zabbix zabbix-front-end + +This service provides a WEB interface to Zabbix server. + +@c %start of fragment + +Available @code{zabbix-front-end-configuration} fields are: + +@deftypevr {@code{zabbix-front-end-configuration} parameter} nginx-server-configuration-list nginx +NGINX configuration. + +@end deftypevr + +@deftypevr {@code{zabbix-front-end-configuration} parameter} string db-host +Database host name. + +Defaults to @samp{"localhost"}. + +@end deftypevr + +@deftypevr {@code{zabbix-front-end-configuration} parameter} number db-port +Database port. + +Defaults to @samp{5432}. + +@end deftypevr + +@deftypevr {@code{zabbix-front-end-configuration} parameter} string db-name +Database name. + +Defaults to @samp{"zabbix"}. + +@end deftypevr + +@deftypevr {@code{zabbix-front-end-configuration} parameter} string db-user +Database user. + +Defaults to @samp{"zabbix"}. + +@end deftypevr + +@deftypevr {@code{zabbix-front-end-configuration} parameter} string db-password +Database password. Please, use @code{db-secret-file} instead. + +Defaults to @samp{""}. + +@end deftypevr + +@deftypevr {@code{zabbix-front-end-configuration} parameter} string db-secret-file +Secret file which will be appended to @file{zabbix.conf.php} file. This +file contains credentials for use by Zabbix front-end. You are expected +to create it manually. + +Defaults to @samp{""}. + +@end deftypevr + +@deftypevr {@code{zabbix-front-end-configuration} parameter} string zabbix-host +Zabbix server hostname. + +Defaults to @samp{"localhost"}. + +@end deftypevr + +@deftypevr {@code{zabbix-front-end-configuration} parameter} number zabbix-port +Zabbix server port. + +Defaults to @samp{10051}. + +@end deftypevr + + +@c %end of fragment + @node Kerberos Services @subsubsection Kerberos Services @cindex Kerberos @@ -17285,7 +17736,7 @@ A service type for the @code{fcgiwrap} FastCGI proxy. @end defvr @deftp {Data Type} fcgiwrap-configuration -Data type representing the configuration of the @code{fcgiwrap} serice. +Data type representing the configuration of the @code{fcgiwrap} service. This type has the following parameters: @table @asis @item @code{package} (default: @code{fcgiwrap}) @@ -17381,6 +17832,8 @@ Determines whether php errors and warning should be sent to clients and displayed in their browsers. This is useful for local php development, but a security risk for public sites, as error messages can reveal passwords and personal data. +@item @code{timezone} (default @code{#f}) +Specifies @code{php_admin_value[date.timezone]} parameter. @item @code{workers-logfile} (default @code{(string-append "/var/log/php" (version-major (package-version php)) "-fpm.www.log")}) This file will log the @code{stderr} outputs of php worker processes. Can be set to @code{#f} to disable logging. @@ -17447,7 +17900,7 @@ A simple services setup for nginx with php can look like this: (root "/srv/http/") (locations (list (nginx-php-location))) - (https-port #f) + (listen '("80")) (ssl-certificate #f) (ssl-certificate-key #f))) %base-services)) @@ -17458,7 +17911,7 @@ The cat avatar generator is a simple service to demonstrate the use of php-fpm in @code{Nginx}. It is used to generate cat avatar from a seed, for instance the hash of a user's email address. -@deffn {Scheme Procedure} cat-avatar-generator-serice @ +@deffn {Scheme Procedure} cat-avatar-generator-service @ [#:cache-dir "/var/cache/cat-avatar-generator"] @ [#:package cat-avatar-generator] @ [#:configuration (nginx-server-configuration)] @@ -22595,6 +23048,9 @@ appear in the @code{operating-system} declaration actually exist needed at boot time are listed in @code{initrd-modules} (@pxref{Initial RAM Disk}). Passing this option skips these tests altogether. +@cindex on-error +@cindex on-error strategy +@cindex error strategy @item --on-error=@var{strategy} Apply @var{strategy} when an error occurs when reading @var{file}. @var{strategy} may be one of the following: diff --git a/etc/guix-install.sh b/etc/guix-install.sh index 6a01e59723..8eb5214049 100755 --- a/etc/guix-install.sh +++ b/etc/guix-install.sh @@ -97,7 +97,7 @@ chk_require() gpg --list-keys ${OPENPGP_SIGNING_KEY_ID} >/dev/null 2>&1 || ( _err "${ERR}Missing OpenPGP public key. Fetch it with this command:" - echo " gpg --keyserver pgp.mit.edu --recv-keys ${OPENPGP_SIGNING_KEY_ID}" + echo " gpg --keyserver pool.sks-keyservers.net --recv-keys ${OPENPGP_SIGNING_KEY_ID}" exit 1 ) } @@ -361,8 +361,8 @@ sys_authorize_build_farms() case $yn in [Yy]*) guix archive --authorize < "${ROOT_HOME}/.config/guix/current/share/guix/hydra.gnu.org.pub" && _msg "${PAS}Authorized public key for hydra.gnu.org"; - guix archive --authorize < "${ROOT_HOME}/.config/guix/current/share/guix/berlin.guixsd.org.pub" && - _msg "${PAS}Authorized public key for berlin.guixsd.org"; + guix archive --authorize < "${ROOT_HOME}/.config/guix/current/share/guix/ci.guix.info.pub" && + _msg "${PAS}Authorized public key for ci.guix.info"; break;; [Nn]*) _msg "${INF}Skipped authorizing build farm public keys" break;; diff --git a/gnu/build/file-systems.scm b/gnu/build/file-systems.scm index 3f97afeedd..e3369d8521 100644 --- a/gnu/build/file-systems.scm +++ b/gnu/build/file-systems.scm @@ -535,10 +535,19 @@ were found." (sleep 3) (reboot)) ('fatal-error - (format (current-error-port) - "File system check on ~a failed; spawning Bourne-like REPL~%" + (format (current-error-port) "File system check on ~a failed~%" device) - (start-repl %bournish-language))) + + ;; Spawn a REPL only if someone would be able to interact with it. + (when (isatty? (current-input-port)) + (format (current-error-port) "Spawning Bourne-like REPL.~%") + + ;; 'current-output-port' is typically connected to /dev/klog (in + ;; PID 1), but here we want to make sure we talk directly to the + ;; user. + (with-output-to-file "/dev/console" + (lambda () + (start-repl %bournish-language)))))) (format (current-error-port) "No file system check procedure for ~a; skipping~%" device))) diff --git a/gnu/build/vm.scm b/gnu/build/vm.scm index 746808515f..0aef73d26d 100644 --- a/gnu/build/vm.scm +++ b/gnu/build/vm.scm @@ -105,13 +105,7 @@ the #:references-graphs parameter of 'derivation'." ;; hardware virtualization to still use these commands. KVM support is ;; still buggy on some ARM32 boards. Do not use it even if available. ,@(if (and (file-exists? "/dev/kvm") - (not target-arm32?) - - ;; XXX: 32-bit 'qemu-system-i386 -enable-kvm' segfaults on - ;; x86_64 hosts running Linux-libre 4.17: - ;; <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=31380#18> and - ;; <https://lists.gnu.org/archive/html/qemu-devel/2018-07/msg01166.html>. - (not (string-suffix? "-i386" qemu))) + (not target-arm32?)) '("-enable-kvm") '()) @@ -477,6 +471,11 @@ GRUB configuration and OS-DRV as the stuff in it." "mnt=/tmp/root/mnt" "-path-list" "-" "--" + + ;; XXX: Add padding to avoid I/O errors on i686: + ;; <https://bugs.gnu.org/33639>. + "-padding" "10m" + "-volid" (string-upcase volume-id) (if volume-uuid `("-volume_date" "uuid" diff --git a/gnu/local.mk b/gnu/local.mk index d9cffba945..76b0d7df9a 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -109,7 +109,6 @@ GNU_SYSTEM_MODULES = \ %D%/packages/commencement.scm \ %D%/packages/compression.scm \ %D%/packages/compton.scm \ - %D%/packages/conkeror.scm \ %D%/packages/conky.scm \ %D%/packages/connman.scm \ %D%/packages/cook.scm \ @@ -146,6 +145,7 @@ GNU_SYSTEM_MODULES = \ %D%/packages/documentation.scm \ %D%/packages/dunst.scm \ %D%/packages/dvtm.scm \ + %D%/packages/easyrpg.scm \ %D%/packages/ebook.scm \ %D%/packages/ed.scm \ %D%/packages/education.scm \ @@ -581,7 +581,6 @@ dist_patch_DATA = \ %D%/packages/patches/aegisub-boost68.patch \ %D%/packages/patches/agg-am_c_prototype.patch \ %D%/packages/patches/amule-crypto-6.patch \ - %D%/packages/patches/ansible-wrap-program-hack.patch \ %D%/packages/patches/antiword-CVE-2014-8123.patch \ %D%/packages/patches/antlr3-3_1-fix-java8-compilation.patch \ %D%/packages/patches/antlr3-3_3-fix-java8-compilation.patch \ @@ -609,7 +608,6 @@ dist_patch_DATA = \ %D%/packages/patches/blast+-fix-makefile.patch \ %D%/packages/patches/blender-newer-ffmpeg.patch \ %D%/packages/patches/boost-fix-icu-build.patch \ - %D%/packages/patches/borg-respect-storage-quota.patch \ %D%/packages/patches/byobu-writable-status.patch \ %D%/packages/patches/cairo-CVE-2016-9082.patch \ %D%/packages/patches/cairo-setjmp-wrapper.patch \ @@ -655,7 +653,6 @@ dist_patch_DATA = \ %D%/packages/patches/cursynth-wave-rand.patch \ %D%/packages/patches/cvs-2017-12836.patch \ %D%/packages/patches/cyrus-sasl-CVE-2013-4122.patch \ - %D%/packages/patches/datamash-arm-tests.patch \ %D%/packages/patches/dbus-helper-search-path.patch \ %D%/packages/patches/deja-dup-use-ref-keyword-for-iter.patch \ %D%/packages/patches/dfu-programmer-fix-libusb.patch \ @@ -669,7 +666,6 @@ dist_patch_DATA = \ %D%/packages/patches/dropbear-CVE-2018-15599.patch \ %D%/packages/patches/dvd+rw-tools-add-include.patch \ %D%/packages/patches/elfutils-tests-ptrace.patch \ - %D%/packages/patches/elogind-glibc-2.27.patch \ %D%/packages/patches/einstein-build.patch \ %D%/packages/patches/emacs-exec-path.patch \ %D%/packages/patches/emacs-fix-scheme-indent-function.patch \ @@ -679,6 +675,7 @@ dist_patch_DATA = \ %D%/packages/patches/emacs-scheme-complete-scheme-r5rs-info.patch \ %D%/packages/patches/emacs-source-date-epoch.patch \ %D%/packages/patches/emacs-realgud-fix-configure-ac.patch \ + %D%/packages/patches/emacs-wordnut-require-adaptive-wrap.patch \ %D%/packages/patches/enlightenment-fix-setuid-path.patch \ %D%/packages/patches/erlang-man-path.patch \ %D%/packages/patches/eudev-rules-directory.patch \ @@ -697,6 +694,7 @@ 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-2018-10360.patch \ %D%/packages/patches/findutils-gnulib-libio.patch \ %D%/packages/patches/findutils-localstatedir.patch \ %D%/packages/patches/findutils-makedev.patch \ @@ -719,7 +717,6 @@ dist_patch_DATA = \ %D%/packages/patches/gcc-4.8-libsanitizer-fix.patch \ %D%/packages/patches/gcc-4.9-libsanitizer-fix.patch \ %D%/packages/patches/gcc-4.9-libsanitizer-ustat.patch \ - %D%/packages/patches/gcc-libsanitizer-fix.patch \ %D%/packages/patches/gcc-libsanitizer-ustat.patch \ %D%/packages/patches/gcc-libvtv-runpath.patch \ %D%/packages/patches/gcc-strmov-store-file-names.patch \ @@ -764,6 +761,7 @@ dist_patch_DATA = \ %D%/packages/patches/glibc-allow-kernel-2.6.32.patch \ %D%/packages/patches/glibc-bootstrap-system.patch \ %D%/packages/patches/glibc-hidden-visibility-ldconfig.patch \ + %D%/packages/patches/glibc-hurd-magic-pid.patch \ %D%/packages/patches/glibc-ldd-x86_64.patch \ %D%/packages/patches/glibc-locales.patch \ %D%/packages/patches/glibc-memchr-overflow-i686.patch \ @@ -970,7 +968,6 @@ dist_patch_DATA = \ %D%/packages/patches/mcrypt-CVE-2012-4409.patch \ %D%/packages/patches/mcrypt-CVE-2012-4426.patch \ %D%/packages/patches/mcrypt-CVE-2012-4527.patch \ - %D%/packages/patches/meandmyshadow-define-paths-earlier.patch \ %D%/packages/patches/mesa-skip-disk-cache-test.patch \ %D%/packages/patches/meson-for-build-rpath.patch \ %D%/packages/patches/metabat-fix-compilation.patch \ @@ -1023,6 +1020,7 @@ dist_patch_DATA = \ %D%/packages/patches/openbabel-fix-crash-on-nwchem-output.patch \ %D%/packages/patches/opencascade-oce-glibc-2.26.patch \ %D%/packages/patches/openfoam-4.1-cleanup.patch \ + %D%/packages/patches/openjdk-10-idlj-reproducibility.patch \ %D%/packages/patches/openldap-CVE-2017-9287.patch \ %D%/packages/patches/openocd-nrf52.patch \ %D%/packages/patches/opensmtpd-fix-crash.patch \ @@ -1067,6 +1065,7 @@ dist_patch_DATA = \ %D%/packages/patches/plink-endian-detection.patch \ %D%/packages/patches/plotutils-libpng-jmpbuf.patch \ %D%/packages/patches/podofo-cmake-3.12.patch \ + %D%/packages/patches/polkit-CVE-2018-19788.patch \ %D%/packages/patches/poppler-CVE-2018-19149.patch \ %D%/packages/patches/portaudio-audacity-compat.patch \ %D%/packages/patches/portmidi-modular-build.patch \ @@ -1122,8 +1121,8 @@ dist_patch_DATA = \ %D%/packages/patches/quagga-reproducible-build.patch \ %D%/packages/patches/quickswitch-fix-dmenu-check.patch \ %D%/packages/patches/quilt-test-fix-regex.patch \ - %D%/packages/patches/quilt-compat-getopt-fix-second-separator.patch \ - %D%/packages/patches/quilt-compat-getopt-fix-option-with-nondigit-param.patch \ + %D%/packages/patches/quilt-getopt-nondigit-param.patch \ + %D%/packages/patches/quilt-getopt-second-separator.patch \ %D%/packages/patches/qtwebkit-pbutils-include.patch \ %D%/packages/patches/randomjungle-disable-static-build.patch \ %D%/packages/patches/rapicorn-isnan.patch \ @@ -1140,10 +1139,15 @@ dist_patch_DATA = \ %D%/packages/patches/rpcbind-CVE-2017-8779.patch \ %D%/packages/patches/rtags-separate-rct.patch \ %D%/packages/patches/racket-store-checksum-override.patch \ + %D%/packages/patches/ruby-coffee-rails-fix-rakefile.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-rspec-its-remove-rspec-gemspec.patch\ + %D%/packages/patches/ruby-listen-patch-gemspec.patch \ + %D%/packages/patches/ruby-listen-3.0.8-patch-gemspec.patch \ + %D%/packages/patches/ruby-therubyracer-fix-gemspec.patch \ %D%/packages/patches/ruby-tzinfo-data-ignore-broken-test.patch\ %D%/packages/patches/rust-1.19-mrustc.patch \ %D%/packages/patches/rust-1.25-accept-more-detailed-gdb-lines.patch \ @@ -1177,6 +1181,7 @@ dist_patch_DATA = \ %D%/packages/patches/swish-e-search.patch \ %D%/packages/patches/swish-e-format-security.patch \ %D%/packages/patches/synfigstudio-fix-ui-with-gtk3.patch \ + %D%/packages/patches/stumpwm-fix-broken-read-one-line.patch \ %D%/packages/patches/t1lib-CVE-2010-2642.patch \ %D%/packages/patches/t1lib-CVE-2011-0764.patch \ %D%/packages/patches/t1lib-CVE-2011-1552+.patch \ @@ -1230,8 +1235,8 @@ dist_patch_DATA = \ %D%/packages/patches/upx-fix-CVE-2017-15056.patch \ %D%/packages/patches/valgrind-enable-arm.patch \ %D%/packages/patches/valgrind-glibc-compat.patch \ - %D%/packages/patches/vinagre-revert-1.patch \ - %D%/packages/patches/vinagre-revert-2.patch \ + %D%/packages/patches/vinagre-newer-freerdp.patch \ + %D%/packages/patches/vinagre-newer-rdp-parameters.patch \ %D%/packages/patches/virglrenderer-CVE-2017-6386.patch \ %D%/packages/patches/vorbis-tools-CVE-2014-9638+CVE-2014-9639.patch \ %D%/packages/patches/vorbis-tools-CVE-2014-9640.patch \ diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm index 01a58763d8..fa5fa3ab86 100644 --- a/gnu/packages/admin.scm +++ b/gnu/packages/admin.scm @@ -22,6 +22,7 @@ ;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net> ;;; Copyright © 2018 Pierre-Antoine Rouby <pierre-antoine.rouby@inria.fr> ;;; Copyright © 2018 Rutger Helling <rhelling@mykolab.com> +;;; Copyright © 2018 Pierre Neidhardt <mail@ambrevar.xyz> ;;; ;;; This file is part of GNU Guix. ;;; @@ -1408,14 +1409,14 @@ recover lost partitions and/or make non-booting disks bootable again.") (define-public tree (package (name "tree") - (version "1.7.0") + (version "1.8.0") (source (origin (method url-fetch) (uri (string-append "http://mama.indstate.edu/users/ice/tree/src/tree-" version ".tgz")) (sha256 - (base32 "04kviw799qxly08zb8n5mgxfd96gyis6x69q2qiw86jnh87c4mv9")))) + (base32 "1hmpz6k0mr6salv0nprvm1g0rdjva1kx03bdf1scw8a38d5mspbi")))) (build-system gnu-build-system) (arguments '(#:phases (modify-phases %standard-phases (delete 'configure)) @@ -1600,15 +1601,14 @@ of supported upstream metrics systems simultaneously.") (define-public ansible (package (name "ansible") - (version "2.7.4") + (version "2.7.5") (source (origin (method url-fetch) (uri (pypi-uri "ansible" version)) (sha256 (base32 - "0p1n6yyc632522fl2r247p0jg4mncc7z4hqngzbh1zxq3dcb12s9")) - (patches (search-patches "ansible-wrap-program-hack.patch")))) + "1fsif2jmkrrgiawsd8r6sxrqvh01fvrmdhas0p540a6i9fby3yda")))) (build-system python-build-system) (native-inputs `(("python-bcrypt" ,python-bcrypt) @@ -1625,6 +1625,42 @@ of supported upstream metrics systems simultaneously.") ("python-jinja2" ,python-jinja2) ("python-pyyaml" ,python-pyyaml) ("python-paramiko" ,python-paramiko))) + (arguments + `(#:phases + (modify-phases %standard-phases + ;; Several ansible commands (ansible-config, ansible-console, etc.) + ;; are just symlinks to a single ansible executable. The ansible + ;; executable behaves differently based on the value of + ;; sys.argv[0]. This does not work well with our wrap phase, and + ;; therefore the following two phases are required as a workaround. + (add-after 'unpack 'hide-wrapping + (lambda _ + ;; Overwrite sys.argv[0] to hide the wrapper script from it. + (substitute* "bin/ansible" + (("import traceback" all) + (string-append all " +import re +sys.argv[0] = re.sub(r'\\.([^/]*)-real$', r'\\1', sys.argv[0]) +"))) + #t)) + (add-after 'wrap 'fix-symlinks + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (for-each + (lambda (subprogram) + ;; The symlinks point to the ansible wrapper script. Make + ;; them point to the real executable (.ansible-real). + (delete-file (string-append out "/bin/.ansible-" subprogram "-real")) + (symlink (string-append out "/bin/.ansible-real") + (string-append out "/bin/.ansible-" subprogram "-real")) + ;; The wrapper scripts of the symlinks invoke the ansible + ;; wrapper script. Fix them to invoke the correct executable. + (substitute* (string-append out "/bin/ansible-" subprogram) + (("/bin/ansible") + (string-append "/bin/.ansible-" subprogram "-real")))) + (list "config" "console" "doc" "galaxy" + "inventory" "playbook" "pull" "vault"))) + #t))))) (home-page "https://www.ansible.com/") (synopsis "Radically simple IT automation") (description "Ansible is a radically simple IT automation system. It @@ -1886,7 +1922,7 @@ done with the @code{auditctl} utility.") ;; TODO Add zenmap output. (outputs '("out" "ndiff")) (arguments - '(#:configure-flags '("--without-zenmap") + `(#:configure-flags '("--without-zenmap") #:phases (modify-phases %standard-phases (add-after 'configure 'patch-Makefile @@ -1902,7 +1938,10 @@ done with the @code{auditctl} utility.") (string-append "prefix=" out) args)) (define (python-path dir) - (string-append dir "/lib/python2.7/site-packages")) + (string-append dir "/lib/python" + ,(version-major+minor + (package-version python)) + "/site-packages")) (let ((out (assoc-ref outputs "out")) (ndiff (assoc-ref outputs "ndiff"))) (for-each mkdir-p (list out ndiff)) @@ -2953,3 +2992,36 @@ security defenses and provide tips for further system hardening. It will also scan for general system information, vulnerable software packages, and possible configuration issues.") (license license:gpl3+))) + +(define-public ngrep + (package + (name "ngrep") + (version "1.47") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/jpr5/ngrep/") + (commit (string-append "V" (string-replace-substring version "." "_"))))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1x2fyd7wdqlj1r76ilal06cl2wmbz0ws6i3ys204sbjh1cj6dcl7")))) + (build-system gnu-build-system) + (inputs + `(("libpcap" ,libpcap))) + (arguments + `(#:tests? #f ;; No tests. + #:configure-flags (list (string-append "--with-pcap-includes=" + (assoc-ref %build-inputs "libpcap") + "/include/pcap")))) + (home-page "https://github.com/jpr5/ngrep/") + (synopsis "Grep-like utility to search for network packets on an interface") + (description "@command{ngrep} is like GNU grep applied to the network +layer. It's a PCAP-based tool that allows you to specify an extended regular +or hexadecimal expression to match against data payloads of packets. It +understands many kinds of protocols, including IPv4/6, TCP, UDP, ICMPv4/6, +IGMP and Raw, across a wide variety of interface types, and understands BPF +filter logic in the same fashion as more common packet sniffing tools, such as +tcpdump and snoop.") + (license license:bsd-3))) diff --git a/gnu/packages/algebra.scm b/gnu/packages/algebra.scm index 0f19649917..46ad548e38 100644 --- a/gnu/packages/algebra.scm +++ b/gnu/packages/algebra.scm @@ -243,7 +243,7 @@ precision.") (define-public giac-xcas (package (name "giac-xcas") - (version "1.5.0-19") + (version "1.5.0-29") (source (origin (method url-fetch) ;; "~parisse/giac" is not used because the maintainer regularly @@ -255,7 +255,7 @@ precision.") "source/giac_" version ".tar.gz")) (sha256 (base32 - "0ds1zh712sr20qh0fih8jnm4nlv90andllp8n263qs7rlhblz551")))) + "1d904w02x6i26crbvw2d25v7j1hv1w461casyj5mgh42kzcdhb4c")))) (build-system gnu-build-system) (outputs '("out" "doc")) ;77MiB of documentation (arguments diff --git a/gnu/packages/astronomy.scm b/gnu/packages/astronomy.scm index 3c8b9cc8df..7e6a56c545 100644 --- a/gnu/packages/astronomy.scm +++ b/gnu/packages/astronomy.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2016 John Darrington <jmd@gnu.org> ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr> +;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il> ;;; ;;; This file is part of GNU Guix. ;;; @@ -102,15 +103,15 @@ header.") (define-public gnuastro (package (name "gnuastro") - (version "0.7") + (version "0.8") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/gnuastro/gnuastro-" - version ".tar.gz")) + version ".tar.lz")) (sha256 (base32 - "1h4hpj5dd1nz8hx0dkf43as0hl1grcaijg0k3zcd5djg7wgna46y")))) + "0gx6iar3z07k9sdvpa6kchsz6fpk94xn5vcvbcigssl2dwqmlnkb")))) (inputs `(("cfitsio" ,cfitsio) ("gsl" ,gsl) @@ -118,6 +119,8 @@ header.") ("libtiff" ,libtiff) ("wcslib" ,wcslib) ("zlib" ,zlib))) + (native-inputs + `(("lzip" ,lzip))) (build-system gnu-build-system) (home-page "https://www.gnu.org/software/gnuastro/") (synopsis "Astronomy utilities") diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm index a65cfa238e..d47dd90f56 100644 --- a/gnu/packages/audio.scm +++ b/gnu/packages/audio.scm @@ -17,6 +17,7 @@ ;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.com> ;;; Copyright © 2018 Thorsten Wilms <t_w_@freenet.de> ;;; Copyright © 2018 Eric Bavier <bavier@member.fsf.org> +;;; Copyright © 2018 Brendan Tildesley <brendan.tildesley@openmailbox.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -74,6 +75,7 @@ #:use-module (gnu packages qt) #:use-module (gnu packages libbsd) #:use-module (gnu packages linux) + #:use-module (gnu packages libusb) #:use-module (gnu packages llvm) #:use-module (gnu packages mp3) ;taglib #:use-module (gnu packages perl) @@ -229,57 +231,79 @@ namespace ARDOUR { const char* revision = \"" version "\" ; }")) (arguments `(#:configure-flags '("--cxx11" ; required by gtkmm "--no-phone-home" ; don't contact ardour.org - "--freedesktop" ; install .desktop file + "--freedesktop" ; build .desktop file "--test") ; build unit tests #:phases (modify-phases %standard-phases - (add-after - 'unpack 'set-rpath-in-LDFLAGS - ,(ardour-rpath-phase (version-major version)))) + (add-after 'unpack 'set-rpath-in-LDFLAGS + ,(ardour-rpath-phase (version-major version))) + (add-after 'install 'install-freedesktop-files + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (share (string-append out "/share")) + (ver ,(version-major version))) + (for-each + (lambda (size) + (let ((dir (string-append share "/icons/hicolor/" + size "x" size "/apps"))) + (mkdir-p dir) + (copy-file + (string-append "gtk2_ardour/resources/Ardour-icon_" + size "px.png") + (string-append dir "/ardour" ver ".png")))) + '("16" "22" "32" "48" "256")) + (install-file (string-append "build/gtk2_ardour/ardour" + ver ".desktop") + (string-append share "/applications/")) + (install-file (string-append "build/gtk2_ardour/ardour" + ver ".appdata.xml") + (string-append share "/appdata/"))) + #t))) #:test-target "test" #:python ,python-2)) (inputs `(("alsa-lib" ,alsa-lib) + ("atkmm" ,atkmm) ("aubio" ,aubio) - ("lrdf" ,lrdf) ("boost" ,boost) - ("atkmm" ,atkmm) ("cairomm" ,cairomm) + ("curl" ,curl) ("eudev" ,eudev) - ("gtkmm" ,gtkmm-2) + ("fftw" ,fftw) + ("fftwf" ,fftwf) + ("flac" ,flac) ("glibmm" ,glibmm) + ("gtkmm" ,gtkmm-2) + ("jack" ,jack-1) + ("libarchive" ,libarchive) ("libart-lgpl" ,libart-lgpl) ("libgnomecanvasmm" ,libgnomecanvasmm) - ("pangomm" ,pangomm) ("liblo" ,liblo) - ("libsndfile" ,libsndfile) - ("libsamplerate" ,libsamplerate) - ("libxml2" ,libxml2) ("libogg" ,libogg) + ("libsamplerate" ,libsamplerate) + ("libsndfile" ,libsndfile) + ("libusb" ,libusb) ("libvorbis" ,libvorbis) - ("flac" ,flac) + ("libxml2" ,libxml2) + ("lilv" ,lilv) + ("lrdf" ,lrdf) ("lv2" ,lv2) - ("vamp" ,vamp) - ("curl" ,curl) - ("fftw" ,fftw) - ("fftwf" ,fftwf) - ("jack" ,jack-1) + ("pangomm" ,pangomm) + ("python-rdflib" ,python-rdflib) + ("readline" ,readline) + ("redland" ,redland) + ("rubberband" ,rubberband) ("serd" ,serd) ("sord" ,sord) ("sratom" ,sratom) ("suil" ,suil) - ("lilv" ,lilv) - ("readline" ,readline) - ("redland" ,redland) - ("rubberband" ,rubberband) - ("libarchive" ,libarchive) ("taglib" ,taglib) - ("python-rdflib" ,python-rdflib))) + ("vamp" ,vamp))) (native-inputs - `(("perl" ,perl) - ("cppunit" ,cppunit) - ("itstool" ,itstool) + `(("cppunit" ,cppunit) ("gettext" ,gettext-minimal) + ("itstool" ,itstool) + ("perl" ,perl) ("pkg-config" ,pkg-config))) (home-page "http://ardour.org") (synopsis "Digital audio workstation") @@ -2097,7 +2121,9 @@ buffers, and audio capture.") (base32 "1agdpwwi42176l4mxj0c4fsvdiv1ig56bfnnx0msckxmy57df8bb")))) (build-system waf-build-system) - (arguments `(#:tests? #f)) ; no check target + (arguments + `(#:tests? #f ; no check target + #:python ,python-2)) (inputs `(("alsa-lib" ,alsa-lib) ("boost" ,boost) @@ -2118,14 +2144,14 @@ and ALSA.") (define-public qjackctl (package (name "qjackctl") - (version "0.5.4") + (version "0.5.5") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/qjackctl/qjackctl/" version "/qjackctl-" version ".tar.gz")) (sha256 (base32 - "0qr71nb93gkz5q53nfcl5g168z173wc6s8w1yjs3rfn3m4hg0bcq")))) + "1rzzqa39a6llr52vjkjr0a86nc776kmr5xs52qqga8ms9697psz5")))) (build-system gnu-build-system) (arguments '(#:tests? #f)) ; no check target @@ -2181,7 +2207,7 @@ background file post-processing.") (define-public supercollider (package (name "supercollider") - (version "3.9.3") + (version "3.10.0") (source (origin (method url-fetch) (uri (string-append @@ -2190,7 +2216,7 @@ background file post-processing.") "/SuperCollider-" version "-Source-linux.tar.bz2")) (sha256 (base32 - "1d8ixfl100jvlialxdizp8wqsl1mp5pi2bam25vp97bhjd59cfdr")))) + "16j9psa32czx1p1y2vvq0qf2ib0ngrfc604vx35n2b4llyika84v")))) (build-system cmake-build-system) (arguments `(#:configure-flags '("-DSYSTEM_BOOST=on" "-DSYSTEM_YAMLCPP=on" @@ -2202,6 +2228,12 @@ background file post-processing.") (ice-9 ftw)) #:phases (modify-phases %standard-phases + (add-after 'unpack 'fix-build-with-boost-1.68 + (lambda _ + (substitute* "server/supernova/utilities/time_tag.hpp" + (("(time_duration offset = .+ microseconds\\().*" _ m) + (string-append m "static_cast<long>(get_nanoseconds()/1000));\n"))) + #t)) (add-after 'unpack 'rm-bundled-libs (lambda _ ;; The build system doesn't allow us to unbundle the following @@ -2222,13 +2254,13 @@ background file post-processing.") ;; https://github.com/supercollider/supercollider/issues/1736 (add-after 'rm-bundled-libs 'disable-broken-tests (lambda _ - (substitute* "testsuite/supernova/CMakeLists.txt" + (substitute* "testsuite/server/supernova/CMakeLists.txt" (("server_test.cpp") "") (("perf_counter_test.cpp") "")) - (delete-file "testsuite/supernova/server_test.cpp") - (delete-file "testsuite/supernova/perf_counter_test.cpp") + (delete-file "testsuite/server/supernova/server_test.cpp") + (delete-file "testsuite/server/supernova/perf_counter_test.cpp") (substitute* "testsuite/CMakeLists.txt" (("add_subdirectory\\(sclang\\)") "")) @@ -2266,7 +2298,7 @@ external_libraries/yaml-cpp/include)")) ("eudev" ,eudev) ;for user interactions with devices ("avahi" ,avahi) ;zeroconf service discovery support ("icu4c" ,icu4c) - ("boost" ,boost) + ("boost" ,boost-cxx14) ("boost-sync" ,boost-sync) ("yaml-cpp" ,yaml-cpp))) (home-page "https://github.com/supercollider/supercollider") @@ -2855,7 +2887,7 @@ interface.") (define-public qsynth (package (name "qsynth") - (version "0.5.3") + (version "0.5.4") (source (origin (method url-fetch) @@ -2863,7 +2895,7 @@ interface.") "/qsynth-" version ".tar.gz")) (sha256 (base32 - "1jghczmmva7cyavg1q0j8nr3hmjpzzglzi5ckg92ax4ji8gpks9c")))) + "0kpq5fxr96wnii18ax780w1ivq8ksk892ac0bprn92iz0asfysrd")))) (build-system gnu-build-system) (arguments `(#:tests? #f ; no "check" phase diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm index c927a14673..a9d8286702 100644 --- a/gnu/packages/backup.scm +++ b/gnu/packages/backup.scm @@ -491,15 +491,14 @@ detection, and lossless compression.") (define-public borg (package (name "borg") - (version "1.1.7") + (version "1.1.8") (source (origin (method url-fetch) (uri (pypi-uri "borgbackup" version)) - (patches (search-patches "borg-respect-storage-quota.patch")) (sha256 (base32 - "1p3zia62vyg9vadkdjzzkzbj4dmgijr7ix5lmhfbxpwy5q9imdgp")) + "0qqvcscn1l4y83x4sh3izdpmr8zq38j8chjkpfq4q4d01i470hqb")) (modules '((guix build utils))) (snippet '(begin diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm index 60f8051dc6..e79d2a987b 100644 --- a/gnu/packages/base.scm +++ b/gnu/packages/base.scm @@ -681,6 +681,18 @@ store.") #:tests? #f ; XXX #:phases (modify-phases %standard-phases + ,@(if (hurd-target?) + `((add-after 'unpack 'apply-hurd-patch + (lambda* (#:key inputs native-inputs + #:allow-other-keys) + ;; TODO: Move this to 'patches' field. + (let ((patch (or (assoc-ref native-inputs + "hurd-magic-pid-patch") + (assoc-ref inputs + "hurd-magic-pid-patch")))) + (invoke "patch" "-p1" "--force" "--input" + patch))))) + '()) (add-before 'configure 'pre-configure (lambda* (#:key inputs native-inputs outputs @@ -806,7 +818,9 @@ store.") ,@(if (hurd-target?) `(("mig" ,mig) - ("perl" ,perl)) + ("perl" ,perl) + ("hurd-magic-pid-patch" + ,(search-patch "glibc-hurd-magic-pid.patch"))) '()))) (native-search-paths diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm index 7c0429a600..d4661cf515 100644 --- a/gnu/packages/bioinformatics.scm +++ b/gnu/packages/bioinformatics.scm @@ -2298,6 +2298,22 @@ data and settings.") ("cairo" ,cairo))) (native-inputs `(("texlive" ,texlive) + ;; TODO: Replace texlive with minimal texlive-union. + ;; ("texlive" ,(texlive-union (list texlive-latex-doi + ;; texlive-latex-hyperref + ;; texlive-latex-oberdiek + ;; texlive-generic-ifxetex + ;; texlive-latex-url + ;; texlive-latex-pgf + ;; texlive-latex-examplep + ;; texlive-latex-natbib + ;; texlive-latex-verbatimbox + ;; texlive-latex-ms + ;; texlive-latex-xcolor + ;; texlive-fonts-amsfonts + ;; texlive-latex-amsfonts + ;; ;; ... + ;; ))) ("imagemagick" ,imagemagick))) (home-page "http://dorina.mdc-berlin.de/public/rajewsky/discrover/") (synopsis "Discover discriminative nucleotide sequence motifs") @@ -4024,6 +4040,14 @@ sequences).") "src/mash/CommandScreen.cpp") (("^#include \"kseq\\.h\"") "#include \"htslib/kseq.h\"")) + #t)) + (add-after 'fix-includes 'use-c++14 + (lambda _ + ;; capnproto 0.7 requires c++14 to build + (substitute* "configure.ac" + (("c\\+\\+11") "c++14")) + (substitute* "Makefile.in" + (("c\\+\\+11") "c++14")) #t))))) (native-inputs `(("autoconf" ,autoconf) @@ -11382,7 +11406,10 @@ remove biased methylation positions for RRBS sequence files.") (out (assoc-ref outputs "out")) (bin (string-append out "/bin/")) (target (string-append - out "/lib/python2.7/site-packages/gess/"))) + out "/lib/python" + ,(version-major+minor + (package-version python)) + "/site-packages/gess/"))) (mkdir-p target) (copy-recursively "." target) ;; Make GESS.py executable diff --git a/gnu/packages/boost.scm b/gnu/packages/boost.scm index b772781f56..f9108b3ad6 100644 --- a/gnu/packages/boost.scm +++ b/gnu/packages/boost.scm @@ -122,6 +122,16 @@ across a broad spectrum of applications.") (license (license:x11-style "https://www.boost.org/LICENSE_1_0.txt" "Some components have other similar licences.")))) +;; Some programs need Boost to be built with C++14 support. +(define-public boost-cxx14 + (package (inherit boost) + (arguments + (substitute-keyword-arguments (package-arguments boost) + ((#:make-flags flags) + `(append ,flags + '("cxxflags=-std=c++14"))))) + (properties '((hidden? . #t))))) + (define-public boost-for-mysql ;; Older version for MySQL 5.7.23. (package diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm index c155228b4d..2a595fafab 100644 --- a/gnu/packages/bootloaders.scm +++ b/gnu/packages/bootloaders.scm @@ -317,6 +317,8 @@ menu to select one of the installed operating systems.") (home-page "https://www.syslinux.org") (synopsis "Lightweight Linux bootloader") (description "Syslinux is a lightweight Linux bootloader.") + ;; The Makefile specifically targets i386 and x86_64 using nasm. + (supported-systems '("i686-linux" "x86_64-linux")) (license (list license:gpl2+ license:bsd-3 ; gnu-efi/* license:bsd-4 ; gnu-efi/inc/* gnu-efi/lib/* diff --git a/gnu/packages/busybox.scm b/gnu/packages/busybox.scm index 5f1613bb4c..09812d4a49 100644 --- a/gnu/packages/busybox.scm +++ b/gnu/packages/busybox.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2014 John Darrington <jmd@gnu.org> ;;; Copyright © 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr> +;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il> ;;; ;;; This file is part of GNU Guix. ;;; @@ -25,6 +26,7 @@ #:use-module (guix build-system gnu) #:use-module (gnu packages) #:use-module (gnu packages admin) + #:use-module (gnu packages algebra) #:use-module (gnu packages compression) #:use-module (gnu packages perl)) @@ -102,3 +104,41 @@ any small or embedded system.") (home-page "https://www.busybox.net") ;; Some files are gplv2+ (license gpl2))) + +(define-public toybox + (package + (name "toybox") + (version "0.7.8") + (source (origin + (method url-fetch) + (uri (string-append + "https://landley.net/toybox/downloads/toybox-" + version ".tar.gz")) + (sha256 + (base32 + "1mlqv5hsvy8ii6m698hq6rc316klwv44jlr034knwg6bk1lf2qj9")))) + (build-system gnu-build-system) + (arguments + '(#:phases + (modify-phases %standard-phases + (add-before 'configure 'set-environment-variables + (lambda _ + (setenv "CC" (which "gcc")) + (setenv "HOSTCC" (which "gcc")) + #t)) + (replace 'configure + (lambda _ (invoke "make" "defconfig"))) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (invoke "make" + (string-append "PREFIX=" out) + "install"))))) + #:test-target "tests")) + (native-inputs `(("bc" ,bc))) + (synopsis "Many common UNIX utilities in a single executable") + (description "ToyBox combines tiny versions of many common UNIX utilities +into a single small executable. It provides a fairly complete environment for +any small or embedded system.") + (home-page "https://landley.net/toybox/") + (license bsd-2))) diff --git a/gnu/packages/calendar.scm b/gnu/packages/calendar.scm index 24e19b472c..a5c677bd4d 100644 --- a/gnu/packages/calendar.scm +++ b/gnu/packages/calendar.scm @@ -128,7 +128,9 @@ data units.") ;; running in a TTY: ;; https://github.com/pimutils/khal/issues/683 "not test_printics_read_from_stdin " - "and not test_import_from_stdin"))))))) + "and not test_import_from_stdin " + ;; https://github.com/pimutils/khal/issues/825 + "and not test_description_and_location_and_categories"))))))) (native-inputs `(("python-pytest" ,python-pytest) ("python-pytest-cov" ,python-pytest-cov) diff --git a/gnu/packages/cdrom.scm b/gnu/packages/cdrom.scm index d94636ba4c..c48f581576 100644 --- a/gnu/packages/cdrom.scm +++ b/gnu/packages/cdrom.scm @@ -225,6 +225,20 @@ reconstruction capability.") (sha256 (base32 "03w6ypsmwwy4d7vh6zgwpc60v541vc5ywp8bdb758hbc4yv2wa7d")) + (modules '((guix build utils))) + (snippet + '(begin + ;; By default 'cdda2wav --help' would print a string like + ;; "Version 3.01_linux_4.19.10-gnu_x86_64_x86_64". Change + ;; it to not capture the kernel version of the build + ;; machine, to allow for reproducible builds. + (substitute* "cdda2wav/local.cnf.in" + (("^VERSION_OS=.*") + (string-append + "actual_os := $(shell uname -o)\n" + "actual_arch := $(shell uname -m)\n" + "VERSION_OS = _$(actual_os)_$(actual_arch)\n"))) + #t)) (patches (search-patches "cdrtools-3.01-mkisofs-isoinfo.patch")))) (build-system gnu-build-system) ;; XXX cdrtools bundles a modified, relicensed early version of cdparanoia. @@ -558,7 +572,8 @@ from an audio CD.") (for-each wrap (find-files (string-append out "/bin") - ".*")))))) + ".*"))) + #t))) #:tests? #f)) ; no test target (inputs `(("wget" ,wget) diff --git a/gnu/packages/check.scm b/gnu/packages/check.scm index 937e4e094c..2d669a3412 100644 --- a/gnu/packages/check.scm +++ b/gnu/packages/check.scm @@ -210,12 +210,14 @@ multi-paradigm automated test framework for C++ and Objective-C.") (version "1.12.2") (home-page "https://github.com/catchorg/Catch2") (source (origin - (method url-fetch) - (uri (string-append home-page "/archive/v" version ".tar.gz")) + (method git-fetch) + (uri (git-reference + (url "https://github.com/catchorg/Catch2") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) (sha256 (base32 - "0g2ysxc6adqca5wh7nsicnxb9wkxg75cd5izjsl39rcj0v903gr7")) - (file-name (string-append name "-" version ".tar.gz")))) + "1gdp5wm8khn02g2miz381llw3191k7309qj8s3jd6sasj01rhf23")))) (build-system cmake-build-system) (synopsis "Automated test framework for C++ and Objective-C") (description "Catch2 stands for C++ Automated Test Cases in Headers and is @@ -294,15 +296,18 @@ format.") (define-public cppcheck (package (name "cppcheck") - (version "1.85") + (version "1.86") (source (origin - (method url-fetch) - (uri (string-append "https://github.com/danmar/cppcheck/archive/" - version ".tar.gz")) + (method git-fetch) + (uri (git-reference + (url "https://github.com/danmar/cppcheck") + (commit version))) + (file-name (git-file-name name version)) (sha256 - (base32 "18qlddf1i9bk5nnvy1v2nfxjd46y8wvp3rqz2hrfxjxsyvrfq5yw")) - (file-name (string-append name "-" version ".tar.gz")))) + (base32 "0jr4aah72c7wy94a8vlj3k050rx6pmc7m9nvmll1jwbscxj5f7ff")))) (build-system cmake-build-system) + (arguments + '(#:configure-flags '("-DBUILD_TESTS=ON"))) (home-page "http://cppcheck.sourceforge.net") (synopsis "Static C/C++ code analyzer") (description "Cppcheck is a static code analyzer for C and C++. Unlike @@ -1249,13 +1254,14 @@ C/C++, R, and more, and uploads it to the @code{codecov.io} service.") (version "0.2") (source (origin - (method url-fetch) - (uri (string-append "https://github.com/jupyter/testpath/archive/" - version ".tar.gz")) - (file-name (string-append name "-" version ".tar.gz")) + (method git-fetch) + (uri (git-reference + (url "https://github.com/jupyter/testpath") + (commit version))) + (file-name (git-file-name name version)) (sha256 (base32 - "04kh3fgvmqz6cfcw79q70qwjz7ib7lxm27cc548iy2rpr33qqf55")))) + "0r4iiizjql6ny1ln7ciw7rrbjadz1s9zrf2hl0xkgnh3ypd8936f")))) (build-system python-build-system) (arguments `(#:tests? #f ; this package does not even have a setup.py @@ -1414,6 +1420,30 @@ normally the case.") (define-public python2-pytest-subtesthack (package-with-python2 python-pytest-subtesthack)) +(define-public python-pytest-sugar + (package + (name "python-pytest-sugar") + (version "0.9.2") + (source + (origin + (method url-fetch) + (uri (pypi-uri "pytest-sugar" version)) + (sha256 + (base32 + "1asq7yc4g8bx2sn7yy974mhc9ywvaihasjab4inkirdwn9s7mn7w")))) + (build-system python-build-system) + (propagated-inputs + `(("python-packaging" ,python-packaging) + ("python-pytest" ,python-pytest) + ("python-termcolor" ,python-termcolor))) + (home-page "https://pivotfinland.com/pytest-sugar/") + (synopsis "Plugin for pytest that changes the default look and feel") + (description + "@code{pytest-sugar} is a plugin for py.test that changes the default +look and feel of py.test, using a progress bar and showing failures and errors +instantly.") + (license license:bsd-3))) + (define-public python-hypothesis (package (name "python-hypothesis") @@ -2036,17 +2066,15 @@ retried.") (name "python-pyhamcrest") (version "1.9.0") (source (origin - (method url-fetch) - (uri - (string-append - "https://github.com/hamcrest/PyHamcrest/archive/V" - version - ".tar.gz")) - (file-name - (string-append name "-" version ".tar.gz")) + ;; Tests not distributed from pypi release. + (method git-fetch) + (uri (git-reference + (url "https://github.com/hamcrest/PyHamcrest") + (commit (string-append "V" version)))) + (file-name (git-file-name name version)) (sha256 (base32 - "1lqjajhwf7x7igvvnj5p1cm31y9njy07qby94w18kl6zwbdjqrwy")))) + "01qnzj9qnzz0y78qa3ing24ssvszb0adw59xc4qqmdn5wryy606b")))) (native-inputs ; All native inputs are for tests `(("python-pytest-cov" ,python-pytest-cov) ("python-mock" ,python-mock) @@ -2070,13 +2098,13 @@ retried.") (name "unittest-cpp") (version "2.0.0") (source (origin - (method url-fetch) - (uri (string-append - "https://github.com/unittest-cpp/unittest-cpp/archive/v" - version ".tar.gz")) - (file-name (string-append name "-" version ".tar.gz")) + (method git-fetch) + (uri (git-reference + (url "https://github.com/unittest-cpp/unittest-cpp") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) (sha256 - (base32 "1fgmna2la7z4pwwy2gd10gpgi2q1fk89npjfvkmzvhkxhyc231bl")))) + (base32 "0sxb3835nly1jxn071f59fwbdzmqi74j040r81fanxyw3s1azw0i")))) (arguments `(#:tests? #f)) ; It's run after build automatically. (build-system cmake-build-system) diff --git a/gnu/packages/chemistry.scm b/gnu/packages/chemistry.scm index 03120aaeee..e682975b36 100644 --- a/gnu/packages/chemistry.scm +++ b/gnu/packages/chemistry.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2018 Konrad Hinsen <konrad.hinsen@fastmail.net> ;;; Copyright © 2018 Kei Kebreau <kkebreau@posteo.net> +;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il> ;;; ;;; This file is part of GNU Guix. ;;; @@ -19,6 +20,7 @@ (define-module (gnu packages chemistry) #:use-module (guix packages) + #:use-module (guix utils) #:use-module ((guix licenses) #:prefix license:) #:use-module (guix download) #:use-module (gnu packages) @@ -55,7 +57,7 @@ "avogadro-boost148.patch")))) (build-system cmake-build-system) (arguments - '(#:tests? #f + `(#:tests? #f #:configure-flags (list "-DENABLE_GLSL=ON" (string-append "-DPYTHON_LIBRARIES=" @@ -63,7 +65,9 @@ "/lib") (string-append "-DPYTHON_INCLUDE_DIRS=" (assoc-ref %build-inputs "python") - "/include/python2.7")) + "/include/python" + ,(version-major+minor + (package-version python)))) #:phases (modify-phases %standard-phases (add-after 'unpack 'patch-python-lib-path @@ -76,7 +80,10 @@ (("^.*OUTPUT_VARIABLE.*") (string-append "set(PYTHON_LIB_PATH \"" (assoc-ref outputs "out") - "/lib/python2.7/site-packages\")"))) + "/lib/python" + ,(version-major+minor + (package-version python)) + "/site-packages\")"))) #t)) (add-after 'install 'wrap-program (lambda* (#:key inputs outputs #:allow-other-keys) @@ -85,7 +92,10 @@ (setenv "PYTHONPATH" (string-append (assoc-ref outputs "out") - "/lib/python2.7/site-packages:" + "/lib/python" + ,(version-major+minor + (package-version python)) + "/site-packages:" (getenv "PYTHONPATH"))) (wrap-program (string-append out "/bin/avogadro") `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH"))))) diff --git a/gnu/packages/chez.scm b/gnu/packages/chez.scm index 929e50ee9b..10601f0bfa 100644 --- a/gnu/packages/chez.scm +++ b/gnu/packages/chez.scm @@ -88,7 +88,8 @@ ("zlib:static" ,zlib "static") ("stex" ,stex))) (native-inputs - `(("texlive" ,texlive) + `(("texlive" ,(texlive-union (list texlive-latex-oberdiek + texlive-generic-epsf))) ("ghostscript" ,ghostscript) ("netpbm" ,netpbm))) (native-search-paths @@ -278,7 +279,15 @@ and 32-bit PowerPC architectures.") (build-system gnu-build-system) (native-inputs `(("chez-scheme" ,chez-scheme) - ("texlive" ,texlive))) + ("ghostscript" ,ghostscript) + ("texlive" ,(texlive-union (list texlive-latex-oberdiek + texlive-generic-epsf + texlive-metapost + texlive-fonts-charter + texlive-generic-pdftex + texlive-context-base + texlive-fonts-cm + texlive-tex-plain))))) (arguments `(#:make-flags (list (string-append "PREFIX=" %output) (string-append "DOCDIR=" %output "/share/doc/" @@ -288,6 +297,15 @@ and 32-bit PowerPC architectures.") #:tests? #f ; no tests #:phases (modify-phases %standard-phases + (add-before 'build 'set-HOME + (lambda _ + ;; FIXME: texlive-union does not find the built + ;; metafonts, so it tries to generate them in HOME. + (setenv "HOME" "/tmp") + #t)) + ;; This package has a custom "bootstrap" script that + ;; is meant to be run from the Makefile. + (delete 'bootstrap) (replace 'configure (lambda* _ (copy-file "config.mk.template" "config.mk") @@ -327,7 +345,7 @@ programming in Scheme.") (native-inputs `(("chez-scheme" ,chez-scheme) ("chez-web" ,chez-web) - ("texlive" ,texlive))) + ("texlive" ,(texlive-union (list texlive-generic-pdftex))))) (arguments `(#:tests? #f ; no tests #:phases @@ -343,11 +361,16 @@ programming in Scheme.") (string-append var chez-h))) #t))) (add-before 'build 'tangle - (lambda _ + (lambda* (#:key inputs #:allow-other-keys) + (setenv "TEXINPUTS" + (string-append + (getcwd) ":" + (assoc-ref inputs "chez-web") "/share/texmf-local/tex/generic:" + ":")) ;; just using "make" tries to build the .c files before ;; they are created. - (and (zero? (system* "make" "sockets")) - (zero? (system* "make"))))) + (and (invoke "make" "sockets") + (invoke "make")))) (replace 'build (lambda* (#:key outputs inputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm index 32b92a976c..e8a50c676c 100644 --- a/gnu/packages/compression.scm +++ b/gnu/packages/compression.scm @@ -2263,7 +2263,7 @@ single-member files which can't be decompressed in parallel.") (build-system cmake-build-system) (arguments `(#:tests? #f)) ;; No tests available. - (inputs `(("boost" ,boost) + (inputs `(("boost" ,boost-cxx14) ("libiconv" ,libiconv) ("xz" ,xz))) (native-inputs `(("pkg-config" ,pkg-config))) diff --git a/gnu/packages/conkeror.scm b/gnu/packages/conkeror.scm deleted file mode 100644 index 6145dbf445..0000000000 --- a/gnu/packages/conkeror.scm +++ /dev/null @@ -1,83 +0,0 @@ -;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2014 Cyrill Schenkel <cyrill.schenkel@gmail.com> -;;; Copyright © 2014, 2015 Eric Bavier <bavier@member.fsf.org> -;;; Copyright © 2016 John J. Foerch <jjfoerch@earthlink.net> -;;; -;;; This file is part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. - -(define-module (gnu packages conkeror) - #:use-module ((guix licenses) #:prefix license:) - #:use-module (guix packages) - #:use-module (guix download) - #:use-module (guix build-system gnu) - #:use-module (gnu packages) - #:use-module (gnu packages gnuzilla)) - -(define-public conkeror - (package - (name "conkeror") - (version "1.1.0") - (source (origin - (method url-fetch) - (uri - (string-append "http://repo.or.cz/conkeror.git/snapshot/" - version ".tar.gz")) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "0jz216mjwis7f03j98s4wkcrrq2j3f41fb2y47a5qszc340zhdzv")))) - (build-system gnu-build-system) - (inputs `(("icecat" ,icecat))) - (arguments - `(#:tests? #f ;no tests - #:make-flags `("CC=gcc" - ,(string-append "PREFIX=" (assoc-ref %outputs "out"))) - #:phases - (modify-phases %standard-phases - (delete 'configure) - (add-after - 'install 'install-app-launcher - (lambda* (#:key inputs outputs #:allow-other-keys) - ;; This overwrites the installed launcher, which execs xulrunner, - ;; with one that execs 'icecat --app' - (let* ((out (assoc-ref outputs "out")) - (datadir (string-append out "/share/conkeror")) - (launcher (string-append out "/bin/conkeror"))) - (call-with-output-file launcher - (lambda (p) - (format p "#!~a/bin/bash -exec ~a/bin/icecat --app ~a \"$@\"~%" - (assoc-ref inputs "bash") ;implicit input - (assoc-ref inputs "icecat") - (string-append datadir - "/application.ini")))) - (chmod launcher #o555))))))) - (synopsis "Keyboard focused web browser with Emacs look and feel") - (description "Conkeror is a highly-programmable web browser based on -Mozilla XULRunner which is the base of all Mozilla products including Firefox. -Conkeror has a sophisticated keyboard system for running commands and -interacting with web page content, modelled after Emacs and Lynx. It is -self-documenting and extensible with JavaScript. - -It comes with builtin support for several Web 2.0 sites like several Google -services (Search, Gmail, Maps, Reader, etc.), Del.icio.us, Reddit, Last.fm and -YouTube. For easier editing of form fields, it can spawn external editors.") - (home-page "http://conkeror.org") - ;; Conkeror is triple licensed. - (license (list - ;; MPL 1.1 -- this license is not GPL compatible - license:gpl2 - license:lgpl2.1)))) diff --git a/gnu/packages/cran.scm b/gnu/packages/cran.scm index f08a204fb8..423bb5b54f 100644 --- a/gnu/packages/cran.scm +++ b/gnu/packages/cran.scm @@ -7754,3 +7754,24 @@ circular variables).") "This package provides tools to fit and compare Ornstein-Uhlenbeck models for evolution along a phylogenetic tree.") (license license:gpl2+))) + +(define-public r-fmsb + (package + (name "r-fmsb") + (version "0.6.3") + (source + (origin + (method url-fetch) + (uri (cran-uri "fmsb" version)) + (sha256 + (base32 + "1n29bnyp20pvpk2lsa9fblsj5w7amp14snc74pk5w3yr5y6rj0s5")))) + (build-system r-build-system) + (home-page "http://minato.sip21c.org/msb/") + (synopsis "Functions for medical statistics book with demographic data") + (description + "This package provides several utility functions for the book entitled +\"Practices of Medical and Health Data Analysis using R\" (Pearson Education +Japan, 2007) with Japanese demographic data and some demographic analysis +related functions.") + (license license:gpl2+))) diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm index 2fcb7fb36b..bb3d6d916a 100644 --- a/gnu/packages/cross-base.scm +++ b/gnu/packages/cross-base.scm @@ -454,6 +454,23 @@ XBINUTILS and the cross tool chain." flags))) ((#:phases phases) `(modify-phases ,phases + ;; XXX: The hack below allows us to make sure the + ;; 'apply-hurd-patch' phase gets added in the first + ;; cross-libc, but does *not* get added twice subsequently + ;; when cross-building another libc. + ,@(if (and (hurd-triplet? target) + (not (hurd-target?))) + `((add-after 'unpack 'apply-hurd-patch + (lambda* (#:key inputs native-inputs + #:allow-other-keys) + ;; TODO: Move this to 'patches' field. + (let ((patch (or (assoc-ref native-inputs + "hurd-magic-pid-patch") + (assoc-ref inputs + "hurd-magic-pid-patch")))) + (invoke "patch" "-p1" "--force" "--input" + patch))))) + '()) (add-before 'configure 'set-cross-kernel-headers-path (lambda* (#:key inputs #:allow-other-keys) (let* ((kernel (assoc-ref inputs "kernel-headers")) @@ -477,7 +494,9 @@ XBINUTILS and the cross tool chain." ,@(if (hurd-triplet? target) `(("cross-mig" ,@(assoc-ref (package-native-inputs xheaders) - "cross-mig"))) + "cross-mig")) + ("hurd-magic-pid-patch" + ,(search-patch "glibc-hurd-magic-pid.patch"))) '()) ,@(package-inputs libc) ;FIXME: static-bash ,@(package-native-inputs libc))))))) diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm index 3509bb6fc0..4e4425b729 100644 --- a/gnu/packages/databases.scm +++ b/gnu/packages/databases.scm @@ -24,7 +24,7 @@ ;;; Copyright © 2017 Adriano Peluso <catonano@gmail.com> ;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net> ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr> -;;; Copyright © 2017 Alex Vong <alexvong1995@gmail.com> +;;; Copyright © 2017, 2018 Alex Vong <alexvong1995@gmail.com> ;;; Copyright © 2017, 2018 Ben Woodcroft <donttrustben@gmail.com> ;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com> ;;; Copyright © 2017, 2018 Pierre Langlois <pierre.langlois@gmx.com> @@ -1247,6 +1247,7 @@ changes.") (define-public sqlite (package (name "sqlite") + (replacement sqlite-3.26.0) (version "3.24.0") (source (origin (method url-fetch) @@ -1283,9 +1284,29 @@ widely deployed SQL database engine in the world. The source code for SQLite is in the public domain.") (license license:public-domain))) +(define-public sqlite-3.26.0 + (package (inherit sqlite) + (version "3.26.0") + (source (origin + (method url-fetch) + (uri (let ((numeric-version + (match (string-split version #\.) + ((first-digit other-digits ...) + (string-append first-digit + (string-pad-right + (string-concatenate + (map (cut string-pad <> 2 #\0) + other-digits)) + 6 #\0)))))) + (string-append "https://sqlite.org/2018/sqlite-autoconf-" + numeric-version ".tar.gz"))) + (sha256 + (base32 + "0pdzszb4sp73hl36siiv3p300jvfvbcdxi2rrmkwgs6inwznmajx")))))) + ;; This is used by Tracker. (define-public sqlite-with-fts5 - (package (inherit sqlite) + (package/inherit sqlite (name "sqlite-with-fts5") (arguments (substitute-keyword-arguments (package-arguments sqlite) @@ -1294,7 +1315,7 @@ is in the public domain.") ;; This is used by Qt. (define-public sqlite-with-column-metadata - (package (inherit sqlite) + (package/inherit sqlite (name "sqlite-with-column-metadata") (arguments (substitute-keyword-arguments (package-arguments sqlite) diff --git a/gnu/packages/datamash.scm b/gnu/packages/datamash.scm index 182d281a5d..81b0069aab 100644 --- a/gnu/packages/datamash.scm +++ b/gnu/packages/datamash.scm @@ -1,6 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014, 2018 Eric Bavier <bavier@member.fsf.org> -;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il> +;;; Copyright © 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il> ;;; ;;; This file is part of GNU Guix. ;;; @@ -29,7 +29,7 @@ (define-public datamash (package (name "datamash") - (version "1.3") + (version "1.4") (source (origin (method url-fetch) @@ -37,8 +37,7 @@ version ".tar.gz")) (sha256 (base32 - "19jpcv4ryvbz0476d6dgpxpbjkpmih4q84wj06nslls338bm5fzf")) - (patches (search-patches "datamash-arm-tests.patch")))) + "0aj7wvv14s2fsf2rl49mqhxdagy8cbz6rz4xyi7bkg2nahnxsi7s")))) (native-inputs `(("which" ,which) ;for tests ("perl" ,perl))) ;for help2man diff --git a/gnu/packages/dictionaries.scm b/gnu/packages/dictionaries.scm index 039ec45965..9e06ac7124 100644 --- a/gnu/packages/dictionaries.scm +++ b/gnu/packages/dictionaries.scm @@ -247,21 +247,41 @@ and a Python library.") (define-public translate-shell (package (name "translate-shell") - (version "0.9.6.8") + (version "0.9.6.9") (source (origin - (method url-fetch) - (uri (string-append "https://github.com/soimort/" name "/archive/v" - version ".tar.gz")) + (method git-fetch) + (uri (git-reference + (url"https://github.com/soimort/translate-shell.git") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) (sha256 (base32 - "17yc2kwk8957wwxyih0jmsai720ai2yqyvmrqrglcncqg6zdbz9w")) - (file-name (string-append name "-" version ".tar.gz")))) + "1xyf0vdxmbgqcgsr1gvgwh1q4fh080h68radkim6pfcwzffliszm")))) (build-system gnu-build-system) (arguments `(#:phases (modify-phases %standard-phases (delete 'configure) ; no configure phase + (add-after 'unpack 'remove-unnecessary-file + ;; This file gets generated during the build phase. + (lambda _ + (delete-file "translate") + #t)) + (add-after 'install 'wrap-binary + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bin (string-append out "/bin/trans")) + (curl (assoc-ref inputs "curl")) + (fribidi (assoc-ref inputs "fribidi")) + (rlwrap (assoc-ref inputs "rlwrap"))) + (wrap-program bin + `("PATH" ":" prefix + (,(string-append out "/bin:" + curl "/bin:" + fribidi "/bin:" + rlwrap "/bin"))))) + #t)) (add-after 'install 'emacs-install (lambda* (#:key inputs outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) @@ -277,7 +297,7 @@ and a Python library.") (guix build emacs-utils) (guix build utils)) #:test-target "test")) - (propagated-inputs + (inputs `(("curl" ,curl) ("fribidi" ,fribidi) ("rlwrap" ,rlwrap))) diff --git a/gnu/packages/easyrpg.scm b/gnu/packages/easyrpg.scm new file mode 100644 index 0000000000..05fd2b11a0 --- /dev/null +++ b/gnu/packages/easyrpg.scm @@ -0,0 +1,121 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2018 Sou Bunnbu <iyzsong@member.fsf.org> +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +(define-module (gnu packages easyrpg) + #:use-module (guix packages) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (guix download) + #:use-module (guix build-system gnu) + #:use-module (gnu packages audio) + #:use-module (gnu packages compression) + #:use-module (gnu packages fontutils) + #:use-module (gnu packages gtk) + #:use-module (gnu packages icu4c) + #:use-module (gnu packages image) + #:use-module (gnu packages mp3) + #:use-module (gnu packages pkg-config) + #:use-module (gnu packages pulseaudio) + #:use-module (gnu packages sdl) + #:use-module (gnu packages xdisorg) + #:use-module (gnu packages xiph) + #:use-module (gnu packages xml)) + +(define-public liblcf + (package + (name "liblcf") + (version "0.5.4") + (source (origin + (method url-fetch) + (uri (string-append + "https://easyrpg.org/downloads/player/" version + "/liblcf-" version ".tar.gz")) + (sha256 + (base32 + "1k99bcw5c23801jk3mbz5sj5h18x46w1qxrkknhwhfgqzpvxhwrs")))) + (build-system gnu-build-system) + (native-inputs + `(("pkg-config" ,pkg-config))) + (propagated-inputs + ;; Required by 'liblcf.pc'. + `(("expat" ,expat) + ("icu" ,icu4c))) + (home-page "https://easyrpg.org/") + (synopsis "Library to handle RPG Maker 2000 and 2003 game data") + (description + "@code{liblcf} is a library to handle RPG Maker 2000 and 2003 game data. +It can read and write LCF and XML files.") + ;; It includes a copy of Boost Preprocessor Cat and Stringize (boost-1.0): + ;; src/boost/preprocessor/config.hpp + ;; src/boost/preprocessor/cat.hpp + ;; src/boost/preprocessor/stringize.hpp + ;; and a copy of inih (bsd-3): + ;; src/ini.h + ;; src/ini.cpp + ;; src/inireader.h + ;; src/inireader.cpp + ;; TODO: Unbundle them. + (license license:expat))) + +(define-public easyrpg-player + (package + (name "easyrpg-player") + (version "0.5.4") + (source (origin + (method url-fetch) + (uri (string-append + "https://easyrpg.org/downloads/player/" version + "/easyrpg-player-" version ".tar.gz")) + (sha256 + (base32 + "0w0idr61slg5828j1q31c1kh1h0ryp8psc006y06jph5pp3qgm48")))) + (build-system gnu-build-system) + (arguments + '(#:configure-flags + (list (string-append "--with-bash-completion-dir=" + %output "/etc/bash_completion.d/")))) + (native-inputs + `(("pkg-config" ,pkg-config))) + (inputs + `(("freetype" ,freetype) + ("harfbuzz" ,harfbuzz) + ("liblcf" ,liblcf) + ("libpng" ,libpng) + ("libsndfile" ,libsndfile) + ("libvorbis" ,libvorbis) + ("libxmp" ,libxmp) + ("mpg123" ,mpg123) + ("opusfile" ,opusfile) + ("pixman" ,pixman) + ("sdl2-mixer" ,sdl2-mixer) + ("sdl2" ,sdl2) + ("speexdsp" ,speexdsp) + ;; ("wildmidi" ,wildmidi) ; TODO: package it + ("zlib" ,zlib))) + (home-page "https://easyrpg.org/") + (synopsis "Play RPG Maker 2000 and 2003 games") + (description + "EasyRPG Player is a game interpreter to play RPG Maker 2000, 2003 and +EasyRPG games. It uses the LCF parser library (liblcf) to read RPG Maker game +data.") + ;; It bundles FMMidi YM2608 FM synthesizer emulator (bsd-3): + ;; src/midisynth.h + ;; src/midisynth.cpp + ;; and PicoJSON JSON parser/serializer (bsd-2): + ;; src/picojson.h + ;; TODO: Unbundle them. + (license license:gpl3+))) diff --git a/gnu/packages/ebook.scm b/gnu/packages/ebook.scm index a78e3e871f..e750c6cac8 100644 --- a/gnu/packages/ebook.scm +++ b/gnu/packages/ebook.scm @@ -75,7 +75,7 @@ (define-public calibre (package (name "calibre") - (version "3.28.0") + (version "3.35.0") (source (origin (method url-fetch) @@ -84,7 +84,7 @@ version ".tar.xz")) (sha256 (base32 - "0b3vv03c6m6972sk8zj3zc5sq6b9837irnfgjlqhv9z5i75m0414")) + "1gd15wjz4fhcra6d44xiy3hwbyk0miwb66a1pq5yldyy0hlb271z")) ;; 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/education.scm b/gnu/packages/education.scm index b333bb9d35..ef97d58a84 100644 --- a/gnu/packages/education.scm +++ b/gnu/packages/education.scm @@ -41,6 +41,7 @@ #:use-module (gnu packages qt) #:use-module (gnu packages sdl) #:use-module (gnu packages texinfo) + #:use-module (gnu packages xorg) #:use-module (gnu packages xml) #:use-module ((guix licenses) #:prefix license:) #:use-module (guix packages) @@ -115,7 +116,7 @@ of categories with some of the activities available in that category. (define-public gcompris-qt (package (name "gcompris-qt") - (version "0.91") + (version "0.95") (source (origin (method url-fetch) @@ -124,17 +125,17 @@ of categories with some of the activities available in that category. version ".tar.xz")) (sha256 (base32 - "09h098w9q79hnzla1pcpqlnnr6dbafm4q6zmdp7wlk11ym8n9kvg")))) + "1aaijjx2b7k1cyx59jhs64hlp1sppw1faa81qxl5lxc79vifrlrl")))) (build-system cmake-build-system) (arguments `(#:phases (modify-phases %standard-phases - (add-after 'unpack 'patch-for-qt5.11 - (lambda _ - (substitute* "src/core/CMakeLists.txt" - (("qt5_use_modules") "target_link_libraries") - (("Qml Quick Gui Multimedia Network XmlPatterns Svg Xml Sensors Core") - "Qt5::Qml Qt5::Quick Qt5::Gui Qt5::Multimedia Qt5::Core Qt5::Svg Qt5::Xml Qt5::XmlPatterns Qt5::Sensors")) + (add-before 'check 'start-xorg-server + (lambda* (#:key inputs #:allow-other-keys) + ;; The test suite requires a running X server. + (system (string-append (assoc-ref inputs "xorg-server") + "/bin/Xvfb :1 &")) + (setenv "DISPLAY" ":1") #t)) (add-after 'install 'wrap-executable (lambda* (#:key inputs outputs #:allow-other-keys) @@ -152,13 +153,14 @@ of categories with some of the activities available in that category. '("qtdeclarative" "qtgraphicaleffects" "qtmultimedia" "qtquickcontrols")))) #t)))) - #:configure-flags (list "-DQML_BOX2D_MODULE=disabled") - #:tests? #f)) ; no test target + #:configure-flags (list "-DQML_BOX2D_MODULE=disabled" + "-DBUILD_TESTING=TRUE"))) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules) ("gettext" ,gettext-minimal) ("perl" ,perl) - ("qttools" ,qttools))) + ("qttools" ,qttools) + ("xorg-server" ,xorg-server))) (inputs `(("python-2" ,python-2) ("qtbase" ,qtbase) @@ -243,7 +245,7 @@ easy.") (define-public snap (package (name "snap") - (version "4.2.2.2") + (version "4.2.2.9") (source (origin (method git-fetch) @@ -253,7 +255,7 @@ easy.") (file-name (git-file-name name version)) (sha256 (base32 - "0bay08yr58qj8wzpjg33gdj78rfhyskfzidknpdl3cr1jrj6i4p9")))) + "07qyhh4f8gr1fqyvxa2i6lkzaaa0vl12yzllgp81rdil8z8bi976")))) (build-system trivial-build-system) (arguments `(#:modules ((guix build utils)) diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm index 50705416a0..35d59fe8f1 100644 --- a/gnu/packages/emacs.scm +++ b/gnu/packages/emacs.scm @@ -24,7 +24,7 @@ ;;; Copyright © 2017, 2018 Kyle Meyer <kyle@kyleam.com> ;;; Copyright © 2017 Kei Kebreau <kkebreau@posteo.net> ;;; Copyright © 2017 George Clemmer <myglc2@gmail.com> -;;; Copyright © 2017 Feng Shu <tumashu@163.com> +;;; Copyright © 2017, 2018 Feng Shu <tumashu@163.com> ;;; Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org> ;;; Copyright © 2017, 2018 Oleg Pykhalov <go.wigust@gmail.com> ;;; Copyright © 2017 Mekeor Melire <mekeor.melire@gmail.com> @@ -41,6 +41,7 @@ ;;; Copyright © 2018 Alex Branham <alex.branham@gmail.com> ;;; Copyright © 2018 Thorsten Wilms <t_w_@freenet.de> ;;; Copyright © 2018 Pierre Langlois <pierre.langlois@gmx.com> +;;; Copyright © 2018 Gabriel Hondet <gabrielhondet@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -122,6 +123,7 @@ #:use-module (gnu packages video) #:use-module (gnu packages haskell) #:use-module (gnu packages wordnet) + #:use-module (gnu packages ocaml) #:use-module (guix utils) #:use-module (srfi srfi-1) #:use-module (ice-9 match)) @@ -1721,7 +1723,7 @@ and stored in memory.") (define-public emacs-bui (package (name "emacs-bui") - (version "1.2.0") + (version "1.2.1") (source (origin (method git-fetch) (uri (git-reference @@ -1730,7 +1732,7 @@ and stored in memory.") (file-name (string-append name "-" version "-checkout")) (sha256 (base32 - "0ixia5s41f2nbal3wsixacbhbc0mk9yb75ir1amqakip30sq4apv")))) + "0sszdl4kvqbihdh8d7mybpp0d8yw2p3gyiipjcxz9xhvvmw3ww4x")))) (build-system emacs-build-system) (propagated-inputs `(("dash" ,emacs-dash))) @@ -1745,14 +1747,14 @@ type, for example: packages, buffers, files, etc.") (define-public emacs-guix (package (name "emacs-guix") - (version "0.5") + (version "0.5.1") (source (origin (method url-fetch) (uri (string-append "https://emacs-guix.gitlab.io/website/" "releases/emacs-guix-" version ".tar.gz")) (sha256 (base32 - "09zxd8x674vrpigmcx8l00ifhaxh35xwkwjb8dw9kydnhv9hyyi1")))) + "1gwihi08pz52zbv11lhwcdzsbmcbqvjf8j0ic56543v7nlmywkxh")))) (build-system gnu-build-system) (arguments `(#:configure-flags @@ -1820,7 +1822,7 @@ management tasks from Emacs. To begin with, run @code{M-x guix-about} or (define-public emacs-build-farm (package (name "emacs-build-farm") - (version "0.2.1") + (version "0.2.2") (source (origin (method git-fetch) (uri (git-reference @@ -1829,7 +1831,7 @@ management tasks from Emacs. To begin with, run @code{M-x guix-about} or (file-name (string-append name "-" version "-checkout")) (sha256 (base32 - "1a4ky0hca26p7f3i2c2s5517ygkyaaz52vs0vxy6f5q95rhlgdhd")))) + "0i0bwbav5861j2y15j9nd5m9rdqg9q97zgcbld8pivr9nyxy63lz")))) (build-system emacs-build-system) (propagated-inputs `(("bui" ,emacs-bui) @@ -4799,7 +4801,7 @@ indentation (space indentation only). (define-public emacs-elpy (package (name "emacs-elpy") - (version "1.26.0") + (version "1.27.0") (source (origin (method git-fetch) (uri (git-reference @@ -4808,7 +4810,7 @@ indentation (space indentation only). (file-name (string-append name "-" version "-checkout")) (sha256 (base32 - "0wynzp5xmrgiggmam82n6lfaiqmfl4n3ccpsgnh86r6pbsmssxjk")))) + "1b76y0kzk7s9ya8k9bpsgn31i9l0rxs4iz6lg7snhjgh03k0ssgv")))) (build-system emacs-build-system) (arguments `(#:include (cons* "^elpy/[^/]+\\.py$" "^snippets\\/" %default-include) @@ -5206,26 +5208,28 @@ target will call @code{compile} on it.") (define-public emacs-cider (package (name "emacs-cider") - (version "0.15.1") - (source (origin - (method url-fetch) - (uri (string-append - "https://github.com/clojure-emacs/cider/archive/v" - version ".tar.gz")) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "1j5hlmi14ypszv1f9nvq0jjlz7i742flg0ny3055l7i4x089xx6g")))) + (version "0.18.0") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/clojure-emacs/cider.git") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1m9kc88vga3q5d731qnpngnsa0n57pf21k3hll20rw8rggrx4vdn")))) (build-system emacs-build-system) (arguments '(#:exclude ; Don't exclude 'cider-test.el'. '("^\\.dir-locals\\.el$" "^test/"))) (propagated-inputs `(("emacs-clojure-mode" ,emacs-clojure-mode) + ("emacs-sesman" ,emacs-sesman) ("emacs-spinner" ,emacs-spinner) ("emacs-pkg-info" ,emacs-pkg-info) ("emacs-queue" ,emacs-queue))) - (home-page "https://cider.readthedocs.org/") + (home-page "https://cider.readthedocs.io/") (synopsis "Clojure development environment for Emacs") (description "CIDER (Clojure Interactive Development Environment that Rocks) aims to @@ -5360,8 +5364,8 @@ extensions.") (license license:gpl3+)))) (define-public emacs-evil-collection - (let ((commit "abc9dd60f71ccc1f24803a12d853f84b4a8b258c") - (revision "4")) + (let ((commit "4e1f0e0b17153d460805a0da90d6191d66b2673d") + (revision "5")) (package (name "emacs-evil-collection") (version (git-version "0.0.1" revision commit)) @@ -5373,7 +5377,7 @@ extensions.") (file-name (string-append name "-" version "-checkout")) (sha256 (base32 - "0c9l93vrsl6kzx8gg305dq8qkb2dr3s10fww7lh382911pdmsh7v")))) + "11d5ppdnb2y2mwsdd9g62h7zds962kw3nss89zv5iwgcf9f1fb5x")))) (build-system emacs-build-system) (propagated-inputs `(("emacs-evil" ,emacs-evil))) @@ -6650,28 +6654,51 @@ containing words from the rime project.") (define-public emacs-pyim (package (name "emacs-pyim") - (version "1.6.4") - (source (origin - (method url-fetch) - (uri (string-append - "https://github.com/tumashu/pyim/archive/v" - version ".tar.gz")) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "0hfg8q9hcjifvnlghw2g94dfxfirms2psq2ghqb28fhkf0lks13r")))) + (version "1.8") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/tumashu/pyim") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "16rma4cv7xgky0g3x4an27v30jdi6i1sqw43cl99zhkqvp43l3f9")))) (build-system emacs-build-system) (propagated-inputs `(("emacs-async" ,emacs-async) ("emacs-pyim-basedict" ,emacs-pyim-basedict) ("emacs-popup" ,emacs-popup) - ("emacs-pos-tip" ,emacs-pos-tip))) + ("emacs-posframe" ,emacs-posframe))) (home-page "https://github.com/tumashu/pyim") (synopsis "Chinese input method") (description "Chinese input method which supports quanpin, shuangpin, wubi and cangjie.") (license license:gpl2+))) +(define-public emacs-posframe + (package + (name "emacs-posframe") + (version "0.4.2") + (source + (origin + (method url-fetch) + (uri (string-append + "https://elpa.gnu.org/packages/posframe-" version ".el")) + (sha256 + (base32 + "1h8vvxvsg41vc1nnglqjs2q0k1yzfsn72skga9s76qa3zxmx6kds")))) + (build-system emacs-build-system) + ;; emacs-minimal does not include the function font-info + (arguments `(#:emacs ,emacs)) + (home-page "https://github.com/tumashu/posframe") + (synopsis "Pop a posframe (a child frame) at point") + (description "@code{emacs-posframe} can pop a posframe at point. A +posframe is a child frame displayed within its root window's buffer. +@code{emacs-posframe} is fast and works well with CJK languages.") + (license license:gpl3+))) + (define-public emacs-el2org (package (name "emacs-el2org") @@ -6787,7 +6814,7 @@ It should enable you to implement low-level X11 applications.") (define-public emacs-exwm (package (name "emacs-exwm") - (version "0.20") + (version "0.21") (synopsis "Emacs X window manager") (source (origin (method url-fetch) @@ -6795,7 +6822,7 @@ It should enable you to implement low-level X11 applications.") version ".tar")) (sha256 (base32 - "0nhhzbkm0mkj7sd1dy2c19cmn56gyaj9nl8kgy86h4fp63hjaz04")))) + "07ng1pgsnc3isfsyzh2gfc7391p9il8lb5xqf1z6yqn20w7k6xzj")))) (build-system emacs-build-system) (propagated-inputs `(("emacs-xelb" ,emacs-xelb))) @@ -6857,16 +6884,17 @@ built on top of XELB.") (define-public emacs-switch-window (package (name "emacs-switch-window") - (version "1.5.1") - (source (origin - (method url-fetch) - (uri (string-append - "https://github.com/dimitri/switch-window/archive/v" - version ".tar.gz")) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "07f99apxscwvsp2bjxsbi462c433kcglrjh6xl0gyafs1nvvvnd8")))) + (version "1.6.2") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/dimitri/switch-window") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0rci96asgamr6qp6nkyr5vwrnslswjxcjd96yccy4aivh0g66yfg")))) (build-system emacs-build-system) (home-page "https://github.com/dimitri/switch-window") (synopsis "Emacs window switch tool") @@ -6878,17 +6906,18 @@ other operations.") (define-public emacs-exwm-x (package (name "emacs-exwm-x") - (version "1.8.1") + (version "1.9.0") (synopsis "Derivative window manager based on EXWM") - (source (origin - (method url-fetch) - (uri (string-append - "https://github.com/tumashu/exwm-x/archive/v" - version ".tar.gz")) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "0ali1100aacq4zbvcck80h51pvw204jlxhn4aikkqq4ngbx03kkr")))) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/tumashu/exwm-x") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "03l3dl7s1qys1kkh40rm1sfx7axy1b8sf5f6nyksj9ps6d30p5i4")))) (build-system emacs-build-system) (propagated-inputs `(("emacs-exwm" ,emacs-exwm) @@ -7833,6 +7862,19 @@ value of the access token.") (base32 "10gi14kwxd81blddpvqh95lgmpbfgp0m955naxix3bs3r6a75n4s")))) (build-system emacs-build-system) + (arguments + `(#:tests? #t + #:test-command '("buttercup" "-L" ".") + #:phases + (modify-phases %standard-phases + ;; The HOME environment variable should be set to an existing + ;; directory for the tests to succeed. + (add-before 'check 'set-home + (lambda _ + (setenv "HOME" "/tmp") + #t))))) + (native-inputs + `(("emacs-buttercup" ,emacs-buttercup))) ;; In order to securely connect to an IRC server using TLS, Circe requires ;; the GnuTLS binary. (propagated-inputs @@ -7853,7 +7895,7 @@ want to use it.") ;; "tracking.el" is a library extracted from Circe package. It requires ;; "shorten.el". `(#:include '("^shorten.el$" "^tracking.el$") - #:tests? #f)) ;tests require buttercup + ,@(package-arguments emacs-circe))) (home-page "https://github.com/jorgenschaefer/circe/wiki/Tracking") (synopsis "Buffer tracking library") (description "@code{tracking.el} provides a way for different modes to @@ -10231,7 +10273,7 @@ downloading manager for Emacs.") (define-public emacs-helpful (package (name "emacs-helpful") - (version "0.13") + (version "0.15") (source (origin (method url-fetch) (uri (string-append @@ -10240,7 +10282,7 @@ downloading manager for Emacs.") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "11kj04y1fa3vnw2991cyqf6adz6bb3hlrdkvypjnmpb0s64q64b6")))) + "1xmvhphzb4hbg647dz4lafy6hd19b7bk3lxni6irqrzdsrclhzn6")))) (build-system emacs-build-system) (propagated-inputs `(("emacs-elisp-refs" ,emacs-elisp-refs))) @@ -11234,7 +11276,7 @@ device tree files.") (define-public emacs-daemons (package (name "emacs-daemons") - (version "1.2.0") + (version "2.0.0") (source (origin (method git-fetch) @@ -11244,7 +11286,7 @@ device tree files.") (file-name (string-append name "-" version "-checkout")) (sha256 (base32 - "00ijgm22ck76gw0x79krl05yy0m8a502yfakazfy5xhpn1zi6ab7")))) + "00bkzfaw3bqykcks610vk9wlpa2z360xn32bpsrycacwfv29j7g4")))) (build-system emacs-build-system) (home-page "https://github.com/cbowdon/daemons.el") (synopsis "Emacs UI for managing init system services") @@ -12729,3 +12771,144 @@ Emacs.") rooms. It also provides an API which allows Emacs to seamlessly create RPC channels with users and other software.") (license license:gpl3+)))) + +(define-public emacs-sesman + (package + (name "emacs-sesman") + (version "0.3.3") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/vspinu/sesman.git") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0r32f8ma9ddczxrrdz0nadp14j3zmk10q1ch02gb82synkx3xdra")))) + (build-system emacs-build-system) + (arguments + `(#:tests? #t + #:test-command '("make" "test"))) + (home-page "https://github.com/vspinu/sesman") + (synopsis "Session manager for Emacs based IDEs") + (description "Sesman provides facilities for session management and +interactive session association with the current contexts (project, directory, +buffers). While sesman can be used to manage arbitrary sessions, it primary +targets the Emacs based IDEs (CIDER, ESS, Geiser, Robe, SLIME etc.)") + (license license:gpl3+))) + +(define-public emacs-buttercup + (package + (name "emacs-buttercup") + (version "1.16") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/jorgenschaefer/emacs-buttercup.git") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0dckgcyzsav6ld78bcyrrygy1cz1jvqgav6vy8f6klpmk3r8xrl1")))) + (build-system emacs-build-system) + (arguments + `(#:tests? #t + #:test-command '("make" "test") + #:phases + (modify-phases %standard-phases + (add-after 'install 'install-bin + (lambda* (#:key outputs #:allow-other-keys) + (install-file "bin/buttercup" + (string-append (assoc-ref outputs "out") "/bin")) + #t))))) + (home-page "https://github.com/jorgenschaefer/emacs-buttercup") + (synopsis "Behavior driven emacs lisp testing framework") + (description "Buttercup is a behavior-driven development framework for +testing Emacs Lisp code. It allows to group related tests so they can share +common set-up and tear-down code, and allows the programmer to \"spy\" on +functions to ensure they are called with the right arguments during testing.") + (license license:gpl3+))) + +(define-public emacs-wordnut + (let ((commit "feac531404041855312c1a046bde7ea18c674915") + (revision "0")) + (package + (name "emacs-wordnut") + (version (git-version "0.1" revision commit)) + (home-page "https://github.com/gromnitsky/wordnut") + (source (origin + (method git-fetch) + (uri (git-reference (url home-page) (commit commit))) + (sha256 + (base32 + "1jl0b6g64a9w0q7bfvwha67vgws5xd15b7mkfyb5gkz3pymqhfxn")) + (patches + (search-patches "emacs-wordnut-require-adaptive-wrap.patch")) + (file-name (git-file-name name version)))) + (build-system emacs-build-system) + (propagated-inputs + `(("wordnet" ,wordnet) + ("emacs-adaptive-wrap" ,emacs-adaptive-wrap))) + (synopsis "Major mode for WordNet") + (description "This Emacs package provides an interface for +@code{wordnet}. Features include completion, if the query is not found +too ambiguous and navigation in the result buffer.") + (license license:gpl3+)))) + +(define-public emacs-dedukti-mode + (let ((commit "d7c3505a1046187de3c3aeb144455078d514594e")) + (package + (name "emacs-dedukti-mode") + (version (git-version "0" "0" commit)) + (home-page "https://github.com/rafoo/dedukti-mode") + (source (origin + (method git-fetch) + (uri (git-reference + (url home-page) + (commit commit))) + (sha256 + (base32 + "1842wikq24c8rg0ac84vb1qby9ng1nssxswyyni4kq85lng5lcrp")) + (file-name (git-file-name name version)))) + (inputs + `(("dedukti" ,dedukti))) + (build-system emacs-build-system) + (arguments + '(#:phases + (modify-phases %standard-phases + (add-before 'install 'patch-dkpath + (lambda _ + (let ((dkcheck-path (which "dkcheck"))) + (substitute* "dedukti-mode.el" + (("dedukti-path \"(.*)\"") + (string-append "dedukti-path \"" dkcheck-path "\""))))))))) + (synopsis "Emacs major mode for Dedukti files") + (description "This package provides an Emacs major mode for editing +Dedukti files.") + (license license:cecill-b)))) + +(define-public emacs-flycheck-dedukti + (let ((commit "3dbff5646355f39d57a3ec514f560a6b0082a1cd")) + (package + (name "emacs-flycheck-dedukti") + (version (git-version "0" "0" commit)) + (home-page "https://github.com/rafoo/flycheck-dedukti") + (source (origin + (method git-fetch) + (uri (git-reference + (url home-page) + (commit commit))) + (sha256 + (base32 + "1ffpxnwl3wx244n44mbw81g00nhnykd0lnid29f4aw1av7w6nw8l")) + (file-name (git-file-name name version)))) + (build-system emacs-build-system) + (inputs + `(("dedukti-mode" ,emacs-dedukti-mode) + ("flycheck-mode" ,emacs-flycheck))) + (synopsis "Flycheck integration for the dedukti language") + (description "This package provides a frontend for Flycheck to perform +syntax checking on dedukti files.") + (license license:cecill-b)))) diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm index 795595e447..2d21f1246a 100644 --- a/gnu/packages/emulators.scm +++ b/gnu/packages/emulators.scm @@ -1186,7 +1186,7 @@ play them on systems for which they were never designed!") (define-public mame (package (name "mame") - (version "0.203") + (version "0.205") (source (origin (method git-fetch) @@ -1196,7 +1196,7 @@ play them on systems for which they were never designed!") (file-name (git-file-name name version)) (sha256 (base32 - "19ccqc00024fbjyk0k5d9xljhwq7wsrp7phwm2jmn0h77mgdj844")) + "1q5z18rlmas598fxga8jr2d6xdngdzjab49xfy4hffdmlq624lw7")) (modules '((guix build utils))) (snippet ;; Remove bundled libraries. diff --git a/gnu/packages/engineering.scm b/gnu/packages/engineering.scm index 8ef9a5c277..75045f25b3 100644 --- a/gnu/packages/engineering.scm +++ b/gnu/packages/engineering.scm @@ -1,7 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015, 2016, 2017, 2018 Ricardo Wurmus <rekado@elephly.net> ;;; Copyright © 2015 Federico Beffa <beffa@fbengineering.ch> -;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il> +;;; Copyright © 2016, 2018 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2016 David Thompson <davet@gnu.org> ;;; Copyright © 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2016, 2017, 2018 Theodoros Foradis <theodoros@foradis.org> @@ -9,6 +9,7 @@ ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org> ;;; Copyright © 2018 Jonathan Brielmaier <jonathan.brielmaier@web.de> +;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net> ;;; ;;; This file is part of GNU Guix. ;;; @@ -690,8 +691,8 @@ language.") (method url-fetch) (file-name (string-append name "-" version ".tar.xz")) (uri (string-append - "https://launchpad.net/kicad/5.0/" version "/+download/" name - "-" version ".tar.xz")) + "https://launchpad.net/kicad/" (version-major+minor version) + "/" version "/+download/" name "-" version ".tar.xz")) (sha256 (base32 "17nqjszyvd25wi6550j981whlnb1wxzmlanljdjihiki53j84x9p")))) (build-system cmake-build-system) @@ -710,7 +711,9 @@ language.") ;; headers in the wxwidgets store item, but in wxPython. (string-append "-DCMAKE_CXX_FLAGS=-I" (assoc-ref %build-inputs "wxpython") - "/include/wx-3.0") + "/include/wx-" + ,(version-major+minor + (package-version python2-wxpython))) "-DCMAKE_BUILD_WITH_INSTALL_RPATH=TRUE" "-DKICAD_SPICE=TRUE" ;; TODO: Enable this when CA certs are working with curl. @@ -732,7 +735,10 @@ language.") (file (string-append out "/bin/kicad")) (path (string-append out - "/lib/python2.7/site-packages:" + "/lib/python" + ,(version-major+minor + (package-version python)) + "/site-packages:" (getenv "PYTHONPATH")))) (wrap-program file `("PYTHONPATH" ":" prefix (,path)) @@ -1709,7 +1715,7 @@ parallel computing platforms. It also supports serial execution.") ("gcc-toolchain" ,gcc-toolchain) ("iverilog" ,iverilog) ("libtool" ,libtool) - ("octave" ,octave) + ("octave" ,octave-cli) ("qt4" ,qt-4) ("sed" ,sed))) (home-page "http://qucs.sourceforge.net/") @@ -1839,7 +1845,7 @@ simulations are also supported.") ("libtool" ,libtool) ("mpi" ,openmpi) ("ngspice" ,ngspice) - ("octave" ,octave) + ("octave" ,octave-cli) ("qt4" ,qt-4) ("qucs" ,qucs) ("sed" ,sed) @@ -1853,3 +1859,55 @@ The S letter indicates SPICE. The purpose of the Qucs-S subproject is to use free SPICE circuit simulation kernels with the Qucs GUI. It provides the simulator backends @code{Qucsator}, @code{ngspice} and @code{Xyce}.") (license license:gpl2+))) + +(define-public librepcb + (package + (name "librepcb") + (version "0.1.0") + (source + (origin + (method url-fetch) + (uri (string-append "https://download.librepcb.org/releases/0.1.0/librepcb-" + version "-source.zip")) + (sha256 + (base32 + "0affvwwgs1j2wx6bb3zfa2jbfxpckklr8cka2nkswca0p82wd3dv")))) + (build-system gnu-build-system) + (inputs + `(("qtbase" ,qtbase) + ("zlib" ,zlib))) + (native-inputs + `(("qttools" ,qttools) ; for lrelease + ("unzip" ,unzip))) + (arguments + `(#:phases + (modify-phases %standard-phases + (replace 'configure + (lambda* (#:key inputs outputs #:allow-other-keys) + (mkdir-p "build") + (chdir "build") + (let ((lrelease (string-append (assoc-ref inputs "qttools") + "/bin/lrelease")) + (out (assoc-ref outputs "out"))) + (invoke "qmake" + (string-append "QMAKE_LRELEASE=" lrelease) + (string-append "PREFIX=" out) + "../librepcb.pro"))))))) + (home-page "https://librepcb.org/") + (synopsis "Electronic Design Automation tool") + (description "LibrePCB is @dfn{Electronic Design Automation} (EDA) +software to develop printed circuit boards. It features human readable file +formats and complete project management with library, schematic and board +editors.") + (license (list license:gpl3+ + license:boost1.0 ; libs/clipper, + ; libs/optional/tests/catch.hpp, + ; libs/sexpresso/tests/catch.hpp + license:expat ; libs/delaunay-triangulation, + ; libs/parseagle, libs/type_safe + license:asl2.0 ; libs/fontobene, libs/googletest, + ; libs/parseagle + license:isc ; libs/hoedown + license:cc0 ; libs/optional, libs/sexpresso + license:bsd-2 ; libs/optional/tests/catch.hpp + license:lgpl2.1+)))) ; libs/quazip diff --git a/gnu/packages/enlightenment.scm b/gnu/packages/enlightenment.scm index 9989e2f5a8..e1e5cb5821 100644 --- a/gnu/packages/enlightenment.scm +++ b/gnu/packages/enlightenment.scm @@ -183,7 +183,7 @@ removable devices or support for multimedia.") (define-public terminology (package (name "terminology") - (version "1.3.0") + (version "1.3.2") (source (origin (method url-fetch) (uri @@ -191,7 +191,7 @@ removable devices or support for multimedia.") "terminology/terminology-" version ".tar.xz")) (sha256 (base32 - "07vw28inkimi9avp16j0rqcfqjq16081554qsv29pcqhz18xp59r")) + "1kclxzadmk272s9spa7n704pcb1c611ixxrq88w5zk22va0i25xm")) (modules '((guix build utils))) ;; Remove the bundled fonts. (snippet diff --git a/gnu/packages/entr.scm b/gnu/packages/entr.scm index dfa9274bea..11d28e60f7 100644 --- a/gnu/packages/entr.scm +++ b/gnu/packages/entr.scm @@ -56,7 +56,7 @@ (home-page "http://entrproject.org/") (synopsis "Run arbitrary commands when files change") (description - "entr is a zero-configuration tool with no external build- or run-time + "entr is a zero-configuration tool with no external build or run-time dependencies. The interface to entr is not only minimal, it aims to be simple enough to create a new category of ad hoc automation. These micro-tests reduce keystrokes, but more importantly they emphasize the utility of diff --git a/gnu/packages/file.scm b/gnu/packages/file.scm index 78f0360c2e..4518c8d3dc 100644 --- a/gnu/packages/file.scm +++ b/gnu/packages/file.scm @@ -3,6 +3,7 @@ ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org> ;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr> +;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il> ;;; ;;; This file is part of GNU Guix. ;;; @@ -30,6 +31,7 @@ (package (name "file") (version "5.33") + (replacement file/fixed) (source (origin (method url-fetch) (uri (string-append "ftp://ftp.astron.com/pub/file/file-" @@ -51,3 +53,10 @@ extensions to tell you the type of a file, but looks at the actual contents of the file. This package provides the libmagic library.") (license bsd-2) (home-page "https://www.darwinsys.com/file/"))) + +(define file/fixed + (package + (inherit file) + (source + (origin (inherit (package-source file)) + (patches (search-patches "file-CVE-2018-10360.patch")))))) diff --git a/gnu/packages/finance.scm b/gnu/packages/finance.scm index 7d7c3ab111..bd18df91be 100644 --- a/gnu/packages/finance.scm +++ b/gnu/packages/finance.scm @@ -847,7 +847,7 @@ Luhn and family of ISO/IEC 7064 check digit algorithms. ") (define-public python-duniterpy (package (name "python-duniterpy") - (version "0.50.0") + (version "0.51.0") (source (origin (method git-fetch) @@ -858,11 +858,26 @@ Luhn and family of ISO/IEC 7064 check digit algorithms. ") (file-name (git-file-name name version)) (sha256 (base32 - "0f24ihglmzphy30pgc49w0rxmsjc76mgcggg078cfsz7xrrk13gf")))) + "074mh2kh3s00ib0h99050ss3j4c51v57py6dzm7crida6l0iydbv")))) (build-system python-build-system) (arguments ;; Tests fail with "AttributeError: module 'attr' has no attribute 's'". - `(#:tests? #f)) + `(#:tests? #f + #:phases + (modify-phases %standard-phases + (add-after 'build 'build-documentation + (lambda _ + (invoke "make" "docs"))) + (add-after 'build-documentation 'install-documentation + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (doc (string-append out "/share/doc/" ,name))) + (mkdir-p doc) + (copy-recursively "docs/_build/html" doc)) + #t))))) + (native-inputs + `(("python-sphinx" ,python-sphinx) + ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme))) (propagated-inputs `(("python-aiohttp" ,python-aiohttp) ("python-attr" ,python-attr) @@ -874,19 +889,22 @@ Luhn and family of ISO/IEC 7064 check digit algorithms. ") (home-page "https://git.duniter.org/clients/python/duniterpy") (synopsis "Python implementation of Duniter API") (description "@code{duniterpy} is an implementation of -@uref{https://github.com/duniter/duniter/, duniter} API. Its +@uref{https://github.com/duniter/duniter/, duniter} API. Its main features are: @itemize -@item Supports Duniter's Basic Merkle API and protocol -@item Asynchronous +@item Support Duniter's Basic Merkle API and protocol +@item Asynchronous/synchronous without threads +@item Support HTTP, HTTPS and Web Socket transport for Basic Merkle API +@item Support Elasticsearch Duniter4j API @item Duniter signing key +@item Sign/verify and encrypt/decrypt messages with the Duniter credentials @end itemize") (license license:gpl3+))) (define-public silkaj (package (name "silkaj") - (version "0.6.0") + (version "0.6.1") (source (origin (method git-fetch) @@ -896,7 +914,7 @@ main features are: (file-name (git-file-name name version)) (sha256 (base32 - "02n028rz1pshgh7w0af3b291r8lwvhzskm1q98d991gr8rscvad2")))) + "0a99gbgdd7m9wisqhqpfyaim0rlv9gkp8gmrppkagqf6j0683igh")))) (build-system python-build-system) (arguments `(#:tests? #f)) ;no test diff --git a/gnu/packages/firmware.scm b/gnu/packages/firmware.scm index c396cd644f..0f2d32bbd9 100644 --- a/gnu/packages/firmware.scm +++ b/gnu/packages/firmware.scm @@ -4,6 +4,7 @@ ;;; Copyright © 2017 David Craven <david@craven.ch> ;;; Copyright © 2017, 2018 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr> +;;; Copyright © 2018 Vagrant Cascadian <vagrant@debian.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -450,8 +451,8 @@ such as: (let ((base (make-arm-trusted-firmware "sun50i_a64")) ;; Use unreleased version which enables additional features needed for ;; LCD support - (commit "cabe0a31801e99e7abb84d2114ded6bb56f3c71e") - (revision "1")) + (commit "98aab97484b27e40aa74a93e5d1c1ac037a7e0b8") + (revision "2")) (package (inherit base) (name "arm-trusted-firmware-sun50i-a64") @@ -465,7 +466,7 @@ such as: (file-name (git-file-name name version)) (sha256 (base32 - "0srw2zj3vn5d2fwzjpwa5h70d5bwvb79jnpdvmd395npv0gxshdz"))))))) + "0z5si034vcn4m68zaixc5v8fs1c7vxbh7n4hggxs55p0jg01dan5"))))))) (define-public arm-trusted-firmware-puma-rk3399 (let ((base (make-arm-trusted-firmware "rk3399")) diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm index f9f8428202..88315008bd 100644 --- a/gnu/packages/fonts.scm +++ b/gnu/packages/fonts.scm @@ -22,6 +22,7 @@ ;;; Copyright © 2017, 2018 Arun Isaac <arunisaac@systemreboot.net> ;;; Copyright © 2017 Mohammed Sadiq <sadiq@sadiqpk.org> ;;; Copyright © 2018 Charlie Ritter <chewzerita@posteo.net> +;;; Copyright © 2018 Gabriel Hondet <gabrielhondet@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -622,7 +623,7 @@ languages, plus Greek and Cyrillic.") (define-public font-gnu-unifont (package (name "font-gnu-unifont") - (version "11.0.02") + (version "11.0.03") (source (origin (method url-fetch) (uri (string-append @@ -630,16 +631,14 @@ languages, plus Greek and Cyrillic.") version ".tar.gz")) (sha256 (base32 - "1di8i44c163b9l5f08jcrjfijnqz0j7p7hpfvf8dcms6cm6s4wvy")))) + "171zhm52c4rzpn19qcq4n9nyfbcjl38v50zslhvgpjdcmc5jvhav")))) (build-system gnu-build-system) - (outputs '("out" ; TrueType version - "pcf" ; PCF (bitmap) version - "psf" ; PSF (console) version - "bin" ; Utilities to manipulate '.hex' format - )) + (outputs '("out" ; TrueType version + "pcf" ; PCF (bitmap) version + "psf" ; PSF (console) version + "bin")) ; Utilities to manipulate '.hex' format (arguments - '(#:parallel-build? #f ; parallel build fails - #:tests? #f ; no check target + '(#:tests? #f ; no check target #:phases (modify-phases %standard-phases (replace @@ -1353,3 +1352,24 @@ reproduction and display environments. This package provides only TrueType files (TTF).") (home-page "https://software.sil.org/charis/") (license license:silofl1.1))) + +(define-public font-mononoki + (package + (name "font-mononoki") + (version "1.2") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/madmalik/mononoki/") + (commit version))) + (sha256 + (base32 + "1rkzyxn30rn8qv2h2xz324j7q15hzg2lci8790a7cdl1dfgic4xi")) + (file-name (git-file-name name version)))) + (build-system font-build-system) + (synopsis "Font for programming and code review") + (description + "Mononoki is a typeface by Matthias Tellen, created to enhance code +formatting.") + (home-page "https://madmalik.github.io/mononoki/") + (license license:silofl1.1))) diff --git a/gnu/packages/freedesktop.scm b/gnu/packages/freedesktop.scm index 293916c4d2..8982c0ec35 100644 --- a/gnu/packages/freedesktop.scm +++ b/gnu/packages/freedesktop.scm @@ -13,6 +13,7 @@ ;;; Copyright © 2017 Brendan Tildesley <brendan.tildesley@openmailbox.org> ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2018 Pierre Neidhardt <mail@ambrevar.xyz> +;;; Copyright © 2018 Stefan Stefanović <stefanx2ovic@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -227,109 +228,69 @@ the freedesktop.org XDG Base Directory specification.") (define-public elogind (package (name "elogind") - (version "232.4") + (version "239.3") (source (origin - (method url-fetch) - (uri (string-append "https://github.com/elogind/elogind/" - "archive/v" version ".tar.gz")) - (file-name (string-append name "-" version ".tar.gz")) + (method git-fetch) + (uri (git-reference + (url "https://github.com/elogind/elogind") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) (sha256 (base32 - "1qcxian48z2dj5gfmp7brrngdydqf2jm00f4rjr5sy1myh8fy931")) - (patches (search-patches "elogind-glibc-2.27.patch")) - (modules '((guix build utils))) - (snippet - '(begin - (use-modules (guix build utils)) - (substitute* "Makefile.am" - ;; Avoid validation against DTD because the DTDs for - ;; both doctype 4.2 and 4.5 are needed. - (("XSLTPROC_FLAGS = ") "XSLTPROC_FLAGS = --novalid")) - #t)))) - (build-system gnu-build-system) + "1gipnbnlz5k3gxv33wyhi2zd94hlfa9lm360p8z6w5i9s8dzhf52")))) + (build-system meson-build-system) (arguments - `(#:tests? #f ;FIXME: "make check" in the "po" directory fails. - #:configure-flags - (list (string-append "--with-udevrulesdir=" - (assoc-ref %outputs "out") - "/lib/udev/rules.d") - - ;; Let elogind be its own cgroup controller, rather than relying - ;; on systemd or OpenRC. By default, 'configure' makes an - ;; incorrect guess. - "--with-cgroup-controller=elogind" - - (string-append "--with-rootprefix=" - (assoc-ref %outputs "out")) - (string-append "--with-rootlibexecdir=" - (assoc-ref %outputs "out") - "/libexec/elogind") - ;; These are needed to ensure that lto linking works. - "RANLIB=gcc-ranlib" - "AR=gcc-ar" - "NM=gcc-nm") - #:make-flags '("PKTTYAGENT=/run/current-system/profile/bin/pkttyagent") + `(#:configure-flags + (let* ((out (assoc-ref %outputs "out")) + (sysconf (string-append out "/etc")) + (libexec (string-append out "/libexec/elogind")) + (dbuspolicy (string-append out "/etc/dbus-1/system.d")) + (shepherd (assoc-ref %build-inputs "shepherd")) + (halt-path (string-append shepherd "/sbin/halt")) + (kexec-path "") ;not available in Guix yet + (poweroff-path (string-append shepherd "/sbin/shutdown")) + (reboot-path (string-append shepherd "/sbin/reboot"))) + (list + (string-append "-Drootprefix=" out) + (string-append "-Dsysconfdir=" sysconf) + (string-append "-Drootlibexecdir=" libexec) + (string-append "-Ddbuspolicydir=" dbuspolicy) + (string-append "-Dc_link_args=-Wl,-rpath=" libexec) + (string-append "-Dcpp_link_args=-Wl,-rpath=" libexec) + (string-append "-Dhalt-path=" halt-path) + (string-append "-Dkexec-path=" kexec-path) + (string-append "-Dpoweroff-path=" poweroff-path) + (string-append "-Dreboot-path=" reboot-path) + "-Dcgroup-controller=elogind" + ;; Disable some tests. + "-Dtests=false" + "-Dslow-tests=false")) #:phases (modify-phases %standard-phases - (add-after 'unpack 'patch-locale-header + (add-after 'unpack 'fix-pkttyagent-path (lambda _ - ;; Fix compilation with glibc >= 2.26, which removed xlocale.h. - ;; This can be removed for elogind 234. - (substitute* "src/basic/parse-util.c" - (("xlocale\\.h") "locale.h")) + (substitute* "meson.build" + (("join_paths\\(bindir, 'pkttyagent'\\)") + "'\"/run/current-system/profile/bin/pkttyagent\"'")) #t)) - (replace 'bootstrap + (add-after 'unpack 'change-pid-file-path (lambda _ - (invoke "intltoolize" "--force" "--automake") - (invoke "autoreconf" "-vif"))) - (add-before 'build 'fix-service-file - (lambda* (#:key outputs #:allow-other-keys) - ;; Fix the file name of the 'elogind' binary in the D-Bus - ;; '.service' file. - (substitute* "src/login/org.freedesktop.login1.service" - (("^Exec=.*") - (string-append "Exec=" (assoc-ref %outputs "out") - "/libexec/elogind/elogind\n"))) - #t)) - (add-after 'install 'add-libcap-to-search-path - (lambda* (#:key inputs outputs #:allow-other-keys) - ;; Add a missing '-L' for libcap in libelogind.la. See - ;; <https://lists.gnu.org/archive/html/guix-devel/2017-09/msg00084.html>. - (let ((libcap (assoc-ref inputs "libcap")) - (out (assoc-ref outputs "out"))) - (substitute* (string-append out "/lib/libelogind.la") - (("-lcap") - (string-append "-L" libcap "/lib -lcap"))) - #t))) - (add-after 'unpack 'remove-uaccess-tag - (lambda _ - ;; systemd supports a "uaccess" built-in tag, but eudev currently - ;; doesn't. This leads to eudev warnings that we'd rather not - ;; see, so remove the reference to "uaccess." - (substitute* "src/login/73-seat-late.rules.in" - (("^TAG==\"uaccess\".*" line) - (string-append "# " line "\n"))) + (substitute* "src/login/elogind.c" + (("\"/run/elogind.pid\"") "\"/run/systemd/elogind.pid\"")) #t))))) (native-inputs - `(("autoconf" ,autoconf) - ("automake" ,automake) - ("libtool" ,libtool) - ("intltool" ,intltool) - ("gettext" ,gettext-minimal) - ("python" ,python) + `(("docbook-xml" ,docbook-xml) + ("docbook-xml-4.2" ,docbook-xml-4.2) ("docbook-xsl" ,docbook-xsl) - ("docbook-xml" ,docbook-xml) - ("xsltproc" ,libxslt) - ("m4" ,m4) + ("gettext" ,gettext-minimal) + ("gperf" ,gperf) ("libxml2" ,libxml2) ;for XML_CATALOG_FILES + ("m4" ,m4) ("pkg-config" ,pkg-config) - - ;; Use gperf 3.0 to work around - ;; <https://github.com/wingo/elogind/issues/8>. - ("gperf" ,gperf-3.0))) + ("python" ,python) + ("xsltproc" ,libxslt))) (inputs `(("linux-pam" ,linux-pam) - ("linux-libre-headers" ,linux-libre-headers) ("libcap" ,libcap) ("shepherd" ,shepherd) ;for 'halt' and 'reboot', invoked ;when pressing the power button diff --git a/gnu/packages/ftp.scm b/gnu/packages/ftp.scm index b9c6d209b8..dd8af33972 100644 --- a/gnu/packages/ftp.scm +++ b/gnu/packages/ftp.scm @@ -170,7 +170,7 @@ as required.") (define-public libfilezilla (package (name "libfilezilla") - (version "0.14.0") + (version "0.15.1") (source (origin (method url-fetch) @@ -178,11 +178,13 @@ as required.") name "/" name "-" version ".tar.bz2")) (sha256 (base32 - "15cfz98asypf9rfybv4c6kx8nk3wak7qlm1azldc0gd1nqm4xqvz")))) + "17zlhw5b1a7jzh50cbpy2is3sps5lnzch5yf9qm7mwrviw9c8j10")))) (build-system gnu-build-system) (native-inputs `(("cppunit" ,cppunit) ("pkg-config" ,pkg-config))) + (inputs + `(("nettle" ,nettle))) (home-page "https://lib.filezilla-project.org") (synopsis "Cross-platform C++ library used by Filezilla client") (description @@ -207,14 +209,14 @@ output. (define-public filezilla (package (name "filezilla") - (version "3.37.4") + (version "3.39.0") (source (origin (method url-fetch) (uri (string-append "https://download.filezilla-project.org/client/" "FileZilla_" version "_src.tar.bz2")) (sha256 - (base32 "169wy7ilsh518mcinkjmr6m0kzxbzchmc9mivf5c9b4zp1w4gg3i")))) + (base32 "0ks42q6mi3qx85zpa98izkyficv2bdh3jnvmy97xjnjyfy9mwlgv")))) (build-system gnu-build-system) (arguments ;; Don't let filezilla phone home to check for updates. diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm index 34a015bdf7..8a29297805 100644 --- a/gnu/packages/game-development.scm +++ b/gnu/packages/game-development.scm @@ -652,6 +652,8 @@ etc.") (uri (string-append "https://github.com/liballeg/allegro5/releases" "/download/" version "/allegro-" version ".tar.gz")) + (patches (search-patches + "allegro-fix-compilation-mesa-18.2.5-and-later.patch")) (sha256 (base32 "1w9a5yqi5q03b2qvmx5ff90paz0xbr9cy7i7f0xiqa65ava66q9l")))) diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm index 7f84e447bb..80d48dbe56 100644 --- a/gnu/packages/games.scm +++ b/gnu/packages/games.scm @@ -146,9 +146,11 @@ #:use-module (gnu packages xml) #:use-module (gnu packages messaging) #:use-module (gnu packages networking) + #:use-module (guix build-system glib-or-gtk) #:use-module (guix build-system gnu) #:use-module (guix build-system go) #:use-module (guix build-system haskell) + #:use-module (guix build-system meson) #:use-module (guix build-system python) #:use-module (guix build-system cmake) #:use-module (guix build-system trivial)) @@ -573,7 +575,7 @@ automata. The following features are available: (define-public meandmyshadow (package (name "meandmyshadow") - (version "0.5") + (version "0.5a") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/meandmyshadow/" @@ -581,10 +583,7 @@ automata. The following features are available: "-src.tar.gz")) (sha256 (base32 - "1b6qf83vdfv8jwn2jq9ywmda2qn2f5914i7mwfy04m17wx593m3m")) - (patches (search-patches - ;; This will not be needed in the next release. - "meandmyshadow-define-paths-earlier.patch")))) + "0i98v6cgmpsxy7mbb0s2y6f6qq6mkwzk2nrv1nz39ncf948aky2h")))) (build-system cmake-build-system) (arguments `(#:tests? #f)) ; there are no tests @@ -1308,7 +1307,7 @@ fight Morgoth, the Lord of Darkness.") #:phases (modify-phases %standard-phases (delete 'configure)))) ; no configure script - (home-page "http://pingus.seul.org/welcome.html") + (home-page "https://pingus.seul.org/") (synopsis "Lemmings clone") (description "Pingus is a free Lemmings-like puzzle game in which the player takes @@ -2306,7 +2305,7 @@ world}, @uref{http://evolonline.org, Evol Online} and (define openttd-engine (package (name "openttd-engine") - (version "1.7.1") + (version "1.8.0") (source (origin (method url-fetch) (uri (string-append "http://binaries.openttd.org/releases/" @@ -2323,7 +2322,7 @@ world}, @uref{http://evolonline.org, Evol Online} and "02d1xmb75yv4x6rfnvxk3vvq4l3lvvwr2pfsdzn7lzalic51ziqh"))))) (sha256 (base32 - "0dhv5bbbg1dmmq7fi3xss0a9jq2rqgb5sf9fsqzlsjcdm590j6b1")) + "0zq8xdg0k92p3s4j9x76591zaqz7k9ra69q008m209vdfffjvly2")) (modules '((guix build utils))) (snippet ;; The DOS port contains proprietary software. @@ -2353,7 +2352,7 @@ world}, @uref{http://evolonline.org, Evol Online} and configure-flags)))))))) (native-inputs `(("pkg-config" ,pkg-config))) (inputs - `(("allegro" ,allegro-4) + `(("allegro" ,allegro) ("fontconfig" ,fontconfig) ("freetype" ,freetype) ("icu4c" ,icu4c) @@ -5877,3 +5876,72 @@ libraries. AIFF sound effects and music in MOD and OGG formats are supported when packaged in Blorb container files or optionally from individual files.") (home-page "http://frotz.sourceforge.net") (license license:gpl2+)))) + +(define-public libmanette + (package + (name "libmanette") + (version "0.2.1") + (source (origin + (method url-fetch) + (uri (string-append "mirror://gnome/sources/" name "/" + (version-major+minor version) "/" + name "-" version ".tar.xz")) + (sha256 + (base32 + "14vqz30p4693yy3yxs0gj858x25sl2kawib1g9lj8g5frgl0hd82")))) + (build-system meson-build-system) + (native-inputs + `(("glib" ,glib "bin") ; for glib-compile-resources + ("gobject-introspection" ,gobject-introspection) + ("pkg-config" ,pkg-config) + ("vala" ,vala))) + (inputs + `(("libevdev" ,libevdev) + ("libgudev" ,libgudev))) + (home-page "https://wiki.gnome.org/Apps/Games") + (synopsis "Game controller library") + (description "Libmanette is a small GObject library giving you simple +access to game controllers. It supports the de-facto standard gamepads as +defined by the W3C standard Gamepad specification or as implemented by the SDL +GameController.") + (license license:lgpl2.1+))) + +(define-public quadrapassel + (package + (name "quadrapassel") + (version "3.31.3") + (source (origin + (method url-fetch) + (uri (string-append "mirror://gnome/sources/" name "/" + (version-major+minor version) "/" + name "-" version ".tar.xz")) + (sha256 + (base32 + "08i01nsgfb502xzzrrcxxbs7awb0j1h4c08vmj0j18ipa1sz8vb8")))) + (build-system glib-or-gtk-build-system) + (native-inputs + `(("desktop-file-utils" ,desktop-file-utils) ;for desktop-file-validate + ("gettext" ,gnu-gettext) + ("glib" ,glib "bin") ;for glib-compile-resources + ("itstool" ,itstool) + ("libxml2" ,libxml2) ;for xmllint + ("pkg-config" ,pkg-config) + ("vala" ,vala))) + (inputs + `(("clutter" ,clutter) + ("clutter-gtk" ,clutter-gtk) + ("gtk+" ,gtk+) + ("libcanberra" ,libcanberra) + ("libmanette" ,libmanette) + ("librsvg" ,librsvg))) + (home-page "https://wiki.gnome.org/Apps/Quadrapassel") + (synopsis "GNOME version of Tetris") + (description "Quadrapassel comes from the classic falling-block game, +Tetris. The goal of the game is to create complete horizontal lines of +blocks, which will disappear. The blocks come in seven different shapes made +from four blocks each: one straight, two L-shaped, one square, and two +S-shaped. The blocks fall from the top center of the screen in a random +order. You rotate the blocks and move them across the screen to drop them in +complete lines. You score by dropping blocks fast and completing lines. As +your score gets higher, you level up and the blocks fall faster.") + (license license:gpl2+))) diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm index 8207104174..1f1e80dde8 100644 --- a/gnu/packages/gcc.scm +++ b/gnu/packages/gcc.scm @@ -461,34 +461,18 @@ Go. It also includes runtime support libraries for these languages.") (define-public gcc-6 (package (inherit gcc-5) - (version "6.4.0") + (version "6.5.0") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/gcc/gcc-" version "/gcc-" version ".tar.xz")) (sha256 (base32 - "1m0lr7938lw5d773dkvwld90hjlcq2282517d1gwvrfzmwgg42w5")) - (patches (search-patches "gcc-libsanitizer-fix.patch" - "gcc-libsanitizer-ustat.patch" - "gcc-strmov-store-file-names.patch" + "0i89fksfp6wr1xg9l8296aslcymv2idn60ip31wr9s4pwin7kwby")) + (patches (search-patches "gcc-strmov-store-file-names.patch" "gcc-6-source-date-epoch-1.patch" "gcc-6-source-date-epoch-2.patch" - "gcc-5.0-libvtv-runpath.patch")) - (modules '((guix build utils))) - ;; This is required for building with glibc-2.26. - ;; This can be removed when gcc-6.5.0 is released. - ;; https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81712 - (snippet - '(begin - (for-each - (lambda (dir) - (substitute* (string-append "libgcc/config/" - dir "/linux-unwind.h") - (("struct ucontext") "ucontext_t"))) - '("aarch64" "alpha" "bfin" "i386" "m68k" "nios2" - "pa" "sh" "tilepro" "xtensa")) - #t)))) + "gcc-5.0-libvtv-runpath.patch")))) (inputs `(("isl" ,isl) ,@(package-inputs gcc-4.7))) @@ -506,16 +490,15 @@ Go. It also includes runtime support libraries for these languages.") (define-public gcc-7 (package (inherit gcc-6) - (version "7.3.0") + (version "7.4.0") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/gcc/gcc-" version "/gcc-" version ".tar.xz")) (sha256 (base32 - "0p71bij6bfhzyrs8676a8jmpjsfz392s2rg862sdnsk30jpacb43")) + "0lgy170b0pp60j9cczqkmaqyjjb584vfamj4c30swd7k0j6y5pgd")) (patches (search-patches "gcc-strmov-store-file-names.patch" - "gcc-libsanitizer-ustat.patch" "gcc-5.0-libvtv-runpath.patch")))) (description "GCC is the GNU Compiler Collection. It provides compiler front-ends diff --git a/gnu/packages/glib.scm b/gnu/packages/glib.scm index 491f688c8e..cd9b48caff 100644 --- a/gnu/packages/glib.scm +++ b/gnu/packages/glib.scm @@ -36,7 +36,6 @@ #:use-module (gnu packages enlightenment) #:use-module (gnu packages file) #:use-module (gnu packages flex) - #:use-module (gnu packages gcc) #:use-module (gnu packages gettext) #:use-module (gnu packages gnome) #:use-module (gnu packages gperf) @@ -621,11 +620,7 @@ useful for C++.") (delete-file "tests/test_ossig.py") #t))))) (native-inputs - `(;; Use gcc-7 to work around an internal compiler error that happens - ;; when using gcc-5.5.0. FIXME: Try removing this when the default - ;; compiler is no longer gcc-5.5.0. - ("gcc" ,gcc-7) - ("which" ,which) + `(("which" ,which) ;for tests: dbus-run-session and glib-compile-schemas ("dbus" ,dbus) ("glib-bin" ,glib "bin") @@ -656,11 +651,7 @@ useful for C++.") ("python-pycairo" ,python2-pycairo) ("gobject-introspection" ,gobject-introspection))) (native-inputs - `(;; Use gcc-7 to work around an internal compiler error that happens - ;; when using gcc-5.5.0. FIXME: Try removing this when the default - ;; compiler is no longer gcc-5.5.0. - ("gcc" ,gcc-7) - ("which" ,which) + `(("which" ,which) ;for tests: dbus-run-session and glib-compile-schemas ("dbus" ,dbus) ("glib-bin" ,glib "bin") diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm index b497b965bc..5dcf9b1f5f 100644 --- a/gnu/packages/gnome.scm +++ b/gnu/packages/gnome.scm @@ -31,6 +31,8 @@ ;;; Copyright © 2017, 2018 Rutger Helling <rhelling@mykolab.com> ;;; Copyright © 2018 Jovany Leandro G.C <bit4bit@riseup.net> ;;; Copyright © 2018 Vasile Dumitrascu <va511e@yahoo.com> +;;; Copyright © 2018 Björn Höfling <bjoern.hoefling@bjoernhoefling.de> +;;; Copyright © 2018 Timothy Sample <samplet@ngyro.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -95,6 +97,7 @@ #:use-module (gnu packages polkit) #:use-module (gnu packages popt) #:use-module (gnu packages ghostscript) + #:use-module (gnu packages inkscape) #:use-module (gnu packages ibus) #:use-module (gnu packages iso-codes) #:use-module (gnu packages libcanberra) @@ -151,6 +154,7 @@ #:use-module (gnu packages version-control) #:use-module (gnu packages virtualization) #:use-module (gnu packages vpn) + #:use-module (gnu packages web) #:use-module (gnu packages xorg) #:use-module (ice-9 match) #:use-module (srfi srfi-1)) @@ -2217,19 +2221,31 @@ selection and URL hints."))) (uri (string-append "mirror://gnome/sources/" name "/" (version-major+minor version) "/" name "-" version ".tar.xz")) - (patches ; We have to revert 2 commits to build against freerdp 1.1. - (search-patches "vinagre-revert-1.patch" - "vinagre-revert-2.patch")) + (patches (search-patches "vinagre-newer-freerdp.patch" + "vinagre-newer-rdp-parameters.patch")) (sha256 (base32 "10jya3jyrm18nbw3v410gbkc7677bqamax44pzgd3j15randn76d")))) (build-system glib-or-gtk-build-system) + (arguments + '(#:phases + (modify-phases %standard-phases + (add-before 'install 'skip-gtk-update-icon-cache + (lambda _ + ;; Don't create 'icon-theme.cache' + (substitute* (find-files "." "^Makefile$") + (("gtk-update-icon-cache") (which "true"))) + #t)) + (add-after 'unpack 'patch-configure + (lambda _ + (substitute* "configure" + (("freerdp") "freerdp2")) + #t))))) (native-inputs `(("pkg-config" ,pkg-config) ("intltool" ,intltool) ("itstool" ,itstool) - ("glib-bin" ,glib "bin") ;for glib-compile-schemas - ("gtk+-bin" ,gtk+ "bin"))) ;for gtk-update-icon-cache + ("glib-bin" ,glib "bin"))) ;for glib-compile-schemas (inputs `(("libxml2" ,libxml2) ("gtk-vnc" ,gtk-vnc) @@ -2240,8 +2256,6 @@ selection and URL hints."))) ("spice-gtk" ,spice-gtk) ("telepathy-glib" ,telepathy-glib) ("vte" ,vte))) - (arguments - `(#:configure-flags '("--enable-rdp"))) (home-page "https://wiki.gnome.org/Apps/Vinagre") (synopsis "Remote desktop viewer for GNOME") (description "Vinagre is a remote display client supporting the VNC, SPICE @@ -4630,14 +4644,6 @@ configuration program to choose applications starting on login.") (arguments '(#:phases (modify-phases %standard-phases - (add-after 'set-paths 'work-around-gcc-7-include-path-issue - ;; FIXME: Work around a problem with gcc-7 includes (see - ;; <https://bugs.gnu.org/30756>). Note that we use gcc-7 - ;; to work around an internal compiler error in gcc-5. - (lambda _ - (unsetenv "C_INCLUDE_PATH") - (unsetenv "CPLUS_INCLUDE_PATH") - #t)) (add-before 'check 'pre-check (lambda _ @@ -4655,11 +4661,7 @@ configuration program to choose applications starting on login.") ((".*expect\\(datestr\\).*") "")) #t))))) (native-inputs - `(("gcc" ,gcc-7) ; FIXME: Work around an internal compiler error in - ; gcc-5. Try removing this when our default compiler is - ; no longer gcc-5.5.0, and also remove the - ; 'work-around-gcc-7-include-path-issue' phase above. - ("glib:bin" ,glib "bin") ; for glib-compile-resources + `(("glib:bin" ,glib "bin") ; for glib-compile-resources ("pkg-config" ,pkg-config) ("xmllint" ,libxml2) ;; For testing @@ -5346,6 +5348,10 @@ libxml2.") ;; script. It provides a generic one if --enable-gdm-xsession is set. "--enable-gdm-xsession" + ;; Use '/etc/environment' for locale settings instead of the + ;; systemd-specific '/etc/locale.conf'. + "--with-lang-file=/etc/environment" + "--localstatedir=/var" ,(string-append "--with-default-path=" (string-join '("/run/setuid-programs" @@ -5408,6 +5414,11 @@ libxml2.") ;; are met (provided GNOME is installed of course). "gdm_session_set_environment_variable (self, \"XDG_CONFIG_DIRS\",\n" " \"/run/current-system/profile/etc/xdg\");\n" + ;; The session bus (which GDM will initialize from the this + ;; session environment) needs to know where to find the system + ;; service files. + "gdm_session_set_environment_variable (self, \"XDG_DATA_DIRS\",\n" + " \"/run/current-system/profile/share\");\n" ))) ;; Look for custom GDM conf in /run/current-system. (substitute* '("common/gdm-settings-desktop-backend.c") @@ -6435,15 +6446,16 @@ functionality and behavior.") (define-public arc-theme (package (name "arc-theme") - (version "20170302") + (version "20181022") (source (origin - (method url-fetch) - (uri (string-append "https://github.com/horst3180/arc-theme" - "/archive/" version ".tar.gz")) - (file-name (string-append name "-" version ".tar.gz")) + (method git-fetch) + (uri (git-reference + (url "https://github.com/NicoHood/arc-theme.git") + (commit version))) + (file-name (git-file-name name version)) (sha256 (base32 - "0igxpngnkf1wpsg872a9jg3c9f5z8afm312yfbillz16mk8w39cw")))) + "08951dk1irfadwpr3p323a4fprmxg53rk2r2niwq3v62ryhi3663")))) (build-system gnu-build-system) (arguments '(#:phases @@ -6454,16 +6466,20 @@ functionality and behavior.") (native-inputs `(("autoconf" ,autoconf) ("automake" ,automake) - ("pkg-config" ,pkg-config))) - (inputs - `(("gtk+" ,gtk+))) + ("glib" ,glib "bin") ; for glib-compile-resources + ("gnome-shell" ,gnome-shell) + ("gtk+" ,gtk+) + ("inkscape" ,inkscape) + ("optipng" ,optipng) + ("pkg-config" ,pkg-config) + ("sassc" ,sassc))) (synopsis "A flat GTK+ theme with transparent elements") (description "Arc is a flat theme with transparent elements for GTK 3, GTK 2, and GNOME Shell which supports GTK 3 and GTK 2 based desktop environments like GNOME, Unity, Budgie, Pantheon, XFCE, Mate, etc.") (home-page "https://github.com/horst3180/arc-theme") ;; No "or later" language found. - (license license:gpl3))) + (license license:gpl3+))) (define-public faba-icon-theme (package diff --git a/gnu/packages/gnupg.scm b/gnu/packages/gnupg.scm index 53fdc8200c..951fc05fa2 100644 --- a/gnu/packages/gnupg.scm +++ b/gnu/packages/gnupg.scm @@ -471,16 +471,23 @@ interface (FFI) of Guile.") (define-public python-gpg (package (name "python-gpg") - (version "1.8.0") + (version "1.10.0") (source (origin (method url-fetch) (uri (pypi-uri "gpg" version)) (sha256 (base32 - "1x74i6q713c0bckls7rdm8kgsmllf9qvy9x62jghszlhgjkyh9nd")))) + "1ji3ynhp36m1ccx7bmaq75dhij9frpn19v9mpi4aajn8csl194il")))) (build-system python-build-system) (arguments - '(#:tests? #f)) ; No test suite. + '(#:phases + (modify-phases %standard-phases + (add-before 'build 'set-environment + (lambda _ + (substitute* "setup.py" + (("cc") (which "gcc"))) + #t))) + #:tests? #f)) ; No test suite. (inputs `(("gpgme" ,gpgme))) (native-inputs diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm index d6b1f4c2d6..bb7fda24e6 100644 --- a/gnu/packages/gnuzilla.scm +++ b/gnu/packages/gnuzilla.scm @@ -62,6 +62,7 @@ #:use-module (gnu packages gl) #:use-module (gnu packages assembly) #:use-module (gnu packages rust) + #:use-module (gnu packages llvm) #:use-module (gnu packages icu4c) #:use-module (gnu packages video) #:use-module (gnu packages xiph) @@ -506,16 +507,36 @@ security standards.") (search-patch "icecat-use-system-media-libs.patch") (mozilla-patch "icecat-bug-1464061.patch" "d28761dbff18" "1f58rzwx4s1af66fdwn9lgkcd1ksmq8kn8imvf78p90jqi24h7b4") (mozilla-patch "icecat-bug-1479853.patch" "4faeb696dd06" "12891xx9c15s6kby6d3zk64v5nqgaq7sw597zv1fkd3a6x69hlva") - (mozilla-patch "icecat-bug-1488295.patch" "12ba39f69876" "1piyq44f0xa0a9z2748aqwpaziaxwp61d86gyhalbyag8lcxfb3p") - (mozilla-patch "icecat-bug-1500011.patch" "a0adabeedf26" "0f5wazha3zxzhy2j8f93hx62l9p02b1p40vi07qah3ar67h4ccj9") - (mozilla-patch "icecat-bug-1503082.patch" "19604eb26230" "1wqxgph4z14ijhk2j2m4av5p6gx72d02lzz83q6yy0k065kw8psb") - (mozilla-patch "icecat-bug-1499861.patch" "98737ab09270" "0fyl6wv0jxcxpkfpsff46y93k49n8lrw0k7c1p45g8da015dx27a") - (mozilla-patch "icecat-bug-1504452.patch" "1cf7d80355d5" "19jp4x32vyxam54d1r9fm7jwf6krhhf3xazfqmxb9aw4iwdil7dl") - (mozilla-patch "icecat-bug-1494752.patch" "c264774b8913" "1hxyi131x8jwawrq90cgkph833iv9ixrdrgzl1r978gbzwq10xz2") + (mozilla-patch "icecat-CVE-2018-17466.patch" "12ba39f69876" "1piyq44f0xa0a9z2748aqwpaziaxwp61d86gyhalbyag8lcxfb3p") + (mozilla-patch "icecat-CVE-2018-18498.patch" "a0adabeedf26" "0f5wazha3zxzhy2j8f93hx62l9p02b1p40vi07qah3ar67h4ccj9") + (mozilla-patch "icecat-CVE-2018-12405-pt01.patch" "19604eb26230" "1wqxgph4z14ijhk2j2m4av5p6gx72d02lzz83q6yy0k065kw8psb") + (mozilla-patch "icecat-CVE-2018-18492.patch" "98737ab09270" "0fyl6wv0jxcxpkfpsff46y93k49n8lrw0k7c1p45g8da015dx27a") + (mozilla-patch "icecat-CVE-2018-18493.patch" "1cf7d80355d5" "19jp4x32vyxam54d1r9fm7jwf6krhhf3xazfqmxb9aw4iwdil7dl") + (mozilla-patch "icecat-CVE-2018-12405-pt02.patch" "c264774b8913" "1hxyi131x8jwawrq90cgkph833iv9ixrdrgzl1r978gbzwq10xz2") (mozilla-patch "icecat-bug-1477773.patch" "ec13fda7c9b0" "0zj7aylgw55g0y7plaafn5gq8jwcsdr1bpdxacs0hq914nm8zy9z") - (mozilla-patch "icecat-bug-1500759.patch" "5e1a9644aeef" "1qimrpgyrd8zkiri7w57j0aymk20y9b34am5w7rvr6qj1lhrbfla") + (mozilla-patch "icecat-CVE-2018-12405-pt03.patch" "5e1a9644aeef" "1qimrpgyrd8zkiri7w57j0aymk20y9b34am5w7rvr6qj1lhrbfla") (mozilla-patch "icecat-bug-1485655.patch" "9055726e2d89" "1pppxr94zqh6zmi2mn1ih21qap09vk5ivbhnwxqr8iszvygjg44g") - (mozilla-patch "icecat-bug-1410214.patch" "9e641345e2ef" "0542xss2jdb8drh4g50cfy32l300x69dyywgx3dqs03vgr3qplxy"))) + (mozilla-patch "icecat-bug-1410214.patch" "9e641345e2ef" "0542xss2jdb8drh4g50cfy32l300x69dyywgx3dqs03vgr3qplxy") + (mozilla-patch "icecat-CVE-2018-12405-pt04.patch" "6398541ec302" "1c2yi7mkg3d5afxsgj9fp3zq8yhkmphrll5d60d5xsdv88kqqiyf") + (mozilla-patch "icecat-bug-1496736.patch" "3bed863ee656" "038k7jk3yp16410crwfdvhyb2vis49c6bplrfr83v51885cqldar") + (mozilla-patch "icecat-bug-1498765.patch" "a08c8493ba19" "0bwg4vg03j962lb9q8ihpiy4rmygykf1q9ij8x7h34q7hg43yjya") + (mozilla-patch "icecat-CVE-2018-12405-pt05.patch" "ee204e26690e" "1scs45xhlr1mwv6x2q6n22363f42by8cjmifqwzlikggs21f5mcq") + (mozilla-patch "icecat-bug-1507035.patch" "cec8b58ab3fe" "1f131ibpkrhsa44l822hnm5qgvapbs3i9pj25iimdwvr933winz8") + (mozilla-patch "icecat-bug-1501680.patch" "282c6bb81562" "1zgw7l5zmni8468y3f6cip1nlw63cfdd9vv9b00cbrgy96d1q2cp") + (mozilla-patch "icecat-bug-1500310.patch" "b3a439a26186" "0mrjxcmrlv04fyl36dwxk97dw08g2hlikvw2hfa1l0y8zsc4bgw8") + (mozilla-patch "icecat-bug-1500366.patch" "abd59256c4e3" "1jgwh2v4kwb6kf2h7mwf128w1k1jj119bfhlgqpmn9ami35wpzf3") + (mozilla-patch "icecat-bug-1493080.patch" "a7cabf306d05" "1n7wv67rcaz8wj31jc77ssjdj3kb61gdg7pigj828c5z2cgns1k5") + (mozilla-patch "icecat-CVE-2018-12405-pt06.patch" "8bbf80948b50" "1nvc69zgz9nvbw1pwxkil1fx4cxxpr6bsjrpp6l2kv7jhgax1bqk") + (mozilla-patch "icecat-bug-1507564.patch" "60619cc47b10" "09fanqr08kqgraw4xp7y2az4jc7ia8nn200rqjfj20vmkyjz97j3") + (mozilla-patch "icecat-bug-1507730.patch" "dd0f01818b9c" "14ziq1bm72n58xrvsgzpjj5z6ifpvi70r5jfhbkbj69mf4y4cx2z") + (mozilla-patch "icecat-CVE-2018-12405-pt07.patch" "a73a46ddc848" "1bvvyav3xyn6rgn6haicinxn0dasl9dyc1i37fyb7wr5wcpahybs") + (mozilla-patch "icecat-CVE-2018-18494.patch" "a72ec8e21577" "095zghmwdcbaid5426p9vpl757d8sfbsvgn201bjm7nhm03m4z7i") + (mozilla-patch "icecat-CVE-2018-12405-pt08.patch" "b6d0fc61fd0b" "0059avawxi4s4747plybjsjq8j2h4z7amw05p28xyg95a2njwnaa") + (mozilla-patch "icecat-bug-1499028.patch" "a62ede2dd3bc" "0ikmnibni8bdvpr9p42wskyyic08vzqdz5qr028bqzyg5119gily") + (mozilla-patch "icecat-bug-1426574.patch" "0db86656655b" "0kmccb4ccdzbzncwklx7w1bg7r61zwl2wnfp67vl27hm9xykbck7") + (mozilla-patch "icecat-CVE-2018-12405-pt09.patch" "20e31905de62" "0b5a441645wy3q4asaygvdq0inrxmxrh33cpgdp6ngflq9p2i6h0") + (mozilla-patch "icecat-CVE-2018-12405-pt10.patch" "c2832f98fe51" "0b4jfjfdyrihwjdfavd54hn9kdg2f017lmfr7mj2llp71flxwwj7") + (mozilla-patch "icecat-bug-1511495.patch" "d428d2b8f585" "1f9xs0bjhbphvkv60cnvz34sr2rv38jzvi47wh3nablg41yjpdrk"))) (modules '((guix build utils))) (snippet '(begin @@ -620,6 +641,8 @@ security standards.") ;; Icecat 60 checkes for rust>=1.24 `(("rust" ,rust-1.24) ("cargo" ,rust-1.24 "cargo") + ("llvm" ,llvm-3.9.1) + ("clang" ,clang-3.9.1) ("perl" ,perl) ("python" ,python-2) ; Python 3 not supported ("python2-pysqlite" ,python2-pysqlite) @@ -639,7 +662,7 @@ security standards.") #:imported-modules ,%cargo-build-system-modules ;for `generate-checksums' - #:configure-flags '("--enable-default-toolkit=cairo-gtk3" + #:configure-flags `("--enable-default-toolkit=cairo-gtk3" "--with-distribution-id=org.gnu" @@ -653,14 +676,25 @@ security standards.") "--disable-eme" "--disable-gconf" - ;; Stylo requires LLVM/clang. For now, disable it. - "--disable-stylo" - ;; Building with debugging symbols takes ~5GiB, so ;; disable it. "--disable-debug" "--disable-debug-symbols" + ;; Clang is needed to build Stylo, Mozilla's new + ;; CSS engine. We must specify the clang paths + ;; manually, because otherwise the Mozilla build + ;; system looks in the directories returned by + ;; llvm-config --bindir and llvm-config --libdir, + ;; which return paths in the llvm package where + ;; clang is not found. + ,(string-append "--with-clang-path=" + (assoc-ref %build-inputs "clang") + "/bin/clang") + ,(string-append "--with-libclang-path=" + (assoc-ref %build-inputs "clang") + "/lib") + ;; Hack to work around missing ;; "unofficial" branding in icecat. "--enable-official-branding" @@ -754,6 +788,20 @@ security standards.") (generate-checksums dir null-file))) (find-files "third_party/rust" ".cargo-checksum.json"))) #t)) + (add-before 'configure 'augment-CPLUS_INCLUDE_PATH + (lambda* (#:key build inputs #:allow-other-keys) + ;; Here, we add additional entries to CPLUS_INCLUDE_PATH, to work + ;; around a problem that otherwise occurs when attempting to + ;; build Stylo, which requires Rust and Clang. Without these + ;; additional entries, errors occur during the build indicating + ;; that the <cstddef> and "c++config.h" headers cannot be found. + ;; Note that the 'build' keyword argument contains the GNU + ;; triplet, e.g. "x86_64-unknown-linux-gnu". + (let ((gcc (assoc-ref inputs "gcc"))) + (setenv "CPLUS_INCLUDE_PATH" + (string-append gcc "/include/c++" ":" + gcc "/include/c++/" build ":" + (getenv "CPLUS_INCLUDE_PATH")))))) (replace 'configure ;; configure does not work followed by both "SHELL=..." and @@ -770,6 +818,7 @@ security standards.") (setenv "SHELL" bash) (setenv "CONFIG_SHELL" bash) (setenv "AUTOCONF" (which "autoconf")) ; must be autoconf-2.13 + (setenv "CC" "gcc") ; apparently needed when Stylo is enabled (mkdir "../build") (chdir "../build") (format #t "build directory: ~s~%" (getcwd)) @@ -854,3 +903,8 @@ features built-in privacy-protecting features.") `((ftp-directory . "/gnu/gnuzilla") (cpe-name . "firefox_esr") (cpe-version . ,(first (string-split version #\-))))))) + +(define-public conkeror + ;; The Conkeror web browser relied on XULRunner, which IceCat > 50 no longer + ;; provides. See <http://conkeror.org> for the original web page. + (deprecated-package "conkeror" icecat)) diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm index 6c970700a5..a571477ef2 100644 --- a/gnu/packages/golang.scm +++ b/gnu/packages/golang.scm @@ -406,7 +406,7 @@ in the style of communicating sequential processes (@dfn{CSP}).") (package (inherit go-1.9) (name "go") - (version "1.11.1") + (version "1.11.4") (source (origin (method url-fetch) @@ -414,7 +414,7 @@ in the style of communicating sequential processes (@dfn{CSP}).") name version ".src.tar.gz")) (sha256 (base32 - "05qivf2f59pv4bfrmdr4m0xvswkmvvl9c5a2h5dy45g2k8b8r3sm")))) + "05fvp8dq0yffsrvdyii4wgl756dn0xkgm5a80al7j7kb19r45zac")))) (arguments (substitute-keyword-arguments (package-arguments go-1.9) ((#:phases phases) diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm index c271c4b6a0..07b568ee7c 100644 --- a/gnu/packages/guile.scm +++ b/gnu/packages/guile.scm @@ -45,6 +45,7 @@ #:use-module (gnu packages compression) #:use-module (gnu packages gawk) #:use-module (gnu packages gperf) + #:use-module (gnu packages hurd) #:use-module (gnu packages libffi) #:use-module (gnu packages autotools) #:use-module (gnu packages flex) @@ -288,7 +289,19 @@ without requiring the source code to be rewritten.") (substitute* "module/Makefile.in" (("language/elisp/boot\\.el") "\n")) - #t))))) + #t)) + ,@(if (hurd-target?) + `((add-after 'unpack 'allow-madvise-ENOSYS + (lambda _ + ;; Do not warn about ENOSYS on 'madvise'. This is + ;; what Guile commit + ;; 45e4ace6603e00b297e6542362273041aebe7305 does. + ;; TODO: Remove for Guile >= 2.2.5. + (substitute* "libguile/vm.c" + (("perror \\(\"madvise failed\"\\)") + "if (errno != ENOSYS) perror (\"madvised failed\");")) + #t))) + '())))) (package-arguments guile-2.0))))) (define-public guile-2.2/fixed @@ -2316,4 +2329,33 @@ Scheme by using Guile’s foreign function interface.") (home-page "https://gitlab.com/mothacehe/guile-newt") (license license:gpl3+)))) +(define-public guile-mastodon + (package + (name "guile-mastodon") + (version "0.0.1") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://framagit.org/prouby/guile-mastodon.git") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1vblf3d1bbwna3l09p2ap5y8ycvl549bz6whgk78imyfmn28ygry")))) + (build-system gnu-build-system) + (native-inputs + `(("autoconf" ,autoconf) + ("automake" ,automake) + ("pkg-config" ,pkg-config))) + (inputs + `(("guile" ,guile-2.2) + ("gnutls" ,gnutls) + ("guile-json" ,guile-json))) + (home-page "https://framagit.org/prouby/guile-mastodon") + (synopsis "Guile Mastodon REST API module") + (description "This package provides Guile modules to access the +@uref{https://docs.joinmastodon.org/api/, REST API of Mastodon}, a federated +microblogging service.") + (license license:gpl3+))) + ;;; guile.scm ends here diff --git a/gnu/packages/ham-radio.scm b/gnu/packages/ham-radio.scm index 0f96553c65..b73671c8bc 100644 --- a/gnu/packages/ham-radio.scm +++ b/gnu/packages/ham-radio.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net> +;;; Copyright © 2017, 2018 Arun Isaac <arunisaac@systemreboot.net> ;;; ;;; This file is part of GNU Guix. ;;; @@ -20,9 +20,13 @@ #:use-module ((guix licenses) #:prefix license:) #:use-module (guix packages) #:use-module (guix download) + #:use-module (gnu packages gtk) #:use-module (gnu packages libusb) #:use-module (gnu packages pkg-config) - #:use-module (guix build-system cmake)) + #:use-module (gnu packages python) + #:use-module (gnu packages xml) + #:use-module (guix build-system cmake) + #:use-module (guix build-system python)) (define-public rtl-sdr (package @@ -50,3 +54,30 @@ cheap software defined radio, since the chip allows transferring the raw I/Q samples to the host. @code{rtl-sdr} provides drivers for this purpose.") (license license:gpl2+))) + +(define-public chirp + (package + (name "chirp") + (version "20181205") + (source + (origin + (method url-fetch) + (uri (string-append "https://trac.chirp.danplanet.com/chirp_daily/daily-" + version "/chirp-daily-" version ".tar.gz")) + (sha256 + (base32 + "1cp280b95j39xaxs50zn55jigg7pyfpm9n098hmsyxrplqn8z43c")))) + (build-system python-build-system) + (inputs + `(("python2-libxml2" ,python2-libxml2) + ("python2-pygtk" ,python2-pygtk) + ("python2-pyserial" ,python2-pyserial))) + (arguments + `(#:python ,python-2)) + (home-page "https://chirp.danplanet.com") + (synopsis "Cross-radio programming tool") + (description "Chirp is a cross-radio programming tool. It supports a +growing list of radios across several manufacturers and allows transferring of +memory contents between them.") + (license (list license:gpl3+ + license:lgpl3+)))) ; chirp/elib_intl.py diff --git a/gnu/packages/haskell.scm b/gnu/packages/haskell.scm index 57435dca07..8d0e2aef69 100644 --- a/gnu/packages/haskell.scm +++ b/gnu/packages/haskell.scm @@ -5069,10 +5069,11 @@ call stacks with different versions of the compiler.") ;; This is used as an input to ghc-hunit. We cannot use ghc-call-stack there, ;; because it depends on ghc-nanospec, which depends on ghc-hunit. (define-public ghc-call-stack-boot - (package - (inherit ghc-call-stack) - (arguments '(#:tests? #f)) - (inputs '()))) + (hidden-package + (package + (inherit ghc-call-stack) + (arguments '(#:tests? #f)) + (inputs '())))) (define-public ghc-statevar (package diff --git a/gnu/packages/ibus.scm b/gnu/packages/ibus.scm index a2687ac8c3..b994beb560 100644 --- a/gnu/packages/ibus.scm +++ b/gnu/packages/ibus.scm @@ -2,7 +2,7 @@ ;;; Copyright © 2015, 2016, 2017, 2018 Ricardo Wurmus <rekado@elephly.net> ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr> ;;; Copyright © 2016 Chris Marusich <cmmarusich@gmail.com> -;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il> +;;; Copyright © 2017, 2018 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2018 Meiyo Peng <meiyo.peng@gmail.com> ;;; @@ -34,6 +34,7 @@ #:use-module (gnu packages autotools) #:use-module (gnu packages base) #:use-module (gnu packages boost) + #:use-module (gnu packages check) #:use-module (gnu packages cmake) #:use-module (gnu packages databases) #:use-module (gnu packages datastructures) @@ -292,7 +293,7 @@ Japanese language input in most graphical applications.") (define-public librime (package (name "librime") - (version "1.3.1") + (version "1.3.2") (source (origin (method git-fetch) @@ -301,8 +302,25 @@ Japanese language input in most graphical applications.") (commit version))) (file-name (git-file-name name version)) (sha256 - (base32 "1y0h3nnz97smx9z8h5fzk4c27mvrwv8kajxffqc43bhyvxvb2jd6")))) + (base32 + "06q10cv7a3i6d8l3sq79nasw3p1njvmjgh4jq2hqw9abcx351m1r")) + (modules '((guix build utils))) + (snippet + '(begin + (delete-file-recursively "thirdparty/src") + (delete-file-recursively "thirdparty/bin") + (delete-file-recursively "thirdparty/include/X11") + #t)))) (build-system cmake-build-system) + (arguments + '(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'patch-source + (lambda _ + (substitute* "CMakeLists.txt" + (("include_directories\\($\\{PROJECT_SOURCE_DIR\\}/thirdparty/include\\)") "") + (("link_directories\\($\\{PROJECT_SOURCE_DIR\\}/thirdparty/lib\\)") "")) + #t))))) (inputs `(("boost" ,boost) ("glog" ,glog) @@ -310,6 +328,9 @@ Japanese language input in most graphical applications.") ("marisa" ,marisa) ("opencc" ,opencc) ("yaml-cpp" ,yaml-cpp))) + (native-inputs + `(("googletest" ,googletest) + ("xorgproto" ,xorgproto))) ; keysym.h (home-page "https://rime.im/") (synopsis "The core library of Rime Input Method Engine") (description "@dfn{librime} is the core library of Rime Input Method diff --git a/gnu/packages/image-processing.scm b/gnu/packages/image-processing.scm index 0901dc429f..846d498cec 100644 --- a/gnu/packages/image-processing.scm +++ b/gnu/packages/image-processing.scm @@ -35,13 +35,18 @@ #:use-module (gnu packages compression) #:use-module (gnu packages documentation) #:use-module (gnu packages fontutils) + #:use-module (gnu packages ghostscript) #:use-module (gnu packages gl) + #:use-module (gnu packages glib) #:use-module (gnu packages gnome) #:use-module (gnu packages graphics) #:use-module (gnu packages graphviz) + #:use-module (gnu packages gstreamer) #:use-module (gnu packages gtk) #:use-module (gnu packages image) + #:use-module (gnu packages imagemagick) #:use-module (gnu packages maths) + #:use-module (gnu packages pdf) #:use-module (gnu packages perl) #:use-module (gnu packages photo) #:use-module (gnu packages pkg-config) @@ -396,3 +401,46 @@ vision algorithms. It can be used to do things like: @end itemize\n") (home-page "https://opencv.org/") (license license:bsd-3))) + +(define-public vips + (package + (name "vips") + (version "8.7.1") + (source (origin + (method url-fetch) + (uri (string-append + "https://github.com/libvips/libvips/releases/download/v" + version "/vips-" version ".tar.gz")) + (sha256 + (base32 "1w3b90pdw7nj2p0gb4f96h6zhmga513f968ldfhz1rkhg7y81c0s")))) + (build-system gnu-build-system) + (native-inputs + `(("pkg-config" ,pkg-config) + ("gobject-introspection" ,gobject-introspection))) + (inputs + `(("glib" ,glib) + ("libjpeg" ,libjpeg) + ("libpng" ,libpng) + ("librsvg" ,librsvg) + ("libtiff" ,libtiff) + ("libexif" ,libexif) + ("giflib" ,giflib) + ("libgsf" ,libgsf) + ("fftw" ,fftw) + ("poppler" ,poppler) + ("pango" ,pango) + ("lcms" ,lcms) + ("matio" ,matio) + ("libwebp" ,libwebp) + ("niftilib" ,niftilib) + ("openexr" ,openexr) + ("orc" ,orc) + ("imagemagick" ,imagemagick) + ("libxml2" ,libxml2) + ("expat" ,expat) + ("hdf5" ,hdf5))) + (home-page "https://libvips.github.io/libvips/") + (synopsis "Image processing system") + (description + "vips is a demand-driven, horizontally threaded image processing library.") + (license license:lgpl2.1+))) diff --git a/gnu/packages/image-viewers.scm b/gnu/packages/image-viewers.scm index 8e70f1fdfc..877c4a7866 100644 --- a/gnu/packages/image-viewers.scm +++ b/gnu/packages/image-viewers.scm @@ -61,7 +61,7 @@ (define-public feh (package (name "feh") - (version "3.1") + (version "3.1.1") (home-page "https://feh.finalrewind.org/") (source (origin (method url-fetch) @@ -69,7 +69,7 @@ name "-" version ".tar.bz2")) (sha256 (base32 - "01rrl009m1kxwvqqr98y4wk8m1al18fkxwv8cds2k7n4qiv6xdb7")))) + "1sy8z6rv5sy1bhk3846hgfdy96wdi874yr2fnxfprks46qp29l31")))) (build-system gnu-build-system) (arguments '(#:phases (modify-phases %standard-phases (delete 'configure)) @@ -238,12 +238,14 @@ it and customize it for your needs.") (version "1.7") (source (origin - (method url-fetch) - (uri (string-append "https://github.com/hellosiyan/Viewnior/archive/" - name "-" version ".tar.gz")) + (method git-fetch) + (uri (git-reference + (url "https://github.com/hellosiyan/Viewnior.git") + (commit (string-append name "-" version)))) + (file-name (git-file-name name version)) (sha256 (base32 - "1rpkk721s3xas125q3g0fl11b5zsrmzv9pzl6ddzcy4sj2rd7ymr")))) + "0y4hk3vq8psba5k615w18qj0kbdfp5w0lm98nv5apy6hmcpwfyig")))) (build-system meson-build-system) (arguments '(#:phases diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm index 207faede91..e4bcd6a274 100644 --- a/gnu/packages/image.scm +++ b/gnu/packages/image.scm @@ -22,6 +22,7 @@ ;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.com> ;;; Copyright © 2018 Pierre-Antoine Rouby <contact@parouby.fr> ;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com> +;;; Copyright © 2018 Rutger Helling <rhelling@mykolab.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -49,6 +50,7 @@ #:use-module (gnu packages compression) #:use-module (gnu packages documentation) #:use-module (gnu packages fontutils) + #:use-module (gnu packages freedesktop) ;; To provide gcc@5 and gcc@6, to work around <http://bugs.gnu.org/24703>. #:use-module (gnu packages gcc) #:use-module (gnu packages gettext) @@ -58,6 +60,7 @@ #:use-module (gnu packages graphics) #:use-module (gnu packages gtk) #:use-module (gnu packages lua) + #:use-module (gnu packages man) #:use-module (gnu packages maths) #:use-module (gnu packages mcrypt) #:use-module (gnu packages perl) @@ -73,6 +76,7 @@ #:use-module (guix git-download) #:use-module (guix build-system gnu) #:use-module (guix build-system cmake) + #:use-module (guix build-system meson) #:use-module (guix build-system python) #:use-module (guix build-system r) #:use-module (guix build-system scons) @@ -1570,3 +1574,28 @@ identical visual appearance.") (description "Jp2a is a small utility that converts JPEG images to ASCII.") (license license:gpl2))) + +(define-public grim + (package + (name "grim") + (version "1.0") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/emersion/grim/archive/v" version + ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 "0xkk5nqyp1px0sxz4asmchznc0q39wdx1b67ql741k8aj815km0f")))) + (build-system meson-build-system) + (native-inputs `(("pkg-config" ,pkg-config))) + (inputs `(("cairo" ,cairo) + ("libjpeg-turbo" ,libjpeg-turbo) + ("scdoc" ,scdoc) + ("wayland" ,wayland) + ("wayland-protocols" ,wayland-protocols))) + (home-page "https://github.com/emersion/grim") + (synopsis "Create screenshots from a Wayland compositor") + (description "grim can create screenshots from a Wayland compositor.") + ;; MIT license. + (license license:expat))) diff --git a/gnu/packages/ipfs.scm b/gnu/packages/ipfs.scm index f40c1180ae..a67919691f 100644 --- a/gnu/packages/ipfs.scm +++ b/gnu/packages/ipfs.scm @@ -20,6 +20,7 @@ #:use-module ((guix licenses) #:prefix license:) #:use-module (guix packages) #:use-module (guix git-download) + #:use-module (guix download) #:use-module (guix build-system go) #:use-module (gnu packages golang)) @@ -210,3 +211,39 @@ powerful and simple.") (description "A subtool for the @command{gx} package manager for packages written in Go.") (license license:expat))) + +(define-public go-ipfs + (package + (name "go-ipfs") + (version "0.4.18") + (source + (origin + (method url-fetch/tarbomb) + (uri (string-append + "https://dist.ipfs.io/go-ipfs/v" version + "/go-ipfs-source.tar.gz")) + (sha256 + (base32 + "19hfgbyn5sr1bw0cwm3gsjz0w3b3vh3mmkax1906raah30lavj1x")) + (file-name (string-append name "-" version "-source")))) + (build-system go-build-system) + (arguments + '(#:unpack-path "github.com/ipfs/go-ipfs" + #:import-path "github.com/ipfs/go-ipfs/cmd/ipfs" + #:phases (modify-phases %standard-phases + (add-before 'reset-gzip-timestamps 'make-files-writable + (lambda* (#:key outputs #:allow-other-keys) + ;; Make sure .gz files are writable so that the + ;; 'reset-gzip-timestamps' phase can do its work. + (let ((out (assoc-ref outputs "out"))) + (for-each make-file-writable + (find-files out "\\.gz$")) + #t)))))) + (home-page "https://ipfs.io") + (synopsis "Go implementation of IPFS, a peer-to-peer hypermedia protocol") + (description "IPFS is a global, versioned, peer-to-peer filesystem. It +combines good ideas from Git, BitTorrent, Kademlia, SFS, and the Web. It is +like a single bittorrent swarm, exchanging git objects. IPFS provides an +interface as simple as the HTTP web, but with permanence built in. You can +also mount the world at @code{/ipfs}.") + (license license:expat))) diff --git a/gnu/packages/irc.scm b/gnu/packages/irc.scm index 4f4e494ee5..ba31d36b9e 100644 --- a/gnu/packages/irc.scm +++ b/gnu/packages/irc.scm @@ -30,6 +30,7 @@ #:use-module (guix build-system gnu) #:use-module (guix build-system python) #:use-module (gnu packages) + #:use-module (gnu packages admin) #:use-module (gnu packages aspell) #:use-module (gnu packages autogen) #:use-module (gnu packages autotools) @@ -65,7 +66,7 @@ (define-public quassel (package (name "quassel") - (version "0.12.5") + (version "0.13.0") (source (origin (method url-fetch) @@ -73,7 +74,7 @@ version ".tar.bz2")) (sha256 (base32 - "1qkl3sb4ijx4k17m0c42j2p5bc4jymypwhmplm942rbrzm6mg50q")) + "0xp9mppxl63qzgsdyprmblvfrj0bb9z57kfc088gvcavvq1210nr")) (modules '((guix build utils))) ;; We don't want to install the bundled scripts. (snippet @@ -86,21 +87,31 @@ (arguments ;; The three binaries are not mutually exlusive, and are all built ;; by default. - '(#:configure-flags '(;;"-DWANT_QTCLIENT=OFF" ; 5.2 MiB - ;;"-DWANT_CORE=OFF" ; 2.4 MiB - ;;"-DWANT_MONO=OFF" ; 6.4 MiB - "-DUSE_QT5=ON" ; default is qt4 + '(#:configure-flags '(;;"-DWANT_QTCLIENT=OFF" ; 6.1 MiB + ;;"-DWANT_CORE=OFF" ; 3.0 MiB + ;;"-DWANT_MONO=OFF" ; 7.6 MiB "-DWITH_KDE=OFF" ; no to kde integration ... - "-DWITH_OXYGEN=ON" ; therefore we install bundled icons - "-DWITH_WEBKIT=OFF") ; we don't depend on qtwebkit + "-DWITH_BUNDLED_ICONS=ON" ; so we install bundled icons + "-DWITH_OXYGEN_ICONS=ON" ; also the oxygen ones + "-DWITH_WEBENGINE=OFF") ; we don't depend on qtwebengine + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'patch-inxi-reference + (lambda* (#:key inputs #:allow-other-keys) + (let ((inxi (string-append (assoc-ref inputs "inxi") "/bin/inxi"))) + (substitute* "src/common/aliasmanager.cpp" + ((" inxi ") (string-append " " inxi " "))) + #t)))) #:tests? #f)) ; no test target (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules) ("pkg-config" ,pkg-config) ("qttools" ,qttools))) (inputs - `(("qca" ,qca) + `(("inxi" ,inxi-minimal) + ("qca" ,qca) ("qtbase" ,qtbase) + ("qtmultimedia" ,qtmultimedia) ("qtscript" ,qtscript) ("snorenotify" ,snorenotify) ("zlib" ,zlib))) diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm index a09bcfabe5..c607cbbcc5 100644 --- a/gnu/packages/java.scm +++ b/gnu/packages/java.scm @@ -301,7 +301,7 @@ JNI.") `(("jikes" ,jikes) ("jamvm" ,jamvm-1-bootstrap) ("unzip" ,unzip) - ("zip", zip))) + ("zip" ,zip))) (home-page "http://ant.apache.org") (synopsis "Build tool for Java") (description @@ -1820,6 +1820,8 @@ new Date();")) (sha256 (base32 "0zywq2203b4hx4jms9vbwvjcj1d3k2v3qpx4s33729fkpmid97r4")) + (patches (search-patches + "openjdk-10-idlj-reproducibility.patch")) (modules '((guix build utils))) (snippet `(begin @@ -6138,6 +6140,11 @@ printed.") (modify-phases %standard-phases (add-after 'install 'strip-jar-timestamps (assoc-ref ant:%standard-phases 'strip-jar-timestamps)) + (add-before 'configure 'fix-timestamp + (lambda _ + (substitute* "configure" + (("^TIMESTAMP.*") "TIMESTAMP=19700101\n")) + #t)) (add-after 'configure 'fix-bin-ls (lambda _ (substitute* (find-files "." "Makefile") diff --git a/gnu/packages/javascript.scm b/gnu/packages/javascript.scm index 8731a44927..c778683e26 100644 --- a/gnu/packages/javascript.scm +++ b/gnu/packages/javascript.scm @@ -449,3 +449,40 @@ to use, and is very similar to Lua. There is no need to interact with byzantine C++ template mechanisms, or worry about marking and unmarking garbage collection roots, or wrestle with obscure build systems.") (license license:isc))) + +(define-public duktape + (package + (name "duktape") + (version "1.3.1") + (source + (origin + (method url-fetch) + ;; Use the GitHub source for ease of updating. + (uri (string-append "https://github.com/svaarala/duktape/releases/download/v" + version "/duktape-" version ".tar.xz")) + (sha256 + (base32 + "0rd9wz5716qhzqwwj26i2x5m8dd020rvaf2i08sa4jxrl6nk3cil")))) + (build-system gnu-build-system) + (arguments + `(#:tests? #f ; Tests require many dependencies including v8. + #:phases + (modify-phases %standard-phases + (delete 'configure) + (delete 'build) + ;; Installing is simply copying source code files so they can be + ;; embedded elsewhere. + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (src (string-append out "/src"))) + (install-file "src/duktape.c" src) + (install-file "src/duktape.h" src))))))) + (synopsis "Embeddable JavaScript engine") + (description + "Duktape is an embeddable Javascript engine, with a focus on portability +and compact footprint. Duktape is easy to integrate into a C/C++ project: add +@code{duktape.c}, @code{duktape.h}, and @code{duk_config.h} to your build, and +use the Duktape API to call Ecmascript functions from C code and vice versa.") + (home-page "http://duktape.org") + (license license:expat))) diff --git a/gnu/packages/kde-frameworks.scm b/gnu/packages/kde-frameworks.scm index 5295a356a2..988bf44c3d 100644 --- a/gnu/packages/kde-frameworks.scm +++ b/gnu/packages/kde-frameworks.scm @@ -207,33 +207,6 @@ Phonon-GStreamer is a backend based on the GStreamer multimedia library.") ;; license: source files mention "either version 2.1 or 3" (license (list license:lgpl2.1 license:lgpl3)))) -(define-public gpgmepp - (package - (name "gpgmepp") - (version "16.08.2") - (source (origin - (method url-fetch) - (uri (string-append - "mirror://kde/stable/applications" - "/" version "/src/" - name "-" version ".tar.xz")) - (sha256 - (base32 - "0828qlhdi1i26n2xgyb01c0q77m6jlppbxv6mprryxq0ma88940a")))) - (build-system cmake-build-system) - (native-inputs - `(("extra-cmake-modules" ,extra-cmake-modules))) - (propagated-inputs - `(("boost" ,boost) - ("gpgme" ,gpgme))) - (inputs - `(("qtbase" ,qtbase))) - (home-page "https://community.kde.org/Frameworks") - (synopsis "C++ bindings/wrapper for gpgme") - (description "C++ bindings/wrapper for gpgme.") - (license license:lgpl2.1+) - (properties `((superseded . ,gpgme))))) - (define-public kpmcore (package (name "kpmcore") @@ -2003,7 +1976,8 @@ gallons).") ;; This test fails on i686 and aarch64 (lambda _ (substitute* "autotests/unit/file/CMakeLists.txt" - (("metadatamovertest") "")) + (("^\\s*ecm_add_test\\(.* TEST_NAME metadatamovertest .*" line) + (string-append "# " line))) #t)) (replace 'check (lambda _ @@ -3274,6 +3248,7 @@ setUrl, setUserAgent and call.") ("phonon" ,phonon) ("qtbase" ,qtbase) ("qtdeclarative" ,qtdeclarative) + ("qtquickcontrols2" ,qtquickcontrols2) ("qtsvg" ,qtsvg) ("qtx11extras" ,qtx11extras) ("solid" ,solid))) @@ -3381,7 +3356,7 @@ workspace.") (define-public kdelibs4support (package (name "kdelibs4support") - (version "5.42.0") + (version "5.49.0") (source (origin (method url-fetch) @@ -3390,7 +3365,7 @@ workspace.") (version-major+minor version) "/portingAids/" name "-" version ".tar.xz")) (sha256 - (base32 "0aiig8akn6bdxrqdl96xjjy2pxw8hhfrsalbkkzyhh06j794snfb")))) + (base32 "1cz70c77l66lbw4fbgmfbq1fldybqxsiay2pg9risgqp3ra8wahi")))) (build-system cmake-build-system) (native-inputs `(("dbus" ,dbus) @@ -3495,7 +3470,7 @@ http://community.kde.org/Frameworks/Porting_Notes should help with this.") (define-public khtml (package (name "khtml") - (version "5.42.0") + (version "5.49.0") (source (origin (method url-fetch) @@ -3504,7 +3479,7 @@ http://community.kde.org/Frameworks/Porting_Notes should help with this.") (version-major+minor version) "/portingAids/" name "-" version ".tar.xz")) (sha256 - (base32 "1bfslndxvad0zgzr22w2mz1xwavix9bh5qrrv8dpshlh043bwr3l")))) + (base32 "0k9m2pgq64grmgc6ywpzfnn65h8wfkkiwjbmz2mwbf2yi9c1ky64")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules) @@ -3554,7 +3529,7 @@ technology and using KJS for JavaScript support.") (define-public kjs (package (name "kjs") - (version "5.42.0") + (version "5.49.0") (source (origin (method url-fetch) @@ -3563,7 +3538,7 @@ technology and using KJS for JavaScript support.") (version-major+minor version) "/portingAids/" name "-" version ".tar.xz")) (sha256 - (base32 "1m26sb2qyrcgmpkw76k2yv5my2pkhld96vw6aaqm77q90faw734g")))) + (base32 "057ikyi4wffjvxdyk08hmj7h8vmbwbcxv98apmjzgsd611zvx5p0")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules) @@ -3587,7 +3562,7 @@ support.") (define-public kjsembed (package (name "kjsembed") - (version "5.42.0") + (version "5.49.0") (source (origin (method url-fetch) @@ -3596,7 +3571,7 @@ support.") (version-major+minor version) "/portingAids/" name "-" version ".tar.xz")) (sha256 - (base32 "10w4w4ncwr245bv1ii4sh154w91ghfz0l60k89j50lsydpcqcp3a")))) + (base32 "0qddjkfm6f0f5dynqvi3l23mgyfdbk4xzg967sj3a2qlq423ah0m")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules) @@ -3616,7 +3591,7 @@ QObjects, so you can script your applications.") (define-public kmediaplayer (package (name "kmediaplayer") - (version "5.42.0") + (version "5.49.0") (source (origin (method url-fetch) @@ -3625,7 +3600,7 @@ QObjects, so you can script your applications.") (version-major+minor version) "/portingAids/" name "-" version ".tar.xz")) (sha256 - (base32 "1k1pjc0cz36gs0pl2pxw8f9f82xkbqyy320nfyhan5waxbl1qd5n")))) + (base32 "0hbx48ivj4i96yagd9n9vd22ycsljrvijm6nfms4x7z7jr49flrx")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules) @@ -3662,7 +3637,7 @@ KParts instead.") (define-public kross (package (name "kross") - (version "5.42.0") + (version "5.49.0") (source (origin (method url-fetch) @@ -3671,7 +3646,7 @@ KParts instead.") (version-major+minor version) "/portingAids/" name "-" version ".tar.xz")) (sha256 - (base32 "1aqqwby6jslimpvx42d4n6gjsjc8l82gmsq5ajpv9zkkk91dqfqi")))) + (base32 "194zcf499fkwk3wcs3kc3l0fi9h8gn5yqh6gxrgiyn6iyy9a4qdz")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules) diff --git a/gnu/packages/kde.scm b/gnu/packages/kde.scm index d2ae91b179..24144797b8 100644 --- a/gnu/packages/kde.scm +++ b/gnu/packages/kde.scm @@ -90,12 +90,12 @@ ("knotifyconfig" ,knotifyconfig) ("kfilemetadata" ,kfilemetadata) ("kdoctools" ,kdoctools) - ("kdeclarative", kdeclarative) - ("qtdeclarative", qtdeclarative) - ("qtquickcontrols", qtquickcontrols) - ("kiconthemes", kiconthemes) + ("kdeclarative" ,kdeclarative) + ("qtdeclarative" ,qtdeclarative) + ("qtquickcontrols" ,qtquickcontrols) + ("kiconthemes" ,kiconthemes) ("qtgraphicaleffects" ,qtgraphicaleffects) - ("kplotting", kplotting))) + ("kplotting" ,kplotting))) (arguments `(#:phases (modify-phases %standard-phases @@ -112,7 +112,7 @@ ,(map (lambda (label) (string-append (assoc-ref inputs label) "/lib/qt5/plugins/")) - '("qtbase", "qtsvg"))) + '("qtbase" "qtsvg"))) `("FREI0R_PATH" ":" = (,(string-append frei0r "/lib/frei0r-1/"))) `("QT_QPA_PLATFORM_PLUGIN_PATH" ":" = diff --git a/gnu/packages/kodi.scm b/gnu/packages/kodi.scm index 822fceb46a..a910d2da49 100644 --- a/gnu/packages/kodi.scm +++ b/gnu/packages/kodi.scm @@ -268,7 +268,7 @@ alternatives. In compilers, this can reduce the cascade of secondary errors.") (define-public kodi (package (name "kodi") - (version "18.0rc1") + (version "18.0rc3") (source (origin (method git-fetch) (uri (git-reference @@ -277,7 +277,7 @@ alternatives. In compilers, this can reduce the cascade of secondary errors.") (file-name (git-file-name name version)) (sha256 (base32 - "0xzzp4x8l0ywx8aq93a1323il6wwslmgdbhasv0r8zp3w1c0wqf1")) + "0bwi4gwmwppjw6bf0zihyg42zwnd0imq0aw4xxsgnacqakhxzii0")) (snippet '(begin (use-modules (guix build utils)) diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm index 9d61734f34..bcaeef96e3 100644 --- a/gnu/packages/linux.scm +++ b/gnu/packages/linux.scm @@ -400,8 +400,8 @@ It has been modified to remove all non-free binary blobs.") ;; supports qemu "virt" machine and possibly a large number of ARM boards. ;; See : https://wiki.debian.org/DebianKernel/ARMMP. -(define %linux-libre-version "4.19.6") -(define %linux-libre-hash "1ybi878li06algbv2pdwn81jlh038pfvzz3axn1bzic9p4c9rjhf") +(define %linux-libre-version "4.19.13") +(define %linux-libre-hash "0ac0ywy542fiwdiab2z12rbjn9zw8vjbzkbpmpk9nfic2mcyrg8r") (define %linux-libre-4.19-patches (list %boot-logo-patch @@ -423,8 +423,8 @@ It has been modified to remove all non-free binary blobs.") #:patches %linux-libre-4.19-patches #:configuration-file kernel-config)) -(define %linux-libre-4.14-version "4.14.85") -(define %linux-libre-4.14-hash "1jh11y6jakkp3xlq9jbf2myfjzbccjx1iyhd6ny7r9cjkv6r5i5i") +(define %linux-libre-4.14-version "4.14.91") +(define %linux-libre-4.14-hash "1xr4q6hqjg4fjcd1w8qi2x9a11ms9wvascy9b1p6czblg9j9dd6a") (define-public linux-libre-4.14 (make-linux-libre %linux-libre-4.14-version @@ -433,14 +433,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.142" - "0a7c41m41p83byn68cfixq460sy73ahwcx9y3xm6cv05grqza8zh" + (make-linux-libre "4.9.148" + "0yrjgvdzbcp750j4fhlxi4ia1v0fqh0y3p99wnbpfvg17j01lbjl" %intel-compatible-systems #:configuration-file kernel-config)) (define-public linux-libre-4.4 - (make-linux-libre "4.4.166" - "1pb6hk141hzf6yf2423h0jfv9bjq09cynsp1xbm12mxayn637xmm" + (make-linux-libre "4.4.169" + "1snjdih9iv3fg7f9h2r1gldcqmvzj1w398aysws4fialj488x1p4" %intel-compatible-systems #:configuration-file kernel-config)) @@ -937,7 +937,7 @@ Zerofree requires the file system to be unmounted or mounted read-only.") (define-public strace (package (name "strace") - (version "4.25") + (version "4.26") (home-page "https://strace.io") (source (origin (method url-fetch) @@ -945,7 +945,7 @@ Zerofree requires the file system to be unmounted or mounted read-only.") "/strace-" version ".tar.xz")) (sha256 (base32 - "00f7zagfh3np5gwi0z7hi7zjd7s5nixcaq7z78n87dvhakkgi1fn")))) + "070yz8xii8gnb4psiz628zwm5srh266sfb06f7f1qzagxzz2ykbw")))) (build-system gnu-build-system) (arguments '(#:phases @@ -964,7 +964,7 @@ Zerofree requires the file system to be unmounted or mounted read-only.") (description "strace is a system call tracer, i.e. a debugging tool which prints out a trace of all the system calls made by a another process/program.") - (license license:bsd-3))) + (license license:lgpl2.1+))) (define-public ltrace (package @@ -2612,7 +2612,7 @@ thanks to the use of namespaces.") (define-public singularity (package (name "singularity") - (version "2.5.1") + (version "2.6.1") (source (origin (method url-fetch) (uri (string-append "https://github.com/singularityware/singularity/" @@ -2620,7 +2620,7 @@ thanks to the use of namespaces.") "/singularity-" version ".tar.gz")) (sha256 (base32 - "0f28dgf2qcy8ljjfix7p9q36q12j7rxyicfzzi4n0fl8zr8ab88g")))) + "1whx0hqqi1326scgdxxxa1d94vn95mnq0drid6s8wdp84ni4d3gk")))) (build-system gnu-build-system) (arguments `(#:configure-flags @@ -4049,7 +4049,7 @@ under OpenGL graphics workloads.") (define-public efivar (package (name "efivar") - (version "35") + (version "37") (source (origin (method url-fetch) (uri (string-append "https://github.com/rhboot/" name @@ -4057,7 +4057,7 @@ under OpenGL graphics workloads.") "-" version ".tar.bz2")) (sha256 (base32 - "153k2ifyl4giz5fkryxhz8z621diqjy7v25hfga4z94rs32ks0qy")))) + "17vvfivhsrszh7q39b6npjsrhrhsjf1cmmcpp3xrh6wh7ywzwrrw")))) (build-system gnu-build-system) (arguments `(;; Tests require a UEFI system and is not detected in the chroot. @@ -4973,3 +4973,29 @@ infrastructure for in-kernel netfilter subsystems (such as nfnetlink_log, nfnetlink_queue, nfnetlink_conntrack) and their respective users and/or management tools in userspace.") (license license:gpl2))) + +(define-public xfsprogs + (package + (name "xfsprogs") + (version "4.19.0") + (source (origin + (method url-fetch) + (uri (string-append + "mirror://kernel.org/linux/utils/fs/xfs/xfsprogs/" + "xfsprogs-" version ".tar.gz")) + (sha256 + (base32 + "0gs39yiyamjw516jbak3nj4dy4h2a2g48c1mmv4wbppsccvwmwh5")))) + (build-system gnu-build-system) + (arguments + `(#:tests? #f)) ; Kernel/user integration tests are in package "xfstests" + (native-inputs + `(("gettext" ,gettext-minimal) + ("util-linux" ,util-linux))) + (home-page "https://xfs.wiki.kernel.org/") + (synopsis "XFS file system tools") + (description "This package provides commands to create and check XFS +file systems.") + ;; The library "libhandle" and the headers in "xfslibs-dev" are + ;; licensed under lgpl2.1. the other stuff is licensed under gpl2. + (license (list license:gpl2 license:lgpl2.1)))) diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm index 5e8b6fdd3d..261e720e2b 100644 --- a/gnu/packages/lisp.scm +++ b/gnu/packages/lisp.scm @@ -11,6 +11,7 @@ ;;; Copyright © 2018 Benjamin Slade <slade@jnanam.net> ;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com> ;;; Copyright © 2018 Pierre Neidhardt <mail@ambrevar.xyz> +;;; Copyright © 2018 Pierre Langlois <pierre.langlois@gmx.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -68,6 +69,7 @@ #:use-module (gnu packages databases) #:use-module (gnu packages gtk) #:use-module (gnu packages webkit) + #:use-module (gnu packages xdisorg) #:use-module (ice-9 match) #:use-module (srfi srfi-19)) @@ -83,8 +85,8 @@ ,lisp)))) (define-public gcl - (let ((commit "5956140b1083e2302a59d7ce2054b0b7c2cbb417") - (revision "1")) ;Guix package revision + (let ((commit "d3335e2b3deb63f930eb0328e9b05377744c9512") + (revision "2")) ;Guix package revision (package (name "gcl") (version (string-append "2.6.12-" revision "." @@ -97,7 +99,7 @@ (commit commit))) (file-name (string-append "gcl-" version "-checkout")) (sha256 - (base32 "0mwclf2879mh3d9xqkqhghf58lwy7srsnsq9x0f1cc6j302sy4hb")))) + (base32 "05v86lhvsby05nzvcd3c4k0wljvgdgd0i6arzd2fx1yd67dl6fgj")))) (build-system gnu-build-system) (arguments `(#:parallel-build? #f ; The build system seems not to be thread safe. @@ -167,8 +169,7 @@ `(("gmp" ,gmp) ("readline" ,readline))) (native-inputs - `(("gcc" ,gcc-4.9) - ("m4" ,m4) + `(("m4" ,m4) ("texinfo" ,texinfo))) (home-page "https://www.gnu.org/software/gcl/") (synopsis "A Common Lisp implementation") @@ -771,6 +772,42 @@ thin compatibility layer for gray streams.") (define-public ecl-trivial-gray-streams (sbcl-package->ecl-package sbcl-trivial-gray-streams)) +(define-public sbcl-fiasco + (let ((commit "d62f7558b21addc89f87e306f65d7f760632655f") + (revision "1")) + (package + (name "sbcl-fiasco") + (version (git-version "0.0.1" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/joaotavora/fiasco.git") + (commit commit))) + (file-name (git-file-name "fiasco" version)) + (sha256 + (base32 + "1zwxs3d6iswayavcmb49z2892xhym7n556d8dnmvalc32pm9bkjh")))) + (build-system asdf-build-system/sbcl) + (inputs + `(("alexandria" ,sbcl-alexandria) + ("trivial-gray-streams" ,sbcl-trivial-gray-streams))) + (synopsis "Simple and powerful test framework for Common Lisp") + (description "A Common Lisp test framework that treasures your failures, +logical continuation of Stefil. It focuses on interactive debugging.") + (home-page "https://github.com/joaotavora/fiasco") + ;; LICENCE specifies this is public-domain unless the legislation + ;; doesn't allow or recognize it. In that case it falls back to a + ;; permissive licence. + (license (list license:public-domain + (license:x11-style "file://LICENCE")))))) + +(define-public cl-fiasco + (sbcl-package->cl-source-package sbcl-fiasco)) + +(define-public ecl-fiasco + (sbcl-package->ecl-package sbcl-fiasco)) + (define-public sbcl-flexi-streams (package (name "sbcl-flexi-streams") @@ -928,25 +965,31 @@ from other CLXes around the net.") `(("sbcl-cl-ppcre" ,sbcl-cl-ppcre) ("sbcl-cl-unicode" ,sbcl-cl-unicode))))) -(define-public sbcl-stumpwm +(define-public stumpwm (package - (name "sbcl-stumpwm") - (version "18.05") + (name "stumpwm") + (version "18.11") (source (origin (method url-fetch) (uri (string-append "https://github.com/stumpwm/stumpwm/archive/" version ".tar.gz")) (sha256 - (base32 "1n2gaab3lwgf5r1hmwdcw13dkv9xdd7drn2shx28kfxvhdc9kbb9")) - (file-name (string-append "stumpwm-" version ".tar.gz")))) + (base32 "177gxfk4c127i9crghx6fmkipznhgylvzgnjb2pna38g21gg6s39")) + (file-name (string-append "stumpwm-" version ".tar.gz")) + (patches + ;; This patch is included in the post-18.11 git master tree + ;; and can be removed when we move to the next release. + (search-patches "stumpwm-fix-broken-read-one-line.patch")))) (build-system asdf-build-system/sbcl) + (native-inputs `(("fiasco" ,sbcl-fiasco))) (inputs `(("cl-ppcre" ,sbcl-cl-ppcre) ("clx" ,sbcl-clx) ("alexandria" ,sbcl-alexandria))) (outputs '("out" "lib")) (arguments - '(#:phases + '(#:asd-system-name "stumpwm" + #:phases (modify-phases %standard-phases (add-after 'create-symlinks 'build-program (lambda* (#:key outputs #:allow-other-keys) @@ -979,17 +1022,15 @@ for input. These design decisions reflect the growing popularity of productive, customizable lisp based systems.") (home-page "https://github.com/stumpwm/stumpwm") (license license:gpl2+) - (properties `((ecl-variant . ,(delay ecl-stumpwm)))))) + (properties `((cl-source-variant . ,(delay cl-stumpwm)))))) -(define-public cl-stumpwm - (sbcl-package->cl-source-package sbcl-stumpwm)) +(define-public sbcl-stumpwm + (deprecated-package "sbcl-stumpwm" stumpwm)) -(define-public ecl-stumpwm - (let ((base (sbcl-package->ecl-package sbcl-stumpwm))) - (package - (inherit base) - (outputs '("out")) - (arguments '())))) +(define-public cl-stumpwm + (package + (inherit (sbcl-package->cl-source-package stumpwm)) + (name "cl-stumpwm"))) ;; The slynk that users expect to install includes all of slynk's contrib ;; modules. Therefore, we build the base module and all contribs first; then @@ -1268,16 +1309,16 @@ multiple inspectors with independent history.") paths) #t))))))) -(define-public sbcl-stumpwm+slynk +(define-public stumpwm+slynk (package - (inherit sbcl-stumpwm) - (name "sbcl-stumpwm-with-slynk") + (inherit stumpwm) + (name "stumpwm-with-slynk") (outputs '("out")) (inputs - `(("stumpwm" ,sbcl-stumpwm "lib") + `(("stumpwm" ,stumpwm "lib") ("slynk" ,sbcl-slynk))) (arguments - (substitute-keyword-arguments (package-arguments sbcl-stumpwm) + (substitute-keyword-arguments (package-arguments stumpwm) ((#:phases phases) `(modify-phases ,phases (replace 'build-program @@ -1301,6 +1342,9 @@ multiple inspectors with independent history.") (delete 'cleanup) (delete 'create-symlinks))))))) +(define-public sbcl-stumpwm+slynk + (deprecated-package "sbcl-stumpwm-with-slynk" stumpwm+slynk)) + (define-public sbcl-parse-js (let ((commit "fbadc6029bec7039602abfc06c73bb52970998f6") (revision "1")) @@ -3741,3 +3785,45 @@ client and server.") (define-public ecl-s-xml-rpc (sbcl-package->ecl-package sbcl-s-xml-rpc)) + +(define-public sbcl-trivial-clipboard + (let ((commit "5af3415d1484e6d69a1b5c178f24680d9fd01796")) + (package + (name "sbcl-trivial-clipboard") + (version (git-version "0.0.0.0" "2" commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/snmsts/trivial-clipboard") + (commit commit))) + (file-name (git-file-name "trivial-clipboard" version)) + (sha256 + (base32 + "1gb515z5yq6h5548pb1fwhmb0hhq1ssyb78pvxh4alq799xipxs9")))) + (build-system asdf-build-system/sbcl) + (inputs + `(("xclip" ,xclip))) + (native-inputs + `(("fiveam" ,sbcl-fiveam))) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'fix-paths + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "src/text.lisp" + (("\\(executable-find \"xclip\"\\)") + (string-append "(executable-find \"" + (assoc-ref inputs "xclip") + "/bin/xclip\")")))))))) + (home-page "https://github.com/snmsts/trivial-clipboard") + (synopsis "Access system clipboard in Common Lisp") + (description + "@command{trivial-clipboard} gives access to the system clipboard.") + (license license:expat)))) + +(define-public cl-trivial-clipboard + (sbcl-package->cl-source-package sbcl-trivial-clipboard)) + +(define-public ecl-trivial-clipboard + (sbcl-package->ecl-package sbcl-trivial-clipboard)) diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm index 8a9d1d312b..6dab9c5195 100644 --- a/gnu/packages/llvm.scm +++ b/gnu/packages/llvm.scm @@ -95,6 +95,21 @@ languages is in development. The compiler infrastructure includes mirror sets of programming tools as well as libraries with equivalent functionality.") (license license:ncsa))) +;; TODO: Build Mesa with LLVM 7 in the next staging cycle. +;; TODO: Make LLVM 7 the default LLVM once Clang is also upgraded. +(define-public llvm-7.0.1 + (package (inherit llvm) + (name "llvm") + (version "7.0.1") + (source + (origin + (method url-fetch) + (uri (string-append "http://llvm.org/releases/" + version "/llvm-" version ".src.tar.xz")) + (sha256 + (base32 + "16s196wqzdw4pmri15hadzqgdi926zln3an2viwyq0kini6zr3d3")))))) + ;; FIXME: This package is here to prevent many rebuilds on x86_64 and i686 ;; from commit fc9dbf41311d99d0fd8befc789ea7c0e35911890. Update users of ;; this in the next rebuild cycle. diff --git a/gnu/packages/lxqt.scm b/gnu/packages/lxqt.scm index 4cb24ebf64..b3d32c284f 100644 --- a/gnu/packages/lxqt.scm +++ b/gnu/packages/lxqt.scm @@ -513,7 +513,7 @@ of other programs.") ("liblxqt" ,liblxqt) ("libqtxdg" ,libqtxdg) ("libstatgrab" ,libstatgrab) - ("libsysstat", libsysstat) + ("libsysstat" ,libsysstat) ("libxcomposite" ,libxcomposite) ("libxdamage" ,libxdamage) ("libxkbcommon" ,libxkbcommon) @@ -700,7 +700,7 @@ Qt with LXQt.") ("qtx11extras" ,qtx11extras))) (native-inputs `(("pkg-config" ,pkg-config) - ("qttools", qttools) + ("qttools" ,qttools) ("lxqt-build-tools" ,lxqt-build-tools))) (arguments '(#:tests? #f ; no tests diff --git a/gnu/packages/machine-learning.scm b/gnu/packages/machine-learning.scm index 3f525e39a5..084e62cca4 100644 --- a/gnu/packages/machine-learning.scm +++ b/gnu/packages/machine-learning.scm @@ -495,7 +495,7 @@ sample proximities between pairs of cases.") `(("python" ,python) ("numpy" ,python-numpy) ("r-minimal" ,r-minimal) - ("octave" ,octave) + ("octave" ,octave-cli) ("swig" ,swig) ("eigen" ,eigen) ("hdf5" ,hdf5) diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm index e88b315946..6d1006c606 100644 --- a/gnu/packages/mail.scm +++ b/gnu/packages/mail.scm @@ -23,7 +23,7 @@ ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be> ;;; Copyright © 2017 Kyle Meyer <kyle@kyleam.com> ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr> -;;; Copyright © 2017 Rene Saavedra <rennes@openmailbox.org> +;;; Copyright © 2017, 2018 Rene Saavedra <pacoon@protonmail.com> ;;; Copyright © 2018 Pierre Langlois <pierre.langlois@gmx.com> ;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com> ;;; Copyright © 2018 Gábor Boskovits <boskovits@gmail.com> @@ -47,12 +47,13 @@ #:use-module (gnu packages) #:use-module (gnu packages aspell) #:use-module (gnu packages autotools) - #:use-module (gnu packages base) #:use-module (gnu packages backup) + #:use-module (gnu packages base) #:use-module (gnu packages bash) #:use-module (gnu packages bison) #:use-module (gnu packages calendar) #:use-module (gnu packages check) + #:use-module (gnu packages compression) #:use-module (gnu packages crypto) #:use-module (gnu packages curl) #:use-module (gnu packages cyrus-sasl) @@ -60,11 +61,13 @@ #:use-module (gnu packages dejagnu) #:use-module (gnu packages django) #:use-module (gnu packages dns) + #:use-module (gnu packages docbook) #:use-module (gnu packages documentation) #:use-module (gnu packages emacs) #:use-module (gnu packages enchant) - #:use-module (gnu packages ghostscript) + #:use-module (gnu packages gdb) #:use-module (gnu packages gettext) + #:use-module (gnu packages ghostscript) #:use-module (gnu packages glib) #:use-module (gnu packages gnome) #:use-module (gnu packages gnupg) @@ -80,35 +83,31 @@ #:use-module (gnu packages linux) #:use-module (gnu packages lua) #:use-module (gnu packages m4) + #:use-module (gnu packages man) #:use-module (gnu packages ncurses) + #:use-module (gnu packages networking) #:use-module (gnu packages openldap) #:use-module (gnu packages onc-rpc) #:use-module (gnu packages pcre) #:use-module (gnu packages perl) + #:use-module (gnu packages pkg-config) #:use-module (gnu packages python) #:use-module (gnu packages python-web) #:use-module (gnu packages readline) - #:use-module (gnu packages search) - #:use-module (gnu packages texinfo) - #:use-module (gnu packages compression) - #:use-module (gnu packages glib) - #:use-module (gnu packages pkg-config) - #:use-module (gnu packages flex) - #:use-module (gnu packages gdb) - #:use-module (gnu packages man) #:use-module (gnu packages ruby) + #:use-module (gnu packages search) + #:use-module (gnu packages serialization) #:use-module (gnu packages samba) #:use-module (gnu packages screen) #:use-module (gnu packages tcl) + #:use-module (gnu packages texinfo) #:use-module (gnu packages time) #:use-module (gnu packages tls) - #:use-module (gnu packages networking) + #:use-module (gnu packages w3m) #:use-module (gnu packages web) #:use-module (gnu packages webkit) - #:use-module (gnu packages w3m) - #:use-module (gnu packages xml) #:use-module (gnu packages xorg) - #:use-module (gnu packages docbook) + #:use-module (gnu packages xml) #:use-module ((guix licenses) #:select (fdl1.1+ agpl3+ @@ -487,15 +486,16 @@ and corrections. It is based on a Bayesian filter.") (define-public offlineimap (package (name "offlineimap") - (version "7.2.1") + (version "7.2.2") (source (origin - (method url-fetch) - (uri (string-append "https://github.com/OfflineIMAP/offlineimap/" - "archive/v" version ".tar.gz")) - (file-name (string-append name "-" version ".tar.gz")) + (method git-fetch) + (uri (git-reference + (url "https://github.com/OfflineIMAP/offlineimap") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) (sha256 (base32 - "1022xf2w1xax4vx4kzhlfbhaf0b72wkpvrcscvs4q8qk2ja68h8x")))) + "11nj7y9fa7v6vcxk3wr8smfgm3mxxnmq3l8q69rrjxlfzcv7dl8m")))) (build-system python-build-system) (native-inputs `(("asciidoc" ,asciidoc))) @@ -528,7 +528,7 @@ and corrections. It is based on a Bayesian filter.") (wrap-program bin `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))) #t)))))) - (home-page "http://www.offlineimap.org") + (home-page "https://www.offlineimap.org") (synopsis "Sync emails between two repositories") (description "OfflineImap synchronizes emails between two repositories, so that you @@ -943,7 +943,7 @@ useful features.") (define-public libetpan (package (name "libetpan") - (version "1.9.1") + (version "1.9.2") (source (origin (method git-fetch) (uri (git-reference @@ -951,7 +951,7 @@ useful features.") (commit version))) (file-name (git-file-name name version)) (sha256 - (base32 "1628lb1qvxixl64ifvjjr839hmirpx532klhv2mr7m6gmn7nlci5")))) + (base32 "13jiy2ddxbp9f2mk1mip9sk8h97bva5m0pnq2mlvh5xhifs6gza4")))) (build-system gnu-build-system) (native-inputs `(("autoconf" ,autoconf-wrapper) ("automake" ,automake) @@ -1008,15 +1008,15 @@ compresses it.") (define-public claws-mail (package (name "claws-mail") - (version "3.17.1") + (version "3.17.3") (source (origin (method url-fetch) (uri (string-append - "https://www.claws-mail.org/releases/" name "-" version + "https://www.claws-mail.org/releases/claws-mail-" version ".tar.xz")) (sha256 (base32 - "1wknxbwyzm5xjh3cqmddcxmvp1rkp301qga5n5rgfi7vcd0myyvm")))) + "1wnj6c9cbmhphs2l6wfvndkk2g08rmxw0sl2c8k1k008dxd1ykjh")))) (build-system gnu-build-system) (native-inputs `(("pkg-config" ,pkg-config))) (inputs `(("bogofilter" ,bogofilter) @@ -1068,7 +1068,7 @@ which can add many functionalities to the base client.") (define-public msmtp (package (name "msmtp") - (version "1.8.0") + (version "1.8.1") (source (origin (method url-fetch) @@ -1076,7 +1076,7 @@ which can add many functionalities to the base client.") "/msmtp-" version ".tar.xz")) (sha256 (base32 - "1k9wwlapkxk9ql3xq05y6vwn6ziqk9b1v8lyhj1866qd02zhqwxx")))) + "1nm4vizrnrrnknc4mc8nr7grz9q76m1vraa0hsl5rfm34gnsg8ph")))) (build-system gnu-build-system) (inputs `(("libsecret" ,libsecret) @@ -1731,13 +1731,13 @@ maintained.") (define-public khard (package (name "khard") - (version "0.11.4") + (version "0.12.2") (source (origin (method url-fetch) (uri (pypi-uri name version)) (sha256 (base32 - "1shhlq6ljbd8095hd82v4mw56rjcfxf1ymmgknbgh8gix02nsxw1")))) + "01y52qmab4cw9wmx87aahnxbyaxrxw8j2wx06mpcqsfvgk8d54wi")))) (build-system python-build-system) (arguments `(#:phases @@ -1748,14 +1748,17 @@ maintained.") (doc (string-append out "/share/doc/khard"))) (copy-recursively "misc/khard" doc) #t)))) - ;; FIXME: check phase fails with - ;; "Config file /tmp/.config/khard/khard.conf not available" + ;; Tests are currently only runnable without preexisting data on + ;; the development branch: + ;; https://github.com/scheibler/khard/issues/176 #:tests? #f)) (propagated-inputs - `(("python-vobject" ,python-vobject) + `(("python-atomicwrites" ,python-atomicwrites) + ("python-configobj" ,python-configobj) ("python-pyyaml" ,python-pyyaml) - ("python-atomicwrites" ,python-atomicwrites) - ("python-configobj" ,python-configobj))) + ("python-ruamel.yaml" ,python-ruamel.yaml) + ("python-unidecode" ,python-unidecode) + ("python-vobject" ,python-vobject))) (synopsis "Console address book using CardDAV") (description "Khard is an address book for the console. It creates, reads, modifies and removes CardDAV address book entries at your local machine. For @@ -2424,15 +2427,15 @@ tools and applications: (define-public balsa (package (name "balsa") - (version "2.5.3") + (version "2.5.6") (source (origin (method url-fetch) - (uri (string-append "https://pawsa.fedorapeople.org/balsa/balsa-" - version ".tar.bz2")) + (uri (string-append "https://pawsa.fedorapeople.org/balsa/" + name "-" version ".tar.bz2")) (sha256 (base32 - "15jkwp3ylbwd8iha4dr37z1xb6mkk31ym90vv3h2a5xk2rmym5mq")))) + "17k6wcsl8gki7cskr3hhmfj6n54rha8ca3b6fzd8blsl5shsankx")))) (build-system gnu-build-system) (arguments `(#:configure-flags @@ -2595,14 +2598,14 @@ servers. The 4rev1 and 4 versions of IMAP are supported.") (define-public urlscan (package (name "urlscan") - (version "0.9.0") + (version "0.9.1") (source (origin (method url-fetch) (uri (pypi-uri "urlscan" version)) (sha256 (base32 - "133f28bisr4xj0nihpwpil8dyadss62mp8qgqdyzd676hg9xjfyc")))) + "0vpdyrx51sg9a8kswa7ibbcgcpvc7r03aq8x4n4c7v2xg0v3c7wb")))) (build-system python-build-system) (propagated-inputs `(("python-urwid" ,python-urwid))) diff --git a/gnu/packages/make-bootstrap.scm b/gnu/packages/make-bootstrap.scm index 65d632f64e..c6002eb63a 100644 --- a/gnu/packages/make-bootstrap.scm +++ b/gnu/packages/make-bootstrap.scm @@ -382,6 +382,8 @@ for `sh' in $PATH, and without nscd, and with static NSS modules." (parameterize ((%current-target-system #f)) (cross-libc target))) glibc))))) + (native-inputs '()) + (propagated-inputs '()) ;; Only one output. (outputs '("out"))))) diff --git a/gnu/packages/man.scm b/gnu/packages/man.scm index b640884933..8989dd230b 100644 --- a/gnu/packages/man.scm +++ b/gnu/packages/man.scm @@ -5,6 +5,7 @@ ;;; Copyright © 2015 Alex Kost <alezost@gmail.com> ;;; Copyright © 2015, 2016 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr> +;;; Copyright © 2018 Rutger Helling <rhelling@mykolab.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -228,6 +229,37 @@ automatically.") (base32 "1p5830h88cx0zn0snwaj0vpph81xicpsirfwlxmcgjrlmn0nm3sj")))))) +(define-public scdoc + (package + (name "scdoc") + (version "1.6.0") + (source + (origin + (method url-fetch) + (uri (string-append "https://git.sr.ht/%7Esircmpwn/scdoc/archive/" version + ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1ca3js4arkg28gg2iszxxyrq7kgsrz482d1szv5dfd471h3vr5m3")))) + (build-system gnu-build-system) + (arguments + `(#:make-flags '("CC=gcc") + #:phases + (modify-phases %standard-phases + (delete 'configure) + (add-before 'install 'hardcode-paths + (lambda* (#:key outputs #:allow-other-keys) + (substitute* "Makefile" + (("/usr/local") (assoc-ref outputs "out"))) + #t))))) + (home-page "https://git.sr.ht/~sircmpwn/scdoc") + (synopsis "Simple man page generator") + (description "scdoc is a simple man page generator written for POSIX systems +in C99.") + ;; MIT license, see /share/doc/scdoc-1.6.0/COPYING. + (license expat))) + (define-public txt2man (package (name "txt2man") diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm index f88cede68a..448d9e373b 100644 --- a/gnu/packages/maths.scm +++ b/gnu/packages/maths.scm @@ -29,6 +29,7 @@ ;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.com> ;;; Copyright © 2018 Eric Brown <brown@fastmail.com> ;;; Copyright © 2018 Julien Lepiller <julien@lepiller.eu> +;;; Copyright © 2018 Amin Bandali <bandali@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -53,7 +54,7 @@ #:use-module (guix download) #:use-module (guix git-download) #:use-module (guix utils) - #:use-module (guix build utils) + #:use-module ((guix build utils) #:select (alist-replace)) #:use-module (guix build-system cmake) #:use-module (guix build-system gnu) #:use-module (guix build-system ocaml) @@ -63,6 +64,7 @@ #:use-module (gnu packages algebra) #:use-module (gnu packages audio) #:use-module (gnu packages autotools) + #:use-module (gnu packages base) #:use-module (gnu packages bison) #:use-module (gnu packages boost) #:use-module (gnu packages check) @@ -1413,9 +1415,9 @@ can solve two kinds of problems: ;; For a fully featured Octave, users are strongly recommended also to install ;; the following packages: less, ghostscript, gnuplot. -(define-public octave +(define-public octave-cli (package - (name "octave") + (name "octave-cli") (version "4.4.1") (source (origin @@ -1497,21 +1499,21 @@ Work may be performed both at the interactive command-line as well as via script files.") (license license:gpl3+))) -(define-public qtoctave - (package (inherit octave) - (name "qtoctave") +(define-public octave + (package (inherit octave-cli) + (name "octave") (source (origin - (inherit (package-source octave)))) + (inherit (package-source octave-cli)))) (inputs `(("qscintilla" ,qscintilla) ("qt" ,qtbase) - ,@(package-inputs octave))) + ,@(package-inputs octave-cli))) (native-inputs `(("qttools" , qttools) ;for lrelease ("texlive" ,texlive) ;for texi2dvi - ,@(package-native-inputs octave))) + ,@(package-native-inputs octave-cli))) (arguments - (substitute-keyword-arguments (package-arguments octave) + (substitute-keyword-arguments (package-arguments octave-cli) ((#:phases phases) `(modify-phases ,phases (add-before 'configure 'patch-qscintilla-library-name @@ -1525,6 +1527,9 @@ script files.") "qscintilla2_qt5")) #t)))))))) +(define-public qtoctave + (deprecated-package "qtoctave" octave)) + (define-public opencascade-oce (package (name "opencascade-oce") @@ -1772,7 +1777,7 @@ scientific applications modeled by partial differential equations.") ("mumps" ,mumps-openmpi) ("openmpi" ,openmpi) ("scalapack" ,scalapack) - ("scotch" ,pt-scotch) + ("scotch" ,pt-scotch32) ,@(package-inputs petsc))) (arguments (substitute-keyword-arguments (package-arguments petsc) @@ -3580,7 +3585,7 @@ in finite element programs.") `(("unzip" ,unzip))) (inputs `(("hdf5" ,hdf5) - ("octave" ,octave) + ("octave" ,octave-cli) ("python" ,python-2) ; print syntax ;; ("python2-numpy" ,python2-numpy) ; only required for the tests ("zlib" ,zlib))) @@ -3704,7 +3709,13 @@ set.") `(("doc++" ,doc++) ("netpbm" ,netpbm) ("perl" ,perl) ;needed to run 'ppmquant' during tests - ("texlive" ,texlive) ;full package required for fonts + ("texlive" ,(texlive-union (list texlive-generic-xypic + texlive-fonts-xypic + texlive-latex-hyperref + texlive-latex-oberdiek + texlive-generic-ifxetex + texlive-latex-url + texlive-bibtex))) ("ghostscript" ,ghostscript))) (inputs `(("blas" ,openblas) @@ -3721,6 +3732,12 @@ set.") "--with-blas") #:phases (modify-phases %standard-phases + (add-before 'build 'set-HOME + (lambda _ + ;; FIXME: texlive-union does not find the built + ;; metafonts, so it tries to generate them in HOME. + (setenv "HOME" "/tmp") + #t)) (add-before 'configure 'chdir-src (lambda _ (chdir "src"))) (replace 'configure @@ -3735,7 +3752,7 @@ set.") configure-flags))))))) (add-after 'build 'build-docs (lambda _ - (zero? (system* "make" "-Cdocs" "pdf" "html")))) + (invoke "make" "-Cdocs" "pdf" "html"))) (replace 'check (lambda _ (setenv "LD_LIBRARY_PATH" (string-append (getcwd) "/hypre/lib")) @@ -3950,29 +3967,41 @@ as equations, scalars, vectors, and matrices.") (define-public z3 (package (name "z3") - (version "4.8.1") + (version "4.8.3") (home-page "https://github.com/Z3Prover/z3") (source (origin (method git-fetch) (uri (git-reference (url home-page) (commit (string-append "z3-" version)))) + (file-name (git-file-name name version)) (sha256 (base32 - "1vr57bwx40sd5riijyrhy70i2wnv9xrdihf6y5zdz56yq88rl48f")))) - (build-system cmake-build-system) + "0p5gdmhd32x6zwmx7j5cgwh4jyfxa9yapym95nlmyfaqzak92qar")))) + (build-system gnu-build-system) (arguments - `(#:configure-flags - (list "-DBUILD_PYTHON_BINDINGS=true" - "-DINSTALL_PYTHON_BINDINGS=true" - (string-append "-DCMAKE_INSTALL_PYTHON_PKG_DIR=" - %output - "/lib/python2.7/site-packages")) - #:phases + `(#:phases (modify-phases %standard-phases + (add-after 'unpack 'fix-compatability + ;; Versions after 4.8.3 have immintrin.h IFDEFed for Windows only. + (lambda _ + (substitute* "src/util/mpz.cpp" + (("#include <immintrin.h>") "")) + #t)) (add-before 'configure 'bootstrap (lambda _ (zero? - (system* "python" "contrib/cmake/bootstrap.py" "create")))) + (system* "python" "scripts/mk_make.py")))) + ;; work around gnu-build-system's setting --enable-fast-install + ;; (z3's `configure' is a wrapper around the above python file, + ;; which fails when passed --enable-fast-install) + (replace 'configure + (lambda* (#:key inputs outputs #:allow-other-keys) + (invoke "./configure" + (string-append "--prefix=" (assoc-ref outputs "out"))))) + (add-after 'configure 'change-directory + (lambda _ + (chdir "build") + #t)) (add-before 'check 'make-test-z3 (lambda _ ;; Build the test suite executable. @@ -3983,7 +4012,8 @@ as equations, scalars, vectors, and matrices.") ;; Run all the tests that don't require arguments. (zero? (system* "./test-z3" "/a"))))))) (native-inputs - `(("python" ,python-2))) + `(("which" ,which) + ("python" ,python-wrapper))) (synopsis "Theorem prover") (description "Z3 is a theorem prover and @dfn{satisfiability modulo theories} (SMT) solver. It provides a C/C++ API, as well as Python bindings.") @@ -4052,13 +4082,14 @@ exclusion algorithms are typical examples of such systems.") (name "elemental") (version "0.87.7") (source (origin - (method url-fetch) - (uri (string-append "https://github.com/elemental/Elemental/" - "archive/v" version ".tar.gz")) - (file-name (string-append name "-" version ".tar.gz")) + (method git-fetch) + (uri (git-reference + (url "https://github.com/elemental/Elemental.git") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) (sha256 (base32 - "1nfp82w22pi8x8fg9sc37z8kf84dqi1dhxp8bbk7571y4aygvv3v")))) + "1687xpjjzig27y2pnqv7hv09smpijyfdpz7qjgmcxf4shfajlfkc")))) (build-system cmake-build-system) (home-page "http://libelemental.org") (native-inputs @@ -4082,8 +4113,8 @@ exclusion algorithms are typical examples of such systems.") "-DCMAKE_INSTALL_LIBDIR=lib" "-DGFORTRAN_LIB=gfortran") #:phases (modify-phases %standard-phases - (add-before 'check 'mpi-setup - ,%openmpi-setup) + (add-before 'check 'mpi-setup + ,%openmpi-setup) (add-before 'check 'setup-tests (lambda _ ;; Parallelism is done at the MPI layer. @@ -4094,7 +4125,7 @@ exclusion algorithms are typical examples of such systems.") ;; Tests are installed, with no easy configuration ;; switch to prevent this, so delete them. (delete-file-recursively - (string-append (assoc-ref outputs "out") "/bin")) + (string-append (assoc-ref outputs "out") "/bin")) #t))))) (synopsis "Dense and sparse-direct linear algebra and optimization") (description "Elemental is a modern C++ library for distributed-memory diff --git a/gnu/packages/mes.scm b/gnu/packages/mes.scm index 6dc6dfb4cb..c45e267875 100644 --- a/gnu/packages/mes.scm +++ b/gnu/packages/mes.scm @@ -63,14 +63,14 @@ extensive examples, including parsers for the Javascript and C99 languages.") (let ((triplet "i686-unknown-linux-gnu")) (package (name "mes") - (version "0.18") + (version "0.19") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/mes/" "mes-" version ".tar.gz")) (sha256 (base32 - "1dsaaqyanzsq9m5wrcd2bjhb3qd6928c9q97rg5r730pyqjwxyxf")))) + "15h4yhaywdc0djpjlin2jz1kzahpqxfki0r0aav1qm9nxxmnp1l0")))) (build-system gnu-build-system) (supported-systems '("i686-linux" "x86_64-linux")) (propagated-inputs @@ -93,10 +93,11 @@ extensive examples, including parsers for the Javascript and C99 languages.") `(#:strip-binaries? #f)) ; binutil's strip b0rkes MesCC/M1/hex2 binaries (synopsis "Scheme interpreter and C compiler for full source bootstrapping") (description - "GNU Mes [Maxwell Equations of Software] aims to create full source -bootstrapping for GuixSD. It consists of a mutual self-hosting [close to -Guile-] Scheme interpreter prototype in C and a Nyacc-based C compiler in -[Guile] Scheme.") + "GNU Mes--Maxwell Equations of Software--brings the Reduced Binary Seed +bootstrap to Guix and aims to help create full source bootstrapping for +GNU/Linux distributions. It consists of a mutual self-hosting Scheme +interpreter in C and a Nyacc-based C compiler in Scheme and is compatible with +Guile.") (home-page "https://gnu.org/software/mes") (license gpl3+)))) diff --git a/gnu/packages/messaging.scm b/gnu/packages/messaging.scm index e34f725a40..1500be43b0 100644 --- a/gnu/packages/messaging.scm +++ b/gnu/packages/messaging.scm @@ -93,6 +93,7 @@ #:use-module (guix build-system meson) #:use-module (guix build-system perl) #:use-module (guix build-system python) + #:use-module (guix build-system trivial) #:use-module (guix download) #:use-module (guix git-download) #:use-module ((guix licenses) #:prefix license:) @@ -588,6 +589,12 @@ was initially a fork of xmpppy, but uses non-blocking sockets.") `(#:test-target "test_nogui" #:phases (modify-phases %standard-phases + (add-after 'unpack 'add-plugin-dirs + (lambda _ + (substitute* "gajim/common/configpaths.py" + (("_paths\\['PLUGINS_USER'\\]") + "_paths['PLUGINS_USER'],os.getenv('GAJIM_PLUGIN_PATH')")) + #t)) (add-after 'install 'wrap-gi-typelib-path (lambda* (#:key outputs #:allow-other-keys) (let ((out (assoc-ref outputs "out"))) @@ -625,6 +632,18 @@ was initially a fork of xmpppy, but uses non-blocking sockets.") (,(string-append (assoc-ref inputs "gtk+") "/share/glib-2.0/schemas")))) #t))))) + (native-search-paths + (list (search-path-specification + (variable "GAJIM_PLUGIN_PATH") + (separator #f) ;single entry + (files '("share/gajim/plugins"))) + ;; Gajim needs to use the propagated inputs of its plugins. + (search-path-specification + (variable "PYTHONPATH") + (files (list (string-append + "lib/python" + (version-major+minor (package-version python)) + "/site-packages")))))) (native-inputs `(("intltool" ,intltool) ("python-docutils" ,python-docutils) @@ -636,7 +655,6 @@ was initially a fork of xmpppy, but uses non-blocking sockets.") ("gtkspell3" ,gtkspell3) ("hicolor-icon-theme" ,hicolor-icon-theme) ("libsecret" ,libsecret) - ("python-axolotl" ,python-axolotl) ("python-cssutils" ,python-cssutils) ("python-dbus" ,python-dbus) ("python-gnupg" ,python-gnupg) @@ -657,6 +675,41 @@ transformation; audio and video conferences; file transfer; TLS, GPG and end-to-end encryption support; XML console.") (license license:gpl3))) +(define-public gajim-omemo + (package + (name "gajim-omemo") + (version "2.6.23") + (source (origin + (method url-fetch/zipbomb) + (uri (string-append + "https://ftp.gajim.org/plugins_releases/omemo_" + version ".zip")) + (sha256 + (base32 + "134zbscbcnhx4smad0ryvx3ngkqlsspafqf0kk8y2d3vcd9bf3pa")))) + (build-system trivial-build-system) + (arguments + `(#:modules ((guix build utils)) + #:builder + (begin + (use-modules (guix build utils)) + (let* ((out (assoc-ref %outputs "out")) + (share (in-vicinity out "share/gajim/plugins")) + (source (assoc-ref %build-inputs "source"))) + (mkdir-p share) + (copy-recursively source share) + #t)))) + (propagated-inputs + `(("python-axolotl" ,python-axolotl))) + (home-page + "https://dev.gajim.org/gajim/gajim-plugins/wikis/OmemoGajimPlugin") + (synopsis "Gajim OMEMO plugin") + (description + "This package provides the Gajim OMEMO plugin. OMEMO is an XMPP +Extension Protocol (XEP) for secure multi-client end-to-end encryption based +on Axolotl and PEP.") + (license license:gpl3+))) + (define-public dino ;; The only release tarball is for version 0.0, but it is very old and fails ;; to build. diff --git a/gnu/packages/monitoring.scm b/gnu/packages/monitoring.scm index b69ec07158..416135414f 100644 --- a/gnu/packages/monitoring.scm +++ b/gnu/packages/monitoring.scm @@ -151,7 +151,7 @@ etc. via a Web interface. Features include: (define-public zabbix-agentd (package (name "zabbix-agentd") - (version "3.4.11") + (version "4.0.2") (source (origin (method url-fetch) @@ -160,7 +160,7 @@ etc. via a Web interface. Features include: "/zabbix-" version ".tar.gz")) (sha256 (base32 - "0qxgf6hx7ibhjmxd2sxizkjc8df4c9d31wz5hhql409ws98qf173")))) + "033qb4b9y02jp2ijj8ny0a0yk1mzj0a8ihxrv11h7ln8kpl55vqw")))) (build-system gnu-build-system) (arguments `(#:configure-flags @@ -182,21 +182,34 @@ solution (client-side agent)") (package (inherit zabbix-agentd) (name "zabbix-server") + (outputs '("out" "front-end" "schema")) (arguments (substitute-keyword-arguments `(#:phases (modify-phases %standard-phases - (add-after 'install 'install-frontend + (add-after 'install 'install-front-end (lambda* (#:key outputs #:allow-other-keys) - (let* ((php (string-append (assoc-ref outputs "out") + (let* ((php (string-append (assoc-ref outputs "front-end") "/share/zabbix/php")) (front-end-conf (string-append php "/conf")) (etc (string-append php "/etc"))) (mkdir-p php) - (copy-recursively "./frontends/php" php) + (copy-recursively "frontends/php" php) + ;; Make front-end write config to ‘/etc/zabbix’ directory. (rename-file front-end-conf (string-append front-end-conf "-example")) - (symlink "/etc/zabbix" front-end-conf))))) + (symlink "/etc/zabbix" front-end-conf)) + #t)) + (add-after 'install 'install-schema + (lambda* (#:key outputs #:allow-other-keys) + (let ((database-directory + (string-append (assoc-ref outputs "schema") + "/database"))) + (for-each delete-file + (find-files "database" "Makefile\\.in|\\.am$")) + (mkdir-p database-directory) + (copy-recursively "database" database-directory)) + #t))) ,@(package-arguments zabbix-agentd)) ((#:configure-flags flags) `(cons* "--enable-server" @@ -207,6 +220,8 @@ solution (client-side agent)") (string-append "--with-gnutls=" (assoc-ref %build-inputs "gnutls")) "--with-libcurl" + (string-append "--with-zlib=" + (assoc-ref %build-inputs "zlib")) ,flags)))) (inputs `(("curl" ,curl) diff --git a/gnu/packages/mp3.scm b/gnu/packages/mp3.scm index c9effbafa3..c7736eeb51 100644 --- a/gnu/packages/mp3.scm +++ b/gnu/packages/mp3.scm @@ -470,13 +470,13 @@ compression format (.mpc files).") (define-public eyed3 (package (name "eyed3") - (version "0.8.7") + (version "0.8.8") (source (origin (method url-fetch) (uri (pypi-uri "eyeD3" version)) (sha256 (base32 - "1fzqy6hkg73xvpapdjrdzr3r0fsamnplvjfl7dz7rzgzx2r4x4pg")))) + "197lszkyzm377ym5r0ssryfsiz20yjx8y4rii3wc81n92d1qzlaq")))) (build-system python-build-system) (arguments `(#:tests? #f)) ; the required test data contains copyrighted material. diff --git a/gnu/packages/mpd.scm b/gnu/packages/mpd.scm index fe8610ab94..8ddc68a33e 100644 --- a/gnu/packages/mpd.scm +++ b/gnu/packages/mpd.scm @@ -189,16 +189,16 @@ player daemon.") (define-public ncmpc (package (name "ncmpc") - (version "0.32") + (version "0.33") (source (origin (method url-fetch) (uri (string-append "http://musicpd.org/download/ncmpc/" - (car (string-split version #\.)) + (version-major version) "/ncmpc-" version ".tar.xz")) (sha256 (base32 - "1b01q1pcaw5yyhvmlffc3h0r3w8qy7rhn55a7xj4qkcfqvs8ap08")))) + "19fp7xkpai4lq3vmpbppgh3ism7lg2sibv237c0sl5a0hls4mq4l")))) (build-system meson-build-system) (arguments `(#:configure-flags @@ -216,7 +216,7 @@ player daemon.") (c++ (string-append gcc "/include/c++"))) (setenv path (string-append c++ ":" (getenv path))) #t)))))) - (inputs `(("gcc", gcc-8) ; for its C++14 support + (inputs `(("gcc" ,gcc-8) ; for its C++14 support ("boost" ,boost) ("pcre" ,pcre) ("libmpdclient" ,libmpdclient) @@ -244,7 +244,7 @@ terminal using ncurses.") "0m0mjb049sl62vx13h9waavysa30mk0rphacksnvf94n13la62v5")))) (build-system gnu-build-system) (inputs `(("libmpdclient" ,libmpdclient) - ("boost" ,boost) + ("boost" ,boost-cxx14) ("readline" ,readline) ("ncurses" ,ncurses) ("taglib" ,taglib) diff --git a/gnu/packages/mtools.scm b/gnu/packages/mtools.scm index 32eb1dba47..5be3da0137 100644 --- a/gnu/packages/mtools.scm +++ b/gnu/packages/mtools.scm @@ -28,7 +28,7 @@ (define-public mtools (package (name "mtools") - (version "4.0.21") + (version "4.0.23") (source (origin (method url-fetch) @@ -36,7 +36,7 @@ version ".tar.bz2")) (sha256 (base32 - "1kybydx74qgbwpnjvjn49msf8zipchl43d4cq8zzwcyvfkdzw7h2")))) + "1qwfxzr964fasxlzhllahk8mzh7c82s808wvly95dsqsflkdp27i")))) (build-system gnu-build-system) (home-page "https://www.gnu.org/software/mtools/") (synopsis "Access MS-DOS disks without mounting") diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm index b59f258ae5..12b55aece3 100644 --- a/gnu/packages/music.scm +++ b/gnu/packages/music.scm @@ -2247,14 +2247,14 @@ from the command line.") (define-public qtractor (package (name "qtractor") - (version "0.9.2") + (version "0.9.3") (source (origin (method url-fetch) (uri (string-append "http://downloads.sourceforge.net/qtractor/" "qtractor-" version ".tar.gz")) (sha256 (base32 - "1j3rpvdkw9rw48j4zyfn6rprp01csy4rl6zckcjyx0vh7vaycchr")))) + "1010gvkzdzdk39g1g6wx2j19ls0kdl6l9q51xzk2qik7h2fwxl71")))) (build-system gnu-build-system) (arguments `(#:tests? #f)) ; no "check" target @@ -2704,6 +2704,12 @@ Songs can be searched by artist, name or even by a part of the song text.") (lambda _ (setenv "HOME" (string-append (getcwd) "/tmp")) #t)) + (add-after 'unpack 'make-python3.7-compatible + (lambda _ + ;; See <https://github.com/beetbox/beets/issues/2978>. + (substitute* "beets/autotag/hooks.py" + (("re\\._pattern_type") "re.Pattern")) + #t)) (replace 'check (lambda _ (invoke "nosetests" "-v")))))) @@ -2780,7 +2786,7 @@ for improved Amiga ProTracker 2/3 compatibility.") (define-public schismtracker (package (name "schismtracker") - (version "20180810") + (version "20181223") (source (origin (method git-fetch) (uri (git-reference @@ -2789,7 +2795,7 @@ for improved Amiga ProTracker 2/3 compatibility.") (file-name (git-file-name name version)) (sha256 (base32 - "0cwp5fna14hjrlf652l96ja5cjq63is3cwg6pp4wbpx43mb7qb2d")) + "18k5j10zq39y2q294avdmar87x93k57wqmq8bpz562hdqki2mz1l")) (modules '((guix build utils))) (snippet ;; Remove use of __DATE__ and __TIME__ for reproducibility. @@ -3299,7 +3305,8 @@ plugins, a switch trigger, a toggle switch, and a peakmeter.") "1wg47vjw9djn99gbnsl2bcwj4xhdid61m4wrbn2nlp797flj91ic")))) (build-system waf-build-system) (arguments - `(#:tests? #f ; no "check" target + `(#:python ,python-2 + #:tests? #f ; no "check" target #:configure-flags (list "--no-webkit") #:phases (modify-phases %standard-phases @@ -3603,7 +3610,7 @@ audio samples and various soft sythesizers. It can receive input from a MIDI ke (define-public musescore (package (name "musescore") - (version "2.3.2") + (version "3.0") (source (origin (method git-fetch) (uri (git-reference @@ -3612,7 +3619,7 @@ audio samples and various soft sythesizers. It can receive input from a MIDI ke (file-name (git-file-name name version)) (sha256 (base32 - "0ncv0xfmq87plqa43cm0fpidlwzz1nq5s7h7139llrbc36yp3pr1")) + "0g8n8xpw5d6wh8bwbvy12sinl9i0ir009sr28i4izr28lr4x8v50")) (modules '((guix build utils))) (snippet ;; Un-bundle OpenSSL and remove unused libraries. @@ -3627,27 +3634,21 @@ audio samples and various soft sythesizers. It can receive input from a MIDI ke "thirdparty/openssl" "thirdparty/portmidi")) #t)))) - (build-system gnu-build-system) + (build-system cmake-build-system) (arguments - `(#:make-flags - `(,(string-append "PREFIX=" (assoc-ref %outputs "out")) - "USE_SYSTEM_FREETYPE=ON" - "DOWNLOAD_SOUNDFONT=OFF" - ;; The following is not supported since Qt 5.11. May be removed in - ;; a future release. - "BUILD_WEBKIT=OFF") - ;; There are tests, but no simple target to run. The command - ;; used to run them is: + `(#:configure-flags + `("-DUSE_SYSTEM_FREETYPE=ON" + "-DBUILD_WEBENGINE=OFF" + "-DDOWNLOAD_SOUNDFONT=OFF") + ;; There are tests, but no simple target to run. The command used to + ;; run them is: ;; ;; make debug && sudo make installdebug && cd \ ;; build.debug/mtest && make && ctest ;; ;; Basically, it requires to start a whole new build process. ;; So we simply skip them. - #:tests? #f - #:phases - (modify-phases %standard-phases - (delete 'configure)))) + #:tests? #f)) (inputs `(("alsa-lib" ,alsa-lib) ("freetype" ,freetype) @@ -3666,8 +3667,7 @@ audio samples and various soft sythesizers. It can receive input from a MIDI ke ("qtsvg" ,qtsvg) ("qtxmlpatterns" ,qtxmlpatterns))) (native-inputs - `(("cmake" ,cmake) - ("pkg-config" ,pkg-config) + `(("pkg-config" ,pkg-config) ("qttools" ,qttools))) (synopsis "Music composition and notation software") (description "MuseScore is a music score typesetter. Its main purpose is @@ -3935,9 +3935,9 @@ OSC connections.") (lambda* (#:key inputs #:allow-other-keys) (with-directory-excursion "faust" (delete-file "main.cpp") - (zero? (system* "faust" "-i" - "-a" "lv2synth.cpp" - "-o" "main.cpp" "main.dsp")))))))) + (invoke "faust" "-i" + "-a" "lv2synth.cpp" + "-o" "main.cpp" "main.dsp"))))))) (inputs `(("boost" ,boost) ("lv2" ,lv2) diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm index a9e1576733..84bfe471ed 100644 --- a/gnu/packages/networking.scm +++ b/gnu/packages/networking.scm @@ -586,7 +586,7 @@ of the same name.") (define-public wireshark (package (name "wireshark") - (version "2.6.4") + (version "2.6.5") (source (origin (method url-fetch) @@ -594,7 +594,7 @@ of the same name.") version ".tar.xz")) (sha256 (base32 - "0qf81dk726sdsmjqa9nd251j1cwvzkyb4hrlp6w4iwa3cdz00sx0")))) + "12j3fw0j8qcr86c1vsz4bsb55j9inp0ll3wjjdvg1cj4hmwmn5ck")))) (build-system gnu-build-system) (inputs `(("c-ares" ,c-ares) ("glib" ,glib) diff --git a/gnu/packages/ocaml.scm b/gnu/packages/ocaml.scm index 11389440dc..e4f17133d7 100644 --- a/gnu/packages/ocaml.scm +++ b/gnu/packages/ocaml.scm @@ -10,6 +10,7 @@ ;;; Copyright © 2017 Ben Woodcroft <donttrustben@gmail.com> ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2018 Peter Kreye <kreyepr@gmail.com> +;;; Copyright © 2018 Gabriel Hondet <gabrielhondet@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -63,6 +64,7 @@ #:use-module (gnu packages web-browsers) #:use-module (gnu packages xml) #:use-module (gnu packages xorg) + #:use-module (guix build-system dune) #:use-module (guix build-system gnu) #:use-module (guix build-system ocaml) #:use-module (guix download) @@ -296,46 +298,46 @@ functional, imperative and object-oriented styles of programming.") (define-public ocaml ocaml-4.07) (define-public ocamlbuild - (package - (name "ocamlbuild") - (version "0.13.1") - (source (origin - (method url-fetch) - (uri (string-append "https://github.com/ocaml/ocamlbuild/archive/" - version ".tar.gz")) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "1320cfkixs1xlng5av04pa5qjb3ynvi2kl3k1ngqzg5fpi29b0vr")))) - (build-system gnu-build-system) - (arguments - `(#:test-target "test" - #:tests? #f; tests require findlib - #:make-flags - (list (string-append "OCAMLBUILD_PREFIX=" (assoc-ref %outputs "out")) - (string-append "OCAMLBUILD_BINDIR=" (assoc-ref %outputs "out") - "/bin") - (string-append "OCAMLBUILD_LIBDIR=" (assoc-ref %outputs "out") - "/lib/ocaml/site-lib") - (string-append "OCAMLBUILD_MANDIR=" (assoc-ref %outputs "out") - "/share/man")) - #:phases - (modify-phases %standard-phases - (delete 'bootstrap) - (delete 'configure) - (add-before 'build 'findlib-environment - (lambda* (#:key outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out"))) - (setenv "OCAMLFIND_DESTDIR" (string-append out "/lib/ocaml/site-lib")) - (setenv "OCAMLFIND_LDCONF" "ignore") - #t)))))) - (native-inputs - `(("ocaml" ,ocaml))) - (home-page "https://github.com/ocaml/ocamlbuild") - (synopsis "OCaml build tool") - (description "OCamlbuild is a generic build tool, that has built-in rules - for building OCaml library and programs.") - (license license:lgpl2.1+))) + (package + (name "ocamlbuild") + (version "0.13.1") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/ocaml/ocamlbuild/archive/" + version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1320cfkixs1xlng5av04pa5qjb3ynvi2kl3k1ngqzg5fpi29b0vr")))) + (build-system gnu-build-system) + (arguments + `(#:test-target "test" + #:tests? #f; tests require findlib + #:make-flags + (list (string-append "OCAMLBUILD_PREFIX=" (assoc-ref %outputs "out")) + (string-append "OCAMLBUILD_BINDIR=" (assoc-ref %outputs "out") + "/bin") + (string-append "OCAMLBUILD_LIBDIR=" (assoc-ref %outputs "out") + "/lib/ocaml/site-lib") + (string-append "OCAMLBUILD_MANDIR=" (assoc-ref %outputs "out") + "/share/man")) + #:phases + (modify-phases %standard-phases + (delete 'bootstrap) + (delete 'configure) + (add-before 'build 'findlib-environment + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out"))) + (setenv "OCAMLFIND_DESTDIR" (string-append out "/lib/ocaml/site-lib")) + (setenv "OCAMLFIND_LDCONF" "ignore") + #t)))))) + (native-inputs + `(("ocaml" ,ocaml))) + (home-page "https://github.com/ocaml/ocamlbuild") + (synopsis "OCaml build tool") + (description "OCamlbuild is a generic build tool, that has built-in rules +for building OCaml library and programs.") + (license license:lgpl2.1+))) (define-public opam (package @@ -384,7 +386,13 @@ functional, imperative and object-oriented styles of programming.") ;; Use bwrap from the store directly. (substitute* "src/state/shellscripts/bwrap.sh" (("-v bwrap") (string-append "-v " bwrap)) - (("exec bwrap") (string-append "exec " bwrap))) + (("exec bwrap") (string-append "exec " bwrap)) + ;; Mount /gnu and /run/current-system in the + ;; isolated environment when building with opam. + ;; This is necessary for packages to find external + ;; dependencies, such as a C compiler, make, etc... + (("^add_mounts ro /usr") + "add_mounts ro /gnu /run/current-system /usr")) (substitute* "src/client/opamInitDefaults.ml" (("\"bwrap\"") (string-append "\"" bwrap "\""))) ;; Build dependencies @@ -642,9 +650,6 @@ the OCaml core distribution.") (variable "COQPATH") (files (list "lib/coq/user-contrib"))))) (build-system ocaml-build-system) - (native-inputs - `(("texlive" ,texlive) - ("hevea" ,hevea))) (inputs `(("lablgtk" ,lablgtk) ("python" ,python-2) @@ -996,7 +1001,7 @@ libpanel, librsvg and quartz.") `(("ocaml" ,ocaml-4.02) ;; For documentation ("ghostscript" ,ghostscript) - ("texlive" ,texlive) + ("texlive" ,texlive-tiny) ("hevea" ,hevea) ("lynx" ,lynx) ("which" ,which))) @@ -1561,26 +1566,13 @@ following a very simple s-expression syntax.") (sha256 (base32 "01zjp1q4hryqaxv4apkjd868fycz2kf887r6lkb6x2a545h1lh7f")))) - (build-system ocaml-build-system) + (build-system dune-build-system) (arguments `(#:tests? #f - #:phases - (modify-phases %standard-phases - (delete 'configure) - (replace 'build - (lambda _ - (invoke "jbuilder" "build" "@install") - #t)) - (replace 'install - (lambda* (#:key outputs #:allow-other-keys) - (invoke "jbuilder" "install" - "--prefix" (assoc-ref outputs "out")) - #t))))) + #:jbuild? #t)) (propagated-inputs `(("ocamlbuild" ,ocamlbuild) ("ocaml-result" ,ocaml-result))) - (native-inputs - `(("dune" ,dune))) (home-page "https://github.com/ocaml-ppx/ocaml-migrate-parsetree") (synopsis "OCaml parsetree convertor") (description "This library converts between parsetrees of different OCaml @@ -1601,60 +1593,9 @@ functions to the next and/or previous version.") (sha256 (base32 "1x2xfjpkzbcz4rza1d7gh3ipliw6jqfcklbsln82v3561qgkqgmh")))) - (build-system ocaml-build-system) - (arguments - `(#:phases - (modify-phases %standard-phases - (delete 'configure) - (replace 'build - (lambda _ - (invoke "dune" "build" "@install") - #t)) - (replace 'install - (lambda* (#:key outputs #:allow-other-keys) - (invoke "dune" "install" - "--prefix" (assoc-ref outputs "out")) - #t))))) - (native-inputs - `(("dune" ,dune))) - (propagated-inputs - `(("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree))) - (home-page "https://github.com/let-def/ppx_tools_versioned") - (synopsis "Variant of ppx_tools") - (description "This package is a variant of ppx_tools based on -ocaml-migrate-parsetree") - (license license:expat))) - -(define-public ocaml-ppx-tools-versioned - (package - (name "ocaml-ppx-tools-versioned") - (version "5.2.1") - (source (origin - (method url-fetch) - (uri (string-append "https://github.com/ocaml-ppx/" - "ppx_tools_versioned/archive/" - version ".tar.gz")) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "1x2xfjpkzbcz4rza1d7gh3ipliw6jqfcklbsln82v3561qgkqgmh")))) - (build-system ocaml-build-system) + (build-system dune-build-system) (arguments - `(#:tests? #f - #:phases - (modify-phases %standard-phases - (delete 'configure) - (replace 'build - (lambda _ - (invoke "dune" "build" "@install") - #t)) - (replace 'install - (lambda* (#:key outputs #:allow-other-keys) - (invoke "dune" "install" - "--prefix" (assoc-ref outputs "out")) - #t))))) - (native-inputs - `(("dune" ,dune))) + `(#:test-target ".")) (propagated-inputs `(("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree))) (home-page "https://github.com/let-def/ppx_tools_versioned") @@ -1675,31 +1616,19 @@ ocaml-migrate-parsetree") (sha256 (base32 "15jjk2pq1vx311gl49s5ag6x5y0654x35w75z07g7kr2q334hqps")))) - (build-system ocaml-build-system) + (build-system dune-build-system) (native-inputs `(("camlp4" ,camlp4) ("time" ,time) ("autoconf" ,autoconf) ("automake" ,automake) - ("bisect" ,ocaml-bisect) - ("dune" ,dune))) + ("bisect" ,ocaml-bisect))) (propagated-inputs `(("camlp4" ,camlp4) ("ocaml-ppx-tools-versioned" ,ocaml-ppx-tools-versioned))) (arguments `(#:tests? #f; Tests fail to build - #:phases - (modify-phases %standard-phases - (delete 'configure) - (replace 'build - (lambda _ - (invoke "jbuilder" "build" "@install") - #t)) - (replace 'install - (lambda* (#:key outputs #:allow-other-keys) - (invoke "dune" "install" - "--prefix" (assoc-ref outputs "out")) - #t))))) + #:jbuild? #t)) (properties `((ocaml4.02-variant . ,(delay ocaml4.02-bitstring)))) (home-page "https://github.com/xguerin/bitstring") @@ -1725,44 +1654,45 @@ powerful.") (base32 "0vy8ibrxccii1jbsk5q6yh1kxjigqvi7lhhcmizvd5gfhf7mfyc8")) (patches (search-patches "ocaml-bitstring-fix-configure.patch")))) - (arguments - `(#:ocaml ,ocaml-4.02 - #:findlib ,ocaml4.02-findlib - #:configure-flags - (list "CAMLP4OF=camlp4of" "--enable-coverage") - #:make-flags - (list (string-append "BISECTLIB=" - (assoc-ref %build-inputs "bisect") - "/lib/ocaml/site-lib") - (string-append "OCAMLCFLAGS=-g -I " - (assoc-ref %build-inputs "camlp4") - "/lib/ocaml/site-lib/camlp4 -I " - "$(BISECTLIB)/bisect") - (string-append "OCAMLOPTFLAGS=-g -I " - (assoc-ref %build-inputs "camlp4") - "/lib/ocaml/site-lib/camlp4 -I " - "$(BISECTLIB)/bisect")) - #:phases - (modify-phases %standard-phases - (add-after 'install 'link-lib - (lambda* (#:key outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (stubs (string-append out - "/lib/ocaml/site-lib/stubslibs")) - (lib (string-append out - "/lib/ocaml/site-lib/bitstring"))) - (mkdir-p stubs) - (symlink (string-append lib "/dllbitstring.so") - (string-append stubs "/dllbitstring.so"))) - #t)) - (add-before 'configure 'fix-configure - (lambda* (#:key inputs #:allow-other-keys) - (substitute* "Makefile.in" - (("@abs_top_builddir@") - (string-append "@abs_top_builddir@:" (getenv "LIBRARY_PATH")))) - (substitute* "configure" - (("-/bin/sh") (string-append "-" (assoc-ref inputs "bash") - "/bin/sh")))))))) + (build-system ocaml-build-system) + (arguments + `(#:ocaml ,ocaml-4.02 + #:findlib ,ocaml4.02-findlib + #:configure-flags + (list "CAMLP4OF=camlp4of" "--enable-coverage") + #:make-flags + (list (string-append "BISECTLIB=" + (assoc-ref %build-inputs "bisect") + "/lib/ocaml/site-lib") + (string-append "OCAMLCFLAGS=-g -I " + (assoc-ref %build-inputs "camlp4") + "/lib/ocaml/site-lib/camlp4 -I " + "$(BISECTLIB)/bisect") + (string-append "OCAMLOPTFLAGS=-g -I " + (assoc-ref %build-inputs "camlp4") + "/lib/ocaml/site-lib/camlp4 -I " + "$(BISECTLIB)/bisect")) + #:phases + (modify-phases %standard-phases + (add-after 'install 'link-lib + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (stubs (string-append out + "/lib/ocaml/site-lib/stubslibs")) + (lib (string-append out + "/lib/ocaml/site-lib/bitstring"))) + (mkdir-p stubs) + (symlink (string-append lib "/dllbitstring.so") + (string-append stubs "/dllbitstring.so"))) + #t)) + (add-before 'configure 'fix-configure + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "Makefile.in" + (("@abs_top_builddir@") + (string-append "@abs_top_builddir@:" (getenv "LIBRARY_PATH")))) + (substitute* "configure" + (("-/bin/sh") (string-append "-" (assoc-ref inputs "bash") + "/bin/sh")))))))) (native-inputs `(("camlp4" ,camlp4-4.02) ("time" ,time) @@ -2232,26 +2162,18 @@ through Transport Layer Security (@dfn{TLS}) encrypted connections.") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 "0mhh019bjkg5xfvpy1pxs4xdxb759fyydmgb6l4j0qww1qgr8klp")))) - (build-system ocaml-build-system) + (build-system dune-build-system) (arguments `(#:tests? #f; require lwt_ppx + #:jbuild? #t #:phases (modify-phases %standard-phases - (replace 'configure + (add-before 'build 'configure (lambda _ (invoke "ocaml" "src/util/configure.ml" "-use-libev" "true") - #t)) - (replace 'build - (lambda _ - (invoke "jbuilder" "build" "@install") - #t)) - (replace 'install - (lambda* (#:key outputs #:allow-other-keys) - (invoke "jbuilder" "install" "--prefix" (assoc-ref outputs "out")) #t))))) (native-inputs - `(("dune" ,dune) - ("ocaml-cppo" ,ocaml-cppo) + `(("ocaml-cppo" ,ocaml-cppo) ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree) ("pkg-config" ,pkg-config) ("ppx-tools-versioned" ,ocaml-ppx-tools-versioned))) @@ -2285,22 +2207,10 @@ locks or other synchronization primitives.") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 "1lr62j2266pbsi54xmzsfvl2z7fi7smhak7fp1ybl8hssxwi6in2")))) - (build-system ocaml-build-system) + (build-system dune-build-system) (arguments `(#:tests? #f; require lwt_ppx - #:phases - (modify-phases %standard-phases - (delete 'configure) - (replace 'build - (lambda _ - (invoke "jbuilder" "build" "@install") - #t)) - (replace 'install - (lambda* (#:key outputs #:allow-other-keys) - (invoke "jbuilder" "install" "--prefix" (assoc-ref outputs "out")) - #t))))) - (native-inputs - `(("dune" ,dune))) + #:jbuild? #t)) (propagated-inputs `(("lwt" ,ocaml-lwt))) (home-page "https://github.com/aantron/lwt_log") @@ -3114,24 +3024,12 @@ provide a tool that can be used to: (sha256 (base32 "1dkm3d5h6h56y937gcdk2wixlpzl59vv5pmiafglr89p20kf7gqf")) (file-name (string-append name "-" version ".tar.gz")))) - (build-system ocaml-build-system) + (build-system dune-build-system) (arguments - `(#:phases - (modify-phases %standard-phases - (delete 'configure) - (replace 'build - (lambda _ - (invoke "dune" "build" "@install" "--profile" "release") - #t)) - (replace 'install - (lambda* (#:key outputs #:allow-other-keys) - (invoke "dune" "install" - "--prefix" (assoc-ref outputs "out")) - #t))) - #:tests? #f)) + `(#:tests? #f + #:build-flags (list "--profile" "release"))) (native-inputs - `(("dune" ,dune) - ("ocamlbuild" ,ocamlbuild))) + `(("ocamlbuild" ,ocamlbuild))) (home-page "https://github.com/mjambon/cppo") (synopsis "Equivalent of the C preprocessor for OCaml programs") (description "Cppo is an equivalent of the C preprocessor for OCaml @@ -3766,26 +3664,14 @@ standard iterator type starting from 4.07.") (sha256 (base32 "1pdb0mr6z5ax6szblr3f5lbdnqq9grm97cmsfjmdma60yrx2rqhd")))) - (build-system ocaml-build-system) + (build-system dune-build-system) (arguments `(#:tests? #f - #:phases - (modify-phases %standard-phases - (delete 'configure) - (replace 'build - (lambda _ - (invoke "dune" "build" "@install" "--profile" "release") - #t)) - (replace 'install - (lambda* (#:key outputs #:allow-other-keys) - (invoke "dune" "install" - "--prefix" (assoc-ref outputs "out")) - #t))))) + #:build-flags (list "--profile" "release"))) (propagated-inputs `(("ocaml-seq" ,ocaml-seq))) (native-inputs - `(("dune" ,dune) - ("ounit" ,ocaml-ounit))) + `(("ounit" ,ocaml-ounit))) (home-page "https://github.com/ocaml/ocaml-re/") (synopsis "Regular expression library for OCaml") (description "Pure OCaml regular expressions with: @@ -4518,23 +4404,11 @@ the plugins facilitate extensibility, and the frontends serve as entry points.") (sha256 (base32 "01ssjrqz41jvrqh27jxnh9cx7ywi9b5sgsykd00i7z9nrcwhlfy2")))) - (build-system ocaml-build-system) + (build-system dune-build-system) (native-inputs - `(("camlp4" ,camlp4) - ("dune" ,dune))) + `(("camlp4" ,camlp4))) (arguments - `(#:phases - (modify-phases %standard-phases - (delete 'configure) - (replace 'build - (lambda _ - (invoke "dune" "build" "@install" "--profile" "release") - #t)) - (replace 'install - (lambda* (#:key outputs #:allow-other-keys) - (invoke "dune" "install" - "--prefix" (assoc-ref outputs "out")) - #t))) + `(#:build-flags (list "--profile" "realease") #:tests? #f)) (synopsis "Comprehensive Unicode library") (description "Camomile is a Unicode library for OCaml. Camomile provides @@ -4635,23 +4509,10 @@ connect an engine to your inputs and rendering functions to get an editor.") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 "1hy5ryagqclgdm9lzh1qil5mrynlypv7mn6qm858hdcnmz9zzn0l")))) - (build-system ocaml-build-system) + (build-system dune-build-system) (arguments - `(#:phases - (modify-phases %standard-phases - (delete 'configure) - (replace 'build - (lambda _ - (invoke "dune" "build" "@install" "--profile" "release") - #t)) - (replace 'install - (lambda* (#:key outputs #:allow-other-keys) - (invoke "dune" "install" - "--prefix" (assoc-ref outputs "out")) - #t))) + `(#:build-flags (list "--profile" "release") #:tests? #f)) - (native-inputs - `(("dune" ,dune))) (propagated-inputs `(("lwt" ,ocaml-lwt) ("lwt-log" ,ocaml-lwt-log) @@ -5129,3 +4990,118 @@ provides BigN, BigZ, BigQ that used to be part of Coq standard library.") simplifying the proofs of inequalities on expressions of real numbers for the Coq proof assistant.") (license license:cecill-c))) + +(define-public dedukti + (package + (name "dedukti") + (version "2.6.0") + (home-page "https://deducteam.github.io/") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/deducteam/dedukti.git") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0frl3diff033i4fmq304b8wbsdnc9mvlhmwd7a3zd699ng2lzbxb")))) + (inputs + `(("menhir" ,ocaml-menhir))) + (native-inputs + `(("ocamlbuild" ,ocamlbuild))) + (build-system ocaml-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (delete 'configure) + (replace 'build + (lambda _ + (invoke "make") + #t)) + (replace 'check + (lambda _ + (invoke "make" "tests") + #t)) + (add-before 'install 'set-binpath + ;; Change binary path in the makefile + (lambda _ + (let ((out (assoc-ref %outputs "out"))) + (substitute* "GNUmakefile" + (("BINDIR = (.*)$") + (string-append "BINDIR = " out "/bin")))) + #t)) + (replace 'install + (lambda _ + (invoke "make" "install") + #t))))) + (synopsis "Proof-checker for the λΠ-calculus modulo theory, an extension of +the λ-calculus") + (description "Dedukti is a proof-checker for the λΠ-calculus modulo +theory. The λΠ-calculus is an extension of the simply typed λ-calculus with +dependent types. The λΠ-calculus modulo theory is itself an extension of the +λΠ-calculus where the context contains variable declaration as well as rewrite +rules. This system is not designed to develop proofs, but to check proofs +developed in other systems. In particular, it enjoys a minimalistic syntax.") + (license license:cecill-c))) + +(define-public ocaml-biniou + (package + (name "ocaml-biniou") + (version "1.2.0") + (home-page "https://github.com/mjambon/biniou") + (source + (origin + (method git-fetch) + (uri (git-reference + (url (string-append home-page ".git")) + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0mjpgwyfq2b2izjw0flmlpvdjgqpq8shs89hxj1np2r50csr8dcb")))) + (build-system dune-build-system) + (inputs + `(("ocaml-easy-format" ,ocaml-easy-format))) + (native-inputs + `(("which" ,which))) + (synopsis "Data format designed for speed, safety, ease of use and backward +compatibility") + (description "Biniou (pronounced \"be new\" is a binary data format +designed for speed, safety, ease of use and backward compatibility as +protocols evolve. Biniou is vastly equivalent to JSON in terms of +functionality but allows implementations several times faster (4 times faster +than yojson), with 25-35% space savings.") + (license license:bsd-3))) + +(define-public ocaml-yojson + (package + (name "ocaml-yojson") + (version "1.4.1") + (home-page "https://github.com/ocaml-community/yojson") + (source + (origin + (method git-fetch) + (uri (git-reference + (url (string-append home-page ".git")) + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0nwsfkmqpyfab4rxq76q8ff7giyanghw08094jyrp275v99zdjr9")))) + (build-system dune-build-system) + (arguments + `(#:test-target ".")) + (inputs + `(("ocaml-biniou" ,ocaml-biniou) + ("ocaml-easy-format" ,ocaml-easy-format))) + (native-inputs + `(("ocaml-cppo" ,ocaml-cppo))) + (synopsis "Low-level JSON library for OCaml") + (description "Yojson is an optimized parsing and printing library for the +JSON format. It addresses a few shortcomings of json-wheel including 2x +speedup, polymorphic variants and optional syntax for tuples and variants. +@code{ydump} is a pretty printing command-line program provided with the +yojson package. The program @code{atdgen} can be used to derive OCaml-JSON +serializers and deserializers from type definitions.") + (license license:bsd-3))) diff --git a/gnu/packages/opencl.scm b/gnu/packages/opencl.scm index da979253b0..a90b17cee3 100644 --- a/gnu/packages/opencl.scm +++ b/gnu/packages/opencl.scm @@ -240,7 +240,7 @@ the system.") ("llvm@3.7" ,llvm-3.7) ("libdrm" ,libdrm) ("libedit" ,libedit) - ("libpthread-stubs", libpthread-stubs) + ("libpthread-stubs" ,libpthread-stubs) ("libsm" ,libsm) ("libva" ,libva) ("libxfixes" ,libxfixes) diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm index c5ba65a863..85c95a75e9 100644 --- a/gnu/packages/package-management.scm +++ b/gnu/packages/package-management.scm @@ -50,6 +50,7 @@ #:use-module (gnu packages gnupg) #:use-module (gnu packages gnuzilla) #:use-module (gnu packages graphviz) + #:use-module (gnu packages gtk) #:use-module (gnu packages guile) #:use-module (gnu packages linux) #:use-module (gnu packages lisp) @@ -68,8 +69,10 @@ #:use-module (gnu packages time) #:use-module (gnu packages tls) #:use-module (gnu packages vim) + #:use-module (gnu packages virtualization) #:use-module (gnu packages web) #:use-module (gnu packages xml) + #:use-module (gnu packages xorg) #:use-module (guix build-system emacs) #:use-module (guix build-system gnu) #:use-module (guix build-system meson) @@ -101,8 +104,8 @@ ;; Latest version of Guix, which may or may not correspond to a release. ;; Note: the 'update-guix-package.scm' script expects this definition to ;; start precisely like this. - (let ((version "0.15.0") - (commit "71a78ba65b00ad1f27086a3dcdded7dc4326ade1") + (let ((version "0.16.0") + (commit "7ba2b27467a39956f10e2e11061d9569e4b7d632") (revision 8)) (package (name "guix") @@ -119,7 +122,7 @@ (commit commit))) (sha256 (base32 - "0isagzccfxjqrc38wamknvh0jzv1pjh0wq5baj9jzwl07xkrc0hc")) + "14srgkl0vyr6q7azv76nncp63gngmm71y18ybyj9f6l6s4shbcm4")) (file-name (string-append "guix-" version "-checkout")))) (build-system gnu-build-system) (arguments @@ -316,6 +319,7 @@ the Nix package manager.") (inputs `(("gnutls" ,gnutls) ("guile-git" ,guile-git) + ("guile-json" ,guile-json) ("guile-gcrypt" ,guile-gcrypt) ,@(fold alist-delete (package-inputs guix) '("boot-guile" "boot-guile/i686" "util-linux")))) @@ -933,15 +937,15 @@ for packaging and deployment of cross-compiled Windows applications.") (define-public libostree (package (name "libostree") - (version "2018.7") + (version "2018.9.1") (source (origin (method url-fetch) (uri (string-append "https://github.com/ostreedev/ostree/releases/download/v" - version "/libostree-" version ".tar.xz")) + (version-major+minor version) "/libostree-" version ".tar.xz")) (sha256 (base32 - "1nc310lv36psxn5yslkxlgi9gjxwqpwqzkg2pldgpwrlv6gkagj8")))) + "01mygpkbl9sk2vr3hjbpih6qlg8lwx0q5lklm09f7jfwfpnwyqzj")))) (build-system gnu-build-system) (arguments '(#:phases @@ -983,3 +987,51 @@ tools that combines a \"git-like\" model for committing and downloading bootable filesystem trees, along with a layer for deploying them and managing the bootloader configuration.") (license license:lgpl2.0+))) + +(define-public flatpak + (package + (name "flatpak") + (version "1.1.0") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/flatpak/flatpak/releases/download/" + version "/flatpak-" version ".tar.xz")) + (sha256 + (base32 + "0bkjwh49kajyd78vdh0g9arb352a7rccaifas9zxa78phhja2v2p")))) + (build-system gnu-build-system) + (arguments + '(#:tests? #f ;; Tests fail due to trying to create files where it can't. + #:configure-flags (list + "--enable-documentation=no" ;; FIXME + "--enable-system-helper=no" + "--localstatedir=/var" + (string-append "--with-system-bubblewrap=" + (assoc-ref %build-inputs "bubblewrap") + "/bin/bwrap")))) + (native-inputs `(("bison" ,bison) + ("gettext" ,gnu-gettext) + ("glib:bin" ,glib "bin") ; for glib-mkenums + gdbus-codegen + ("gobject-introspection" ,gobject-introspection) + ("libcap" ,libcap) + ("pkg-config" ,pkg-config))) + (inputs `(("appstream-glib" ,appstream-glib) + ("bubblewrap" ,bubblewrap) + ("gdk-pixbuf" ,gdk-pixbuf) + ("gpgme" ,gpgme) + ("json-glib" ,json-glib) + ("libarchive" ,libarchive) + ("libostree" ,libostree) + ("libseccomp" ,libseccomp) + ("libsoup" ,libsoup) + ("libxau" ,libxau) + ("libxml2" ,libxml2) + ("nettle" ,nettle) + ("util-linux" ,util-linux))) + (home-page "https://flatpak.org") + (synopsis "System for building, distributing, and running sandboxed desktop +applications") + (description "Flatpak is a system for building, distributing, and running +sandboxed desktop applications on GNU/Linux.") + (license license:lgpl2.1+))) diff --git a/gnu/packages/parallel.scm b/gnu/packages/parallel.scm index df8ac180b3..25d3c0737c 100644 --- a/gnu/packages/parallel.scm +++ b/gnu/packages/parallel.scm @@ -48,7 +48,7 @@ (define-public parallel (package (name "parallel") - (version "20181122") + (version "20181222") (source (origin (method url-fetch) @@ -56,7 +56,7 @@ version ".tar.bz2")) (sha256 (base32 - "1mcqymf6vg8jhnjv71sswcz5xrwpq2h2ishi8m1hz8rwhc65h1ig")))) + "0sd39nzgff3rpyzfwkffb5yxbdm5r6amrkslbgpjlrcrymy9z305")))) (build-system gnu-build-system) (arguments `(#:phases diff --git a/gnu/packages/patches/allegro-fix-compilation-mesa-18.2.5-and-later.patch b/gnu/packages/patches/allegro-fix-compilation-mesa-18.2.5-and-later.patch new file mode 100644 index 0000000000..fa273a5dfa --- /dev/null +++ b/gnu/packages/patches/allegro-fix-compilation-mesa-18.2.5-and-later.patch @@ -0,0 +1,41 @@ +Fixes compilation with Mesa >= 18.2.5. + +Taken from upstream: + +https://github.com/liballeg/allegro5/commit/a40d30e21802ecf5c9382cf34af9b01bd3781e47 + +diff --git a/include/allegro5/allegro_opengl.h b/include/allegro5/allegro_opengl.h +index 0f86a6768..652dd024e 100644 +--- a/include/allegro5/allegro_opengl.h ++++ b/include/allegro5/allegro_opengl.h +@@ -103,10 +103,14 @@ + + /* HACK: Prevent both Mesa and SGI's broken headers from screwing us */ + #define __glext_h_ ++#define __gl_glext_h_ + #define __glxext_h_ ++#define __glx_glxext_h_ + #include <GL/gl.h> + #undef __glext_h_ ++#undef __gl_glext_h_ + #undef __glxext_h_ ++#undef __glx_glxext_h_ + + #endif /* ALLEGRO_MACOSX */ + +diff --git a/include/allegro5/opengl/GLext/glx_ext_defs.h b/include/allegro5/opengl/GLext/glx_ext_defs.h +index 49c502091..fba8aea5d 100644 +--- a/include/allegro5/opengl/GLext/glx_ext_defs.h ++++ b/include/allegro5/opengl/GLext/glx_ext_defs.h +@@ -1,7 +1,9 @@ + /* HACK: Prevent both Mesa and SGI's broken headers from screwing us */ + #define __glxext_h_ ++#define __glx_glxext_h_ + #include <GL/glx.h> + #undef __glxext_h_ ++#undef __glx_glxext_h_ + + #ifndef GLX_VERSION_1_3 + #define _ALLEGRO_GLX_VERSION_1_3 +-- +2.20.0 diff --git a/gnu/packages/patches/ansible-wrap-program-hack.patch b/gnu/packages/patches/ansible-wrap-program-hack.patch deleted file mode 100644 index c2e1028392..0000000000 --- a/gnu/packages/patches/ansible-wrap-program-hack.patch +++ /dev/null @@ -1,22 +0,0 @@ -Ansible changes its behaviour depending on the name of the script that it is -called as. Make it deal with guix' .real wrapper scripts. - -FIXME: Remove once wrapping ansible works properly. -See http://lists.gnu.org/archive/html/bug-guix/2017-05/msg00015.html. ---- ansible-2.3.0.0/bin/ansible 2017-04-12 16:08:05.000000000 +0200 -+++ ansible-2.3.0.0-fixed/bin/ansible 2017-05-21 20:11:18.720872385 +0200 -@@ -75,7 +75,13 @@ - # sometimes add that - target = target[:-1] - -- if len(target) > 1: -+ if target[-1] == "real" and target[0].startswith('.'): -+ target = target[:-1] -+ target[0] = target[0][1:] -+ if len(target) > 1 and target[1] != "real" : -+ sub = target[1] -+ myclass = "%sCLI" % sub.capitalize() -+ elif len(target) > 2 and target[2] == "real" : - sub = target[1] - myclass = "%sCLI" % sub.capitalize() - elif target[0] == 'ansible': diff --git a/gnu/packages/patches/borg-respect-storage-quota.patch b/gnu/packages/patches/borg-respect-storage-quota.patch deleted file mode 100644 index d23d1ffc01..0000000000 --- a/gnu/packages/patches/borg-respect-storage-quota.patch +++ /dev/null @@ -1,32 +0,0 @@ -Make sure the client respects the storage quota set by the server: - -https://github.com/borgbackup/borg/issues/4093 - -Patch copied from upstream source repository: - -https://github.com/borgbackup/borg/commit/975cc33206e0e3644626fb7204c34d2157715b61 - -From 975cc33206e0e3644626fb7204c34d2157715b61 Mon Sep 17 00:00:00 2001 -From: Manu <manu@snapdragon.cc> -Date: Wed, 3 Oct 2018 23:47:36 +0800 -Subject: [PATCH] Add storage_quota for forced_result if set by serve command. - ---- - src/borg/archiver.py | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/borg/archiver.py b/src/borg/archiver.py -index 916725e7..279194c1 100644 ---- a/src/borg/archiver.py -+++ b/src/borg/archiver.py -@@ -4276,6 +4276,7 @@ def get_args(self, argv, cmd): - result.restrict_to_paths = forced_result.restrict_to_paths - result.restrict_to_repositories = forced_result.restrict_to_repositories - result.append_only = forced_result.append_only -+ result.storage_quota = forced_result.storage_quota - return result - - def parse_args(self, args=None): --- -2.19.1 - diff --git a/gnu/packages/patches/datamash-arm-tests.patch b/gnu/packages/patches/datamash-arm-tests.patch deleted file mode 100644 index a24c5320ad..0000000000 --- a/gnu/packages/patches/datamash-arm-tests.patch +++ /dev/null @@ -1,71 +0,0 @@ -See https://lists.gnu.org/archive/html/bug-datamash/2018-03/msg00003.html and -https://lists.gnu.org/archive/html/bug-datamash/2018-03/txt4DmvR7p6J9.txt - -From d446dba317aa067440d6312d955d523129949327 Mon Sep 17 00:00:00 2001 -From: Assaf Gordon <address@hidden> -Date: Thu, 22 Mar 2018 11:00:34 -0600 -Subject: [PATCH 1/2] tests: fix --format='%4000f' expected output - -Can be 1.000009... or 1.000008999, depending on representation. - -* tests/datamash-output-format.pl: Check only the first 5 digits. ---- - tests/datamash-output-format.pl | 9 +++++---- - 1 file changed, 5 insertions(+), 4 deletions(-) - -diff --git a/tests/datamash-output-format.pl b/tests/datamash-output-format.pl -index 52c68a2..ca99bb0 100755 ---- a/tests/datamash-output-format.pl -+++ b/tests/datamash-output-format.pl -@@ -98,12 +98,13 @@ my @Tests = - {OUT => "0" x 3999 . "1\n"}], - - # due to binary floating representation, some decimal point digits won't be -- # zero (e.g. 1.0000090000000000000000000000000523453254320000000...). -- # The OUT_SUBST replaces exactly 3994 digits (as expected from the format) -+ # zero (e.g. 1.0000090000000000000000000000000523453254320000000... or -+ # 1.000008999999...). -+ # The OUT_SUBST replaces exactly 3995 digits (as expected from the format) - # with an "X". - ['m2', '--format "%.4000f" sum 1', {IN_PIPE=>$in1}, -- {OUT => "1.000009X\n"}, -- {OUT_SUBST => 's/^(1\.000009)([0-9]{3994})$/\1X/'}], -+ {OUT => "1.00000X\n"}, -+ {OUT_SUBST => 's/^(1\.00000)([0-9]{3995})$/\1X/'}], - - ); - --- -2.7.4 - - -From f4871963974a96d6e69cb80b9c2fac7ff0c1d472 Mon Sep 17 00:00:00 2001 -From: Assaf Gordon <address@hidden> -Date: Thu, 22 Mar 2018 11:18:13 -0600 -Subject: [PATCH 2/2] tests: disable --format="%a" test - -Valid output can differ (e.g. 0x8.000p-3 vs 0x1.000p+0). - -* tests/datamash-output-format.pl: Disable 'a1' test. ---- - tests/datamash-output-format.pl | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/tests/datamash-output-format.pl b/tests/datamash-output-format.pl -index ca99bb0..5e90ae0 100755 ---- a/tests/datamash-output-format.pl -+++ b/tests/datamash-output-format.pl -@@ -90,7 +90,9 @@ my @Tests = - ['e2', '--format "%.3e" sum 1', {IN_PIPE=>$in1}, {OUT=>"1.000e+00\n"}], - - # Test Custom formats: %a -- ['a1', '--format "%0.3a" sum 1', {IN_PIPE=>$in1}, {OUT=>"0x8.000p-3\n"}], -+ # Disable the test for now. Valid output can differ (e.g. 0x8.000p-3 and -+ # 0x1.000p0 ). -+ # ['a1', '--format "%0.3a" sum 1', {IN_PIPE=>$in1}, {OUT=>"0x8.000p-3\n"}], - - - # Custom formats can use lots of memory --- -2.7.4 - diff --git a/gnu/packages/patches/elogind-glibc-2.27.patch b/gnu/packages/patches/elogind-glibc-2.27.patch deleted file mode 100644 index 4ade587b5e..0000000000 --- a/gnu/packages/patches/elogind-glibc-2.27.patch +++ /dev/null @@ -1,22 +0,0 @@ -Look for memfd_create in sys/mman.h instead of linux/memfd.h. -Needed to build with glibc-2.27. - ---- a/configure.ac 1969-12-31 19:00:00.000000000 -0500 -+++ b/configure.ac 2018-03-27 23:54:15.414589005 -0400 -@@ -360,7 +360,7 @@ - # ------------------------------------------------------------------------------ - - AC_CHECK_HEADERS([sys/capability.h], [], [AC_MSG_ERROR([*** POSIX caps headers not found])]) --AC_CHECK_HEADERS([linux/memfd.h], [], []) -+AC_CHECK_HEADERS([sys/mman.h], [], []) - - AC_CHECK_HEADERS([printf.h], [have_printf_h=yes], [have_printf_h=no]) - AS_IF([test x$have_printf_h = xyes], [ -@@ -395,6 +395,7 @@ - [], [], [[ - #include <sys/types.h> - #include <unistd.h> -+#include <sys/mman.h> - #include <sys/mount.h> - #include <fcntl.h> - #include <sched.h> diff --git a/gnu/packages/patches/emacs-wordnut-require-adaptive-wrap.patch b/gnu/packages/patches/emacs-wordnut-require-adaptive-wrap.patch new file mode 100644 index 0000000000..be10254c33 --- /dev/null +++ b/gnu/packages/patches/emacs-wordnut-require-adaptive-wrap.patch @@ -0,0 +1,20 @@ +Copyright © 2018 Mathieu Othacehe <m.othacehe@gmail.com> + +This patch forces the use of adaptive-wrap. This feature is optional but we +prefer to enable it by default. + +diff --git a/wordnut.el b/wordnut.el +index 0ae86ad..72f9221 100644 +--- a/wordnut.el ++++ b/wordnut.el +@@ -4,6 +4,7 @@ + (require 'subr-x) + (require 'outline) + (require 'imenu) ++(require 'adaptive-wrap) + + (require 'wordnut-history) + +-- +2.17.1 + diff --git a/gnu/packages/patches/file-CVE-2018-10360.patch b/gnu/packages/patches/file-CVE-2018-10360.patch new file mode 100644 index 0000000000..9285611c04 --- /dev/null +++ b/gnu/packages/patches/file-CVE-2018-10360.patch @@ -0,0 +1,27 @@ +https://github.com/file/file/commit/a642587a9c9e2dd7feacdf513c3643ce26ad3c22.patch +The leading part of the patch starting at line 27 was trimmed off. +This patch should be OK to drop with file@5.35. + +From a642587a9c9e2dd7feacdf513c3643ce26ad3c22 Mon Sep 17 00:00:00 2001 +From: Christos Zoulas <christos@zoulas.com> +Date: Sat, 9 Jun 2018 16:00:06 +0000 +Subject: [PATCH] Avoid reading past the end of buffer (Rui Reis) + +--- + src/readelf.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/src/readelf.c b/src/readelf.c +index 79c83f9f5..1f41b4611 100644 +--- a/src/readelf.c ++++ b/src/readelf.c +@@ -842,7 +842,8 @@ do_core_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type, + + cname = (unsigned char *) + &nbuf[doff + prpsoffsets(i)]; +- for (cp = cname; *cp && isprint(*cp); cp++) ++ for (cp = cname; cp < nbuf + size && *cp ++ && isprint(*cp); cp++) + continue; + /* + * Linux apparently appends a space at the end diff --git a/gnu/packages/patches/gcc-libsanitizer-fix.patch b/gnu/packages/patches/gcc-libsanitizer-fix.patch deleted file mode 100644 index 67aa44bed4..0000000000 --- a/gnu/packages/patches/gcc-libsanitizer-fix.patch +++ /dev/null @@ -1,113 +0,0 @@ -https://gcc.gnu.org/git/?p=gcc.git;a=patch;h=8937b94d1a643fd9760714642296d034a45254a8 -https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81066 - -This patch can be removed when gcc-6.5.0 is released - -From 8937b94d1a643fd9760714642296d034a45254a8 Mon Sep 17 00:00:00 2001 -From: doko <doko@138bc75d-0d04-0410-961f-82ee72b054a4> -Date: Thu, 7 Sep 2017 07:15:24 +0000 -Subject: [PATCH] 2017-09-07 Matthias Klose <doko@ubuntu.com> - - Backported from mainline - 2017-07-14 Jakub Jelinek <jakub@redhat.com> - - PR sanitizer/81066 - * sanitizer_common/sanitizer_linux.h: Cherry-pick upstream r307969. - * sanitizer_common/sanitizer_linux.cc: Likewise. - * sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc: Likewise. - * tsan/tsan_platform_linux.cc: Likewise. - - -git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-6-branch@251828 138bc75d-0d04-0410-961f-82ee72b054a4 ---- - libsanitizer/ChangeLog | 11 +++++++++++ - libsanitizer/sanitizer_common/sanitizer_linux.cc | 3 +-- - libsanitizer/sanitizer_common/sanitizer_linux.h | 4 +--- - .../sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc | 2 +- - libsanitizer/tsan/tsan_platform_linux.cc | 2 +- - 5 files changed, 15 insertions(+), 7 deletions(-) - -diff --git a/libsanitizer/ChangeLog b/libsanitizer/ChangeLog -index 252cd09..d988b28 100644 ---- a/libsanitizer/ChangeLog -+++ b/libsanitizer/ChangeLog -@@ -1,3 +1,14 @@ -+2017-09-07 Matthias Klose <doko@ubuntu.com> -+ -+ Backported from mainline -+ 2017-07-14 Jakub Jelinek <jakub@redhat.com> -+ -+ PR sanitizer/81066 -+ * sanitizer_common/sanitizer_linux.h: Cherry-pick upstream r307969. -+ * sanitizer_common/sanitizer_linux.cc: Likewise. -+ * sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc: Likewise. -+ * tsan/tsan_platform_linux.cc: Likewise. -+ - 2017-07-04 Release Manager - - * GCC 6.4.0 released. -diff --git a/libsanitizer/sanitizer_common/sanitizer_linux.cc b/libsanitizer/sanitizer_common/sanitizer_linux.cc -index 2cefa20..223d9c6 100644 ---- a/libsanitizer/sanitizer_common/sanitizer_linux.cc -+++ b/libsanitizer/sanitizer_common/sanitizer_linux.cc -@@ -546,8 +546,7 @@ uptr internal_prctl(int option, uptr arg2, uptr arg3, uptr arg4, uptr arg5) { - } - #endif - --uptr internal_sigaltstack(const struct sigaltstack *ss, -- struct sigaltstack *oss) { -+uptr internal_sigaltstack(const void *ss, void *oss) { - return internal_syscall(SYSCALL(sigaltstack), (uptr)ss, (uptr)oss); - } - -diff --git a/libsanitizer/sanitizer_common/sanitizer_linux.h b/libsanitizer/sanitizer_common/sanitizer_linux.h -index 4497702..1594058 100644 ---- a/libsanitizer/sanitizer_common/sanitizer_linux.h -+++ b/libsanitizer/sanitizer_common/sanitizer_linux.h -@@ -19,7 +19,6 @@ - #include "sanitizer_platform_limits_posix.h" - - struct link_map; // Opaque type returned by dlopen(). --struct sigaltstack; - - namespace __sanitizer { - // Dirent structure for getdents(). Note that this structure is different from -@@ -28,8 +27,7 @@ struct linux_dirent; - - // Syscall wrappers. - uptr internal_getdents(fd_t fd, struct linux_dirent *dirp, unsigned int count); --uptr internal_sigaltstack(const struct sigaltstack* ss, -- struct sigaltstack* oss); -+uptr internal_sigaltstack(const void* ss, void* oss); - uptr internal_sigprocmask(int how, __sanitizer_sigset_t *set, - __sanitizer_sigset_t *oldset); - void internal_sigfillset(__sanitizer_sigset_t *set); -diff --git a/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc b/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc -index c919e4f..014162af 100644 ---- a/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc -+++ b/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc -@@ -267,7 +267,7 @@ static int TracerThread(void* argument) { - - // Alternate stack for signal handling. - InternalScopedBuffer<char> handler_stack_memory(kHandlerStackSize); -- struct sigaltstack handler_stack; -+ stack_t handler_stack; - internal_memset(&handler_stack, 0, sizeof(handler_stack)); - handler_stack.ss_sp = handler_stack_memory.data(); - handler_stack.ss_size = kHandlerStackSize; -diff --git a/libsanitizer/tsan/tsan_platform_linux.cc b/libsanitizer/tsan/tsan_platform_linux.cc -index 09cec5f..908f4fe 100644 ---- a/libsanitizer/tsan/tsan_platform_linux.cc -+++ b/libsanitizer/tsan/tsan_platform_linux.cc -@@ -291,7 +291,7 @@ bool IsGlobalVar(uptr addr) { - int ExtractResolvFDs(void *state, int *fds, int nfd) { - #if SANITIZER_LINUX - int cnt = 0; -- __res_state *statp = (__res_state*)state; -+ struct __res_state *statp = (struct __res_state*)state; - for (int i = 0; i < MAXNS && cnt < nfd; i++) { - if (statp->_u._ext.nsaddrs[i] && statp->_u._ext.nssocks[i] != -1) - fds[cnt++] = statp->_u._ext.nssocks[i]; --- -2.9.3 - diff --git a/gnu/packages/patches/glibc-hurd-magic-pid.patch b/gnu/packages/patches/glibc-hurd-magic-pid.patch new file mode 100644 index 0000000000..a6849f7d35 --- /dev/null +++ b/gnu/packages/patches/glibc-hurd-magic-pid.patch @@ -0,0 +1,190 @@ +This patch implements "magic" lookup for "pid/…", as used when looking up +/proc/self. + +The patch comes from the 't/magic-pid' branch +at <https://git.savannah.gnu.org/cgit/hurd/glibc.git>. It squashes +commit 392e52286a302ca6157fbd221295e64ab6b6d8ba (by Justus Winter) +and commit 392e52286a302ca6157fbd221295e64ab6b6d8ba (a subsequent fix by +Samuel Thibault). + +From: Justus Winter <4winter@informatik.uni-hamburg.de> +Subject: [PATCH] hurd: Handle `pid' magical lookup retry + + * hurd/lookup-retry.c: Handle `pid' magical lookup + retry. + +diff --git a/hurd/lookup-retry.c b/hurd/lookup-retry.c +index aee2ba8f93..6ed8de1653 100644 +--- a/hurd/lookup-retry.c ++++ b/hurd/lookup-retry.c +@@ -25,6 +25,7 @@ + #include <string.h> + #include <_itoa.h> + #include <eloop-threshold.h> ++#include <unistd.h> + + /* Translate the error from dir_lookup into the error the user sees. */ + static inline error_t +@@ -59,6 +60,7 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port) + error_t err; + char *file_name; + int nloops; ++ file_t lastdir = MACH_PORT_NULL; + + error_t lookup_op (file_t startdir) + { +@@ -107,14 +109,15 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port) + { + case FS_RETRY_REAUTH: + if (err = reauthenticate (*result)) +- return err; ++ goto out; + /* Fall through. */ + + case FS_RETRY_NORMAL: + if (nloops++ >= __eloop_threshold ()) + { + __mach_port_deallocate (__mach_task_self (), *result); +- return ELOOP; ++ err = ELOOP; ++ goto out; + } + + /* An empty RETRYNAME indicates we have the final port. */ +@@ -174,7 +177,7 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port) + + if (err) + __mach_port_deallocate (__mach_task_self (), *result); +- return err; ++ goto out; + } + + startdir = *result; +@@ -189,7 +192,10 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port) + if (*result != MACH_PORT_NULL) + __mach_port_deallocate (__mach_task_self (), *result); + if (nloops++ >= __eloop_threshold ()) +- return ELOOP; ++ { ++ err = ELOOP; ++ goto out; ++ } + file_name = &retryname[1]; + break; + +@@ -208,7 +214,8 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port) + (*end != '/' && *end != '\0')) + { + errno = save; +- return ENOENT; ++ err = ENOENT; ++ goto out; + } + if (! get_dtable_port) + err = EGRATUITOUS; +@@ -226,9 +233,12 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port) + } + errno = save; + if (err) +- return err; ++ goto out; + if (*end == '\0') +- return 0; ++ { ++ err = 0; ++ goto out; ++ } + else + { + /* Do a normal retry on the remaining components. */ +@@ -255,9 +265,12 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port) + if (err = __host_info (__mach_host_self (), HOST_BASIC_INFO, + (integer_t *) &hostinfo, + &hostinfocnt)) +- return err; ++ goto out; + if (hostinfocnt != HOST_BASIC_INFO_COUNT) +- return EGRATUITOUS; ++ { ++ err = EGRATUITOUS; ++ goto out; ++ } + p = _itoa (hostinfo.cpu_subtype, &retryname[8], 10, 0); + *--p = '/'; + p = _itoa (hostinfo.cpu_type, &retryname[8], 10, 0); +@@ -293,10 +306,11 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port) + } + + case '\0': +- return opentty (result); ++ err = opentty (result); ++ goto out; + case '/': + if (err = opentty (&startdir)) +- return err; ++ goto out; + strcpy (retryname, &retryname[4]); + break; + default: +@@ -306,14 +320,48 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port) + goto bad_magic; + break; + ++ case 'p': ++ if (retryname[1] == 'i' && retryname[2] == 'd' && ++ (retryname[3] == '/' || retryname[3] == 0)) ++ { ++ char *p, buf[1024]; /* XXX */ ++ size_t len; ++ p = _itoa (__getpid (), &buf[sizeof buf], 10, 0); ++ len = &buf[sizeof buf] - p; ++ memcpy (buf, p, len); ++ strcpy (buf + len, &retryname[3]); ++ strcpy (retryname, buf); ++ ++ /* Do a normal retry on the remaining components. */ ++ __mach_port_mod_refs (__mach_task_self (), lastdir, ++ MACH_PORT_RIGHT_SEND, 1); ++ startdir = lastdir; ++ file_name = retryname; ++ } ++ else ++ goto bad_magic; ++ break; ++ + default: + bad_magic: +- return EGRATUITOUS; ++ err = EGRATUITOUS; ++ goto out; + } + break; + + default: +- return EGRATUITOUS; ++ err = EGRATUITOUS; ++ goto out; ++ } ++ ++ if (MACH_PORT_VALID (*result) && *result != lastdir) ++ { ++ if (MACH_PORT_VALID (lastdir)) ++ __mach_port_deallocate (__mach_task_self (), lastdir); ++ ++ lastdir = *result; ++ __mach_port_mod_refs (__mach_task_self (), lastdir, ++ MACH_PORT_RIGHT_SEND, 1); + } + + if (startdir != MACH_PORT_NULL) +@@ -326,6 +374,10 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port) + err = (*use_init_port) (dirport, &lookup_op); + } while (! err); + ++out: ++ if (MACH_PORT_VALID (lastdir)) ++ __mach_port_deallocate (__mach_task_self (), lastdir); ++ + return err; + } + weak_alias (__hurd_file_name_lookup_retry, hurd_file_name_lookup_retry) diff --git a/gnu/packages/patches/meandmyshadow-define-paths-earlier.patch b/gnu/packages/patches/meandmyshadow-define-paths-earlier.patch deleted file mode 100644 index 505cbd23fe..0000000000 --- a/gnu/packages/patches/meandmyshadow-define-paths-earlier.patch +++ /dev/null @@ -1,50 +0,0 @@ -From: Tobias Geerinckx-Rice <me@tobias.gr> -Date: Wed, 31 Oct 2018 02:24:26 +0100 -Subject: [PATCH] gnu: meandmyshadow: Define paths earlier. - -The following patch was taken verbatim from the upstream repository[0] -and will be included in the next release. - -[0]: https://github.com/acmepjz/meandmyshadow/pull/29 ---- -From 4847e6b5755258a1e0534f2d4b91dce2ce3b459e Mon Sep 17 00:00:00 2001 -From: Dmitry Marakasov <amdmi3@amdmi3.ru> -Date: Wed, 24 Oct 2018 23:31:19 +0300 -Subject: [PATCH] Define paths earlier in CMakeLists.txt - -At the very least, paths should be defined before Configure_File(), otherwise empty DATAROOTDIR is substituted in config.h ---- - CMakeLists.txt | 13 +++++++------ - 1 file changed, 7 insertions(+), 6 deletions(-) - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index e79639a..6321d9d 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -2,6 +2,13 @@ Project (meandmyshadow) - CMake_Minimum_Required (VERSION 3.1)
- Set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
-
-+#Path options
-+Set (BINDIR "bin" CACHE STRING "Where to install binaries")
-+Set (DATAROOTDIR "${CMAKE_INSTALL_PREFIX}/share" CACHE STRING "Sets the root of data directories to a non-default location")
-+Set (ICONDIR "${DATAROOTDIR}/icons" CACHE STRING "Sets the icon directory for desktop entry to a non-default location.")
-+Set (DESKTOPDIR "${DATAROOTDIR}/applications" CACHE STRING "Sets the desktop file directory for desktop entry to a non-default location.")
-+
-+#Options
- Option (DEBUG_MODE "Compile the game with debug mode enabled" OFF)
- Option (DISABLED_DEBUG_STUFF "Enable this you'll see a lot of annoying script debug messages which will lag the game." OFF)
-
-@@ -164,12 +171,6 @@ Target_Link_Libraries ( - ${LUA_LIBRARIES}
- )
-
--#Path options
--Set (BINDIR "bin" CACHE STRING "Where to install binaries")
--Set (DATAROOTDIR "${CMAKE_INSTALL_PREFIX}/share" CACHE STRING "Sets the root of data directories to a non-default location")
--Set (ICONDIR "${DATAROOTDIR}/icons" CACHE STRING "Sets the icon directory for desktop entry to a non-default location.")
--Set (DESKTOPDIR "${DATAROOTDIR}/applications" CACHE STRING "Sets the desktop file directory for desktop entry to a non-default location.")
--
- #Install locations
- Install (DIRECTORY ${PROJECT_SOURCE_DIR}/data DESTINATION ${DATAROOTDIR}/meandmyshadow/)
- Install (FILES AUTHORS DESTINATION ${DATAROOTDIR}/meandmyshadow/)
diff --git a/gnu/packages/patches/openjdk-10-idlj-reproducibility.patch b/gnu/packages/patches/openjdk-10-idlj-reproducibility.patch new file mode 100644 index 0000000000..b29a06f272 --- /dev/null +++ b/gnu/packages/patches/openjdk-10-idlj-reproducibility.patch @@ -0,0 +1,36 @@ +From a0a0c6a43b88d946f2b5484892cf0209bd7c0e68 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?G=C3=A1bor=20Boskovits?= <boskovits@gmail.com> +Date: Sat, 8 Dec 2018 21:25:31 +0100 +Subject: [PATCH] Make idlj respect SOURCE_DATE_EPOCH. + +--- + .../sun/tools/corba/se/idl/toJavaPortable/Util.java | 13 ++++++++++++- + 1 file changed, 12 insertions(+), 1 deletion(-) + +diff --git a/src/java.corba/share/classes/com/sun/tools/corba/se/idl/toJavaPortable/Util.java b/src/java.corba/share/classes/com/sun/tools/corba/se/idl/toJavaPortable/Util.java +index 7397619f2..583d6b8e4 100644 +--- a/src/java.corba/share/classes/com/sun/tools/corba/se/idl/toJavaPortable/Util.java ++++ b/src/java.corba/share/classes/com/sun/tools/corba/se/idl/toJavaPortable/Util.java +@@ -1146,7 +1146,18 @@ public class Util extends com.sun.tools.corba.se.idl.Util + else + formatter.setTimeZone (java.util.TimeZone.getDefault ()); + +- stream.println ("* " + formatter.format (new Date ())); ++ try { ++ String epoch = System.getenv("SOURCE_DATE_EPOCH"); ++ if(epoch != null) { ++ long unixTime = Long.parseLong(epoch); ++ stream.println ("* " + formatter.format (new Date (unixTime*1000L))); ++ } else { ++ stream.println ("* " + formatter.format (new Date ())); ++ } ++ } catch (Exception e) { ++ //in case of error fall back to default ++ stream.println ("* " + formatter.format (new Date ())); ++ } + + // <daz> + /////////////// +-- +2.19.2 + diff --git a/gnu/packages/patches/polkit-CVE-2018-19788.patch b/gnu/packages/patches/polkit-CVE-2018-19788.patch new file mode 100644 index 0000000000..58cde6c5dc --- /dev/null +++ b/gnu/packages/patches/polkit-CVE-2018-19788.patch @@ -0,0 +1,197 @@ +Fix CVE-2018-19788: + +https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-19788 +https://gitlab.freedesktop.org/polkit/polkit/issues/74 + +Patch copied from upstream source repository: + +https://gitlab.freedesktop.org/polkit/polkit/commit/2cb40c4d5feeaa09325522bd7d97910f1b59e379 + +From 2cb40c4d5feeaa09325522bd7d97910f1b59e379 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl> +Date: Mon, 3 Dec 2018 10:28:58 +0100 +Subject: [PATCH] Allow negative uids/gids in PolkitUnixUser and Group objects + +(uid_t) -1 is still used as placeholder to mean "unset". This is OK, since +there should be no users with such number, see +https://systemd.io/UIDS-GIDS#special-linux-uids. + +(uid_t) -1 is used as the default value in class initialization. + +When a user or group above INT32_MAX is created, the numeric uid or +gid wraps around to negative when the value is assigned to gint, and +polkit gets confused. Let's accept such gids, except for -1. + +A nicer fix would be to change the underlying type to e.g. uint32 to +not have negative values. But this cannot be done without breaking the +API, so likely new functions will have to be added (a +polkit_unix_user_new variant that takes a unsigned, and the same for +_group_new, _set_uid, _get_uid, _set_gid, _get_gid, etc.). This will +require a bigger patch. + +Fixes https://gitlab.freedesktop.org/polkit/polkit/issues/74. +--- + src/polkit/polkitunixgroup.c | 15 +++++++++++---- + src/polkit/polkitunixprocess.c | 12 ++++++++---- + src/polkit/polkitunixuser.c | 13 ++++++++++--- + 3 files changed, 29 insertions(+), 11 deletions(-) + +diff --git a/src/polkit/polkitunixgroup.c b/src/polkit/polkitunixgroup.c +index c57a1aa..309f689 100644 +--- a/src/polkit/polkitunixgroup.c ++++ b/src/polkit/polkitunixgroup.c +@@ -71,6 +71,7 @@ G_DEFINE_TYPE_WITH_CODE (PolkitUnixGroup, polkit_unix_group, G_TYPE_OBJECT, + static void + polkit_unix_group_init (PolkitUnixGroup *unix_group) + { ++ unix_group->gid = -1; /* (git_t) -1 is not a valid GID under Linux */ + } + + static void +@@ -100,11 +101,14 @@ polkit_unix_group_set_property (GObject *object, + GParamSpec *pspec) + { + PolkitUnixGroup *unix_group = POLKIT_UNIX_GROUP (object); ++ gint val; + + switch (prop_id) + { + case PROP_GID: +- unix_group->gid = g_value_get_int (value); ++ val = g_value_get_int (value); ++ g_return_if_fail (val != -1); ++ unix_group->gid = val; + break; + + default: +@@ -131,9 +135,9 @@ polkit_unix_group_class_init (PolkitUnixGroupClass *klass) + g_param_spec_int ("gid", + "Group ID", + "The UNIX group ID", +- 0, ++ G_MININT, + G_MAXINT, +- 0, ++ -1, + G_PARAM_CONSTRUCT | + G_PARAM_READWRITE | + G_PARAM_STATIC_NAME | +@@ -166,9 +170,10 @@ polkit_unix_group_get_gid (PolkitUnixGroup *group) + */ + void + polkit_unix_group_set_gid (PolkitUnixGroup *group, +- gint gid) ++ gint gid) + { + g_return_if_fail (POLKIT_IS_UNIX_GROUP (group)); ++ g_return_if_fail (gid != -1); + group->gid = gid; + } + +@@ -183,6 +188,8 @@ polkit_unix_group_set_gid (PolkitUnixGroup *group, + PolkitIdentity * + polkit_unix_group_new (gint gid) + { ++ g_return_val_if_fail (gid != -1, NULL); ++ + return POLKIT_IDENTITY (g_object_new (POLKIT_TYPE_UNIX_GROUP, + "gid", gid, + NULL)); +diff --git a/src/polkit/polkitunixprocess.c b/src/polkit/polkitunixprocess.c +index 972b777..b02b258 100644 +--- a/src/polkit/polkitunixprocess.c ++++ b/src/polkit/polkitunixprocess.c +@@ -159,9 +159,14 @@ polkit_unix_process_set_property (GObject *object, + polkit_unix_process_set_pid (unix_process, g_value_get_int (value)); + break; + +- case PROP_UID: +- polkit_unix_process_set_uid (unix_process, g_value_get_int (value)); ++ case PROP_UID: { ++ gint val; ++ ++ val = g_value_get_int (value); ++ g_return_if_fail (val != -1); ++ polkit_unix_process_set_uid (unix_process, val); + break; ++ } + + case PROP_START_TIME: + polkit_unix_process_set_start_time (unix_process, g_value_get_uint64 (value)); +@@ -239,7 +244,7 @@ polkit_unix_process_class_init (PolkitUnixProcessClass *klass) + g_param_spec_int ("uid", + "User ID", + "The UNIX user ID", +- -1, ++ G_MININT, + G_MAXINT, + -1, + G_PARAM_CONSTRUCT | +@@ -303,7 +308,6 @@ polkit_unix_process_set_uid (PolkitUnixProcess *process, + gint uid) + { + g_return_if_fail (POLKIT_IS_UNIX_PROCESS (process)); +- g_return_if_fail (uid >= -1); + process->uid = uid; + } + +diff --git a/src/polkit/polkitunixuser.c b/src/polkit/polkitunixuser.c +index 8bfd3a1..234a697 100644 +--- a/src/polkit/polkitunixuser.c ++++ b/src/polkit/polkitunixuser.c +@@ -72,6 +72,7 @@ G_DEFINE_TYPE_WITH_CODE (PolkitUnixUser, polkit_unix_user, G_TYPE_OBJECT, + static void + polkit_unix_user_init (PolkitUnixUser *unix_user) + { ++ unix_user->uid = -1; /* (uid_t) -1 is not a valid UID under Linux */ + unix_user->name = NULL; + } + +@@ -112,11 +113,14 @@ polkit_unix_user_set_property (GObject *object, + GParamSpec *pspec) + { + PolkitUnixUser *unix_user = POLKIT_UNIX_USER (object); ++ gint val; + + switch (prop_id) + { + case PROP_UID: +- unix_user->uid = g_value_get_int (value); ++ val = g_value_get_int (value); ++ g_return_if_fail (val != -1); ++ unix_user->uid = val; + break; + + default: +@@ -144,9 +148,9 @@ polkit_unix_user_class_init (PolkitUnixUserClass *klass) + g_param_spec_int ("uid", + "User ID", + "The UNIX user ID", +- 0, ++ G_MININT, + G_MAXINT, +- 0, ++ -1, + G_PARAM_CONSTRUCT | + G_PARAM_READWRITE | + G_PARAM_STATIC_NAME | +@@ -182,6 +186,7 @@ polkit_unix_user_set_uid (PolkitUnixUser *user, + gint uid) + { + g_return_if_fail (POLKIT_IS_UNIX_USER (user)); ++ g_return_if_fail (uid != -1); + user->uid = uid; + } + +@@ -196,6 +201,8 @@ polkit_unix_user_set_uid (PolkitUnixUser *user, + PolkitIdentity * + polkit_unix_user_new (gint uid) + { ++ g_return_val_if_fail (uid != -1, NULL); ++ + return POLKIT_IDENTITY (g_object_new (POLKIT_TYPE_UNIX_USER, + "uid", uid, + NULL)); +-- +2.18.1 + diff --git a/gnu/packages/patches/quilt-compat-getopt-fix-option-with-nondigit-param.patch b/gnu/packages/patches/quilt-getopt-nondigit-param.patch index 6bbec67e75..6bbec67e75 100644 --- a/gnu/packages/patches/quilt-compat-getopt-fix-option-with-nondigit-param.patch +++ b/gnu/packages/patches/quilt-getopt-nondigit-param.patch diff --git a/gnu/packages/patches/quilt-compat-getopt-fix-second-separator.patch b/gnu/packages/patches/quilt-getopt-second-separator.patch index cde2c8d41c..cde2c8d41c 100644 --- a/gnu/packages/patches/quilt-compat-getopt-fix-second-separator.patch +++ b/gnu/packages/patches/quilt-getopt-second-separator.patch diff --git a/gnu/packages/patches/ruby-coffee-rails-fix-rakefile.patch b/gnu/packages/patches/ruby-coffee-rails-fix-rakefile.patch new file mode 100644 index 0000000000..bd98812da7 --- /dev/null +++ b/gnu/packages/patches/ruby-coffee-rails-fix-rakefile.patch @@ -0,0 +1,20 @@ +diff --git a/Rakefile b/Rakefile +index ae682dc..fdf146d 100644 +--- a/Rakefile ++++ b/Rakefile +@@ -13,12 +13,12 @@ end + task default: :test + + specname = "coffee-rails.gemspec" +-deps = `git ls-files`.split("\n") - [specname] ++deps = `find . -type f -print0 |sort`.split("\n") - [specname] + + file specname => deps do + files = ["CHANGELOG.md", "MIT-LICENSE", "README.md"] + `git ls-files -- lib`.split("\n") +- test_files = `git ls-files -- {test,spec,features}/*`.split("\n") +- executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) } ++ test_files = `ls test/*`.split("\n") ++ executables = [] + + require 'erb' + diff --git a/gnu/packages/patches/ruby-listen-3.0.8-patch-gemspec.patch b/gnu/packages/patches/ruby-listen-3.0.8-patch-gemspec.patch new file mode 100644 index 0000000000..e870c060a5 --- /dev/null +++ b/gnu/packages/patches/ruby-listen-3.0.8-patch-gemspec.patch @@ -0,0 +1,16 @@ +diff --git a/listen.gemspec b/listen.gemspec +index ee1316e..067dca3 100644 +--- a/listen.gemspec ++++ b/listen.gemspec +@@ -14,9 +14,8 @@ Gem::Specification.new do |s| + s.description = 'The Listen gem listens to file modifications and '\ + 'notifies you about the changes. Works everywhere!' + +- s.files = `git ls-files -z`.split("\x0").select do |f| +- /^(?:bin|lib)\// =~ f +- end + %w(CHANGELOG.md CONTRIBUTING.md LICENSE.txt README.md) ++ s.files = `find bin lib -type f |sort`.split("\n") + ++ %w(CHANGELOG.md CONTRIBUTING.md LICENSE.txt README.md) + + s.test_files = [] + s.executable = 'listen' diff --git a/gnu/packages/patches/ruby-listen-patch-gemspec.patch b/gnu/packages/patches/ruby-listen-patch-gemspec.patch new file mode 100644 index 0000000000..dd4b190b3e --- /dev/null +++ b/gnu/packages/patches/ruby-listen-patch-gemspec.patch @@ -0,0 +1,16 @@ +diff --git a/listen.gemspec b/listen.gemspec +index 4e110b0..cda047b 100644 +--- a/listen.gemspec ++++ b/listen.gemspec +@@ -14,9 +14,8 @@ Gem::Specification.new do |s| + s.description = 'The Listen gem listens to file modifications and '\ + 'notifies you about the changes. Works everywhere!' + +- s.files = `git ls-files -z`.split("\x0").select do |f| +- %r{^(?:bin|lib)\/} =~ f +- end + %w(CHANGELOG.md CONTRIBUTING.md LICENSE.txt README.md) ++ s.files = `find bin lib -type f |sort`.split("\n") + ++ %w(CHANGELOG.md CONTRIBUTING.md LICENSE.txt README.md) + + s.test_files = [] + s.executable = 'listen' diff --git a/gnu/packages/patches/ruby-rspec-its-remove-rspec-gemspec.patch b/gnu/packages/patches/ruby-rspec-its-remove-rspec-gemspec.patch new file mode 100644 index 0000000000..901eb88d21 --- /dev/null +++ b/gnu/packages/patches/ruby-rspec-its-remove-rspec-gemspec.patch @@ -0,0 +1,22 @@ +diff --git a/Gemfile b/Gemfile +index 9786991..bec005d 100644 +--- a/Gemfile ++++ b/Gemfile +@@ -3,17 +3,6 @@ source 'https://rubygems.org' + # Specify your gem's dependencies in rspec-its.gemspec + gemspec + +-%w[rspec rspec-core rspec-expectations rspec-mocks rspec-support].each do |lib| +- branch = ENV.fetch('BRANCH','3-1-maintenance') +- library_path = File.expand_path("../../#{lib}", __FILE__) +- if File.exist?(library_path) +- gem lib, :path => library_path +- else +- gem lib, :git => "git://github.com/rspec/#{lib}.git", +- :branch => branch +- end +-end +- + # test coverage + # gem 'simplecov', :require => false + diff --git a/gnu/packages/patches/ruby-therubyracer-fix-gemspec.patch b/gnu/packages/patches/ruby-therubyracer-fix-gemspec.patch new file mode 100644 index 0000000000..83787192d2 --- /dev/null +++ b/gnu/packages/patches/ruby-therubyracer-fix-gemspec.patch @@ -0,0 +1,16 @@ +diff --git a/therubyracer.gemspec b/therubyracer.gemspec +index 5a6ace7..95e2a27 100644 +--- a/therubyracer.gemspec ++++ b/therubyracer.gemspec +@@ -8,9 +8,8 @@ Gem::Specification.new do |gem| + gem.description = "Call JavaScript code and manipulate JavaScript objects from Ruby. Call Ruby code and manipulate Ruby objects from JavaScript." + gem.homepage = "http://github.com/cowboyd/therubyracer" + +- gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) } +- gem.files = `git ls-files`.split("\n") +- gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n") ++ gem.files = `find . -type f |sort`.split("\n") ++ gem.test_files = `find spec -type f |sort`.split("\n") + gem.name = "therubyracer" + gem.extensions = ["ext/v8/extconf.rb"] + gem.require_paths = ["lib", "ext"] diff --git a/gnu/packages/patches/stumpwm-fix-broken-read-one-line.patch b/gnu/packages/patches/stumpwm-fix-broken-read-one-line.patch new file mode 100644 index 0000000000..f8dac61307 --- /dev/null +++ b/gnu/packages/patches/stumpwm-fix-broken-read-one-line.patch @@ -0,0 +1,45 @@ +From a13db62a4da06426cf2eb2376d1a3723b5ee52d5 Mon Sep 17 00:00:00 2001 +From: Vasily Postnicov <shamaz.mazum@gmail.com> +Date: Fri, 14 Dec 2018 20:01:53 +0300 +Subject: [PATCH] READ-ONE-LINE: Turn COMPLETIONS into a keyword argument + +This keeps READ-ONE-line backwards compatible to changes prior +dae0422811771d179077b9336618f2b19be85b7b. Currently both +ARGUMENT-POP-OR-READ and ARGUMENT-POP-REST-OR-READ are still being +called with the previous lambda list. Update the calls to the +READ-ONE-LINE that used the 'new' lambda list, COMPLETING-READ and +YES-OR-NO-P. + +Closes #538 +--- + input.lisp | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/input.lisp b/input.lisp +index b698a368..7904b35f 100644 +--- a/input.lisp ++++ b/input.lisp +@@ -307,10 +307,13 @@ passed the substring to complete on and is expected to return a list + of matches. If require-match argument is non-nil then the input must + match with an element of the completions." + (check-type completions (or list function symbol)) +- (let ((line (read-one-line screen prompt completions :initial-input initial-input :require-match require-match))) ++ (let ((line (read-one-line screen prompt ++ :completions completions ++ :initial-input initial-input ++ :require-match require-match))) + (when line (string-trim " " line)))) + +-(defun read-one-line (screen prompt completions &key (initial-input "") require-match password) ++(defun read-one-line (screen prompt &key completions (initial-input "") require-match password) + "Read a line of input through stumpwm and return it. Returns nil if the user aborted." + (let ((*input-last-command* nil) + (*input-completions* completions) +@@ -842,6 +845,7 @@ user presses 'y'" + user presses 'yes'" + (loop for line = (read-one-line (current-screen) + (format nil "~a(yes or no) " message) ++ :completions + '("yes" "no")) + until (find line '("yes" "no") :test 'string-equal) + do (message "Please answer yes or no") diff --git a/gnu/packages/patches/vinagre-newer-freerdp.patch b/gnu/packages/patches/vinagre-newer-freerdp.patch new file mode 100644 index 0000000000..ab79fefc5c --- /dev/null +++ b/gnu/packages/patches/vinagre-newer-freerdp.patch @@ -0,0 +1,320 @@ +https://gitlab.gnome.org/GNOME/vinagre/merge_requests/4.patch + +From 83ec3835c36d5cd2c957512c18d21a33b4136c95 Mon Sep 17 00:00:00 2001 +From: Ondrej Holy <oholy@redhat.com> +Date: Tue, 20 Nov 2018 14:57:17 +0100 +Subject: [PATCH 1/2] Fix build with recent FreeRDP versions + +Vinagre is not buildable with recent FreeRDP versions and similar patches +are used by distributions to fix that. I have also removed some old +compatibility codes, because it wasn't buildable against 1.0, nor 1.1 +anyway and 1.2 has never been officially released and is superseded by 2.0. + +https://gitlab.gnome.org/GNOME/vinagre/issues/4 +--- + configure.ac | 7 +- + plugins/rdp/vinagre-rdp-tab.c | 129 +++++++--------------------------- + 2 files changed, 27 insertions(+), 109 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 5b51a82..61617f1 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -58,16 +58,15 @@ AS_IF([test "x$have_ssh" = "xyes"], + AM_CONDITIONAL([VINAGRE_ENABLE_SSH], [test "x$have_ssh" = "xyes"]) + + # Whether to enable support for RDP. +-RDP_DEPS="freerdp x11" ++RDP_DEPS="freerdp2 x11" ++ + AC_ARG_ENABLE([rdp], + [AS_HELP_STRING([--disable-rdp], + [Disable Remote Desktop Protocol (RDP) support])]) + + AS_IF([test "x$enable_rdp" != "xno"], + [PKG_CHECK_EXISTS([$RDP_DEPS], +- [have_rdp=yes +- PKG_CHECK_EXISTS(freerdp >= 1.1, +- [AC_DEFINE([HAVE_FREERDP_1_1], [1], [FreeRDP is of version 1.1 or newer])], [])], ++ [have_rdp=yes], + [have_rdp=no])], + [have_rdp=no]) + +diff --git a/plugins/rdp/vinagre-rdp-tab.c b/plugins/rdp/vinagre-rdp-tab.c +index 5b98c24..28e3eb6 100644 +--- a/plugins/rdp/vinagre-rdp-tab.c ++++ b/plugins/rdp/vinagre-rdp-tab.c +@@ -29,12 +29,7 @@ + #include <freerdp/types.h> + #include <freerdp/freerdp.h> + #include <freerdp/gdi/gdi.h> +-#if HAVE_FREERDP_1_1 + #include <freerdp/locale/keyboard.h> +-#else +-#include <freerdp/kbd/vkcodes.h> +-#include <gdk/gdkx.h> +-#endif + + #include "vinagre-rdp-tab.h" + #include "vinagre-rdp-connection.h" +@@ -44,12 +39,6 @@ + + #define SELECT_TIMEOUT 50 + +-#if !HAVE_FREERDP_1_1 +-typedef boolean BOOL; +-typedef uint8 UINT8; +-typedef uint16 UINT16; +-#endif +- + struct _VinagreRdpTabPrivate + { + freerdp *freerdp_session; +@@ -476,16 +465,18 @@ frdp_drawing_area_draw (GtkWidget *area, + return TRUE; + } + +-static void ++static BOOL + frdp_begin_paint (rdpContext *context) + { + rdpGdi *gdi = context->gdi; + + gdi->primary->hdc->hwnd->invalid->null = 1; + gdi->primary->hdc->hwnd->ninvalid = 0; ++ ++ return TRUE; + } + +-static void ++static BOOL + frdp_end_paint (rdpContext *context) + { + VinagreRdpTab *rdp_tab = ((frdpContext *) context)->rdp_tab; +@@ -495,7 +486,7 @@ frdp_end_paint (rdpContext *context) + gint x, y, w, h; + + if (gdi->primary->hdc->hwnd->invalid->null) +- return; ++ return TRUE; + + x = gdi->primary->hdc->hwnd->invalid->x; + y = gdi->primary->hdc->hwnd->invalid->y; +@@ -517,6 +508,8 @@ frdp_end_paint (rdpContext *context) + { + gtk_widget_queue_draw_area (priv->display, x, y, w, h); + } ++ ++ return TRUE; + } + + static BOOL +@@ -524,7 +517,6 @@ frdp_pre_connect (freerdp *instance) + { + rdpSettings *settings = instance->settings; + +-#if HAVE_FREERDP_1_1 + settings->OrderSupport[NEG_DSTBLT_INDEX] = TRUE; + settings->OrderSupport[NEG_PATBLT_INDEX] = TRUE; + settings->OrderSupport[NEG_SCRBLT_INDEX] = TRUE; +@@ -549,32 +541,6 @@ frdp_pre_connect (freerdp *instance) + settings->OrderSupport[NEG_POLYGON_CB_INDEX] = FALSE; + settings->OrderSupport[NEG_ELLIPSE_SC_INDEX] = FALSE; + settings->OrderSupport[NEG_ELLIPSE_CB_INDEX] = FALSE; +-#else +- settings->order_support[NEG_DSTBLT_INDEX] = true; +- settings->order_support[NEG_PATBLT_INDEX] = true; +- settings->order_support[NEG_SCRBLT_INDEX] = true; +- settings->order_support[NEG_OPAQUE_RECT_INDEX] = true; +- settings->order_support[NEG_DRAWNINEGRID_INDEX] = false; +- settings->order_support[NEG_MULTIDSTBLT_INDEX] = false; +- settings->order_support[NEG_MULTIPATBLT_INDEX] = false; +- settings->order_support[NEG_MULTISCRBLT_INDEX] = false; +- settings->order_support[NEG_MULTIOPAQUERECT_INDEX] = true; +- settings->order_support[NEG_MULTI_DRAWNINEGRID_INDEX] = false; +- settings->order_support[NEG_LINETO_INDEX] = true; +- settings->order_support[NEG_POLYLINE_INDEX] = true; +- settings->order_support[NEG_MEMBLT_INDEX] = true; +- settings->order_support[NEG_MEM3BLT_INDEX] = false; +- settings->order_support[NEG_MEMBLT_V2_INDEX] = true; +- settings->order_support[NEG_MEM3BLT_V2_INDEX] = false; +- settings->order_support[NEG_SAVEBITMAP_INDEX] = false; +- settings->order_support[NEG_GLYPH_INDEX_INDEX] = true; +- settings->order_support[NEG_FAST_INDEX_INDEX] = true; +- settings->order_support[NEG_FAST_GLYPH_INDEX] = false; +- settings->order_support[NEG_POLYGON_SC_INDEX] = false; +- settings->order_support[NEG_POLYGON_CB_INDEX] = false; +- settings->order_support[NEG_ELLIPSE_SC_INDEX] = false; +- settings->order_support[NEG_ELLIPSE_CB_INDEX] = false; +-#endif + + return TRUE; + } +@@ -587,15 +553,7 @@ frdp_post_connect (freerdp *instance) + rdpGdi *gdi; + int stride; + +- gdi_init (instance, +-#if defined(FREERDP_VERSION_MAJOR) && defined(FREERDP_VERSION_MINOR) && \ +- !(FREERDP_VERSION_MAJOR > 1 || (FREERDP_VERSION_MAJOR == 1 && \ +- FREERDP_VERSION_MINOR >= 2)) +- CLRBUF_24BPP, +-#else +- CLRBUF_32BPP, +-#endif +- NULL); ++ gdi_init (instance, PIXEL_FORMAT_BGRA32); + gdi = instance->context->gdi; + + instance->update->BeginPaint = frdp_begin_paint; +@@ -705,21 +663,15 @@ frdp_key_pressed (GtkWidget *widget, + VinagreRdpTab *rdp_tab = (VinagreRdpTab *) user_data; + VinagreRdpTabPrivate *priv = rdp_tab->priv; + frdpEventKey *frdp_event; +-#if HAVE_FREERDP_1_1 + UINT16 scancode; +-#endif + + frdp_event = g_new0 (frdpEventKey, 1); + frdp_event->type = FRDP_EVENT_TYPE_KEY; + frdp_event->flags = event->type == GDK_KEY_PRESS ? KBD_FLAGS_DOWN : KBD_FLAGS_RELEASE; + +-#if HAVE_FREERDP_1_1 + scancode = freerdp_keyboard_get_rdp_scancode_from_x11_keycode (event->hardware_keycode); + frdp_event->code = RDP_SCANCODE_CODE(scancode); + frdp_event->extended = RDP_SCANCODE_EXTENDED(scancode); +-#else +- frdp_event->code = freerdp_kbd_get_scancode_by_keycode (event->hardware_keycode, &frdp_event->extended); +-#endif + + if (frdp_event->extended) + frdp_event->flags |= KBD_FLAGS_EXTENDED; +@@ -934,11 +886,13 @@ frdp_authenticate (freerdp *instance, + return TRUE; + } + +-static BOOL ++static DWORD + frdp_certificate_verify (freerdp *instance, +- char *subject, +- char *issuer, +- char *fingerprint) ++ const char *common_name, ++ const char *subject, ++ const char *issuer, ++ const char *fingerprint, ++ BOOL host_mismatch) + { + VinagreTab *tab = VINAGRE_TAB (((frdpContext *) instance->context)->rdp_tab); + GtkBuilder *builder; +@@ -968,17 +922,18 @@ frdp_certificate_verify (freerdp *instance, + gtk_widget_hide (dialog); + + +- return response == GTK_RESPONSE_YES; ++ return (response == GTK_RESPONSE_YES) ? 1 : 0; + } + +- +-#if HAVE_FREERDP_1_1 +-static BOOL ++static DWORD + frdp_changed_certificate_verify (freerdp *instance, +- char *subject, +- char *issuer, +- char *new_fingerprint, +- char *old_fingerprint) ++ const char *common_name, ++ const char *subject, ++ const char *issuer, ++ const char *new_fingerprint, ++ const char *old_subject, ++ const char *old_issuer, ++ const char *old_fingerprint) + { + VinagreTab *tab = VINAGRE_TAB (((frdpContext *) instance->context)->rdp_tab); + GtkBuilder *builder; +@@ -1023,9 +978,8 @@ frdp_changed_certificate_verify (freerdp *instance, + gtk_widget_hide (dialog); + + +- return response == GTK_RESPONSE_YES; ++ return (response == GTK_RESPONSE_YES) ? 1 : 0; + } +-#endif + + static void + init_freerdp (VinagreRdpTab *rdp_tab) +@@ -1053,15 +1007,9 @@ init_freerdp (VinagreRdpTab *rdp_tab) + priv->freerdp_session->PostConnect = frdp_post_connect; + priv->freerdp_session->Authenticate = frdp_authenticate; + priv->freerdp_session->VerifyCertificate = frdp_certificate_verify; +-#if HAVE_FREERDP_1_1 + priv->freerdp_session->VerifyChangedCertificate = frdp_changed_certificate_verify; +-#endif + +-#if HAVE_FREERDP_1_1 + priv->freerdp_session->ContextSize = sizeof (frdpContext); +-#else +- priv->freerdp_session->context_size = sizeof (frdpContext); +-#endif + + freerdp_context_new (priv->freerdp_session); + ((frdpContext *) priv->freerdp_session->context)->rdp_tab = rdp_tab; +@@ -1070,53 +1018,24 @@ init_freerdp (VinagreRdpTab *rdp_tab) + settings = priv->freerdp_session->settings; + + /* Security settings */ +-#if HAVE_FREERDP_1_1 + settings->RdpSecurity = TRUE; + settings->TlsSecurity = TRUE; + settings->NlaSecurity = TRUE; + settings->EncryptionMethods = ENCRYPTION_METHOD_40BIT | ENCRYPTION_METHOD_128BIT | ENCRYPTION_METHOD_FIPS; + settings->EncryptionLevel = ENCRYPTION_LEVEL_CLIENT_COMPATIBLE; +-#else +- settings->rdp_security = true; +- settings->tls_security = true; +- settings->nla_security = true; +- settings->encryption = true; +- settings->encryption_method = ENCRYPTION_METHOD_40BIT | ENCRYPTION_METHOD_128BIT | ENCRYPTION_METHOD_FIPS; +- settings->encryption_level = ENCRYPTION_LEVEL_CLIENT_COMPATIBLE; +-#endif +-#include <freerdp/version.h> +-#if (FREERDP_VERSION_MAJOR == 1 && FREERDP_VERSION_MINOR >= 2 && FREERDP_VERSION_REVISION >= 1) || (FREERDP_VERSION_MAJOR == 2) + settings->UseRdpSecurityLayer = FALSE; +-#else +- settings->DisableEncryption = FALSE; +-#endif + + /* Set display size */ +-#if HAVE_FREERDP_1_1 + settings->DesktopWidth = width; + settings->DesktopHeight = height; +-#else +- settings->width = width; +- settings->height = height; +-#endif + + /* Set hostname */ +-#if HAVE_FREERDP_1_1 + settings->WindowTitle = g_strdup (hostname); + settings->ServerHostname = g_strdup (hostname); + settings->ServerPort = port; +-#else +- settings->window_title = g_strdup (hostname); +- settings->hostname = g_strdup (hostname); +- settings->port = port; +-#endif + + /* Set keyboard layout */ +-#if HAVE_FREERDP_1_1 + freerdp_keyboard_init (KBD_US); +-#else +- freerdp_kbd_init (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), KBD_US); +-#endif + + /* Allow font smoothing by default */ + settings->AllowFontSmoothing = TRUE; +-- +2.18.1 + diff --git a/gnu/packages/patches/vinagre-newer-rdp-parameters.patch b/gnu/packages/patches/vinagre-newer-rdp-parameters.patch new file mode 100644 index 0000000000..99bcee5a98 --- /dev/null +++ b/gnu/packages/patches/vinagre-newer-rdp-parameters.patch @@ -0,0 +1,212 @@ +https://gitlab.gnome.org/GNOME/vinagre/merge_requests/4.patch + +From 141f9383129795da267a8111897fb3a0a324b080 Mon Sep 17 00:00:00 2001 +From: Ondrej Holy <oholy@redhat.com> +Date: Thu, 22 Nov 2018 17:22:35 +0100 +Subject: [PATCH 2/2] Handle new RDP certificate parameters + +The freerdp2 certificate callbacks contains more parameters, let's +present some of them to user also. +--- + data/vinagre.ui | 80 ++++++++++++++++++++++++++++++----- + plugins/rdp/vinagre-rdp-tab.c | 26 +++++------- + 2 files changed, 80 insertions(+), 26 deletions(-) + +diff --git a/data/vinagre.ui b/data/vinagre.ui +index 3135336..d7ce258 100644 +--- a/data/vinagre.ui ++++ b/data/vinagre.ui +@@ -885,7 +885,7 @@ Do you trust the new certificate?</property> + <property name="vexpand">True</property> + <property name="xalign">0</property> + <property name="xpad">12</property> +- <property name="label" translatable="yes" comments="Subject of the certificate.">Subject:</property> ++ <property name="label" translatable="yes" comments="Subject of the certificate.">New subject:</property> + </object> + <packing> + <property name="left_attach">0</property> +@@ -901,7 +901,7 @@ Do you trust the new certificate?</property> + <property name="vexpand">True</property> + <property name="xalign">0</property> + <property name="xpad">12</property> +- <property name="label" translatable="yes" comments="Issuer of the certificate.">Issuer:</property> ++ <property name="label" translatable="yes" comments="Issuer of the certificate.">New issuer:</property> + </object> + <packing> + <property name="left_attach">0</property> +@@ -927,7 +927,55 @@ Do you trust the new certificate?</property> + </packing> + </child> + <child> +- <object class="GtkLabel" id="certificate_changed_subject"> ++ <object class="GtkLabel"> ++ <property name="visible">True</property> ++ <property name="can_focus">False</property> ++ <property name="vexpand">True</property> ++ <property name="xalign">0</property> ++ <property name="xpad">12</property> ++ <property name="label" translatable="yes" comments="Subject of the old certificate.">Old subject:</property> ++ </object> ++ <packing> ++ <property name="left_attach">0</property> ++ <property name="top_attach">3</property> ++ <property name="width">1</property> ++ <property name="height">1</property> ++ </packing> ++ </child> ++ <child> ++ <object class="GtkLabel"> ++ <property name="visible">True</property> ++ <property name="can_focus">False</property> ++ <property name="vexpand">True</property> ++ <property name="xalign">0</property> ++ <property name="xpad">12</property> ++ <property name="label" translatable="yes" comments="Issuer of the old certificate.">Old issuer:</property> ++ </object> ++ <packing> ++ <property name="left_attach">0</property> ++ <property name="top_attach">4</property> ++ <property name="width">1</property> ++ <property name="height">1</property> ++ </packing> ++ </child> ++ <child> ++ <object class="GtkLabel"> ++ <property name="visible">True</property> ++ <property name="can_focus">False</property> ++ <property name="vexpand">True</property> ++ <property name="xalign">0</property> ++ <property name="xpad">12</property> ++ <property name="label" translatable="yes" comments="Fingerprint of the old certificate.">Old fingerprint:</property> ++ </object> ++ <packing> ++ <property name="left_attach">0</property> ++ <property name="top_attach">5</property> ++ <property name="width">1</property> ++ <property name="height">1</property> ++ </packing> ++ </child> ++ <child> ++ <object class="GtkLabel" id="certificate_changed_new_subject"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="hexpand">True</property> +@@ -942,7 +990,7 @@ Do you trust the new certificate?</property> + </packing> + </child> + <child> +- <object class="GtkLabel" id="certificate_changed_issuer"> ++ <object class="GtkLabel" id="certificate_changed_new_issuer"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="hexpand">True</property> +@@ -972,21 +1020,33 @@ Do you trust the new certificate?</property> + </packing> + </child> + <child> +- <object class="GtkLabel" id="certificate_changed_old_fingerprint_label"> ++ <object class="GtkLabel" id="certificate_changed_old_subject"> + <property name="visible">True</property> + <property name="can_focus">False</property> +- <property name="vexpand">True</property> ++ <property name="hexpand">True</property> + <property name="xalign">0</property> +- <property name="xpad">12</property> +- <property name="label" translatable="yes" comments="Fingerprint of the old certificate.">Old fingerprint:</property> + </object> + <packing> +- <property name="left_attach">0</property> ++ <property name="left_attach">1</property> + <property name="top_attach">3</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> ++ <child> ++ <object class="GtkLabel" id="certificate_changed_old_issuer"> ++ <property name="visible">True</property> ++ <property name="can_focus">False</property> ++ <property name="hexpand">True</property> ++ <property name="xalign">0</property> ++ </object> ++ <packing> ++ <property name="left_attach">1</property> ++ <property name="top_attach">4</property> ++ <property name="width">1</property> ++ <property name="height">1</property> ++ </packing> ++ </child> + <child> + <object class="GtkLabel" id="certificate_changed_old_fingerprint"> + <property name="visible">True</property> +@@ -997,7 +1057,7 @@ Do you trust the new certificate?</property> + </object> + <packing> + <property name="left_attach">1</property> +- <property name="top_attach">3</property> ++ <property name="top_attach">5</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> +diff --git a/plugins/rdp/vinagre-rdp-tab.c b/plugins/rdp/vinagre-rdp-tab.c +index 28e3eb6..30a8698 100644 +--- a/plugins/rdp/vinagre-rdp-tab.c ++++ b/plugins/rdp/vinagre-rdp-tab.c +@@ -917,6 +917,7 @@ frdp_certificate_verify (freerdp *instance, + widget = GTK_WIDGET (gtk_builder_get_object (builder, "certificate_fingerprint")); + gtk_label_set_text (GTK_LABEL (widget), fingerprint); + ++ /* FIXME: Warn user in case of host_mismatch. */ + + response = gtk_dialog_run (GTK_DIALOG (dialog)); + gtk_widget_hide (dialog); +@@ -939,7 +940,6 @@ frdp_changed_certificate_verify (freerdp *instance, + GtkBuilder *builder; + GtkWidget *dialog; + GtkWidget *widget; +- GtkWidget *label; + gint response; + + builder = vinagre_utils_get_builder (); +@@ -950,29 +950,23 @@ frdp_changed_certificate_verify (freerdp *instance, + _("Connect"), GTK_RESPONSE_YES, NULL); + gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_YES); + +- widget = GTK_WIDGET (gtk_builder_get_object (builder, "certificate_changed_subject")); ++ widget = GTK_WIDGET (gtk_builder_get_object (builder, "certificate_changed_new_subject")); + gtk_label_set_text (GTK_LABEL (widget), subject); + +- widget = GTK_WIDGET (gtk_builder_get_object (builder, "certificate_changed_issuer")); ++ widget = GTK_WIDGET (gtk_builder_get_object (builder, "certificate_changed_new_issuer")); + gtk_label_set_text (GTK_LABEL (widget), issuer); + + widget = GTK_WIDGET (gtk_builder_get_object (builder, "certificate_changed_new_fingerprint")); + gtk_label_set_text (GTK_LABEL (widget), new_fingerprint); + +- widget = GTK_WIDGET (gtk_builder_get_object (builder, "certificate_changed_old_fingerprint")); +- label = GTK_WIDGET (gtk_builder_get_object (builder, "certificate_changed_old_fingerprint_label")); +- if (old_fingerprint != NULL && old_fingerprint[0] != '\0') +- { +- gtk_label_set_text (GTK_LABEL (widget), old_fingerprint); +- gtk_widget_show (widget); +- gtk_widget_show (label); +- } +- else +- { +- gtk_widget_hide (widget); +- gtk_widget_hide (label); +- } ++ widget = GTK_WIDGET (gtk_builder_get_object (builder, "certificate_changed_old_subject")); ++ gtk_label_set_text (GTK_LABEL (widget), old_subject); + ++ widget = GTK_WIDGET (gtk_builder_get_object (builder, "certificate_changed_old_issuer")); ++ gtk_label_set_text (GTK_LABEL (widget), old_issuer); ++ ++ widget = GTK_WIDGET (gtk_builder_get_object (builder, "certificate_changed_old_fingerprint")); ++ gtk_label_set_text (GTK_LABEL (widget), old_fingerprint); + + response = gtk_dialog_run (GTK_DIALOG (dialog)); + gtk_widget_hide (dialog); +-- +2.18.1 + diff --git a/gnu/packages/patches/vinagre-revert-1.patch b/gnu/packages/patches/vinagre-revert-1.patch deleted file mode 100644 index 5a983770b7..0000000000 --- a/gnu/packages/patches/vinagre-revert-1.patch +++ /dev/null @@ -1,56 +0,0 @@ -Patch taken from Debian: revert changes that prevent building against freerdp -version 1.1 branch. - -From 8ebc0685b85e0d1f70eb00171f2e7712de3d44bd Mon Sep 17 00:00:00 2001 -From: Michael Biebl <biebl@debian.org> -Date: Thu, 22 Sep 2016 01:15:55 +0200 -Subject: [PATCH 1/2] Revert "Improve FreeRDP authentication failure handling" - -This reverts commit d7b4f88943e8615d252d27e1efc58cb64a9e1821. ---- - plugins/rdp/vinagre-rdp-tab.c | 10 ++++++---- - 1 file changed, 6 insertions(+), 4 deletions(-) - -diff --git a/plugins/rdp/vinagre-rdp-tab.c b/plugins/rdp/vinagre-rdp-tab.c -index b731f9b..8572bc3 100644 ---- a/plugins/rdp/vinagre-rdp-tab.c -+++ b/plugins/rdp/vinagre-rdp-tab.c -@@ -1195,8 +1195,8 @@ open_freerdp (VinagreRdpTab *rdp_tab) - VinagreTab *tab = VINAGRE_TAB (rdp_tab); - GtkWindow *window = GTK_WINDOW (vinagre_tab_get_window (tab)); - gboolean success = TRUE; -+ gboolean authentication_error = FALSE; - gboolean cancelled = FALSE; -- guint authentication_errors = 0; - - priv->events = g_queue_new (); - -@@ -1205,12 +1205,14 @@ open_freerdp (VinagreRdpTab *rdp_tab) - - do - { -+ authentication_error = FALSE; -+ - /* Run FreeRDP session */ - success = freerdp_connect (priv->freerdp_session); - if (!success) - { -- authentication_errors += freerdp_get_last_error (priv->freerdp_session->context) == 0x20009 || -- freerdp_get_last_error (priv->freerdp_session->context) == 0x2000c; -+ authentication_error = freerdp_get_last_error (priv->freerdp_session->context) == 0x20009 || -+ freerdp_get_last_error (priv->freerdp_session->context) == 0x2000c; - - cancelled = freerdp_get_last_error (priv->freerdp_session->context) == 0x2000b; - -@@ -1218,7 +1220,7 @@ open_freerdp (VinagreRdpTab *rdp_tab) - init_freerdp (rdp_tab); - } - } -- while (!success && authentication_errors < 3); -+ while (!success && authentication_error); - - if (!success) - { --- -2.9.3 - diff --git a/gnu/packages/patches/vinagre-revert-2.patch b/gnu/packages/patches/vinagre-revert-2.patch deleted file mode 100644 index 686ee203e4..0000000000 --- a/gnu/packages/patches/vinagre-revert-2.patch +++ /dev/null @@ -1,448 +0,0 @@ -Patch taken from Debian: revert changes that prevent building against freerdp -version 1.1 branch. - -From bb1828b6b7eb29bb037bcc687cf10f916ddc7561 Mon Sep 17 00:00:00 2001 -From: Michael Biebl <biebl@debian.org> -Date: Thu, 22 Sep 2016 01:18:16 +0200 -Subject: [PATCH 2/2] Revert "Store credentials for RDP" - -This reverts commit 60dea279a24c7f0e398b89a0a60d45e80087ed1d. ---- - plugins/rdp/vinagre-rdp-connection.c | 22 +--- - plugins/rdp/vinagre-rdp-plugin.c | 29 +---- - plugins/rdp/vinagre-rdp-tab.c | 231 +++++++++++++++++------------------ - 3 files changed, 123 insertions(+), 159 deletions(-) - -diff --git a/plugins/rdp/vinagre-rdp-connection.c b/plugins/rdp/vinagre-rdp-connection.c -index f0ff02b..c5f6ed1 100644 ---- a/plugins/rdp/vinagre-rdp-connection.c -+++ b/plugins/rdp/vinagre-rdp-connection.c -@@ -127,25 +127,9 @@ rdp_parse_item (VinagreConnection *conn, xmlNode *root) - static void - rdp_parse_options_widget (VinagreConnection *conn, GtkWidget *widget) - { -- const gchar *text; -- GtkWidget *u_entry, *d_entry, *spin_button, *scaling_button; -- gboolean scaling; -- guint width, height; -- -- d_entry = g_object_get_data (G_OBJECT (widget), "domain_entry"); -- if (!d_entry) -- { -- g_warning ("Wrong widget passed to rdp_parse_options_widget()"); -- return; -- } -- -- text = gtk_entry_get_text (GTK_ENTRY (d_entry)); -- vinagre_cache_prefs_set_string ("rdp-connection", "domain", text); -- -- g_object_set (conn, -- "domain", text != NULL && *text != '\0' ? text : NULL, -- NULL); -- -+ GtkWidget *u_entry, *spin_button, *scaling_button; -+ gboolean scaling; -+ guint width, height; - - u_entry = g_object_get_data (G_OBJECT (widget), "username_entry"); - if (!u_entry) -diff --git a/plugins/rdp/vinagre-rdp-plugin.c b/plugins/rdp/vinagre-rdp-plugin.c -index 4751102..f41da37 100644 ---- a/plugins/rdp/vinagre-rdp-plugin.c -+++ b/plugins/rdp/vinagre-rdp-plugin.c -@@ -100,7 +100,7 @@ vinagre_rdp_plugin_init (VinagreRdpPlugin *plugin) - static GtkWidget * - impl_get_connect_widget (VinagreProtocol *plugin, VinagreConnection *conn) - { -- GtkWidget *grid, *label, *u_entry, *d_entry, *spin_button, *check; -+ GtkWidget *grid, *label, *u_entry, *spin_button, *check; - gchar *str; - gint width, height; - -@@ -146,29 +146,10 @@ impl_get_connect_widget (VinagreProtocol *plugin, VinagreConnection *conn) - g_free (str); - - -- label = gtk_label_new_with_mnemonic (_("_Domain:")); -- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); -- gtk_grid_attach (GTK_GRID (grid), label, 0, 3, 1, 1); -- gtk_widget_set_margin_left (label, 12); -- -- d_entry = gtk_entry_new (); -- /* Translators: This is the tooltip for the domain field in a RDP connection */ -- gtk_widget_set_tooltip_text (d_entry, _("Optional.")); -- g_object_set_data (G_OBJECT (grid), "domain_entry", d_entry); -- gtk_grid_attach (GTK_GRID (grid), d_entry, 1, 3, 1, 1); -- gtk_label_set_mnemonic_widget (GTK_LABEL (label), d_entry); -- str = g_strdup (VINAGRE_IS_CONNECTION (conn) ? -- vinagre_connection_get_domain (conn) : -- vinagre_cache_prefs_get_string ("rdp-connection", "domain", "")); -- gtk_entry_set_text (GTK_ENTRY (d_entry), str); -- gtk_entry_set_activates_default (GTK_ENTRY (d_entry), TRUE); -- g_free (str); -- -- - /* Host width */ - label = gtk_label_new_with_mnemonic (_("_Width:")); - gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); -- gtk_grid_attach (GTK_GRID (grid), label, 0, 4, 1, 1); -+ gtk_grid_attach (GTK_GRID (grid), label, 0, 3, 1, 1); - gtk_widget_set_margin_left (label, 12); - - spin_button = gtk_spin_button_new_with_range (MIN_SIZE, MAX_SIZE, 1); -@@ -176,7 +157,7 @@ impl_get_connect_widget (VinagreProtocol *plugin, VinagreConnection *conn) - gtk_widget_set_tooltip_text (spin_button, _("Set width of the remote desktop")); - gtk_spin_button_set_value (GTK_SPIN_BUTTON (spin_button), DEFAULT_WIDTH); - g_object_set_data (G_OBJECT (grid), "width_spin_button", spin_button); -- gtk_grid_attach (GTK_GRID (grid), spin_button, 1, 4, 1, 1); -+ gtk_grid_attach (GTK_GRID (grid), spin_button, 1, 3, 1, 1); - gtk_label_set_mnemonic_widget (GTK_LABEL (label), spin_button); - width = VINAGRE_IS_CONNECTION (conn) ? - vinagre_connection_get_width (conn) : -@@ -188,7 +169,7 @@ impl_get_connect_widget (VinagreProtocol *plugin, VinagreConnection *conn) - /* Host height */ - label = gtk_label_new_with_mnemonic (_("_Height:")); - gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); -- gtk_grid_attach (GTK_GRID (grid), label, 0, 5, 1, 1); -+ gtk_grid_attach (GTK_GRID (grid), label, 0, 4, 1, 1); - gtk_widget_set_margin_left (label, 12); - - spin_button = gtk_spin_button_new_with_range (MIN_SIZE, MAX_SIZE, 1); -@@ -196,7 +177,7 @@ impl_get_connect_widget (VinagreProtocol *plugin, VinagreConnection *conn) - gtk_widget_set_tooltip_text (spin_button, _("Set height of the remote desktop")); - gtk_spin_button_set_value (GTK_SPIN_BUTTON (spin_button), DEFAULT_HEIGHT); - g_object_set_data (G_OBJECT (grid), "height_spin_button", spin_button); -- gtk_grid_attach (GTK_GRID (grid), spin_button, 1, 5, 1, 1); -+ gtk_grid_attach (GTK_GRID (grid), spin_button, 1, 4, 1, 1); - gtk_label_set_mnemonic_widget (GTK_LABEL (label), spin_button); - height = VINAGRE_IS_CONNECTION (conn) ? - vinagre_connection_get_height (conn) : -diff --git a/plugins/rdp/vinagre-rdp-tab.c b/plugins/rdp/vinagre-rdp-tab.c -index 8572bc3..f3d9c08 100644 ---- a/plugins/rdp/vinagre-rdp-tab.c -+++ b/plugins/rdp/vinagre-rdp-tab.c -@@ -70,8 +70,6 @@ struct _VinagreRdpTabPrivate - gboolean scaling; - double scale; - double offset_x, offset_y; -- -- guint authentication_attempts; - }; - - G_DEFINE_TYPE (VinagreRdpTab, vinagre_rdp_tab, VINAGRE_TYPE_TAB) -@@ -611,7 +609,6 @@ frdp_post_connect (freerdp *instance) - 0, 0, - gdi->width, gdi->height); - -- vinagre_tab_save_credentials_in_keyring (VINAGRE_TAB (rdp_tab)); - vinagre_tab_add_recent_used (VINAGRE_TAB (rdp_tab)); - vinagre_tab_set_state (VINAGRE_TAB (rdp_tab), VINAGRE_TAB_STATE_CONNECTED); - -@@ -862,76 +859,114 @@ frdp_mouse_moved (GtkWidget *widget, - return TRUE; - } - -+static void -+entry_text_changed_cb (GtkEntry *entry, -+ GtkBuilder *builder) -+{ -+ const gchar *text; -+ GtkWidget *widget; -+ gsize username_length; -+ gsize password_length; -+ -+ widget = GTK_WIDGET (gtk_builder_get_object (builder, "username_entry")); -+ text = gtk_entry_get_text (GTK_ENTRY (widget)); -+ username_length = strlen (text); -+ -+ widget = GTK_WIDGET (gtk_builder_get_object (builder, "password_entry")); -+ text = gtk_entry_get_text (GTK_ENTRY (widget)); -+ password_length = strlen (text); -+ -+ widget = GTK_WIDGET (gtk_builder_get_object (builder, "ok_button")); -+ gtk_widget_set_sensitive (widget, password_length > 0 && username_length > 0); -+} -+ - static gboolean - frdp_authenticate (freerdp *instance, - char **username, - char **password, - char **domain) - { -- VinagreTab *tab = VINAGRE_TAB (((frdpContext *) instance->context)->rdp_tab); -- VinagreRdpTab *rdp_tab = VINAGRE_RDP_TAB (tab); -- VinagreRdpTabPrivate *priv = rdp_tab->priv; -- VinagreConnection *conn = vinagre_tab_get_conn (tab); -- GtkWindow *window = GTK_WINDOW (vinagre_tab_get_window (tab)); -- gboolean save_in_keyring = FALSE; -- gchar *keyring_domain = NULL; -- gchar *keyring_username = NULL; -- gchar *keyring_password = NULL; -+ VinagreTab *tab = VINAGRE_TAB (((frdpContext *) instance->context)->rdp_tab); -+ VinagreConnection *conn = vinagre_tab_get_conn (tab); -+ const gchar *user_name; -+ const gchar *domain_name; -+ GtkBuilder *builder; -+ GtkWidget *dialog; -+ GtkWidget *widget; -+ GtkWidget *username_entry; -+ GtkWidget *password_entry; -+ GtkWidget *domain_entry; -+ gboolean save_credential_check_visible; -+ gboolean domain_label_visible; -+ gboolean domain_entry_visible; -+ gint response; - -- priv->authentication_attempts++; -+ builder = vinagre_utils_get_builder (); - -- if (priv->authentication_attempts == 1) -- { -- vinagre_tab_find_credentials_in_keyring (tab, &keyring_domain, &keyring_username, &keyring_password); -- if (keyring_password != NULL && keyring_username != NULL) -- { -- *domain = keyring_domain; -- *username = keyring_username; -- *password = keyring_password; -+ dialog = GTK_WIDGET (gtk_builder_get_object (builder, "auth_required_dialog")); -+ gtk_window_set_modal ((GtkWindow *) dialog, TRUE); -+ gtk_window_set_transient_for ((GtkWindow *) dialog, GTK_WINDOW (vinagre_tab_get_window (tab))); - -- return TRUE; -- } -- else -- { -- g_free (keyring_domain); -- g_free (keyring_username); -- g_free (keyring_password); -- } -+ widget = GTK_WIDGET (gtk_builder_get_object (builder, "host_label")); -+ gtk_label_set_text (GTK_LABEL (widget), vinagre_connection_get_host (conn)); -+ -+ username_entry = GTK_WIDGET (gtk_builder_get_object (builder, "username_entry")); -+ password_entry = GTK_WIDGET (gtk_builder_get_object (builder, "password_entry")); -+ domain_entry = GTK_WIDGET (gtk_builder_get_object (builder, "domain_entry")); -+ -+ if (*username != NULL && *username[0] != '\0') -+ { -+ gtk_entry_set_text (GTK_ENTRY (username_entry), *username); -+ gtk_widget_grab_focus (password_entry); - } - -- if (vinagre_utils_request_credential (window, -- "RDP", -- vinagre_connection_get_host (conn), -- vinagre_connection_get_domain (conn), -- vinagre_connection_get_username (conn), -- TRUE, -- TRUE, -- TRUE, -- 20, -- domain, -- username, -- password, -- &save_in_keyring)) -+ g_signal_connect (username_entry, "changed", G_CALLBACK (entry_text_changed_cb), builder); -+ g_signal_connect (password_entry, "changed", G_CALLBACK (entry_text_changed_cb), builder); -+ -+ -+ widget = GTK_WIDGET (gtk_builder_get_object (builder, "save_credential_check")); -+ save_credential_check_visible = gtk_widget_get_visible (widget); -+ gtk_widget_set_visible (widget, FALSE); -+ -+ widget = GTK_WIDGET (gtk_builder_get_object (builder, "domain_label")); -+ domain_label_visible = gtk_widget_get_visible (widget); -+ gtk_widget_set_visible (widget, TRUE); -+ -+ domain_entry_visible = gtk_widget_get_visible (domain_entry); -+ gtk_widget_set_visible (domain_entry, TRUE); -+ -+ -+ response = gtk_dialog_run (GTK_DIALOG (dialog)); -+ gtk_widget_hide (dialog); -+ -+ -+ widget = GTK_WIDGET (gtk_builder_get_object (builder, "save_credential_check")); -+ gtk_widget_set_visible (widget, save_credential_check_visible); -+ -+ widget = GTK_WIDGET (gtk_builder_get_object (builder, "domain_label")); -+ gtk_widget_set_visible (widget, domain_label_visible); -+ -+ gtk_widget_set_visible (domain_entry, domain_entry_visible); -+ -+ -+ if (response == GTK_RESPONSE_OK) - { -- if (*domain && **domain != '\0') -- vinagre_connection_set_domain (conn, *domain); -+ domain_name = gtk_entry_get_text (GTK_ENTRY (domain_entry)); -+ if (g_strcmp0 (*domain, domain_name) != 0) -+ *domain = g_strdup (domain_name); - -- if (*username && **username != '\0') -- vinagre_connection_set_username (conn, *username); -+ user_name = gtk_entry_get_text (GTK_ENTRY (username_entry)); -+ if (g_strcmp0 (*username, user_name) != 0) -+ *username = g_strdup (user_name); - -- if (*password && **password != '\0') -- vinagre_connection_set_password (conn, *password); -+ *password = g_strdup (gtk_entry_get_text (GTK_ENTRY (password_entry))); - -- vinagre_tab_set_save_credentials (tab, save_in_keyring); -+ return TRUE; - } - else - { -- vinagre_tab_remove_from_notebook (tab); -- - return FALSE; - } -- -- return TRUE; - } - - static BOOL -@@ -1028,25 +1063,30 @@ frdp_changed_certificate_verify (freerdp *instance, - #endif - - static void --init_freerdp (VinagreRdpTab *rdp_tab) -+open_freerdp (VinagreRdpTab *rdp_tab) - { - VinagreRdpTabPrivate *priv = rdp_tab->priv; -- rdpSettings *settings; - VinagreTab *tab = VINAGRE_TAB (rdp_tab); - VinagreConnection *conn = vinagre_tab_get_conn (tab); -- gboolean scaling; -- gchar *hostname; -- gint width, height; -- gint port; -+ rdpSettings *settings; -+ GtkWindow *window = GTK_WINDOW (vinagre_tab_get_window (tab)); -+ gboolean success = TRUE; -+ gboolean fullscreen, scaling; -+ gchar *hostname, *username; -+ gint port, width, height; - - g_object_get (conn, - "port", &port, - "host", &hostname, - "width", &width, - "height", &height, -+ "fullscreen", &fullscreen, - "scaling", &scaling, -+ "username", &username, - NULL); - -+ priv->events = g_queue_new (); -+ - /* Setup FreeRDP session */ - priv->freerdp_session = freerdp_new (); - priv->freerdp_session->PreConnect = frdp_pre_connect; -@@ -1111,6 +1151,17 @@ init_freerdp (VinagreRdpTab *rdp_tab) - settings->port = port; - #endif - -+ /* Set username */ -+ username = g_strstrip (username); -+ if (username != NULL && username[0] != '\0') -+ { -+#if HAVE_FREERDP_1_1 -+ settings->Username = g_strdup (username); -+#else -+ settings->username = g_strdup (username); -+#endif -+ } -+ - /* Set keyboard layout */ - #if HAVE_FREERDP_1_1 - freerdp_keyboard_init (KBD_US); -@@ -1120,24 +1171,6 @@ init_freerdp (VinagreRdpTab *rdp_tab) - - /* Allow font smoothing by default */ - settings->AllowFontSmoothing = TRUE; --} -- --static void --init_display (VinagreRdpTab *rdp_tab) --{ -- VinagreRdpTabPrivate *priv = rdp_tab->priv; -- VinagreTab *tab = VINAGRE_TAB (rdp_tab); -- VinagreConnection *conn = vinagre_tab_get_conn (tab); -- GtkWindow *window = GTK_WINDOW (vinagre_tab_get_window (tab)); -- gboolean fullscreen, scaling; -- gint width, height; -- -- g_object_get (conn, -- "width", &width, -- "height", &height, -- "fullscreen", &fullscreen, -- "scaling", &scaling, -- NULL); - - /* Setup display for FreeRDP session */ - priv->display = gtk_drawing_area_new (); -@@ -1186,54 +1219,20 @@ init_display (VinagreRdpTab *rdp_tab) - priv->key_release_handler_id = g_signal_connect (GTK_WIDGET (tab), "key-release-event", - G_CALLBACK (frdp_key_pressed), - rdp_tab); --} -- --static void --open_freerdp (VinagreRdpTab *rdp_tab) --{ -- VinagreRdpTabPrivate *priv = rdp_tab->priv; -- VinagreTab *tab = VINAGRE_TAB (rdp_tab); -- GtkWindow *window = GTK_WINDOW (vinagre_tab_get_window (tab)); -- gboolean success = TRUE; -- gboolean authentication_error = FALSE; -- gboolean cancelled = FALSE; -- -- priv->events = g_queue_new (); -- -- init_freerdp (rdp_tab); -- init_display (rdp_tab); -- -- do -- { -- authentication_error = FALSE; - -- /* Run FreeRDP session */ -- success = freerdp_connect (priv->freerdp_session); -- if (!success) -- { -- authentication_error = freerdp_get_last_error (priv->freerdp_session->context) == 0x20009 || -- freerdp_get_last_error (priv->freerdp_session->context) == 0x2000c; -- -- cancelled = freerdp_get_last_error (priv->freerdp_session->context) == 0x2000b; -- -- freerdp_free (priv->freerdp_session); -- init_freerdp (rdp_tab); -- } -- } -- while (!success && authentication_error); -+ /* Run FreeRDP session */ -+ success = freerdp_connect (priv->freerdp_session); - - if (!success) - { - gtk_window_unfullscreen (window); -- if (!cancelled) -- vinagre_utils_show_error_dialog (_("Error connecting to host."), -- NULL, -- window); -+ vinagre_utils_show_error_dialog (_("Error connecting to host."), -+ NULL, -+ window); - g_idle_add ((GSourceFunc) idle_close, rdp_tab); - } - else - { -- priv->authentication_attempts = 0; - priv->update_id = g_idle_add ((GSourceFunc) update, rdp_tab); - } - } --- -2.9.3 - diff --git a/gnu/packages/patchutils.scm b/gnu/packages/patchutils.scm index fa5ad62e44..b655399345 100644 --- a/gnu/packages/patchutils.scm +++ b/gnu/packages/patchutils.scm @@ -102,8 +102,8 @@ listing the files modified by a patch.") (base32 "06b816m2gz9jfif7k9v2hrm7fz76zjg5pavf7hd3ifybwn4cgjzn")) (patches (search-patches "quilt-test-fix-regex.patch" - "quilt-compat-getopt-fix-second-separator.patch" - "quilt-compat-getopt-fix-option-with-nondigit-param.patch")))) + "quilt-getopt-second-separator.patch" + "quilt-getopt-nondigit-param.patch")))) (build-system gnu-build-system) (native-inputs `(("gettext" ,gnu-gettext))) diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm index 65d7b26df3..64bfda489e 100644 --- a/gnu/packages/pdf.scm +++ b/gnu/packages/pdf.scm @@ -12,7 +12,7 @@ ;;; Copyright © 2016 Arun Isaac <arunisaac@systemreboot.net> ;;; Copyright © 2017, 2018 Leo Famulari <leo@famulari.name> ;;; Copyright © 2017 Alex Vong <alexvong1995@gmail.com> -;;; Copyright © 2017 Rene Saavedra <rennes@openmailbox.org> +;;; Copyright © 2017, 2018 Rene Saavedra <pacoon@protonmail.com> ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr> ;;; ;;; This file is part of GNU Guix. @@ -438,6 +438,7 @@ using the DjVuLibre library.") (inputs `(("jbig2dec" ,jbig2dec) ("libjpeg" ,libjpeg) + ("mujs" ,mujs) ("mupdf" ,mupdf) ("openjpeg" ,openjpeg) ("openssl" ,openssl) @@ -447,7 +448,18 @@ using the DjVuLibre library.") `(#:tests? #f ; package does not contain tests #:configure-flags (list (string-append "-Dplugindir=" (assoc-ref %outputs "out") - "/lib/zathura")))) + "/lib/zathura") + "-Dlink-external=true") + #:phases + (modify-phases %standard-phases + (add-before 'configure 'add-mujs-to-dependencies + (lambda _ + ;; Add mujs to the 'build_dependencies'. + (substitute* "meson.build" + (("^ libopenjp2 = dependency.*" x) + (string-append x " mujs = cc.find_library('mujs')\n")) + (("^ libopenjp2") + " libopenjp2, mujs"))))))) (home-page "https://pwmt.org/projects/zathura-pdf-mupdf/") (synopsis "PDF support for zathura (mupdf backend)") (description "The zathura-pdf-mupdf plugin adds PDF support to zathura @@ -1001,7 +1013,7 @@ PDF. Indeed @command{pdfposter} was inspired by @command{poster}.") (define-public pdfgrep (package (name "pdfgrep") - (version "2.1.1") + (version "2.1.2") (source (origin (method url-fetch) @@ -1009,7 +1021,7 @@ PDF. Indeed @command{pdfposter} was inspired by @command{poster}.") name "-" version ".tar.gz")) (sha256 (base32 - "02qcl5kmr5qzjfc99qpbpfb1890bxlrq3r208gnding51zrmb09c")))) + "1fia10djcxxl7n9jw2prargw4yzbykk6izig2443ycj9syhxrwqf")))) (build-system gnu-build-system) (native-inputs `(("pkg-config" ,pkg-config))) diff --git a/gnu/packages/photo.scm b/gnu/packages/photo.scm index 1b1458a285..07047f4cf3 100644 --- a/gnu/packages/photo.scm +++ b/gnu/packages/photo.scm @@ -131,14 +131,14 @@ data as produced by digital cameras.") (define-public libgphoto2 (package (name "libgphoto2") - (version "2.5.20") + (version "2.5.21") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/gphoto/libgphoto/" version "/libgphoto2-" version ".tar.bz2")) (sha256 (base32 - "03wbwsb4v7yay8g5ni7pzmkbrh7qnqx977bddjpxsp9f1qag03z1")))) + "1ccb8idjkv19p9zxg6hh8y6vbgs8flpnh550lq6a8cmga8d2nmy5")))) (build-system gnu-build-system) (native-inputs `(("pkg-config" ,pkg-config))) (inputs @@ -353,7 +353,7 @@ photographic equipment.") (define-public darktable (package (name "darktable") - (version "2.4.4") + (version "2.6.0") (source (origin (method url-fetch) (uri (string-append @@ -362,7 +362,7 @@ photographic equipment.") version "/darktable-" version ".tar.xz")) (sha256 (base32 - "0kdhmiw4wxk2w9v2hms9yk8nl4ymdshnqyj0l07nivzzr6w20hwn")))) + "0y04cx0a0rwdclmn16f5y0z2vnm7yxly291gzjgdhcn59a77sga8")))) (build-system cmake-build-system) (arguments `(#:tests? #f ; There are no tests. @@ -493,14 +493,14 @@ a complete panorama and stitch any series of overlapping pictures.") (define-public rawtherapee (package (name "rawtherapee") - (version "5.4") + (version "5.5") (source (origin (method url-fetch) (uri (string-append "http://rawtherapee.com/shared/source/" "rawtherapee-" version ".tar.xz")) (sha256 (base32 - "1229hxqq824hcqg1hy2cfglsp7kjbhhis9m33ss39pgmrb1w227d")))) + "1w28a2rnxnw8hs7s8x8zkccgi5z5y653602jg7g86lfx6zxwjsf1")))) (build-system cmake-build-system) (arguments '(#:tests? #f ; no test suite diff --git a/gnu/packages/php.scm b/gnu/packages/php.scm index a28cb31e5c..1d33b17a10 100644 --- a/gnu/packages/php.scm +++ b/gnu/packages/php.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2016 Julien Lepiller <julien@lepiller.eu> ;;; Copyright © 2016 Marius Bakke <mbakke@fastmail.com> ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr> +;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net> ;;; ;;; This file is part of GNU Guix. ;;; @@ -48,12 +49,13 @@ #:use-module (guix packages) #:use-module (guix download) #:use-module (guix build-system gnu) + #:use-module (guix utils) #:use-module ((guix licenses) #:prefix license:)) (define-public php (package (name "php") - (version "7.2.12") + (version "7.3.0") (home-page "https://secure.php.net/") (source (origin (method url-fetch) @@ -61,7 +63,7 @@ name "-" version ".tar.xz")) (sha256 (base32 - "1qbz2j9kzqxxp0mmx02zavvz20ji7izqdnri25g1mrwyhz60974q")) + "1db0lm84hynilrjj3k1s7skp1y2gl4ip1ihr7662i2xgannmq6bx")) (modules '((guix build utils))) (snippet '(with-directory-excursion "ext" @@ -74,7 +76,7 @@ ;;"fileinfo/libmagic" ; This is a patched version of libmagic. '("gd/libgd" "mbstring/oniguruma" - "pcre/pcrelib" + "pcre/pcre2lib" "sqlite3/libsqlite" "xmlrpc/libxmlrpc" "zip/lib")) @@ -123,6 +125,7 @@ "--with-mysqli" ; Required for, e.g. wordpress "--with-pdo-mysql" "--with-zlib" + "--enable-bcmath" ; Required for, e.g. Zabbix frontend "--enable-calendar" "--enable-dba=shared" "--enable-exif" @@ -176,11 +179,6 @@ (substitute* "ext/standard/tests/streams/bug60602.phpt" (("'ls'") (string-append "'" (which "ls") "'"))) - ;; The expected output is slightly different from what is given, - ;; in a section that's not related to the actual test - (substitute* "sapi/cli/tests/upload_2G.phpt" - (("Test\\\\n") "Test\n\n")) - ;; Drop tests that are known to fail. (for-each delete-file '("ext/posix/tests/posix_getgrgid.phpt" ; Requires /etc/group. @@ -291,7 +289,10 @@ "ext/ldap/tests/ldap_set_option_error.phpt" ;; Sometimes cannot start the LDAP server. - "ext/ldap/tests/bug76248.phpt")) + "ext/ldap/tests/bug76248.phpt" + + ;; Bug #76909 preg_match difference between 7.3 and < 7.3 + "ext/pcre/tests/bug76909.phpt")) ;; Skip tests requiring network access. (setenv "SKIP_ONLINE_TESTS" "1") @@ -324,7 +325,7 @@ ("oniguruma" ,oniguruma-5) ("openldap" ,openldap) ("openssl" ,openssl) - ("pcre" ,pcre) + ("pcre" ,pcre2) ("postgresql" ,postgresql) ("readline" ,readline) ("sqlite" ,sqlite) @@ -350,3 +351,12 @@ systems, web content management systems and web frameworks." ) license:lgpl2.1+ ; ext/bcmath/libbcmath license:bsd-2 ; ext/fileinfo/libmagic license:expat)))) ; ext/date/lib + +(define-public php-with-bcmath + (package + (inherit php) + (name "php-with-bcmath") + (arguments + (substitute-keyword-arguments (package-arguments php) + ((#:configure-flags flags) + `(cons "--enable-bcmath" ,flags)))))) diff --git a/gnu/packages/polkit.scm b/gnu/packages/polkit.scm index 7cc5205faa..830006d439 100644 --- a/gnu/packages/polkit.scm +++ b/gnu/packages/polkit.scm @@ -49,6 +49,7 @@ (uri (string-append "https://www.freedesktop.org/software/polkit/releases/" name "-" version ".tar.gz")) + (patches (search-patches "polkit-CVE-2018-19788.patch")) (sha256 (base32 "0c91y61y4gy6p91cwbzg32dhavw4b7fflg370rimqhdxpzdfr1rg")) diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm index a5b4b7578d..8412325377 100644 --- a/gnu/packages/python-web.scm +++ b/gnu/packages/python-web.scm @@ -509,27 +509,28 @@ is Python’s.") (define-public python-openid (package (name "python-openid") - (version "3.0.10") + (version "3.1.0") (source (origin (method url-fetch) (uri (pypi-uri "python3-openid" version)) (sha256 (base32 - "1x3nh3fycqfn43jp5j5pb4q4y2jxp4mdka4absaa3bc0078qd758")))) + "00l5hrjh19740w00b3fnsqldnla41wbr2rics09dl4kyd1fkd3b2")))) (build-system python-build-system) (arguments `(#:phases (modify-phases %standard-phases (replace 'check (lambda _ - (invoke "./admin/runtests") - #t))))) + (invoke "coverage" "run" "-m" + "unittest" "openid.test.test_suite")))))) (properties `((python2-variant . ,(delay python2-openid)))) (propagated-inputs `(("python-defusedxml" ,python-defusedxml))) (native-inputs - `(("python-psycopg2" ,python-psycopg2) + `(("python-coverage" ,python-coverage) + ("python-psycopg2" ,python-psycopg2) ("python-django" ,python-django))) (home-page "https://github.com/necaris/python3-openid") (synopsis "OpenID support for servers and consumers") diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm index d0401b7bdd..6972e79081 100644 --- a/gnu/packages/python.scm +++ b/gnu/packages/python.scm @@ -56,6 +56,7 @@ ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org> ;;; Copyright © 2018 Maxim Cournoyer <maxim.cournoyer@gmail.com> ;;; Copyright © 2018 Luther Thompson <lutheroto@gmail.com> +;;; Copyright © 2018 Vagrant Cascadian <vagrant@debian.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -908,6 +909,29 @@ version identifier.") (define-public python2-semantic-version (package-with-python2 python-semantic-version)) +(define-public python-serpent + (package + (name "python-serpent") + (version "1.27") + (source + (origin + (method url-fetch) + (uri (pypi-uri "serpent" version)) + (sha256 + (base32 + "04p9dsrm5pv8vhk3flvih55kgvlzpi38hlaykdiakddmgwqw93bg")))) + (build-system python-build-system) + (home-page "https://github.com/irmen/Serpent") + (synopsis "Serializer for literal Python expressions") + (description + "Serpent provides ast.literal_eval() compatible object tree +serialization. It serializes an object tree into bytes (utf-8 encoded string) +that can be decoded and then passed as-is to ast.literal_eval() to rebuild it +as the original object tree. As such it is safe to send serpent data to other +machines over the network for instance (because only safe literals are +encoded).") + (license license:expat))) + (define-public python-setuptools (package (name "python-setuptools") @@ -1048,6 +1072,32 @@ for additional processing.") (define-public python2-capturer (package-with-python2 python-capturer)) +(define-public python-case + (package + (name "python-case") + (version "1.5.3") + (source + (origin + (method url-fetch) + (uri (pypi-uri "case" version)) + (sha256 + (base32 + "1cagg06vfph864s6l5jb0zqliwxh647bki8j6lf4a4qrv40jnhs8")))) + (build-system python-build-system) + (propagated-inputs + `(("python-mock" ,python-mock) + ("python-nose" ,python-nose) + ("python-six" ,python-six) + ("python-unittest2" ,python-unittest2))) + (native-inputs + `(("python-coverage" ,python-coverage))) + (home-page "https://github.com/celery/case") + (synopsis "Unittest utilities and convenience methods") + (description + "The @code{case} package provides utilities on top of unittest, including +some helpful Python 2 compatibility convenience methods.") + (license license:bsd-3))) + (define-public python-verboselogs (package (name "python-verboselogs") @@ -2268,6 +2318,30 @@ object.") (define-public python2-pyyaml (package-with-python2 python-pyyaml)) +(define-public python-vine + (package + (name "python-vine") + (version "1.1.4") + (source + (origin + (method url-fetch) + (uri (pypi-uri "vine" version)) + (sha256 + (base32 + "0wkskb2hb494v9gixqnf4bl972p4ibcmxdykzpwjlfa5picns4aj")))) + (build-system python-build-system) + (native-inputs + `(("python-pytest" ,python-pytest) + ("python-case" ,python-case))) + (home-page "https://github.com/celery/vine") + (synopsis "Promises for Python") + (description + "@code{vine} provides a special implementation of promises in that it can +be used both for \"promise of a value\" and lazy evaluation. The biggest +upside for this is that everything in a promise can also be a promise, +e.g. filters, callbacks and errbacks can all be promises.") + (license license:bsd-3))) + (define-public python-virtualenv (package (name "python-virtualenv") @@ -5977,9 +6051,10 @@ PEP8_PLUGIN('break_before_binary_operator'),")) (string-append (getcwd) "/build/lib:" (getenv "PYTHONPATH"))) (zero? (system* "py.test" "-v"))))))) + (propagated-inputs + `(("python-flake8" ,python-flake8))) (native-inputs - `(("python-flake8" ,python-flake8) - ("python-mock" ,python-mock) + `(("python-mock" ,python-mock) ("python-pep8" ,python-pep8) ("python-pycodestyle" ,python-pycodestyle) ("python-pytest" ,python-pytest))) @@ -8196,18 +8271,21 @@ and provides a uniform API regardless of which JSON implementation is used.") (define-public python-amqp (package (name "python-amqp") - (version "1.4.9") + (version "2.3.2") (source (origin (method url-fetch) (uri (pypi-uri "amqp" version)) (sha256 (base32 - "06n6q0kxhjnbfz3vn8x9yz09lwmn1xi9d6wxp31h5jbks0b4vsid")))) + "1sv600dgqwpimr6i1g59y9hpn50mc236gdqkr7zin13kvlpx0g87")))) (build-system python-build-system) (native-inputs - `(("python-nose" ,python-nose) + `(("python-case" ,python-case) + ("python-pytest-sugar" ,python-pytest-sugar) ("python-mock" ,python-mock))) + (propagated-inputs + `(("python-vine" ,python-vine))) (home-page "https://github.com/celery/py-amqp") (synopsis "Low-level AMQP client for Python (fork of amqplib)") @@ -8261,23 +8339,26 @@ applications.") (define-public python-kombu (package (name "python-kombu") - (version "3.0.37") + (version "4.2.2") (source (origin (method url-fetch) (uri (pypi-uri "kombu" version)) (sha256 (base32 - "0l16chb314gpq2v7fh94a22c30lcv6w3ylmhsa60bldlcq6a0r70")))) + "15k8f7mzqr049sg9vi48m19vjykviafk3f0p5xzgw9by0x0kyxjj")))) (build-system python-build-system) (native-inputs `(("python-mock" ,python-mock) - ("python-nose" ,python-nose))) + ("python-case" ,python-case) + ("python-pyro4" ,python-pyro4) + ("python-pytest-sugar" ,python-pytest-sugar) + ("python-pytz" ,python-pytz))) (propagated-inputs `(("python-anyjson" ,python-anyjson) ("python-amqp" ,python-amqp) ("python-redis" ,python-redis))) - (home-page "http://kombu.readthedocs.org") + (home-page "https://kombu.readthedocs.io") (synopsis "Message passing library for Python") (description "The aim of Kombu is to make messaging in Python as easy as possible by providing an idiomatic high-level interface for the AMQ protocol, @@ -8303,17 +8384,18 @@ RabbitMQ messaging server is the most popular implementation.") (define-public python-billiard (package (name "python-billiard") - (version "3.3.0.23") + (version "3.5.0.5") (source (origin (method url-fetch) (uri (pypi-uri "billiard" version)) (sha256 (base32 - "02wxsc6bhqvzh8j6w758kvgqbnj14l796mvmrcms8fgfamd2lak9")))) + "03msmapj3s5zgqk87d646mafz7a01h5bm2wijalgpi0s80ks5na2")))) (build-system python-build-system) (native-inputs - `(("python-nose" ,python-nose))) + `(("python-case" ,python-case) + ("python-pytest" ,python-pytest))) (home-page "https://github.com/celery/billiard") (synopsis "Python multiprocessing fork with improvements and bugfixes") @@ -8337,31 +8419,35 @@ Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.") (define-public python-celery (package (name "python-celery") - (version "3.1.24") + (version "4.2.1") (source (origin (method url-fetch) (uri (pypi-uri "celery" version)) (sha256 (base32 - "0yh2prhdnx2dgkb67a5drj12hh2zvzx5f611p7mqqg01ydghif4r")))) + "0y66rz7z8dfcgs3s0qxmdddlaq57bzbgxgfz896nbp14grkv9nkp")))) (build-system python-build-system) (arguments - `(#:phases + '(;; TODO The tests fail with Python 3.7 + ;; https://github.com/celery/celery/issues/4849 + #:tests? #f + #:phases (modify-phases %standard-phases - ;; These tests break with Python 3.5: - ;; https://github.com/celery/celery/issues/2897#issuecomment-253066295 - (replace 'check + (add-after 'unpack 'patch-requirements (lambda _ - (zero? - (system* "nosetests" "--exclude=^test_safe_to_remove.*"))))))) + (substitute* "requirements/test.txt" + (("pytest>=3\\.0,<3\\.3") + "pytest>=3.0")) + #t))))) (native-inputs - `(("python-nose" ,python-nose))) + `(("python-case" ,python-case) + ("python-pytest" ,python-pytest))) (propagated-inputs `(("python-pytz" ,python-pytz) ("python-billiard" ,python-billiard) ("python-kombu" ,python-kombu))) - (home-page "http://celeryproject.org") + (home-page "https://celeryproject.org") (synopsis "Distributed Task Queue") (description "Celery is an asynchronous task queue/job queue based on distributed message passing. It is focused on real-time operation, but @@ -9226,6 +9312,13 @@ graphviz.") (setenv "CPATH" (string-append greenlet "/" python))))) #t)) + (add-before 'check 'skip-timer-test + (lambda _ + ;; XXX: Skip 'TestTimerResolution', which appears to be + ;; unreliable. + (substitute* "src/greentest/test__core_timer.py" + (("not greentest.RUNNING_ON_CI") "False")) + #t)) (replace 'check (lambda _ ;; Make sure the build directory is on PYTHONPATH. @@ -9266,17 +9359,6 @@ to provide a high-level synchronous API on top of the libev event loop.") (strip-python2-variant python-gevent)))) (package (inherit base) - (arguments - (substitute-keyword-arguments (package-arguments base) - ((#:phases phases) - `(modify-phases ,phases - (add-before 'check 'skip-timer-test - (lambda _ - ;; XXX: Skip 'TestTimerResolution', which appears to be - ;; unreliable. - (substitute* "src/greentest/test__core_timer.py" - (("not greentest.RUNNING_ON_CI") "False")) - #t)))))) (native-inputs `(,@(package-native-inputs python-gevent) ("python-mock" ,python2-mock)))))) @@ -9759,13 +9841,13 @@ addresses, and phone numbers.") (define-public python-pyaml (package (name "python-pyaml") - (version "17.7.2") + (version "18.11.0") (source (origin (method url-fetch) (uri (pypi-uri "pyaml" version)) (sha256 (base32 - "132grrw0ajq4nrappi3ldbkb952k7yn9b6c7csi2rmvzm1g6ppp2")))) + "0fi604ix8lbpj1266q7js6szm771saprdzzcdwmj43wy83694qmr")))) (build-system python-build-system) (native-inputs `(("python-unidecode" ,python-unidecode))) @@ -9841,20 +9923,25 @@ characters, mouse support, and auto suggestions.") (define-public python-jedi (package (name "python-jedi") - (version "0.12.1") + (version "0.13.1") (source (origin (method url-fetch) (uri (pypi-uri "jedi" version)) (sha256 (base32 - "1h8ypnjisn57kiv1zqrkj1im6sbfnhxllqaa8znh39qkd47ys2dl")))) + "0j11q42g5vjkyhhjpyy8nb0gdxs78m3rpjai7p1hvgpyl9rkyjdp")))) (build-system python-build-system) (arguments - `(#:phases + `( ;; Many tests are failing with Python 3.7.x as of version 0.13.1 (see: + ;; https://github.com/davidhalter/jedi/issues/1263) + #:tests? #f + #:phases (modify-phases %standard-phases - (replace 'check (lambda _ - (invoke "py.test" "-vv")))))) + (replace 'check + (lambda* (#:key tests? #:allow-other-keys) + (when tests? + (invoke "py.test" "-vv"))))))) (native-inputs `(("python-pytest" ,python-pytest) ("python-docopt" ,python-docopt))) @@ -10622,9 +10709,16 @@ useful as a validator for JSON data.") (base32 "090vdksbz341f7ljvr0zswblw4lspa8qaiikzyjkf318arpxmil9")))) (build-system python-build-system) - ;; Test suite requires python-setuptools - (native-inputs - `(("python-setuptools" ,python-setuptools))) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-before 'check 'set-pythonpath + (lambda _ + (setenv "PYTHONPATH" + (string-append + (getcwd) "/test/" + ":" (getenv "PYTHONPATH"))) + #t))))) (home-page "https://github.com/eliben/pyelftools") (synopsis @@ -12544,14 +12638,14 @@ validating Swagger API specifications.") (define-public python-apache-libcloud (package (name "python-apache-libcloud") - (version "2.3.0") + (version "2.4.0") (source (origin (method url-fetch) (uri (pypi-uri "apache-libcloud" version)) (sha256 - (base32 - "15xg79ad4g2xrk081ylvj41k5hmg9hl1xvbmb5hd0fqn08wfwbhf")))) + (base32 + "0daj3mkzw79v5zin2r1s2wkrz1hplfc16bwj4ss68i5qjq4l2p0j")))) (build-system python-build-system) (arguments `(#:phases @@ -13258,6 +13352,28 @@ such as figshare or Zenodo.") (define-public python2-semver (package-with-python2 python-semver)) +(define-public python-pyro4 + (package + (name "python-pyro4") + (version "4.74") + (source + (origin + (method url-fetch) + (uri (pypi-uri "Pyro4" version)) + (sha256 + (base32 + "0pzp7c6q3vvkxq0wy9lr6wd5wky40sajz69g697i5rb2q497pvc9")))) + (build-system python-build-system) + (propagated-inputs + `(("python-serpent" ,python-serpent))) + (home-page "https://pyro4.readthedocs.io") + (synopsis "Distributed object middleware for Python") + (description + "Pyro enables you to build applications in which objects can talk to each +other over the network. You can just use normal Python method calls to call +objects on other machines, also known as remote procedure calls (RPC).") + (license license:expat))) + (define-public python2-pyro (package (name "python2-pyro") @@ -14882,3 +14998,859 @@ RFC 8265 and RFC 8266.") (description "Simple decorator to set attributes of target function or class in a @acronym{DRY, Don't Repeat Yourself} way.") (license license:expat))) + +(define-public python-sybil + (package + (name "python-sybil") + (version "1.0.7") + (source + (origin + (method url-fetch) + (uri (pypi-uri "sybil" version)) + (sha256 + (base32 + "13rdznw3fllmj5sy20bwi3ipzm6rv1dnji1yi01m91ig759jacw6")))) + (build-system python-build-system) + (arguments + '(#:tests? #f)) + (propagated-inputs + `(;("python-coveralls" ,python-coveralls) + ("python-nose" ,python-nose) + ("python-pytest" ,python-pytest))) + (home-page "https://github.com/cjw296/sybil") + (synopsis + "Automated testing for the examples in your documentation.") + (description + "Automated testing for the examples in your documentation.") + (license license:expat))) + +(define-public python-sarge + (package + (name "python-sarge") + (version "0.1.5.post0") + (source + (origin + (method url-fetch) + (uri (pypi-uri "sarge" version)) + (sha256 + (base32 + "1c1ll7pys9vra5cfi8jxlgrgaql6c27l6inpy15aprgqhc4ck36s")))) + (build-system python-build-system) + (arguments + '(#:tests? #f)) + (home-page "http://sarge.readthedocs.org/") + (synopsis + "A wrapper for subprocess which provides command pipeline functionality.") + (description + "A wrapper for subprocess which provides command pipeline functionality.") + (license license:bsd-3))) + +(define-public python-unidiff + (package + (name "python-unidiff") + (version "0.5.5") + (source + (origin + (method url-fetch) + (uri (pypi-uri "unidiff" version)) + (sha256 + (base32 + "1g1501w0ac9plqxd6009ax5c0hi495sv5xnysm68p65njvxvb6lw")))) + (build-system python-build-system) + (home-page + "http://github.com/matiasb/python-unidiff") + (synopsis + "Unified diff parsing/metadata extraction library.") + (description + "Unified diff parsing/metadata extraction library.") + (license license:expat))) + +(define-public python-testfixtures + (package + (name "python-testfixtures") + (version "5.4.0") + (source + (origin + (method url-fetch) + (uri (pypi-uri "testfixtures" version)) + (sha256 + (base32 + "1w581221qbsmc177n7xijqn7wghyaaxxlwd2p34vfcn4jnbfv2ik")))) + (build-system python-build-system) + (arguments + '(#:tests? #f)) + (propagated-inputs + `(("python-coverage" ,python-coverage) + ;("python-coveralls" ,python-coveralls) + ("python-mock" ,python-mock) + ("python-pytest" ,python-pytest) + ;("python-pytest-django" ,python-pytest-django) + ("python-sybil" ,python-sybil) + ("python-zope-component" ,python-zope-component))) + (home-page + "https://github.com/Simplistix/testfixtures") + (synopsis + "A collection of helpers and mock objects for unit tests and doc tests.") + (description + "A collection of helpers and mock objects for unit tests and doc tests.") + (license license:expat))) + +(define-public python-pyprint + (package + (name "python-pyprint") + (version "0.2.6") + (source + (origin + (method url-fetch) + (uri (pypi-uri "PyPrint" version)) + (sha256 + (base32 + "1qmhcz8n9rnxkj2ikcc208900yg4p9qglhw50br7carr1ca1q3ps")))) + (build-system python-build-system) + (arguments + '(#:tests? #f)) + (propagated-inputs + `(("python-colorama" ,python-colorama) + ("python-termcolor" ,python-termcolor))) + (native-inputs + `(("python-pytest" ,python-pytest))) + (home-page "") + (synopsis + "A library providing printing facilities for python applications.") + (description + "A library providing printing facilities for python applications.") + (license #f))) + +(define-public python-libclang-py3 + (package + (name "python-libclang-py3") + (version "3.9.0") + (source + (origin + (method url-fetch) + (uri (pypi-uri "libclang-py3" version)) + (sha256 + (base32 + "0g2zw3mv8i4s9r3l70a5j3k2c09p9igvap0h6lfwf0w32jz8a65b")))) + (build-system python-build-system) + (home-page + "https://bitbucket.org/Anteru/python3-libclang") + (synopsis "Python3 bindings for libclang") + (description "Python3 bindings for libclang") + (license #f))) + +(define-public python-coala-utils + (package + (name "python-coala-utils") + (version "0.6.2") + (source + (origin + (method url-fetch) + (uri (pypi-uri "coala_utils" version)) + (sha256 + (base32 + "0f2bli6acqjz3i5p6a5ykg9r2hkcaxcpq5q36a2jv30wdjkk31z1")))) + (build-system python-build-system) + (arguments + '(#:tests? #f)) + (propagated-inputs + `(("python-appdirs" ,python-appdirs) + ("python-pyprint" ,python-pyprint) + ("python-testfixtures" ,python-testfixtures))) + (home-page + "https://gitlab.com/coala/coala-utils") + (synopsis "A collection of coala utilities.") + (description "A collection of coala utilities.") + (license #f))) + +(define-public python-dependency-management + (package + (name "python-dependency-management") + (version "0.4.0") + (source + (origin + (method url-fetch) + (uri (pypi-uri "dependency_management" version)) + (sha256 + (base32 + "0q5axi5vzla6vfgs8r5mxczih3w0vipa17mqkx2zcirxvy131i7h")))) + (build-system python-build-system) + (arguments + '(#:tests? #f)) + (propagated-inputs + `(("python-coala-utils" ,python-coala-utils) + ("python-sarge" ,python-sarge))) + (home-page "https://gitlab.com/coala/package_manager") + (synopsis "coala Dependency Management") + (description "coala Dependency Management") + (license #f))) + +(define-public python-colorlog + (package + (name "python-colorlog") + (version "3.1.2") + (source + (origin + (method url-fetch) + (uri (pypi-uri "colorlog" version)) + (sha256 + (base32 + "0i21sd6pggr2gqza41vyq2rqyb552wf5iwl4bc16i7kqislbd53z")))) + (build-system python-build-system) + (arguments + '(#:tests? #f)) + (propagated-inputs + `(("python-colorama" ,python-colorama))) + (home-page + "https://github.com/borntyping/python-colorlog") + (synopsis "Log formatting with colors!") + (description "Log formatting with colors!") + (license #f))) + +(define-public coala + (package + (name "coala") + (version "0.11.0") + (source + (origin + (method url-fetch) + (uri (pypi-uri "coala" version)) + (sha256 + (base32 + "03mz2alvjf9aki5cpjl9167bd5kw0aqp8yml08lb5170gpsfyjyd")))) + (build-system python-build-system) + (arguments + '(#:tests? #f + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'patch-requires + (lambda _ + (for-each (lambda (requirement) + (substitute* "requirements.txt" + (((string-append requirement "~=")) + (string-append requirement ">=")))) + '("testfixtures" + "libclang-py3" + "colorlog")) + #t))))) + (propagated-inputs + `(("python-appdirs" ,python-appdirs) + ("python-coala-utils" ,python-coala-utils) + ("python-colorlog" ,python-colorlog) + ("python-dependency-management" + ,python-dependency-management) + ("python-libclang-py3" ,python-libclang-py3) + ("python-packaging" ,python-packaging) + ("python-pygments" ,python-pygments) + ("python-pyprint" ,python-pyprint) + ("python-requests" ,python-requests) + ("python-setuptools" ,python-setuptools) + ("python-testfixtures" ,python-testfixtures) + ("python-unidiff" ,python-unidiff))) + (home-page "http://coala.io/") + (synopsis + "Linting and Fixing Code for All Languages") + (description + "Linting and Fixing Code for All Languages") + (license #f))) + +(define-public python-autoflake + (package + (name "python-autoflake") + (version "1.1") + (source + (origin + (method url-fetch) + (uri (pypi-uri "autoflake" version)) + (sha256 + (base32 + "0cfidqg3msagg92l1hbc644nih0n615c5p9ab1s4yr82g956hkd7")))) + (build-system python-build-system) + (propagated-inputs + `(("python-pyflakes" ,python-pyflakes))) + (home-page "https://github.com/myint/autoflake") + (synopsis + "Removes unused imports and unused variables") + (description + "Removes unused imports and unused variables") + (license #f))) + +(define-public python-cmakelint + (package + (name "python-cmakelint") + (version "1.3.4.1") + (source + (origin + (method url-fetch) + (uri (pypi-uri "cmakelint" version)) + (sha256 + (base32 + "1fb7jlkp6bxx2i80g0z4xl11i927lh74v9bbnkgv9raafqphj9pg")))) + (build-system python-build-system) + (home-page "https://github.com/richq/cmake-lint") + (synopsis "Static code checker for CMake files") + (description + "Static code checker for CMake files") + (license license:asl2.0))) + +(define-public python-cppclean + (package + (name "python-cppclean") + (version "0.12") + (source + (origin + (method url-fetch) + (uri (pypi-uri "cppclean" version)) + (sha256 + (base32 + "05p0qsmrn3zhp33rhdys0ddn8hql6z25sdvbnccqwps8jai5wq2r")))) + (build-system python-build-system) + (home-page "https://github.com/myint/cppclean") + (synopsis + "Find problems in C++ source that slow development of large code bases.") + (description + "Find problems in C++ source that slow development of large code bases.") + (license #f))) + +(define-public python-cpplint + (package + (name "python-cpplint") + (version "1.3.0") + (source + (origin + (method url-fetch) + (uri (pypi-uri "cpplint" version)) + (sha256 + (base32 + "06b7jf9vii2rp8q05h5h6jsrflrwpv2bd5chrj2drij476f16xk8")))) + (build-system python-build-system) + (home-page + "http://en.wikipedia.org/wiki/Cpplint") + (synopsis + "An automated checker to make sure a C++ file follows Google's C++ style guide") + (description + "An automated checker to make sure a C++ file follows Google's C++ style guide") + (license #f))) + +(define-public python-dennis + (package + (name "python-dennis") + (version "0.9") + (source + (origin + (method url-fetch) + (uri (pypi-uri "dennis" version)) + (sha256 + (base32 + "0116hbz6dakwcafcij5hr553gwf7wmg9q1mwmrfwc0vxvbajv54c")))) + (build-system python-build-system) + (propagated-inputs + `(("python-click" ,python-click) + ("python-polib" ,python-polib))) + (native-inputs + `(("python-pytest" ,python-pytest))) + (home-page "http://github.com/willkg/dennis") + (synopsis + "Utilities for working with PO and POT files to ease development and improve localization quality") + (description + "Utilities for working with PO and POT files to ease development and improve localization quality") + (license #f))) + +(define-public python-eradicate + (package + (name "python-eradicate") + (version "0.2.1") + (source + (origin + (method url-fetch) + (uri (pypi-uri "eradicate" version)) + (sha256 + (base32 + "092zmck919bn6sl31ixrzhn88g9nvhwzmwzpq8dzgn6c8k2h3bzr")))) + (build-system python-build-system) + (home-page "https://github.com/myint/eradicate") + (synopsis "Removes commented-out code.") + (description "Removes commented-out code.") + (license #f))) + +(define-public python-guess-language-spirit + (package + (name "python-guess-language-spirit") + (version "0.5.3") + (source + (origin + (method url-fetch) + (uri (pypi-uri "guess_language-spirit" version ".tar.bz2")) + (sha256 + (base32 + "1k4j0xldg741a09lin7iy6sqrah5kr2zcpq5kfvd3gvb4iq09cm9")))) + (build-system python-build-system) + (home-page + "https://bitbucket.org/spirit/guess_language") + (synopsis "Guess the natural language of a text") + (description + "Guess the natural language of a text") + (license #f))) + +(define-public python-template-remover + (package + (name "python-template-remover") + (version "0.1.9") + (source + (origin + (method url-fetch) + (uri (pypi-uri "template-remover" version)) + (sha256 + (base32 + "0hgzynfi9z1qjk7qz4nd1620w9m1rjpmd4xjxp0zmbsn7zk1q3s8")))) + (build-system python-build-system) + (propagated-inputs + `(("python-docopt" ,python-docopt))) + (native-inputs + `(("python-nose" ,python-nose))) + (home-page + "http://github.com/deezer/template-remover") + (synopsis + "Remove the template markup from html files") + (description + "Remove the template markup from html files") + (license #f))) + +(define-public python-html-linter + (package + (name "python-html-linter") + (version "0.4.0") + (source + (origin + (method url-fetch) + (uri (pypi-uri "html-linter" version)) + (sha256 + (base32 + "148ijk0hisb9b049xgc72gxdil3f0ichkpigasi11j1ggxkssb9l")))) + (build-system python-build-system) + (propagated-inputs + `(("python-docopt" ,python-docopt) + ("python-template-remover" ,python-template-remover))) + (native-inputs + `(("python-nose" ,python-nose))) + (home-page "http://github.com/sk-/html-linter") + (synopsis + "Lints an HTML5 file using Google's style guide") + (description + "Lints an HTML5 file using Google's style guide") + (license #f))) + +(define-public python-mypy-lang + (package + (name "python-mypy-lang") + (version "0.5.0") + (source + (origin + (method url-fetch) + (uri (pypi-uri "mypy-lang" version)) + (sha256 + (base32 + "0ibwh1v6f7a0w4hpd3ydw9k7ph74b2lcfwwlli9pzby0vzwg2jq5")))) + (build-system python-build-system) + (home-page "") + (synopsis + "Dummy to remind people to switch to 'pip install mypy'") + (description + "Dummy to remind people to switch to 'pip install mypy'") + (license #f))) + +(define-public python-proselint + (package + (name "python-proselint") + (version "0.8.0") + (source + (origin + (method url-fetch) + (uri (pypi-uri "proselint" version)) + (sha256 + (base32 + "1g8vx04gmv0agmggz1ml5vydfppqvl8dzjvqm6vqw5rzafa89m08")))) + (build-system python-build-system) + (arguments + '(#:tests? #f)) + (propagated-inputs + `(("python-six" ,python-six) + ("python-future" ,python-future) + ("python-click" ,python-click))) + (home-page + "http://github.com/amperser/proselint") + (synopsis "A linter for prose") + (description "A linter for prose") + (license license:bsd-3))) + +(define-public python-pydocstyle + (package + (name "python-pydocstyle") + (version "2.1.1") + (source + (origin + (method url-fetch) + (uri (pypi-uri "pydocstyle" version)) + (sha256 + (base32 + "15ssv8l6cvrmzgwcdzw76rnl4np3qf0dbwr1wsx76y0hc7lwsnsd")))) + (build-system python-build-system) + (propagated-inputs + `(("python-configparser" ,python-configparser) + ("python-six" ,python-six) + ("python-snowballstemmer" + ,python-snowballstemmer))) + (home-page + "https://github.com/PyCQA/pydocstyle/") + (synopsis "Python docstring style checker") + (description "Python docstring style checker") + (license license:expat))) + +(define-public python-pyroma + (package + (name "python-pyroma") + (version "2.3") + (source + (origin + (method url-fetch) + (uri (pypi-uri "pyroma" version)) + (sha256 + (base32 + "0ncnmrqs19jma2q5yz1sh0lcllvg8m96p78bxm50k6bzfc52h07x")))) + (build-system python-build-system) + (propagated-inputs + `(("python-docutils" ,python-docutils))) + (home-page "https://github.com/regebro/pyroma") + (synopsis + "Test your project's packaging friendliness") + (description + "Test your project's packaging friendliness") + (license license:expat))) + +(define-public python-restructuredtext-lint + (package + (name "python-restructuredtext-lint") + (version "1.1.3") + (source + (origin + (method url-fetch) + (uri (pypi-uri "restructuredtext_lint" version)) + (sha256 + (base32 + "0ds05cc5qx1gagwy3cvr93pckvgsvi3zwhgh14l2cari9jlak364")))) + (build-system python-build-system) + (arguments + '(#:tests? #f)) + (propagated-inputs + `(("python-docutils" + ,python-docutils))) + (home-page + "https://github.com/twolfson/restructuredtext-lint") + (synopsis "reStructuredText linter") + (description "reStructuredText linter") + (license #f))) + +(define-public python-rstcheck + (package + (name "python-rstcheck") + (version "3.3") + (source + (origin + (method url-fetch) + (uri (pypi-uri "rstcheck" version)) + (sha256 + (base32 + "1pr1zcd77fj97q6kiz5rfs0nrz1mjwijr4jylcvfk9ca6cyqjnhm")))) + (build-system python-build-system) + (propagated-inputs + `(("python-docutils" + ,python-docutils))) + (home-page "https://github.com/myint/rstcheck") + (synopsis + "Checks syntax of reStructuredText and code blocks nested within it") + (description + "Checks syntax of reStructuredText and code blocks nested within it") + (license #f))) + +(define-public python-dparse + (package + (name "python-dparse") + (version "0.2.1") + (source + (origin + (method url-fetch) + (uri (pypi-uri "dparse" version)) + (sha256 + (base32 + "10pm9q5r97828rml3pzi428ihf2cpaiw25hssgbax0zxv1sr37vw")))) + (build-system python-build-system) + (propagated-inputs + `(("python-packaging" ,python-packaging) + ("python-pyyaml" ,python-pyyaml) + ("python-six" ,python-six))) + (native-inputs + `(("python-pytest" ,python-pytest) + ("python-pytest-runner" ,python-pytest-runner))) + (home-page "https://github.com/jayfk/dparse") + (synopsis "A parser for Python dependency files") + (description + "A parser for Python dependency files") + (license license:expat))) + +(define-public python-safety + (package + (name "python-safety") + (version "1.7.0") + (source + (origin + (method url-fetch) + (uri (pypi-uri "safety" version)) + (sha256 + (base32 + "0yipd9bpxs600dckkr91i51hscs5x9qidi1nbs1367brmmv4n37z")))) + (build-system python-build-system) + (arguments + '(#:tests? #f)) + (propagated-inputs + `(("python-click" ,python-click) + ("python-dparse" ,python-dparse) + ("python-packaging" ,python-packaging) + ("python-requests" ,python-requests))) + (home-page "https://github.com/pyupio/safety") + (synopsis + "Safety checks your installed dependencies for known security vulnerabilities.") + (description + "Safety checks your installed dependencies for known security vulnerabilities.") + (license license:expat))) + +(define-public python-scspell3k + (package + (name "python-scspell3k") + (version "2.1") + (source + (origin + (method url-fetch) + (uri (pypi-uri "scspell3k" version)) + (sha256 + (base32 + "02dp70ikvb2yw839cycjksyi1izvfjlwjps74fh3279asa59m2d9")))) + (build-system python-build-system) + (home-page "https://github.com/myint/scspell") + (synopsis + "A conservative interactive spell checker for source code.") + (description + "A conservative interactive spell checker for source code.") + (license #f))) + +(define-public python-ansicolor + (package + (name "python-ansicolor") + (version "0.2.6") + (source + (origin + (method url-fetch) + (uri (pypi-uri "ansicolor" version)) + (sha256 + (base32 + "078zsfx1wchz9l9brp5nz623adydwqxabg4zd4qyszfxp43inzni")))) + (build-system python-build-system) + (home-page + "https://github.com/numerodix/ansicolor") + (synopsis + "A library to produce ansi color output and colored highlighting and diffing") + (description + "A library to produce ansi color output and colored highlighting and diffing") + (license #f))) + +(define-public python-vim-vint + (package + (name "python-vim-vint") + (version "0.3.18") + (source + (origin + (method url-fetch) + (uri (pypi-uri "vim-vint" version)) + (sha256 + (base32 + "0w038bgic7rdim60rhwrx3gwj33lgmhad8shpvcl2iy6fy8rpp7y")))) + (build-system python-build-system) + (arguments + '(#:tests? #f)) + (propagated-inputs + `(("python-ansicolor" ,python-ansicolor) + ("python-chardet" ,python-chardet) + ("python-pyyaml" ,python-pyyaml))) + (home-page "https://github.com/Kuniwak/vint") + (synopsis "Lint tool for Vim script Language") + (description "Lint tool for Vim script Language") + (license #f))) + +(define-public python-vulture + (package + (name "python-vulture") + (version "0.26") + (source + (origin + (method url-fetch) + (uri (pypi-uri "vulture" version)) + (sha256 + (base32 + "1884vymmlwnpw2naam5xn3cn7w74sn24yvpkf9n567sb3kkzmc49")))) + (build-system python-build-system) + (arguments + '(#:tests? #f)) + (home-page + "https://github.com/jendrikseipp/vulture") + (synopsis "Find dead code") + (description "Find dead code") + (license license:expat))) + +(define-public python-pathspec + (package + (name "python-pathspec") + (version "0.5.5") + (source + (origin + (method url-fetch) + (uri (pypi-uri "pathspec" version)) + (sha256 + (base32 + "1lyhyc6ps4imcj4f99c3njqf3wk2c0f6szrhkqhp8rp7pg8rbi3j")))) + (build-system python-build-system) + (home-page + "https://github.com/cpburnz/python-path-specification") + (synopsis + "Utility library for gitignore style pattern matching of file paths.") + (description + "Utility library for gitignore style pattern matching of file paths.") + (license #f))) + +(define-public python-yamllint + (package + (name "python-yamllint") + (version "1.11.0") + (source + (origin + (method url-fetch) + (uri (pypi-uri "yamllint" version)) + (sha256 + (base32 + "114nbzy8s9sr9czxx7g64p8naf46zgk2cab0df00l3sz6bmcmkq5")))) + (build-system python-build-system) + (propagated-inputs + `(("python-pathspec" ,python-pathspec) + ("python-pyyaml" ,python-pyyaml))) + (home-page + "https://github.com/adrienverge/yamllint") + (synopsis "A linter for YAML files.") + (description "A linter for YAML files.") + (license #f))) + +(define-public python-munkres3 + (package + (name "python-munkres3") + (version "1.0.5.5") + (source + (origin + (method url-fetch) + (uri (pypi-uri "munkres3" version)) + (sha256 + (base32 + "1kyc4nqrff1zri6ky96s4msls7263jy8rp7hid2q1dcnjb9i1hgp")))) + (build-system python-build-system) + (home-page + "http://github.com/datapublica/munkres") + (synopsis + "munkres algorithm for the Assignment Problem. Python 3 port.") + (description + "munkres algorithm for the Assignment Problem. Python 3 port.") + (license #f))) + +(define-public coala-bears + (package + (name "coala-bears") + (version "0.11.0") + (source + (origin + (method url-fetch) + (uri (pypi-uri "coala-bears" version)) + (sha256 + (base32 + "08jlf9jxch1i27kgfmqhnn8qdxzbi2v2l8fwpnc621s6br5k13wl")))) + (build-system python-build-system) + (arguments + '(#:tests? #f + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'patch-requires + (lambda _ + (for-each (lambda (requirement) + (substitute* "bear-requirements.txt" + (((string-append requirement "(=|~)=")) + (string-append requirement ">=")))) + '("autoflake" + "click" + "eradicate" + "html-linter" + "mypy-lang" + "proselint" + "pydocstyle" + "pyflakes" + "pyroma" + "radon" + "restructuredtext-lint" + "rstcheck" + "safety" + "vulture" + "yamllint" + "yapf")) + #t))))) + (propagated-inputs + `(;;("python-aenum" ,python-aenum) + ;; ("python-apertium-lint" ,python-apertium-lint) + ("python-autoflake" ,python-autoflake) + ("python-autopep8" ,python-autopep8) + ("python-bandit" ,python-bandit) + ("python-click" ,python-click) + ("python-cmakelint" ,python-cmakelint) + ("coala" ,coala) + ("python-cppclean" ,python-cppclean) + ("python-cpplint" ,python-cpplint) + ("python-dennis" ,python-dennis) + ;; ("python-docutils-ast-writer" + ;; ,python-docutils-ast-writer) + ("python-eradicate" ,python-eradicate) + ("python-guess-language-spirit" + ,python-guess-language-spirit) + ("python-html-linter" ,python-html-linter) + ;; ("python-httpolice" ,python-httpolice) + ("python-isort" ,python-isort) + ;; ("python-memento-client" ,python-memento-client) + ("python-munkres3" ,python-munkres3) + ("python-mypy-lang" ,python-mypy-lang) + ("python-nbformat" ,python-nbformat) + ("python-nltk" ,python-nltk) + ("python-proselint" ,python-proselint) + ("python-pycodestyle" ,python-pycodestyle) + ("python-pydocstyle" ,python-pydocstyle) + ("python-pyflakes" ,python-pyflakes) + ("python-pylint" ,python-pylint) + ("python-pyroma" ,python-pyroma) + ("python-pyyaml" ,python-pyyaml) + ("python-radon" ,python-radon) + ("python-restructuredtext-lint" + ,python-restructuredtext-lint) + ("python-rstcheck" ,python-rstcheck) + ("python-safety" ,python-safety) + ("python-scspell3k" ,python-scspell3k) + ("python-vim-vint" ,python-vim-vint) + ("python-vulture" ,python-vulture) + ("python-yamllint" ,python-yamllint) + ("python-yapf" ,python-yapf) + )) + (home-page "http://coala.rtfd.org/") + (synopsis + "Bears for coala (Code Analysis Application)") + (description + "Bears for coala (Code Analysis Application)") + (license #f))) diff --git a/gnu/packages/rails.scm b/gnu/packages/rails.scm index 5348d914cf..84d735c465 100644 --- a/gnu/packages/rails.scm +++ b/gnu/packages/rails.scm @@ -21,6 +21,7 @@ #:use-module ((guix licenses) #:prefix license:) #:use-module (guix download) #:use-module (guix packages) + #:use-module (gnu packages) #:use-module (gnu packages ruby) #:use-module (guix build-system ruby)) @@ -64,6 +65,41 @@ migration.") (home-page "https://github.com/rails/spring") (license license:expat))) +(define-public ruby-spring-watcher-listen + (package + (name "ruby-spring-watcher-listen") + (version "2.0.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "spring-watcher-listen" version)) + (sha256 + (base32 + "16gjqbhj3bkambafziza4pbw6g4zvh8z17lj87m8r90pgzcp93sj")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f ; circular dependency with rails? + #:phases + (modify-phases %standard-phases + (add-before 'check 'fix-gemfile + (lambda _ + (substitute* "Gemfile" + (("^gem \\\"spring.*") "gem 'spring'\ngem 'listen'\n")) + #t))))) + (native-inputs + `(("bundler" ,bundler) + ("ruby-activesupport" ,ruby-activesupport))) + (propagated-inputs + `(("ruby-listen" ,ruby-listen) + ("ruby-spring" ,ruby-spring))) + (synopsis + "Makes spring watch files using the listen gem.") + (description + "Makes spring watch files using the listen gem.") + (home-page + "https://github.com/jonleighton/spring-watcher-listen") + (license license:expat))) + (define-public ruby-debug-inspector (package (name "ruby-debug-inspector") @@ -93,3 +129,592 @@ API.") (home-page "https://github.com/banister/debug_inspector") (license license:expat))) + +(define-public ruby-activemodel + (package + (name "ruby-activemodel") + (version "5.2.1") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "activemodel" version)) + (sha256 + (base32 + "043nnxaf3cfq8jijls0jh1bg3a8v5zd9slc62zc2acp2n2wkjnd4")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) + (propagated-inputs + `(("ruby-activesupport" ,ruby-activesupport))) + (synopsis + "A toolkit for building modeling frameworks like Active Record. Rich support for attributes, callbacks, validations, serialization, internationalization, and testing.") + (description + "This package provides a toolkit for building modeling frameworks like Active Record. Rich support for attributes, callbacks, validations, serialization, internationalization, and testing.") + (home-page "http://www.rubyonrails.org") + (license license:expat))) + +(define-public ruby-activerecord + (package + (name "ruby-activerecord") + (version "5.2.1") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "activerecord" version)) + (sha256 + (base32 + "0pc7cycvhzjpw0swil2inka6c0fvcxhln793czp52pidg0654g7g")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) + (propagated-inputs + `(("ruby-activemodel" ,ruby-activemodel) + ("ruby-activesupport" ,ruby-activesupport) + ("ruby-arel" ,ruby-arel))) + (synopsis + "Databases on Rails. Build a persistent domain model by mapping database tables to Ruby classes. Strong conventions for associations, validations, aggregations, migrations, and testing come baked-in.") + (description + "Databases on Rails. Build a persistent domain model by mapping database tables to Ruby classes. Strong conventions for associations, validations, aggregations, migrations, and testing come baked-in.") + (home-page "http://www.rubyonrails.org") + (license license:expat))) + +(define-public ruby-rails-html-sanitizer + (package + (name "ruby-rails-html-sanitizer") + (version "1.0.3") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "rails-html-sanitizer" version)) + (sha256 + (base32 + "138fd86kv073zqfx0xifm646w6bgw2lr8snk16lknrrfrss8xnm7")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) ; tests not included + (propagated-inputs + `(("ruby-loofah" ,ruby-loofah))) + (synopsis + "HTML sanitization for Rails applications") + (description + "HTML sanitization for Rails applications") + (home-page + "https://github.com/rails/rails-html-sanitizer") + (license license:expat))) + +(define-public ruby-rails-dom-testing + (package + (name "ruby-rails-dom-testing") + (version "2.0.2") + (source + (origin + (method url-fetch) + ;; The gem does not include a Rakefile, so we fetch the tarball from + ;; Github. + (uri (string-append "https://github.com/rails/rails-dom-testing/archive/v" + version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1bjc0mm4hc2xrq0066q7kbgzzmdn1vdnsv08xwy90vf2b6x70lxf")))) + (build-system ruby-build-system) + (native-inputs + `(("bundler" ,bundler))) + (propagated-inputs + `(("ruby-activesupport" ,ruby-activesupport) + ("ruby-nokogiri" ,ruby-nokogiri))) + (synopsis + " This gem can compare doms and assert certain elements exists in doms using Nokogiri. ") + (description + " This gem can compare doms and assert certain elements exists in doms using Nokogiri. ") + (home-page + "https://github.com/rails/rails-dom-testing") + (license license:expat))) + +(define-public ruby-actionview + (package + (name "ruby-actionview") + (version "5.2.1") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "actionview" version)) + (sha256 + (base32 + "0dxanjs7ngpny4ig7dg93ywmg9ljswzg8risdlff6ag8fzvsnidf")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) ; tests not included + (propagated-inputs + `(("ruby-activesupport" ,ruby-activesupport) + ("ruby-builder" ,ruby-builder) + ("ruby-erubi" ,ruby-erubi) + ("ruby-rails-dom-testing" + ,ruby-rails-dom-testing) + ("ruby-rails-html-sanitizer" + ,ruby-rails-html-sanitizer))) + (synopsis + "Simple, battle-tested conventions and helpers for building web pages.") + (description + "Simple, battle-tested conventions and helpers for building web pages.") + (home-page "http://www.rubyonrails.org") + (license license:expat))) + +(define-public ruby-actionpack + (package + (name "ruby-actionpack") + (version "5.2.1") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "actionpack" version)) + (sha256 + (base32 + "19zv9ix9iwpd8dxi5hyxgwrc1gh0fvx0a2vjhmic8dn8six41f4f")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) ; tests not included + (propagated-inputs + `(("ruby-actionview" ,ruby-actionview) + ("ruby-activesupport" ,ruby-activesupport) + ("ruby-rack" ,ruby-rack) + ("ruby-rack-test" ,ruby-rack-test) + ("ruby-rails-dom-testing" + ,ruby-rails-dom-testing) + ("ruby-rails-html-sanitizer" + ,ruby-rails-html-sanitizer))) + (synopsis + "Web apps on Rails. Simple, battle-tested conventions for building and testing MVC web applications. Works with any Rack-compatible server.") + (description + "Web apps on Rails. Simple, battle-tested conventions for building and testing MVC web applications. Works with any Rack-compatible server.") + (home-page "http://www.rubyonrails.org") + (license license:expat))) + +(define-public ruby-actioncable + (package + (name "ruby-actioncable") + (version "5.2.1") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "actioncable" version)) + (sha256 + (base32 + "17vdxn0afi5rfnbs09nl0m0cyj7yvpi445bmi8pkmzbaqzqkq3ff")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) ; tests not included + (propagated-inputs + `(("ruby-actionpack" ,ruby-actionpack) + ("ruby-nio4r" ,ruby-nio4r) + ("ruby-websocket-driver" ,ruby-websocket-driver))) + (synopsis + "Structure many real-time application concerns into channels over a single WebSocket connection.") + (description + "Structure many real-time application concerns into channels over a single WebSocket connection.") + (home-page "http://rubyonrails.org") + (license license:expat))) + +(define-public ruby-activejob + (package + (name "ruby-activejob") + (version "5.2.1") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "activejob" version)) + (sha256 + (base32 + "1m4l7z08cx1lybfswfggy7y1rxnwr6gi15h0g9kkkkvmmn6klf3r")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) + (propagated-inputs + `(("ruby-activesupport" ,ruby-activesupport) + ("ruby-globalid" ,ruby-globalid))) + (synopsis + "Declare job classes that can be run by a variety of queueing backends.") + (description + "Declare job classes that can be run by a variety of queueing backends.") + (home-page "http://www.rubyonrails.org") + (license license:expat))) + +(define-public ruby-activestorage + (package + (name "ruby-activestorage") + (version "5.2.1") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "activestorage" version)) + (sha256 + (base32 + "0wncr3h94jsjmmqqmmips9vgy2kf1zhb96rlv5fbrgqplfhvpyag")))) + (build-system ruby-build-system) + (arguments + '(#:tests? #f)) + (propagated-inputs + `(("ruby-actionpack" ,ruby-actionpack) + ("ruby-activerecord" ,ruby-activerecord) + ("ruby-marcel" ,ruby-marcel))) + (synopsis + "Attach cloud and local files in Rails applications.") + (description + "Attach cloud and local files in Rails applications.") + (home-page "http://rubyonrails.org") + (license license:expat))) + +(define-public ruby-actionmailer + (package + (name "ruby-actionmailer") + (version "5.2.1") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "actionmailer" version)) + (sha256 + (base32 + "0h1nqg47jap0wzp0dhlnck4xjijfvdfw49aipjp8y2ihdpvyqrx6")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) ; tests not included + (propagated-inputs + `(("ruby-actionpack" ,ruby-actionpack) + ("ruby-actionview" ,ruby-actionview) + ("ruby-activejob" ,ruby-activejob) + ("ruby-mail" ,ruby-mail) + ("ruby-rails-dom-testing" + ,ruby-rails-dom-testing))) + (synopsis + "Email on Rails. Compose, deliver, receive, and test emails using the familiar controller/view pattern. First-class support for multipart email and attachments.") + (description + "Email on Rails. Compose, deliver, receive, and test emails using the familiar controller/view pattern. First-class support for multipart email and attachments.") + (home-page "http://www.rubyonrails.org") + (license license:expat))) + +(define-public ruby-discard + (package + (name "ruby-discard") + (version "1.0.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "discard" version)) + (sha256 + (base32 + "1vyxhy7yz6l6kkys65kd7b5lj79ajvh495qqhvzn60wlz2dpap7r")))) + (build-system ruby-build-system) + (propagated-inputs + `(("ruby-activerecord" ,ruby-activerecord))) + (synopsis + "Allows marking ActiveRecord objects as discarded, and provides scopes for filtering.") + (description + "Allows marking ActiveRecord objects as discarded, and provides scopes for filtering.") + (home-page + "https://github.com/jhawthorn/discard") + (license license:expat))) + +(define-public ruby-railties + (package + (name "ruby-railties") + (version "5.2.1") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "railties" version)) + (sha256 + (base32 + "19y343dvb7vih82q2ssyhp1cirmp5sp1vpw4k5zmd1bxxkjix9qv")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) ; tests not included + (propagated-inputs + `(("ruby-actionpack" ,ruby-actionpack) + ("ruby-activesupport" ,ruby-activesupport) + ("ruby-method-source" ,ruby-method-source) + ("ruby-thor" ,ruby-thor))) + (synopsis + "Rails internals: application bootup, plugins, generators, and rake tasks.") + (description + "Rails internals: application bootup, plugins, generators, and rake tasks.") + (home-page "http://www.rubyonrails.org") + (license license:expat))) + +(define-public ruby-sprockets-rails + (package + (name "ruby-sprockets-rails") + (version "3.1.1") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "sprockets-rails" version)) + (sha256 + (base32 + "1sak0as7ka964f6zjb1w8hkvfkkbf55kpcyvh7k6nyrb6pqnwmnf")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) ; tests not included + (propagated-inputs + `(("ruby-actionpack" ,ruby-actionpack) + ("ruby-activesupport" ,ruby-activesupport) + ("ruby-sprockets" ,ruby-sprockets))) + (synopsis "Sprockets Rails integration") + (description "Sprockets Rails integration") + (home-page + "https://github.com/rails/sprockets-rails") + (license license:expat))) + +(define-public ruby-sass-rails + (package + (name "ruby-sass-rails") + (version "5.0.6") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "sass-rails" version)) + (sha256 + (base32 + "0iji20hb8crncz14piss1b29bfb6l89sz3ai5fny3iw39vnxkdcb")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) ; No tests are included in gem. + (propagated-inputs + `(("ruby-railties" ,ruby-railties) + ("ruby-sass" ,ruby-sass) + ("ruby-sprockets" ,ruby-sprockets) + ("ruby-sprockets-rails" ,ruby-sprockets-rails) + ("ruby-tilt" ,ruby-tilt))) + (synopsis + "Sass adapter for the Rails asset pipeline.") + (description + "Sass adapter for the Rails asset pipeline.") + (home-page "https://github.com/rails/sass-rails") + (license license:expat))) + +(define-public ruby-coffee-rails + (package + (name "ruby-coffee-rails") + (version "4.2.2") + (source + (origin + (method url-fetch) + ;; Tests are not distributed at rubygems.org so download from GitHub + ;; instead. + (uri (string-append "https://github.com/rails/coffee-rails/archive/v" + version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1zbcs26dnic3ws1p0chggjrcjwkrgv445l765s4r615y1wqq1nfp")) + (patches (search-patches "ruby-coffee-rails-fix-rakefile.patch")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) ; Tests require rails, disable to precent circular dependency. + (propagated-inputs + `(("ruby-coffee-script" ,ruby-coffee-script) + ("ruby-railties" ,ruby-railties))) + (synopsis + "CoffeeScript adapter for the Rails asset pipeline.") + (description + "CoffeeScript adapter for the Rails asset pipeline.") + (home-page + "https://github.com/rails/coffee-rails") + (license license:expat))) + +(define-public ruby-jquery-rails + (package + (name "ruby-jquery-rails") + (version "4.3.1") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "jquery-rails" version)) + (sha256 + (base32 + "02ii77vwxc49f2lrkbdzww2168bp5nihwzakc9mqyrsbw394w7ki")))) + (build-system ruby-build-system) + (arguments + '(#:tests? #f)) + (native-inputs + `(("bundler" ,bundler))) + (propagated-inputs + `(("ruby-rails-dom-testing" + ,ruby-rails-dom-testing) + ("ruby-railties" ,ruby-railties) + ("ruby-thor" ,ruby-thor))) + (synopsis + "This gem provides jQuery and the jQuery-ujs driver for your Rails 4+ application.") + (description + "This gem provides jQuery and the jQuery-ujs driver for your Rails 4+ application.") + (home-page + "http://rubygems.org/gems/jquery-rails") + (license license:expat))) + +(define-public ruby-web-console + (package + (name "ruby-web-console") + (version "3.3.1") + (source + (origin + (method url-fetch) + ;; Download from GitHub as test files are not provided in the gem. + (uri (string-append "https://github.com/rails/web-console/archive/v" + version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1gmymwvgwqjv4gmg2vb0abm6flwax9sg73wmh6yb7m818pn2lz3n")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) ; Do not test to prevent dependency cycle with rails. + ;; (arguments + ;; `(#:phases + ;; (modify-phases %standard-phases + ;; (add-before 'check 'setenv + ;; (lambda _ + ;; (setenv "RUBYLIB" "lib") + ;; ;; (substitute* "Rakefile" + ;; ;; (("require 'web_console") ; This is not required for + ;; ;; ; travis, so hmm. + ;; ;; "require 'pathname'; require 'uri'; require 'web_console")) + ;; #t))))) + ;; (native-inputs + ;; `(("bundler" ,bundler))) + (propagated-inputs + `(("ruby-actionview" ,ruby-actionview) + ("ruby-activemodel" ,ruby-activemodel) + ("ruby-debug-inspector" ,ruby-debug-inspector) + ("ruby-railties" ,ruby-railties))) + (synopsis + "A debugging tool for your Ruby on Rails applications.") + (description + "This package provides a debugging tool for your Ruby on Rails applications.") + (home-page + "https://github.com/rails/web-console") + (license license:expat))) + +(define-public ruby-with-advisory-lock + (package + (name "ruby-with-advisory-lock") + (version "3.2.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "with_advisory_lock" version)) + (sha256 + (base32 + "1gdwy0mmhn199n1sh42j14m47chbhbdym3sah4yz3igpj1l956r7")))) + (build-system ruby-build-system) + (arguments + '(#:tests? #f)) + (propagated-inputs + `(("ruby-activerecord" ,ruby-activerecord))) + (synopsis "Advisory locking for ActiveRecord") + (description "Advisory locking for ActiveRecord") + (home-page + "https://github.com/mceachen/with_advisory_lock") + (license license:expat))) + +(define-public ruby-rails + (package + (name "ruby-rails") + (version "5.2.1") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "rails" version)) + (sha256 + (base32 + "1307cv1p6cj350hq2mi00dfgjb77rzvlhrr3h0bjz5s0a6jgwv3p")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) ; No tests included in gem. TODO: download from GitHub so + ; tests can be run. + (propagated-inputs + `(("ruby-actioncable" ,ruby-actioncable) + ("ruby-actionmailer" ,ruby-actionmailer) + ("ruby-actionpack" ,ruby-actionpack) + ("ruby-actionview" ,ruby-actionview) + ("ruby-activejob" ,ruby-activejob) + ("ruby-activemodel" ,ruby-activemodel) + ("ruby-activerecord" ,ruby-activerecord) + ("ruby-activestorage" ,ruby-activestorage) + ("ruby-activesupport" ,ruby-activesupport) + ("bundler" ,bundler) + ("ruby-railties" ,ruby-railties) + ("ruby-sprockets-rails" ,ruby-sprockets-rails) + ("ruby-spring" ,ruby-spring) + ("ruby-sqlite3" ,ruby-sqlite3) + ("ruby-puma" ,ruby-puma) + ("ruby-sass-rails" ,ruby-sass-rails) + ("ruby-uglifier" ,ruby-uglifier) + ("ruby-coffee-rails" ,ruby-coffee-rails) + ("ruby-jquery-rails" ,ruby-jquery-rails) + ("ruby-turbolinks" ,ruby-turbolinks) + ("ruby-jbuilder" ,ruby-jbuilder) + ("ruby-byebug" ,ruby-byebug) + ("ruby-web-console" ,ruby-web-console) + ("ruby-listen" ,ruby-listen-3.0) + ("ruby-spring-watcher-listen" ,ruby-spring-watcher-listen))) + (synopsis + "Ruby on Rails is a full-stack web framework optimized for programmer happiness and sustainable productivity. It encourages beautiful code by favoring convention over configuration.") + (description + "Ruby on Rails is a full-stack web framework optimized for programmer happiness and sustainable productivity. It encourages beautiful code by favoring convention over configuration.") + (home-page "http://www.rubyonrails.org") + (license license:expat))) + +(define-public ruby-squasher + (package + (name "ruby-squasher") + (version "0.6.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "squasher" version)) + (sha256 + (base32 + "1z7s4qllbqa27h4qf52h3hacs6y7zksnw32r2qkgs4spsd4x9s2h")))) + (build-system ruby-build-system) + (arguments + '(#:test-target "spec")) + (native-inputs + `(("bundler" ,bundler) + ("ruby-rspec" ,ruby-rspec))) + (synopsis "Squash your old migrations") + (description "Squash your old migrations") + (home-page "https://github.com/jalkoby/squasher") + (license license:expat))) + +(define-public ruby-annotate + (package + (name "ruby-annotate") + (version "2.7.2") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "annotate" version)) + (sha256 + (base32 + "079y33iy65nv1cqnh1zmi3v2y9yp1z3zzsf2wdh35m3c80v6kaz4")))) + (build-system ruby-build-system) + (arguments + '(#:tests? #f + #:phases + (modify-phases %standard-phases + (add-before 'build 'patch-annotate + (lambda _ + (substitute* "bin/annotate" + (("require 'bundler'") + "") + (("Bundler.setup") + ""))))))) + (propagated-inputs + `(("ruby-activerecord" ,ruby-activerecord) + ("ruby-activesupport" ,ruby-activesupport))) + (synopsis + "Annotates Rails/ActiveRecord Models, routes, fixtures, and others based on the database schema.") + (description + "Annotates Rails/ActiveRecord Models, routes, fixtures, and others based on the database schema.") + (home-page + "http://github.com/ctran/annotate_models") + (license #f))) diff --git a/gnu/packages/rdesktop.scm b/gnu/packages/rdesktop.scm index bd2b5737e9..3c8444b00a 100644 --- a/gnu/packages/rdesktop.scm +++ b/gnu/packages/rdesktop.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2015 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be> ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr> +;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il> ;;; ;;; This file is part of GNU Guix. ;;; @@ -28,6 +29,8 @@ #:use-module (gnu packages compression) #:use-module (gnu packages cups) #:use-module (gnu packages docbook) + #:use-module (gnu packages freedesktop) + #:use-module (gnu packages glib) #:use-module (gnu packages gstreamer) #:use-module (gnu packages image) #:use-module (gnu packages linux) @@ -35,6 +38,7 @@ #:use-module (gnu packages pulseaudio) #:use-module (gnu packages tls) #:use-module (gnu packages video) + #:use-module (gnu packages xdisorg) #:use-module (gnu packages xorg) #:use-module (gnu packages xml)) @@ -73,64 +77,67 @@ to remotely control a user's Windows desktop.") (license license:gpl3+))) (define-public freerdp - (let ((commit "03ab68318966c3a22935a02838daaea7b7fbe96c")) - (package - (name "freerdp") - (version (git-version "1.1" "1" commit)) - (source (origin - (method git-fetch) - (uri (git-reference - ;; We need the 1.1 branch for RDP support in vinagre. - (url "git://github.com/FreeRDP/FreeRDP.git") - (commit commit))) - (file-name (git-file-name name version)) - (sha256 - (base32 "07ish8rmvbk2zd99k91qybmmh5h4afly75l5kbvslhq1r6k8pbmp")))) - (build-system cmake-build-system) - (native-inputs - `(("pkg-config" ,pkg-config) - ("libxslt" ,libxslt) - ("libxml2" ,libxml2) - ("docbook-xsl" ,docbook-xsl) - ("xmlto" ,xmlto))) - (inputs - `(("libx11" ,libx11) - ("libxkbfile" ,libxkbfile) - ("libxcursor" ,libxcursor) - ("libxext" ,libxext) - ("libxi" ,libxi) - ("libxv" ,libxv) - ("libxrandr" ,libxrandr) - ("libxrender" ,libxrender) - ("libxinerama" ,libxinerama) - ("libxshmfence" ,libxshmfence) - ("cups" ,cups) - ("ffmpeg" ,ffmpeg-2.8) - ("libjpeg" ,libjpeg) - ("pulseaudio" ,pulseaudio) - ("alsa-lib" ,alsa-lib) - ("zlib" ,zlib) - ("openssl" ,openssl))) - (arguments - `(#:build-type "RELEASE" - #:configure-flags - (list "-DWITH_JPEG=ON" - ,@(if (string-prefix? "x86_64" - (or (%current-target-system) - (%current-system))) - '("-DWITH_SSE2=ON") - '()) - (string-append "-DDOCBOOKXSL_DIR=" - (assoc-ref %build-inputs "docbook-xsl") - "/xml/xsl/docbook-xsl-" - ,(package-version docbook-xsl)) - "-DWITH_PULSE=ON" - "-DWITH_CUPS=ON") - #:tests? #f)) ; no 'test' target - (home-page "https://www.freerdp.com") - (synopsis "Remote Desktop Protocol implementation") - (description "FreeRDP implements Microsoft's Remote Desktop Protocol. + (package + (name "freerdp") + (version "2.0.0-rc4") + (source (origin + (method git-fetch) + (uri (git-reference + (url "git://github.com/FreeRDP/FreeRDP.git") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 "0546i0m2d4nz5jh84ngwzpcm3c43fp987jk6cynqspsmvapab6da")))) + (build-system cmake-build-system) + (native-inputs + `(("docbook-xml" ,docbook-xml) + ("docbook-xsl" ,docbook-xsl) + ("glib" ,glib) + ("libxml2" ,libxml2) + ("libxslt" ,libxslt) + ("pkg-config" ,pkg-config) + ("xmlto" ,xmlto))) + (inputs + `(("alsa-lib" ,alsa-lib) + ("cups" ,cups) + ("ffmpeg" ,ffmpeg) + ("libjpeg" ,libjpeg) + ("libx11" ,libx11) + ("libxkbcommon" ,libxkbcommon) + ("libxkbfile" ,libxkbfile) + ("libxcursor" ,libxcursor) + ("libxext" ,libxext) + ("libxi" ,libxi) + ("libxv" ,libxv) + ("libxrandr" ,libxrandr) + ("libxrender" ,libxrender) + ("libxinerama" ,libxinerama) + ("libxshmfence" ,libxshmfence) + ("openssl" ,openssl) + ("pulseaudio" ,pulseaudio) + ("wayland" ,wayland) + ("zlib" ,zlib))) + (arguments + `(#:build-type "RELEASE" + #:configure-flags + (list "-DWITH_JPEG=ON" + "-DWITH_LIBSYSTEMD=OFF" + ,@(if (string-prefix? "x86_64" + (or (%current-target-system) + (%current-system))) + '("-DWITH_SSE2=ON") + '()) + (string-append "-DDOCBOOKXSL_DIR=" + (assoc-ref %build-inputs "docbook-xsl") + "/xml/xsl/docbook-xsl-" + ,(package-version docbook-xsl)) + "-DWITH_PULSE=ON" + "-DWITH_CUPS=ON" + "-DBUILD_TESTING=ON"))) + (home-page "https://www.freerdp.com") + (synopsis "Remote Desktop Protocol implementation") + (description "FreeRDP implements Microsoft's Remote Desktop Protocol. It consists of the @code{xfreerdp} client, libraries for client and server functionality, and Windows Portable Runtime (WinPR), a portable implementation of parts of the Windows API.") - (license license:asl2.0)))) + (license license:asl2.0))) diff --git a/gnu/packages/rdf.scm b/gnu/packages/rdf.scm index 22ea21dd94..1c045b6ecc 100644 --- a/gnu/packages/rdf.scm +++ b/gnu/packages/rdf.scm @@ -299,7 +299,7 @@ ideal (e.g. in LV2 implementations or embedded applications).") (define-public python-rdflib (package (name "python-rdflib") - (version "4.1.2") + (version "4.2.2") (source (origin (method url-fetch) @@ -307,15 +307,12 @@ ideal (e.g. in LV2 implementations or embedded applications).") "https://pypi.python.org/packages/source/r/rdflib/rdflib-" version ".tar.gz")) - (patches - ;; The patch has no effect under Python 3. - (search-patches "python2-rdflib-drop-sparqlwrapper.patch")) (sha256 (base32 - "0kvaf332cqbi47rqzlpdx4mbkvw12mkrzkj8n9l19wk713d4py9w")))) + "0398c714znnhaa2x7v51b269hk20iz073knq2mvmqp2ma92z27fs")))) (build-system python-build-system) (arguments - '(;; FIXME: Three test failures. Try uncommenting the below next update. + '(;; FIXME: Three test failures. Should be fixed next release. #:tests? #f)) ;; #:phases ;; (modify-phases %standard-phases @@ -323,7 +320,7 @@ ideal (e.g. in LV2 implementations or embedded applications).") ;; (lambda _ ;; ;; Run tests from the build directory so python3 only ;; ;; sees the installed 2to3 version. - ;; (zero? (system* "nosetests" "--where=./build/src"))))) + ;; (zero? (system* "nosetests" "--where=./build/src"))))))) (native-inputs `(("python-nose" ,python-nose))) (propagated-inputs diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm index 2fde016851..6db0edaac1 100644 --- a/gnu/packages/ruby.scm +++ b/gnu/packages/ruby.scm @@ -30,12 +30,18 @@ #:use-module ((guix licenses) #:prefix license:) #:use-module (gnu packages) #:use-module (gnu packages base) + #:use-module (gnu packages check) #:use-module (gnu packages compression) #:use-module (gnu packages databases) + #:use-module (gnu packages rails) #:use-module (gnu packages readline) #:use-module (gnu packages autotools) #:use-module (gnu packages java) + #:use-module (gnu packages javascript) #:use-module (gnu packages libffi) + #:use-module (gnu packages libidn) + #:use-module (gnu packages linux) + #:use-module (gnu packages lsof) #:use-module (gnu packages maths) #:use-module (gnu packages ncurses) #:use-module (gnu packages networking) @@ -340,6 +346,42 @@ notebook).") (home-page "https://github.com/SciRuby/iruby") (license license:expat))) +(define-public ruby-rspec-spies + (package + (name "ruby-rspec-spies") + (version "2.1.4") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "rspec-spies" version)) + (sha256 + (base32 + "0pyjy35k59gsiv7l8585yx4gkg2vhycjycz9jlmgkx8s62dxnjgv")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) ; Tests fail, is this completely deprecated? + ;; phases + ;; (modify-phases %standard-phases + ;; (replace 'check + ;; (lambda _ + ;; (zero? (system* "rspec")))) + ;; (add-before 'check 'fix-dependencies + ;; (lambda _ + ;; (delete-file "Gemfile.lock") + ;; (substitute* "Gemfile" + ;; ((".*jeweler.*") "\n")) + ;; #t))))) + ;; (native-inputs + ;; `(("bundler" ,bundler) + ;; ("ruby-appraisal" ,ruby-appraisal))) + (propagated-inputs + `(("ruby-rspec" ,ruby-rspec-2))) + (synopsis "test spies, for rspec") + (description "test spies, for rspec") + (home-page + "http://github.com/technicalpickles/rspec-spies") + (license #f))) + ;; RSpec is the dominant testing library for Ruby projects. Even RSpec's ;; dependencies use RSpec for their test suites! To avoid these circular ;; dependencies, we disable tests for all of the RSpec-related packages. @@ -455,19 +497,51 @@ outcomes of a code example.") (source (origin (method url-fetch) - (uri (rubygems-uri "rspec-its" version)) + ;; Use GitHub as a source because otherwise we cannot patch directly + (uri (string-append "https://github.com/rspec/rspec-its/archive/v" + version ".tar.gz")) (sha256 (base32 - "1pwphny5jawcm1hda3vs9pjv1cybaxy17dc1s75qd7drrvx697p3")))) + "088f3y7vd3c8g2gpi0z76qabaabfg0fb70ly3d0xqzbani0lrf09")) + (patches + (list + (origin (method url-fetch) + (uri (string-append + "https://github.com/rspec/rspec-its/commit/" + "bfaab439c7c879f5ef25552f41827891f6308373.patch")) + (file-name "ruby-rspec-its-fix-specs-for-ruby-2.4.patch") + (sha256 + (base32 + "0lnik0kvrpgkakvdb2fmzg22pdlraf6kiidr9sv6rnfyviiqwxgh"))))))) (build-system ruby-build-system) (arguments - `(#:tests? #f)) ; needs cucumber. + `(#:test-target "spec" + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'dont-install-gems-from-gemfile + (lambda _ + (substitute* "Gemfile" + (("rspec rspec-core rspec-expectations rspec-mocks rspec-support") + "")) + #t)) + (add-before 'check 'remove-unnecessary-dependency-versions-from-gemfile + (lambda _ + (substitute* "rspec-its.gemspec" + (("rake.*") "rake'\n") + (("cucumber.*") "cucumber'\n")) + #t))))) (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.") + (native-inputs + `(("bundler" ,bundler) + ("ruby-cucumber" ,ruby-cucumber) + ("ruby-aruba" ,ruby-aruba))) + (synopsis "RSpec extension that provides the @code{its} method") + (description + "RSpec::Its provides the its method as a short-hand to specify the expected +value of an attribute. For example, one can use @code{its(:size)\\{should +eq(1)\\}}.") (home-page "https://github.com/rspec/rspec-its") (license license:expat))) @@ -505,6 +579,56 @@ support for stubbing and mocking.") (propagated-inputs `(("ruby-diff-lcs" ,ruby-diff-lcs))))) +(define-public ruby-rspec-pending-for + (package + (name "ruby-rspec-pending-for") + (version "0.1.3") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "rspec-pending_for" version)) + (sha256 + (base32 + "0f9sj7v3j14fvd631smxr04l53pk8dqwn9ybqkjdqmzvcv73b5n6")))) + (build-system ruby-build-system) + (arguments + `(#:test-target "spec")) + (native-inputs + `(("bundler" ,bundler))) + (propagated-inputs + `(("ruby-rspec-core" ,ruby-rspec-core) + ("ruby-ruby-engine" ,ruby-ruby-engine) + ("ruby_version" ,ruby_version))) + (synopsis + "Mark specs pending or skipped for specific Ruby engine (e.g. MRI or JRuby) / version combinations") + (description + "Mark specs pending or skipped for specific Ruby engine (e.g. MRI or JRuby) / version combinations") + (home-page + "https://github.com/pboling/rspec-pending_for") + (license #f))) + +(define-public ruby-rspec-rerun + (package + (name "ruby-rspec-rerun") + (version "1.1.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "rspec-rerun" version)) + (sha256 + (base32 + "1gy7znkcaqhpccfnk2nvaqbsvgxy3q57cmjwkl9fi1zabaq5lbkj")))) + (build-system ruby-build-system) + (arguments + '(;; No included tests + #:tests? #f)) + (propagated-inputs `(("ruby-rspec" ,ruby-rspec))) + (synopsis "Re-run failed RSpec tests.") + (description "Re-run failed RSpec tests.") + (home-page + "https://github.com/dblock/rspec-rerun") + (license license:expat))) + (define-public ruby-rspec (package (name "ruby-rspec") @@ -590,6 +714,26 @@ supported: XML Markup and XML Events.") (home-page "https://github.com/jimweirich/builder") (license license:expat))) +(define-public ruby-bump + (package + (name "ruby-bump") + (version "0.6.1") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "bump" version)) + (sha256 + (base32 + "1c7ychr61n5xy5np3vj8h4d4jmcn3cwicssvq56mfvg8hph7x2cw")))) + (build-system ruby-build-system) + (arguments + '(;; No included tests + #:tests? #f)) + (synopsis "Bump your gem version file") + (description "Bump your gem version file") + (home-page "https://github.com/gregorym/bump") + (license license:expat))) + (define-public ruby-rjb (package (name "ruby-rjb") @@ -641,6 +785,45 @@ configuration, and more.") (home-page "http://log4r.rubyforge.org/") (license license:bsd-3))) +(define-public ruby-appraisal + (package + (name "ruby-appraisal") + (version "2.1.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "appraisal" version)) + (sha256 + (base32 + "10ng010lhswdykjhwic7bgv28qpjj42qwxvprpj1f4cavdimh4vp")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f ; tests require network access + #:test-target "spec" + #:phases + (modify-phases %standard-phases + ;; remove bundler from Rakefile to avoid dependency issues + (add-before 'check 'remove-dependency-checking + (lambda _ +; (substitute* "Rakefile" + ; (("^require 'bundler.*") "")) + (substitute* "Gemfile" + (("thor.*") "thor'\n")) + #t))))) + (propagated-inputs + `(("bundler" ,bundler) + ("ruby-thor" ,ruby-thor))) + (native-inputs + `(("ruby-activesupport" ,ruby-activesupport) + ("ruby-rspec" ,ruby-rspec))) + (synopsis + "Appraisal integrates with bundler and rake to test your library against different versions of dependencies in repeatable scenarios called \"appraisals.\"") + (description + "Appraisal integrates with bundler and rake to test your library against different versions of dependencies in repeatable scenarios called \"appraisals.\"") + (home-page + "http://github.com/thoughtbot/appraisal") + (license license:expat))) + (define-public ruby-atoulme-antwrap (package (name "ruby-atoulme-antwrap") @@ -726,6 +909,31 @@ AsciiDoc content to HTML5, DocBook 5 (or 4.5), PDF, and other formats.") (home-page "https://asciidoctor.org") (license license:expat))) +(define-public ruby-ast + (package + (name "ruby-ast") + (version "2.3.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "ast" version)) + (sha256 + (base32 + "0pp82blr5fakdk27d1d21xq9zchzb6vmyb1zcsl520s3ygvprn8m")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) ; TODO: run tests + (native-inputs + `(("bundler" ,bundler) + ("ruby-bacon" ,ruby-bacon) + ("ruby-racc" ,ruby-racc))) + (synopsis + "A library for working with Abstract Syntax Trees.") + (description + "This package provides a library for working with Abstract Syntax Trees.") + (home-page "https://whitequark.github.io/ast/") + (license license:expat))) + (define-public ruby-sporkmonger-rack-mount ;; Testing the addressable gem requires a newer commit than that released, so ;; use an up to date version. @@ -784,6 +992,150 @@ format.") (home-page "https://github.com/nicksieger/ci_reporter") (license license:expat))) +(define-public ruby-coffee-script-source + (package + (name "ruby-coffee-script-source") + (version "1.10.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "coffee-script-source" version)) + (sha256 + (base32 + "1k4fg39rrkl3bpgchfj94fbl9s4ysaz16w8dkqncf2vyf79l3qz0")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) ; no tests + (synopsis "Source code for the ruby-coffee-script gem.") + (description + "This gem contains the JavaScript source code used for converting between +CoffeeScript to JavaScript. It is updated each time a new version of +CoffeeScript is released.") + ;; homepage listed on rubygems does not exist, so use the rubygems URL instead + (home-page + "https://rubygems.org/gems/coffee-script-source") + (license license:expat))) + +;; Seems to work except for 2 rspec errors already fixed upstream +;; https://github.com/egonSchiele/contracts.ruby/commit/c1f22bfc6b28125b55d42a33ca3e05f15e82d6f2.diff +;; might need to add that as a patch when adding to guix +(define-public ruby-contracts + (package + (name "ruby-contracts") + (version "0.12.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "contracts" version)) + (sha256 + (base32 + "0xszv56p58q7da8agc4dsnw8x46gnh6ahbag5gdmvbxjgml03mdl")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f ; enable these when adding TO GUIX!!!! + #:test-target "spec" + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'fix-rakefile + (lambda _ + (substitute* "Rakefile" + ((".*rubocop.*") "") + ((".*RuboCop.*") "")) + #t))))) + (native-inputs + `(("ruby-rspec" ,ruby-rspec))) + (synopsis + "This library provides contracts for Ruby. Contracts let you clearly express how your code behaves, and free you from writing tons of boilerplate, defensive code.") + (description + "This library provides contracts for Ruby. Contracts let you clearly express how your code behaves, and free you from writing tons of boilerplate, defensive code.") + (home-page + "http://github.com/egonSchiele/contracts.ruby") + (license #f))) + +(define-public ruby-coveralls + (package + (name "ruby-coveralls") + (version "0.8.22") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "coveralls" version)) + (sha256 + (base32 + "022kc16np6w4mv17hq3m9hhw9l8hjl78ld3fzqqx6337vwvwvwcg")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f + #:test-target "spec" + #:phases + (modify-phases %standard-phases + (add-after 'extract-gemspec 'update-dependency + (lambda _ + ;; Relax dependency to avoid conflicting versions in nio4r + ;; for instance. + (substitute* "coveralls-ruby.gemspec" + (("<simplecov.*") "<simplecov>)\n") + (("<tins.*") "<tins>)\n")) + + #t)) + (add-before 'check 'fix-dependencies + (lambda _ + (substitute* "spec/spec_helper.rb" + ((".*pry.*") "\n")) + #t))))) + (native-inputs + `(("bundler" ,bundler) + ("ruby-rspec" ,ruby-rspec) + ("ruby-truthy" ,ruby-truthy) + ("ruby-webmock" ,ruby-webmock) + ("ruby-vcr" ,ruby-vcr) + ("git" ,git))) ; git is required for testing + (propagated-inputs + `(("ruby-json" ,ruby-json) + ("ruby-rest-client" ,ruby-rest-client) + ("ruby-simplecov" ,ruby-simplecov) + ("ruby-term-ansicolor" ,ruby-term-ansicolor) + ("ruby-thor" ,ruby-thor) + ("ruby-simplecov" ,ruby-simplecov) + ("ruby-tins" ,ruby-tins))) + (synopsis + "A Ruby implementation of the Coveralls API.") + (description + "A Ruby implementation of the Coveralls API.") + (home-page "https://coveralls.io") + (license license:expat))) + +(define-public ruby-crack + (package + (name "ruby-crack") + (version "0.4.3") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "crack" version)) + (sha256 + (base32 + "0abb0fvgw00akyik1zxnq7yv391va148151qxdghnzngv66bl62k")))) + (build-system ruby-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (replace 'check + (lambda _ + (zero? (length + (filter (lambda (file) + (display file)(display "\n") + (not (zero? (system* "ruby" file)))) + (find-files "spec" ".*rb$"))))))))) + (propagated-inputs + `(("ruby-safe-yaml" ,ruby-safe-yaml))) + (synopsis + "Really simple JSON and XML parsing, ripped from Merb and Rails.") + (description + "Really simple JSON and XML parsing, ripped from Merb and Rails.") + (home-page "http://github.com/jnunemaker/crack") + (license license:expat))) + (define-public ruby-czmq-ffi-gen (package (name "ruby-czmq-ffi-gen") @@ -862,6 +1214,28 @@ support for security mechanisms.") (home-page "https://github.com/paddor/cztop") (license license:isc))) +(define-public ruby-descendants-tracker + (package + (name "ruby-descendants-tracker") + (version "0.0.4") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "descendants_tracker" version)) + (sha256 + (base32 + "15q8g3fcqyb41qixn6cky0k3p86291y7xsh1jfd851dvrza1vi79")))) + (build-system ruby-build-system) + (propagated-inputs + `(("ruby-thread-safe" ,ruby-thread-safe))) + (synopsis + "Module that adds descendant tracking to a class") + (description + "Module that adds descendant tracking to a class") + (home-page + "https://github.com/dkubb/descendants_tracker") + (license license:expat))) + (define-public ruby-saikuro-treemap (package (name "ruby-saikuro-treemap") @@ -940,6 +1314,59 @@ support.") (home-page "http://www.kuwata-lab.com/erubis/") (license license:expat))) +(define-public ruby-execjs + (package + (name "ruby-execjs") + (version "2.7.0") + (source + (origin + (method url-fetch) + ;; fetch from github as the gem does not contain testing code + (uri (string-append "https://github.com/rails/execjs/archive/v" + version ".tar.gz")) + (sha256 + (base32 + "0h1bi96gks205pz2mn2zwldz8h0ajwggyi85bwfbksmrsn2lwick")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) ; tests require ruby-therubyracer and thus v8. + (native-inputs + `(("bundler" ,bundler))) + (synopsis + "ExecJS lets you run JavaScript code from Ruby.") + (description + "ExecJS lets you run JavaScript code from Ruby.") + (home-page "https://github.com/rails/execjs") + (license license:expat))) + +(define-public ruby-event-bus + (package + (name "ruby-event-bus") + (version "0.2.1") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "event-bus" version)) + (sha256 + (base32 + "0bqcznr15q1346avpddnyd9144hqdww86yfpb4jayaj6lm0fqwyq")))) + (build-system ruby-build-system) + (arguments + ;; disable testing to break the cycle with aruba. Instead simply test that + ;; the library can be require'd. + `(#:phases + (modify-phases %standard-phases + (replace 'check + (lambda _ + (zero? (system* "ruby" "-Ilib" "-r" "event/bus"))))))) + (synopsis + "This gem notifies subscribers about event") + (description + "This gem notifies subscribers about event") + (home-page + "https://github.com/cucumber/event-bus") + (license license:expat))) + (define-public ruby-orderedhash (package (name "ruby-orderedhash") @@ -1007,6 +1434,63 @@ Ruby.") (home-page "https://github.com/maik/xml-simple") (license license:ruby))) +(define-public ruby-therubyracer + (package + (name "ruby-therubyracer") + (version "0.12.2") + (source + (origin + (method url-fetch) + ;; Build from GitHub source so that patches can be applied. + (uri (string-append "https://github.com/cowboyd/therubyracer/archive/v" + version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "0vyiacgg0hngl3gxh7n5lvskac5ms2rcbjrixj4mc8c2adhmqj1a")) + (patches (search-patches "ruby-therubyracer-fix-gemspec.patch")))) + (build-system ruby-build-system) + (arguments + `(#:test-target "spec" + #:phases + (modify-phases %standard-phases + (delete 'extract-gemspec) + (add-before 'build 'fix-gemfile + (lambda _ + (substitute* "Gemfile" + (("redjs.*") "redjs'\n") + ((".*gem-compiler.*") "\n")) + #t)) + (add-before 'install 'prepare-libv8 + ;; Since therubyracer requires 'libv8' when compiling native + ;; extensions during installation, it must be installed into the same + ;; gem directory. We make 'libv8' a native input and copy the entire + ;; libv8 gem directory into the the current output and install + ;; therubyracer into that. + (lambda* (#:key inputs outputs #:allow-other-keys) + (copy-recursively + (assoc-ref inputs "ruby-libv8") + (assoc-ref outputs "out")) + #t)) + (add-before 'check 'compile + (lambda _ + (zero? (system* "rake" "compile"))))))) + (propagated-inputs + `(("ruby-ref" ,ruby-ref))) + (native-inputs + `(("bundler" ,bundler) + ("ruby-redjs" ,ruby-redjs) + ("ruby-rspec" ,ruby-rspec-2) + ("ruby-rake-compiler" ,ruby-rake-compiler) + ("ruby-libv8" ,ruby-libv8))) + (synopsis + "Call JavaScript code and manipulate JavaScript objects from Ruby. Call Ruby code and manipulate Ruby objects from JavaScript.") + (description + "Call JavaScript code and manipulate JavaScript objects from Ruby. Call Ruby code and manipulate Ruby objects from JavaScript.") + (home-page + "http://github.com/cowboyd/therubyracer") + (license license:expat))) + (define-public ruby-thor (package (name "ruby-thor") @@ -1176,6 +1660,98 @@ standard output stream.") (home-page "https://github.com/geemus/formatador") (license license:expat))) +(define-public ruby-fuubar + (package + (name "ruby-fuubar") + (version "2.1.1") + (source + (origin + (method url-fetch) + ;; The gem does not include files required for testing. + (uri (string-append "https://github.com/thekompanee/fuubar/archive/releases/v" + version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1363fy7x12srr51cy5x1xkf9z7jlzzlwpsifwgx6bivnp6lar3ny")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f ; some tests fail when running (zero? (system* "rspec" + ; "-Ilib" "spec")) inside the container, but seem to work outside. + #:phases + (modify-phases %standard-phases + (add-before 'build 'delete-certificate + (lambda _ + ;; Remove 's.cert_chain' as we do not build with a private key + (substitute* "fuubar.gemspec" + ((".*cert_chain.*") "") + ((".*signing_key.*") "")) + #t))))) + (native-inputs + `(("bundler" ,bundler))) + (propagated-inputs + `(("ruby-rspec" ,ruby-rspec) + ("ruby-ruby-progressbar" ,ruby-ruby-progressbar))) + (synopsis + "the instafailing RSpec progress bar formatter") + (description + "the instafailing RSpec progress bar formatter") + (home-page + "https://github.com/thekompanee/fuubar") + (license license:expat))) + +(define-public ruby-hashdiff + (package + (name "ruby-hashdiff") + (version "0.3.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "hashdiff" version)) + (sha256 + (base32 + "1r06gar8zp4hyzyc0ky7n6mybjj542lrfda5y78fm5hyhiplv104")))) + (build-system ruby-build-system) + (arguments + '(#:tests? #f + #:test-target "spec")) + (native-inputs + `(("bundler" ,bundler) + ("ruby-rspec" ,ruby-rspec-2))) + (synopsis + " HashDiff is a diff lib to compute the smallest difference between two hashes. ") + (description + " HashDiff is a diff lib to compute the smallest difference between two hashes. ") + (home-page + "https://github.com/liufengyun/hashdiff") + (license license:expat))) + +(define-public ruby-httparty + (package + (name "ruby-httparty") + (version "0.16.2") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "httparty" version)) + (sha256 + (base32 + "1zsc40nrg5fbaabbjcklnrgwgg6qdqycvg5sq8iahp1v8jxfarzw")))) + (build-system ruby-build-system) + (arguments + '(#:test-target "spec")) + (propagated-inputs + `(("ruby-multi-xml" ,ruby-multi-xml))) + (native-inputs + `(("ruby-cucumber" ,ruby-cucumber))) + (synopsis + "Makes http fun! Also, makes consuming restful web services dead easy.") + (description + "Makes http fun! Also, makes consuming restful web services dead easy.") + (home-page + "http://jnunemaker.github.com/httparty") + (license license:expat))) + (define-public ruby-shindo (package (name "ruby-shindo") @@ -1430,6 +2006,33 @@ assertion messages for tests.") (home-page "https://github.com/k-tsj/power_assert") (license (list license:bsd-2 license:ruby)))) +(define-public ruby-powerpack + (package + (name "ruby-powerpack") + (version "0.1.1") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "powerpack" version)) + (sha256 + (base32 + "1fnn3fli5wkzyjl4ryh0k90316shqjfnhydmc7f8lqpi0q21va43")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f + #:test-target "spec")) + (native-inputs + `(("bundler" ,bundler) + ("ruby-rspec" ,ruby-rspec) + ("ruby-yard" ,ruby-yard))) + (synopsis + "A few useful extensions to core Ruby classes.") + (description + "This package provides a few useful extensions to core Ruby classes.") + (home-page + "https://github.com/bbatsov/powerpack") + (license license:expat))) + (define-public ruby-locale (package (name "ruby-locale") @@ -1502,6 +2105,33 @@ use GNU gettext tools for maintenance.") (home-page "https://ruby-gettext.github.com/") (license (list license:lgpl3+ license:ruby)))) +(define-public ruby-github-api + (package + (name "ruby-github-api") + (version "0.18.2") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "github_api" version)) + (sha256 + (base32 + "04x8mlvinl17wfw6r71c9jbh7g78ziiwvsqv20ylyjzybr7x0w6s")))) + (build-system ruby-build-system) + (propagated-inputs + `(("ruby-addressable" ,ruby-addressable) + ("ruby-descendants-tracker" + ,ruby-descendants-tracker) + ("ruby-faraday" ,ruby-faraday) + ("ruby-hashie" ,ruby-hashie) + ("ruby-oauth2" ,ruby-oauth2))) + (synopsis + " Ruby client that supports all of the GitHub API methods. It's build in a modular way, that is, you can either instantiate the whole api wrapper Github.new or use parts of it e.i. Github::Client::Repos.new if working solely with repositories is your main concern. Intuitive query methods allow you easily call API endpoints. ") + (description + " Ruby client that supports all of the GitHub API methods. It's build in a modular way, that is, you can either instantiate the whole api wrapper Github.new or use parts of it e.i. Github::Client::Repos.new if working solely with repositories is your main concern. Intuitive query methods allow you easily call API endpoints. ") + (home-page + "http://piotrmurach.github.io/github/") + (license license:expat))) + (define-public ruby-packnga (package (name "ruby-packnga") @@ -1552,6 +2182,43 @@ It allows writing tests, checking results and automated testing in Ruby.") (home-page "https://test-unit.github.io/") (license (list license:psfl license:ruby)))) +(define-public ruby-maruku + (package + (name "ruby-maruku") + (version "0.7.3") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "maruku" version)) + (sha256 + (base32 + "1r7bxpgnx2hp3g12bjrmdrpv663dfqxsdp0af69kjhxmaxpia56x")))) + (build-system ruby-build-system) + (arguments + '(;; TODO: 3 tests seem to fail due to HTML encoding issues + #:tests? #f + #:phases + (modify-phases %standard-phases + (replace 'check + (lambda* (#:key tests? #:allow-other-keys) + (if tests? + (invoke "rspec") + #t)))))) + (native-inputs + `(("ruby-rspec" ,ruby-rspec) + ("ruby-simplecov" ,ruby-simplecov) + ("ruby-nokogiri-diff" ,ruby-nokogiri-diff))) + (synopsis + "Maruku is a Markdown interpreter in Ruby. + It features native export to HTML and PDF (via Latex). The + output is really beautiful!") + (description + "Maruku is a Markdown interpreter in Ruby. + It features native export to HTML and PDF (via Latex). The + output is really beautiful!") + (home-page "http://github.com/bhollis/maruku") + (license license:expat))) + (define-public ruby-metaclass (package (name "ruby-metaclass") @@ -1587,6 +2254,49 @@ objects.") (home-page "https://github.com/floehopper/metaclass") (license license:expat))) +(define-public ruby-mysql2 + (package + (name "ruby-mysql2") + (version "0.5.2") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/brianmario/mysql2/archive/" + version ".tar.gz")) + (sha256 + (base32 + "063qm7m43fjnwizbg2avv2byvkpwsxcnhjyvci1q2s1zcmys211s")))) + (build-system ruby-build-system) + (arguments + '(;; TODO: Tests require a running MySQL/MariaDB service + #:tests? #f + #:phases + (modify-phases %standard-phases + (replace 'replace-git-ls-files + (lambda _ + (substitute* "mysql2.gemspec" + (("git ls-files") "echo")))) + (add-before 'build 'compile + (lambda _ + (invoke "rake" "compile"))) + (replace 'check + (lambda* (#:key tests? #:allow-other-keys) + (if tests? + (invoke "rspec" "-Ilib" "-Iext") + #t)))))) + (inputs + `(("mariadb" ,mariadb))) + (native-inputs + `(("ruby-rspec" ,ruby-rspec) + ("ruby-rake-compiler" ,ruby-rake-compiler))) + (synopsis + "A simple, fast Mysql library for Ruby, binding to libmysql") + (description + "This package provides a simple, fast Mysql library for Ruby, binding to libmysql") + (home-page + "https://github.com/brianmario/mysql2") + (license license:expat))) + (define-public ruby-blankslate (package (name "ruby-blankslate") @@ -1643,6 +2353,66 @@ irb's last-word approach.") (home-page "http://tagaholic.me/bond/") (license license:expat))) +(define-public ruby-idn-ruby + (package + (name "ruby-idn-ruby") + (version "0.1.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "idn-ruby" version)) + (sha256 + (base32 + "07vblcyk3g72sbq12xz7xj28snpxnh3sbcnxy8bglqbfqqhvmawr")))) + (build-system ruby-build-system) + (arguments + '(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'patch-Rakefile + (lambda _ + (substitute* "Rakefile" + (("rake/rdoctask") + "rdoc/task")) + #t)) + (add-before 'build 'run-extconf.rb + (lambda _ + (with-directory-excursion "ext" + (invoke "ruby" "extconf.rb") + (invoke "make")))) + (replace 'check + (lambda _ + (unless (zero? + (system "ruby --verbose -Iext test/*.rb")) + (error "test failure")) + #t))))) + (inputs + `(("libidn" ,libidn))) + (synopsis + " + Ruby Bindings for the GNU LibIDN library, an implementation of the + Stringprep, Punycode and IDNA specifications defined by the IETF + Internationalized Domain Names (IDN) working group. + + Included are the most important parts of the Stringprep, Punycode + and IDNA APIs like performing Stringprep processings, encoding to + and decoding from Punycode strings and converting entire domain names + to and from the ACE encoded form. + ") + (description + " + Ruby Bindings for the GNU LibIDN library, an implementation of the + Stringprep, Punycode and IDNA specifications defined by the IETF + Internationalized Domain Names (IDN) working group. + + Included are the most important parts of the Stringprep, Punycode + and IDNA APIs like performing Stringprep processings, encoding to + and decoding from Punycode strings and converting entire domain names + to and from the ACE encoded form. + ") + (home-page + "http://github.com/deepfryed/idn-ruby") + (license #f))) + (define-public ruby-instantiator (package (name "ruby-instantiator") @@ -2095,6 +2865,34 @@ instance, it provides @code{assert_true}, @code{assert_false} and (home-page "https://github.com/halostatue/minitest-bonus-assertions") (license license:expat))) +(define-public ruby-minitest-reporters + (package + (name "ruby-minitest-reporters") + (version "1.3.1") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "minitest-reporters" version)) + (sha256 + (base32 + "0xc7cs65yjslz9zg8mm0y29wpf7s1h5yzixgyjs5gvlr8c81carn")))) + (build-system ruby-build-system) + (propagated-inputs + `(("ruby-ansi" ,ruby-ansi) + ("ruby-builder" ,ruby-builder) + ("ruby-minitest" ,ruby-minitest) + ("ruby-ruby-progressbar" ,ruby-ruby-progressbar))) + (native-inputs + `(("bundler" ,bundler) + ("ruby-maruku" ,ruby-maruku))) + (synopsis + "Death to haphazard monkey-patching! Extend Minitest through simple hooks.") + (description + "Death to haphazard monkey-patching! Extend Minitest through simple hooks.") + (home-page + "https://github.com/CapnKernul/minitest-reporters") + (license license:expat))) + (define-public ruby-minitest-rg (package (name "ruby-minitest-rg") @@ -2186,6 +2984,53 @@ URIs using the normal URI.parse method.") (home-page "https://github.com/dball/data_uri") (license license:expat))) +(define-public ruby-duktape + (package + (name "ruby-duktape") + (version "1.3.0.4") + (source + (origin + (method url-fetch) + ;; fetch from github as the gem does not contain testing code + (uri (string-append "https://github.com/judofyr/duktape.rb/archive/v" + version ".tar.gz")) + (sha256 + (base32 + "1xgs7ll9xwm5p451mh70cm5646wijc2jdvjdb81a17wwvccf7djw")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f + #:phases + (modify-phases %standard-phases + ;; Duktape comes with the duktape .c and .h files. Replace these with + ;; those from the duktape Guix package. + (add-after 'unpack 'replace-bundled-duktape + (lambda* (#:key inputs outputs #:allow-other-keys) + (for-each (lambda (file) + (delete-file (string-append "ext/duktape/" file)) + (copy-file + (string-append + (assoc-ref inputs "duktape") "/src/" file) + (string-append "ext/duktape/" file))) + (list "duktape.c" "duktape.h")))) + (add-before 'check 'remove-dependency + (lambda _ + ;; Gem is not needed for testing. + (substitute* "Gemfile" + (("^ gem 'aws-sdk', '~> 2.2.0'") "")) + #t))))) + (native-inputs + `(("bundler" ,bundler) + ("ruby-rake-compiler" ,ruby-rake-compiler) + ("ruby-sdoc" ,ruby-sdoc) + ("duktape" ,duktape))) + (synopsis "Bindings to the Duktape JavaScript interpreter") + (description + "Bindings to the Duktape JavaScript interpreter") + (home-page + "https://github.com/judofyr/duktape.rb") + (license license:expat))) + (define-public ruby-git (package (name "ruby-git") @@ -2338,13 +3183,13 @@ rogue test/unit/autorun requires.") (define-public ruby-arel (package (name "ruby-arel") - (version "8.0.0") + (version "9.0.0") (source (origin (method url-fetch) (uri (rubygems-uri "arel" version)) (sha256 (base32 - "0nw0qbc6ph625p6n3maqq9f527vz3nbl0hk72fbyka8jzsmplxzl")))) + "1jk7wlmkr61f6g36w9s2sn46nmdg6wn2jfssrhbhirv5x9n95nk0")))) (build-system ruby-build-system) (arguments '(#:tests? #f)) ; no tests (home-page "https://github.com/rails/arel") @@ -2354,6 +3199,29 @@ Ruby. It simplifies the generation of complex SQL queries and adapts to various relational database implementations.") (license license:expat))) +(define-public ruby-marcel + (package + (name "ruby-marcel") + (version "0.3.3") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "marcel" version)) + (sha256 + (base32 + "1nxbjmcyg8vlw6zwagf17l9y2mwkagmmkg95xybpn4bmf3rfnksx")))) + (build-system ruby-build-system) + (arguments + '(#:tests? #f)) + (propagated-inputs + `(("ruby-mimemagic" ,ruby-mimemagic))) + (synopsis + "Simple mime type detection using magic numbers, filenames, and extensions") + (description + "Simple mime type detection using magic numbers, filenames, and extensions") + (home-page "https://github.com/basecamp/marcel") + (license license:expat))) + (define-public ruby-minitar ;; We package from the GitHub source to fix the security issue reported at ;; https://github.com/halostatue/minitar/issues/16. @@ -2505,6 +3373,62 @@ for select languages.") (home-page "http://coderay.rubychan.de") (license license:expat))) +(define-public ruby-parser + (package + (name "ruby-parser") + (version "2.3.1.2") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "parser" version)) + (sha256 + (base32 + "0fxcs83z28wxn6bphbq5q40c1y5ab8zl8ww17jwkbi032wf6iik6")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) ; need more + (native-inputs + `(("bundler" ,bundler) + ("ruby-racc" ,ruby-racc))) + (propagated-inputs `(("ruby-ast" ,ruby-ast))) + (synopsis "A Ruby parser written in pure Ruby.") + (description + "This package provides a Ruby parser written in pure Ruby.") + (home-page + "https://github.com/whitequark/parser") + (license license:expat))) + +(define-public ruby-prawn-manual-builder + (package + (name "ruby-prawn-manual-builder") + (version "0.3.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "prawn-manual_builder" version)) + (sha256 + (base32 + "0wbjnkqp55p5wmz85ldypcray223glckd209hmdxhnzk8s5pb3za")))) + (build-system ruby-build-system) + (arguments + '(;; No included tests + #:tests? #f + #:phases + (modify-phases %standard-phases + (add-after 'extract-gemspec 'patch-gemspec + (lambda _ + (substitute* ".gemspec" + ;; Loosen the requirement for pdf-inspector + (("~> 1\\.0\\.7") ">= 0"))))))) + (propagated-inputs + `(("ruby-coderay" ,ruby-coderay))) + (synopsis + "A tool for writing manuals for Prawn and Prawn accessories") + (description + "This package provides a tool for writing manuals for Prawn and Prawn accessories") + (home-page "") + (license (list #f #f #f)))) + (define-public ruby-progress_bar (package (name "ruby-progress_bar") @@ -2536,6 +3460,34 @@ rate.") (home-page "https://github.com/paul/progress_bar") (license license:wtfpl2))) +(define-public ruby-ruby-progressbar + (package + (name "ruby-ruby-progressbar") + (version "1.9.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "ruby-progressbar" version)) + (sha256 + (base32 + "1igh1xivf5h5g3y5m9b4i4j2mhz2r43kngh4ww3q1r80ch21nbfk")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) ; Tests require further dependencies such as 'rspectacular'. + (synopsis + "Ruby/ProgressBar is an extremely flexible text progress bar library for Ruby. +The output can be customized with a flexible formatting system including: +percentage, bars of various formats, elapsed time and estimated time remaining. +") + (description + "Ruby/ProgressBar is an extremely flexible text progress bar library for Ruby. +The output can be customized with a flexible formatting system including: +percentage, bars of various formats, elapsed time and estimated time remaining. +") + (home-page + "https://github.com/jfelchner/ruby-progressbar") + (license license:expat))) + (define-public ruby-pry (package (name "ruby-pry") @@ -2560,6 +3512,34 @@ invocation, and source and documentation browsing.") (home-page "https://pryrepl.org") (license license:expat))) +(define-public ruby-psych + (package + (name "ruby-psych") + (version "3.0.2") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "psych" version)) + (sha256 + (base32 + "0g9yrzzfza5yjfnn4pkykr71fhpayahvimvyyv8xi3i34a03v9xg")))) + (build-system ruby-build-system) + (native-inputs + `(("bundler" ,bundler) + ("ruby-rake-compiler" ,ruby-rake-compiler))) + (synopsis + "Psych is a YAML parser and emitter. Psych leverages libyaml[http://pyyaml.org/wiki/LibYAML] +for its YAML parsing and emitting capabilities. In addition to wrapping libyaml, +Psych also knows how to serialize and de-serialize most Ruby objects to and from the YAML format. +") + (description + "Psych is a YAML parser and emitter. Psych leverages libyaml[http://pyyaml.org/wiki/LibYAML] +for its YAML parsing and emitting capabilities. In addition to wrapping libyaml, +Psych also knows how to serialize and de-serialize most Ruby objects to and from the YAML format. +") + (home-page "https://github.com/ruby/psych") + (license license:expat))) + (define-public ruby-guard (package (name "ruby-guard") @@ -2608,6 +3588,72 @@ file or directories are modified.") (home-page "http://guardgem.org/") (license license:expat))) +(define-public ruby-tilt + (package + (name "ruby-tilt") + (version "2.0.5") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "tilt" version)) + (sha256 + (base32 + "0lgk8bfx24959yq1cn55php3321wddw947mgj07bxfnwyipy9hqf")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) ; There are a number of unpackaged dependencies e.g. kramdown. + ;; (native-inputs + ;; `(("bundler" ,bundler) + ;; ("ruby-yard" ,ruby-yard) + ;; ("ruby-asciidoctor" ,ruby-asciidoctor) + ;; ("ruby-builder" ,ruby-builder) + ;; ("ruby-coffee-script" ,ruby-coffee-script) + ;; ("ruby-contest" ,ruby-contest) + ;; ("ruby-creole" ,ruby-creole) + ;; ("ruby-erubis" ,ruby-erubis) + ;; ("ruby-haml" ,ruby-haml); do we really need haml <4 ? + ;; ("ruby-kramdown" ,ruby-kramdown))) + (synopsis + "Generic interface to multiple Ruby template engines") + (description + "Generic interface to multiple Ruby template engines") + (home-page "http://github.com/rtomayko/tilt/") + (license license:expat))) + +(define-public ruby-thread-order + (package + (name "ruby-thread-order") + (version "1.1.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "thread_order" version)) + (sha256 + (base32 + "1n8zs3m7na5jmpf0pw0z79vg0x0lfzajpynp28zb43l89l00qcfi")))) + (build-system ruby-build-system) + (native-inputs + `(("ruby-rspec" ,ruby-rspec))) + (arguments + '(;; TODO: 1 test fails + ;; 1) ThreadOrder is implemented without depending on the stdlib + ;; Failure/Error: expect(loaded_filenames).to_not include 'monitor.rb' + #:tests? #f + #:phases + (modify-phases %standard-phases + (replace 'check + (lambda* (#:key tests? #:allow-other-keys) + (if tests? + (invoke "rspec") + #t)))))) + (synopsis + "Test helper for ordering threaded code (does not depend on gems or stdlib, tested on 1.8.7 - 2.2, rbx, jruby).") + (description + "Test helper for ordering threaded code (does not depend on gems or stdlib, tested on 1.8.7 - 2.2, rbx, jruby).") + (home-page + "https://github.com/JoshCheek/thread_order") + (license license:expat))) + (define-public ruby-thread-safe (package (name "ruby-thread-safe") @@ -2628,6 +3674,29 @@ utilities for Ruby.") (home-page "https://github.com/ruby-concurrency/thread_safe") (license license:asl2.0))) +(define-public ruby-truthy + (package + (name "ruby-truthy") + (version "1.0.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "truthy" version)) + (sha256 + (base32 + "19silgd65j3qwfk5w891p9wcmzdmi9ddm2kg5zbvvqn2h9lkfzmd")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) ; Files required for testing are not in gem, and homepage + ; has disappeared. + (propagated-inputs `(("ruby-hoe" ,ruby-hoe))) + (synopsis + "Easily get truthiness values of Ruby objects") + (description + "Easily get truthiness values of Ruby objects") + (home-page "https://rubygems.org/gems/truthy") + (license #f))) + (define-public ruby-tzinfo (package (name "ruby-tzinfo") @@ -2965,6 +4034,47 @@ when working with Ruby code.") ;; There is no mention of the "or later" clause. (license license:gpl2))) +(define-public ruby-jeweler + (package + (name "ruby-jeweler") + (version "2.3.9") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "jeweler" version)) + (sha256 + (base32 + "0jbivh9vf9wm91kwjnlcvswqyk2g24bnxj9gavinx9jh4bphagi5")))) + (build-system ruby-build-system) + (propagated-inputs + `(("ruby-builder" ,ruby-builder) + ("bundler" ,bundler) + ("ruby-git" ,ruby-git) + ("ruby-github-api" ,ruby-github-api) + ("ruby-highline" ,ruby-highline) + ("ruby-nokogiri" ,ruby-nokogiri) + ("ruby-psych" ,ruby-psych) + ("ruby-rake" ,ruby-rake) + ("ruby-rdoc" ,ruby-rdoc) + ("ruby-semver2" ,ruby-semver2))) + (arguments + '(#:phases + (modify-phases %standard-phases + (add-before 'check 'delete-Gemfile.lock + (lambda _ + ;; Bundler isn't being used for fetching dependendencies, so + ;; delete the Gemfile.lock + (delete-file "Gemfile.lock") + #t + ))))) + (synopsis + "Simple and opinionated helper for creating Rubygem projects on GitHub") + (description + "Simple and opinionated helper for creating Rubygem projects on GitHub") + (home-page + "http://github.com/technicalpickles/jeweler") + (license license:expat))) + (define-public ruby-json (package (name "ruby-json") @@ -3010,7 +4120,15 @@ a native C extension.") (lambda _ ;; Regenerate gemspec so loosened dependency constraints are ;; propagated. - (invoke "rake" "gemspec")))))) + (invoke "rake" "gemspec"))) + (add-after 'regenerate-gemspec 'fix-json-java.gemspec + (lambda _ + ;; This gemspec doesn't look to be generated by the above + ;; command, so patch it separately. + (substitute* "json-java.gemspec" + (("%q<test-unit>\\.freeze, \\[\"~> 2\\.0\"\\]") + "%q<test-unit>.freeze, [\">= 2.0\"]")) + #t))))) (native-inputs `(("bundler" ,bundler) ("ragel" ,ragel) @@ -3044,6 +4162,71 @@ a native C extension.") (home-page "https://rubygems.org/gems/rb-fsevent") (license license:expat))) +(define-public ruby-libv8 + (package + (name "ruby-libv8") + (version "6.7.288.46.0") ; Package an even-numbered release so only source + ; code it included and not binaries. + (source + (origin + (method url-fetch) + (uri (rubygems-uri "libv8" version)) + (sha256 + (base32 + "1f1gd8n8yrnd2d2bmlbcm1qgfpw050087y8gq4z72cj8mal60k3f")))) + (build-system ruby-build-system) + (arguments + `(#:test-target "spec" + ;#:gem-flags (list "--" "--with-system-v8") + #:phases + (modify-phases %standard-phases + ;; Non-printing characters trip up this build phase and it isn't used + ;; anyway. + ;(delete 'extract-gemspec) + ;; (replace 'replace-git-ls-files + ;; (lambda _ + ;; (substitute* "libv8.gemspec" + ;; (("git ls-files") "find . -type f |sort")) + ;; #t)) + (add-after 'extract-gemspec 'fix-dependencies + (lambda _ + ;; Remove non-printing character that trips up substitute* + (system* "sed" "s/ stub.*//" "-i" "libv8.gemspec") + ;;(delete-file-recursively "vendor") + (substitute* "libv8.gemspec" + ;; (("<rake>.*") "<rake>)\n") + (("<rake-compiler>.*") "<rake-compiler>)\n") + ((", \\\"vendor.*") "]\n") + ) ; Do not distribute + ; depot_tools as this includes pre-built + ; binaries. + + #t)) + ))) + ;; (Add-after 'install 'remove-extraneous-files + ;; (lambda* (#:key outputs #:allow-other-keys) + ;; (delete-file-recursively + ;; (string-append + ;; (assoc-ref outputs "out") + ;; ;; TODO: Generalise this path. + ;; "/lib/ruby/gems/2.3.0/gems/libv8-5.2.361.43.1/vendor"))))))) + (native-inputs + `(("bundler" ,bundler) + ("ruby-rake" ,ruby-rake) + ("ruby-rake-compiler" ,ruby-rake-compiler) + ("ruby-rspec" ,ruby-rspec) + ("ruby-rspec-spies" ,ruby-rspec-spies) + ("which" ,which) + ("python" ,python-2))) + (synopsis + "Distributes the V8 JavaScript engine in binary and source forms in order +to support fast builds of The Ruby Racer") + (description + "Distributes the V8 JavaScript engine in binary and source forms in order +to support fast builds of The Ruby Racer") + (home-page "http://github.com/cowboyd/libv8") + (license license:expat))) + (define-public ruby-listen (package (name "ruby-listen") @@ -3051,31 +4234,106 @@ a native C extension.") (source (origin (method url-fetch) - (uri (rubygems-uri "listen" version)) + ;; The gem does not include a Rakefile, so we fetch the tarball from + ;; Github. + (uri (string-append "https://github.com/guard/listen/archive/v" + version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "01v5mrnfqm6sgm8xn2v5swxsn1wlmq7rzh2i48d4jzjsc7qvb6mx")))) + "0f0mx4nzpd17svvmkcb2q66w3gdvs1zkrpc0p3wq1s2va5b5cnss")) + (patches (search-patches "ruby-listen-patch-gemspec.patch")))) (build-system ruby-build-system) - (arguments '(#:tests? #f)) ; no tests + (arguments + `(#:test-target "spec" + #:phases + (modify-phases %standard-phases + (add-before 'check 'fix-dependencies' + (lambda _ + (substitute* "Rakefile" + ((".*rubocop.*") "")) + #t))))) + (native-inputs + `(("bundler" ,bundler) + ("ruby-rspec" ,ruby-rspec) + ("ruby-coveralls" ,ruby-coveralls))) (propagated-inputs - `(("ruby-rb-inotify" ,ruby-rb-inotify) - ("ruby-rb-fsevent" ,ruby-rb-fsevent))) - (synopsis "Listen to file modifications") - (description "The Listen gem listens to file modifications and notifies -you about the changes.") + `(("ruby-rb-fsevent" ,ruby-rb-fsevent) + ("ruby-rb-inotify" ,ruby-rb-inotify) + ("ruby-ruby-dep" ,ruby-ruby-dep))) + (synopsis + "The Listen gem listens to file modifications and notifies you about the changes. Works everywhere!") + (description + "The Listen gem listens to file modifications and notifies you about the changes. Works everywhere!") (home-page "https://github.com/guard/listen") (license license:expat))) (define-public ruby-listen-3.0 (package (inherit ruby-listen) + (name "ruby-listen") (version "3.0.8") - (source (origin - (method url-fetch) - (uri (rubygems-uri "listen" version)) - (sha256 - (base32 - "1l0y7hbyfiwpvk172r28hsdqsifq1ls39hsfmzi1vy4ll0smd14i")))))) + (source + (origin + (method url-fetch) + ;; The gem does not include a Rakefile, so we fetch the tarball from + ;; Github. + (uri (string-append "https://github.com/guard/listen/archive/v" + version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "06cy038xlbi8hcr9nv0c9wvafi7s3d05sdc7ydkv8qndi9bs68l3")) + (patches (search-patches "ruby-listen-3.0.8-patch-gemspec.patch")))))) + +(define-public ruby-loofah + (package + (name "ruby-loofah") + (version "2.0.3") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "loofah" version)) + (sha256 + (base32 + "109ps521p0sr3kgc460d58b4pr1z4mqggan2jbsf0aajy9s6xis8")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) ; 1 test fails + (native-inputs + `(("ruby-hoe" ,ruby-hoe) + ("ruby-rr" ,ruby-rr))) + (propagated-inputs + `(("ruby-nokogiri" ,ruby-nokogiri))) + (synopsis + "Loofah is a general library for manipulating and transforming HTML/XML +documents and fragments. It's built on top of Nokogiri and libxml2, so +it's fast and has a nice API. + +Loofah excels at HTML sanitization (XSS prevention). It includes some +nice HTML sanitizers, which are based on HTML5lib's whitelist, so it +most likely won't make your codes less secure. (These statements have +not been evaluated by Netexperts.) + +ActiveRecord extensions for sanitization are available in the +`loofah-activerecord` gem (see +https://github.com/flavorjones/loofah-activerecord).") + (description + "Loofah is a general library for manipulating and transforming HTML/XML +documents and fragments. It's built on top of Nokogiri and libxml2, so +it's fast and has a nice API. + +Loofah excels at HTML sanitization (XSS prevention). It includes some +nice HTML sanitizers, which are based on HTML5lib's whitelist, so it +most likely won't make your codes less secure. (These statements have +not been evaluated by Netexperts.) + +ActiveRecord extensions for sanitization are available in the +`loofah-activerecord` gem (see +https://github.com/flavorjones/loofah-activerecord).") + (home-page + "https://github.com/flavorjones/loofah") + (license license:expat))) (define-public ruby-activesupport (package @@ -3099,7 +4357,7 @@ you about the changes.") (propagated-inputs `(("ruby-concurrent" ,ruby-concurrent) ("ruby-i18n" ,ruby-i18n) - ("ruby-minitest" ,ruby-minitest) + ;("ruby-minitest" ,ruby-minitest) ("ruby-tzinfo" ,ruby-tzinfo) ("ruby-tzinfo-data" ,ruby-tzinfo-data))) (synopsis "Ruby on Rails utility library") @@ -3478,6 +4736,41 @@ differences (added or removed nodes) between two XML/HTML documents.") (home-page "https://github.com/postmodern/nokogiri-diff") (license license:expat)))) +(define-public ruby-racc + (package + (name "ruby-racc") + (version "1.4.14") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "racc" version)) + (sha256 + (base32 + "00yhs2ag7yy5v83mqvkbnhk9bvsh6mx3808k53n61ddzx446v1zl")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) ; tests fail to compile + (native-inputs + `(("ruby-hoe" ,ruby-hoe) + ("ruby-rake-compiler" ,ruby-rake-compiler))) + (synopsis + "Racc is a LALR(1) parser generator. + It is written in Ruby itself, and generates Ruby program. + + NOTE: Ruby 1.8.x comes with Racc runtime module. You + can run your parsers generated by racc 1.4.x out of the + box.") + (description + "Racc is a LALR(1) parser generator. + It is written in Ruby itself, and generates Ruby program. + + NOTE: Ruby 1.8.x comes with Racc runtime module. You + can run your parsers generated by racc 1.4.x out of the + box.") + (home-page + "http://i.loveruby.net/en/projects/racc/") + (license license:expat))) + (define-public ruby-rack (package (name "ruby-rack") @@ -3594,6 +4887,200 @@ clickjacking, directory traversal, session hijacking and IP spoofing.") (home-page "https://github.com/sinatra/sinatra/tree/master/rack-protection") (license license:expat))) +(define-public ruby-radius + (package + (name "ruby-radius") + (version "0.7.4") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "radius" version)) + (sha256 + (base32 + "0n0clzgvxpjm2gjlpz98x6gkw5hb84bmd435a1yaqs3m0k896v5s")))) + (build-system ruby-build-system) + (arguments + '(#:phases + (modify-phases %standard-phases + ;; TODO: There are two .gem files in the source, and the build system + ;; seems to get confused, and attempts to remove the wrong one (I + ;; think)... + ;; + ;; For now, workaround the issue, by creating the file the install + ;; phase in the build system tries to remove. + (add-before 'install 'workaround-gem-removal + (lambda* (#:key outputs #:allow-other-keys) + (let ((directory (string-append + (assoc-ref outputs "out") + "/lib/ruby/vendor_ruby/cache/pkg"))) + (mkdir-p directory) + (with-output-to-file + (string-append directory "/radius-0.7.0.prerelease.gem") + (lambda _ (display ""))))))))) + (native-inputs + `(("ruby-simplecov" ,ruby-simplecov) + ("ruby-kramdown" ,ruby-kramdown) + ("ruby-coveralls" ,ruby-coveralls))) + (synopsis + "Radius is a powerful tag-based template language for Ruby inspired by the template languages used in MovableType and TextPattern. It uses tags similar to XML, but can be used to generate any form of plain text (HTML, e-mail, etc...).") + (description + "Radius is a powerful tag-based template language for Ruby inspired by the template languages used in MovableType and TextPattern. It uses tags similar to XML, but can be used to generate any form of plain text (HTML, e-mail, etc...).") + (home-page "http://github.com/jlong/radius") + (license #f))) + +(define-public ruby-rainbow + (package + (name "ruby-rainbow") + (version "2.1.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "rainbow" version)) + (sha256 + (base32 + "11licivacvfqbjx2rwppi8z89qff2cgs67d4wyx42pc5fg7g9f00")))) + (build-system ruby-build-system) + (arguments + `(#:test-target "spec")) + (native-inputs + `(("bundler" ,bundler) + ("ruby-rspec" ,ruby-rspec))) + (synopsis + "Colorize printed text on ANSI terminals") + (description + "Colorize printed text on ANSI terminals") + (home-page "https://github.com/sickill/rainbow") + (license license:expat))) + +(define-public ruby-redjs + ;; There are no releases on rubygems and the last git commit was in 2012, so + ;; we package that. + (let ((commit "0d844f066666f967a78b20beb164c52d9ac3f5ca")) + (package + (name "ruby-redjs") + (version (string-append "0.4.6-1." (string-take commit 8))) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/cowboyd/redjs.git") + (commit commit))) + (file-name (string-append name "-" version "-checkout")) + (sha256 + (base32 + "0cl3543xnzfn5qvlwjl2g1gg0jm6mfa75ag9qh89pfay7b0mxz7i")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f ; There are no tests. + #:phases + (modify-phases %standard-phases + (replace 'replace-git-ls-files + (lambda _ + (substitute* "redjs.gemspec" + (("git ls-files") "find . -type f |sort")) + #t))))) + (synopsis "") + (description + "") + (home-page "") + (license license:expat)))) ;? + +(define-public ruby-rr + (package + (name "ruby-rr") + (version "1.2.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "rr" version)) + (sha256 + (base32 + "0b05ycaw17wbxzycv1wvzklpqjnmi0dqy01igcl5jfmy1ydky66r")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) ; test files not included + (native-inputs + `(("bundler" ,bundler) + ("ruby-rspec" ,ruby-rspec))) + (synopsis + "RR is a test double framework that features a rich selection of double techniques and a terse syntax.") + (description + "RR is a test double framework that features a rich selection of double techniques and a terse syntax.") + (home-page "https://rr.github.io/rr") + (license license:expat))) + +(define-public ruby-rubocop + (package + (name "ruby-rubocop") + (version "0.41.2") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "rubocop" version)) + (sha256 + (base32 + "02adr908a9l8nhdfjz137i20w1dv8mbfiamy0m9z9q0fvslfdxly")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) ; test files not included + (propagated-inputs + `(("ruby-parser" ,ruby-parser) + ("ruby-powerpack" ,ruby-powerpack) + ("ruby-rainbow" ,ruby-rainbow) + ("ruby-ruby-progressbar" ,ruby-ruby-progressbar) + ("ruby-unicode-display-width" + ,ruby-unicode-display-width))) + (synopsis + " Automatic Ruby code style checking tool. + Aims to enforce the community-driven Ruby Style Guide. +") + (description + " Automatic Ruby code style checking tool. + Aims to enforce the community-driven Ruby Style Guide. +") + (home-page "http://github.com/bbatsov/rubocop") + (license license:expat))) + +(define-public ruby-rest-client + (package + (name "ruby-rest-client") + (version "1.8.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "rest-client" version)) + (sha256 + (base32 + "1m8z0c4yf6w47iqz6j2p7x1ip4qnnzvhdph9d5fgx081cvjly3p7")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f + #:phases + (modify-phases %standard-phases + (add-before 'check 'fix-dependencies + (lambda _ + (substitute* "rest-client.gemspec" + ((".*pry.*") "\n")) + #t)) + (add-before 'check 'delete-network-tests + (lambda _ + (delete-file "spec/integration/request_spec.rb") + #t))))) + (propagated-inputs + `(("ruby-http-cookie" ,ruby-http-cookie) + ("ruby-mime-types" ,ruby-mime-types) + ("ruby-netrc" ,ruby-netrc))) + (native-inputs + `(("bundler" ,bundler) + ("ruby-webmock", ruby-webmock) + ("ruby-rspec", ruby-rspec-2))) + (synopsis + "A simple HTTP and REST client for Ruby, inspired by the Sinatra microframework style of specifying actions: get, put, post, delete.") + (description + "A simple HTTP and REST client for Ruby, inspired by the Sinatra microframework style of specifying actions: get, put, post, delete.") + (home-page + "https://github.com/rest-client/rest-client") + (license license:expat))) + (define-public ruby-contest (package (name "ruby-contest") @@ -3705,6 +5192,43 @@ and trust on your team.") (home-page "https://cucumber.io/") (license license:expat))) +(define-public ruby-cucumber-core-1 + (package + (inherit ruby-cucumber-core) + (version "1.5.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "cucumber-core" version)) + (sha256 + (base32 + "0qj2fsqvp94nggnikbnrfvnmzr1pl6ifmdsxj69kdw1kkab30jjr")))))) + +(define-public ruby-cucumber-wire + (package + (name "ruby-cucumber-wire") + (version "0.0.1") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "cucumber-wire" version)) + (sha256 + (base32 + "09ymvqb0sbw2if1nxg8rcj33sf0va88ancq5nmp8g01dfwzwma2f")))) + (build-system ruby-build-system) + (arguments + '(;; This is a small dependency of ruby-cucumber, and requires cucumber + ;; in general (e.g. the require 'cucumber/step_argument' in + ;; lib/cucumber/wire/protocol/requets.rb), including for the tests. + #:tests? #t + #:test-target "spec")) + (native-inputs + `(("bundler" ,bundler))) + (synopsis "Wire protocol for Cucumber") + (description "Dependency of ruby-cucumber") + (home-page "https://github.com/cucumber/cucumber-ruby-wire") + (license license:expat))) + (define-public ruby-bio-logger (package (name "ruby-bio-logger") @@ -4089,6 +5613,28 @@ neither too verbose nor too minimal.") (home-page "https://github.com/tpope/fivemat") (license license:expat))) +(define-public ruby-semver2 + (package + (name "ruby-semver2") + (version "3.4.2") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "semver2" version)) + (sha256 + (base32 + "1g7w95kckdz00pi3yrvl6ymbnl5dvxcmfb4kkkp888jcq4fawdvg")))) + (build-system ruby-build-system) + (arguments + '(;; No included tests + #:tests? #f)) + (synopsis + "maintain versions as per http://semver.org") + (description + "maintain versions as per http://semver.org") + (home-page "https://github.com/haf/semver") + (license #f))) + (define-public ruby-sqlite3 (package (name "ruby-sqlite3") @@ -4264,6 +5810,165 @@ support to both Ruby and JRuby. It uses @code{unf_ext} on CRuby and (home-page "https://github.com/knu/ruby-unf") (license license:bsd-2))) +(define-public ruby-unicode-display-width + (package + (name "ruby-unicode-display-width") + (version "1.1.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "unicode-display_width" version)) + (sha256 + (base32 + "194d70pfxq4d7rrk0vsk1dvj46ns2f350308khi7q5cvnmg3h1xs")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) ; test data not included in gem. + (synopsis + "[Unicode 1.1.0] Determines the monospace display width of a string using EastAsianWidth.txt, Unicode general category, and other data.") + (description + "[Unicode 1.1.0] Determines the monospace display width of a string using EastAsianWidth.txt, Unicode general category, and other data.") + (home-page + "http://github.com/janlelis/unicode-display_width") + (license license:expat))) + +(define-public ruby-vcr + (package + (name "ruby-vcr") + (version "3.0.3") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "vcr" version)) + (sha256 + (base32 + "1y19gb8vz1rbhx1qhim6kpp0fzksqhd7grb50hmrbjx5h4hc3y0y")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) ; No Rakefile in gem, and there's likely unpackaged + ; dependencies anyway. + (synopsis + "Record your test suite's HTTP interactions and replay them during future test runs for fast, deterministic, accurate tests.") + (description + "Record your test suite's HTTP interactions and replay them during future test runs for fast, deterministic, accurate tests.") + (home-page "http://vcr.github.io/vcr") + (license license:expat))) + +(define-public ruby_version ; There is another gem called 'ruby-version' so we + ; use an underscore in this name + (package + (name "ruby_version") + (version "1.0.1") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "ruby_version" version)) + (sha256 + (base32 + "0854i1bjy56176anr05l5m0vc81nl53c7fyfg7sljj62m1d64dgj")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f + #:phases + (modify-phases %standard-phases + (add-before 'check 'fix-dependencies + (lambda _ + (delete-file "Gemfile.lock") + (delete-file "pkg/ruby_version-1.0.0.gem") + (substitute* "ruby_version.gemspec" + ((".*rdoc.*") "\n") + (("rake.*") "rake>)\n") + ((".*rubygems-tasks.*") "\n")) + (substitute* "Rakefile" + (("^require 'rubygems/tasks'") "") + (("Gem::Tasks.new") "")) + #t))))) + (native-inputs + `(("bundler" ,bundler) + ("ruby-rspec" ,ruby-rspec-2) + ("ruby-rake" ,ruby-rake))) + (synopsis + "Provides a RubyVersion class to simplify checking for the right Ruby version in your programs.") + (description + "Provides a RubyVersion class to simplify checking for the right Ruby version in your programs.") + (home-page + "https://github.com/janlelis/ruby_version") + (license license:expat))) + +(define-public ruby-webmock + (package + (name "ruby-webmock") + (version "1.22.3") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "webmock" version)) + (sha256 + (base32 + "0la47vzbikhvnx8qcj8jli87agzzffwh11ggm7rpq43iz2rwp0sl")))) + (build-system ruby-build-system) + (arguments + '(#:tests? #f)) + (propagated-inputs + `(("bundler" ,bundler) + ("ruby-addressable" ,ruby-addressable) + ("ruby-crack" ,ruby-crack) + ("ruby-rspec" ,ruby-rspec) + ("ruby-hashdiff" ,ruby-hashdiff))) + (synopsis + "WebMock allows stubbing HTTP requests and setting expectations on HTTP requests.") + (description + "WebMock allows stubbing HTTP requests and setting expectations on HTTP requests.") + (home-page "http://github.com/bblimke/webmock") + (license license:expat))) + +(define-public ruby-websocket-driver + (package + (name "ruby-websocket-driver") + (version "0.6.4") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "websocket-driver" version)) + (sha256 + (base32 + "1m37q24mxykvixcj8sv0jz7y2a88spysxg5rp4zf4p1q7mbblshy")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) ; tests not included + (propagated-inputs + `(("ruby-websocket-extensions" + ,ruby-websocket-extensions))) + (synopsis + "WebSocket protocol handler with pluggable I/O") + (description + "WebSocket protocol handler with pluggable I/O") + (home-page + "http://github.com/faye/websocket-driver-ruby") + (license license:expat))) + +(define-public ruby-websocket-extensions + (package + (name "ruby-websocket-extensions") + (version "0.1.2") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "websocket-extensions" version)) + (sha256 + (base32 + "07qnsafl6203a2zclxl20hy4jq11c471cgvd0bj5r9fx1qqw06br")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) ; tests not included + (synopsis + "Generic extension manager for WebSocket connections") + (description + "Generic extension manager for WebSocket connections") + (home-page + "http://github.com/faye/websocket-extensions-ruby") + (license license:expat))) + (define-public ruby-domain-name (package (name "ruby-domain-name") @@ -4434,6 +6139,23 @@ device.") (home-page "https://rubyworks.github.io/ansi") (license license:bsd-2))) +(define-public ruby-ansi-to-html + (package + (name "ruby-ansi-to-html") + (version "0.0.3") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "ansi-to-html" version)) + (sha256 + (base32 + "0gfvxhdd87kn1ppl8idi7663zqqkwldbbmdhmcimcx7w6hq4nj65")))) + (build-system ruby-build-system) + (synopsis "ANSI color sequence to HTML") + (description "ANSI color sequence to HTML") + (home-page "") + (license license:expat))) + (define-public ruby-systemu (package (name "ruby-systemu") @@ -4842,7 +6564,7 @@ part of the Prawn PDF generator.") (define-public ruby-puma (package (name "ruby-puma") - (version "3.9.1") + (version "3.11.4") (source (origin (method url-fetch) @@ -4852,7 +6574,7 @@ part of the Prawn PDF generator.") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "03pifga841h17brh4vgia8i2ybh3cmsyg0dbybzdf6dq51wzcxdx")))) + "1kv2xsv74v7bf8qwsgz439xp7qcx26ms565h1g6x7fm8xbaxl5dj")))) (build-system ruby-build-system) (arguments `(#:tests? #f ; Tests require an out-dated version of minitest. @@ -5212,7 +6934,40 @@ in standard Ruby syntax.") "1p3f43scdzx9zxmy2kw5zsc3az6v46nq4brwcxmnscjy4w4racbv")))) (build-system ruby-build-system) (arguments - `(#:tests? #f)) + `(#:tests? #f + #:test-target "spec" + #:phases + (modify-phases %standard-phases + (add-before 'check 'remove-dependency-and-patch-path + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "spec/spec_helper.rb" + ;; cannot require coveralls otherwise there is a dependency cycle + ;; childprocess, coveralls, rest-client, webmock, addressable, + ;; rspec-its, aruba, childprocess. + ((".*coveralls.*") "") + ((".*Coveralls.*") "") + ;; patch path to /bin/sh + (("/bin/sh") (which "sh")) + ;; testing + (("; sleep") "; puts \"before_sleep\"; sleep; puts \"after_sleep\"") + ) + (substitute* "lib/childprocess/unix/process.rb" + (("send_signal 'TERM'") "puts 'terming'; send_signal 'TERM'") + (("send_signal 'KILL'") "puts 'killing'; send_signal 'KILL'") + (("return true if @exit_code") + "puts \"exit_code: #{@exit_code}\"; p self; return true if @exit_code")) + ;; sleep POLL_INTERVAL + (substitute* "lib/childprocess/abstract_process.rb" + (("sleep POLL_INTERVAL") + "puts 'sleeping'; sleep POLL_INTERVAL; puts 'awake'") + (("unless ok") "puts \"ok was #{ok} and exited? was #{exited?}\"; unless ok")) + #t)) + ;(replace 'check + ; ;; for testing for ben only + ; (lambda _ + ; (zero? (system* "rspec" "spec/childprocess_spec.rb" "-e" "kills + ; the full process tree")))) + ))) (native-inputs `(("bundler" ,bundler) ("ruby-rspec" ,ruby-rspec))) @@ -5248,9 +7003,12 @@ programs running in the background, in Ruby.") (base32 "08q64b5br692dd3v0a9wq9q5dvycc6kmiqmjbdxkxbfizggsvx6l")))) (build-system ruby-build-system) - (arguments - ;; Tests require network - `(#:tests? #f)) + (native-inputs + `(("bundler" ,bundler) + ("ruby-yard" ,ruby-yard) + ("ruby-rubocop" ,ruby-rubocop) + ("ruby-mocha" ,ruby-mocha) + ("ruby-minitest-reporters" ,ruby-minitest-reporters))) (home-page "https://simonecarletti.com/code/publicsuffix-ruby/") (synopsis "Domain name parser") (description "The gem @code{public_suffix} is a domain name parser, @@ -5265,23 +7023,46 @@ all known public suffixes.") (package (name "ruby-addressable") (version "2.5.2") - (source (origin - (method url-fetch) - (uri (rubygems-uri "addressable" version)) - (sha256 - (base32 - "0viqszpkggqi8hq87pqp0xykhvz60g99nwmkwsb0v45kc2liwxvk")))) + (source + (origin + (method url-fetch) + (uri (rubygems-uri "addressable" version)) + (sha256 + (base32 + "0viqszpkggqi8hq87pqp0xykhvz60g99nwmkwsb0v45kc2liwxvk")))) (build-system ruby-build-system) - (propagated-inputs - `(("ruby-public-suffix" ,ruby-public-suffix))) (arguments - ;; No test target - `(#:tests? #f)) - (home-page "https://github.com/sporkmonger/addressable") - (synopsis "Alternative URI implementation") - (description "Addressable is a replacement for the URI implementation that -is part of Ruby's standard library. It more closely conforms to RFC 3986, -RFC 3987, and RFC 6570 (level 4), providing support for IRIs and URI templates.") + '(#:test-target "spec" + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'fix-rakefile + (lambda _ + (substitute* "Gemfile" + (("git: 'https://github.com/sporkmonger/rack-mount.git',") "") + ((".*launchy.*") "") + ((".*rake.*") "gem 'rake'\n") + ((".*redcarpet.*") "")) + #t)) + (add-before 'check 'delete-network-test + (lambda _ + (delete-file "spec/addressable/net_http_compat_spec.rb") + #t))))) + (native-inputs + `(("ruby-rspec" ,ruby-rspec) + ("bundler" ,bundler) + ("ruby-idn-ruby" ,ruby-idn-ruby) + ("ruby-public-suffix" ,ruby-public-suffix) + ("ruby-sporkmonger-rack-mount" ,ruby-sporkmonger-rack-mount) + ("ruby-rspec-its", ruby-rspec-its) + ("ruby-yard" ,ruby-yard) + ("ruby-simplecov" ,ruby-simplecov))) + (synopsis "Uniform resource identifier (URI) reimplementation") + (description + "Addressable is a replacement for the URI implementation that is part of +Ruby's standard library. It more closely conforms to the relevant RFCs and +adds support for IRIs and URI templates.") + (home-page + "https://github.com/sporkmonger/addressable") (license license:asl2.0))) (define-public ruby-colorator @@ -5546,19 +7327,58 @@ interface. It allows Jekyll to rebuild your site when a file changes.") (package (name "ruby-parallel") (version "1.12.1") - (source (origin - (method url-fetch) - (uri (rubygems-uri "parallel" version)) - (sha256 - (base32 - "01hj8v1qnyl5ndrs33g8ld8ibk0rbcqdpkpznr04gkbxd11pqn67")))) + (source + (origin + (method url-fetch) + ;; fetch from github as rubygem does not contain tests + (uri (string-append "https://github.com/grosser/parallel/archive/v" + version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "0jpibyj9xzihllq02vg48gc7w3xklp5srx52ddcfg165mkx6xpwp")))) (build-system ruby-build-system) - (arguments `(#:tests? #f)); No rakefile + (arguments + `(;; TODO 3 test failures + ;; rspec ./spec/parallel_spec.rb:190 # Parallel.in_processes does not open unnecessary pipes + ;; rspec './spec/parallel_spec.rb[1:9:7]' # Parallel.each works with SQLite in processes + ;; rspec './spec/parallel_spec.rb[1:9:16]' # Parallel.each works with SQLite in threads + #:tests? #f + #:test-target "rspec-rerun:spec" + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'patch-Gemfile + (lambda _ + (substitute* "Gemfile" + (("gem 'rspec-legacy_formatters'") "") + (("gem 'activerecord.*$") "gem 'activerecord'\n")))) + (add-before 'check 'delete-Gemfile.lock + (lambda _ + ;; Bundler isn't being used for fetching dependendencies, so + ;; delete the Gemfile.lock + (delete-file "Gemfile.lock") + #t)) + (add-before 'build 'patch-gemspec + (lambda _ + (substitute* "parallel.gemspec" + (("git ls-files") "find")) + #t))))) + (native-inputs + `(("ruby-rspec" ,ruby-rspec) + ("ruby-rspec-rerun" ,ruby-rspec-rerun) + ("bundler" ,bundler) + ("ruby-activerecord" ,ruby-activerecord) + ("ruby-ruby-progressbar" ,ruby-ruby-progressbar) + ("ruby-bump" ,ruby-bump) + ("procps" ,procps) + ("lsof" ,lsof) + ("ruby-mysql2" ,ruby-mysql2) + ("ruby-sqlite3" ,ruby-sqlite3) + ("ruby-i18n" ,ruby-i18n))) + (synopsis "Run Ruby code in parallel processes") + (description + "Run any kind of code in parallel processes") (home-page "https://github.com/grosser/parallel") - (synopsis "Parallel processing in Ruby") - (description "Parallel allows you to run any code in parallel Processes -(to use all CPUs) or Threads(to speedup blocking operations). It is best -suited for map-reduce or e.g. parallel downloads/uploads.") (license license:expat))) (define-public ruby-cane @@ -5712,20 +7532,57 @@ functionality from Prawn.") (package (name "ruby-prawn-table") (version "0.2.2") - (source (origin - (method url-fetch) - (uri (rubygems-uri "prawn-table" version)) - (sha256 - (base32 - "1nxd6qmxqwl850icp18wjh5k0s3amxcajdrkjyzpfgq0kvilcv9k")))) + (source + (origin + (method url-fetch) + (uri (rubygems-uri "prawn-table" version)) + (sha256 + (base32 + "1nxd6qmxqwl850icp18wjh5k0s3amxcajdrkjyzpfgq0kvilcv9k")))) (build-system ruby-build-system) - (arguments `(#:tests? #f)); No rakefile (propagated-inputs - `(("ruby-prawn" ,ruby-prawn))) - (home-page "https://github.com/prawnpdf/prawn-table") - (synopsis "Tables support for Prawn") - (description "This gem provides tables support for Prawn.") - (license license:gpl3+))) + `(("ruby-prawn" ,ruby-prawn) + ("ruby-pdf-inspector" ,ruby-pdf-inspector))) + (native-inputs + `(("bundler" ,bundler) + ("ruby-yard" ,ruby-yard) + ("ruby-mocha" ,ruby-mocha) + ("ruby-coderay" ,ruby-coderay) + ("ruby-prawn-manual-builder" ,ruby-prawn-manual-builder) + ("ruby-simplecov" ,ruby-simplecov) + ("ruby-rspec-2" ,ruby-rspec-2))) + (arguments + '(;; TODO: 1 test fails + ;; Failure/Error: pdf.page_count.should == 1 + ;; expected: 1 + ;; got: 2 (using ==) + ;; # ./spec/table_spec.rb:1308 + ;; + ;; 225 examples, 1 failure + #:tests? #f + #:phases + (modify-phases %standard-phases + (add-before 'check 'patch-gemspec + (lambda _ + (substitute* "prawn-table.gemspec" + ;; Loosen the requirement for pdf-inspector + (("~> 1\\.1\\.0") ">= 0") + ;; Loosen the requirement for pdf-reader + (("~> 1\\.2") ">= 0")))) + (replace 'check + (lambda* (#:key tests? #:allow-other-keys) + (if tests? + (invoke "rspec") + #t)))))) + (synopsis + " Prawn::Table provides tables for the Prawn PDF toolkit +") + (description + " Prawn::Table provides tables for the Prawn PDF toolkit +") + (home-page + "https://github.com/prawnpdf/prawn-table") + (license (list #f #f #f)))) (define-public ruby-kramdown (package @@ -5838,21 +7695,47 @@ is compatible with stylesheets designed for pygments.") (define-public ruby-hashie (package (name "ruby-hashie") - (version "3.6.0") - (source (origin - (method url-fetch) - (uri (rubygems-uri "hashie" version)) - (sha256 - (base32 - "13bdzfp25c8k51ayzxqkbzag3wj5gc1jd8h7d985nsq6pn57g5xh")))) + (version "3.5.7") + (source + (origin + (method url-fetch) + ;; The gem does not include Gemfile. + (uri (string-append "https://github.com/intridea/hashie/archive/v" + version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "00afsf591jj1q7j44fswwwrki01qgxa6wnqi6a6sq3bfjm1jlxy6")))) (build-system ruby-build-system) + (arguments + `(#:tests? #f + #:test-target "spec" + #:phases + (modify-phases %standard-phases + (add-before 'build 'fix-dependencies + (lambda _ + (substitute* "Gemfile" + ((".*pry.*") "") + ((".*guard.*") "") + ((".*codeclimate.*") "") + (("rubocop.*") "rubocop'\n") + (("rspec-core.*") "rspec-core'\n")) + (substitute* "spec/spec_helper.rb" + ((".*pry.*") "")) + #t))))) (native-inputs - `(("bundler" ,bundler))) - (arguments `(#:tests? #f)); FIXME: Could not locate Gemfile or .bundle/ directory + `(("bundler" ,bundler) + ("ruby-rspec" ,ruby-rspec) + ("ruby-rspec-pending-for" ,ruby-rspec-pending-for) + ;("ruby-guard" ,ruby-guard) + ;("ruby-guard-rspec" ,ruby-guard-rspec) + ("ruby-activesupport" ,ruby-activesupport) + ("ruby-rubocop" ,ruby-rubocop))) + (synopsis + "Hashie is a collection of classes and mixins that make hashes more powerful.") + (description + "Hashie is a collection of classes and mixins that make hashes more powerful.") (home-page "https://github.com/intridea/hashie") - (synopsis "Extensions to Ruby Hashes") - (description "Hashie is a collection of classes and mixins that make Ruby -hashes more powerful.") (license license:expat))) (define-public ruby-heredoc-unindent @@ -6042,3 +7925,1282 @@ Pathname.") (description "The Pagination Generator forms the core of the pagination logic in Jekyll. It calculates and generates the pagination pages.") (license license:expat))) + +(define-public ruby-aruba + (package + (name "ruby-aruba") + (version "0.14.6") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "aruba" version)) + (sha256 + (base32 + "11v7d4d3q1as3w5md22q3vilnmqw1icp7sg955ylfzmxjc07pdby")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f ; There are 3 test failures to do with running commands, not + ; sure what the issue is. + #:test-target "spec" + #:phases + (modify-phases %standard-phases + (add-before 'check 'fix-gemfile + (lambda _ + (substitute* "Gemfile" + ((".*byebug.*") "\n") + ((".*pry.*") "\n") + ((".*yaml.*") "\n") + ((".*bcat.*") "\n") + ((".*kramdown.*") "\n") + ((".*fuubar.*") "\n") + ((".*rubocop.*") "\n") + ((".*cucumber-pro.*") "\n") + ((".*license_finder.*") "\n") + ((".*relish.*") "\n") + ) + (substitute* "spec/spec_helper.rb" + ((".*simplecov.*") "") + (("^SimpleCov.*") "")) + #t)) + (add-before 'check 'set-home + (lambda _ (setenv "HOME" "/tmp") #t))))) + (native-inputs + `(("bundler" ,bundler) + ("ruby-simplecov" ,ruby-simplecov) + ("ruby-rspec" ,ruby-rspec) + ("ruby-fuubar" ,ruby-fuubar))) + (propagated-inputs + `(("ruby-childprocess" ,ruby-childprocess) + ("ruby-contracts" ,ruby-contracts) + ("ruby-cucumber" ,ruby-cucumber) + ("ruby-ffi" ,ruby-ffi) + ("ruby-rspec-expectations" ,ruby-rspec-expectations) + ("ruby-thor" ,ruby-thor))) + (synopsis + "Extension for popular TDD and BDD frameworks like \"Cucumber\", \"RSpec\" and \"Minitest\" to make testing commandline applications meaningful, easy and fun.") + (description + "Extension for popular TDD and BDD frameworks like \"Cucumber\", \"RSpec\" and \"Minitest\" to make testing commandline applications meaningful, easy and fun.") + (home-page "http://github.com/cucumber/aruba") + (license license:expat))) + +;; A version of ruby-aruba without tests run so that circular dependencies can +;; be avoided. +(define ruby-aruba-without-tests + (package (inherit ruby-aruba) + (arguments + `(#:tests? #f)) + (propagated-inputs + (map (lambda (input) + (if (string=? (car input) + "ruby-cucumber") + `("ruby-cucumber" ,ruby-cucumber-without-tests) + input)) + (package-propagated-inputs ruby-aruba))) + (native-inputs + `()))) + +(define-public ruby-cucumber + (package + (name "ruby-cucumber") + (version "2.4.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "cucumber" version)) + (sha256 + (base32 + "1k4j31a93r0zhvyq2mm2k8irppbvkzbsg44r3mf023959v18fzih")))) + (build-system ruby-build-system) + (arguments + '(#:test-target "spec" + ;; TODO: Test failure as documented at + ;; https://github.com/cucumber/cucumber/issues/58 + ;; + ;; Cucumber::Formatter::Html when writing the report to a file with a + ;; step that embeds a snapshot converts the snapshot path to a relative + ;; path + ;; + ;; Failure/Error: expect(@out).to + ;; receive(:respond_to?).with(:path).and_return(true) + ;; + ;; (#<StringIO:0x00005555570887a0>).respond_to?(:path) + ;; expected: 1 time with arguments: (:path) + ;; received: 3 times with arguments: (:path) + ;; # ./spec/cucumber/formatter/html_spec.rb:35 + #:tests? #f)) + (propagated-inputs + `(("ruby-builder" ,ruby-builder) + ("ruby-cucumber-core" ,ruby-cucumber-core-1) + ("ruby-cucumber-wire" ,ruby-cucumber-wire) + ("ruby-diff-lcs" ,ruby-diff-lcs) + ("ruby-gherkin" ,ruby-gherkin) + ("ruby-multi-json" ,ruby-multi-json) + ("ruby-multi-test" ,ruby-multi-test))) + (native-inputs + `(("bundler" ,bundler) + ;; Use a untested version of aruba, to avoid a circular dependency, as + ;; ruby-aruba depends on ruby-cucumber. + ("ruby-aruba", ruby-aruba-without-tests) + ("ruby-rspec" ,ruby-rspec) + ("ruby-pry" ,ruby-pry) + ("ruby-nokogiri" ,ruby-nokogiri))) + (synopsis + "Behaviour Driven Development with elegance and joy") + (description + "Behaviour Driven Development with elegance and joy") + (home-page "http://cukes.info") + (license license:asl2.0))) + +(define ruby-cucumber-without-tests + (package (inherit ruby-cucumber) + (arguments + `(#:tests? #f)) + (native-inputs + `()))) + +(define-public ruby-coffee-script + (package + (name "ruby-coffee-script") + (version "2.4.1") + (source + (origin + (method url-fetch) + ;; fetch from github as the gem does not contain testing code + (uri (string-append + "https://github.com/rails/ruby-coffee-script/archive/v" + version ".tar.gz")) + (sha256 + (base32 + "0gbcg40ks4ifm332ljmgq2l44ssld0z6xhjzk48v6mpaxyz8mc92")))) + (build-system ruby-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-before 'check 'fix-test + (lambda _ + ;; patch submitted upstream at + ;; https://github.com/rails/ruby-coffee-script/pull/6 + (substitute* "test/test_coffee_script.rb" + ((" unexpected unless\\\"") + " unexpected unless\", '[stdin]:3:11: unexpected unless'")) + #t))))) + (propagated-inputs + `(("ruby-coffee-script-source" ,ruby-coffee-script-source) + ("ruby-execjs" ,ruby-execjs) + ("ruby-duktape", ruby-duktape))) ; use as the JS interpreter + (synopsis "bridge to the javascript CoffeeScript compiler.") + (description + "Ruby CoffeeScript is a bridge to the javascript CoffeeScript compiler. +CoffeeScript is an attempt to expose the good parts of JavaScript in a simple +way.") + (home-page + "http://github.com/rails/ruby-coffee-script") + (license license:expat))) + +(define-public ruby-ref + (package + (name "ruby-ref") + (version "2.0.0") + (source + (origin + (method url-fetch) + ;; Tests are not distributed at rubygems.org so download from GitHub + ;; instead. + (uri (string-append "https://github.com/ruby-concurrency/ref/archive/v" + version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1090z8vzf8bf7gx3akvrn4alcklyanbg6hipjmzlzkx0lr1l5zj4")))) + (build-system ruby-build-system) + (arguments + `(#:test-target "spec")) + (synopsis + "Library that implements weak, soft, and strong references in Ruby that work +across multiple runtimes (MRI, Jruby and Rubinius). Also includes implementation +of maps/hashes that use references and a reference queue.") + (description + "Library that implements weak, soft, and strong references in Ruby that work +across multiple runtimes (MRI, Jruby and Rubinius). Also includes +implementation of maps/hashes that use references and a reference queue.") + (home-page + "http://github.com/ruby-concurrency/ref") + (license license:expat))) + +;; haml 4 cannot currently be packaged because tilt is not yet packaged. +(define-public ruby-haml + (package + (name "ruby-haml") + (version "4.0.7") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "haml" version)) + (sha256 + (base32 + "0mrzjgkygvfii66bbylj2j93na8i89998yi01fin3whwqbvx0m1p")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) ; circular dependency with tilt +; (propagated-inputs `(("ruby-tilt" ,ruby-tilt))) + (synopsis "Haml (HTML Abstraction Markup Language) library.") + (description + "Haml (HTML Abstraction Markup Language) is a layer on top of HTML or XML +that is designed to express the structure of documents using indentation rather +than closing tags. It was originally envisioned as a plugin for Ruby on Rails, +but it can function as a stand-alone templating engine.") + (home-page "http://haml.info/") + (license license:expat))) + +(define-public ruby-faraday + (package + (name "ruby-faraday") + (version "0.9.2") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "faraday" version)) + (sha256 + (base32 + "1kplqkpn2s2yl3lxdf6h7sfldqvkbkpxwwxhyk7mdhjplb5faqh6")))) + (build-system ruby-build-system) + (arguments + '(#:tests? #f)) + (propagated-inputs + `(("ruby-multipart-post" ,ruby-multipart-post))) + (synopsis "HTTP/REST API client library.") + (description "HTTP/REST API client library.") + (home-page + "https://github.com/lostisland/faraday") + (license license:expat))) + +(define-public ruby-nio4r + (package + (name "ruby-nio4r") + (version "2.2.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "nio4r" version)) + (sha256 + (base32 + "0jjrj7vs29w6dfgsxq08226jfbi2j0x62lf4p9zmvyp19dj4z00a")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f + #:test-target "spec" + #:phases + (modify-phases %standard-phases + (add-before 'check 'fix-dependencies + (lambda _ + (substitute* "Gemfile" + (("rubocop.*") "rubocop\"\n")) + #t)) + (add-before 'check 'compile + (lambda _ + (zero? (system* "rake" "compile"))))))) + (native-inputs + `(("bundler" ,bundler) + ("ruby-rake-compiler" ,ruby-rake-compiler) + ("ruby-rspec" ,ruby-rspec) + ("ruby-rubocop" ,ruby-rubocop) + ("ruby-coveralls" ,ruby-coveralls))) + (synopsis "New IO for Ruby") + (description "New IO for Ruby") + (home-page "https://github.com/celluloid/nio4r") + (license license:expat))) + +(define-public ruby-globalid + (package + (name "ruby-globalid") + (version "0.3.6") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "globalid" version)) + (sha256 + (base32 + "145xrpsfx1qqjy33r6qa588wb16dvdhxzj2aysh755vhg6hgm291")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) + (propagated-inputs + `(("ruby-activesupport" ,ruby-activesupport))) + (synopsis + "URIs for your models makes it easy to pass references around.") + (description + "URIs for your models makes it easy to pass references around.") + (home-page "http://www.rubyonrails.org") + (license license:expat))) + +(define-public ruby-sprockets + (package + (name "ruby-sprockets") + (version "3.7.1") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "sprockets" version)) + (sha256 + (base32 + "0sv3zk5hwxyjvg7iy9sggjc7k3mfxxif7w8p260rharfyib939ar")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) ; tests not included + (propagated-inputs + `(("ruby-concurrent" ,ruby-concurrent) + ("ruby-rack" ,ruby-rack))) + (synopsis + "Sprockets is a Rack-based asset packaging system that concatenates and serves JavaScript, CoffeeScript, CSS, LESS, Sass, and SCSS.") + (description + "Sprockets is a Rack-based asset packaging system that concatenates and serves JavaScript, CoffeeScript, CSS, LESS, Sass, and SCSS.") + (home-page "https://github.com/rails/sprockets") + (license license:expat))) + +(define-public ruby-uglifier +(package + (name "ruby-uglifier") + (version "3.0.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "uglifier" version)) + (sha256 + (base32 + "05a7xqzzlliqbd32jfkmis08pb0cljns7jx14ybkqb9zbg7ph35h")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) ; Tests fail, perhaps they require npm? test-target "spec" + ;; #:phases + ;; (modify-phases %standard-phases + ;; (add-before 'check 'list + ;; (lambda _ + ;; (system* "rake" "js") + ;; (system* "gem" "list")))))) + (propagated-inputs + `(("ruby-execjs" ,ruby-execjs))) + ;; (native-inputs + ;; `(("bundler" ,bundler) + ;; ("ruby-rubocop" ,ruby-rubocop) + ;; ("ruby-rspec" ,ruby-rspec) + ;; ("ruby-sourcemap" ,ruby-sourcemap) + ;; ("ruby-duktape" ,ruby-duktape))) ; Use as the JS interpreter + (synopsis + "Uglifier minifies JavaScript files by wrapping UglifyJS to be accessible in Ruby") + (description + "Uglifier minifies JavaScript files by wrapping UglifyJS to be accessible in Ruby") + (home-page "http://github.com/lautis/uglifier") + (license license:expat))) + +(define-public ruby-sourcemap +(package + (name "ruby-sourcemap") + (version "0.1.1") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "sourcemap" version)) + (sha256 + (base32 + "0l111zg9qh2g15rpmi2d006m3h27hl462d7zmc4js67ppmkcd7w8")))) + (build-system ruby-build-system) + (native-inputs + `(("bundler" ,bundler) + ("ruby-minitest" ,ruby-minitest))) + (synopsis "Ruby source maps") + (description "Ruby source maps") + (home-page "http://github.com/maccman/sourcemap") + (license license:expat))) + +(define-public ruby-turbolinks-source + (package + (name "ruby-turbolinks-source") + (version "5.0.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "turbolinks-source" version)) + (sha256 + (base32 + "1s197pamkac9kkhslj41gxxihx6jp3dh4g394k9zmbxwkfrf36zb")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) ; There are no tests. + (synopsis "Turbolinks JavaScript assets") + (description "Turbolinks JavaScript assets") + (home-page + "https://github.com/turbolinks/turbolinks-source-gem") + (license license:expat))) + +(define-public ruby-turbolinks + (package + (name "ruby-turbolinks") + (version "5.0.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "turbolinks" version)) + (sha256 + (base32 + "1dpsl17mygsd3hjcb2zq05n9zygbi0qc5130h276lw6py8g7nppc")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) ; There are no tests. + (propagated-inputs + `(("ruby-turbolinks-source" ,ruby-turbolinks-source))) + (synopsis + "Rails engine for Turbolinks 5 support") + (description + "Rails engine for Turbolinks 5 support") + (home-page + "https://github.com/turbolinks/turbolinks-rails") + (license license:expat))) + +(define-public ruby-jbuilder + (package + (name "ruby-jbuilder") + (version "2.7.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "jbuilder" version)) + (sha256 + (base32 + "1n3myqk2hdnidzzbgcdz2r1y4cr5vpz5nkfzs0lz4y9gkjbjyh2j")))) + (build-system ruby-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-before 'check 'fix-dependencies' + (lambda _ + (substitute* "Gemfile" + ((".*pry.*") "")) + #t))))) + (native-inputs + `(("bundler" ,bundler) + ("ruby-mocha" ,ruby-mocha) + ("ruby-appraisal" ,ruby-appraisal))) + (propagated-inputs + `(("ruby-activesupport" ,ruby-activesupport) + ("ruby-multi-json" ,ruby-multi-json))) + (synopsis + "Create JSON structures via a Builder-style DSL") + (description + "Create JSON structures via a Builder-style DSL") + (home-page "https://github.com/rails/jbuilder") + (license license:expat))) + +(define-public ruby-erubi + (package + (name "ruby-erubi") + (version "1.7.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "erubi" version)) + (sha256 + (base32 + "1zkaqb8zv14azb2fa8w79d3mssdx86k9kg2m1bgc2k428y2zf8g9")))) + (build-system ruby-build-system) + (synopsis + "Erubi is a ERB template engine for ruby. It is a simplified fork of Erubis") + (description + "Erubi is a ERB template engine for ruby. It is a simplified fork of Erubis") + (home-page + "https://github.com/jeremyevans/erubi") + (license license:expat))) + +(define-public ruby-rubygems + (package + (name "ruby-rubygems") + (version (string-append "2.6.6")) + (source (origin + (method url-fetch) + (uri (string-append "https://rubygems.org/rubygems/rubygems-" + version ".tgz")) + (sha256 + (base32 + "0x0ldlwr627d0brw96jdbscib6d2nk19izvnh8lzsasszi1k5rkq")))) + (build-system ruby-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (replace 'build + (lambda* (#:key outputs #:allow-other-keys) + (zero? (system* + "ruby" "setup.rb" + (string-append + "--prefix=" (assoc-ref outputs "out")))))) + (delete 'check) ; fix + (delete 'install) ; done in build + ))) + (synopsis "") + (description + "") + (home-page "") + (license license:expat))) ;? + +(define-public ruby-ruby-dep + (package + (name "ruby-ruby-dep") + (version "1.4.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "ruby_dep" version)) + (sha256 + (base32 + "12i57gpy0gmkwnd7l6xdjpfw9bygxmgwx4hjwgg4mca2jr7d3g47")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) ; Do not test to avoid circular dependency with gem_isolator. + (synopsis + "Creates a version constraint of supported Rubies,suitable for a gemspec file") + (description + "Creates a version constraint of supported Rubies,suitable for a gemspec file") + (home-page "https://github.com/e2/ruby_dep") + (license license:expat))) + +(define-public ruby-guard-compat + (package + (name "ruby-guard-compat") + (version "1.2.1") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "guard-compat" version)) + (sha256 + (base32 + "1zj6sr1k8w59mmi27rsii0v8xyy2rnsi09nqvwpgj1q10yq1mlis")))) + (build-system ruby-build-system) + (arguments + `(#:test-target "spec")) + (native-inputs + `(("bundler" ,bundler) + ("ruby-rspec" ,ruby-rspec) + ("ruby-rubocop" ,ruby-rubocop))) + (synopsis + "Helps creating valid Guard plugins and testing them") + (description + "Helps creating valid Guard plugins and testing them") + (home-page "") + (license license:expat))) + +(define-public ruby-guard-rspec + (package + (name "ruby-guard-rspec") + (version "4.7.3") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "guard-rspec" version)) + (sha256 + (base32 + "1jkm5xp90gm4c5s51pmf92i9hc10gslwwic6mvk72g0yplya0yx4")))) + (build-system ruby-build-system) + (arguments + `(#:tests? #f)) ; Tests require further dependencies e.g. gem_isolator. + (propagated-inputs + `(("ruby-guard" ,ruby-guard) + ("ruby-guard-compat" ,ruby-guard-compat) + ("ruby-rspec" ,ruby-rspec))) + (synopsis + "Guard::RSpec automatically run your specs (much like autotest).") + (description + "Guard::RSpec automatically run your specs (much like autotest).") + (home-page + "https://github.com/guard/guard-rspec") + (license license:expat))) + +(define-public ruby-backports + (package + (name "ruby-backports") + (version "3.6.7") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "backports" version)) + (sha256 + (base32 + "0m8jkjh4kymgfipd6yb0zcxlas4x5r60k2c94zkklb1ryma33grc")))) + (build-system ruby-build-system) + (synopsis + "Essential backports that enable many of the nice features of Ruby 1.8.7 up to 2.1.0 for earlier versions.") + (description + "Essential backports that enable many of the nice features of Ruby 1.8.7 up to 2.1.0 for earlier versions.") + (home-page + "http://github.com/marcandre/backports") + (license license:expat))) + +(define-public ruby-gh + (package + (name "ruby-gh") + (version "0.14.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "gh" version)) + (sha256 + (base32 + "0j7m6jmxzkxvnqgnhmci33a89qpaxxcrm55kk5vz4bcpply04hx2")))) + (build-system ruby-build-system) + (propagated-inputs + `(("ruby-addressable" ,ruby-addressable) + ("ruby-backports" ,ruby-backports) + ("ruby-faraday" ,ruby-faraday) + ("ruby-multi-json" ,ruby-multi-json) + ("ruby-net-http-persistent" + ,ruby-net-http-persistent) + ;("ruby-net-http-pipeline" + ; ,ruby-net-http-pipeline) + )) + (synopsis + "multi-layer client for the github api v3") + (description + "multi-layer client for the github api v3") + (home-page "http://gh.rkh.im/") + (license license:expat))) + +(define-public ruby-faraday-middleware + (package + (name "ruby-faraday-middleware") + (version "0.10.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "faraday_middleware" version)) + (sha256 + (base32 + "0nxia26xzy8i56qfyz1bg8dg9yb26swpgci8n5jry8mh4bnx5r5h")))) + (build-system ruby-build-system) + (propagated-inputs + `(("ruby-faraday" ,ruby-faraday))) + (synopsis "Various middleware for Faraday") + (description "Various middleware for Faraday") + (home-page + "https://github.com/lostisland/faraday_middleware") + (license license:expat))) + +(define-public ruby-launchy + (package + (name "ruby-launchy") + (version "2.4.3") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "launchy" version)) + (sha256 + (base32 + "190lfbiy1vwxhbgn4nl4dcbzxvm049jwc158r2x7kq3g5khjrxa2")))) + (build-system ruby-build-system) + (propagated-inputs + `(("ruby-addressable" ,ruby-addressable))) + (synopsis + "Launchy is helper class for launching cross-platform applications in a fire and forget manner. There are application concepts (browser, email client, etc) that are common across all platforms, and they may be launched differently on each platform. Launchy is here to make a common approach to launching external application from within ruby programs.") + (description + "Launchy is helper class for launching cross-platform applications in a fire and forget manner. There are application concepts (browser, email client, etc) that are common across all platforms, and they may be launched differently on each platform. Launchy is here to make a common approach to launching external application from within ruby programs.") + (home-page + "http://github.com/copiousfreetime/launchy") + (license #f))) + +(define-public ruby-travis + (package + (name "ruby-travis") + (version "1.8.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "travis" version)) + (sha256 + (base32 + "0s88790wlhlsaxs9561w3h6vhj00sc36bw6k7rajj6vi0416s73z")))) + (build-system ruby-build-system) + (propagated-inputs + `(("ruby-addressable" ,ruby-addressable) + ("ruby-backports" ,ruby-backports) + ("ruby-faraday" ,ruby-faraday) + ("ruby-faraday-middleware" + ,ruby-faraday-middleware) + ("ruby-gh" ,ruby-gh) + ("ruby-highline" ,ruby-highline) + ("ruby-launchy" ,ruby-launchy) + ("ruby-pry" ,ruby-pry) + ;("ruby-pusher-client" ,ruby-pusher-client) + ;("ruby-typhoeus" ,ruby-typhoeus) + )) + (synopsis + "CLI and Ruby client library for Travis CI") + (description + "CLI and Ruby client library for Travis CI") + (home-page + "https://github.com/travis-ci/travis.rb") + (license license:expat))) + +(define-public ruby-sinatra + (package + (name "ruby-sinatra") + (version "2.0.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "sinatra" version)) + (sha256 + (base32 + "0dbpy8cm06psnk4q1d8map4z81xvlghyi91075xsm56ka2d6kpsi")))) + (build-system ruby-build-system) + (arguments + '(#:tests? #f)) + (propagated-inputs + `(("ruby-rack" ,ruby-rack) + ("ruby-rack-protection" ,ruby-rack-protection) + ("ruby-tilt" ,ruby-tilt))) + (native-inputs + `(("ruby-rack-test" ,ruby-rack-test))) + (synopsis + "Sinatra is a DSL for quickly creating web applications in Ruby with minimal effort.") + (description + "Sinatra is a DSL for quickly creating web applications in Ruby with minimal effort.") + (home-page "http://www.sinatrarb.com/") + (license license:expat))) + +(define-public ruby-bzip2-ruby + ;; Use git reference because gem is out of date. + (let ((revision "1") + (commit "e58f154624ff2d770e92a70e0d8fb1a9e6564720")) + (package + (name "ruby-bzip2-ruby") + (version (string-append "0.2.7." revision "." commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/brianmario/bzip2-ruby.git") + (commit commit))) + (file-name (string-append name "-" version "-checkout")) + (sha256 + (base32 + "072jzd1fm6z0fnc166q7n4h8h4vrb9jhpcl7swh7d0qm4fx4cxvz")))) + (build-system ruby-build-system) + (arguments + '(#:test-target "spec" + ; #:gem-flags + ; (list "--" + ; (string-append "--with-bz2-dir=" + ; (assoc-ref %build-inputs "bzip2") + ; "/include/" )) + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'patch-gemspec-and-source + (lambda _ + (substitute* "bzip2-ruby.gemspec" + (("s.files = `git ls-files`") "s.files = `find *`") + (("s.test_files = `git ls-files spec`") + "s.files = `find spec`")) + ;; Use part of the patch proposed at + ;; https://github.com/brianmario/bzip2-ruby/pull/26 + (substitute* "ext/bzip2/writer.c" + (("RBASIC\\(res\\)->klass = rb_cString;") + "RBASIC_SET_CLASS(res, rb_cString);")) + #t))))) + (native-inputs + `(("bundler" ,bundler) + ("ruby-rspec" ,ruby-rspec-2) + ("ruby-rake-compiler" ,ruby-rake-compiler))) + (synopsis "Ruby C bindings to libbzip2.") + (description "Ruby C bindings to libbzip2.") + (home-page + "http://github.com/brianmario/bzip2-ruby") + (license #f)))) + +(define-public ruby-open4 + (package + (name "ruby-open4") + (version "1.3.4") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "open4" version)) + (sha256 + (base32 + "1cgls3f9dlrpil846q0w7h66vsc33jqn84nql4gcqkk221rh7px1")))) + (build-system ruby-build-system) + (arguments + '(#:tests? #f)) + (synopsis + "open child process with handles on pid, stdin, stdout, and stderr: manage child processes and their io handles easily.") + (description + "open child process with handles on pid, stdin, stdout, and stderr: manage child processes and their io handles easily.") + (home-page "https://github.com/ahoward/open4") + (license #f))) + +(define-public ruby-hamster + (package + (name "ruby-hamster") + (version "3.0.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "hamster" version)) + (sha256 + (base32 + "1n1lsh96vnyc1pnzyd30f9prcsclmvmkdb3nm5aahnyizyiy6lar")))) + (build-system ruby-build-system) + (arguments + '(#:tests? #f)) + (propagated-inputs + `(("ruby-concurrent" ,ruby-concurrent))) + (synopsis + "Efficient, immutable, thread-safe collection classes for Ruby") + (description + "Efficient, immutable, thread-safe collection classes for Ruby") + (home-page + "https://github.com/hamstergem/hamster") + (license license:expat))) + +(define-public ruby-lino + (package + (name "ruby-lino") + (version "1.1.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "lino" version)) + (sha256 + (base32 + "11d29g0fk372b9fcpyr0k6hxm2b4j4igpysmi542hgbbgqgp9cd3")))) + (build-system ruby-build-system) + (arguments + '(#:tests? #f)) + (propagated-inputs + `(("ruby-hamster" ,ruby-hamster) + ("ruby-open4" ,ruby-open4))) + (synopsis "Command line builders and executors.") + (description + "Command line builders and executors.") + (home-page "https://github.com/tobyclemson/lino") + (license license:expat))) + +(define-public ruby-terraform + (package + (name "ruby-terraform") + (version "0.12.1") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "ruby-terraform" version)) + (sha256 + (base32 + "198q2nmfbyn0x7vs81x4gmxymz0z5k7y7x9v48vi8szqlhm9fp7r")))) + (build-system ruby-build-system) + (arguments + '(#:tests? #f)) + (propagated-inputs `(("ruby-lino" ,ruby-lino))) + (synopsis + "Wraps the Terraform CLI so that Terraform can be invoked from a Ruby script or Rakefile.") + (description + "Wraps the Terraform CLI so that Terraform can be invoked from a Ruby script or Rakefile.") + (home-page + "https://github.com/tobyclemson/ruby_terraform") + (license license:expat))) + +(define-public ruby-sucker-punch + (package + (name "ruby-sucker-punch") + (version "2.0.4") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "sucker_punch" version)) + (sha256 + (base32 + "064dgfg3jwna2x1iyhbz3pvh3iryxs4vls77jmmad571hjz0l01p")))) + (build-system ruby-build-system) + (arguments + '(#:tests? #f)) + (propagated-inputs + `(("ruby-concurrent" ,ruby-concurrent))) + (synopsis + "Asynchronous processing library for Ruby") + (description + "Asynchronous processing library for Ruby") + (home-page + "https://github.com/brandonhilkert/sucker_punch") + (license license:expat))) + +(define-public ruby-que +(package + (name "ruby-que") + (version "1.0.0.beta3") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "que" version)) + (sha256 + (base32 + "0gr9pb814d4qj3ds98g6cjrdk7wv0yg8aqbm7c1lmgl87jkg8q04")))) + (build-system ruby-build-system) + (arguments + '(#:tests? #f)) + (synopsis + "A job queue that uses PostgreSQL's advisory locks for speed and reliability.") + (description + "This package provides a job queue that uses PostgreSQL's advisory locks for speed and reliability.") + (home-page "https://github.com/chanks/que") + (license license:expat))) + +(define-public ruby-autoprefixer-rails + (package + (name "ruby-autoprefixer-rails") + (version "7.2.5") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "autoprefixer-rails" version)) + (sha256 + (base32 + "12jiv0nigfcnzn03w8avv6ivr9hwx4hqd28758yvsrfdzq31i05a")))) + (build-system ruby-build-system) + (arguments + '(#:tests? #f)) + (native-inputs + `(("bundler" ,bundler))) + (propagated-inputs + `(("ruby-execjs" ,ruby-execjs))) + (synopsis + "Parse CSS and add vendor prefixes to CSS rules using values from the Can I Use website.") + (description + "Parse CSS and add vendor prefixes to CSS rules using values from the Can I Use website.") + (home-page + "https://github.com/ai/autoprefixer-rails") + (license license:expat))) + +(define-public ruby-bootstrap-sass + (package + (name "ruby-bootstrap-sass") + (version "3.3.7") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "bootstrap-sass" version)) + (sha256 + (base32 + "1bc9bf6caddqn1rv15b5x56yczmbjzaxzl9lk5zbwrg1bfph4bx9")))) + (build-system ruby-build-system) + (arguments + '(#:tests? #f)) + (propagated-inputs + `(("ruby-autoprefixer-rails" + ,ruby-autoprefixer-rails) + ("ruby-sass" ,ruby-sass))) + (synopsis + "bootstrap-sass is a Sass-powered version of Bootstrap 3, ready to drop right into your Sass powered applications.") + (description + "bootstrap-sass is a Sass-powered version of Bootstrap 3, ready to drop right into your Sass powered applications.") + (home-page + "https://github.com/twbs/bootstrap-sass") + (license license:expat))) + +(define-public ruby-multi-xml + (package + (name "ruby-multi-xml") + (version "0.6.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "multi_xml" version)) + (sha256 + (base32 + "0lmd4f401mvravi1i1yq7b2qjjli0yq7dfc4p1nj5nwajp7r6hyj")))) + (build-system ruby-build-system) + (arguments + '(;; No included tests + #:tests? #f)) + (synopsis + "Provides swappable XML backends utilizing LibXML, Nokogiri, Ox, or REXML.") + (description + "Provides swappable XML backends utilizing LibXML, Nokogiri, Ox, or REXML.") + (home-page "https://github.com/sferik/multi_xml") + (license license:expat))) + +(define-public ruby-omniauth-oauth2 + (package + (name "ruby-omniauth-oauth2") + (version "1.3.1") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "omniauth-oauth2" version)) + (sha256 + (base32 + "0mskwlw5ibx9mz7ywqji6mm56ikf7mglbnfc02qhg6ry527jsxdm")))) + (build-system ruby-build-system) + (arguments + '(#:tests? #f)) + (propagated-inputs + `(("ruby-oauth2" ,ruby-oauth2) + ("ruby-omniauth" ,ruby-omniauth))) + (synopsis + "An abstract OAuth2 strategy for OmniAuth.") + (description + "An abstract OAuth2 strategy for OmniAuth.") + (home-page + "https://github.com/omniauth/omniauth-oauth2") + (license license:expat))) + +(define-public ruby-jwt + (package + (name "ruby-jwt") + (version "1.5.6") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "jwt" version)) + (sha256 + (base32 + "124zz1142bi2if7hl5pcrcamwchv4icyr5kaal9m2q6wqbdl6aw4")))) + (build-system ruby-build-system) + (arguments + '(#:tests? #f)) + (synopsis + "A pure ruby implementation of the RFC 7519 OAuth JSON Web Token (JWT) standard.") + (description + "This package provides a pure ruby implementation of the RFC 7519 OAuth JSON Web Token (JWT) standard.") + (home-page "http://github.com/jwt/ruby-jwt") + (license license:expat))) + +(define-public ruby-oauth2 + (package + (name "ruby-oauth2") + (version "1.4.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "oauth2" version)) + (sha256 + (base32 + "094hmmfms8vpm6nwglpl7jmlv85nlfzl0kik4fizgx1rg70a6mr5")))) + (build-system ruby-build-system) + (arguments + '(#:tests? #f)) + (propagated-inputs + `(("ruby-faraday" ,ruby-faraday) + ("ruby-jwt" ,ruby-jwt) + ("ruby-multi-json" ,ruby-multi-json) + ("ruby-multi-xml" ,ruby-multi-xml) + ("ruby-rack" ,ruby-rack))) + (synopsis + "A Ruby wrapper for the OAuth 2.0 protocol built with a similar style to the original OAuth spec.") + (description + "This package provides a Ruby wrapper for the OAuth 2.0 protocol built with a similar style to the original OAuth spec.") + (home-page "http://github.com/intridea/oauth2") + (license license:expat))) + +(define-public ruby-omniauth + (package + (name "ruby-omniauth") + (version "1.8.1") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "omniauth" version)) + (sha256 + (base32 + "1msqr4qq7mfdvl3rg89529isrv595hvjpj2gi0say4b8nwqfggmg")))) + (build-system ruby-build-system) + (arguments + '(#:tests? #f)) + (propagated-inputs + `(("ruby-hashie" ,ruby-hashie) + ("ruby-rack" ,ruby-rack))) + (synopsis + "A generalized Rack framework for multiple-provider authentication.") + (description + "This package provides a generalized Rack framework for multiple-provider authentication.") + (home-page + "https://github.com/omniauth/omniauth") + (license license:expat))) + +(define-public ruby-warden + (package + (name "ruby-warden") + (version "1.2.7") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "warden" version)) + (sha256 + (base32 + "0va966lhpylcwbqb9n151kkihx30agh0a57mwjwdxyanll4s1q12")))) + (build-system ruby-build-system) + (arguments + '(#:tests? #f)) + (propagated-inputs `(("ruby-rack" ,ruby-rack))) + (synopsis + "Rack middleware that provides authentication for rack applications") + (description + "Rack middleware that provides authentication for rack applications") + (home-page "http://github.com/hassox/warden") + (license license:expat))) + +(define-public ruby-warden-oauth2 + (package + (name "ruby-warden-oauth2") + (version "0.0.1") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "warden-oauth2" version)) + (sha256 + (base32 + "1z9154lvzrnnfjbjkmirh4n811nygp6pm2fa6ikr7y1ysa4zv3cz")))) + (build-system ruby-build-system) + (arguments + '(#:tests? #f)) + (propagated-inputs + `(("ruby-warden" ,ruby-warden))) + (synopsis "OAuth 2.0 strategies for Warden") + (description "OAuth 2.0 strategies for Warden") + (home-page + "https://github.com/opperator/warden-oauth2") + (license #f))) + +(define-public ruby-rerun + (package + (name "ruby-rerun") + (version "0.13.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "rerun" version)) + (sha256 + (base32 + "1cskvxk8z8vmfail8na7hj91hs0qnvds9nydj04zi3dbddgnbmvz")))) + (build-system ruby-build-system) + (arguments + '(#:tests? #f)) + (propagated-inputs + `(("ruby-listen" ,ruby-listen))) + (synopsis + "Restarts your app when a file changes. A no-frills, command-line alternative to Guard, Shotgun, Autotest, etc.") + (description + "Restarts your app when a file changes. A no-frills, command-line alternative to Guard, Shotgun, Autotest, etc.") + (home-page "http://github.com/alexch/rerun/") + (license license:expat))) + +(define-public ruby-kgio + (package + (name "ruby-kgio") + (version "2.11.2") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "kgio" version)) + (sha256 + (base32 + "1528pyj1szzzp3pgj05fzjd36qjrxm9yj2x5radc9p1z7vl67y50")))) + (build-system ruby-build-system) + (arguments + '(#:tests? #f)) + (synopsis + "This is a legacy project, do not use it for new projects. Ruby +2.3 and later should make this obsolete. kgio provides +non-blocking I/O methods for Ruby without raising exceptions on +EAGAIN and EINPROGRESS.") + (description + "This is a legacy project, do not use it for new projects. Ruby +2.3 and later should make this obsolete. kgio provides +non-blocking I/O methods for Ruby without raising exceptions on +EAGAIN and EINPROGRESS.") + (home-page "https://bogomips.org/kgio/") + (license #f))) + +(define-public ruby-raindrops + (package + (name "ruby-raindrops") + (version "0.19.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "raindrops" version)) + (sha256 + (base32 + "1qpbd9jif40c53fz2r0l8khfl016y8s8bkx37ibcaafclbl3xygp")))) + (build-system ruby-build-system) + (arguments + '(#:tests? #f)) + (synopsis + "raindrops is a real-time stats toolkit to show statistics for Rack HTTP +servers. It is designed for preforking servers such as unicorn, but +should support any Rack HTTP server on platforms supporting POSIX shared +memory. It may also be used as a generic scoreboard for sharing atomic +counters across multiple processes.") + (description + "raindrops is a real-time stats toolkit to show statistics for Rack HTTP +servers. It is designed for preforking servers such as unicorn, but +should support any Rack HTTP server on platforms supporting POSIX shared +memory. It may also be used as a generic scoreboard for sharing atomic +counters across multiple processes.") + (home-page "https://bogomips.org/raindrops/") + (license #f))) + +(define-public ruby-quantile + (package + (name "ruby-quantile") + (version "0.2.1") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "quantile" version)) + (sha256 + (base32 + "1jlddrmmvx9qkh29a1narz81fi41qdrbiif9fd8bl6pxxa9awbi3")))) + (build-system ruby-build-system) + (synopsis + "Graham Cormode and S. Muthukrishnan's Effective Computation of Biased Quantiles over Data Streams in ICDEâ\x80\x9905") + (description + "Graham Cormode and S. Muthukrishnan's Effective Computation of Biased Quantiles over Data Streams in ICDEâ\x80\x9905") + (home-page + "http://github.com/matttproud/ruby_quantile_estimation") + (license license:asl2.0))) + +(define-public ruby-prometheus-client + (package + (name "ruby-prometheus-client") + (version "0.8.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "prometheus-client" version)) + (sha256 + (base32 + "0ihbmnll7qkkhy5isd7vl3wrznyxm1havhzxhl8729im5qi6si51")))) + (build-system ruby-build-system) + (propagated-inputs + `(("ruby-quantile" ,ruby-quantile))) + (synopsis + "A suite of instrumentation metric primitivesthat can be exposed through a web services interface.") + (description + "This package provides a suite of instrumentation metric primitivesthat can be exposed through a web services interface.") + (home-page + "https://github.com/prometheus/client_ruby") + (license license:asl2.0))) + +(define-public ruby-prometheus-exporter + (package + (name "ruby-prometheus-exporter") + (version "0.3.1") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "prometheus_exporter" version)) + (sha256 + (base32 + "0v8d7km30y0rqspzkmiqajglqyp2hcd3arg94pf7lay382l695s0")))) + (build-system ruby-build-system) + (synopsis + "Prometheus metric collector and exporter for Ruby") + (description + "Prometheus metric collector and exporter for Ruby") + (home-page + "https://github.com/discourse/prometheus_exporter") + (license license:expat))) diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm index ef40431733..501736d898 100644 --- a/gnu/packages/rust.scm +++ b/gnu/packages/rust.scm @@ -191,6 +191,8 @@ safety and thread safety guarantees.") (source (rust-source version "0l8c14qsf42rmkqy92ahij4vf356dbyspxcips1aswpvad81y8qm" #:patches '("rust-1.19-mrustc.patch"))) (outputs '("out" "cargo")) + (properties '((timeout . 72000) ;20 hours + (max-silent-time . 18000))) ;5 hours (for armel) (arguments `(#:imported-modules ,%cargo-build-system-modules ;for `generate-checksums' #:modules ((guix build utils) (ice-9 match) (guix build gnu-build-system)) @@ -427,6 +429,7 @@ safety and thread safety guarantees.") (package (inherit base-rust) (outputs '("out" "doc" "cargo")) + (properties '()) (arguments (substitute-keyword-arguments (package-arguments rust-1.19) ((#:phases phases) diff --git a/gnu/packages/samba.scm b/gnu/packages/samba.scm index 66d0b5a35d..213e416a4d 100644 --- a/gnu/packages/samba.scm +++ b/gnu/packages/samba.scm @@ -150,14 +150,14 @@ anywhere.") (define-public samba (package (name "samba") - (version "4.9.3") + (version "4.9.4") (source (origin (method url-fetch) (uri (string-append "https://download.samba.org/pub/samba/stable/" "samba-" version ".tar.gz")) (sha256 (base32 - "1krm47x08c0vcrq12dxs8mbicma1ck2sl1i0hgkvrmwsgrqdi3yg")))) + "0kqbzywlnh1skg6g78qilyn12qv7wri66h5v9f77igncpkcai63d")))) (build-system gnu-build-system) (arguments `(#:phases @@ -365,7 +365,10 @@ many event types, including timers, signals, and the classic file descriptor eve #t)))) (build-system gnu-build-system) (arguments - '(#:phases + '(;; LMDB is only supported on 64-bit systems, yet the test suite + ;; requires it. + #:tests? (assoc-ref %build-inputs "lmdb") + #:phases (modify-phases %standard-phases (replace 'configure ;; ldb use a custom configuration script that runs waf. @@ -385,7 +388,9 @@ many event types, including timers, signals, and the classic file descriptor eve `(("talloc" ,talloc) ("tdb" ,tdb))) (inputs - `(("lmdb" ,lmdb) + `(,@(if (target-64bit?) + `(("lmdb" ,lmdb)) + '()) ("popt" ,popt) ("tevent" ,tevent))) (synopsis "LDAP-like embedded database") diff --git a/gnu/packages/scheme.scm b/gnu/packages/scheme.scm index 7267afd709..862eedfd18 100644 --- a/gnu/packages/scheme.scm +++ b/gnu/packages/scheme.scm @@ -37,6 +37,7 @@ #:use-module (guix utils) #:use-module (guix build-system gnu) #:use-module (guix build-system trivial) + #:use-module (gnu packages autotools) #:use-module (gnu packages bdw-gc) #:use-module (gnu packages compression) #:use-module (gnu packages libevent) @@ -80,13 +81,12 @@ (define-public mit-scheme (package (name "mit-scheme") - (version "9.2") + (version "10.1.3") (source #f) ; see below (outputs '("out" "doc")) (build-system gnu-build-system) (arguments - `(#:tests? #f ; no "check" target - #:modules ((guix build gnu-build-system) + `(#:modules ((guix build gnu-build-system) (guix build utils) (srfi srfi-1)) #:phases @@ -100,12 +100,23 @@ ;; Delete these dangling symlinks since they break ;; `patch-shebangs'. (for-each delete-file - (append '("src/lib/shim-config.scm") - (find-files "src/lib/lib" "\\.so$") - (find-files "src/lib" "^liarc-") - (find-files "src/compiler" "^make\\."))) + (find-files "src/compiler" "^make\\.")) (chdir "src") #t)) + (add-after 'unpack 'patch-/bin/sh + (lambda _ + (setenv "CONFIG_SHELL" (which "sh")) + (substitute* '("../tests/ffi/autogen.sh" + "../tests/ffi/autobuild.sh" + "../tests/ffi/test-ffi.sh" + "../tests/runtime/test-process.scm" + "runtime/unxprm.scm") + (("/bin/sh") (which "sh")) + (("\\./autogen\\.sh") + (string-append (which "sh") " autogen.sh")) + (("\\./configure") + (string-append (which "sh") " configure"))) + #t)) ;; FIXME: the texlive-union insists on regenerating fonts. It stores ;; them in HOME, so it needs to be writeable. (add-before 'build 'set-HOME @@ -128,9 +139,6 @@ (invoke bin/sh "./configure" (string-append "--prefix=" out) (string-append "SHELL=" bin/sh)) - (substitute* '("Makefile" "make-common") - (("/lib/mit-scheme/doc") - (string-append "/share/doc/" ,name "-" ,version))) #t)))) (add-after 'build 'build-doc (lambda* _ @@ -147,16 +155,20 @@ (with-directory-excursion "../doc" (for-each (lambda (target) (invoke "make" target)) - '("install-config" "install-info-gz" "install-man" + '("install-info-gz" "install-man" "install-html" "install-pdf"))) (mkdir-p new-doc/mit-scheme-dir) (copy-recursively - (string-append old-doc-dir "/" ,name "-" ,version) + (string-append old-doc-dir "/" ,name) new-doc/mit-scheme-dir) (delete-file-recursively old-doc-dir) #t)))))) (native-inputs - `(("texlive" ,(texlive-union (list texlive-tex-texinfo))) + `(;; Autoconf, Automake, and Libtool are necessary for the FFI tests. + ("autoconf" ,autoconf) + ("automake" ,automake) + ("libtool" ,libtool) + ("texlive" ,(texlive-union (list texlive-tex-texinfo))) ("texinfo" ,texinfo) ("m4" ,m4))) (inputs @@ -185,16 +197,18 @@ (match (%current-system) ("x86_64-linux" (base32 - "1skzxxhr0iq96bf0j5m7mvf3i4sppfyfa6gpqn34mwgkw1fx8274")) + "03m7cc035w3avs91j2pcz9f15ssgvgp3rm045d1vbydqrkzfyw8k")) ("i686-linux" (base32 - "1fmlpnhf5a75db93phajh4ysbdgrgl72v45lk3kznriprl0a7jc6")) + "05sjyz90xxfnmi87qv8x0yx0fcallnzl1dciygdafp317pn489is")) (_ - (base32 - "0w5ib5vsidihb4hb6fma3sp596ykr8izagm57axvgd6lqzwicsjg")))))))) + (base32 + "")))))))) ;; Fails to build on MIPS, see <http://bugs.gnu.org/18221>. - (supported-systems '("x86_64-linux" "i686-linux" "armhf-linux")) + ;; Also, the portable C version of MIT/GNU Scheme did not work in time for + ;; release in version 10.1. + (supported-systems '("x86_64-linux" "i686-linux")) (home-page "https://www.gnu.org/software/mit-scheme/") (synopsis "A Scheme implementation with integrated editor and debugger") @@ -210,17 +224,17 @@ features an integrated Emacs-like editor and a large runtime library.") ;; long after the initial publication: <https://bugs.gnu.org/33525>. For ;; transparency, we give this "second 4.3b" release a different version ;; number. - (let ((upstream-version "4.3b")) + (let ((upstream-version "4.3e")) (package (name "bigloo") - (version "4.3b2") + (version "4.3e1") (source (origin (method url-fetch) (uri (string-append "ftp://ftp-sop.inria.fr/indes/fp/Bigloo/bigloo" upstream-version ".tar.gz")) (sha256 (base32 - "02s0wrz5b1p0yqk9x6kax1vwzil7g9cyxfvl3vmy7fzznsza9gs4")) + "12k1kxyn3yilba0508xh8wkrw6279gnghzqi0bs2ayf5d2wkqdj3")) ;; Remove bundled libraries. (modules '((guix build utils))) (snippet @@ -306,14 +320,14 @@ and between Scheme and Java programs.") (define-public hop (package (name "hop") - (version "3.1.0-pre2") + (version "3.2.0-pre1") (source (origin (method url-fetch) (uri (string-append "ftp://ftp-sop.inria.fr/indes/fp/Hop/hop-" version ".tar.gz")) (sha256 (base32 - "0bvq79vxcpgwydwi923cxb5w9isx2x8r3d0xndbdhacmmsw1m811")))) + "0jf418d0s9imv98s6qrpjxr1mdaxr37knh5qyfl5y4a9cc41mlg5")))) (build-system gnu-build-system) (arguments `(#:test-target "test" @@ -324,8 +338,12 @@ and between Scheme and Java programs.") (replace 'configure (lambda* (#:key inputs outputs #:allow-other-keys) (let ((out (assoc-ref outputs "out"))) + (substitute* '("tools/Makefile" + "test/hopjs/TEST.in") + (("/bin/rm") (which "rm"))) (invoke "./configure" (string-append "--prefix=" out) + "--hostcc=gcc" (string-append "--blflags=" ;; user flags completely override useful ;; default flags, so repeat them here. @@ -353,14 +371,14 @@ mashups, office (web agendas, mail clients, ...), etc.") (define-public chicken (package (name "chicken") - (version "4.13.0") + (version "5.0.0") (source (origin (method url-fetch) (uri (string-append "https://code.call-cc.org/releases/" version "/chicken-" version ".tar.gz")) (sha256 (base32 - "0hvckhi5gfny3mlva6d7y9pmx7cbwvq0r7mk11k3sdiik9hlkmdd")))) + "15b5yrzfa8aimzba79x7v6y282f898rxqxfxrr446sjx9jwlpfd8")))) (build-system gnu-build-system) (arguments `(#:modules ((guix build gnu-build-system) @@ -537,7 +555,7 @@ of libraries.") (define-public gambit-c (package (name "gambit-c") - (version "4.9.0") + (version "4.9.1") (source (origin (method url-fetch) @@ -547,14 +565,14 @@ of libraries.") (string-map (lambda (c) (if (char=? c #\.) #\_ c)) version) ".tgz")) (sha256 - (base32 "19862w9ij0g5xrkskl4g89xbs17gp9cc6cfcdca6dlfkb3lk6xhp")))) + (base32 "14x9xa0yh7187alzw2m937jnh4csj0dyywi3va8bhi7aaw4p5qai")))) (build-system gnu-build-system) (arguments '(#:configure-flags ;; According to the ./configure script, this makes the build slower and ;; use >= 1 GB memory, but makes Gambit much faster. '("--enable-single-host"))) - (home-page "http://gambitscheme.org") + (home-page "http://dynamo.iro.umontreal.ca/wiki/index.php/Main_Page") (synopsis "Efficient Scheme interpreter and compiler") (description "Gambit consists of two main programs: gsi, the Gambit Scheme diff --git a/gnu/packages/security-token.scm b/gnu/packages/security-token.scm index 400c053048..fb2526c04a 100644 --- a/gnu/packages/security-token.scm +++ b/gnu/packages/security-token.scm @@ -51,6 +51,7 @@ #:use-module (gnu packages tex) #:use-module (gnu packages perl) #:use-module (gnu packages pkg-config) + #:use-module (gnu packages web) #:use-module (gnu packages xml)) (define-public ccid @@ -307,3 +308,36 @@ and other operations. It includes a library and a command-line tool.") ;; license for that one file. Please see it for details. The vast ;; majority of files are licensed under bsd-2. (license license:bsd-2))) + +(define-public yubikey-personalization + (package + (name "yubikey-personalization") + (version "1.19.0") + (source (origin + (method url-fetch) + (uri (string-append + "https://developers.yubico.com/" name + "/Releases/ykpers-" version ".tar.gz")) + (sha256 + (base32 + "104lc0nnqdr365fa7c4vrq67rxp1dp8idndsh9jlhnj9dnhszj1b")))) + (build-system gnu-build-system) + (arguments + '(#:configure-flags (list (string-append "--with-udevrulesdir=" + (assoc-ref %outputs "out") + "/lib/udev/rules.d")))) + (inputs + `(("json-c" ,json-c) + ("libusb" ,libusb) + ;; The library "libyubikey" is also known as "yubico-c". + ("libyubikey" ,libyubikey))) + (native-inputs + `(("pkg-config" ,pkg-config) + ("eudev" ,eudev))) + (home-page "https://developers.yubico.com/yubikey-personalization/") + (synopsis "Library and tools to personalize YubiKeys") + (description + "The YubiKey Personalization package contains a C library and command +line tools for personalizing YubiKeys. You can use these to set an AES key, +retrieve a YubiKey's serial number, and so forth.") + (license license:bsd-2))) diff --git a/gnu/packages/serialization.scm b/gnu/packages/serialization.scm index 2df0ce1364..b85c507d64 100644 --- a/gnu/packages/serialization.scm +++ b/gnu/packages/serialization.scm @@ -3,7 +3,7 @@ ;;; Copyright © 2016 Lukas Gradl <lgradl@openmailbox.org> ;;; Copyright © 2016 David Craven <david@craven.ch> ;;; Copyright © 2016 Marius Bakke <mbakke@fastmail.com> -;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il> +;;; Copyright © 2016, 2018 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2017 Corentin Bocquillon <corentin@nybble.fr> ;;; Copyright © 2017 Gregor Giesen <giesen@zaehlwerk.net> ;;; Copyright © 2017 Frederick M. Muriithi <fredmanglis@gmail.com> @@ -271,7 +271,23 @@ that implements both the msgpack and msgpack-rpc specifications.") "01gxn7kc8pzyh4aadjxxzq8cignmbwmm9rfrsmgqfg9w2q75dn74")))) (build-system cmake-build-system) (arguments - '(#:configure-flags '("-DBUILD_SHARED_LIBS=ON"))) + '(#:configure-flags '("-DBUILD_SHARED_LIBS=ON") + #:phases + (modify-phases %standard-phases + (add-after 'install 'dont-install-gtest-libraries + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (with-directory-excursion + (string-append out "/include") + (delete-file-recursively "gtest") + (delete-file-recursively "gmock")) + (with-directory-excursion + (string-append out "/lib") + (for-each (lambda (file) + (delete-file file)) + '("libgmock.so" "libgmock_main.so" + "libgtest.so" "libgtest_main.so")))) + #t))))) (native-inputs `(("python" ,python))) (home-page "https://github.com/jbeder/yaml-cpp") @@ -306,7 +322,7 @@ it a convenient format to store user input files.") (define-public capnproto (package (name "capnproto") - (version "0.6.1") + (version "0.7.0") (source (origin (method url-fetch) (uri (string-append @@ -314,7 +330,7 @@ it a convenient format to store user input files.") version ".tar.gz")) (sha256 (base32 - "010s9yhq4531wvdfrdf2477zswhck6cjfby79w73rff3v06090l0")))) + "0hfdnhlbskagzgvby8wy6lrxj53zfzpfqimbhga68c0ji2yw1969")))) (build-system gnu-build-system) (arguments `(#:phases @@ -324,6 +340,14 @@ it a convenient format to store user input files.") ;; Workaround for test that tries to resolve port name from ;; /etc/services, which is not present in build environment. (substitute* "src/kj/async-io-test.c++" ((":http") ":80")) + #t)) + (add-before 'check 'use-tmp-for-tempory-files + (lambda _ + ;; Use /tmp for tempory files, as the default /var/tmp directory + ;; doesn't exist. + (substitute* "src/kj/filesystem-disk-test.c++" + (("VAR\\_TMP \"/var/tmp\"") + "VAR_TMP \"/tmp\"")) #t))))) (home-page "https://capnproto.org") (synopsis "Capability-based RPC and serialization system") @@ -436,6 +460,7 @@ to generate and parse. The two primary functions are @code{cbor.loads} and (method url-fetch) (uri (string-append "https://github.com/google/flatbuffers/archive/v" version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 "0z4swldxs0s31hnkqdhsbfmc8vx3p7zsvmqaw4l31r2iikdy651p")))) diff --git a/gnu/packages/storage.scm b/gnu/packages/storage.scm index 5051ccd986..4eae37815e 100644 --- a/gnu/packages/storage.scm +++ b/gnu/packages/storage.scm @@ -321,7 +321,7 @@ ("python2-testtools" ,python2-testtools) ("python2-tox" ,python2-tox))) (inputs - `(("boost" ,boost) + `(("boost" ,boost-cxx14) ("curl" ,curl) ("cryptsetup" ,cryptsetup) ("expat" ,expat) diff --git a/gnu/packages/syncthing.scm b/gnu/packages/syncthing.scm index c29c88a588..5222354e74 100644 --- a/gnu/packages/syncthing.scm +++ b/gnu/packages/syncthing.scm @@ -30,7 +30,7 @@ (define-public syncthing (package (name "syncthing") - (version "0.14.52") + (version "0.14.54") (source (origin (method url-fetch) (uri (string-append "https://github.com/syncthing/syncthing" @@ -38,12 +38,19 @@ "/syncthing-source-v" version ".tar.gz")) (sha256 (base32 - "1hhn72l74vb9l32i1a54ry2l85ji78cq6isd20lxxdk0bjqc4m29")) - (modules '((guix build utils))) - ;; Delete bundled ("vendored") free software source code. - (snippet '(begin - (delete-file-recursively "vendor") - #t)))) + "1pfjckwsrhy8lbmy42fawgh1gcfmjbh3dfxx05w5yjxnpd1g2z6r")) + ;; Since the update to Go 1.11, Go programs have been keeping + ;; spurious references to all their dependencies: + ;; <https://bugs.gnu.org/33620>. + ;; For Syncthing, this increases the size of the 'out' closure + ;; from 87.6 MiB to 253.5 MiB. So, we use the bundled + ;; dependencies until the bug is resolved. +; (modules '((guix build utils))) +; ;; Delete bundled ("vendored") free software source code. +; (snippet '(begin +; (delete-file-recursively "vendor") +; #t)) + )) (build-system go-build-system) ;; The primary Syncthing executable goes to "out", while the auxiliary ;; server programs and utility tools go to "utils". This reduces the size @@ -63,7 +70,7 @@ #t)) (replace 'build - (lambda* (#:key inputs #:allow-other-keys) + (lambda _ (with-directory-excursion "src/github.com/syncthing/syncthing" (invoke "go" "run" "build.go" "-no-upgrade")))) @@ -107,48 +114,6 @@ (delete-file (string-append out man "/man1/strelaysrv.1")) (delete-file (string-append utils man "/man1/syncthing.1")) #t)))))) - ;; When updating Syncthing, check 'vendor/manifest' in the source - ;; distribution to ensure we are using the correct versions of these - ;; dependencies. - (inputs - `(("go-github-com-audriusbutkevicius-cli" - ,go-github-com-audriusbutkevicius-cli) - ("go-github-com-audriusbutkevicius-go-nat-pmp" - ,go-github-com-audriusbutkevicius-go-nat-pmp) - ("go-github-com-audriusbutkevicius-pfilter" - ,go-github-com-audriusbutkevicius-pfilter) - ("go-github-com-bkaradzic-go-lz4" ,go-github-com-bkaradzic-go-lz4) - ("go-github-com-calmh-du" ,go-github-com-calmh-du) - ("go-github-com-calmh-xdr" ,go-github-com-calmh-xdr) - ("go-github-com-prometheus-union" ,(go-github-com-prometheus-union)) - ("go-github-com-chmduquesne-rollinghash-adler32" - ,go-github-com-chmduquesne-rollinghash-adler32) - ("go-github-com-gobwas-glob" ,go-github-com-gobwas-glob) - ("go-github-com-gogo-protobuf-union" - ,(go-github-com-gogo-protobuf-union)) - ("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-kballard-go-shellquote" - ,go-github-com-kballard-go-shellquote) - ("go-github-com-lib-pq" ,go-github-com-lib-pq) - ("go-github-com-minio-sha256-simd" ,go-github-com-minio-sha256-simd) - ("go-github-com-oschwald-geoip2-golang" - ,go-github-com-oschwald-geoip2-golang) - ("go-github-com-pkg-errors" ,go-github-com-pkg-errors) - ("go-github-com-rcrowley-go-metrics" ,go-github-com-rcrowley-go-metrics) - ("go-github-com-sasha-s-go-deadlock" ,go-github-com-sasha-s-go-deadlock) - ("go-github-com-syncthing-notify" ,go-github-com-syncthing-notify) - ("go-github-com-syndtr-goleveldb" ,go-github-com-syndtr-goleveldb) - ("go-github-com-thejerf-suture" ,go-github-com-thejerf-suture) - ("go-github-com-vitrun-qart" ,(go-github-com-vitrun-qart-union)) - ("go-golang-org-x-crypto" ,(go-golang-org-x-crypto-union)) - ("go-golang-org-x-net-union" ,(go-golang-org-x-net-union)) - ("go-golang-org-x-text" ,(go-golang-org-x-text-union)) - ("go-golang-org-x-time-rate" ,go-golang-org-x-time-rate) - ("go-gopkg.in-ldap.v2" ,go-gopkg.in-ldap.v2) - ;; For tests - ("go-github-com-d4l3k-messagediff" ,go-github-com-d4l3k-messagediff))) (synopsis "Decentralized continuous file system synchronization") (description "Syncthing is a peer-to-peer file synchronization tool that supports a wide variety of computing platforms. It uses the Block Exchange @@ -941,8 +906,8 @@ using sh's word-splitting rules.") (license expat)))) (define-public go-github-com-syncthing-notify - (let ((commit "b76b45868a77e7800dd06cce61101af9c4274bcc") - (revision "2")) + (let ((commit "116c45bb5ad48777321e4984d1320d56889b6097") + (revision "3")) (package (name "go-github-com-syncthing-notify") (version (git-version "0.0.0" revision commit)) @@ -954,7 +919,7 @@ using sh's word-splitting rules.") (file-name (git-file-name name version)) (sha256 (base32 - "1xxkzaxygxxr51i2kdxsdaqb5i95hqpkw4kcr75wmsp914slw2q9")))) + "14bh95pkhwmnc65bnv08p3y4flj1j7f6xxr2cgmlwrphnlp9yhl9")))) (build-system go-build-system) (arguments '(#:import-path "github.com/syncthing/notify")) @@ -1188,11 +1153,11 @@ server tools for Prometheus metrics.") (license asl2.0)))) (define-public go-github-com-client-golang-prometheus - (let ((commit "180b8fdc22b4ea7750bcb43c925277654a1ea2f3") + (let ((commit "7e9098b20fb8e103a7a5691878272d7e3d703663") (revision "0")) (package (name "go-github-com-prometheus-client-golang-prometheus") - (version (git-version "0.0.0" revision commit)) + (version (git-version "0.9.1" revision commit)) (source (origin (method git-fetch) (uri (git-reference @@ -1201,11 +1166,12 @@ server tools for Prometheus metrics.") (file-name (git-file-name name version)) (sha256 (base32 - "1kkfx1j9ka18ydsmdi2cdy3hs39c22b39mbc4laykmj2x93lmbdp")))) + "09q8hlvgyn58hn8fmmj535hrwhqc1215czwzf7fhaqpa9zamj4w1")))) (build-system go-build-system) (arguments '(#:import-path "github.com/prometheus/client_golang/prometheus" - #:unpack-path "github.com/prometheus/client_golang")) + #:unpack-path "github.com/prometheus/client_golang" + #:tests? #f)) ; 'TestHandler' test fails in this non-critical dependency (propagated-inputs `(("go-github-com-beorn7-perks-quantile" ,go-github-com-beorn7-perks-quantile) diff --git a/gnu/packages/terraform.scm b/gnu/packages/terraform.scm index f14b152fdb..d96c5b0dfc 100644 --- a/gnu/packages/terraform.scm +++ b/gnu/packages/terraform.scm @@ -22,7 +22,48 @@ #:use-module (guix packages) #:use-module (guix download) #:use-module (guix git-download) - #:use-module (guix build-system go)) + #:use-module (guix build-system go) + #:use-module (gnu packages golang) + #:use-module (gnu packages cdrom) + #:use-module (gnu packages pkg-config) + #:use-module (gnu packages virtualization)) + +(define-public terraform + (package + (name "terraform") + (version "0.11.3") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/hashicorp/terraform") + (commit (string-append "v" version)))) + (sha256 + (base32 + "0637x7jcm62pdnivmh4rggly6dmlvdh3jpsd1z4vba15gbm203nz")))) + (build-system go-build-system) + (outputs '("out" "lib")) + (arguments + '(#:import-path "github.com/hashicorp/terraform" + #:phases + (modify-phases %standard-phases + ;; I'm not sure what purpose they serve, but they are readonly, so + ;; they break the reset-gzip-timestamps phase. + (add-after 'install 'delete-test-fixtures + (lambda* (#:key outputs #:allow-other-keys) + (delete-file-recursively + (string-append + (assoc-ref outputs "lib") + "/src/github.com/hashicorp/terraform/config/module/test-fixtures"))))))) + (synopsis "Tool for building and changing computing infrastructure") + (description + "Terraform uses descriptions of infrastructure written in @acronym{HCL, +Hashicorp Configuration Language} which describe graphs of resources, +including information about dependencies. From this, Terraform can plan and +apply changes to the described resources. + +Terraform uses plugins that provide intergrations to different providers.") + (home-page "https://www.terraform.io/") + (license license:mpl2.0))) (define-public terraform-docs (package @@ -47,3 +88,120 @@ the inputs and outputs for modules of the Terraform infrastructure management tool. These can be shown, or written to a file in JSON or Markdown formats.") (home-page "https://github.com/segmentio/terraform-docs") (license license:expat))) + +(define-public terraform-provider-libvirt + (package + (name "terraform-provider-libvirt") + (version "0.3") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/dmacvicar/terraform-provider-libvirt") + (commit (string-append "v" version)))) + (sha256 + (base32 + "004gxy55p5cf39f2zpah0i2zhvs4x6ixnxy8z9v7314604ggpkna")))) + (build-system go-build-system) + (outputs '("out" "lib")) + (native-inputs + `(("pkg-config" ,pkg-config))) + (inputs + `(("libvirt" ,libvirt) + ("cdrtools" ,cdrtools))) + (arguments + '(#:import-path "github.com/dmacvicar/terraform-provider-libvirt" + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'patch-mkisofs + (lambda* (#:key inputs #:allow-other-keys) + (substitute* + "src/github.com/dmacvicar/terraform-provider-libvirt/libvirt/cloudinit_def.go" + (("mkisofs") + (string-append (assoc-ref inputs "cdrtools") + "/bin/mkisofs"))))) + ;; This should be redundant once the vendor directory is removed from + ;; this package + (add-before 'reset-gzip-timestamps 'remove-readonly-gzip-files + (lambda* (#:key outputs #:allow-other-keys) + (for-each delete-file + (find-files + (assoc-ref outputs "lib") + ".*\\.t?gz"))))))) + (synopsis "") + (description "") + (home-page "") + (license ""))) + +(define-public terraform-provider-template + (package + (name "terraform-provider-template") + (version "1.0.0") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/terraform-providers/terraform-provider-template") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0jl6bp6gwg96sdk5j6s13vv1j9gxjpy2yva3barmzv9138i665mz")))) + (build-system go-build-system) + (outputs '("out" "lib")) + (arguments + '(#:import-path "github.com/terraform-providers/terraform-provider-template")) + (synopsis "") + (description "") + (home-page "") + (license ""))) + +(define-public terraform-provider-aws + (package + (name "terraform-provider-aws") + (version "1.23.0") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/terraform-providers/terraform-provider-aws") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "156277pbllmglpppnrp6qskiq744mxjjmsw39d0d3qpqs5af4x1y")))) + (build-system go-build-system) + (outputs '("out" "lib")) + (arguments + '(#:import-path "github.com/terraform-providers/terraform-provider-aws" + #:phases + (modify-phases %standard-phases + (add-before 'reset-gzip-timestamps 'remove-readonly-gzip-files + (lambda* (#:key outputs #:allow-other-keys) + (for-each delete-file + (find-files + (assoc-ref outputs "lib") + ".*\\.t?gz"))))))) + (synopsis "") + (description "") + (home-page "") + (license ""))) + +(define-public terraform-provider-local + (package + (name "terraform-provider-local") + (version "1.1.0") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/terraform-providers/terraform-provider-local") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1qxfyyg8k43rw0gny4dadamc2a9hk3x6ybdivifjc17m7il0janc")))) + (build-system go-build-system) + (outputs '("out" "lib")) + (arguments + '(#:import-path "github.com/terraform-providers/terraform-provider-local")) + (synopsis "") + (description "") + (home-page "") + (license ""))) diff --git a/gnu/packages/tex.scm b/gnu/packages/tex.scm index 916aa54d58..765f6aa849 100644 --- a/gnu/packages/tex.scm +++ b/gnu/packages/tex.scm @@ -265,7 +265,7 @@ This package contains the binaries.") (let* ((root (string-append (assoc-ref %outputs "out") "/share/texmf-dist")) (dvips (string-append root "/dvips")) - (maps (string-append root "/fonts/map/dvips/tetex")) + (maps (string-append root "/fonts/map/dvips")) (encs (string-append root "/fonts/enc/dvips/base"))) (mkdir-p dvips) (copy-recursively (assoc-ref %build-inputs "source") dvips) @@ -281,12 +281,12 @@ This package contains the binaries.") (uri (svn-reference (url (string-append "svn://www.tug.org/texlive/tags/" %texlive-tag "/Master/texmf-dist/" - "/fonts/map/dvips/tetex")) + "/fonts/map/dvips")) (revision %texlive-revision))) (file-name (string-append "dvips-font-maps-" version "-checkout")) (sha256 (base32 - "100208pg7q6lj7swiq9p9287nn6b64bl62bnlaxpjni9y2kdrqy5")))) + "09hply3nmy24ilnc6cl8q70jcqxvq6bwri572kms008ini3h9vqh")))) ("dvips-base-enc" ,(origin (method svn-fetch) @@ -609,20 +609,36 @@ documents.") (find-files "." "cm(.*[0-9]+.*|inch)\\.mf$")) #t)) (replace 'install - (lambda* (#:key outputs #:allow-other-keys) + (lambda* (#:key inputs outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) (tfm (string-append out "/share/texmf-dist/fonts/tfm/public/cm")) - (mf (string-append - out "/share/texmf-dist/fonts/source/public/cm"))) + (mf (string-append + out "/share/texmf-dist/fonts/source/public/cm")) + (type1 (string-append + out "/share/texmf-dist/fonts/type1/public/amsfonts/cm"))) (for-each (cut install-file <> tfm) (find-files "build" "\\.*")) (for-each (cut install-file <> mf) (find-files "." "\\.mf")) + (mkdir-p type1) + (copy-recursively (assoc-ref inputs "cm-type1") type1) #t)))))) (native-inputs `(("texlive-bin" ,texlive-bin) - ("texlive-metafont-base" ,texlive-metafont-base))) + ("texlive-metafont-base" ,texlive-metafont-base) + ("cm-type1" + ,(origin + (method svn-fetch) + (uri (svn-reference + (url (string-append "svn://www.tug.org/texlive/tags/" + %texlive-tag "/Master/texmf-dist/" + "/fonts/type1/public/amsfonts/cm")) + (revision %texlive-revision))) + (file-name (string-append name "-type1-" version "-checkout")) + (sha256 + (base32 + "12jyl9jp3hidifa4l5pmi47p71d5mb5kj5rknxkygilix8yz2iy6")))))) (home-page "https://www.ctan.org/pkg/cm") (synopsis "Computer Modern fonts for TeX") (description "This package provides the Computer Modern fonts by Donald @@ -3995,10 +4011,27 @@ e-TeX.") (begin (use-modules (guix build utils)) (let ((target (string-append (assoc-ref %outputs "out") - "/share/texmf-dist/tex/generic/pdftex"))) + "/share/texmf-dist/tex/generic/pdftex")) + (target-map (string-append (assoc-ref %outputs "out") + "/share/texmf-dist/fonts/map/pdftex"))) (mkdir-p target) (copy-recursively (assoc-ref %build-inputs "source") target) + (mkdir-p target-map) + (copy-recursively (assoc-ref %build-inputs "pdftex-map") target-map) #t)))) + (native-inputs + `(("pdftex-map" + ,(origin + (method svn-fetch) + (uri (svn-reference + (url (string-append "svn://www.tug.org/texlive/tags/" + %texlive-tag "/Master/texmf-dist/" + "/fonts/map/pdftex")) + (revision %texlive-revision))) + (file-name (string-append name "-map-" version "-checkout")) + (sha256 + (base32 + "197z9kx3bpnz58f5xrn5szyvmb3fxqq12y5sc4dw4jnm3xll8ji2")))))) (home-page "https://www.ctan.org/pkg/pdftex") (synopsis "TeX extension for direct creation of PDF") (description @@ -4940,3 +4973,255 @@ used inside tables and moving arguments such as footnotes and section titles.") ;; No version of the GPL is specified. (license license:gpl3+))) + +(define-public texlive-generic-xypic + (package + (name "texlive-generic-xypic") + (version (number->string %texlive-revision)) + (source + (origin + (method svn-fetch) + (uri (svn-reference + (url (string-append "svn://www.tug.org/texlive/tags/" + %texlive-tag "/Master/texmf-dist/" + "/tex/generic/xypic")) + (revision %texlive-revision))) + (file-name (string-append name "-" version "-checkout")) + (sha256 + (base32 + "1g5cyxwdfznq4lk9zl6fkjkapmhmwd2cm4m5aibxj20qgwnaggfz")))) + (build-system trivial-build-system) + (arguments + `(#:modules ((guix build utils)) + #:builder + (begin + (use-modules (guix build utils)) + (let ((target (string-append (assoc-ref %outputs "out") + "/share/texmf-dist/tex/generic/xypic"))) + (mkdir-p target) + (copy-recursively (assoc-ref %build-inputs "source") target) + #t)))) + (home-page "https://www.ctan.org/pkg/xypic") + (synopsis "Flexible diagramming macros for TeX") + (description + "A package for typesetting a variety of graphs and diagrams with TeX. +Xy-pic works with most formats (including LaTeX, AMS-LaTeX, AMS-TeX, and plain +TeX).") + (license license:gpl3+))) + +(define-public texlive-fonts-xypic + (package + (name "texlive-fonts-xypic") + (version (number->string %texlive-revision)) + (source (origin + (method svn-fetch) + (uri (svn-reference + (url (string-append "svn://www.tug.org/texlive/tags/" + %texlive-tag "/Master/texmf-dist/" + "/fonts/source/public/xypic")) + (revision %texlive-revision))) + (file-name (string-append name "-" version "-checkout")) + (sha256 + (base32 + "0p20v1257kwsqnrk98cdhhiz2viv8l3ly4xay4by0an3j37m9xs3")))) + (build-system trivial-build-system) + (arguments + `(#:modules ((guix build utils) + (ice-9 match)) + #:builder + (begin + (use-modules (guix build utils) + (ice-9 match)) + (let ((root (string-append (assoc-ref %outputs "out") + "/share/texmf-dist/")) + (pkgs '(("source" . "fonts/source/public/xypic") + ("xypic-afm" . "fonts/afm/public/xypic") + ("xypic-type1" . "fonts/type1/public/xypic") + ("xypic-enc" . "fonts/enc/dvips/xypic")))) + (for-each (match-lambda + ((pkg . dir) + (let ((target (string-append root dir))) + (mkdir-p target) + (copy-recursively (assoc-ref %build-inputs pkg) + target)))) + pkgs) + #t)))) + (native-inputs + `(("xypic-afm" + ,(origin + (method svn-fetch) + (uri (svn-reference + (url (string-append "svn://www.tug.org/texlive/tags/" + %texlive-tag "/Master/texmf-dist/" + "/fonts/afm/public/xypic")) + (revision %texlive-revision))) + (file-name (string-append name "-afm-" version "-checkout")) + (sha256 + (base32 + "149xdijxp8lw3s0qv2aqxxxyyn748z57dpr596rjvkqdffpnsddh")))) + ("xypic-type1" + ,(origin + (method svn-fetch) + (uri (svn-reference + (url (string-append "svn://www.tug.org/texlive/tags/" + %texlive-tag "/Master/texmf-dist/" + "/fonts/type1/public/xypic")) + (revision %texlive-revision))) + (file-name (string-append name "-type1-" version "-checkout")) + (sha256 + (base32 + "1bln89wib7g3hcv2jny3qi6jb73k9d2vbgx3wnnjwp3ryg0846if")))) + ("xypic-enc" + ,(origin + (method svn-fetch) + (uri (svn-reference + (url (string-append "svn://www.tug.org/texlive/tags/" + %texlive-tag "/Master/texmf-dist/" + "/fonts/enc/dvips/xypic")) + (revision %texlive-revision))) + (file-name (string-append name "-enc-" version "-checkout")) + (sha256 + (base32 + "0yi8vms3203l3p5slnhrrlzzp0f0jw77fkcvcaicrz2vmw9z99x7")))))) + (home-page "https://www.ctan.org/pkg/xypic") + (synopsis "Fonts for XY-pic") + (description "This package provides the XY-pic fonts.") + (license license:gpl3+))) + +(define-public texlive-bibtex + (package + (name "texlive-bibtex") + (version (number->string %texlive-revision)) + (source + (origin + (method svn-fetch) + (uri (svn-reference + (url (string-append "svn://www.tug.org/texlive/tags/" + %texlive-tag "/Master/texmf-dist/" + "/bibtex")) + (revision %texlive-revision))) + (file-name (string-append name "-" version "-checkout")) + (sha256 + (base32 + "1gk9q22fcb2fa1ql6cf9yw505x6a6axdzzfxbsya7nkrph860af8")))) + (build-system trivial-build-system) + (arguments + `(#:modules ((guix build utils)) + #:builder + (begin + (use-modules (guix build utils)) + (let ((target (string-append (assoc-ref %outputs "out") + "/share/texmf-dist/bibtex"))) + (mkdir-p target) + (copy-recursively (assoc-ref %build-inputs "source") target) + #t)))) + (home-page "https://www.ctan.org/pkg/bibtex") + (synopsis "Process bibliographies for LaTeX") + (description + "BibTeX allows the user to store his citation data in generic form, while +printing citations in a document in the form specified by a BibTeX style, to +be specified in the document itself (one often needs a LaTeX citation-style +package, such as @command{natbib} as well).") + (license license:knuth))) + +(define-public texlive-fonts-charter + (package + (name "texlive-fonts-charter") + (version (number->string %texlive-revision)) + (source (origin + (method svn-fetch) + (uri (svn-reference + (url (string-append "svn://www.tug.org/texlive/tags/" + %texlive-tag "/Master/texmf-dist/" + "/fonts/type1/bitstrea/charter")) + (revision %texlive-revision))) + (file-name (string-append name "-" version "-checkout")) + (sha256 + (base32 + "0yvib45xxff3jm5270zij4q888pivbc18cqs7lz4pqfhn1am4wnv")))) + (build-system trivial-build-system) + (arguments + `(#:modules ((guix build utils) + (ice-9 match)) + #:builder + (begin + (use-modules (guix build utils) + (ice-9 match)) + (let ((root (string-append (assoc-ref %outputs "out") + "/share/texmf-dist/")) + (pkgs '(("source" . "fonts/type1/bitstrea/charter") + ("charter-afm" . "fonts/afm/bitstrea/charter") + ("charter-tfm" . "fonts/tfm/bitstrea/charter")))) + (for-each (match-lambda + ((pkg . dir) + (let ((target (string-append root dir))) + (mkdir-p target) + (copy-recursively (assoc-ref %build-inputs pkg) + target)))) + pkgs) + #t)))) + (native-inputs + `(("charter-afm" + ,(origin + (method svn-fetch) + (uri (svn-reference + (url (string-append "svn://www.tug.org/texlive/tags/" + %texlive-tag "/Master/texmf-dist/" + "/fonts/afm/bitstrea/charter")) + (revision %texlive-revision))) + (file-name (string-append name "-afm-" version "-checkout")) + (sha256 + (base32 + "02nbkqrlr3vypnzslmr7dxg1353mmc0rl4ynx0s6qbvf313fq76a")))) + ("charter-tfm" + ,(origin + (method svn-fetch) + (uri (svn-reference + (url (string-append "svn://www.tug.org/texlive/tags/" + %texlive-tag "/Master/texmf-dist/" + "/fonts/tfm/bitstrea/charter")) + (revision %texlive-revision))) + (file-name (string-append name "-tfm-" version "-checkout")) + (sha256 + (base32 + "0j7ci9vprivbhac70aq0z7m23hqcpx1g0i3wp1k0h8ilhimj80xk")))))) + (home-page "https://www.ctan.org/pkg/charter") + (synopsis "Charter fonts for TeX") + (description "A commercial text font donated for the common good. Support +for use with LaTeX is available in @code{freenfss}, part of +@command{psnfss}. ") + (license (license:non-copyleft (string-append "http://mirrors.ctan.org/" + "fonts/charter/readme.charter"))))) + +(define-public texlive-context-base + (package + (name "texlive-context-base") + (version (number->string %texlive-revision)) + (source (origin + (method svn-fetch) + (uri (svn-reference + (url (string-append "svn://www.tug.org/texlive/tags/" + %texlive-tag "/Master/texmf-dist/" + "/tex/context/base")) + (revision %texlive-revision))) + (file-name (string-append name "-" version "-checkout")) + (sha256 + (base32 + "0zwl0cg6pka13i26dpqh137391f3j9sk69cpvwrm4ivsa0rqnw6g")))) + (build-system trivial-build-system) + (arguments + `(#:modules ((guix build utils)) + #:builder + (begin + (use-modules (guix build utils)) + (let ((target (string-append (assoc-ref %outputs "out") + "/share/texmf-dist/tex/context/case"))) + (mkdir-p target) + (copy-recursively (assoc-ref %build-inputs "source") target) + #t)))) + (home-page "https://www.ctan.org/pkg/context") + (synopsis "Full featured, parameter driven macro package for TeX") + (description "A full featured, parameter driven macro package, which fully +supports advanced interactive documents. See the ConTeXt garden for a wealth +of support information.") + (license license:gpl2+))) diff --git a/gnu/packages/textutils.scm b/gnu/packages/textutils.scm index cda79231f1..91bc64bc1f 100644 --- a/gnu/packages/textutils.scm +++ b/gnu/packages/textutils.scm @@ -52,7 +52,8 @@ #:use-module (gnu packages pkg-config) #:use-module (gnu packages python) #:use-module (gnu packages readline) - #:use-module (gnu packages slang)) + #:use-module (gnu packages slang) + #:use-module (gnu packages web)) (define-public dos2unix (package @@ -758,15 +759,33 @@ indentation. (version "1.0.5") (source (origin - (method url-fetch) - (uri (string-append "https://github.com/BYVoid/OpenCC" - "/archive/ver." version ".tar.gz")) - (file-name (string-append name "-" version ".tar.gz")) + (method git-fetch) + (uri (git-reference + (url "https://github.com/BYVoid/OpenCC") + (commit (string-append "ver." version)))) + (file-name (git-file-name name version)) (sha256 - (base32 "01870gbkf711msirf3206k0ajaabypjhnx3fny5wikw0ladn9q8w")))) + (base32 + "1pv5md225qwhbn8ql932zdg6gh1qlx3paiajaks8gfsa07yzvhr4")) + (modules '((guix build utils))) + (snippet + '(begin + ;; TODO: Unbundle tclap, darts-clone, gtest + (delete-file-recursively "deps/rapidjson-0.11") #t)))) (build-system cmake-build-system) + (arguments + '(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'patch-3rd-party-references + (lambda* (#:key inputs #:allow-other-keys) + (let ((rapidjson (assoc-ref inputs "rapidjson"))) + (substitute* "src/CMakeLists.txt" + (("../deps/rapidjson-0.11") + (string-append rapidjson "/include/rapidjson"))) + #t)))))) (native-inputs - `(("python" ,python-wrapper))) + `(("python" ,python-wrapper) + ("rapidjson" ,rapidjson))) (home-page "https://github.com/BYVoid/OpenCC") (synopsis "Convert between Traditional Chinese and Simplified Chinese") (description "Open Chinese Convert (OpenCC) converts between Traditional diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm index d9971441c6..09bc4b4117 100644 --- a/gnu/packages/tls.scm +++ b/gnu/packages/tls.scm @@ -394,7 +394,7 @@ required structures.") (package (inherit openssl) (name "openssl") - (version "1.1.1") + (version "1.1.1a") (source (origin (method url-fetch) (uri (list (string-append "https://www.openssl.org/source/openssl-" @@ -407,16 +407,16 @@ required structures.") (patches (search-patches "openssl-1.1-c-rehash-in.patch")) (sha256 (base32 - "0gbab2fjgms1kx5xjvqx8bxhr98k4r8l2fa8vw7kvh491xd8fdi8")))) + "0hcz7znzznbibpy3iyyhvlqrq44y88plxwdj32wjzgbwic7i687w")))) (outputs '("out" - "doc" ; 6.7 MiB of man3 pages and full HTML documentation + "doc" ; 6.8 MiB of man3 pages and full HTML documentation "static")) ; 6.4 MiB of .a files (arguments (substitute-keyword-arguments (package-arguments openssl) ((#:phases phases) `(modify-phases ,phases (delete 'patch-tests) ; These two phases are not needed by - (delete 'patch-Makefile.org) ; OpenSSL 1.1.0. + (delete 'patch-Makefile.org) ; OpenSSL 1.1. ;; Override configure phase since -rpath is now a configure option. (replace 'configure @@ -522,13 +522,13 @@ netcat implementation that supports TLS.") (package (name "python-acme") ;; Remember to update the hash of certbot when updating python-acme. - (version "0.28.0") + (version "0.29.1") (source (origin (method url-fetch) (uri (pypi-uri "acme" version)) (sha256 (base32 - "11dvcbdifn5d02p4k5li8r6r39bl3p5ap9p3zjwvasm24hf2yz5z")))) + "0z5l966b1asbcdzl77bmywf22c1q0xill00jj7qyml9wx2nh7qm2")))) (build-system python-build-system) (arguments `(#:phases @@ -579,7 +579,7 @@ netcat implementation that supports TLS.") (uri (pypi-uri name version)) (sha256 (base32 - "02h959qkq7z0s13ivgf7jyl3gnc55wcck6n546k0kh155bpf5qri")))) + "14i6yrcb9s7ygy99gccfc8jscymi24xb72s5lgg9b2y40z909ikg")))) (build-system python-build-system) (arguments `(,@(substitute-keyword-arguments (package-arguments python-acme) @@ -826,7 +826,7 @@ then ported to the GNU / Linux environment.") (define-public mbedtls-apache (package (name "mbedtls-apache") - (version "2.14.1") + (version "2.16.0") (source (origin (method url-fetch) @@ -836,7 +836,7 @@ then ported to the GNU / Linux environment.") version "-apache.tgz")) (sha256 (base32 - "07f6xn77w5rd6fhq5s1dmna3czs4chk5j2s6wkj366cvikawp2gi")))) + "1qlscr0m97favkqmrlj90rlgw40h8lcypxz0snvr1iwkj1pbbnp3")))) (build-system cmake-build-system) (arguments `(#:configure-flags diff --git a/gnu/packages/tor.scm b/gnu/packages/tor.scm index a9bbebcd13..764ee52b0a 100644 --- a/gnu/packages/tor.scm +++ b/gnu/packages/tor.scm @@ -4,7 +4,7 @@ ;;; Copyright © 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2016, 2017 Nils Gillmann <ng0@n0.is> ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr> -;;; Copyright © 2017 Eric Bavier <bavier@member.fsf.org> +;;; Copyright © 2017, 2018 Eric Bavier <bavier@member.fsf.org> ;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com> ;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net> ;;; @@ -162,7 +162,7 @@ networks.") (define-public onionshare (package (name "onionshare") - (version "0.9.2") + (version "1.3.1") (source (origin (method git-fetch) @@ -172,7 +172,7 @@ networks.") (file-name (git-file-name name version)) (sha256 (base32 - "1nzr6m3jp04p1i8b652s27zv0xhybl3zwcn5r6l9h0f7d7x4iglv")))) + "02zic4cxwrcfdg22dq9c2rzni3l18wynjxd38scc59s37vlw7w2r")))) (build-system python-build-system) (arguments `(#:phases @@ -181,55 +181,24 @@ networks.") (lambda* (#:key outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) (onionshare (string-append out "/share/onionshare"))) - (substitute* "onionshare/strings.py" - ;; correct the locale directory - (("helpers.get_resource_path\\('locale'\\)") - (string-append "'" onionshare "/locale'"))) - (substitute* "onionshare/helpers.py" - ;; correct the location of version.txt - (("get_resource_path\\('version.txt'\\)") - (string-append "'" onionshare "/version.txt'")) - (("get_resource_path\\('wordlist.txt'\\)") - (string-append "'" onionshare "/wordlist.txt'"))) - (substitute* "onionshare/web.py" - ;; fix the location of the html files - (("helpers.get_resource_path\\('html/denied.html'\\)") - (string-append "'" onionshare "/html/denied.html'")) - (("helpers.get_resource_path\\('html/404.html'\\)") - (string-append "'" onionshare "/html/404.html'")) - (("helpers.get_resource_path\\('html/index.html'\\)") - (string-append "'" onionshare "/html/index.html'"))) - (substitute* "onionshare_gui/file_selection.py" - ;; fancy box image in the GUI - (("helpers.get_resource_path\\('images/drop_files.png'\\)") - (string-append "'" onionshare "/images/drop_files.png'"))) - (substitute* "onionshare_gui/server_status.py" - (("helpers.get_resource_path\\('images/server_stopped.png'\\)") - (string-append "'" onionshare "/images/server_stopped.png'")) - (("helpers.get_resource_path\\('images/server_working.png'\\)") - (string-append "'" onionshare "/images/server_working.png'")) - (("helpers.get_resource_path\\('images/server_started.png'\\)") - (string-append "'" onionshare "/images/server_started.png'"))) - (substitute* "onionshare_gui/onionshare_gui.py" - ;; for the icon on the GUI - (("helpers.get_resource_path\\('images/logo.png'\\)") - (string-append "'" onionshare "/images/logo.png'"))) - (substitute* '("setup.py" "onionshare/helpers.py") + (substitute* '("setup.py" "onionshare/common.py") (("sys.prefix,") (string-append "'" out "',"))) (substitute* "setup.py" ;; for the nautilus plugin (("/usr/share/nautilus") "share/nautilus")) - #t))) + (substitute* "install/onionshare.desktop" + (("/usr") out)) + #t))) (delete 'check) (add-before 'strip 'tests ;; After all the patching we run the tests after installing. ;; This is also a known issue: ;; https://github.com/micahflee/onionshare/issues/284 (lambda _ - (invoke "nosetests" "test") + (invoke "pytest" "test") #t))))) (native-inputs - `(("python-nose" ,python-nose))) + `(("python-pytest" ,python-pytest))) (inputs `(("python-flask" ,python-flask) ("python-nautilus" ,python-nautilus) diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm index d068c30735..2eaf0c69f4 100644 --- a/gnu/packages/version-control.scm +++ b/gnu/packages/version-control.scm @@ -146,14 +146,14 @@ as well as the classic centralized workflow.") (name "git") ;; XXX When updating Git, check if the special 'git-source' input to cgit ;; needs to be updated as well. - (version "2.19.2") + (version "2.20.1") (source (origin (method url-fetch) (uri (string-append "mirror://kernel.org/software/scm/git/git-" version ".tar.xz")) (sha256 (base32 - "1scbggzghkzzfqg4ky3qh7h9w87c3zya4ls5disz7dbx56is7sgw")))) + "1sf3h6ms43k15h01ln8lcf24vx9n7c11s83h1ax63sm2zbi92blx")))) (build-system gnu-build-system) (native-inputs `(("native-perl" ,perl) @@ -166,7 +166,7 @@ as well as the classic centralized workflow.") version ".tar.xz")) (sha256 (base32 - "1sqhllkabylm46paswg0j54fiar44fmcdmkjkysmjn2gj6hqpz95")))) + "1fkn134y7an850l7p487v39y5zciaa65gryzqz815dyg8ziwq2h6")))) ;; For subtree documentation. ("asciidoc" ,asciidoc) ("docbook-xsl" ,docbook-xsl) diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm index fc6caf3ff8..2ef92ae630 100644 --- a/gnu/packages/video.scm +++ b/gnu/packages/video.scm @@ -865,26 +865,6 @@ audio/video codec library.") (base32 "0b59qk5wpc5ksiha76jbhb859g5gxa4w0k6afh3kgvgajiivs73l")))))) -(define-public ffmpeg-2.8 - (package - (inherit ffmpeg) - (version "2.8.15") - (source (origin - (method url-fetch) - (uri (string-append "https://ffmpeg.org/releases/ffmpeg-" - version ".tar.xz")) - (sha256 - (base32 - "065xbvnfmxfbfrc14cavpqyd2slil99vcjksw4ndb7w8zdh0wp3v")))) - (arguments - (substitute-keyword-arguments (package-arguments ffmpeg) - ((#:configure-flags flags) - `(map (lambda (flag) - (if (string=? flag "--disable-mipsdsp") - "--disable-mipsdspr1" - flag)) - ,flags)))))) - (define-public ffmpegthumbnailer (package (name "ffmpegthumbnailer") @@ -916,31 +896,19 @@ thumbnailer uses ffmpeg to decode frames from the video files, so supported videoformats depend on the configuration flags of ffmpeg.") (license license:gpl2+))) -;; Fix build with newer x264. -(define %vlc-libx264-compat.patch - (origin - (method url-fetch) - (uri (string-append "https://git.videolan.org/?p=vlc.git;a=patch;h=" - "a8953ba707cca1f2de372ca24513296bcfcdaaa8")) - (file-name "vlc-libx264-compat.patch") - (sha256 - (base32 - "04igckbdp3sbp8vh0ihmhcf3yjyyk9r3cd5dm9mn9j6vipi1dg3g")))) - (define-public vlc (package (name "vlc") - (version "3.0.4") + (version "3.0.5") (source (origin (method url-fetch) (uri (string-append "https://download.videolan.org/pub/videolan/vlc/" (car (string-split version #\-)) "/vlc-" version ".tar.xz")) - (patches (list %vlc-libx264-compat.patch)) (sha256 (base32 - "17jsq0zqpqyxw4ckvjba0hf6zk8ywc4wf8sy3z03hh3ij0vxpwq1")))) + "1nvj00khy08sing0mdnw6virmiq579mrk5rvpx9710nlxggqgh7m")))) (build-system gnu-build-system) (native-inputs `(("flex" ,flex) @@ -1338,7 +1306,7 @@ access to mpv's powerful playback capabilities.") (define-public youtube-dl (package (name "youtube-dl") - (version "2018.11.07") + (version "2018.12.17") (source (origin (method url-fetch) (uri (string-append "https://yt-dl.org/downloads/" @@ -1346,7 +1314,7 @@ access to mpv's powerful playback capabilities.") version ".tar.gz")) (sha256 (base32 - "1rvc2m2kbm2kycqsa7fkcg5gql9f0w3hn1a7jg48zzl06ayggxk9")))) + "1nd4zr3wd35vldm775m9wcgbzma2013yyj134lcz19ipjs38isrk")))) (build-system python-build-system) (arguments ;; The problem here is that the directory for the man page and completion @@ -1496,7 +1464,7 @@ audio, images) from the Web. It can use either mpv or vlc for playback.") (define-public youtube-viewer (package (name "youtube-viewer") - (version "3.4.1") + (version "3.5.0") (source (origin (method git-fetch) (uri (git-reference @@ -1505,7 +1473,7 @@ audio, images) from the Web. It can use either mpv or vlc for playback.") (file-name (git-file-name name version)) (sha256 (base32 - "0axgb95lx81psgrb2a5rfdd8gl4mhsrzf41jas6l58d1xkaj54ri")))) + "1s7hv2a46cx2nbdykrijqfh8hdkf3zqn6q8sg3ajnnc5agaspyrg")))) (build-system perl-build-system) (native-inputs `(("perl-module-build" ,perl-module-build))) @@ -1955,7 +1923,7 @@ and custom quantization matrices.") ("python-websocket-client" ,python-websocket-client) ("python-iso3166" ,python-iso3166) ("python-iso639" ,python-iso639) - ("python-isodate", python-isodate) + ("python-isodate" ,python-isodate) ("python-pycryptodome" ,python-pycryptodome) ("python-requests" ,python-requests) ("python-urllib3" ,python-urllib3))) @@ -3264,3 +3232,23 @@ API. It includes bindings for Python, Ruby, and other languages.") helps you create the film you have always dreamed of. Easily add sub-titles, transitions, and effects and then export your film to many common formats.") (license license:gpl3+))) + +(define-public dav1d + (package + (name "dav1d") + (version "0.1.0") + (source + (origin + (method url-fetch) + (uri (string-append "https://downloads.videolan.org/pub/videolan/" + "dav1d/" version "/dav1d-" version ".tar.xz")) + (sha256 + (base32 + "0dw0liday8cbyrirhm6bgzhxg4cdy66nspfkdlq338gdsfqcvrsc")))) + (build-system meson-build-system) + (native-inputs `(("nasm" ,nasm))) + (home-page "https://code.videolan.org/videolan/dav1d") + (synopsis "AV1 decoder") + (description "dav1d is a new AV1 cross-platform decoder, and focused on +speed and correctness.") + (license license:bsd-2))) diff --git a/gnu/packages/vim.scm b/gnu/packages/vim.scm index ecce4e0ae6..53d028681d 100644 --- a/gnu/packages/vim.scm +++ b/gnu/packages/vim.scm @@ -33,6 +33,7 @@ #:use-module (gnu packages acl) #:use-module (gnu packages admin) ; For GNU hostname #:use-module (gnu packages attr) + #:use-module (gnu packages autotools) #:use-module (gnu packages base) #:use-module (gnu packages fontutils) #:use-module (gnu packages gawk) @@ -61,15 +62,16 @@ (define-public vim (package (name "vim") - (version "8.1.0551") + (version "8.1.0644") (source (origin - (method url-fetch) - (uri (string-append "https://github.com/vim/vim/archive/v" - version ".tar.gz")) - (file-name (string-append name "-" version ".tar.gz")) + (method git-fetch) + (uri (git-reference + (url "https://github.com/vim/vim") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) (sha256 (base32 - "1wi6j9w04wg3hxsch3izl2mxb0065vpvxscz19zjn5ypkfypnm8n")))) + "1xksb2v8rw1zgrd5fwqvrh44lf277k85sad2y4ia1z17y7i8j2fl")))) (build-system gnu-build-system) (arguments `(#:test-target "test" @@ -103,7 +105,9 @@ ("ncurses" ,ncurses) ("perl" ,perl) ("tcsh" ,tcsh))) ; For runtime/tools/vim32 - (home-page "http://www.vim.org/") + (native-inputs + `(("libtool" ,libtool))) + (home-page "https://www.vim.org/") (synopsis "Text editor based on vi") (description "Vim is a highly configurable text editor built to enable efficient text @@ -135,6 +139,7 @@ configuration files.") (install-file "xxd" bin) #t)))))) (inputs `()) + (native-inputs `()) (synopsis "Hexdump utility from vim") (description "This package provides the Hexdump utility xxd that comes with the editor vim."))) @@ -165,6 +170,19 @@ with the editor vim."))) ,@(substitute-keyword-arguments (package-arguments vim) ((#:phases phases) `(modify-phases ,phases + (add-before 'check 'skip-test87 + ;; This test fails for unknown reasons after switching + ;; to a git checkout. + (lambda _ + (delete-file "src/testdir/test87.ok") + (delete-file "src/testdir/test87.in") + (substitute* '("src/Makefile" + "src/testdir/Make_vms.mms") + (("test87") "")) + (substitute* "src/testdir/Make_all.mak" + (("test86.out \\\\") "test86") + (("test87.out") "")) + #t)) (add-before 'check 'start-xserver (lambda* (#:key inputs #:allow-other-keys) ;; Some tests require an X server, but does not start one. @@ -175,7 +193,8 @@ with the editor vim."))) display " &"))))))))))) (native-inputs `(("pkg-config" ,pkg-config) - ("xorg-server" ,xorg-server))) + ("xorg-server" ,xorg-server) + ,@(package-native-inputs vim))) (inputs `(("acl" ,acl) ("atk" ,atk) diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm index 2f8e541d40..274f827cd9 100644 --- a/gnu/packages/virtualization.scm +++ b/gnu/packages/virtualization.scm @@ -72,6 +72,8 @@ #:use-module (gnu packages web) #:use-module (gnu packages xdisorg) #:use-module (gnu packages xml) + #:use-module (gnu packages xorg) + #:use-module (guix build-system cmake) #:use-module (guix build-system gnu) #:use-module (guix build-system go) #:use-module (guix build-system python) @@ -95,14 +97,14 @@ (define-public qemu (package (name "qemu") - (version "3.0.0") + (version "3.1.0") (source (origin (method url-fetch) (uri (string-append "https://download.qemu.org/qemu-" version ".tar.xz")) (sha256 (base32 - "04sp3f1gp4bdb913jf7fw761njaqp2l32wgipp1sapmxx17zcyld")))) + "1z5bd5nfyjvhfi1s95labc82y4hjdjjkdabw931362ls0zghh1ba")))) (build-system gnu-build-system) (arguments '(;; Running tests in parallel can occasionally lead to failures, like: @@ -386,14 +388,14 @@ manage system or application containers.") (define-public libvirt (package (name "libvirt") - (version "4.3.0") + (version "4.10.0") (source (origin (method url-fetch) (uri (string-append "https://libvirt.org/sources/libvirt-" version ".tar.xz")) (sha256 (base32 - "1dy243dqaj174hcka0my7q781wf0dvyi7f9328nwnplqicnf4cd5")))) + "0v17zzyyb25nn9l18v5244myg7590dp6ppwgi8xysipifc0q77bz")))) (build-system gnu-build-system) (arguments `(;; FAIL: virshtest @@ -437,6 +439,8 @@ manage system or application containers.") #t)))))) (inputs `(("libxml2" ,libxml2) + ("eudev" ,eudev) + ("libpciaccess" ,libpciaccess) ("gnutls" ,gnutls) ("dbus" ,dbus) ("qemu" ,qemu) @@ -519,13 +523,13 @@ three libraries: (define-public python-libvirt (package (name "python-libvirt") - (version "4.1.0") + (version "4.10.0") (source (origin (method url-fetch) (uri (pypi-uri "libvirt-python" version)) (sha256 (base32 - "1ixqhxjkczl8vk9wjx4cknw4374cw5nnsacbd2s755kpd0ys7hny")))) + "11fipj9naihgc9afc8bz5hi05xa1shp4qcy170sa18p3sl4zljb9")))) (build-system python-build-system) (arguments `(#:phases @@ -557,7 +561,7 @@ virtualization library.") (define-public virt-manager (package (name "virt-manager") - (version "1.5.1") + (version "2.0.0") (source (origin (method url-fetch) (uri (string-append "https://virt-manager.org/download/sources" @@ -565,11 +569,10 @@ virtualization library.") version ".tar.gz")) (sha256 (base32 - "1ardmd4sxdmd57y7qpka44gf09c1yq2g0xs074d3k1h925crv27f")))) + "1b48xbrx99mfiv80c60k3ydzkpcpbq57c8h8dl0gnffmnzbs8vzb")))) (build-system python-build-system) (arguments - `(#:python ,python-2 - #:use-setuptools? #f ; Uses custom distutils 'install' command. + `(#:use-setuptools? #f ; Uses custom distutils 'install' command. ;; Some of the tests seem to require network access to install virtual ;; machines. #:tests? #f @@ -626,12 +629,12 @@ virtualization library.") ("libosinfo" ,libosinfo) ("vte" ,vte) ("gobject-introspection" ,gobject-introspection) - ("python2-libvirt" ,python2-libvirt) - ("python2-requests" ,python2-requests) - ("python2-ipaddr" ,python2-ipaddr) - ("python2-pycairo" ,python2-pycairo) - ("python2-pygobject" ,python2-pygobject) - ("python2-libxml2" ,python2-libxml2) + ("python-libvirt" ,python-libvirt) + ("python-requests" ,python-requests) + ("python-ipaddress" ,python-ipaddress) + ("python-pycairo" ,python-pycairo) + ("python-pygobject" ,python-pygobject) + ("python-libxml2" ,python-libxml2) ("spice-gtk" ,spice-gtk))) ;; virt-manager searches for qemu-img or kvm-img in the PATH. (propagated-inputs @@ -769,7 +772,7 @@ Machine Protocol.") (define-public lookingglass (package (name "lookingglass") - (version "a11") + (version "a12") (source (origin (method url-fetch) @@ -778,8 +781,8 @@ Machine Protocol.") (file-name (string-append name "-" version)) (sha256 (base32 - "11qwyp332l66sqksqa0z9439yi4accmbq7wjc6kikc5fimdh9wk5")))) - (build-system gnu-build-system) + "0x57chx83f8pq56d9sfxmc9p4qjm9nqvdyamj41bmy145mxw5w3m")))) + (build-system cmake-build-system) (inputs `(("fontconfig" ,fontconfig) ("glu" ,glu) ("mesa" ,mesa) @@ -794,16 +797,17 @@ Machine Protocol.") `(#:tests? #f ;; No tests are available. #:make-flags '("CC=gcc") #:phases (modify-phases %standard-phases - (replace 'configure + (add-before 'configure 'chdir-to-client (lambda* (#:key outputs #:allow-other-keys) (chdir "client") #t)) (replace 'install (lambda* (#:key outputs #:allow-other-keys) - (install-file "bin/looking-glass-client" + (install-file "looking-glass-client" (string-append (assoc-ref outputs "out") "/bin")) - #t))))) + #t)) + ))) (home-page "https://looking-glass.hostfission.com") (synopsis "KVM Frame Relay (KVMFR) implementation") (description "Looking Glass allows the use of a KVM (Kernel-based Virtual diff --git a/gnu/packages/vpn.scm b/gnu/packages/vpn.scm index 1edd1ac56a..dabf84a947 100644 --- a/gnu/packages/vpn.scm +++ b/gnu/packages/vpn.scm @@ -7,6 +7,7 @@ ;;; Copyright © 2016, 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu> ;;; Copyright © 2018 Pierre Langlois <pierre.langlois@gmx.com> +;;; Copyright © 2018 Meiyo Peng <meiyo.peng@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -28,6 +29,7 @@ #:use-module (guix packages) #:use-module (guix download) #:use-module (guix git-download) + #:use-module (guix build-system cmake) #:use-module (guix build-system gnu) #:use-module (guix build-system python) #:use-module (gnu packages) @@ -37,6 +39,7 @@ #:use-module (gnu packages compression) #:use-module (gnu packages gettext) #:use-module (gnu packages gnupg) + #:use-module (gnu packages gnuzilla) #:use-module (gnu packages libevent) #:use-module (gnu packages linux) #:use-module (gnu packages perl) @@ -400,3 +403,47 @@ DNS domain name queries.") @command{sshuttle} virtual private networks. It supports flexible profiles with configuration options for most of @command{sshuttle}’s features.") (license license:gpl3+))) + +(define-public badvpn + (package + (name "badvpn") + (version "1.999.130") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/ambrop72/badvpn.git") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 "0rm67xhi7bh3yph1vh07imv5y1pwyldvw3wa5bz471g8mnkc7d3c")))) + (build-system cmake-build-system) + (arguments + '(#:tests? #f)) ; no tests + (inputs + `(("nspr" ,nspr) + ("nss" ,nss) + ("openssl" ,openssl))) + (native-inputs + `(("pkg-config" ,pkg-config))) + (home-page "https://github.com/ambrop72/badvpn") + (synopsis "Peer-to-peer virtual private network (VPN)") + (description "@code{BadVPN} is a collection of virtual private +network (VPN) tools. It includes: + +@enumerate +@item NCD programming language.\n +NCD (Network Configuration Daemon) is a daemon and programming/scripting +language for configuration of network interfaces and other aspects of the +operating system. +@item Tun2socks network-layer proxifier.\n +The tun2socks program socksifes TCP connections at the network layer. It +implements a TUN device which accepts all incoming TCP connections (regardless +of destination IP), and forwards the connections through a SOCKS server. +@item Peer-to-peer VPN.\n +The peer-to-peer VPN implements a Layer 2 (Ethernet) network between the peers +(VPN nodes). +@end enumerate") + ;; This project contains a bundled lwIP. lwIP is also released under the + ;; 3-clause BSD license. + (license license:bsd-3))) diff --git a/gnu/packages/web-browsers.scm b/gnu/packages/web-browsers.scm index 578cfca560..e1ad01aa25 100644 --- a/gnu/packages/web-browsers.scm +++ b/gnu/packages/web-browsers.scm @@ -50,6 +50,7 @@ #:use-module (gnu packages tls) #:use-module (gnu packages webkit) #:use-module (gnu packages xorg) + #:use-module (gnu packages gcc) #:use-module (guix download) #:use-module (guix git-download) #:use-module (guix build-system gnu) @@ -152,16 +153,16 @@ features including, tables, builtin image display, bookmarks, SSL and more.") "0dwxhnq90whakgdg21lzcf03n2g1c7hqgliwhav8av5na5mqpn93")) (file-name (string-append name "-" version ".tar.gz")))) (inputs - `(("lua-5.1", lua-5.1) + `(("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))) + ("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))) + `(("pkg-config" ,pkg-config))) (build-system glib-or-gtk-build-system) (arguments '(#:make-flags @@ -364,45 +365,48 @@ driven and does not detract you from your daily work.") (license license:gpl3+))) (define-public next-gtk-webkit - (let ((commit "b8899341bbdefd0a33412608fbb0b1f92f818c65")) - (package - (name "next-gtk-webkit") - (version (git-version "1.0.0" "1" commit)) - (source - (origin - (method git-fetch) - (uri (git-reference - (url "https://source.atlas.engineer/public/next") - (commit commit))) - (sha256 - (base32 - "12jmf1b9qr85il9h15mb9vpsfh1wzcln9x9xpn4lps0kkccnpkz9")) - (file-name (git-file-name "next" version)))) - (build-system glib-or-gtk-build-system) - (arguments - `(#:tests? #f ; no tests - #:make-flags (list "gtk-webkit" - "CC=gcc" - (string-append "PREFIX=" %output)) - #:phases - (modify-phases %standard-phases - (delete 'configure) - (replace 'install - (lambda* (#:key (make-flags '()) #:allow-other-keys) - (apply invoke "make" "install-gtk-webkit" make-flags)))))) - (inputs - `(("glib-networking" ,glib-networking) - ("gsettings-desktop-schemas" ,gsettings-desktop-schemas) - ("webkitgtk" ,webkitgtk))) - (native-inputs - `(("pkg-config" ,pkg-config))) - (home-page "https://next.atlas.engineer") - (synopsis "Infinitely extensible web-browser (user interface only)") - (description "Next is a keyboard-oriented, extensible web-browser + (package + (name "next-gtk-webkit") + (version "1.2.0") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://source.atlas.engineer/public/next") + (commit version))) + (sha256 + (base32 + "0a066f56hnb9znbwnv1blm31j0ysv05n4wzlkli0zgw087c9047x")) + (file-name (git-file-name "next" version)))) + (build-system glib-or-gtk-build-system) + (arguments + `(#:tests? #f ; no tests + #:make-flags (list "gtk-webkit" + (string-append + "CC=" + (assoc-ref %build-inputs "gcc-7") + "/bin/gcc") + (string-append "PREFIX=" %output)) + #:phases + (modify-phases %standard-phases + (delete 'configure) + (replace 'install + (lambda* (#:key (make-flags '()) #:allow-other-keys) + (apply invoke "make" "install-gtk-webkit" make-flags)))))) + (inputs + `(("glib-networking" ,glib-networking) + ("gsettings-desktop-schemas" ,gsettings-desktop-schemas) + ("webkitgtk" ,webkitgtk-2.22))) + (native-inputs + `(("gcc-7" ,gcc-7) ; needed because webkitgtk-2.22 is compiled with gcc-7 + ("pkg-config" ,pkg-config))) + (home-page "https://next.atlas.engineer") + (synopsis "Infinitely extensible web-browser (user interface only)") + (description "Next is a keyboard-oriented, extensible web-browser inspired by Emacs and designed for power users. The application has familiar key-bindings, is fully configurable and extensible in Lisp, and has powerful features for productive professionals.") - (license license:bsd-3)))) + (license license:bsd-3))) (define-public sbcl-next (package @@ -428,8 +432,6 @@ features for productive professionals.") (define expected-fasl (string-append lib "/lib/sbcl/next--system.fasl")) - (pk actual-fasl) - (pk expected-fasl) (copy-file actual-fasl expected-fasl) #t)) (add-after 'create-symlinks 'build-program @@ -445,6 +447,9 @@ features for productive professionals.") ;; the illegal version will result in NIL in the .desktop ;; file. (lambda* (#:key outputs #:allow-other-keys) + (with-output-to-file "version" + (lambda _ + (format #t "~a" ,(package-version next-gtk-webkit)))) (invoke "make" "install-assets" (string-append "PREFIX=" (assoc-ref outputs "out")))))))) @@ -456,15 +461,14 @@ features for productive professionals.") ("cl-strings" ,sbcl-cl-strings) ("cl-string-match" ,sbcl-cl-string-match) ("puri" ,sbcl-puri) - ("queues.simple-queue" ,sbcl-queues.simple-queue) ("sqlite" ,sbcl-cl-sqlite) ("parenscript" ,sbcl-parenscript) ("cl-json" ,sbcl-cl-json) ("swank" ,sbcl-slime-swank) ("cl-markup" ,sbcl-cl-markup) ("cl-css" ,sbcl-cl-css) - ("usocket" ,sbcl-usocket) ("bordeaux-threads" ,sbcl-bordeaux-threads) ("s-xml-rpc" ,sbcl-s-xml-rpc) - ("unix-opts" ,sbcl-unix-opts))) + ("unix-opts" ,sbcl-unix-opts) + ("trivial-clipboard" ,sbcl-trivial-clipboard))) (synopsis "Infinitely extensible web-browser (with Lisp development files)"))) diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm index 750b760362..c1d29c94ad 100644 --- a/gnu/packages/web.scm +++ b/gnu/packages/web.scm @@ -57,6 +57,7 @@ #:use-module (guix build-system gnu) #:use-module (guix build-system glib-or-gtk) #:use-module (guix build-system perl) + #:use-module (guix build-system ruby) #:use-module (guix build-system cmake) #:use-module (guix build-system r) #:use-module (guix build-system trivial) @@ -113,6 +114,7 @@ #:use-module (gnu packages pkg-config) #:use-module (gnu packages qt) #:use-module (gnu packages readline) + #:use-module (gnu packages ruby) #:use-module (gnu packages valgrind) #:use-module (gnu packages xml) #:use-module (gnu packages curl) @@ -196,14 +198,14 @@ Interface} specification.") (name "nginx") ;; Consider updating the nginx-documentation package if the nginx package is ;; updated. - (version "1.14.1") + (version "1.14.2") (source (origin (method url-fetch) (uri (string-append "https://nginx.org/download/nginx-" version ".tar.gz")) (sha256 (base32 - "19542jxcjf4dvrqvgb5vr36mhbzcjrxc3v0xh451rm60610rf2dz")))) + "15wppq12qmq8acjs35xfj61czhf9cdc0drnl5mm8hcg3aihryb80")))) (build-system gnu-build-system) (inputs `(("openssl" ,openssl) ("pcre" ,pcre) @@ -1281,12 +1283,14 @@ minimum to provide high performance operation.") #:tests? #f #:phases (modify-phases %standard-phases + (delete 'bootstrap) (delete 'configure) (add-after 'unpack 'unpack-libsass-and-set-path (lambda* (#:key inputs #:allow-other-keys) (invoke "tar" "xvf" (assoc-ref inputs "libsass")) (setenv "SASS_LIBSASS_PATH" - (string-append (getcwd) "/libsass-" ,version))))))) + (string-append (getcwd) "/libsass-" ,version)) + #t))))) (inputs `(("libsass" ,libsass))) (synopsis "CSS pre-processor") @@ -3060,7 +3064,7 @@ select or poll.") (native-inputs `(("perl-test-fatal" ,perl-test-fatal) ("perl-test-needs" ,perl-test-needs) - ("perl-test-requiresinternet", perl-test-requiresinternet))) + ("perl-test-requiresinternet" ,perl-test-requiresinternet))) (propagated-inputs `(("perl-encode-locale" ,perl-encode-locale) ("perl-file-listing" ,perl-file-listing) @@ -6876,3 +6880,33 @@ instructions on how to use Guix in a shared HPC environment.") "This package provides UI widget and layout functions for writing Shiny apps that work well on small screens.") (license l:gpl3))) + +(define-public ruby-unicorn + (package + (name "ruby-unicorn") + (version "5.4.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "unicorn" version)) + (sha256 + (base32 + "09s3mdsrc080h7b70lkl2wnv36iy9ipdqbi1ffm3fxd0498xjb7h")))) + (build-system ruby-build-system) + (propagated-inputs + `(("ruby-kgio" ,ruby-kgio) + ("ruby-raindrops" ,ruby-raindrops))) + (synopsis + "unicorn is an HTTP server for Rack applications designed to only serve +fast clients on low-latency, high-bandwidth connections and take +advantage of features in Unix/Unix-like kernels. Slow clients should +only be served by placing a reverse proxy capable of fully buffering +both the the request and response in between unicorn and slow clients.") + (description + "unicorn is an HTTP server for Rack applications designed to only serve +fast clients on low-latency, high-bandwidth connections and take +advantage of features in Unix/Unix-like kernels. Slow clients should +only be served by placing a reverse proxy capable of fully buffering +both the the request and response in between unicorn and slow clients.") + (home-page "https://bogomips.org/unicorn/") + (license (list #f #f)))) diff --git a/gnu/packages/webkit.scm b/gnu/packages/webkit.scm index b56cdd8938..f135666a7e 100644 --- a/gnu/packages/webkit.scm +++ b/gnu/packages/webkit.scm @@ -168,14 +168,14 @@ HTML/CSS applications to full-fledged web browsers.") (define-public webkitgtk-2.22 (package/inherit webkitgtk (name "webkitgtk") - (version "2.22.4") + (version "2.22.5") (source (origin (method url-fetch) (uri (string-append "https://www.webkitgtk.org/releases/" name "-" version ".tar.xz")) (sha256 (base32 - "1f2335hjzsvjxjf6hy5cyypsn65wykpx2pbk1sp548w0hclbxdgs")))) + "04ybyvaz5xhfkd2k65pc0sqizngjvd82j1p56wz3lz4a84zqdlwr")))) (native-inputs `(("gcc" ,gcc-7) ; webkitgtk-2.22 requires gcc-6 or newer ,@(package-native-inputs webkitgtk))) diff --git a/gnu/packages/wget.scm b/gnu/packages/wget.scm index 0fb1142b68..49bc6ecea7 100644 --- a/gnu/packages/wget.scm +++ b/gnu/packages/wget.scm @@ -45,7 +45,7 @@ (define-public wget (package (name "wget") - (version "1.19.5") + (version "1.20.1") (source (origin (method url-fetch) @@ -53,23 +53,8 @@ version ".tar.lz")) (sha256 (base32 - "0xfaxmlnih7dhkyks5wi4vrn0n1xshmy6gx6fb2k1120sprydyr9")))) + "0a29qsqxkk8145vkyy35q5a1wc7qzwx3qj3gmfrkmi9xs96yhqqg")))) (build-system gnu-build-system) - (arguments - '(#:phases (modify-phases %standard-phases - (add-before 'check 'disable-https-tests - (lambda _ - ;; XXX: Skip TLS tests, which fail with "The - ;; certificate's owner does not match hostname" as - ;; reported at: - ;; <https://lists.gnu.org/archive/html/bug-wget/2017-07/msg00012.html>. - ;; The problem appears to be due to a change in GnuTLS - ;; 3.5.12, whereby 'gnutls_x509_crt_check_hostname2' no - ;; longer matches IP address against the 'CN' or - ;; 'DNSname' fields of certificates. - (substitute* "testenv/Makefile" - (("SSL_TESTS=1") "")) - #t))))) (inputs `(("gnutls" ,gnutls) ("libidn2" ,libidn2) diff --git a/gnu/packages/wine.scm b/gnu/packages/wine.scm index 802b3dd38f..150a346afa 100644 --- a/gnu/packages/wine.scm +++ b/gnu/packages/wine.scm @@ -225,7 +225,7 @@ integrate Windows applications into your desktop.") (define-public wine-staging-patchset-data (package (name "wine-staging-patchset-data") - (version "3.21") + (version "4.0-rc4") (source (origin (method git-fetch) @@ -235,7 +235,7 @@ integrate Windows applications into your desktop.") (file-name (git-file-name name version)) (sha256 (base32 - "1bxryvqw5rvhcx8vjl714jaj0rjsrh95kh3sn499rrljc3c8qsbl")))) + "18jd5d9yjps41b48gl7xkjyli0pqj84f7qpm1siz359r795x6inv")))) (build-system trivial-build-system) (native-inputs `(("bash" ,bash) @@ -276,12 +276,12 @@ integrate Windows applications into your desktop.") (method url-fetch) (uri (string-append "https://dl.winehq.org/wine/source/" - (version-major version) ".x" + (version-major version) ".0" "/wine-" version ".tar.xz")) (file-name (string-append name "-" version ".tar.xz")) (sha256 (base32 - "1h70wb7kysbzv36i3fblyiihvalwhy6sj4s2a8nf21nz2mhc0k58")))) + "1394pdhn3myw7fsyqd7vmmga3x952v63pzgnrgr91jp9kyq2l1q3")))) (inputs `(("autoconf" ,autoconf) ; for autoreconf ("gtk+" ,gtk+) ("libva" ,libva) diff --git a/gnu/packages/wm.scm b/gnu/packages/wm.scm index 8322a62b51..a761bce235 100644 --- a/gnu/packages/wm.scm +++ b/gnu/packages/wm.scm @@ -76,6 +76,7 @@ #:use-module (gnu packages lua) #:use-module (gnu packages linux) #:use-module (gnu packages suckless) + #:use-module (gnu packages mpd) #:use-module (guix download) #:use-module (guix git-download)) @@ -604,7 +605,7 @@ Haskell, no knowledge of the language is required to install and use it.") ("ghc-random" ,ghc-random) ("ghc-utf8-string" ,ghc-utf8-string) ("ghc-extensible-exceptions" ,ghc-extensible-exceptions) - ("ghc-semigroups", ghc-semigroups) + ("ghc-semigroups" ,ghc-semigroups) ("ghc-x11" ,ghc-x11) ("ghc-x11-xft" ,ghc-x11-xft) ("xmonad" ,xmonad))) @@ -1051,3 +1052,45 @@ its size @item Display preview images in a tiled icon layout @end itemize") (license license:gpl2+))) + +(define-public polybar + (package + (name "polybar") + (version "3.3.0") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/jaagr/polybar/releases/" + "download/" version "/polybar.tar")) + (sha256 + (base32 "0sjh3xmf11g09spi88zj7xsc3a3vv78kixab6n5i7436py7xwzb4")) + (file-name (string-append name "-" version ".tar")))) + (build-system cmake-build-system) + (arguments + ;; Test is disabled because it requires downloading googletest from the + ;; Internet. + '(#:tests? #f)) + (inputs + `(("alsa-lib" ,alsa-lib) + ("cairo" ,cairo) + ("i3-wm" ,i3-wm) + ("libmpdclient" ,libmpdclient) + ("libnl" ,libnl) + ("libxcb" ,libxcb) + ("pulseaudio" ,pulseaudio) + ("xcb-proto" ,xcb-proto) + ("xcb-util" ,xcb-util) + ("xcb-util-cursor" ,xcb-util-cursor) + ("xcb-util-image" ,xcb-util-image) + ("xcb-util-wm" ,xcb-util-wm) + ("xcb-util-xrm" ,xcb-util-xrm))) + (native-inputs + `(("pkg-config" ,pkg-config) + ("python-2" ,python-2) ; lib/xpp depends on python 2 + ("python" ,python))) ; xcb-proto depends on python 3 + (home-page "https://polybar.github.io/") + (synopsis "Fast and easy-to-use status bar") + (description "Polybar aims to help users build beautiful and highly +customizable status bars for their desktop environment. It has built-in +functionality to display information about the most commonly used services.") + (license license:expat))) diff --git a/gnu/packages/xdisorg.scm b/gnu/packages/xdisorg.scm index 82ed065a3f..dc729229f3 100644 --- a/gnu/packages/xdisorg.scm +++ b/gnu/packages/xdisorg.scm @@ -24,6 +24,7 @@ ;;; Copyright © 2018 Thomas Sigurdsen <tonton@riseup.net> ;;; Copyright © 2018 Rutger Helling <rhelling@mykolab.com> ;;; Copyright © 2018 Pierre Neidhardt <mail@ambrevar.xyz> +;;; Copyright © 2018 Nam Nguyen <namn@berkeley.edu> ;;; ;;; This file is part of GNU Guix. ;;; @@ -52,6 +53,8 @@ #:use-module (guix build-system python) #:use-module (gnu packages) #:use-module (gnu packages documentation) + #:use-module (gnu packages admin) + #:use-module (gnu packages base) #:use-module (gnu packages algebra) #:use-module (gnu packages autotools) #:use-module (gnu packages check) @@ -1555,3 +1558,57 @@ to automatically turn it on on login.") (description "This package provides a small utility for inverting the colors on all monitors attached to an XRandR-capable X11 display server.") (license license:gpl3+))) + +(define-public sct + (package + (name "sct") + (version "0.4") + (source + (origin + (method url-fetch) + (uri + (string-append "https://www.umaxx.net/dl/sct-" + version ".tar.gz")) + (sha256 + (base32 + "0r57z9ki8pvxhawfxys0v5h85z2x211sqxki0xvk1bga88ryldlv")))) + (build-system gnu-build-system) + (arguments + '(#:make-flags (list "CC=gcc") + #:tests? #f ; No tests exist. + #:phases + (modify-phases %standard-phases + (delete 'configure) + (add-after 'unpack 'fix-sctd-paths + (lambda* (#:key outputs inputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (coreutils (assoc-ref inputs "coreutils")) + (inetutils (assoc-ref inputs "inetutils")) + (sed (assoc-ref inputs "sed"))) + (substitute* "sctd.sh" + (("\\$\\(which sct\\)") (string-append out "/bin/sct")) + (("date") (string-append coreutils "/bin/date")) + (("printf") (string-append coreutils "/bin/printf")) + (("sleep") (string-append coreutils "/bin/sleep")) + (("logger") (string-append inetutils "/bin/logger")) + (("sed") (string-append sed "/bin/sed")))))) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (install-file "sct" (string-append out "/bin")) + (install-file "sctd.sh" (string-append out "/bin")) + (install-file "sct.1" (string-append out "/man/man1")) + (install-file "sctd.1" (string-append out "/man/man1")) + (rename-file (string-append out "/bin/sctd.sh") + (string-append out "/bin/sctd")) + #t)))))) + (inputs + `(("coreutils" ,coreutils) ; sctd uses "date", "printf" and "sleep" + ("inetutils" ,inetutils) ; sctd uses "logger" + ("libxrandr" ,libxrandr) + ("sed" ,sed))) ; sctd uses "sed" + (home-page "https://www.umaxx.net") + (synopsis "Set the color temperature of the screen") + (description "@code{sct} is a lightweight utility to set the color +temperature of the screen.") + (license license:bsd-3))) diff --git a/gnu/packages/xml.scm b/gnu/packages/xml.scm index 3ac01133e5..fd4c3fea2c 100644 --- a/gnu/packages/xml.scm +++ b/gnu/packages/xml.scm @@ -39,6 +39,7 @@ (define-module (gnu packages xml) #:use-module (gnu packages) #:use-module (gnu packages autotools) + #:use-module (gnu packages check) #:use-module (gnu packages compression) #:use-module (gnu packages curl) #:use-module (gnu packages gnupg) @@ -2152,3 +2153,24 @@ It converts the procedure call into an XML document, sends it to a remote server using HTTP, and gets back the response as XML. This library provides a modular implementation of XML-RPC for C and C++.") (license (list license:psfl license:expat)))) + +(define-public python-xmltodict + (package + (name "python-xmltodict") + (version "0.11.0") + (source + (origin + (method url-fetch) + (uri (pypi-uri "xmltodict" version)) + (sha256 + (base32 + "1pxh4yjhvmxi1h6f92skv41g4kbsws3ams57150kzn18m907v3cg")))) + (build-system python-build-system) + (native-inputs + `(("python-coverage" ,python-coverage) + ("python-nose" ,python-nose))) + (home-page "https://github.com/martinblech/xmltodict") + (synopsis "Work with XML like you are working with JSON") + (description "This package provides a Python library to convert XML to +@code{OrderedDict}.") + (license license:expat))) diff --git a/gnu/services/admin.scm b/gnu/services/admin.scm index d7bda61ed7..a3e43dd1c1 100644 --- a/gnu/services/admin.scm +++ b/gnu/services/admin.scm @@ -14,7 +14,7 @@ ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;;; GNU General Public License for more details. ;;; -;;; You should have received a copy of thye GNU General Public License +;;; 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 services admin) diff --git a/gnu/services/base.scm b/gnu/services/base.scm index cee9898d79..67bdaef18c 100644 --- a/gnu/services/base.scm +++ b/gnu/services/base.scm @@ -1499,26 +1499,27 @@ starting at FIRST-UID, and under GID." 1+ 1)) -(define (hydra-key-authorization key guix) - "Return a gexp with code to register KEY, a file containing a 'guix archive' -public key, with GUIX." +(define (hydra-key-authorization keys guix) + "Return a gexp with code to register KEYS, a list of files containing 'guix +archive' public keys, with GUIX." #~(unless (file-exists? "/etc/guix/acl") - (let ((pid (primitive-fork))) - (case pid - ((0) - (let* ((key #$key) - (port (open-file key "r0b"))) - (format #t "registering public key '~a'...~%" key) - (close-port (current-input-port)) - (dup port 0) - (execl #$(file-append guix "/bin/guix") - "guix" "archive" "--authorize") - (exit 1))) - (else - (let ((status (cdr (waitpid pid)))) - (unless (zero? status) - (format (current-error-port) "warning: \ -failed to register public key '~a': ~a~%" key status)))))))) + (for-each (lambda (key) + (let ((pid (primitive-fork))) + (case pid + ((0) + (let* ((port (open-file key "r0b"))) + (format #t "registering public key '~a'...~%" key) + (close-port (current-input-port)) + (dup port 0) + (execl #$(file-append guix "/bin/guix") + "guix" "archive" "--authorize") + (primitive-exit 1))) + (else + (let ((status (cdr (waitpid pid)))) + (unless (zero? status) + (format (current-error-port) "warning: \ +failed to register public key '~a': ~a~%" key status))))))) + '(#$@keys)))) (define %default-authorized-guix-keys ;; List of authorized substitute keys. @@ -1603,7 +1604,15 @@ failed to register public key '~a': ~a~%" key status)))))))) '()) #$@(if tmpdir (list (string-append "TMPDIR=" tmpdir)) - '())) + '()) + + ;; Make sure we run in a UTF-8 locale so that 'guix + ;; offload' correctly restores nars that contain UTF-8 + ;; file names such as 'nss-certs'. See + ;; <https://bugs.gnu.org/32942>. + (string-append "GUIX_LOCPATH=" + #$glibc-utf8-locales "/lib/locale") + "LC_ALL=en_US.utf8") #:log-file #$log-file)) (stop #~(make-kill-destructor)))))) @@ -1632,8 +1641,7 @@ failed to register public key '~a': ~a~%" key status)))))))) ;; Optionally authorize substitute server keys. (if authorize-key? - #~(begin - #$@(map (cut hydra-key-authorization <> guix) keys)) + (hydra-key-authorization keys guix) #~#f)))) (define* (references-file item #:optional (name "references")) @@ -1959,7 +1967,15 @@ item of @var{packages}." (respawn? #f) ;; We need additional modules. (modules `((gnu build linux-boot) - ,@%default-modules)))))))) + ,@%default-modules)) + + (actions (list (shepherd-action + (name 'rules) + (documentation "Display the directory containing +the udev rules in use.") + (procedure #~(lambda (_) + (display #$rules) + (newline)))))))))))) (define udev-service-type (service-type (name 'udev) diff --git a/gnu/services/messaging.scm b/gnu/services/messaging.scm index 1108006411..92f86a1b83 100644 --- a/gnu/services/messaging.scm +++ b/gnu/services/messaging.scm @@ -22,6 +22,8 @@ (define-module (gnu services messaging) #:use-module (gnu packages messaging) #:use-module (gnu packages admin) + #:use-module (gnu packages irc) + #:use-module (gnu packages tls) #:use-module (gnu services) #:use-module (gnu services shepherd) #:use-module (gnu services configuration) @@ -50,7 +52,10 @@ bitlbee-configuration bitlbee-configuration? bitlbee-service - bitlbee-service-type)) + bitlbee-service-type + + quassel-configuration + quassel-service-type)) ;;; Commentary: ;;; @@ -895,3 +900,86 @@ configuration file." (bitlbee bitlbee) (interface interface) (port port) (extra-settings extra-settings)))) + + +;;; +;;; Quassel. +;;; + +(define-record-type* <quassel-configuration> + quassel-configuration make-quassel-configuration + quassel-configuration? + (quassel quassel-configuration-quassel + (default quassel)) + (interface quassel-configuration-interface + (default "::,0.0.0.0")) + (port quassel-configuration-port + (default 4242)) + (loglevel quassel-configuration-loglevel + (default "Info"))) + +(define quassel-shepherd-service + (match-lambda + (($ <quassel-configuration> quassel interface port loglevel) + (with-imported-modules (source-module-closure + '((gnu build shepherd) + (gnu system file-systems))) + (list (shepherd-service + (provision '(quassel)) + (requirement '(user-processes networking)) + (modules '((gnu build shepherd) + (gnu system file-systems))) + (start #~(make-forkexec-constructor/container + (list #$(file-append quassel "/bin/quasselcore") + "--configdir=/var/lib/quassel" + "--logfile=/var/log/quassel/core.log" + (string-append "--loglevel=" #$loglevel) + (string-append "--port=" (number->string #$port)) + (string-append "--listen=" #$interface)) + #:mappings (list (file-system-mapping + (source "/var/lib/quassel") + (target source) + (writable? #t)) + (file-system-mapping + (source "/var/log/quassel") + (target source) + (writable? #t))))) + (stop #~(make-kill-destructor)))))))) + +(define %quassel-account + (list (user-group (name "quassel") (system? #t)) + (user-account + (name "quasselcore") + (group "quassel") + (system? #t) + (comment "Quassel daemon user") + (home-directory "/var/lib/quassel") + (shell (file-append shadow "/sbin/nologin"))))) + +(define %quassel-activation + #~(begin + (use-modules (guix build utils)) + (mkdir-p "/var/lib/quassel") + (mkdir-p "/var/log/quassel") + (let ((cert "/var/lib/quassel/quasselCert.pem")) + (unless (file-exists? cert) + (invoke #$(file-append openssl "/bin/openssl") + "req" "-x509" "-nodes" "-batch" "-days" "680" "-newkey" + "rsa" "-keyout" cert "-out" cert))))) + +(define quassel-service-type + (service-type (name 'quassel) + (extensions + (list (service-extension shepherd-root-service-type + quassel-shepherd-service) + (service-extension profile-service-type + (compose list quassel-configuration-quassel)) + (service-extension account-service-type + (const %quassel-account)) + (service-extension activation-service-type + (const %quassel-activation)))) + (default-value (quassel-configuration)) + (description + "Run @url{https://quassel-irc.org/,quasselcore}, the backend +for the distributed IRC client quassel, which allows you to connect from +multiple machines simultaneously."))) diff --git a/gnu/services/monitoring.scm b/gnu/services/monitoring.scm index aa3b63a0e4..685641f110 100644 --- a/gnu/services/monitoring.scm +++ b/gnu/services/monitoring.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2018 Sou Bunnbu <iyzsong@member.fsf.org> ;;; Copyright © 2018 Gábor Boskovits <boskovits@gmail.com> +;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -19,17 +20,32 @@ (define-module (gnu services monitoring) #:use-module (gnu services) + #:use-module (gnu services configuration) #:use-module (gnu services shepherd) + #:use-module (gnu services web) #:use-module (gnu packages admin) #:use-module (gnu packages monitoring) #:use-module (gnu system shadow) #:use-module (guix gexp) + #:use-module (guix packages) #:use-module (guix records) + #:use-module ((guix ui) #:select (display-hint)) #:use-module (ice-9 match) + #:use-module (ice-9 rdelim) + #:use-module (srfi srfi-26) + #:use-module (srfi srfi-35) #:export (darkstat-configuration prometheus-node-exporter-configuration darkstat-service-type - prometheus-node-exporter-service-type)) + prometheus-node-exporter-service-type + + zabbix-server-configuration + zabbix-server-service-type + zabbix-agent-configuration + zabbix-agent-service-type + zabbix-front-end-configuration + zabbix-front-end-service-type + %zabbix-front-end-configuration-nginx)) ;;; @@ -125,3 +141,452 @@ prometheus.") (list (service-extension shepherd-root-service-type (compose list prometheus-node-exporter-shepherd-service)))))) + + +;;; +;;; Zabbix server +;;; + +(define (uglify-field-name field-name) + (apply string-append + (map (lambda (str) + (if (member (string->symbol str) '(ca db ssl)) + (string-upcase str) + (string-capitalize str))) + (string-split (string-delete #\? + (symbol->string field-name)) + #\-)))) + +(define (serialize-field field-name val) + (format #t "~a=~a~%" (uglify-field-name field-name) val)) + +(define (serialize-number field-name val) + (serialize-field field-name (number->string val))) + +(define (serialize-list field-name val) + (if (null? val) "" (serialize-field field-name (string-join val ",")))) + +(define (serialize-string field-name val) + (if (and (string? val) (string=? val "")) + "" + (serialize-field field-name val))) + +(define group? string?) + +(define serialize-group + (const "")) + +(define include-files? list?) + +(define (serialize-include-files field-name val) + (if (null? val) "" (for-each (cut serialize-field 'include <>) val))) + +(define extra-options? string?) + +(define (serialize-extra-options field-name val) + (if (null? val) "" (display val))) + +(define (nginx-server-configuration-list? val) + (and (list? val) (and-map nginx-server-configuration? val))) + +(define (serialize-nginx-server-configuration-list field-name val) + "") + +(define-configuration zabbix-server-configuration + (zabbix-server + (package zabbix-server) + "The zabbix-server package.") + (user + (string "zabbix") + "User who will run the Zabbix server.") + (group ;for zabbix-server-account procedure + (group "zabbix") + "Group who will run the Zabbix server.") + (db-host + (string "127.0.0.1") + "Database host name.") + (db-name + (string "zabbix") + "Database name.") + (db-user + (string "zabbix") + "Database user.") + (db-password + (string "") + "Database password. Please, use @code{include-files} with +@code{DBPassword=SECRET} inside a specified file instead.") + (db-port + (number 5432) + "Database port.") + (log-type + (string "") + "Specifies where log messages are written to: +@itemize +@item @code{system} - syslog. +@item @code{file} - file specified with @code{log-file} parameter. +@item @code{console} - standard output. +@end itemize\n") + (log-file + (string "/var/log/zabbix/server.log") + "Log file name for @code{log-type} @code{file} parameter.") + (pid-file + (string "/var/run/zabbix/zabbix_server.pid") + "Name of PID file.") + (ssl-ca-location + (string "/etc/ssl/certs/ca-certificates.crt") + "The location of certificate authority (CA) files for SSL server +certificate verification.") + (ssl-cert-location + (string "/etc/ssl/certs") + "Location of SSL client certificates.") + (extra-options + (extra-options "") + "Extra options will be appended to Zabbix server configuration file.") + (include-files + (include-files '()) + "You may include individual files or all files in a directory in the +configuration file.")) + +(define (zabbix-server-account config) + "Return the user accounts and user groups for CONFIG." + (let ((zabbix-user (zabbix-server-configuration-user config)) + (zabbix-group (zabbix-server-configuration-group config))) + (list (user-group (name zabbix-group) (system? #t)) + (user-account + (name zabbix-user) + (system? #t) + (group zabbix-group) + (comment "zabbix privilege separation user") + (home-directory (string-append "/var/run/" zabbix-user)) + (shell #~(string-append #$shadow "/sbin/nologin")))))) + +(define (zabbix-server-config-file config) + "Return the zabbix-server configuration file corresponding to CONFIG." + (computed-file + "zabbix_server.conf" + #~(begin + (call-with-output-file #$output + (lambda (port) + (display "# Generated by 'zabbix-server-service'.\n" port) + (display #$(with-output-to-string + (lambda () + (serialize-configuration + config zabbix-server-configuration-fields))) + port) + #t))))) + +(define (zabbix-server-activation config) + "Return the activation gexp for CONFIG." + (with-imported-modules '((guix build utils) + (ice-9 rdelim)) + #~(begin + (use-modules (guix build utils) + (ice-9 rdelim)) + (let ((user (getpw #$(zabbix-server-configuration-user config)))) + (for-each (lambda (file) + (let ((directory (dirname file))) + (mkdir-p directory) + (chown directory (passwd:uid user) (passwd:gid user)) + (chmod directory #o755))) + (list #$(zabbix-server-configuration-log-file config) + #$(zabbix-server-configuration-pid-file config) + "/etc/zabbix/maintenance.inc.php")))))) + +(define (zabbix-server-shepherd-service config) + "Return a <shepherd-service> for Zabbix server with CONFIG." + (list (shepherd-service + (provision '(zabbix-server)) + (documentation "Run Zabbix server daemon.") + (start #~(make-forkexec-constructor + (list #$(file-append (zabbix-server-configuration-zabbix-server config) + "/sbin/zabbix_server") + "--config" #$(zabbix-server-config-file config) + "--foreground") + #:user #$(zabbix-server-configuration-user config) + #:group #$(zabbix-server-configuration-group config) + #:pid-file #$(zabbix-server-configuration-pid-file config) + #:environment-variables + (list "SSL_CERT_DIR=/run/current-system/profile\ +/etc/ssl/certs" + "SSL_CERT_FILE=/run/current-system/profile\ +/etc/ssl/certs/ca-certificates.crt"))) + (stop #~(make-kill-destructor))))) + +(define zabbix-server-service-type + (service-type + (name 'zabbix-server) + (extensions + (list (service-extension shepherd-root-service-type + zabbix-server-shepherd-service) + (service-extension account-service-type + zabbix-server-account) + (service-extension activation-service-type + zabbix-server-activation))) + (default-value (zabbix-server-configuration)))) + +(define (generate-zabbix-server-documentation) + (generate-documentation + `((zabbix-server-configuration + ,zabbix-server-configuration-fields)) + 'zabbix-server-configuration)) + +(define-configuration zabbix-agent-configuration + (zabbix-agent + (package zabbix-agentd) + "The zabbix-agent package.") + (user + (string "zabbix") + "User who will run the Zabbix agent.") + (group + (group "zabbix") + "Group who will run the Zabbix agent.") + (hostname + (string "Zabbix server") + "Unique, case sensitive hostname which is required for active checks and +must match hostname as configured on the server.") + (log-type + (string "") + "Specifies where log messages are written to: +@itemize +@item @code{system} - syslog. +@item @code{file} - file specified with @code{log-file} parameter. +@item @code{console} - standard output. +@end itemize\n") + (log-file + (string "/var/log/zabbix/agent.log") + "Log file name for @code{log-type} @code{file} parameter.") + (pid-file + (string "/var/run/zabbix/zabbix_agent.pid") + "Name of PID file.") + (server + (list '("127.0.0.1")) + "List of IP addresses, optionally in CIDR notation, or hostnames of Zabbix +servers and Zabbix proxies. Incoming connections will be accepted only from +the hosts listed here.") + (server-active + (list '("127.0.0.1")) + "List of IP:port (or hostname:port) pairs of Zabbix servers and Zabbix +proxies for active checks. If port is not specified, default port is used. +If this parameter is not specified, active checks are disabled.") + (extra-options + (extra-options "") + "Extra options will be appended to Zabbix server configuration file.") + (include-files + (include-files '()) + "You may include individual files or all files in a directory in the +configuration file.")) + +(define (zabbix-agent-account config) + "Return the user accounts and user groups for CONFIG." + (let ((zabbix-user "zabbix") + (zabbix-group "zabbix")) + (list (user-group (name zabbix-group) (system? #t)) + (user-account + (name zabbix-user) + (system? #t) + (group zabbix-group) + (comment "zabbix privilege separation user") + (home-directory (string-append "/var/run/" zabbix-user)) + (shell #~(string-append #$shadow "/sbin/nologin")))))) + +(define (zabbix-agent-activation config) + "Return the activation gexp for CONFIG." + (with-imported-modules '((guix build utils) + (ice-9 rdelim)) + #~(begin + (use-modules (guix build utils) + (ice-9 rdelim)) + (let ((user + (getpw #$(zabbix-agent-configuration-user config)))) + (for-each (lambda (file) + (let ((directory (dirname file))) + (mkdir-p directory) + (chown directory (passwd:uid user) (passwd:gid user)) + (chmod directory #o755))) + (list #$(zabbix-agent-configuration-log-file config) + #$(zabbix-agent-configuration-pid-file config))))))) + +(define (zabbix-agent-config-file config) + "Return the zabbix-agent configuration file corresponding to CONFIG." + (computed-file + "zabbix_agent.conf" + #~(begin + (call-with-output-file #$output + (lambda (port) + (display "# Generated by 'zabbix-agent-service'.\n" port) + (display #$(with-output-to-string + (lambda () + (serialize-configuration + config zabbix-agent-configuration-fields))) + port) + #t))))) + +(define (zabbix-agent-shepherd-service config) + "Return a <shepherd-service> for Zabbix agent with CONFIG." + (list (shepherd-service + (provision '(zabbix-agent)) + (documentation "Run Zabbix agent daemon.") + (start #~(make-forkexec-constructor + (list #$(file-append (zabbix-agent-configuration-zabbix-agent config) + "/sbin/zabbix_agentd") + "--config" #$(zabbix-agent-config-file config) + "--foreground") + #:user #$(zabbix-agent-configuration-user config) + #:group #$(zabbix-agent-configuration-group config) + #:pid-file #$(zabbix-agent-configuration-pid-file config) + #:environment-variables + (list "SSL_CERT_DIR=/run/current-system/profile\ +/etc/ssl/certs" + "SSL_CERT_FILE=/run/current-system/profile\ +/etc/ssl/certs/ca-certificates.crt"))) + (stop #~(make-kill-destructor))))) + +(define zabbix-agent-service-type + (service-type + (name 'zabbix-agent) + (extensions + (list (service-extension shepherd-root-service-type + zabbix-agent-shepherd-service) + (service-extension account-service-type + zabbix-agent-account) + (service-extension activation-service-type + zabbix-agent-activation))) + (default-value (zabbix-agent-configuration)))) + +(define (generate-zabbix-agent-documentation) + (generate-documentation + `((zabbix-agent-configuration + ,zabbix-agent-configuration-fields)) + 'zabbix-agent-configuration)) + +(define %zabbix-front-end-configuration-nginx + (nginx-server-configuration + (root #~(string-append #$zabbix-server:front-end "/share/zabbix/php")) + (index '("index.php")) + (locations + (let ((php-location (nginx-php-location))) + (list (nginx-location-configuration + (inherit php-location) + (body (append (nginx-location-configuration-body php-location) + (list " +fastcgi_param PHP_VALUE \"post_max_size = 16M + max_execution_time = 300\"; +"))))))))) + +(define-configuration zabbix-front-end-configuration + ;; TODO: Specify zabbix front-end package. + ;; (zabbix- + ;; (package zabbix-front-end) + ;; "The zabbix-front-end package.") + (nginx + (nginx-server-configuration-list + (list %zabbix-front-end-configuration-nginx)) + "NGINX configuration.") + (db-host + (string "localhost") + "Database host name.") + (db-port + (number 5432) + "Database port.") + (db-name + (string "zabbix") + "Database name.") + (db-user + (string "zabbix") + "Database user.") + (db-password + (string "") + "Database password. Please, use @code{db-secret-file} instead.") + (db-secret-file + (string "") + "Secret file which will be appended to @file{zabbix.conf.php} file. This +file contains credentials for use by Zabbix front-end. You are expected to +create it manually.") + (zabbix-host + (string "localhost") + "Zabbix server hostname.") + (zabbix-port + (number 10051) + "Zabbix server port.")) + +(define zabbix-front-end-config + (match-lambda + (($ <zabbix-front-end-configuration> + _ db-host db-port db-name db-user db-password db-secret-file + zabbix-host zabbix-port) + (mixed-text-file "zabbix.conf.php" + "\ +<?php +// Zabbix GUI configuration file. +global $DB; + +$DB['TYPE'] = 'POSTGRESQL'; +$DB['SERVER'] = '" db-host "'; +$DB['PORT'] = '" (number->string db-port) "'; +$DB['DATABASE'] = '" db-name "'; +$DB['USER'] = '" db-user "'; +$DB['PASSWORD'] = '" (if (string-null? db-password) + (if (string-null? db-secret-file) + (raise (condition + (&message + (message "\ +you must provide either 'db-secret-file' or 'db-password'")))) + (string-trim-both + (with-input-from-file db-secret-file + read-string))) + (begin + (display-hint "\ +Consider using @code{db-secret-file} instead of @code{db-password} and unset +@code{db-password} for security in @code{zabbix-front-end-configuration}.") + db-password)) "'; + +// Schema name. Used for IBM DB2 and PostgreSQL. +$DB['SCHEMA'] = ''; + +$ZBX_SERVER = '" zabbix-host "'; +$ZBX_SERVER_PORT = '" (number->string zabbix-port) "'; +$ZBX_SERVER_NAME = ''; + +$IMAGE_FORMAT_DEFAULT = IMAGE_FORMAT_PNG; +")))) + +(define %maintenance.inc.php + ;; Empty php file to allow us move zabbix-frontend configs to ‘/etc/zabbix’ + ;; directory. See ‘install-front-end’ phase in + ;; (@ (gnu packages monitoring) zabbix-server) package. + "\ +<?php +") + +(define (zabbix-front-end-activation config) + "Return the activation gexp for CONFIG." + #~(begin + (use-modules (guix build utils)) + (mkdir-p "/etc/zabbix") + (call-with-output-file "/etc/zabbix/maintenance.inc.php" + (lambda (port) + (display #$%maintenance.inc.php port))) + (copy-file #$(zabbix-front-end-config config) + "/etc/zabbix/zabbix.conf.php"))) + +(define zabbix-front-end-service-type + (service-type + (name 'zabbix-front-end) + (extensions + (list (service-extension activation-service-type + zabbix-front-end-activation) + (service-extension nginx-service-type + zabbix-front-end-configuration-nginx) + ;; Make sure php-fpm is instantiated. + (service-extension php-fpm-service-type + (const #t)))) + (default-value (zabbix-front-end-configuration)) + (description + "Run the zabbix-front-end web interface, which allows users to interact +with Zabbix server."))) + +(define (generate-zabbix-front-end-documentation) + (generate-documentation + `((zabbix-front-end-configuration + ,zabbix-front-end-configuration-fields)) + 'zabbix-front-end-configuration)) diff --git a/gnu/services/shepherd.scm b/gnu/services/shepherd.scm index 49d08cc30f..12d649f542 100644 --- a/gnu/services/shepherd.scm +++ b/gnu/services/shepherd.scm @@ -281,7 +281,17 @@ stored." (start service))) '#$(append-map shepherd-service-provision (filter shepherd-service-auto-start? - services))))))) + services))) + + ;; Hang up stdin. At this point, we assume that 'start' methods + ;; that required user interaction on the console (e.g., + ;; 'cryptsetup open' invocations, post-fsck emergency REPL) have + ;; completed. User interaction becomes impossible after this + ;; call; this avoids situations where services wrongfully lead + ;; PID 1 to read from stdin (the console), which users may not + ;; have access to (see <https://bugs.gnu.org/23697>). + (redirect-port (open-input-file "/dev/null") + (current-input-port)))))) (scheme-file "shepherd.conf" config))) diff --git a/gnu/services/web.scm b/gnu/services/web.scm index fcf453c248..d71fed20ed 100644 --- a/gnu/services/web.scm +++ b/gnu/services/web.scm @@ -142,6 +142,7 @@ php-fpm-configuration-log-file php-fpm-configuration-process-manager php-fpm-configuration-display-errors + php-fpm-configuration-timezone php-fpm-configuration-workers-log-file php-fpm-configuration-file @@ -773,6 +774,8 @@ of index files." (default (php-fpm-dynamic-process-manager-configuration))) (display-errors php-fpm-configuration-display-errors (default #f)) + (timezone php-fpm-configuration-timezone + (default #f)) (workers-log-file php-fpm-configuration-workers-log-file (default (string-append "/var/log/php" (version-major (package-version php)) @@ -827,7 +830,7 @@ of index files." (shell (file-append shadow "/sbin/nologin"))))))) (define (default-php-fpm-config socket user group socket-user socket-group - pid-file log-file pm display-errors workers-log-file) + pid-file log-file pm display-errors timezone workers-log-file) (apply mixed-text-file "php-fpm.conf" (flatten "[global]\n" @@ -840,6 +843,10 @@ of index files." "listen.owner =" socket-user "\n" "listen.group =" socket-group "\n" + (if timezone + (string-append "php_admin_value[date.timezone] = \"" timezone "\"\n") + "") + (match pm (($ <php-fpm-dynamic-process-manager-configuration> pm.max-children @@ -879,7 +886,8 @@ of index files." (define php-fpm-shepherd-service (match-lambda (($ <php-fpm-configuration> php socket user group socket-user socket-group - pid-file log-file pm display-errors workers-log-file file) + pid-file log-file pm display-errors + timezone workers-log-file file) (list (shepherd-service (provision '(php-fpm)) (documentation "Run the php-fpm daemon.") @@ -890,27 +898,27 @@ of index files." #$(or file (default-php-fpm-config socket user group socket-user socket-group pid-file log-file - pm display-errors workers-log-file))) + pm display-errors timezone workers-log-file))) #:pid-file #$pid-file)) (stop #~(make-kill-destructor))))))) -(define php-fpm-activation - (match-lambda - (($ <php-fpm-configuration> _ _ user _ _ _ _ log-file _ _ workers-log-file _) - #~(begin - (use-modules (guix build utils)) - (let* ((user (getpwnam #$user)) - (touch (lambda (file-name) - (call-with-output-file file-name (const #t)))) - (init-log-file - (lambda (file-name) - (when #$workers-log-file - (when (not (file-exists? file-name)) - (touch file-name)) - (chown file-name (passwd:uid user) (passwd:gid user)) - (chmod file-name #o660))))) - (init-log-file #$log-file) - (init-log-file #$workers-log-file)))))) +(define (php-fpm-activation config) + #~(begin + (use-modules (guix build utils)) + (let* ((user (getpwnam #$(php-fpm-configuration-user config))) + (touch (lambda (file-name) + (call-with-output-file file-name (const #t)))) + (workers-log-file + #$(php-fpm-configuration-workers-log-file config)) + (init-log-file + (lambda (file-name) + (when workers-log-file + (when (not (file-exists? file-name)) + (touch file-name)) + (chown file-name (passwd:uid user) (passwd:gid user)) + (chmod file-name #o660))))) + (init-log-file #$(php-fpm-configuration-log-file config)) + (init-log-file workers-log-file)))) (define php-fpm-service-type diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm index ea8433af3a..b3c24746d1 100644 --- a/gnu/services/xorg.scm +++ b/gnu/services/xorg.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2017 Andy Wingo <wingo@igalia.com> ;;; Copyright © 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com> +;;; Copyright © 2018 Timothy Sample <samplet@ngyro.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -625,7 +626,6 @@ makes the good ol' XlockMore usable." gdm-configuration? (gdm gdm-configuration-gdm (default gdm)) (allow-empty-passwords? gdm-configuration-allow-empty-passwords? (default #t)) - (allow-root? gdm-configuration-allow-root? (default #t)) (auto-login? gdm-configuration-auto-login? (default #f)) (default-user gdm-configuration-default-user (default #f)) (x-server gdm-configuration-x-server)) @@ -680,18 +680,15 @@ makes the good ol' XlockMore usable." (auth (list (pam-entry (control "required") (module "pam_permit.so"))))) - (unix-pam-service - "gdm-password" - #:allow-empty-passwords? (gdm-configuration-allow-empty-passwords? config) - #:allow-root? (gdm-configuration-allow-root? config)))) + (unix-pam-service "gdm-password" + #:allow-empty-passwords? + (gdm-configuration-allow-empty-passwords? config)))) (define (gdm-shepherd-service config) (list (shepherd-service (documentation "Xorg display server (GDM)") (provision '(xorg-server)) (requirement '(dbus-system user-processes host-name udev)) - ;; While this service isn't working properly, turn off auto-start. - (auto-start? #f) (start #~(lambda () (fork+exec-command (list #$(file-append (gdm-configuration-gdm config) diff --git a/gnu/system.scm b/gnu/system.scm index 070b624b8a..95dcc14dc5 100644 --- a/gnu/system.scm +++ b/gnu/system.scm @@ -21,6 +21,7 @@ ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (gnu system) + #:use-module (guix inferior) #:use-module (guix store) #:use-module (guix monads) #:use-module (guix gexp) @@ -928,10 +929,17 @@ listed in OS. The C library expects to find it under (define (kernel->boot-label kernel) "Return a label for the bootloader menu entry that boots KERNEL." - (string-append "GNU with " - (string-titlecase (package-name kernel)) " " - (package-version kernel) - " (beta)")) + (cond ((package? kernel) + (string-append "GNU with " + (string-titlecase (package-name kernel)) " " + (package-version kernel) + " (beta)")) + ((inferior-package? kernel) + (string-append "GNU with " + (string-titlecase (inferior-package-name kernel)) " " + (inferior-package-version kernel) + " (beta)")) + (else "GNU"))) (define (store-file-system file-systems) "Return the file system object among FILE-SYSTEMS that contains the store." diff --git a/gnu/system/examples/vm-image.tmpl b/gnu/system/examples/vm-image.tmpl index 36e272722d..f149f67113 100644 --- a/gnu/system/examples/vm-image.tmpl +++ b/gnu/system/examples/vm-image.tmpl @@ -24,6 +24,8 @@ partprobe, and then 2) resizing the filesystem with resize2fs.\n")) (timezone "Etc/UTC") (locale "en_US.utf8") +(firmware '()) + ;; Assuming /dev/sdX is the target hard disk, and "my-root" is ;; the label of the target root file system. (bootloader (bootloader-configuration diff --git a/gnu/tests/base.scm b/gnu/tests/base.scm index 03392cef38..8d4e218a8f 100644 --- a/gnu/tests/base.scm +++ b/gnu/tests/base.scm @@ -123,6 +123,21 @@ initialization step, such as entering a LUKS passphrase." #f)))) marionette)) + (test-eq "stdin is /dev/null" + 'eof + ;; Make sure services can no longer read from stdin once the + ;; system has booted. + (marionette-eval + `(begin + (use-modules (gnu services herd)) + (start 'user-processes) + ((@@ (gnu services herd) eval-there) + '(let ((result (read (current-input-port)))) + (if (eof-object? result) + 'eof + result)))) + marionette)) + (test-assert "shell and user commands" ;; Is everything in $PATH? (zero? (marionette-eval '(system " diff --git a/gnu/tests/desktop.scm b/gnu/tests/desktop.scm index be64c4e7e5..6aa22fd49b 100644 --- a/gnu/tests/desktop.scm +++ b/gnu/tests/desktop.scm @@ -50,7 +50,7 @@ ;; Log in as root on tty1, and check what 'loginctl' returns. (test-equal "login on tty1" - '(("c1" "0" "root" "seat0" "/dev/tty1") ;session + '(("c1" "0" "root" "seat0" "tty1") ;session ("seat0") ;seat ("0" "root")) ;user diff --git a/gnu/tests/install.scm b/gnu/tests/install.scm index 4764ffffde..72e5523942 100644 --- a/gnu/tests/install.scm +++ b/gnu/tests/install.scm @@ -149,7 +149,7 @@ export GUIX_BUILD_OPTIONS=--no-grafts guix build isc-dhcp parted --script /dev/vdb mklabel gpt \\ mkpart primary ext2 1M 3M \\ - mkpart primary ext2 3M 1G \\ + mkpart primary ext2 3M 1.2G \\ set 1 boot on \\ set 1 bios_grub on mkfs.ext4 -L my-root /dev/vdb2 @@ -174,7 +174,7 @@ guix --version export GUIX_BUILD_OPTIONS=--no-grafts guix build isc-dhcp parted --script /dev/vdb mklabel gpt \\ - mkpart ext2 1M 1G \\ + mkpart ext2 1M 1.2G \\ set 1 legacy_boot on mkfs.ext4 -L my-root -O '^64bit' /dev/vdb1 mount /dev/vdb1 /mnt @@ -377,7 +377,7 @@ export GUIX_BUILD_OPTIONS=--no-grafts guix build isc-dhcp parted --script /dev/vda mklabel gpt \\ mkpart primary ext2 1M 3M \\ - mkpart primary ext2 3M 1G \\ + mkpart primary ext2 3M 1.2G \\ set 1 boot on \\ set 1 bios_grub on mkfs.ext4 -L my-root /dev/vda2 @@ -510,7 +510,7 @@ guix build isc-dhcp parted --script /dev/vdb mklabel gpt \\ mkpart primary ext2 1M 3M \\ mkpart primary ext2 3M 100M \\ - mkpart primary ext2 100M 1G \\ + mkpart primary ext2 100M 1.2G \\ set 1 boot on \\ set 1 bios_grub on mkfs.ext4 -L root-fs /dev/vdb2 @@ -676,7 +676,7 @@ export GUIX_BUILD_OPTIONS=--no-grafts ls -l /run/current-system/gc-roots parted --script /dev/vdb mklabel gpt \\ mkpart primary ext2 1M 3M \\ - mkpart primary ext2 3M 1G \\ + mkpart primary ext2 3M 1.2G \\ set 1 boot on \\ set 1 bios_grub on echo -n thepassphrase | \\ diff --git a/gnu/tests/messaging.scm b/gnu/tests/messaging.scm index 36afb987af..176e3d08cb 100644 --- a/gnu/tests/messaging.scm +++ b/gnu/tests/messaging.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org> ;;; Copyright © 2017, 2018 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il> ;;; ;;; This file is part of GNU Guix. ;;; @@ -29,7 +30,8 @@ #:use-module (guix store) #:use-module (guix modules) #:export (%test-prosody - %test-bitlbee)) + %test-bitlbee + %test-quassel)) (define (run-xmpp-test name xmpp-service pid-file create-account) "Run a test of an OS running XMPP-SERVICE, which writes its PID to PID-FILE." @@ -239,3 +241,53 @@ (name "bitlbee") (description "Connect to a BitlBee IRC server.") (value (run-bitlbee-test)))) + +(define (run-quassel-test) + (define os + (marionette-operating-system + (simple-operating-system (service dhcp-client-service-type) + (service quassel-service-type)) + #:imported-modules (source-module-closure + '((gnu services herd))))) + + (define vm + (virtual-machine + (operating-system os) + (port-forwardings `((4242 . 4242))))) + + (define test + (with-imported-modules '((gnu build marionette)) + #~(begin + (use-modules (srfi srfi-64) + (gnu build marionette)) + + (define marionette + (make-marionette (list #$vm))) + + (mkdir #$output) + (chdir #$output) + + (test-begin "quassel") + + (test-assert "service started" + (marionette-eval + '(begin + (use-modules (gnu services herd)) + (start-service 'quassel)) + marionette)) + + (test-assert "certificate file" + (marionette-eval + '(file-exists? "/var/lib/quassel/quasselCert.pem") + marionette)) + + (test-end) + (exit (= (test-runner-fail-count (test-runner-current)) 0))))) + + (gexp->derivation "quassel-test" test)) + +(define %test-quassel + (system-test + (name "quassel") + (description "Connect to a quassel IRC server.") + (value (run-quassel-test)))) diff --git a/gnu/tests/monitoring.scm b/gnu/tests/monitoring.scm index 3320a19a77..ab72682aed 100644 --- a/gnu/tests/monitoring.scm +++ b/gnu/tests/monitoring.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2018 Gábor Boskovits <boskovits@gmail.com> +;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -17,13 +18,21 @@ ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (gnu tests monitoring) + #:use-module (gnu packages databases) + #:use-module (gnu packages monitoring) + #:use-module (gnu packages php) #:use-module (gnu services) #:use-module (gnu services monitoring) #:use-module (gnu services networking) + #:use-module (gnu services databases) + #:use-module (gnu services shepherd) + #:use-module (gnu services web) #:use-module (gnu system vm) + #:use-module (gnu system) #:use-module (gnu tests) #:use-module (guix gexp) - #:export (%test-prometheus-node-exporter)) + #:export (%test-prometheus-node-exporter + %test-zabbix)) ;;; @@ -95,3 +104,224 @@ (description "Connect to a running prometheus-node-exporter server.") (value (run-prometheus-node-exporter-server-test name %prometheus-node-exporter-os)))) + + +;;; +;;; Zabbix +;;; + +(define %psql-user-create-zabbix + "\ +sudo -u postgres psql <<< \"create user zabbix password 'zabbix';\" +") + +(define %psql-db-zabbix-create-script + "\ +sudo -u postgres psql --no-align <<< \\\\du +") + +(define %psql-db-create-zabbix + "\ +sudo -u postgres createdb -O zabbix -E Unicode -T template0 zabbix +") + +(define %psql-db-import-zabbix + #~(format #f "\ +cat ~a | sudo -u zabbix psql zabbix; +cat ~a | sudo -u zabbix psql zabbix; +cat ~a | sudo -u zabbix psql zabbix; +" + (string-append #$zabbix-server:schema + "/database/postgresql/schema.sql") + (string-append #$zabbix-server:schema + "/database/postgresql/images.sql") + (string-append #$zabbix-server:schema + "/database/postgresql/data.sql"))) + +(define* (run-zabbix-server-test name test-os) + "Run tests in %ZABBIX-OS, which has zabbix running." + (define os + (marionette-operating-system + test-os + #:imported-modules '((gnu services herd)))) + + (define vm + (virtual-machine + (operating-system os) + (port-forwardings '((8080 . 80))) + (memory-size 1024))) + + (define test + (with-imported-modules '((gnu build marionette)) + #~(begin + (use-modules (srfi srfi-11) + (srfi srfi-64) + (gnu build marionette) + (web client) + (web response) + (ice-9 popen) + (ice-9 rdelim)) + + (define marionette + (make-marionette (list #$vm))) + + (mkdir #$output) + (chdir #$output) + + (test-begin #$name) + + ;; XXX: Shepherd reads the config file *before* binding its control + ;; socket, so /var/run/shepherd/socket might not exist yet when the + ;; 'marionette' service is started. + (test-assert "shepherd socket ready" + (marionette-eval + `(begin + (use-modules (gnu services herd)) + (let loop ((i 10)) + (cond ((file-exists? (%shepherd-socket-file)) + #t) + ((> i 0) + (sleep 1) + (loop (- i 1))) + (else + 'failure)))) + marionette)) + + (test-assert "postgres service running" + (marionette-eval + '(begin + (use-modules (gnu services herd)) + (start-service 'postgres)) + marionette)) + + (test-eq "postgres create zabbix user" + 0 + (marionette-eval '(begin (system #$%psql-user-create-zabbix)) + marionette)) + + (test-equal "postgres find zabbix user" + "List of roles +Role name|Attributes|Member of +postgres|Superuser, Create role, Create DB, Replication, Bypass RLS|{} +zabbix||{} +" + (marionette-eval + '(begin (let* ((port (open-pipe #$%psql-db-zabbix-create-script + OPEN_READ)) + (output (read-string port)) + (status (close-pipe port))) + output)) + marionette)) + + (test-eq "postgres create zabbix db" + 0 + (marionette-eval '(begin (system #$%psql-db-create-zabbix)) + marionette)) + + (test-eq "postgres import zabbix db" + 0 + (marionette-eval '(begin (system #$%psql-db-import-zabbix)) + marionette)) + + ;; Wait for zabbix-server to be up and running. + (test-assert "zabbix-server running" + (marionette-eval + '(begin + (use-modules (gnu services herd)) + (start-service 'zabbix-server)) + marionette)) + + ;; Make sure the PID file is created. + (test-assert "zabbix-server PID file" + (marionette-eval + '(file-exists? "/var/run/zabbix/zabbix_server.pid") + marionette)) + + ;; Wait for zabbix-agent to be up and running. + (test-assert "zabbix-agent running" + (marionette-eval + '(begin + (use-modules (gnu services herd)) + (start-service 'zabbix-agent)) + marionette)) + + ;; Make sure the PID file is created. + (test-assert "zabbix-agent PID file" + (marionette-eval + '(file-exists? "/var/run/zabbix/zabbix_agent.pid") + marionette)) + + ;; Wait for php-fpm to be up and running. + (test-assert "php-fpm running" + (marionette-eval + '(begin + (use-modules (gnu services herd)) + (start-service 'php-fpm)) + marionette)) + + ;; Wait for nginx to be up and running. + (test-assert "nginx running" + (marionette-eval + '(begin + (use-modules (gnu services herd)) + (start-service 'nginx)) + marionette)) + + ;; Make sure the PID file is created. + (test-assert "nginx PID file" + (marionette-eval + '(file-exists? "/var/run/nginx/pid") + marionette)) + + ;; Make sure we can access pages that correspond to our repository. + (letrec-syntax ((test-url + (syntax-rules () + ((_ path code) + (test-equal (string-append "GET " path) + code + (let-values (((response body) + (http-get (string-append + "http://localhost:8080" + path)))) + (response-code response)))) + ((_ path) + (test-url path 200))))) + (test-url "/") + (test-url "/does-not-exist" 404)) + + (test-end) + + (exit (= (test-runner-fail-count (test-runner-current)) 0))))) + + (gexp->derivation (string-append name "-test") test)) + +(define %zabbix-os + ;; Return operating system under test. + (let ((base-os + (simple-operating-system + (service dhcp-client-service-type) + (postgresql-service) + (service zabbix-front-end-service-type + (zabbix-front-end-configuration + (db-password "zabbix"))) + + (service php-fpm-service-type + (php-fpm-configuration + (timezone "Europe/Paris") + (php php-with-bcmath))) + + (service zabbix-server-service-type + (zabbix-server-configuration + (db-password "zabbix") + (log-type "console"))) + + (service zabbix-agent-service-type)))) + (operating-system + (inherit base-os) + (packages (cons* postgresql (operating-system-packages base-os)))))) + +(define %test-zabbix + (system-test + (name "zabbix") + (description "Connect to a running Zabbix") + (value (run-zabbix-server-test name %zabbix-os)))) diff --git a/guix/build-system/dune.scm b/guix/build-system/dune.scm new file mode 100644 index 0000000000..8bd41c89f0 --- /dev/null +++ b/guix/build-system/dune.scm @@ -0,0 +1,159 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2016, 2017, 2018 Julien Lepiller <julien@lepiller.eu> +;;; Copyright © 2017 Ben Woodcroft <donttrustben@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 (guix build-system dune) + #:use-module (guix store) + #:use-module (guix utils) + #:use-module (guix derivations) + #:use-module (guix search-paths) + #:use-module (guix build-system) + #:use-module ((guix build-system gnu) #:prefix gnu:) + #:use-module ((guix build-system ocaml) #:prefix ocaml:) + #:use-module (guix packages) + #:use-module (ice-9 match) + #:use-module (srfi srfi-1) + #:export (%dune-build-system-modules + dune-build + dune-build-system)) + +;; Commentary: +;; +;; Standard build procedure for packages using dune. This is implemented as an +;; extension of `ocaml-build-system'. +;; +;; Code: + +(define %dune-build-system-modules + ;; Build-side modules imported by default. + `((guix build dune-build-system) + ,@ocaml:%ocaml-build-system-modules)) + +(define (default-dune) + "Return the default OCaml package." + + ;; Do not use `@' to avoid introducing circular dependencies. + (let ((module (resolve-interface '(gnu packages ocaml)))) + (module-ref module 'dune))) + +(define* (lower name + #:key source inputs native-inputs outputs system target + (dune (default-dune)) + (ocaml (ocaml:default-ocaml)) + (findlib (ocaml:default-findlib)) + #:allow-other-keys + #:rest arguments) + "Return a bag for NAME." + (define private-keywords + '(#:source #:target #:dune #:findlib #:ocaml #:inputs #:native-inputs)) + + (and (not target) ;XXX: no cross-compilation + (let ((base (ocaml:lower name + #:source source + #:inputs inputs + #:native-inputs native-inputs + #:outputs outputs + #:system system + #:target target + #:ocaml ocaml + #:findlib findlib + arguments))) + (bag + (inherit base) + (build-inputs `(("dune" ,dune) + ,@(bag-build-inputs base))) + (build dune-build) + (arguments (strip-keyword-arguments private-keywords arguments)))))) + +(define* (dune-build store name inputs + #:key (guile #f) + (outputs '("out")) + (search-paths '()) + (build-flags ''()) + (out-of-source? #t) + (jbuild? #f) + (tests? #t) + (test-flags ''()) + (test-target "test") + (install-target "install") + (validate-runpath? #t) + (patch-shebangs? #t) + (strip-binaries? #t) + (strip-flags ''("--strip-debug")) + (strip-directories ''("lib" "lib64" "libexec" + "bin" "sbin")) + (phases '(@ (guix build dune-build-system) + %standard-phases)) + (system (%current-system)) + (imported-modules %dune-build-system-modules) + (modules '((guix build dune-build-system) + (guix build utils)))) + "Build SOURCE using OCAML, and with INPUTS. This assumes that SOURCE +provides a 'setup.ml' file as its build system." + (define builder + `(begin + (use-modules ,@modules) + (dune-build #:source ,(match (assoc-ref inputs "source") + (((? derivation? source)) + (derivation->output-path source)) + ((source) + source) + (source + source)) + #:system ,system + #:outputs %outputs + #:inputs %build-inputs + #:search-paths ',(map search-path-specification->sexp + search-paths) + #:phases ,phases + #:test-flags ,test-flags + #:build-flags ,build-flags + #:out-of-source? ,out-of-source? + #:jbuild? ,jbuild? + #:tests? ,tests? + #:test-target ,test-target + #:install-target ,install-target + #:validate-runpath? ,validate-runpath? + #:patch-shebangs? ,patch-shebangs? + #:strip-binaries? ,strip-binaries? + #:strip-flags ,strip-flags + #:strip-directories ,strip-directories))) + + (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 inputs + #:modules imported-modules + #:outputs outputs + #:guile-for-build guile-for-build)) + +(define dune-build-system + (build-system + (name 'dune) + (description "The standard Dune build system") + (lower lower))) + +;;; dune.scm ends here diff --git a/guix/build-system/ocaml.scm b/guix/build-system/ocaml.scm index e5b715f55d..07c69fac76 100644 --- a/guix/build-system/ocaml.scm +++ b/guix/build-system/ocaml.scm @@ -31,6 +31,9 @@ package-with-ocaml4.02 strip-ocaml4.01-variant strip-ocaml4.02-variant + default-findlib + default-ocaml + lower ocaml-build ocaml-build-system)) @@ -76,6 +79,13 @@ (let ((module (resolve-interface '(gnu packages ocaml)))) (module-ref module 'ocaml-findlib))) +(define (default-dune-build-system) + "Return the dune-build-system." + + ;; Do not use `@' to avoid introducing circular dependencies. + (let ((module (resolve-interface '(guix build-system dune)))) + (module-ref module 'dune-build-system))) + (define (default-ocaml4.01) (let ((ocaml (resolve-interface '(gnu packages ocaml)))) (module-ref ocaml 'ocaml-4.01))) @@ -119,7 +129,8 @@ pre-defined variants." => force) ;; Otherwise build the new package object graph. - ((eq? (package-build-system p) ocaml-build-system) + ((or (eq? (package-build-system p) ocaml-build-system) + (eq? (package-build-system p) (default-dune-build-system))) (package (inherit p) (location (package-location p)) @@ -138,7 +149,8 @@ pre-defined variants." (else p))) (define (cut? p) - (or (not (eq? (package-build-system p) ocaml-build-system)) + (or (not (or (eq? (package-build-system p) ocaml-build-system) + (eq? (package-build-system p) (default-dune-build-system)))) (package-variant p))) (package-mapping transform cut?)) diff --git a/guix/build/dune-build-system.scm b/guix/build/dune-build-system.scm new file mode 100644 index 0000000000..fcc2d6567d --- /dev/null +++ b/guix/build/dune-build-system.scm @@ -0,0 +1,69 @@ +;;; 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 build dune-build-system) + #:use-module ((guix build ocaml-build-system) #:prefix ocaml:) + #:use-module (guix build utils) + #:use-module (ice-9 match) + #:export (%standard-phases + dune-build)) + +;; Commentary: +;; +;; Builder-side code of the standard dune build procedure. +;; +;; Code: + +(define* (build #:key (build-flags '()) (jbuild? #f) + (use-make? #f) #:allow-other-keys) + "Build the given package." + (let ((program (if jbuild? "jbuilder" "dune"))) + (apply invoke program "build" "@install" build-flags)) + #t) + +(define* (check #:key (test-flags '()) (test-target "test") tests? + (jbuild? #f) #:allow-other-keys) + "Test the given package." + (when tests? + (let ((program (if jbuild? "jbuilder" "dune"))) + (apply invoke program "runtest" test-target test-flags))) + #t) + +(define* (install #:key outputs (install-target "install") (jbuild? #f) + #:allow-other-keys) + "Install the given package." + (let ((out (assoc-ref outputs "out")) + (program (if jbuild? "jbuilder" "dune"))) + (invoke program install-target "--prefix" out)) + #t) + +(define %standard-phases + ;; Everything is as with the GNU Build System except for the `configure' + ;; , `build', `check' and `install' phases. + (modify-phases ocaml:%standard-phases + (delete 'configure) + (replace 'build build) + (replace 'check check) + (replace 'install install))) + +(define* (dune-build #:key inputs (phases %standard-phases) + #:allow-other-keys #:rest args) + "Build the given package, applying all of PHASES in order." + (apply ocaml:ocaml-build #:inputs inputs #:phases phases args)) + +;;; dune-build-system.scm ends here diff --git a/guix/build/go-build-system.scm b/guix/build/go-build-system.scm index 022d4fe16b..4b026eebd6 100644 --- a/guix/build/go-build-system.scm +++ b/guix/build/go-build-system.scm @@ -130,7 +130,8 @@ unset. When SOURCE is a directory, copy it instead of unpacking." (define* (install-source #:key install-source? outputs #:allow-other-keys) "Install the source code to the output directory." - (let* ((out (assoc-ref outputs "out")) + (let* ((out (or (assoc-ref outputs "lib") + (assoc-ref outputs "out"))) (source "src") (dest (string-append out "/" source))) (when install-source? @@ -208,7 +209,9 @@ on $GOBIN in the build phase." ;; https://lists.gnu.org/archive/html/guix-devel/2018-11/msg00208.html). ;; Remove it? (when (file-exists? "pkg") - (copy-recursively "pkg" (string-append (assoc-ref outputs "out") "/pkg"))) + (copy-recursively "pkg" (string-append (or (assoc-ref outputs "lib") + (assoc-ref outputs "out")) + "/pkg"))) #t) (define* (remove-store-reference file file-name diff --git a/guix/channels.scm b/guix/channels.scm index e57da68149..75503bb0ae 100644 --- a/guix/channels.scm +++ b/guix/channels.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2018 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net> ;;; ;;; This file is part of GNU Guix. ;;; @@ -27,6 +28,7 @@ #:use-module (guix store) #:use-module (guix i18n) #:use-module (srfi srfi-1) + #:use-module (srfi srfi-2) #:use-module (srfi srfi-9) #:use-module (srfi srfi-11) #:autoload (guix self) (whole-package) @@ -73,7 +75,6 @@ (commit channel-commit (default #f)) (location channel-location (default (current-source-location)) (innate))) -;; TODO: Add a way to express dependencies among channels. (define %default-channels ;; Default list of channels. @@ -93,6 +94,12 @@ (commit channel-instance-commit) (checkout channel-instance-checkout)) +(define-record-type <channel-metadata> + (channel-metadata version dependencies) + channel-metadata? + (version channel-metadata-version) + (dependencies channel-metadata-dependencies)) + (define (channel-reference channel) "Return the \"reference\" for CHANNEL, an sexp suitable for 'latest-repository-commit'." @@ -100,20 +107,90 @@ (#f `(branch . ,(channel-branch channel))) (commit `(commit . ,(channel-commit channel))))) -(define (latest-channel-instances store channels) +(define (read-channel-metadata instance) + "Return a channel-metadata record read from the channel INSTANCE's +description file, or return #F if the channel instance does not include the +file." + (let* ((source (channel-instance-checkout instance)) + (meta-file (string-append source "/.guix-channel"))) + (and (file-exists? meta-file) + (and-let* ((raw (call-with-input-file meta-file read)) + (version (and=> (assoc-ref raw 'version) first)) + (dependencies (or (assoc-ref raw 'dependencies) '()))) + (channel-metadata + version + (map (lambda (item) + (let ((get (lambda* (key #:optional default) + (or (and=> (assoc-ref item key) first) default)))) + (and-let* ((name (get 'name)) + (url (get 'url)) + (branch (get 'branch "master"))) + (channel + (name name) + (branch branch) + (url url) + (commit (get 'commit)))))) + dependencies)))))) + +(define (channel-instance-dependencies instance) + "Return the list of channels that are declared as dependencies for the given +channel INSTANCE." + (match (read-channel-metadata instance) + (#f '()) + (($ <channel-metadata> version dependencies) + dependencies))) + +(define* (latest-channel-instances store channels #:optional (previous-channels '())) "Return a list of channel instances corresponding to the latest checkouts of -CHANNELS." - (map (lambda (channel) - (format (current-error-port) - (G_ "Updating channel '~a' from Git repository at '~a'...~%") - (channel-name channel) - (channel-url channel)) - (let-values (((checkout commit) - (latest-repository-commit store (channel-url channel) - #:ref (channel-reference - channel)))) - (channel-instance channel commit checkout))) - channels)) +CHANNELS and the channels on which they depend. PREVIOUS-CHANNELS is a list +of previously processed channels." + ;; Only process channels that are unique, or that are more specific than a + ;; previous channel specification. + (define (ignore? channel others) + (member channel others + (lambda (a b) + (and (eq? (channel-name a) (channel-name b)) + (or (channel-commit b) + (not (or (channel-commit a) + (channel-commit b)))))))) + ;; Accumulate a list of instances. A list of processed channels is also + ;; accumulated to decide on duplicate channel specifications. + (match (fold (lambda (channel acc) + (match acc + ((#:channels previous-channels #:instances instances) + (if (ignore? channel previous-channels) + acc + (begin + (format (current-error-port) + (G_ "Updating channel '~a' from Git repository at '~a'...~%") + (channel-name channel) + (channel-url channel)) + (let-values (((checkout commit) + (latest-repository-commit store (channel-url channel) + #:ref (channel-reference + channel)))) + (let ((instance (channel-instance channel commit checkout))) + (let-values (((new-instances new-channels) + (latest-channel-instances + store + (channel-instance-dependencies instance) + previous-channels))) + `(#:channels + ,(append (cons channel new-channels) + previous-channels) + #:instances + ,(append (cons instance new-instances) + instances)))))))))) + `(#:channels ,previous-channels #:instances ()) + channels) + ((#:channels channels #:instances instances) + (let ((instance-name (compose channel-name channel-instance-channel))) + ;; Remove all earlier channel specifications if they are followed by a + ;; more specific one. + (values (delete-duplicates instances + (lambda (a b) + (eq? (instance-name a) (instance-name b)))) + channels))))) (define* (checkout->channel-instance checkout #:key commit @@ -235,8 +312,21 @@ INSTANCES." (lambda (instance) (if (eq? instance core-instance) (return core) - (build-channel-instance instance - (cons core dependencies)))) + (match (channel-instance-dependencies instance) + (() + (build-channel-instance instance + (cons core dependencies))) + (channels + (mlet %store-monad ((dependencies-derivation + (latest-channel-derivation + ;; %default-channels is used here to + ;; ensure that the core channel is + ;; available for channels declared as + ;; dependencies. + (append channels %default-channels)))) + (build-channel-instance instance + (cons dependencies-derivation + (cons core dependencies)))))))) instances))) (define (whole-package-for-legacy name modules) diff --git a/guix/docker.scm b/guix/docker.scm index c6e9c6fee5..0f917f08bc 100644 --- a/guix/docker.scm +++ b/guix/docker.scm @@ -197,9 +197,11 @@ SRFI-19 time-utc object, as the creation time in metadata." ;; Initialize /var/guix, assuming PREFIX points to a profile. (install-database-and-gc-roots "." database prefix)) + (mkdir-p "gnu/store") (apply invoke "tar" "-cf" "layer.tar" `(,@transformation-options ,@%tar-determinism-options + "gnu" ,@paths ,@(if database '("var") '()) ,@(map symlink-source symlinks))) diff --git a/guix/download.scm b/guix/download.scm index a7f51b1999..25eaefcffa 100644 --- a/guix/download.scm +++ b/guix/download.scm @@ -411,17 +411,11 @@ (object->string %content-addressed-mirrors))) (define built-in-builders* - (let ((cache (make-weak-key-hash-table))) + (let ((proc (store-lift built-in-builders))) (lambda () "Return, as a monadic value, the list of built-in builders supported by -the daemon." - (lambda (store) - ;; Memoize the result to avoid repeated RPCs. - (values (or (hashq-ref cache store) - (let ((result (built-in-builders store))) - (hashq-set! cache store result) - result)) - store))))) +the daemon; cache the return value." + (mcached (proc) built-in-builders)))) (define* (built-in-download file-name url #:key system hash-algo hash diff --git a/guix/gexp.scm b/guix/gexp.scm index fd3b6be348..88cabc8ed5 100644 --- a/guix/gexp.scm +++ b/guix/gexp.scm @@ -566,15 +566,15 @@ list." corresponding input list as a monadic value. When TARGET is true, use it as the cross-compilation target triplet." (with-monad %store-monad - (sequence %store-monad - (map (match-lambda - (((? struct? thing) sub-drv ...) - (mlet %store-monad ((drv (lower-object - thing system #:target target))) - (return `(,drv ,@sub-drv)))) - (input - (return input))) - inputs)))) + (mapm %store-monad + (match-lambda + (((? struct? thing) sub-drv ...) + (mlet %store-monad ((drv (lower-object + thing system #:target target))) + (return `(,drv ,@sub-drv)))) + (input + (return input))) + inputs))) (define* (lower-reference-graphs graphs #:key system target) "Given GRAPHS, a list of (FILE-NAME INPUT ...) lists for use as a @@ -606,7 +606,7 @@ names and file names suitable for the #:allowed-references argument to #:target target))) (return (derivation->output-path drv)))))) - (sequence %store-monad (map lower lst)))) + (mapm %store-monad lower lst))) (define default-guile-derivation ;; Here we break the abstraction by talking to the higher-level layer. @@ -880,15 +880,15 @@ and in the current monad setting (system type, etc.)" #:system system #:target (if (or n? native?) #f target))) (($ <gexp-input> (refs ...) output n?) - (sequence %store-monad - (map (lambda (ref) - ;; XXX: Automatically convert REF to an gexp-input. - (reference->sexp - (if (gexp-input? ref) - ref - (%gexp-input ref "out" n?)) - (or n? native?))) - refs))) + (mapm %store-monad + (lambda (ref) + ;; XXX: Automatically convert REF to an gexp-input. + (reference->sexp + (if (gexp-input? ref) + ref + (%gexp-input ref "out" n?)) + (or n? native?))) + refs)) (($ <gexp-input> (? struct? thing) output n?) (let ((target (if (or n? native?) #f target)) (expand (lookup-expander thing))) @@ -902,8 +902,8 @@ and in the current monad setting (system type, etc.)" (return x))))) (mlet %store-monad - ((args (sequence %store-monad - (map reference->sexp (gexp-references exp))))) + ((args (mapm %store-monad + reference->sexp (gexp-references exp)))) (return (apply (gexp-proc exp) args)))) (define (syntax-location-string s) @@ -1117,8 +1117,7 @@ to the source files instead of copying them." (mlet %store-monad ((file (lower-object file-like system))) (return (list final-path file)))))) - (mlet %store-monad ((files (sequence %store-monad - (map file-pair files)))) + (mlet %store-monad ((files (mapm %store-monad file-pair files))) (define build (gexp (begin diff --git a/guix/import/cran.scm b/guix/import/cran.scm index 8f2c10258a..aaa1caf035 100644 --- a/guix/import/cran.scm +++ b/guix/import/cran.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2015, 2016, 2017 Ricardo Wurmus <rekado@elephly.net> +;;; Copyright © 2015, 2016, 2017, 2018 Ricardo Wurmus <rekado@elephly.net> ;;; Copyright © 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com> ;;; @@ -23,6 +23,7 @@ #:use-module (ice-9 regex) #:use-module ((ice-9 rdelim) #:select (read-string read-line)) #:use-module (srfi srfi-1) + #:use-module (srfi srfi-2) #:use-module (srfi srfi-26) #:use-module (srfi srfi-34) #:use-module (ice-9 receive) @@ -180,9 +181,9 @@ from ~s: ~a (~s)~%" ;; Currently, the bioconductor project does not offer a way to access a ;; package's DESCRIPTION file over HTTP, so we determine the version, ;; download the source tarball, and then extract the DESCRIPTION file. - (let* ((version (latest-bioconductor-package-version name)) - (url (car (bioconductor-uri name version))) - (tarball (with-store store (download-to-store store url)))) + (and-let* ((version (latest-bioconductor-package-version name)) + (url (car (bioconductor-uri name version))) + (tarball (with-store store (download-to-store store url)))) (call-with-temporary-directory (lambda (dir) (parameterize ((current-error-port (%make-void-port "rw+")) @@ -346,8 +347,12 @@ from the alist META, which was derived from the R package's DESCRIPTION file." (lambda* (package-name #:optional (repo 'cran)) "Fetch the metadata for PACKAGE-NAME from REPO and return the `package' s-expression corresponding to that package, or #f on failure." - (and=> (fetch-description repo package-name) - (cut description->package repo <>))))) + (let ((description (fetch-description repo package-name))) + (if (and (not description) + (eq? repo 'bioconductor)) + ;; Retry import from CRAN + (cran->guix-package package-name 'cran) + (description->package repo description)))))) (define* (cran-recursive-import package-name #:optional (repo 'gnu)) (recursive-import package-name repo diff --git a/guix/import/opam.scm b/guix/import/opam.scm index f252bdc31a..c42a5d767d 100644 --- a/guix/import/opam.scm +++ b/guix/import/opam.scm @@ -17,132 +17,108 @@ ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (guix import opam) + #:use-module (ice-9 ftw) #:use-module (ice-9 match) - #:use-module (ice-9 vlist) + #:use-module (ice-9 peg) + #:use-module (ice-9 receive) #:use-module ((ice-9 rdelim) #:select (read-line)) + #:use-module (ice-9 textual-ports) + #:use-module (ice-9 vlist) #:use-module (srfi srfi-1) + #:use-module (srfi srfi-2) #:use-module (web uri) #:use-module (guix http-client) + #:use-module (guix git) + #:use-module (guix ui) #: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 a PEG parser for the opam format +(define-peg-pattern SP none (or " " "\n")) +(define-peg-pattern SP2 body (or " " "\n")) +(define-peg-pattern QUOTE none "\"") +(define-peg-pattern QUOTE2 body "\"") +(define-peg-pattern COLON none ":") +;; A string character is any character that is not a quote, or a quote preceded by a backslash. +(define-peg-pattern STRCHR body + (or " " "!" (and (ignore "\\") "\"") + (and (ignore "\\") "\\") (range #\# #\頋))) +(define-peg-pattern operator all (or "=" "!" "<" ">")) + +(define-peg-pattern records body (* (and (or record weird-record) (* SP)))) +(define-peg-pattern record all (and key COLON (* SP) value)) +(define-peg-pattern weird-record all (and key (* SP) dict)) +(define-peg-pattern key body (+ (or (range #\a #\z) "-"))) +(define-peg-pattern value body (and (or conditional-value ground-value operator) (* SP))) +(define-peg-pattern ground-value body (and (or multiline-string string-pat list-pat var) (* SP))) +(define-peg-pattern conditional-value all (and ground-value (* SP) condition)) +(define-peg-pattern string-pat all (and QUOTE (* STRCHR) QUOTE)) +(define-peg-pattern list-pat all (and (ignore "[") (* SP) (* (and value (* SP))) (ignore "]"))) +(define-peg-pattern var all (+ (or (range #\a #\z) "-"))) +(define-peg-pattern multiline-string all + (and QUOTE QUOTE QUOTE (* SP) + (* (or SP2 STRCHR (and QUOTE2 (not-followed-by QUOTE)) + (and QUOTE2 QUOTE2 (not-followed-by QUOTE)))) + QUOTE QUOTE QUOTE)) +(define-peg-pattern dict all (and (ignore "{") (* SP) records (* SP) (ignore "}"))) + +(define-peg-pattern condition body (and (ignore "{") condition-form (ignore "}"))) + +(define-peg-pattern condition-form body + (and + (* SP) + (or condition-and condition-or condition-form2) + (* SP))) +(define-peg-pattern condition-form2 body + (and (* SP) (or condition-greater-or-equal condition-greater + condition-lower-or-equal condition-lower + condition-neq condition-eq condition-content) (* SP))) + +;(define-peg-pattern condition-operator all (and (ignore operator) (* SP) condition-string)) +(define-peg-pattern condition-greater-or-equal all (and (ignore (and ">" "=")) (* SP) condition-string)) +(define-peg-pattern condition-greater all (and (ignore ">") (* SP) condition-string)) +(define-peg-pattern condition-lower-or-equal all (and (ignore (and "<" "=")) (* SP) condition-string)) +(define-peg-pattern condition-lower all (and (ignore "<") (* SP) condition-string)) +(define-peg-pattern condition-and all (and condition-form2 (* SP) (? (ignore "&")) (* SP) condition-form)) +(define-peg-pattern condition-or all (and condition-form2 (* SP) (ignore "|") (* SP) condition-form)) +(define-peg-pattern condition-eq all (and condition-content (* SP) (ignore "=") (* SP) condition-content)) +(define-peg-pattern condition-neq all (and condition-content (* SP) (ignore (and "!" "=")) (* SP) condition-content)) +(define-peg-pattern condition-content body (or condition-string condition-var)) +(define-peg-pattern condition-content2 body (and condition-content (* SP) (not-followed-by (or "&" "=" "!")))) +(define-peg-pattern condition-string all (and QUOTE (* STRCHR) QUOTE)) +(define-peg-pattern condition-var all (+ (or (range #\a #\z) "-"))) + +(define (get-opam-repository) + "Update or fetch the latest version of the opam repository and return the +path to the repository." + (receive (location commit) + (update-cached-checkout "https://github.com/ocaml/opam-repository") + location)) (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 `()))) + (fold (lambda (a b) (if (version>? a b) a b)) (car versions) versions)) + +(define (find-latest-version package repository) + "Get the latest version of a package as described in the given repository." + (let* ((dir (string-append repository "/packages/" package)) + (versions (scandir dir (lambda (name) (not (string-prefix? "." name)))))) + (if versions + (let ((versions (map + (lambda (dir) + (string-join (cdr (string-split dir #\.)) ".")) + versions))) + (latest-version versions)) + (begin + (format #t (G_ "Package not found in opam repository: ~a~%") package) + #f)))) + +(define (get-metadata opam-file) + (with-input-from-file opam-file + (lambda _ + (peg:tree (match-pattern records (get-string-all (current-input-port))))))) (define (ocaml-name->guix-name name) (cond @@ -151,33 +127,85 @@ homepage, the license and the list of inputs." ((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 (metadata-ref file lookup) + (pk 'file file 'lookup lookup) + (fold (lambda (record acc) + (match record + ((record key val) + (if (equal? key lookup) + (match val + (('list-pat . stuff) stuff) + (('string-pat stuff) stuff) + (('multiline-string stuff) stuff) + (('dict records ...) records)) + acc)))) + #f file)) + +(define (native? condition) + (match condition + (('condition-var var) + (match var + ("with-test" #t) + ("test" #t) + ("build" #t) + (_ #f))) + ((or ('condition-or cond-left cond-right) ('condition-and cond-left cond-right)) + (or (native? cond-left) + (native? cond-right))) + (_ #f))) + +(define (dependency->input dependency) + (match dependency + (('string-pat str) str) + (('conditional-value val condition) + (if (native? condition) "" (dependency->input val))))) + +(define (dependency->native-input dependency) + (match dependency + (('string-pat str) "") + (('conditional-value val condition) + (if (native? condition) (dependency->input val) "")))) + +(define (ocaml-names->guix-names names) + (map ocaml-name->guix-name + (remove (lambda (name) + (or (equal? "" name)) + (equal? "ocaml" name)) + names))) + +(define (depends->inputs depends) + (filter (lambda (name) + (and (not (equal? "" name)) + (not (equal? "ocaml" name)) + (not (equal? "ocamlfind" name)))) + (map dependency->input depends))) + +(define (depends->native-inputs depends) + (filter (lambda (name) (not (equal? "" name))) + (map dependency->native-input depends))) + +(define (dependency-list->inputs lst) + (map + (lambda (dependency) + (list dependency (list 'unquote (string->symbol dependency)))) + (ocaml-names->guix-names lst))) (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))) + (and-let* ((repository (get-opam-repository)) + (version (find-latest-version name repository)) + (file (string-append repository "/packages/" name "/" name "." (pk 'version version) "/opam")) + (opam-content (get-metadata file)) + (url-dict (metadata-ref (pk 'metadata opam-content) "url")) + (source-url (metadata-ref url-dict "src")) + (requirements (metadata-ref opam-content "depends")) + (inputs (dependency-list->inputs (depends->inputs requirements))) + (native-inputs (dependency-list->inputs (depends->native-inputs requirements)))) (call-with-temporary-output-file (lambda (temp port) (and (url-fetch source-url temp) `(package (name ,(ocaml-name->guix-name name)) - (version ,version) + (version ,(metadata-ref opam-content "version")) (source (origin (method url-fetch) @@ -187,7 +215,10 @@ homepage, the license and the list of inputs." ,@(if (null? inputs) '() `((inputs ,(list 'quasiquote inputs)))) - (home-page ,(assoc-ref metadata "homepage")) - (synopsis "") - (description "") - (license ,@(string->license (assoc-ref metadata "license"))))))))))) + ,@(if (null? native-inputs) + '() + `((native-inputs ,(list 'quasiquote native-inputs)))) + (home-page ,(metadata-ref opam-content "homepage")) + (synopsis ,(metadata-ref opam-content "synopsis")) + (description ,(metadata-ref opam-content "description")) + (license #f))))))) diff --git a/guix/inferior.scm b/guix/inferior.scm index ccc1c27cb2..973bd5264e 100644 --- a/guix/inferior.scm +++ b/guix/inferior.scm @@ -54,6 +54,7 @@ #:use-module ((rnrs bytevectors) #:select (string->utf8)) #:export (inferior? open-inferior + port->inferior close-inferior inferior-eval inferior-eval-with-store @@ -93,10 +94,11 @@ ;; Inferior Guix process. (define-record-type <inferior> - (inferior pid socket version packages table) + (inferior pid socket close version packages table) inferior? (pid inferior-pid) (socket inferior-socket) + (close inferior-close-socket) ;procedure (version inferior-version) ;REPL protocol version (packages inferior-package-promise) ;promise of inferior packages (table inferior-package-table)) ;promise of vhash @@ -131,19 +133,17 @@ it's an old Guix." ((@ (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)) - +(define* (port->inferior pipe #:optional (close close-port)) + "Given PIPE, an input/output port, return an inferior that talks over PIPE. +PIPE is closed with CLOSE when 'close-inferior' is called on the returned +inferior." (cond-expand ((and guile-2 (not guile-2.2)) #t) (else (setvbuf pipe 'line))) (match (read pipe) (('repl-version 0 rest ...) - (letrec ((result (inferior 'pipe pipe (cons 0 rest) + (letrec ((result (inferior 'pipe pipe close (cons 0 rest) (delay (%inferior-packages result)) (delay (%inferior-package-table result))))) (inferior-eval '(use-modules (guix)) result) @@ -155,9 +155,18 @@ equivalent. Return #f if the inferior could not be launched." (_ #f))) +(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)) + + (port->inferior pipe close-pipe)) + (define (close-inferior inferior) "Close INFERIOR." - (close-pipe (inferior-socket inferior))) + (let ((close (inferior-close-socket inferior))) + (close (inferior-socket inferior)))) ;; Non-self-quoting object of the inferior. (define-record-type <inferior-object> @@ -409,6 +418,7 @@ thus be the code of a one-argument procedure that accepts a store." ;; Create a named socket in /tmp and let INFERIOR connect to it and use it ;; as its store. This ensures the inferior uses the same store, with the ;; same options, the same per-session GC roots, etc. + ;; FIXME: This strategy doesn't work for remote inferiors (SSH). (call-with-temporary-directory (lambda (directory) (chmod directory #o700) diff --git a/guix/packages.scm b/guix/packages.scm index eab0b3404c..e4c2ac3be5 100644 --- a/guix/packages.scm +++ b/guix/packages.scm @@ -870,14 +870,14 @@ OVERRIDES." SYSTEM." ;; FIXME: This memoization should be associated with the open store, because ;; otherwise it breaks when switching to a different store. - (let ((vals (call-with-values thunk list))) + (let ((result (thunk))) ;; Use `hashq-set!' instead of `hash-set!' because `hash' returns the ;; same value for all structs (as of Guile 2.0.6), and because pointer ;; equality is sufficient in practice. (hashq-set! cache package - `((,system ,@vals) + `((,system . ,result) ,@(or (hashq-ref cache package) '()))) - (apply values vals))) + result)) (define-syntax cached (syntax-rules (=>) @@ -889,10 +889,8 @@ Return the cached result when available." (match (hashq-ref cache package) ((alist (... ...)) (match (assoc-ref alist key) - ((vals (... ...)) - (apply values vals)) - (#f - (cache! cache package key thunk)))) + (#f (cache! cache package key thunk)) + (value value))) (#f (cache! cache package key thunk))))) ((_ package system body ...) diff --git a/guix/profiles.scm b/guix/profiles.scm index ba4446bc2f..8142e5e8e2 100644 --- a/guix/profiles.scm +++ b/guix/profiles.scm @@ -4,7 +4,7 @@ ;;; Copyright © 2014, 2016 Alex Kost <alezost@gmail.com> ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org> ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com> -;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net> +;;; Copyright © 2016, 2018 Ricardo Wurmus <rekado@elephly.net> ;;; Copyright © 2016 Chris Marusich <cmmarusich@gmail.com> ;;; Copyright © 2017 Huang Ying <huang.ying.caritas@gmail.com> ;;; Copyright © 2017 Maxim Cournoyer <maxim.cournoyer@gmail.com> @@ -788,7 +788,10 @@ MANIFEST." (gexp->derivation "info-dir" build #:local-build? #t - #:substitutable? #f)) + #:substitutable? #f + #:properties + `((type . profile-hook) + (hook . info-dir)))) (define (ghc-package-cache-file manifest) "Return a derivation that builds the GHC 'package.cache' file for all the @@ -842,7 +845,10 @@ entries of MANIFEST, or #f if MANIFEST does not have any GHC packages." (map manifest-entry-name (manifest-entries manifest))) (gexp->derivation "ghc-package-cache" build #:local-build? #t - #:substitutable? #f) + #:substitutable? #f + #:properties + `((type . profile-hook) + (hook . ghc-package-cache))) (return #f)))) (define (ca-certificate-bundle manifest) @@ -910,7 +916,10 @@ MANIFEST. Single-file bundles are required by programs such as Git and Lynx." (gexp->derivation "ca-certificate-bundle" build #:local-build? #t - #:substitutable? #f)) + #:substitutable? #f + #:properties + `((type . profile-hook) + (hook . ca-certificate-bundle)))) (define (glib-schemas manifest) "Return a derivation that unions all schemas from manifest entries and @@ -960,7 +969,10 @@ creates the Glib 'gschemas.compiled' file." (if %glib (gexp->derivation "glib-schemas" build #:local-build? #t - #:substitutable? #f) + #:substitutable? #f + #:properties + `((type . profile-hook) + (hook . glib-schemas))) (return #f)))) (define (gtk-icon-themes manifest) @@ -1016,7 +1028,10 @@ creates the GTK+ 'icon-theme.cache' file for each theme." (if %gtk+ (gexp->derivation "gtk-icon-themes" build #:local-build? #t - #:substitutable? #f) + #:substitutable? #f + #:properties + `((type . profile-hook) + (hook . gtk-icon-themes))) (return #f)))) (define (gtk-im-modules manifest) @@ -1088,7 +1103,10 @@ for both major versions of GTK+." (if (or gtk+ gtk+-2) (gexp->derivation "gtk-im-modules" gexp #:local-build? #t - #:substitutable? #f) + #:substitutable? #f + #:properties + `((type . profile-hook) + (hook . gtk-im-modules))) (return #f))))) (define (xdg-desktop-database manifest) @@ -1126,7 +1144,10 @@ MIME type." (if glib (gexp->derivation "xdg-desktop-database" build #:local-build? #t - #:substitutable? #f) + #:substitutable? #f + #:properties + `((type . profile-hook) + (hook . xdg-desktop-database))) (return #f)))) (define (xdg-mime-database manifest) @@ -1165,7 +1186,10 @@ entries. It's used to query the MIME type of a given file." (if glib (gexp->derivation "xdg-mime-database" build #:local-build? #t - #:substitutable? #f) + #:substitutable? #f + #:properties + `((type . profile-hook) + (hook . xdg-mime-database))) (return #f)))) ;; Several font packages may install font files into same directory, so @@ -1236,7 +1260,10 @@ files for the fonts of the @var{manifest} entries." (guix build union) (srfi srfi-26)) #:local-build? #t - #:substitutable? #f)) + #:substitutable? #f + #:properties + `((type . profile-hook) + (hook . fonts-dir)))) (define (manual-database manifest) "Return a derivation that builds the manual page database (\"mandb\") for @@ -1306,7 +1333,10 @@ the entries in MANIFEST." ;; <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=29654#23>. #:env-vars `(("MALLOC_PERTURB_" . "1")) - #:local-build? #t)) + #:local-build? #t + #:properties + `((type . profile-hook) + (hook . manual-database)))) (define %default-profile-hooks ;; This is the list of derivation-returning procedures that are called by @@ -1353,10 +1383,10 @@ are cross-built for TARGET." #:target target))) (extras (if (null? (manifest-entries manifest)) (return '()) - (sequence %store-monad - (map (lambda (hook) - (hook manifest)) - hooks))))) + (mapm %store-monad + (lambda (hook) + (hook manifest)) + hooks)))) (define inputs (append (filter-map (lambda (drv) (and (derivation? drv) diff --git a/guix/scripts/describe.scm b/guix/scripts/describe.scm index f21311af09..7d0ecb0a4d 100644 --- a/guix/scripts/describe.scm +++ b/guix/scripts/describe.scm @@ -89,7 +89,7 @@ Display information about the channels currently in use.\n")) (define (channel->sexp channel) `(channel - (name ,(channel-name channel)) + (name ',(channel-name channel)) (url ,(channel-url channel)) (commit ,(channel-commit channel)))) diff --git a/guix/scripts/environment.scm b/guix/scripts/environment.scm index 5965e3426e..86e1eb115f 100644 --- a/guix/scripts/environment.scm +++ b/guix/scripts/environment.scm @@ -162,6 +162,8 @@ COMMAND or an interactive shell in that environment.\n")) (newline) (show-build-options-help) (newline) + (show-transformation-options-help) + (newline) (display (G_ " -h, --help display this help and exit")) (display (G_ " @@ -261,7 +263,9 @@ COMMAND or an interactive shell in that environment.\n")) (option '("bootstrap") #f #f (lambda (opt name arg result) (alist-cons 'bootstrap? #t result))) - %standard-build-options)) + + (append %transformation-options + %standard-build-options))) (define (pick-all alist key) "Return a list of values in ALIST associated with KEY." @@ -274,7 +278,7 @@ COMMAND or an interactive shell in that environment.\n")) (_ memo))) '() alist)) -(define (options/resolve-packages opts) +(define (options/resolve-packages store opts) "Return OPTS with package specification strings replaced by manifest entries for the corresponding packages." (define (manifest-entry=? e1 e2) @@ -282,15 +286,21 @@ for the corresponding packages." (string=? (manifest-entry-output e1) (manifest-entry-output e2)))) + (define transform + (cut (options->transformation opts) store <>)) + + (define* (package->manifest-entry* package #:optional (output "out")) + (package->manifest-entry (transform package) output)) + (define (packages->outputs packages mode) (match packages ((? package? package) (if (eq? mode 'ad-hoc-package) - (list (package->manifest-entry 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)) + (list (package->manifest-entry* package output)) (package-environment-inputs package))) ((lst ...) (append-map (cut packages->outputs <> mode) lst)))) @@ -301,7 +311,7 @@ for the corresponding packages." (('package 'ad-hoc-package (? string? spec)) (let-values (((package output) (specification->package+output spec))) - (list (package->manifest-entry package output)))) + (list (package->manifest-entry* package output)))) (('package 'package (? string? spec)) (package-environment-inputs (specification->package+output spec))) @@ -364,8 +374,8 @@ requisite store items i.e. the union closure of all the inputs." ((? direct-store-path? path) (list path))))) - (mlet %store-monad ((reqs (sequence %store-monad - (map input->requisites inputs)))) + (mlet %store-monad ((reqs (mapm %store-monad + input->requisites inputs))) (return (delete-duplicates (concatenate reqs))))) (define (status->exit-code status) @@ -654,7 +664,6 @@ message if any test fails." ;; within the container. '("/bin/sh") (list %default-shell)))) - (manifest (options/resolve-packages opts)) (mappings (pick-all opts 'file-system-mapping))) (when container? (assert-container-features)) @@ -666,6 +675,9 @@ message if any test fails." (with-store store (with-status-report print-build-event + (define manifest + (options/resolve-packages store opts)) + (set-build-options-from-command-line store opts) ;; Use the bootstrap Guile when requested. diff --git a/guix/scripts/lint.scm b/guix/scripts/lint.scm index 2314f3b28c..2c1c7ec669 100644 --- a/guix/scripts/lint.scm +++ b/guix/scripts/lint.scm @@ -7,7 +7,8 @@ ;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com> ;;; Copyright © 2017 Alex Kost <alezost@gmail.com> ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr> -;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il> +;;; Copyright © 2017, 2018 Efraim Flashner <efraim@flashner.co.il> +;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net> ;;; ;;; This file is part of GNU Guix. ;;; @@ -44,8 +45,10 @@ #:use-module (guix cve) #:use-module (gnu packages) #:use-module (ice-9 match) + #:use-module (ice-9 receive) #:use-module (ice-9 regex) #:use-module (ice-9 format) + #:use-module (web client) #:use-module (web uri) #:use-module ((guix build download) #:select (maybe-expand-mirrors @@ -73,7 +76,9 @@ check-home-page check-source check-source-file-name + check-source-unstable-tarball check-mirror-url + check-github-url check-license check-vulnerabilities check-for-updates @@ -748,6 +753,22 @@ descriptions maintained upstream." (G_ "the source file name should contain the package name") 'source)))) +(define (check-source-unstable-tarball package) + "Emit a warning if PACKAGE's source is an autogenerated tarball." + (define (check-source-uri uri) + (when (and (string=? (uri-host (string->uri uri)) "github.com") + (string=? (third (split-and-decode-uri-path + (uri-path (string->uri uri)))) + "archive")) + (emit-warning package + (G_ "the source URI should not be an autogenerated tarball") + 'source))) + (let ((origin (package-source package))) + (when (and (origin? origin) + (eqv? (origin-method origin) url-fetch)) + (let ((uris (origin-uris origin))) + (for-each check-source-uri uris))))) + (define (check-mirror-url package) "Check whether PACKAGE uses source URLs that should be 'mirror://'." (define (check-mirror-uri uri) ;XXX: could be optimized @@ -773,6 +794,37 @@ descriptions maintained upstream." (let ((uris (origin-uris origin))) (for-each check-mirror-uri uris))))) +(define (check-github-url package) + "Check whether PACKAGE uses source URLs that redirect to GitHub." + (define (follow-redirect uri) + (receive (response body) (http-head uri) + (case (response-code response) + ((301 302) + (uri->string (assoc-ref (response-headers response) 'location))) + (else #f)))) + + (define (follow-redirects-to-github uri) + (cond + ((string-prefix? "https://github.com/" uri) uri) + ((string-prefix? "http" uri) + (and=> (follow-redirect uri) follow-redirects-to-github)) + ;; Do not attempt to follow redirects on URIs other than http and https + ;; (such as mirror, file) + (else #f))) + + (let ((origin (package-source package))) + (when (and (origin? origin) + (eqv? (origin-method origin) url-fetch)) + (for-each + (lambda (uri) + (and=> (follow-redirects-to-github uri) + (lambda (github-uri) + (emit-warning + package + (format #f (G_ "URL should be '~a'") github-uri) + 'source)))) + (origin-uris origin))))) + (define (check-derivation package) "Emit a warning if we fail to compile PACKAGE to a derivation." (define (try system) @@ -1056,10 +1108,18 @@ or a list thereof") (description "Suggest 'mirror://' URLs") (check check-mirror-url)) (lint-checker + (name 'github-uri) + (description "Suggest GitHub URIs") + (check check-github-url)) + (lint-checker (name 'source-file-name) (description "Validate file names of sources") (check check-source-file-name)) (lint-checker + (name 'source-unstable-tarball) + (description "Check for autogenerated tarballs") + (check check-source-unstable-tarball)) + (lint-checker (name 'derivation) (description "Report failure to compile a package to a derivation") (check check-derivation)) diff --git a/guix/scripts/offload.scm b/guix/scripts/offload.scm index ee5857e16b..30fe69ad6d 100644 --- a/guix/scripts/offload.scm +++ b/guix/scripts/offload.scm @@ -23,13 +23,12 @@ #:use-module (ssh session) #:use-module (ssh channel) #:use-module (ssh popen) - #:use-module (ssh dist) - #:use-module (ssh dist node) #:use-module (ssh version) #:use-module (guix config) #:use-module (guix records) #:use-module (guix ssh) #:use-module (guix store) + #:use-module (guix inferior) #:use-module (guix derivations) #:use-module ((guix serialization) #:select (nar-error? nar-error-file)) @@ -261,13 +260,6 @@ instead of '~a' of type '~a'~%") (lambda () (unlock-file port))))) -(define-syntax-rule (with-machine-lock machine hint exp ...) - "Wait to acquire MACHINE's exclusive lock for HINT, and evaluate EXP in that -context." - (with-file-lock (machine-lock-file machine hint) - exp ...)) - - (define (machine-slot-file machine slot) "Return the file name of MACHINE's file for SLOT." ;; For each machine we have a bunch of files representing each build slot. @@ -285,23 +277,25 @@ the slot, or #f if none is available. This mechanism allows us to set a hard limit on the number of simultaneous connections allowed to MACHINE." (mkdir-p (dirname (machine-slot-file machine 0))) - (with-machine-lock machine 'slots - (any (lambda (slot) - (let ((port (open-file (machine-slot-file machine slot) - "w0"))) - (catch 'flock-error - (lambda () - (fcntl-flock port 'write-lock #:wait? #f) - ;; Got it! - (format (current-error-port) - "process ~a acquired build slot '~a'~%" - (getpid) (port-filename port)) - port) - (lambda args - ;; PORT is already locked by another process. - (close-port port) - #f)))) - (iota (build-machine-parallel-builds machine))))) + + ;; When several 'guix offload' processes run in parallel, there's a race + ;; among them, but since they try the slots in the same order, we're fine. + (any (lambda (slot) + (let ((port (open-file (machine-slot-file machine slot) + "w0"))) + (catch 'flock-error + (lambda () + (fcntl-flock port 'write-lock #:wait? #f) + ;; Got it! + (format (current-error-port) + "process ~a acquired build slot '~a'~%" + (getpid) (port-filename port)) + port) + (lambda args + ;; PORT is already locked by another process. + (close-port port) + #f)))) + (iota (build-machine-parallel-builds machine)))) (define (release-build-slot slot) "Release SLOT, a build slot as returned as by 'acquire-build-slot'." @@ -321,6 +315,16 @@ hook." (set-port-revealed! port 1) port)) +(define (node-guile-version node) + (inferior-eval '(version) node)) + +(define (node-free-disk-space node) + "Return the free disk space, in bytes, in NODE's store." + (inferior-eval `(begin + (use-modules (guix build syscalls)) + (free-disk-space ,(%store-prefix))) + node)) + (define* (transfer-and-offload drv machine #:key (inputs '()) @@ -360,9 +364,23 @@ MACHINE." (derivation-file-name drv) (build-machine-name machine) (nix-protocol-error-message c)) - ;; Use exit code 100 for a permanent build failure. The daemon - ;; interprets other non-zero codes as transient build failures. - (primitive-exit 100))) + (let* ((inferior (false-if-exception (remote-inferior session))) + (space (false-if-exception + (node-free-disk-space inferior)))) + + (when inferior + (close-inferior inferior)) + + ;; Use exit code 100 for a permanent build failure. The daemon + ;; interprets other non-zero codes as transient build failures. + (if (and space (< space (* 10 (expt 2 20)))) + (begin + (format (current-error-port) + (G_ "build failure may have been caused by lack \ +of free disk space on '~a'~%") + (build-machine-name machine)) + (primitive-exit 1)) + (primitive-exit 100))))) (parameterize ((current-build-output-port (build-log-port))) (build-derivations store (list drv)))) @@ -392,43 +410,37 @@ MACHINE." (build-requirements-features requirements) (build-machine-features machine)))) -(define (machine-load machine) - "Return the load of MACHINE, divided by the number of parallel builds -allowed on MACHINE. Return +∞ if MACHINE is unreachable." - ;; Note: This procedure is costly since it creates a new SSH session. - (match (false-if-exception (open-ssh-session machine)) - ((? session? session) - (let* ((pipe (open-remote-pipe* session OPEN_READ - "cat" "/proc/loadavg")) - (line (read-line pipe))) - (close-port pipe) - (disconnect! session) - - (if (eof-object? line) - +inf.0 ;MACHINE does not respond, so assume it is infinitely loaded - (match (string-tokenize line) - ((one five fifteen . x) - (let* ((raw (string->number one)) - (jobs (build-machine-parallel-builds machine)) - (normalized (/ raw jobs))) - (format (current-error-port) "load on machine '~a' is ~s\ +(define %minimum-disk-space + ;; Minimum disk space required on the build machine for a build to be + ;; offloaded. This keeps us from offloading to machines that are bound to + ;; run out of disk space. + (* 100 (expt 2 20))) ;100 MiB + +(define (node-load node) + "Return the load on NODE. Return +∞ if NODE is misbehaving." + (let ((line (inferior-eval '(begin + (use-modules (ice-9 rdelim)) + (call-with-input-file "/proc/loadavg" + read-string)) + node))) + (if (eof-object? line) + +inf.0 ;MACHINE does not respond, so assume it is infinitely loaded + (match (string-tokenize line) + ((one five fifteen . x) + (string->number one)) + (x + +inf.0))))) + +(define (normalized-load machine load) + "Divide LOAD by the number of parallel builds of MACHINE." + (if (rational? load) + (let* ((jobs (build-machine-parallel-builds machine)) + (normalized (/ load jobs))) + (format (current-error-port) "load on machine '~a' is ~s\ (normalized: ~s)~%" - (build-machine-name machine) raw normalized) - normalized)) - (x - +inf.0))))) ;something's fishy about MACHINE, so avoid it - (x - +inf.0))) ;failed to connect to MACHINE, so avoid it - -(define (machine-lock-file machine hint) - "Return the name of MACHINE's lock file for HINT." - (string-append %state-directory "/offload/" - (build-machine-name machine) - "." (symbol->string hint) ".lock")) - -(define (machine-choice-lock-file) - "Return the name of the file used as a lock when choosing a build machine." - (string-append %state-directory "/offload/machine-choice.lock")) + (build-machine-name machine) load normalized) + normalized) + load)) (define (random-seed) (logxor (getpid) (car (gettimeofday)))) @@ -452,41 +464,44 @@ allowed on MACHINE. Return +∞ if MACHINE is unreachable." slot (which must later be released with 'release-build-slot'), or #f and #f." ;; Proceed like this: - ;; 1. Acquire the global machine-choice lock. - ;; 2. For all MACHINES, attempt to acquire a build slot, and filter out + ;; 1. For all MACHINES, attempt to acquire a build slot, and filter out ;; those machines for which we failed. - ;; 3. Choose the best machine among those that are left. - ;; 4. Release the previously-acquired build slots of the other machines. - ;; 5. Release the global machine-choice lock. - - (with-file-lock (machine-choice-lock-file) - (define machines+slots - (filter-map (lambda (machine) - (let ((slot (acquire-build-slot machine))) - (and slot (list machine slot)))) - (shuffle machines))) - - (define (undecorate pred) - (lambda (a b) - (match a - ((machine1 slot1) - (match b - ((machine2 slot2) - (pred machine1 machine2))))))) - - (define (machine-faster? m1 m2) - ;; Return #t if M1 is faster than M2. - (> (build-machine-speed m1) - (build-machine-speed m2))) - - (let loop ((machines+slots - (sort machines+slots (undecorate machine-faster?)))) - (match machines+slots - (((best slot) others ...) - ;; Return the best machine unless it's already overloaded. - ;; Note: We call 'machine-load' only as a last resort because it is - ;; too costly to call it once for every machine. - (if (< (machine-load best) 2.) + ;; 2. Choose the best machine among those that are left. + ;; 3. Release the previously-acquired build slots of the other machines. + + (define machines+slots + (filter-map (lambda (machine) + (let ((slot (acquire-build-slot machine))) + (and slot (list machine slot)))) + (shuffle machines))) + + (define (undecorate pred) + (lambda (a b) + (match a + ((machine1 slot1) + (match b + ((machine2 slot2) + (pred machine1 machine2))))))) + + (define (machine-faster? m1 m2) + ;; Return #t if M1 is faster than M2. + (> (build-machine-speed m1) + (build-machine-speed m2))) + + (let loop ((machines+slots + (sort machines+slots (undecorate machine-faster?)))) + (match machines+slots + (((best slot) others ...) + ;; Return the best machine unless it's already overloaded. + ;; Note: We call 'node-load' only as a last resort because it is + ;; too costly to call it once for every machine. + (let* ((session (false-if-exception (open-ssh-session best))) + (node (and session (remote-inferior session))) + (load (and node (normalized-load best (node-load node)))) + (space (and node (node-free-disk-space node)))) + (when node (close-inferior node)) + (when session (disconnect! session)) + (if (and node (< load 2.) (>= space %minimum-disk-space)) (match others (((machines slots) ...) ;; Release slots from the uninteresting machines. @@ -496,11 +511,17 @@ slot (which must later be released with 'release-build-slot'), or #f and #f." ;; eventually release it. (values best slot))) (begin - ;; BEST is overloaded, so try the next one. + ;; BEST is unsuitable, so try the next one. + (when (and space (< space %minimum-disk-space)) + (format (current-error-port) + "skipping machine '~a' because it is low \ +on disk space (~,2f MiB free)~%" + (build-machine-name best) + (/ space (expt 2 20) 1.))) (release-build-slot slot) - (loop others)))) - (() - (values #f #f)))))) + (loop others))))) + (() + (values #f #f))))) (define (call-with-timeout timeout drv thunk) "Call THUNK and leave after TIMEOUT seconds. If TIMEOUT is #f, simply call @@ -581,40 +602,34 @@ If TIMEOUT is #f, simply evaluate EXP..." (#f (report-guile-error name)) ((? string? version) - ;; Note: The version string already contains the word "Guile". - (info (G_ "'~a' is running ~a~%") + (info (G_ "'~a' is running GNU Guile ~a~%") name (node-guile-version node))))) (define (assert-node-has-guix node name) - "Bail out if NODE lacks the (guix) module, or if its daemon is not running." - (catch 'node-repl-error - (lambda () - (match (node-eval node - '(begin + "Bail out if NODE if #f or if we fail to use the (guix) module, or if its +daemon is not running." + (unless (inferior? node) + (leave (G_ "failed to run 'guix repl' on '~a'~%") name)) + + (match (inferior-eval '(begin (use-modules (guix)) - (and add-text-to-store 'alright))) - ('alright #t) - (_ (report-module-error name)))) - (lambda (key . args) - (report-module-error name))) + (and add-text-to-store 'alright)) + node) + ('alright #t) + (_ (report-module-error name))) - (catch 'node-repl-error - (lambda () - (match (node-eval node - '(begin + (match (inferior-eval '(begin (use-modules (guix)) (with-store store (add-text-to-store store "test" - "Hello, build machine!")))) - ((? string? str) - (info (G_ "Guix is usable on '~a' (test returned ~s)~%") - name str)) - (x - (leave (G_ "failed to talk to guix-daemon on '~a' (test returned ~s)~%") - name x)))) - (lambda (key . args) - (leave (G_ "remote evaluation on '~a' failed:~{ ~s~}~%") - name args)))) + "Hello, build machine!"))) + node) + ((? string? str) + (info (G_ "Guix is usable on '~a' (test returned ~s)~%") + name str)) + (x + (leave (G_ "failed to talk to guix-daemon on '~a' (test returned ~s)~%") + name x)))) (define %random-state (delay @@ -624,25 +639,23 @@ If TIMEOUT is #f, simply evaluate EXP..." (string-append name "-" (number->string (random 1000000 (force %random-state))))) -(define (assert-node-can-import node name daemon-socket) +(define (assert-node-can-import session node name daemon-socket) "Bail out if NODE refuses to import our archives." - (let ((session (node-session node))) - (with-store store - (let* ((item (add-text-to-store store "export-test" (nonce))) - (remote (connect-to-remote-daemon session daemon-socket))) - (with-store local - (send-files local (list item) remote)) - - (if (valid-path? remote item) - (info (G_ "'~a' successfully imported '~a'~%") - name item) - (leave (G_ "'~a' was not properly imported on '~a'~%") - item name)))))) - -(define (assert-node-can-export node name daemon-socket) + (with-store store + (let* ((item (add-text-to-store store "export-test" (nonce))) + (remote (connect-to-remote-daemon session daemon-socket))) + (with-store local + (send-files local (list item) remote)) + + (if (valid-path? remote item) + (info (G_ "'~a' successfully imported '~a'~%") + name item) + (leave (G_ "'~a' was not properly imported on '~a'~%") + item name))))) + +(define (assert-node-can-export session node name daemon-socket) "Bail out if we cannot import signed archives from NODE." - (let* ((session (node-session node)) - (remote (connect-to-remote-daemon session daemon-socket)) + (let* ((remote (connect-to-remote-daemon session daemon-socket)) (item (add-text-to-store remote "import-test" (nonce name)))) (with-store store (if (and (retrieve-files store (list item) remote) @@ -669,11 +682,13 @@ machine." (let* ((names (map build-machine-name machines)) (sockets (map build-machine-daemon-socket machines)) (sessions (map open-ssh-session machines)) - (nodes (map make-node sessions))) - (for-each assert-node-repl nodes names) + (nodes (map remote-inferior sessions))) (for-each assert-node-has-guix nodes names) - (for-each assert-node-can-import nodes names sockets) - (for-each assert-node-can-export nodes names sockets)))) + (for-each assert-node-repl nodes names) + (for-each assert-node-can-import sessions nodes names sockets) + (for-each assert-node-can-export sessions nodes names sockets) + (for-each close-inferior nodes) + (for-each disconnect! sessions)))) (define (check-machine-status machine-file pred) "Print the load of each machine matching PRED in MACHINE-FILE." @@ -689,16 +704,28 @@ machine." (info (G_ "getting status of ~a build machines defined in '~a'...~%") (length machines) machine-file) (for-each (lambda (machine) - (let* ((node (make-node (open-ssh-session machine))) - (uts (node-eval node '(uname)))) - (format #t "~a~% kernel: ~a ~a~% architecture: ~a~%\ - host name: ~a~% normalized load: ~a~%" - (build-machine-name machine) - (utsname:sysname uts) (utsname:release uts) - (utsname:machine uts) - (utsname:nodename uts) - (parameterize ((current-error-port (%make-void-port "rw+"))) - (machine-load machine))))) + (define session + (open-ssh-session machine)) + + (match (remote-inferior session) + (#f + (warning (G_ "failed to run 'guix repl' on machine '~a'~%") + (build-machine-name machine))) + ((? inferior? inferior) + (let ((uts (inferior-eval '(uname) inferior)) + (load (node-load inferior)) + (free (node-free-disk-space inferior))) + (close-inferior inferior) + (format #t "~a~% kernel: ~a ~a~% architecture: ~a~%\ + host name: ~a~% normalized load: ~a~% free disk space: ~,2f MiB~%" + (build-machine-name machine) + (utsname:sysname uts) (utsname:release uts) + (utsname:machine uts) + (utsname:nodename uts) + (normalized-load machine load) + (/ free (expt 2 20) 1.))))) + + (disconnect! session)) machines))) @@ -789,7 +816,6 @@ This tool is meant to be used internally by 'guix-daemon'.\n")) (leave (G_ "invalid arguments: ~{~s ~}~%") x)))) ;;; Local Variables: -;;; eval: (put 'with-machine-lock 'scheme-indent-function 2) ;;; eval: (put 'with-file-lock 'scheme-indent-function 1) ;;; eval: (put 'with-error-to-port 'scheme-indent-function 1) ;;; eval: (put 'with-timeout 'scheme-indent-function 2) diff --git a/guix/scripts/publish.scm b/guix/scripts/publish.scm index c5326b33da..a236f3e45c 100644 --- a/guix/scripts/publish.scm +++ b/guix/scripts/publish.scm @@ -537,14 +537,19 @@ requested using POOL." (not-found request)))) (define* (render-nar/cached store cache request store-item - #:key (compression %no-compression)) + #:key ttl (compression %no-compression)) "Respond to REQUEST with a nar for STORE-ITEM. If the nar is in CACHE, -return it; otherwise, return 404." +return it; otherwise, return 404. When TTL is true, use it as the +'Cache-Control' expiration time." (let ((cached (nar-cache-file cache store-item #:compression compression))) (if (file-exists? cached) (values `((content-type . (application/octet-stream (charset . "ISO-8859-1"))) + ,@(if ttl + `((cache-control (max-age . ,ttl))) + '()) + ;; XXX: We're not returning the actual contents, deferring ;; instead to 'http-write'. This is a hack to work around ;; <http://bugs.gnu.org/21093>. @@ -819,6 +824,7 @@ blocking." %default-gzip-compression)))) (if cache (render-nar/cached store cache request store-item + #:ttl narinfo-ttl #:compression compression) (render-nar store request store-item #:compression compression))) @@ -829,6 +835,7 @@ blocking." (if (nar-path? components) (if cache (render-nar/cached store cache request store-item + #:ttl narinfo-ttl #:compression %no-compression) (render-nar store request store-item #:compression %no-compression)) diff --git a/guix/scripts/pull.scm b/guix/scripts/pull.scm index dc83729911..862556d12b 100644 --- a/guix/scripts/pull.scm +++ b/guix/scripts/pull.scm @@ -126,6 +126,10 @@ Download and deploy the latest version of Guix.\n")) (lambda (opt name arg result) (alist-cons 'profile (canonicalize-profile arg) result))) + (option '(#\s "system") #t #f + (lambda (opt name arg result) + (alist-cons 'system arg + (alist-delete 'system result eq?)))) (option '(#\n "dry-run") #f #f (lambda (opt name arg result) (alist-cons 'dry-run? #t (alist-cons 'graft? #f result)))) @@ -505,7 +509,8 @@ Use '~/.config/guix/channels.scm' instead.")) (else (with-store store (with-status-report print-build-event - (parameterize ((%graft? (assoc-ref opts 'graft?)) + (parameterize ((%current-system (assoc-ref opts 'system)) + (%graft? (assoc-ref opts 'graft?)) (%repository-cache-directory cache)) (set-build-options-from-command-line store opts) (honor-x509-certificates store) diff --git a/guix/scripts/refresh.scm b/guix/scripts/refresh.scm index 60e822b16b..003c915da3 100644 --- a/guix/scripts/refresh.scm +++ b/guix/scripts/refresh.scm @@ -5,6 +5,7 @@ ;;; Copyright © 2015 Alex Kost <alezost@gmail.com> ;;; Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com> ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com> +;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il> ;;; ;;; This file is part of GNU Guix. ;;; @@ -40,6 +41,7 @@ #:use-module (ice-9 regex) #:use-module (ice-9 vlist) #:use-module (ice-9 format) + #:use-module (ice-9 threads) ; par-for-each #:use-module (srfi srfi-1) #:use-module (srfi srfi-11) #:use-module (srfi srfi-26) @@ -88,6 +90,12 @@ (option '(#\l "list-dependent") #f #f (lambda (opt name arg result) (alist-cons 'list-dependent? #t result))) + (option '(#\r "recursive") #f #f + (lambda (opt name arg result) + (alist-cons 'recursive? #t result))) + (option '("list-transitive") #f #f + (lambda (opt name arg result) + (alist-cons 'list-transitive? #t result))) (option '("keyring") #t #f (lambda (opt name arg result) @@ -140,6 +148,10 @@ specified with `--select'.\n")) (display (G_ " -l, --list-dependent list top-level dependent packages that would need to be rebuilt as a result of upgrading PACKAGE...")) + (display (G_ " + -r, --recursive check the PACKAGE and its inputs for upgrades")) + (display (G_ " + --list-transitive list all the packages that PACKAGE depends on")) (newline) (display (G_ " --keyring=FILE use FILE as the keyring of upstream OpenPGP keys")) @@ -179,24 +191,24 @@ specified with `--select'.\n")) (let* ((packages (fold-packages cons '())) (total (length packages))) - (define covered - (fold (lambda (updater covered) - (let ((matches (count (upstream-updater-predicate updater) - packages))) + (define uncovered + (fold (lambda (updater uncovered) + (let ((matches (filter (upstream-updater-predicate updater) + packages))) ;; TRANSLATORS: The parenthetical expression here is rendered ;; like "(42% coverage)" and denotes the fraction of packages ;; covered by the given updater. (format #t (G_ " - ~a: ~a (~2,1f% coverage)~%") (upstream-updater-name updater) (G_ (upstream-updater-description updater)) - (* 100. (/ matches total))) - (+ covered matches))) - 0 + (* 100. (/ (length matches) total))) + (lset-difference eq? uncovered matches))) + packages (force %updaters))) (newline) (format #t (G_ "~2,1f% of the packages are covered by these updaters.~%") - (* 100. (/ covered total)))) + (* 100. (/ (- total (length uncovered)) total)))) (exit 0)) (define (warn-no-updater package) @@ -323,6 +335,43 @@ dependent packages are rebuilt: ~{~a~^ ~}~%" (map full-name covering)))) (return #t)))) +(define (refresh-recursive packages) + "Check all of the package inputs of PACKAGES for newer upstream versions." + (mlet %store-monad ((edges (node-edges %bag-node-type + ;; Here we don't want the -boot0 packages. + (fold-packages cons '())))) + (let ((dependent (node-transitive-edges packages edges))) + ;; par-for-each has an undefined return value, so packages which cause + ;; errors can be ignored. + (par-for-each (lambda (package) + (guix-refresh package)) + (map package-name dependent))) + (return #t))) + +(define (list-transitive packages) + "List all the packages that would cause PACKAGES to be rebuilt if they are changed." + ;; Using %BAG-NODE-TYPE is more accurate than using %PACKAGE-NODE-TYPE + ;; because it includes implicit dependencies. + (define (full-name package) + (string-append (package-name package) "@" + (package-version package))) + + (mlet %store-monad ((edges (node-edges %bag-node-type + ;; Here we don't want the -boot0 packages. + (fold-packages cons '())))) + (let ((dependent (node-transitive-edges packages edges))) + (match packages + ((x) + (format (current-output-port) + (G_ "~a depends on the following ~d packages: ~{~a~^ ~}~%.") + (full-name x) (length dependent) (map full-name dependent))) + (lst + (format (current-output-port) + (G_ "The following ~d packages \ +all are dependent packages: ~{~a~^ ~}~%") + (length dependent) (map full-name dependent)))) + (return #t)))) + ;;; ;;; Manifest. @@ -402,7 +451,9 @@ update would trigger a complete rebuild." (let* ((opts (parse-options)) (update? (assoc-ref opts 'update?)) (updaters (options->updaters opts)) + (recursive? (assoc-ref opts 'recursive?)) (list-dependent? (assoc-ref opts 'list-dependent?)) + (list-transitive? (assoc-ref opts 'list-transitive?)) (key-download (assoc-ref opts 'key-download)) ;; Warn about missing updaters when a package is explicitly given on @@ -441,6 +492,10 @@ update would trigger a complete rebuild." (cond (list-dependent? (list-dependents packages)) + (list-transitive? + (list-transitive packages)) + (recursive? + (refresh-recursive packages)) (update? (parameterize ((%openpgp-key-server (or (assoc-ref opts 'key-server) diff --git a/guix/scripts/substitute.scm b/guix/scripts/substitute.scm index d6dc9b6448..53b1777241 100755 --- a/guix/scripts/substitute.scm +++ b/guix/scripts/substitute.scm @@ -392,12 +392,21 @@ No authentication and authorization checks are performed here!" (define (narinfo-sha256 narinfo) "Return the sha256 hash of NARINFO as a bytevector, or #f if NARINFO lacks a 'Signature' field." + (define %mandatory-fields + ;; List of fields that must be signed. If they are not signed, the + ;; narinfo is considered unsigned. + '("StorePath" "NarHash" "References")) + (let ((contents (narinfo-contents narinfo))) (match (string-contains contents "Signature:") (#f #f) (index - (let ((above-signature (string-take contents index))) - (sha256 (string->utf8 above-signature))))))) + (let* ((above-signature (string-take contents index)) + (signed-fields (match (call-with-input-string above-signature + fields->alist) + (((fields . values) ...) fields)))) + (and (every (cut member <> signed-fields) %mandatory-fields) + (sha256 (string->utf8 above-signature)))))))) (define* (valid-narinfo? narinfo #:optional (acl (current-acl)) #:key verbose?) diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm index 7853e2e8b2..2256bd6946 100644 --- a/guix/scripts/system.scm +++ b/guix/scripts/system.scm @@ -497,9 +497,10 @@ STORE is an open connection to the store." (old-entries (map boot-parameters->menu-entry old-params))) (run-with-store store (mlet* %store-monad - ((bootcfg ((bootloader-configuration-file-generator bootloader) - bootloader-config entries - #:old-entries old-entries)) + ((bootcfg (lower-object + ((bootloader-configuration-file-generator bootloader) + bootloader-config entries + #:old-entries old-entries))) (bootcfg-file -> (bootloader-configuration-file bootloader)) (target -> "/") (drvs -> (list bootcfg))) @@ -998,7 +999,8 @@ Some ACTIONS support additional ARGS.\n")) instead of reading FILE, when applicable")) (display (G_ " --on-error=STRATEGY - apply STRATEGY when an error occurs while reading FILE")) + apply STRATEGY (one of nothing-special, backtrace, + or debug) when an error occurs while reading FILE")) (display (G_ " --file-system-type=TYPE for 'disk-image', produce a root file system of TYPE diff --git a/guix/ssh.scm b/guix/ssh.scm index 104f4f52d6..1ed8406633 100644 --- a/guix/ssh.scm +++ b/guix/ssh.scm @@ -18,6 +18,7 @@ (define-module (guix ssh) #:use-module (guix store) + #:use-module (guix inferior) #:use-module (guix i18n) #:use-module ((guix utils) #:select (&fix-hint)) #:use-module (ssh session) @@ -26,8 +27,6 @@ #:use-module (ssh channel) #:use-module (ssh popen) #:use-module (ssh session) - #:use-module (ssh dist) - #:use-module (ssh dist node) #:use-module (srfi srfi-1) #:use-module (srfi srfi-11) #:use-module (srfi srfi-26) @@ -36,6 +35,7 @@ #:use-module (ice-9 match) #:use-module (ice-9 binary-ports) #:export (open-ssh-session + remote-inferior remote-daemon-channel connect-to-remote-daemon send-files @@ -94,6 +94,26 @@ Throw an error on failure." (message (format #f (G_ "SSH connection to '~a' failed: ~a~%") host (get-error session)))))))))) +(define (remote-inferior session) + "Return a remote inferior for the given SESSION." + (let ((pipe (open-remote-pipe* session OPEN_BOTH + "guix" "repl" "-t" "machine"))) + (port->inferior pipe))) + +(define (inferior-remote-eval exp session) + "Evaluate EXP in a new inferior running in SESSION, and close the inferior +right away." + (let ((inferior (remote-inferior session))) + (dynamic-wind + (const #t) + (lambda () + (inferior-eval exp inferior)) + (lambda () + ;; Close INFERIOR right away to prevent finalization from happening in + ;; another thread at the wrong time (see + ;; <https://bugs.gnu.org/26976>.) + (close-inferior inferior))))) + (define* (remote-daemon-channel session #:optional (socket-name @@ -269,15 +289,15 @@ Return the list of store items actually sent." ;; Compute the subset of FILES missing on SESSION and send them. (let* ((files (if recursive? (requisites local files) files)) (session (channel-get-session (nix-server-socket remote))) - (node (make-node session)) - (missing (node-eval node - `(begin - (use-modules (guix) - (srfi srfi-1) (srfi srfi-26)) - - (with-store store - (remove (cut valid-path? store <>) - ',files))))) + (missing (inferior-remote-eval + `(begin + (use-modules (guix) + (srfi srfi-1) (srfi srfi-26)) + + (with-store store + (remove (cut valid-path? store <>) + ',files))) + session)) (count (length missing)) (sizes (map (lambda (item) (path-info-nar-size (query-path-info local item))) diff --git a/guix/status.scm b/guix/status.scm index 868bfdca21..d4fc4ca16e 100644 --- a/guix/status.scm +++ b/guix/status.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2017, 2018 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net> ;;; ;;; This file is part of GNU Guix. ;;; @@ -289,6 +290,31 @@ on." ("^(.*)(warning)([[:blank:]]*)(:)(.*)" RESET MAGENTA BOLD BOLD BOLD))) +(define (hook-message hook-type) + "Return a human-readable string for the profile hook type HOOK-TYPE." + (match hook-type + ('info-dir + (G_ "building directory of Info manuals...")) + ('ghc-package-cache + (G_ "building GHC package cache...")) + ('ca-certificate-bundle + (G_ "building CA certificate bundle...")) + ('glib-schemas + (G_ "generating GLib schema cache...")) + ('gtk-icon-themes + (G_ "creating GTK+ icon theme cache...")) + ('gtk-im-modules + (G_ "building cache files for GTK+ input methods...")) + ('xdg-desktop-database + (G_ "building XDG desktop file cache...")) + ('xdg-mime-database + (G_ "building XDG MIME database...")) + ('fonts-dir + (G_ "building fonts directory...")) + ('manual-database + (G_ "building database for manual pages...")) + (_ #f))) + (define* (print-build-event event old-status status #:optional (port (current-error-port)) #:key @@ -336,6 +362,13 @@ addition to build events." "applying ~a grafts for ~a..." count)) count drv))) + ('profile-hook + (let ((hook-type (assq-ref properties 'hook))) + (or (and=> (hook-message hook-type) + (lambda (msg) + (format port (info msg)))) + (format port (info (G_ "running profile hook of type '~a'...")) + hook-type)))) (_ (format port (info (G_ "building ~a...")) drv)))) (newline port)) diff --git a/guix/store.scm b/guix/store.scm index 509fd4def6..042dfab67f 100644 --- a/guix/store.scm +++ b/guix/store.scm @@ -846,6 +846,14 @@ bytevector) as its internal buffer, and a thunk to flush this output port." write #f #f flush) flush)) +(define profiled? + (let ((profiled + (or (and=> (getenv "GUIX_PROFILING") string-tokenize) + '()))) + (lambda (component) + "Return true if COMPONENT profiling is active." + (member component profiled)))) + (define %rpc-calls ;; Mapping from RPC names (symbols) to invocation counts. (make-hash-table)) @@ -1504,24 +1512,55 @@ and RESULT is typically its derivation." (object-cache (vhash-consq object (cons result keys) (nix-server-object-cache store))))))) +(define record-cache-lookup! + (if (profiled? "object-cache") + (let ((fresh 0) + (lookups 0) + (hits 0)) + (register-profiling-hook! + "object-cache" + (lambda () + (format (current-error-port) "Store object cache: + fresh caches: ~5@a + lookups: ~5@a + hits: ~5@a (~,1f%)~%" + fresh lookups hits + (if (zero? lookups) + 100. + (* 100. (/ hits lookups)))))) + + (lambda (hit? cache) + (set! fresh + (if (eq? cache vlist-null) + (+ 1 fresh) + fresh)) + (set! lookups (+ 1 lookups)) + (set! hits (if hit? (+ hits 1) hits)))) + (lambda (x y) + #t))) + (define* (lookup-cached-object object #:optional (keys '())) "Return the cached object in the store connection corresponding to OBJECT and KEYS. KEYS is a list of additional keys to match against, and which are compared with 'equal?'. Return #f on failure and the cached result otherwise." (lambda (store) - ;; Escape as soon as we find the result. This avoids traversing the whole - ;; vlist chain and significantly reduces the number of 'hashq' calls. - (values (let/ec return - (vhash-foldq* (lambda (item result) - (match item - ((value . keys*) - (if (equal? keys keys*) - (return value) - result)))) - #f object - (nix-server-object-cache store))) - store))) + (let* ((cache (nix-server-object-cache store)) + + ;; Escape as soon as we find the result. This avoids traversing + ;; the whole vlist chain and significantly reduces the number of + ;; 'hashq' calls. + (value (let/ec return + (vhash-foldq* (lambda (item result) + (match item + ((value . keys*) + (if (equal? keys keys*) + (return value) + result)))) + #f object + cache)))) + (record-cache-lookup! value cache) + (values value store)))) (define* (%mcached mthunk object #:optional (keys '())) "Bind the monadic value returned by MTHUNK, which supposedly corresponds to diff --git a/guix/store/database.scm b/guix/store/database.scm index e6bfbe763e..4791f49865 100644 --- a/guix/store/database.scm +++ b/guix/store/database.scm @@ -79,6 +79,15 @@ as specified by SQL-SCHEMA." create it and initialize it as a new database." (let ((new? (not (file-exists? file))) (db (sqlite-open file))) + ;; Turn DB in "write-ahead log" mode, which should avoid SQLITE_LOCKED + ;; errors when we have several readers: <https://www.sqlite.org/wal.html>. + (sqlite-exec db "PRAGMA journal_mode=WAL;") + + ;; Install a busy handler such that, when the database is locked, sqlite + ;; retries until 30 seconds have passed, at which point it gives up and + ;; throws SQLITE_BUSY. + (sqlite-exec db "PRAGMA busy_timeout = 30000;") + (dynamic-wind noop (lambda () (when new? diff --git a/guix/store/deduplication.scm b/guix/store/deduplication.scm index 21b0c81f3d..a777940f86 100644 --- a/guix/store/deduplication.scm +++ b/guix/store/deduplication.scm @@ -99,24 +99,38 @@ LINK-PREFIX." (define* (replace-with-link target to-replace #:key (swap-directory (dirname target))) "Atomically replace the file TO-REPLACE with a link to TARGET. Use -SWAP-DIRECTORY as the directory to store temporary hard links. +SWAP-DIRECTORY as the directory to store temporary hard links. Upon ENOSPC +and EMLINK, TO-REPLACE is left unchanged. Note: TARGET, TO-REPLACE, and SWAP-DIRECTORY must be on the same file system." - (let* ((temp-link (get-temp-link target swap-directory)) - (parent (dirname to-replace)) - (stat (stat parent))) - (make-file-writable parent) + (define temp-link (catch 'system-error (lambda () - (rename-file temp-link to-replace) - - ;; Restore PARENT's mtime and permissions. - (set-file-time parent stat) - (chmod parent (stat:mode stat))) + (get-temp-link target swap-directory)) (lambda args - (delete-file temp-link) - (unless (= EMLINK (system-error-errno args)) - (apply throw args)))))) + ;; We get ENOSPC when we can't fit an additional entry in + ;; SWAP-DIRECTORY. + (if (= ENOSPC (system-error-errno args)) + #f + (apply throw args))))) + + ;; If we couldn't create TEMP-LINK, that's OK: just don't do the + ;; replacement, which means TO-REPLACE won't be deduplicated. + (when temp-link + (let* ((parent (dirname to-replace)) + (stat (stat parent))) + (make-file-writable parent) + (catch 'system-error + (lambda () + (rename-file temp-link to-replace)) + (lambda args + (delete-file temp-link) + (unless (= EMLINK (system-error-errno args)) + (apply throw args)))) + + ;; Restore PARENT's mtime and permissions. + (set-file-time parent stat) + (chmod parent (stat:mode stat))))) (define* (deduplicate path hash #:key (store %store-directory)) "Check if a store item with sha256 hash HASH already exists. If so, diff --git a/guix/ui.scm b/guix/ui.scm index 60636edac0..44336ee8fd 100644 --- a/guix/ui.scm +++ b/guix/ui.scm @@ -502,14 +502,19 @@ General help using GNU software: <http://www.gnu.org/gethelp/>")) (list (strerror (car errno)) file) (list errno)))) -(define-syntax-rule (error-reporting-wrapper proc (args ...) file) +(define-syntax apply-formals + (syntax-rules () + ((_ proc (args ...)) (proc args ...)) + ((_ proc (arg1 args ... . rest)) (apply proc arg1 args ... rest)))) + +(define-syntax-rule (error-reporting-wrapper proc formals file) "Wrap PROC such that its 'system-error' exceptions are augmented to mention FILE." (let ((real-proc (@ (guile) proc))) - (lambda (args ...) + (lambda formals (catch 'system-error (lambda () - (real-proc args ...)) + (apply-formals real-proc formals)) (augmented-system-error-handler file))))) (set! symlink @@ -528,6 +533,8 @@ FILE." (set! delete-file (error-reporting-wrapper delete-file (file) file)) +(set! execlp + (error-reporting-wrapper execlp (filename . args) filename)) (define (make-regexp* regexp . flags) "Like 'make-regexp' but error out if REGEXP is invalid, reporting the error @@ -822,6 +829,12 @@ warning." ('graft #t) (_ #f))) +(define (profile-hook-derivation? drv) + "Return true if DRV is definitely a profile hook derivation, false otherwise." + (match (assq-ref (derivation-properties drv) 'type) + ('profile-hook #t) + (_ #f))) + (define* (show-what-to-build store drv #:key dry-run? (use-substitutes? #t) (mode (build-mode normal))) @@ -872,10 +885,28 @@ report what is prerequisites are available for download." substitutable-references download)))) download)) - ((graft build) - (partition (compose graft-derivation? - read-derivation-from-file) - build))) + ((graft hook build) + (match (fold (lambda (file acc) + (let ((drv (read-derivation-from-file file))) + (match acc + ((#:graft graft #:hook hook #:build build) + (cond + ((graft-derivation? drv) + `(#:graft ,(cons file graft) + #:hook ,hook + #:build ,build)) + ((profile-hook-derivation? drv) + `(#:graft ,graft + #:hook ,(cons file hook) + #:build ,build)) + (else + `(#:graft ,graft + #:hook ,hook + #:build ,(cons file build)))))))) + '(#:graft () #:hook () #:build ()) + build) + ((#:graft graft #:hook hook #:build build) + (values graft hook build))))) (define installed-size (reduce + 0 (map substitutable-nar-size download))) @@ -913,7 +944,12 @@ report what is prerequisites are available for download." (N_ "~:[The following graft would be made:~%~{ ~a~%~}~;~]" "~:[The following grafts would be made:~%~{ ~a~%~}~;~]" (length graft)) - (null? graft) graft)) + (null? graft) graft) + (format (current-error-port) + (N_ "~:[The following profile hook would be built:~%~{ ~a~%~}~;~]" + "~:[The following profile hooks would be built:~%~{ ~a~%~}~;~]" + (length hook)) + (null? hook) hook)) (begin (format (current-error-port) (N_ "~:[The following derivation will be built:~%~{ ~a~%~}~;~]" @@ -938,7 +974,12 @@ report what is prerequisites are available for download." (N_ "~:[The following graft will be made:~%~{ ~a~%~}~;~]" "~:[The following grafts will be made:~%~{ ~a~%~}~;~]" (length graft)) - (null? graft) graft))) + (null? graft) graft) + (format (current-error-port) + (N_ "~:[The following profile hook will be built:~%~{ ~a~%~}~;~]" + "~:[The following profile hooks will be built:~%~{ ~a~%~}~;~]" + (length hook)) + (null? hook) hook))) (check-available-space installed-size) diff --git a/guix/utils.scm b/guix/utils.scm index 9bad06d52f..ed1a418cca 100644 --- a/guix/utils.scm +++ b/guix/utils.scm @@ -731,17 +731,19 @@ environment variable name like \"XDG_CONFIG_HOME\"; SUFFIX is a suffix like ;;; Source location. ;;; -(define (absolute-dirname file) - "Return the absolute name of the directory containing FILE, or #f upon +(define absolute-dirname + ;; Memoize to avoid repeated 'stat' storms from 'search-path'. + (mlambda (file) + "Return the absolute name of the directory containing FILE, or #f upon failure." - (match (search-path %load-path file) - (#f #f) - ((? string? file) - ;; If there are relative names in %LOAD-PATH, FILE can be relative and - ;; needs to be canonicalized. - (if (string-prefix? "/" file) - (dirname file) - (canonicalize-path (dirname file)))))) + (match (search-path %load-path file) + (#f #f) + ((? string? file) + ;; If there are relative names in %LOAD-PATH, FILE can be relative and + ;; needs to be canonicalized. + (if (string-prefix? "/" file) + (dirname file) + (canonicalize-path (dirname file))))))) (define-syntax current-source-directory (lambda (s) diff --git a/nix/libstore/build.cc b/nix/libstore/build.cc index d7b8b0f0ca..f4a866c68f 100644 --- a/nix/libstore/build.cc +++ b/nix/libstore/build.cc @@ -545,7 +545,7 @@ void UserLock::acquire() /* Sanity check... */ if (uid == getuid() || uid == geteuid()) - throw Error(format("the Nix user should not be a member of `%1%'") + throw Error(format("the build user should not be a member of `%1%'") % settings.buildUsersGroup); /* Get the list of supplementary groups of this build user. This @@ -989,7 +989,7 @@ void DerivationGoal::init() trace("init"); if (settings.readOnlyMode) - throw Error(format("cannot build derivation `%1%' - no write access to the Nix store") % drvPath); + throw Error(format("cannot build derivation `%1%' - no write access to the store") % drvPath); /* The first thing to do is to make sure that the derivation exists. If it doesn't, it may be created through a @@ -1287,7 +1287,7 @@ void DerivationGoal::tryToBuild() } /* Obtain locks on all output paths. The locks are automatically - released when we exit this function or Nix crashes. If we + released when we exit this function or the client crashes. If we can't acquire the lock, then continue; hopefully some other goal can start a build, and if not, the main loop will sleep a few seconds and then retry this goal. */ @@ -1706,7 +1706,7 @@ void DerivationGoal::startBuilder() Path homeDir = "/homeless-shelter"; env["HOME"] = homeDir; - /* Tell the builder where the Nix store is. Usually they + /* Tell the builder where the store is. Usually they shouldn't care, but this is useful for purity checking (e.g., the compiler or linker might only want to accept paths to files in the store or in the build directory). */ @@ -1827,9 +1827,9 @@ void DerivationGoal::startBuilder() if (useChroot) { #if CHROOT_ENABLED /* Create a temporary directory in which we set up the chroot - environment using bind-mounts. We put it in the Nix store + environment using bind-mounts. We put it in the store to ensure that we can create hard-links to non-directory - inputs in the fake Nix store in the chroot (see below). */ + inputs in the fake store in the chroot (see below). */ chrootRootDir = drvPath + ".chroot"; if (pathExists(chrootRootDir)) deletePath(chrootRootDir); @@ -1888,11 +1888,11 @@ void DerivationGoal::startBuilder() dirsInChroot[tmpDirInSandbox] = tmpDir; /* Make the closure of the inputs available in the chroot, - rather than the whole Nix store. This prevents any access + rather than the whole store. This prevents any access to undeclared dependencies. Directories are bind-mounted, while other inputs are hard-linked (since only directories can be bind-mounted). !!! As an extra security - precaution, make the fake Nix store only writable by the + precaution, make the fake store only writable by the build user. */ Path chrootStoreDir = chrootRootDir + settings.nixStore; createDirs(chrootStoreDir); @@ -2387,12 +2387,12 @@ void DerivationGoal::registerOutputs() if (useChroot) { actualPath = chrootRootDir + path; if (pathExists(actualPath)) { - /* Move output paths from the chroot to the Nix store. */ + /* Move output paths from the chroot to the store. */ if (buildMode == bmRepair) replaceValidPath(path, actualPath); else if (buildMode != bmCheck && rename(actualPath.c_str(), path.c_str()) == -1) - throw SysError(format("moving build output `%1%' from the chroot to the Nix store") % path); + throw SysError(format("moving build output `%1%' from the chroot to the store") % path); } if (buildMode != bmCheck) actualPath = path; } else { @@ -2975,7 +2975,7 @@ void SubstitutionGoal::init() } if (settings.readOnlyMode) - throw Error(format("cannot substitute path `%1%' - no write access to the Nix store") % storePath); + throw Error(format("cannot substitute path `%1%' - no write access to the store") % storePath); subs = settings.substituters; diff --git a/nix/libstore/gc.cc b/nix/libstore/gc.cc index 72eff52426..125f242814 100644 --- a/nix/libstore/gc.cc +++ b/nix/libstore/gc.cc @@ -21,7 +21,7 @@ static string tempRootsDir = "temproots"; static string gcRootsDir = "gcroots"; -/* Acquire the global GC lock. This is used to prevent new Nix +/* Acquire the global GC lock. This is used to prevent new build processes from starting after the temporary root files have been read. To be precise: when they try to create a new temporary root file, they will block until the garbage collector has finished / @@ -92,12 +92,12 @@ Path addPermRoot(StoreAPI & store, const Path & _storePath, if (isInStore(gcRoot)) throw Error(format( - "creating a garbage collector root (%1%) in the Nix store is forbidden " + "creating a garbage collector root (%1%) in the store is forbidden " "(are you running nix-build inside the store?)") % gcRoot); if (indirect) { /* Don't clobber the link if it already exists and doesn't - point to the Nix store. */ + point to the store. */ if (pathExists(gcRoot) && (!isLink(gcRoot) || !isInStore(readLink(gcRoot)))) throw Error(format("cannot create symlink `%1%'; already exists") % gcRoot); makeSymlink(gcRoot, storePath); diff --git a/nix/libstore/globals.cc b/nix/libstore/globals.cc index 4b5b485e65..25f80da2dd 100644 --- a/nix/libstore/globals.cc +++ b/nix/libstore/globals.cc @@ -13,7 +13,7 @@ namespace nix { /* The default location of the daemon socket, relative to nixStateDir. The socket is in a directory to allow you to control access to the - Nix daemon by setting the mode/ownership of the directory + build daemon by setting the mode/ownership of the directory appropriately. (This wouldn't work on the socket itself since it must be deleted and recreated on startup.) */ #define DEFAULT_SOCKET_PATH "/daemon-socket/socket" diff --git a/nix/libstore/local-store.cc b/nix/libstore/local-store.cc index 0aed59710f..eb8a51cc23 100644 --- a/nix/libstore/local-store.cc +++ b/nix/libstore/local-store.cc @@ -51,7 +51,7 @@ void checkStoreNotSymlink() if (S_ISLNK(st.st_mode)) throw Error(format( "the path `%1%' is a symlink; " - "this is not allowed for the Nix store and its parent directories") + "this is not allowed for the store and its parent directories") % path); path = dirOf(path); } @@ -153,7 +153,7 @@ LocalStore::LocalStore(bool reserveSpace) } if (!lockFile(globalLock, ltRead, false)) { - printMsg(lvlError, "waiting for the big Nix store lock..."); + printMsg(lvlError, "waiting for the big store lock..."); lockFile(globalLock, ltRead, true); } @@ -161,7 +161,7 @@ LocalStore::LocalStore(bool reserveSpace) upgrade. */ int curSchema = getSchema(); if (curSchema > nixSchemaVersion) - throw Error(format("current Nix store schema is version %1%, but I only support %2%") + throw Error(format("current store schema is version %1%, but I only support %2%") % curSchema % nixSchemaVersion); else if (curSchema == 0) { /* new store */ @@ -222,13 +222,13 @@ int LocalStore::getSchema() void LocalStore::openDB(bool create) { if (access(settings.nixDBPath.c_str(), R_OK | W_OK)) - throw SysError(format("Nix database directory `%1%' is not writable") % settings.nixDBPath); + throw SysError(format("store database directory `%1%' is not writable") % settings.nixDBPath); - /* Open the Nix database. */ + /* Open the store database. */ string dbPath = settings.nixDBPath + "/db.sqlite"; if (sqlite3_open_v2(dbPath.c_str(), &db.db, SQLITE_OPEN_READWRITE | (create ? SQLITE_OPEN_CREATE : 0), 0) != SQLITE_OK) - throw Error(format("cannot open Nix database `%1%'") % dbPath); + throw Error(format("cannot open store database `%1%'") % dbPath); if (sqlite3_busy_timeout(db, 60 * 60 * 1000) != SQLITE_OK) throwSQLiteError(db, "setting timeout"); @@ -316,8 +316,8 @@ void LocalStore::openDB(bool create) } -/* To improve purity, users may want to make the Nix store a read-only - bind mount. So make the Nix store writable for this process. */ +/* To improve purity, users may want to make the store a read-only + bind mount. So make the store writable for this process. */ void LocalStore::makeStoreWritable() { #if HAVE_UNSHARE && HAVE_STATVFS && HAVE_SYS_MOUNT_H && defined(MS_BIND) && defined(MS_REMOUNT) @@ -325,7 +325,7 @@ void LocalStore::makeStoreWritable() /* Check if /nix/store is on a read-only mount. */ struct statvfs stat; if (statvfs(settings.nixStore.c_str(), &stat) != 0) - throw SysError("getting info about the Nix store mount point"); + throw SysError("getting info about the store mount point"); if (stat.f_flag & ST_RDONLY) { if (unshare(CLONE_NEWNS) == -1) @@ -420,8 +420,8 @@ static void canonicalisePathMetaData_(const Path & path, uid_t fromUid, InodesSe lchown if available, otherwise don't bother. Wrong ownership of a symlink doesn't matter, since the owning user can't change the symlink and can't delete it because the directory is not - writable. The only exception is top-level paths in the Nix - store (since that directory is group-writable for the Nix build + writable. The only exception is top-level paths in the + store (since that directory is group-writable for the build users group); we check for this case below. */ if (st.st_uid != geteuid()) { #if HAVE_LCHOWN @@ -1347,7 +1347,7 @@ Path LocalStore::importPath(bool requireSignature, Source & source) unsigned int magic = readInt(hashAndReadSource); if (magic != EXPORT_MAGIC) - throw Error("Nix archive cannot be imported; wrong format"); + throw Error("normalized archive cannot be imported; wrong format"); Path dstPath = readStorePath(hashAndReadSource); @@ -1476,7 +1476,7 @@ void LocalStore::invalidatePathChecked(const Path & path) bool LocalStore::verifyStore(bool checkContents, bool repair) { - printMsg(lvlError, format("reading the Nix store...")); + printMsg(lvlError, format("reading the store...")); bool errors = false; @@ -1564,7 +1564,7 @@ void LocalStore::verifyPath(const Path & path, const PathSet & store, done.insert(path); if (!isStorePath(path)) { - printMsg(lvlError, format("path `%1%' is not in the Nix store") % path); + printMsg(lvlError, format("path `%1%' is not in the store") % path); invalidatePath(path); return; } diff --git a/nix/libstore/optimise-store.cc b/nix/libstore/optimise-store.cc index 9bed371c70..71dc1be07f 100644 --- a/nix/libstore/optimise-store.cc +++ b/nix/libstore/optimise-store.cc @@ -112,9 +112,9 @@ void LocalStore::optimisePath_(OptimiseStats & stats, const Path & path, InodeHa #endif ) return; - /* Sometimes SNAFUs can cause files in the Nix store to be + /* Sometimes SNAFUs can cause files in the store to be modified, in particular when running programs as root under - NixOS (example: $fontconfig/var/cache being modified). Skip + GuixSD (example: $fontconfig/var/cache being modified). Skip those files. FIXME: check the modification time. */ if (S_ISREG(st.st_mode) && (st.st_mode & S_IWUSR)) { printMsg(lvlError, format("skipping suspicious writable file `%1%'") % path); diff --git a/nix/libstore/store-api.cc b/nix/libstore/store-api.cc index 9e07c67e97..709d17ea21 100644 --- a/nix/libstore/store-api.cc +++ b/nix/libstore/store-api.cc @@ -32,14 +32,14 @@ bool isStorePath(const Path & path) void assertStorePath(const Path & path) { if (!isStorePath(path)) - throw Error(format("path `%1%' is not in the Nix store") % path); + throw Error(format("path `%1%' is not in the store") % path); } Path toStorePath(const Path & path) { if (!isInStore(path)) - throw Error(format("path `%1%' is not in the Nix store") % path); + throw Error(format("path `%1%' is not in the store") % path); Path::size_type slash = path.find('/', settings.nixStore.size() + 1); if (slash == Path::npos) return path; @@ -80,7 +80,7 @@ void checkStoreName(const string & name) where - <store> = the location of the Nix store, usually /nix/store + <store> = the location of the store, usually /gnu/store <name> = a human readable name for the path, typically obtained from the name attribute of the derivation, or the name of the diff --git a/nix/libutil/archive.cc b/nix/libutil/archive.cc index 2599030454..54bcd21f93 100644 --- a/nix/libutil/archive.cc +++ b/nix/libutil/archive.cc @@ -260,7 +260,7 @@ void parseDump(ParseSink & sink, Source & source) decoded. Ignore and throw the exception below. */ } if (version != archiveVersion1) - throw badArchive("input doesn't look like a Nix archive"); + throw badArchive("input doesn't look like a normalized archive"); parse(sink, source, ""); } diff --git a/nix/nix-daemon/nix-daemon.cc b/nix/nix-daemon/nix-daemon.cc index 6ce475a26c..56137701a1 100644 --- a/nix/nix-daemon/nix-daemon.cc +++ b/nix/nix-daemon/nix-daemon.cc @@ -474,7 +474,7 @@ static void performOp(bool trusted, unsigned int clientVersion, /* Repairing is not atomic, so disallowed for "untrusted" clients. */ if (mode == bmRepair && !trusted) - throw Error("repairing is not supported when building through the Nix daemon"); + throw Error("repairing is a privileged operation"); } startWork(); store->buildPaths(drvs, mode); @@ -801,7 +801,7 @@ static void processConnection(bool trusted) stopWork(false, e.msg(), GET_PROTOCOL_MINOR(clientVersion) >= 8 ? e.status : 0); if (!errorAllowed) throw; } catch (std::bad_alloc & e) { - stopWork(false, "Nix daemon out of memory", GET_PROTOCOL_MINOR(clientVersion) >= 8 ? 1 : 0); + stopWork(false, "build daemon out of memory", GET_PROTOCOL_MINOR(clientVersion) >= 8 ? 1 : 0); throw; } @@ -955,7 +955,7 @@ static void acceptConnection(int fdSocket) processConnection(trusted); exit(0); - }, false, "unexpected Nix daemon error: ", true); + }, false, "unexpected build daemon error: ", true); } catch (Interrupted & e) { throw; diff --git a/po/guix/POTFILES.in b/po/guix/POTFILES.in index e0da801587..c432973f9e 100644 --- a/po/guix/POTFILES.in +++ b/po/guix/POTFILES.in @@ -7,6 +7,7 @@ gnu/system.scm gnu/services/shepherd.scm gnu/system/mapped-devices.scm gnu/system/shadow.scm +guix/import/opam.scm guix/scripts.scm guix/scripts/build.scm guix/discovery.scm diff --git a/tests/channels.scm b/tests/channels.scm new file mode 100644 index 0000000000..f3fc383ac3 --- /dev/null +++ b/tests/channels.scm @@ -0,0 +1,139 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net> +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +(define-module (test-channels) + #:use-module (guix channels) + #:use-module ((guix build syscalls) #:select (mkdtemp!)) + #:use-module (guix tests) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-64) + #:use-module (ice-9 match)) + +(test-begin "channels") + +(define* (make-instance #:key + (name 'fake) + (commit "cafebabe") + (spec #f)) + (define instance-dir (mkdtemp! "/tmp/checkout.XXXXXX")) + (and spec + (with-output-to-file (string-append instance-dir "/.guix-channel") + (lambda _ (format #t "~a" spec)))) + ((@@ (guix channels) channel-instance) + name commit instance-dir)) + +(define instance--boring (make-instance)) +(define instance--no-deps + (make-instance #:spec + '(channel + (version 0) + (dependencies + (channel + (name test-channel) + (url "https://example.com/test-channel")))))) +(define instance--simple + (make-instance #:spec + '(channel + (version 0) + (dependencies + (channel + (name test-channel) + (url "https://example.com/test-channel")))))) +(define instance--with-dupes + (make-instance #:spec + '(channel + (version 0) + (dependencies + (channel + (name test-channel) + (url "https://example.com/test-channel")) + (channel + (name test-channel) + (url "https://example.com/test-channel") + (commit "abc1234")) + (channel + (name test-channel) + (url "https://example.com/test-channel-elsewhere")))))) + +(define read-channel-metadata + (@@ (guix channels) read-channel-metadata)) + + +(test-equal "read-channel-metadata returns #f if .guix-channel does not exist" + #f + (read-channel-metadata instance--boring)) + +(test-assert "read-channel-metadata returns <channel-metadata>" + (every (@@ (guix channels) channel-metadata?) + (map read-channel-metadata + (list instance--no-deps + instance--simple + instance--with-dupes)))) + +(test-assert "read-channel-metadata dependencies are channels" + (let ((deps ((@@ (guix channels) channel-metadata-dependencies) + (read-channel-metadata instance--simple)))) + (match deps + (((? channel? dep)) #t) + (_ #f)))) + +(test-assert "latest-channel-instances includes channel dependencies" + (let* ((channel (channel + (name 'test) + (url "test"))) + (test-dir (channel-instance-checkout instance--simple))) + (mock ((guix git) latest-repository-commit + (lambda* (store url #:key ref) + (match url + ("test" (values test-dir 'whatever)) + (_ (values "/not-important" 'not-important))))) + (let ((instances (latest-channel-instances #f (list channel)))) + (and (eq? 2 (length instances)) + (lset= eq? + '(test test-channel) + (map (compose channel-name channel-instance-channel) + instances))))))) + +(test-assert "latest-channel-instances excludes duplicate channel dependencies" + (let* ((channel (channel + (name 'test) + (url "test"))) + (test-dir (channel-instance-checkout instance--with-dupes))) + (mock ((guix git) latest-repository-commit + (lambda* (store url #:key ref) + (match url + ("test" (values test-dir 'whatever)) + (_ (values "/not-important" 'not-important))))) + (let ((instances (latest-channel-instances #f (list channel)))) + (and (eq? 2 (length instances)) + (lset= eq? + '(test test-channel) + (map (compose channel-name channel-instance-channel) + instances)) + ;; only the most specific channel dependency should remain, + ;; i.e. the one with a specified commit. + (find (lambda (instance) + (and (eq? (channel-name + (channel-instance-channel instance)) + 'test-channel) + (eq? (channel-commit + (channel-instance-channel instance)) + 'abc1234))) + instances)))))) + +(test-end "channels") diff --git a/tests/guix-environment.sh b/tests/guix-environment.sh index b44aca099d..30b21028aa 100644 --- a/tests/guix-environment.sh +++ b/tests/guix-environment.sh @@ -1,5 +1,5 @@ # GNU Guix --- Functional package management for GNU -# Copyright © 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org> +# Copyright © 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org> # # This file is part of GNU Guix. # @@ -118,6 +118,18 @@ fi # in its profile (e.g., for 'gzip'), but we have to accept them. guix environment guix --bootstrap -n +# Try program transformation options. +mkdir "$tmpdir/emacs-36.8" +drv="`guix environment --ad-hoc emacs -n 2>&1 | grep 'emacs.*\.drv'`" +transformed_drv="`guix environment --ad-hoc emacs --with-source="$tmpdir/emacs-36.8" -n 2>&1 | grep 'emacs.*\.drv'`" +test -n "$drv" +test "$drv" != "$transformed_drv" +case "$transformed_drv" in + *-emacs-36.8.drv) true;; + *) false;; +esac +rmdir "$tmpdir/emacs-36.8" + if guile -c '(getaddrinfo "www.gnu.org" "80" AI_NUMERICSERV)' 2> /dev/null then # Compute the build environment for the initial GNU Make. diff --git a/tests/lint.scm b/tests/lint.scm index 300153e24e..fe12bebd88 100644 --- a/tests/lint.scm +++ b/tests/lint.scm @@ -6,6 +6,7 @@ ;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com> ;;; Copyright © 2017 Alex Kost <alezost@gmail.com> ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il> +;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net> ;;; ;;; This file is part of GNU Guix. ;;; @@ -571,6 +572,86 @@ (check-source-file-name pkg))) "file name should contain the package name")))) +(test-assert "source-unstable-tarball" + (string-contains + (with-warnings + (let ((pkg (dummy-package "x" + (source + (origin + (method url-fetch) + (uri "https://github.com/example/example/archive/v0.0.tar.gz") + (sha256 %null-sha256)))))) + (check-source-unstable-tarball pkg))) + "source URI should not be an autogenerated tarball")) + +(test-assert "source-unstable-tarball: source #f" + (not + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package "x" + (source #f)))) + (check-source-unstable-tarball pkg))) + "source URI should not be an autogenerated tarball")))) + +(test-assert "source-unstable-tarball: valid" + (not + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package "x" + (source + (origin + (method url-fetch) + (uri "https://github.com/example/example/releases/download/x-0.0/x-0.0.tar.gz") + (sha256 %null-sha256)))))) + (check-source-unstable-tarball pkg))) + "source URI should not be an autogenerated tarball")))) + +(test-assert "source-unstable-tarball: package named archive" + (not + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package "x" + (source + (origin + (method url-fetch) + (uri "https://github.com/example/archive/releases/download/x-0.0/x-0.0.tar.gz") + (sha256 %null-sha256)))))) + (check-source-unstable-tarball pkg))) + "source URI should not be an autogenerated tarball")))) + +(test-assert "source-unstable-tarball: not-github" + (not + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package "x" + (source + (origin + (method url-fetch) + (uri "https://bitbucket.org/archive/example/download/x-0.0.tar.gz") + (sha256 %null-sha256)))))) + (check-source-unstable-tarball pkg))) + "source URI should not be an autogenerated tarball")))) + +(test-assert "source-unstable-tarball: git-fetch" + (not + (->bool + (string-contains + (with-warnings + (let ((pkg (dummy-package "x" + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/archive/example.git") + (commit "0"))) + (sha256 %null-sha256)))))) + (check-source-unstable-tarball pkg))) + "source URI should not be an autogenerated tarball")))) + (test-skip (if (http-server-can-listen?) 0 1)) (test-equal "source: 200" "" @@ -669,6 +750,33 @@ (check-mirror-url (dummy-package "x" (source source))))) "mirror://gnu/foo/foo.tar.gz")) +(test-assert "github-url" + (string-null? + (with-warnings + (with-http-server 200 %long-string + (check-github-url + (dummy-package "x" (source + (origin + (method url-fetch) + (uri (%local-url)) + (sha256 %null-sha256))))))))) + +(let ((github-url "https://github.com/foo/bar/bar-1.0.tar.gz")) + (test-assert "github-url: one suggestion" + (string-contains + (with-warnings + (with-http-server (301 `((location . ,(string->uri github-url)))) "" + (let ((initial-uri (%local-url))) + (parameterize ((%http-server-port (+ 1 (%http-server-port)))) + (with-http-server (302 `((location . ,(string->uri initial-uri)))) "" + (check-github-url + (dummy-package "x" (source + (origin + (method url-fetch) + (uri (%local-url)) + (sha256 %null-sha256)))))))))) + github-url))) + (test-assert "cve" (mock ((guix scripts lint) package-vulnerabilities (const '())) (string-null? diff --git a/tests/opam.scm b/tests/opam.scm index a1320abfdc..e0ec5ef3d4 100644 --- a/tests/opam.scm +++ b/tests/opam.scm @@ -21,98 +21,177 @@ #:use-module (guix base32) #:use-module (gcrypt hash) #:use-module (guix tests) + #:use-module ((guix build syscalls) #:select (mkdtemp!)) #:use-module ((guix build utils) #:select (delete-file-recursively mkdir-p which)) + #:use-module ((guix utils) #:select (call-with-temporary-output-file)) + #:use-module (srfi srfi-1) #: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") + #:use-module (ice-9 match) + #:use-module (ice-9 peg)) (define test-opam-file -"opam-version: 1.2 +"opam-version: \"2.0\" + version: \"1.0.0\" maintainer: \"Alice Doe\" -authors: \"Alice Doe, John 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}%\" + [\"ocaml\" \"pkg/pkg.ml\" \"build\" \"--pinned\" \"%{pinned}%\"] ] build-test: [ - \"ocaml\" \"pkg/pkg.ml\" \"build\" \"--pinned\" \"%{pinned}%\" \"--tests\" \"true\" + [\"ocaml\" \"pkg/pkg.ml\" \"build\" \"--pinned\" \"%{pinned}%\" \"--tests\" \"true\"] ] depends: [ \"alcotest\" {test & >= \"0.7.2\"} \"ocamlbuild\" {build & >= \"0.9.2\"} -]") + \"zarith\" {>= \"0.7\"} +] +synopsis: \"Some example package\" +description: \"\"\" +This package is just an example.\"\"\" +url { + src: \"https://example.org/foo-1.0.0.tar.gz\" + checksum: \"md5=74c6e897658e820006106f45f736381f\" +}") + +(define test-source-hash + "") + +(define test-repo + (mkdtemp! "/tmp/opam-repo.XXXXXX")) (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))))))) + (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))))) + (let ((my-package (string-append test-repo "/packages/foo/foo.1.0.0"))) + (mkdir-p my-package) + (with-output-to-file (string-append my-package "/opam") + (lambda _ + (format #t "~a" test-opam-file)))) + (mock ((guix import opam) get-opam-repository + (lambda _ + test-repo)) + (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 + (("ocaml-zarith" ('unquote 'ocaml-zarith))))) + ('native-inputs + ('quasiquote + (("ocaml-alcotest" ('unquote 'ocaml-alcotest)) + ("ocamlbuild" ('unquote 'ocamlbuild))))) + ('home-page "https://example.org/") + ('synopsis "Some example package") + ('description "This package is just an example.") + ('license #f)) + (string=? (bytevector->nix-base32-string + test-source-hash) + hash)) + (x + (pk 'fail x #f)))))) + +;; Test the opam file parser +;; We fold over some test cases. Each case is a pair of the string to parse and the +;; expected result. +(test-assert "parse-strings" + (fold (lambda (test acc) + (display test) (newline) + (and acc + (let ((result (peg:tree (match-pattern (@@ (guix import opam) string-pat) (car test))))) + (if (equal? result (cdr test)) + #t + (pk 'fail (list (car test) result (cdr test)) #f))))) + #t '(("" . #f) + ("\"hello\"" . (string-pat "hello")) + ("\"hello world\"" . (string-pat "hello world")) + ("\"The dreaded \\\"é\\\"\"" . (string-pat "The dreaded \"é\"")) + ("\"Have some \\\\\\\\ :)\"" . (string-pat "Have some \\\\ :)")) + ("\"今日は\"" . (string-pat "今日は"))))) + +(test-assert "parse-multiline-strings" + (fold (lambda (test acc) + (display test) (newline) + (and acc + (let ((result (peg:tree (match-pattern (@@ (guix import opam) multiline-string) (car test))))) + (if (equal? result (cdr test)) + #t + (pk 'fail (list (car test) result (cdr test)) #f))))) + #t '(("" . #f) + ("\"\"\"hello\"\"\"" . (multiline-string "hello")) + ("\"\"\"hello \"world\"!\"\"\"" . (multiline-string "hello \"world\"!")) + ("\"\"\"hello \"\"world\"\"!\"\"\"" . (multiline-string "hello \"\"world\"\"!"))))) + +(test-assert "parse-lists" + (fold (lambda (test acc) + (and acc + (let ((result (peg:tree (match-pattern (@@ (guix import opam) list-pat) (car test))))) + (if (equal? result (cdr test)) + #t + (pk 'fail (list (car test) result (cdr test)) #f))))) + #t '(("" . #f) + ("[]" . list-pat) + ("[make]" . (list-pat (var "make"))) + ("[\"make\"]" . (list-pat (string-pat "make"))) + ("[\n a\n b\n c]" . (list-pat (var "a") (var "b") (var "c"))) + ("[a b \"c\"]" . (list-pat (var "a") (var "b") (string-pat "c")))))) + +(test-assert "parse-dicts" + (fold (lambda (test acc) + (and acc + (let ((result (peg:tree (match-pattern (@@ (guix import opam) dict) (car test))))) + (if (equal? result (cdr test)) + #t + (pk 'fail (list (car test) result (cdr test)) #f))))) + #t '(("" . #f) + ("{}" . dict) + ("{a: \"b\"}" . (dict (record "a" (string-pat "b")))) + ("{a: \"b\"\nc: \"d\"}" . (dict (record "a" (string-pat "b")) (record "c" (string-pat "d"))))))) + +(test-assert "parse-conditions" + (fold (lambda (test acc) + (and acc + (let ((result (peg:tree (match-pattern (@@ (guix import opam) condition) (car test))))) + (if (equal? result (cdr test)) + #t + (pk 'fail (list (car test) result (cdr test)) #f))))) + #t '(("" . #f) + ("{}" . #f) + ("{build}" . (condition-var "build")) + ("{>= \"0.2.0\"}" . (condition-greater-or-equal + (condition-string "0.2.0"))) + ("{>= \"0.2.0\" & test}" . (condition-and + (condition-greater-or-equal + (condition-string "0.2.0")) + (condition-var "test"))) + ("{>= \"0.2.0\" | build}" . (condition-or + (condition-greater-or-equal + (condition-string "0.2.0")) + (condition-var "build")))))) (test-end "opam") diff --git a/tests/publish.scm b/tests/publish.scm index 0e793c1ee5..79a786e723 100644 --- a/tests/publish.scm +++ b/tests/publish.scm @@ -411,10 +411,12 @@ FileSize: ~a~%" (random-text)))) (test-equal "with cache, uncompressed" (list #t + (* 42 3600) ;TTL on narinfo `(("StorePath" . ,item) ("URL" . ,(string-append "nar/" (basename item))) ("Compression" . "none")) 200 ;nar/… + (* 42 3600) ;TTL on nar/… (path-info-nar-size (query-path-info %store item)) ;FileSize 404) ;nar/gzip/… @@ -423,7 +425,7 @@ FileSize: ~a~%" (let ((thread (with-separate-output-ports (call-with-new-thread (lambda () - (guix-publish "--port=6796" "-C2" + (guix-publish "--port=6796" "-C2" "--ttl=42h" (string-append "--cache=" cache))))))) (wait-until-ready 6796) (let* ((base "http://localhost:6796/") @@ -437,13 +439,19 @@ FileSize: ~a~%" (and (= 404 (response-code response)) (wait-for-file cached) - (let* ((body (http-get-port url)) + (let* ((response (http-get url)) + (body (http-get-port url)) (compressed (http-get (string-append base "nar/gzip/" (basename item)))) (uncompressed (http-get (string-append base "nar/" (basename item)))) (narinfo (recutils->alist body))) (list (file-exists? nar) + (match (assq-ref (response-headers response) + 'cache-control) + ((('max-age . ttl)) ttl) + (_ #f)) + (filter (lambda (item) (match item (("Compression" . _) #t) @@ -452,6 +460,11 @@ FileSize: ~a~%" (_ #f))) narinfo) (response-code uncompressed) + (match (assq-ref (response-headers uncompressed) + 'cache-control) + ((('max-age . ttl)) ttl) + (_ #f)) + (string->number (assoc-ref narinfo "FileSize")) (response-code compressed)))))))))) diff --git a/tests/store-deduplication.scm b/tests/store-deduplication.scm index e438aa84c6..e2870a363d 100644 --- a/tests/store-deduplication.scm +++ b/tests/store-deduplication.scm @@ -48,7 +48,7 @@ (put-bytevector port data)))) identical) ;; Make the parent of IDENTICAL read-only. This should not prevent - ;; deduplication for inserting its hard link. + ;; deduplication from inserting its hard link. (chmod (dirname (second identical)) #o544) (call-with-output-file unique @@ -64,4 +64,46 @@ (stat:nlink (stat unique)) (map (compose stat:nlink stat) identical)))))) +(test-equal "deduplicate, ENOSPC" + (cons* #f ;inode comparison + (append (make-list 3 4) + (make-list 7 1))) ;'nlink' values + + ;; In this scenario the first 3 files are properly deduplicated and then we + ;; simulate a full '.links' directory where link(2) gets ENOSPC, thereby + ;; preventing deduplication of the subsequent files. + (call-with-temporary-directory + (lambda (store) + (let ((true-link link) + (links 0) + (data1 (string->utf8 "Hello, world!")) + (data2 (string->utf8 "Hi, world!")) + (identical (map (lambda (n) + (string-append store "/" (number->string n) + "/a/b/c")) + (iota 10))) + (populate (lambda (data) + (lambda (file) + (mkdir-p (dirname file)) + (call-with-output-file file + (lambda (port) + (put-bytevector port data))))))) + (for-each (populate data1) (take identical 5)) + (for-each (populate data2) (drop identical 5)) + (dynamic-wind + (lambda () + (set! link (lambda (old new) + (set! links (+ links 1)) + (if (<= links 3) + (true-link old new) + (throw 'system-error "link" "~A" '("Whaaat?!") + (list ENOSPC)))))) + (lambda () + (deduplicate store (nar-sha256 store) #:store store)) + (lambda () + (set! link true-link))) + + (cons (apply = (map (compose stat:ino stat) identical)) + (map (compose stat:nlink stat) identical)))))) + (test-end "store-deduplication") diff --git a/tests/substitute.scm b/tests/substitute.scm index 964a57f30b..f4f2e9512d 100644 --- a/tests/substitute.scm +++ b/tests/substitute.scm @@ -1,6 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014 Nikita Karetnikov <nikita@karetnikov.org> -;;; Copyright © 2014, 2015, 2017 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2014, 2015, 2017, 2018 Ludovic Courtès <ludo@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -211,6 +211,46 @@ a file for NARINFO." (lambda () (guix-substitute "--query")))))))) +(test-equal "query narinfo with signature over nothing" + ;; The signature is computed over the empty string, not over the important + ;; parts, so the narinfo must be ignored. + "" + + (with-narinfo (string-append "Signature: " (signature-field "") "\n" + %narinfo "\n") + (string-trim-both + (with-output-to-string + (lambda () + (with-input-from-string (string-append "have " (%store-prefix) + "/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-foo") + (lambda () + (guix-substitute "--query")))))))) + +(test-equal "query narinfo with signature over irrelevant bits" + ;; The signature is valid but it does not cover the + ;; StorePath/NarHash/References tuple and is thus irrelevant; the narinfo + ;; must be ignored. + "" + + (let ((prefix (string-append "StorePath: " (%store-prefix) + "/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-foo +URL: example.nar +Compression: none\n"))) + (with-narinfo (string-append prefix + "Signature: " (signature-field prefix) " +NarHash: sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +NarSize: 42 +References: bar baz +Deriver: " (%store-prefix) "/foo.drv +System: mips64el-linux\n") + (string-trim-both + (with-output-to-string + (lambda () + (with-input-from-string (string-append "have " (%store-prefix) + "/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-foo") + (lambda () + (guix-substitute "--query"))))))))) + (test-equal "query narinfo signed with authorized key" (string-append (%store-prefix) "/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-foo") |