diff options
author | Efraim Flashner <efraim@flashner.co.il> | 2018-07-14 20:55:36 +0300 |
---|---|---|
committer | Efraim Flashner <efraim@flashner.co.il> | 2018-07-14 20:56:03 +0300 |
commit | 0a34402b19b0563e3723f26fadb3681537e08faf (patch) | |
tree | 5ef4a8dd48b913971fbf42369448ed01712daa9d | |
parent | 8911d85b9c361c53df9a9b70ae7f8b03fbdb5b49 (diff) | |
parent | 5908818e309280b124b64f5320e4b98210093061 (diff) | |
download | guix-0a34402b19b0563e3723f26fadb3681537e08faf.tar.gz |
Merge remote-tracking branch 'origin/master' into qt-updates
85 files changed, 3857 insertions, 859 deletions
diff --git a/Makefile.am b/Makefile.am index 618d1653e4..134ab0f142 100644 --- a/Makefile.am +++ b/Makefile.am @@ -85,6 +85,7 @@ MODULES = \ guix/nar.scm \ guix/derivations.scm \ guix/grafts.scm \ + guix/inferior.scm \ guix/gnu-maintenance.scm \ guix/self.scm \ guix/upstream.scm \ @@ -200,6 +201,7 @@ MODULES = \ guix/scripts/substitute.scm \ guix/scripts/authenticate.scm \ guix/scripts/refresh.scm \ + guix/scripts/repl.scm \ guix/scripts/system.scm \ guix/scripts/system/search.scm \ guix/scripts/lint.scm \ @@ -357,6 +359,7 @@ SCM_TESTS = \ tests/profiles.scm \ tests/search-paths.scm \ tests/syscalls.scm \ + tests/inferior.scm \ tests/gremlin.scm \ tests/bournish.scm \ tests/lint.scm \ diff --git a/doc/contributing.texi b/doc/contributing.texi index 8feb519b0a..68d8e7e2fb 100644 --- a/doc/contributing.texi +++ b/doc/contributing.texi @@ -212,7 +212,8 @@ The commit message snippets depend on @url{https://magit.vc/, Magit} to display staged files. When editing a commit message type @code{add} followed by @kbd{TAB} to insert a commit message template for adding a package; type @code{update} followed by @kbd{TAB} to insert a template -for updating a package. +for updating a package; type @code{https} followed by @kbd{TAB} to +insert a template for changing the home page URI of a package to HTTPS. The main snippet for @code{scheme-mode} is triggered by typing @code{package...} followed by @kbd{TAB}. This snippet also inserts the diff --git a/doc/guix.texi b/doc/guix.texi index 8026bea356..c759ccb119 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -27,7 +27,7 @@ Copyright @copyright{} 2016, 2017, 2018 Chris Marusich@* Copyright @copyright{} 2016, 2017, 2018 Efraim Flashner@* Copyright @copyright{} 2016 John Darrington@* Copyright @copyright{} 2016, 2017 Nils Gillmann@* -Copyright @copyright{} 2016, 2017 Jan Nieuwenhuizen@* +Copyright @copyright{} 2016, 2017, 2018 Jan Nieuwenhuizen@* Copyright @copyright{} 2016 Julien Lepiller@* Copyright @copyright{} 2016 Alex ter Weele@* Copyright @copyright{} 2017, 2018 Clément Lassieur@* @@ -166,6 +166,7 @@ Programming Interface * Derivations:: Low-level interface to package derivations. * The Store Monad:: Purely functional interface to the store. * G-Expressions:: Manipulating build expressions. +* Invoking guix repl:: Fiddling with Guix interactively. Defining Packages @@ -2785,12 +2786,18 @@ Generation 2 Jun 11 2018 11:02:49 repository URL: https://git.savannah.gnu.org/git/guix.git branch: origin/master commit: e0cc7f669bec22c37481dd03a7941c7d11a64f1d + 2 new packages: keepalived, libnfnetlink + 6 packages upgraded: emacs-nix-mode@@2.0.4, + guile2.0-guix@@0.14.0-12.77a1aac, guix@@0.14.0-12.77a1aac, + heimdal@@7.5.0, milkytracker@@1.02.00, nix@@2.0.4 Generation 3 Jun 13 2018 23:31:07 (current) guix 844cc1c repository URL: https://git.savannah.gnu.org/git/guix.git branch: origin/master commit: 844cc1c8f394f03b404c5bb3aee086922373490c + 28 new packages: emacs-helm-ls-git, emacs-helm-mu, @dots{} + 69 packages upgraded: borg@@1.1.6, cheese@@3.28.0, @dots{} @end example This @code{~/.config/guix/current} profile works like any other profile @@ -3267,6 +3274,7 @@ package definitions. * Derivations:: Low-level interface to package derivations. * The Store Monad:: Purely functional interface to the store. * G-Expressions:: Manipulating build expressions. +* Invoking guix repl:: Fiddling with Guix interactively. @end menu @node Defining Packages @@ -4916,6 +4924,12 @@ containing @var{text}, a string. @var{references} is a list of store items that resulting text file refers to; it defaults to the empty list. @end deffn +@deffn {Monadic Procedure} binary-file @var{name} @var{data} [@var{references}] +Return as a monadic value the absolute file name in the store of the file +containing @var{data}, a bytevector. @var{references} is a list of store +items that the resulting binary file refers to; it defaults to the empty list. +@end deffn + @deffn {Monadic Procedure} interned-file @var{file} [@var{name}] @ [#:recursive? #t] [#:select? (const #t)] Return the name of @var{file} once interned in the store. Use @@ -5349,7 +5363,7 @@ procedure (@pxref{The Store Monad, @code{interned-file}}). @deffn {Scheme Procedure} plain-file @var{name} @var{content} Return an object representing a text file called @var{name} with the given -@var{content} (a string) to be added to the store. +@var{content} (a string or a bytevector) to be added to the store. This is the declarative counterpart of @code{text-file}. @end deffn @@ -5538,6 +5552,57 @@ corresponding to @var{obj} for @var{system}, cross-compiling for has an associated gexp compiler, such as a @code{<package>}. @end deffn +@node Invoking guix repl +@section Invoking @command{guix repl} + +@cindex REPL, read-eval-print loop +The @command{guix repl} command spawns a Guile @dfn{read-eval-print loop} +(REPL) for interactive programming (@pxref{Using Guile Interactively,,, guile, +GNU Guile Reference Manual}). Compared to just launching the @command{guile} +command, @command{guix repl} guarantees that all the Guix modules and all its +dependencies are available in the search path. You can use it this way: + +@example +$ guix repl +scheme@@(guile-user)> ,use (gnu packages base) +scheme@@(guile-user)> coreutils +$1 = #<package coreutils@@8.29 gnu/packages/base.scm:327 3e28300> +@end example + +@cindex inferiors +In addition, @command{guix repl} implements a simple machine-readable REPL +protocol for use by @code{(guix inferior)}, a facility to interact with +@dfn{inferiors}, separate processes running a potentially different revision +of Guix. + +The available options are as follows: + +@table @code +@item --type=@var{type} +@itemx -t @var{type} +Start a REPL of the given @var{TYPE}, which can be one of the following: + +@table @code +@item guile +This is default, and it spawns a standard full-featured Guile REPL. +@item machine +Spawn a REPL that uses the machine-readable protocol. This is the protocol +that the @code{(guix inferior)} module speaks. +@end table + +@item --listen=@var{endpoint} +By default, @command{guix repl} reads from standard input and writes to +standard output. When this option is passed, it will instead listen for +connections on @var{endpoint}. Here are examples of valid options: + +@table @code +@item --listen=tcp:37146 +Accept connections on localhost on port 37146. + +@item --listen=unix:/tmp/socket +Accept connections on the Unix-domain socket @file{/tmp/socket}. +@end table +@end table @c ********************************************************************* @node Utilities @@ -10844,6 +10909,21 @@ gexps to introduce job definitions that are passed to mcron for more information on mcron job specifications. Below is the reference of the mcron service. +On a running system, you can use the @code{schedule} action of the service to +visualize the mcron jobs that will be executed next: + +@example +# herd schedule mcron +@end example + +@noindent +The example above lists the next five tasks that will be executed, but you can +also specify the number of tasks to display: + +@example +# herd schedule mcron 10 +@end example + @deffn {Scheme Procedure} mcron-service @var{jobs} [#:mcron @var{mcron}] Return an mcron service running @var{mcron} that schedules @var{jobs}, a list of gexps denoting mcron job specifications. @@ -21963,6 +22043,17 @@ Constructors,,, shepherd, The GNU Shepherd Manual}). They are given as G-expressions that get expanded in the Shepherd configuration file (@pxref{G-Expressions}). +@item @code{actions} (default: @code{'()}) +@cindex actions, of Shepherd services +This is a list of @code{shepherd-action} objects (see below) defining +@dfn{actions} supported by the service, in addition to the standard +@code{start} and @code{stop} actions. Actions listed here become available as +@command{herd} sub-commands: + +@example +herd @var{action} @var{service} [@var{arguments}@dots{}] +@end example + @item @code{documentation} A documentation string, as shown when running: @@ -21980,6 +22071,54 @@ This is the list of modules that must be in scope when @code{start} and @end table @end deftp +@deftp {Data Type} shepherd-action +This is the data type that defines additional actions implemented by a +Shepherd service (see above). + +@table @code +@item name +Symbol naming the action. + +@item documentation +This is a documentation string for the action. It can be viewed by running: + +@example +herd doc @var{service} action @var{action} +@end example + +@item procedure +This should be a gexp that evaluates to a procedure of at least one argument, +which is the ``running value'' of the service (@pxref{Slots of services,,, +shepherd, The GNU Shepherd Manual}). +@end table + +The following example defines an action called @code{say-hello} that kindly +greets the user: + +@example +(shepherd-action + (name 'say-hello) + (documentation "Say hi!") + (procedure #~(lambda (running . args) + (format #t "Hello, friend! arguments: ~s\n" + args) + #t))) +@end example + +Assuming this action is added to the @code{example} service, then you can do: + +@example +# herd say-hello example +Hello, friend! arguments: () +# herd say-hello example a b c +Hello, friend! arguments: ("a" "b" "c") +@end example + +This, as you can see, is a fairly sophisticated way to say hello. +@xref{Service Convenience,,, shepherd, The GNU Shepherd Manual}, for more +info on actions. +@end deftp + @defvr {Scheme Variable} shepherd-root-service-type The service type for the Shepherd ``root service''---i.e., PID@tie{}1. diff --git a/etc/snippets/scheme-mode/guix-package b/etc/snippets/scheme-mode/guix-package index d392e82093..48b87e3599 100644 --- a/etc/snippets/scheme-mode/guix-package +++ b/etc/snippets/scheme-mode/guix-package @@ -7,7 +7,8 @@ (name "$1") (version "$2") (source origin...$0) - (build-system ${3:$$(yas-choose-value "ant-build-system" + (build-system ${3:$$(yas-choose-value "android-ndk-build-system" + "ant-build-system" "asdf-build-system" "cargo-build-system" "cmake-build-system" @@ -25,6 +26,7 @@ "python-build-system" "r-build-system" "ruby-build-system" + "scons-build-system" "texlive-build-system" "trivial-build-system" "waf-build-system")}) diff --git a/etc/snippets/text-mode/guix-commit-message-use-https-home-page b/etc/snippets/text-mode/guix-commit-message-use-https-home-page new file mode 100644 index 0000000000..df20d31a80 --- /dev/null +++ b/etc/snippets/text-mode/guix-commit-message-use-https-home-page @@ -0,0 +1,9 @@ +# -*- mode: snippet -*- +# name: guix-commit-message-use-https-home-page +# key: https +# condition: git-commit-mode +# -- +gnu: $1: Use HTTPS home page URI. + +* `(car (magit-staged-files))` ($1)[home-page]: Use HTTPS URI. +`(mapconcat (lambda (file) (concat "* " file)) (cdr (magit-staged-files)) "\n")` \ No newline at end of file diff --git a/gnu/local.mk b/gnu/local.mk index 8ec1f161ed..9e875263ac 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -564,7 +564,6 @@ dist_patch_DATA = \ %D%/packages/patches/aegis-test-fixup-1.patch \ %D%/packages/patches/aegis-test-fixup-2.patch \ %D%/packages/patches/agg-am_c_prototype.patch \ - %D%/packages/patches/alsa-lib-add-environment-variable.patch \ %D%/packages/patches/amule-crypto-6.patch \ %D%/packages/patches/ansible-wrap-program-hack.patch \ %D%/packages/patches/antiword-CVE-2014-8123.patch \ @@ -585,7 +584,6 @@ dist_patch_DATA = \ %D%/packages/patches/bash-completion-directories.patch \ %D%/packages/patches/bazaar-CVE-2017-14176.patch \ %D%/packages/patches/beignet-correct-file-names.patch \ - %D%/packages/patches/bind-CVE-2018-5738.patch \ %D%/packages/patches/binutils-aarch64-symbol-relocation.patch \ %D%/packages/patches/binutils-loongson-workaround.patch \ %D%/packages/patches/blast+-fix-makefile.patch \ @@ -809,6 +807,7 @@ dist_patch_DATA = \ %D%/packages/patches/intltool-perl-compatibility.patch \ %D%/packages/patches/isl-0.11.1-aarch64-support.patch \ %D%/packages/patches/jacal-fix-texinfo.patch \ + %D%/packages/patches/jamvm-arm.patch \ %D%/packages/patches/java-apache-ivy-port-to-latest-bouncycastle.patch \ %D%/packages/patches/java-commons-collections-fix-java8.patch \ %D%/packages/patches/java-jeromq-fix-tests.patch \ @@ -937,7 +936,6 @@ dist_patch_DATA = \ %D%/packages/patches/mcrypt-CVE-2012-4426.patch \ %D%/packages/patches/mcrypt-CVE-2012-4527.patch \ %D%/packages/patches/mesa-skip-disk-cache-test.patch \ - %D%/packages/patches/mesa-wayland-egl-symbols-check-mips.patch \ %D%/packages/patches/meson-for-build-rpath.patch \ %D%/packages/patches/metabat-fix-compilation.patch \ %D%/packages/patches/mhash-keygen-test-segfault.patch \ @@ -982,6 +980,7 @@ dist_patch_DATA = \ %D%/packages/patches/omake-fix-non-determinism.patch \ %D%/packages/patches/ola-readdir-r.patch \ %D%/packages/patches/opencascade-oce-glibc-2.26.patch \ + %D%/packages/patches/openblas-fix-tests-i686.patch \ %D%/packages/patches/openexr-missing-samples.patch \ %D%/packages/patches/openfoam-4.1-cleanup.patch \ %D%/packages/patches/openldap-CVE-2017-9287.patch \ @@ -1138,6 +1137,7 @@ dist_patch_DATA = \ %D%/packages/patches/superlu-dist-scotchmetis.patch \ %D%/packages/patches/swish-e-search.patch \ %D%/packages/patches/swish-e-format-security.patch \ + %D%/packages/patches/syncthing-fix-crash.patch \ %D%/packages/patches/synfigstudio-fix-ui-with-gtk3.patch \ %D%/packages/patches/t1lib-CVE-2010-2642.patch \ %D%/packages/patches/t1lib-CVE-2011-0764.patch \ @@ -1213,6 +1213,7 @@ dist_patch_DATA = \ %D%/packages/patches/wpa-supplicant-krack-followups.patch \ %D%/packages/patches/wxmaxima-do-not-use-old-gnuplot-parameters.patch \ %D%/packages/patches/x265-fix-ppc64le-build.patch \ + %D%/packages/patches/xapian-revert-5489fb2f8.patch \ %D%/packages/patches/xboing-CVE-2004-0149.patch \ %D%/packages/patches/xdotool-fix-makefile.patch \ %D%/packages/patches/xf86-video-ark-remove-mibstore.patch \ @@ -1220,7 +1221,9 @@ dist_patch_DATA = \ %D%/packages/patches/xf86-video-geode-glibc-2.20.patch \ %D%/packages/patches/xf86-video-i128-remove-mibstore.patch \ %D%/packages/patches/xf86-video-mach64-glibc-2.20.patch \ + %D%/packages/patches/xf86-video-savage-xorg-compat.patch \ %D%/packages/patches/xf86-video-siliconmotion-fix-ftbfs.patch \ + %D%/packages/patches/xf86-video-sis-xorg-compat.patch \ %D%/packages/patches/xf86-video-tga-remove-mibstore.patch \ %D%/packages/patches/xfce4-panel-plugins.patch \ %D%/packages/patches/xfce4-session-fix-xflock4.patch \ @@ -1228,6 +1231,7 @@ dist_patch_DATA = \ %D%/packages/patches/xinetd-fix-fd-leak.patch \ %D%/packages/patches/xinetd-CVE-2013-4342.patch \ %D%/packages/patches/xmodmap-asprintf.patch \ + %D%/packages/patches/zathura-pdf-mupdf-link-to-jpeg-libraries.patch \ %D%/packages/patches/zathura-plugindir-environment-variable.patch \ %D%/packages/patches/zstd-fix-stdin-list-without-tty.patch \ %D%/packages/patches/zstd-fix-stdin-list-test.patch diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm index fef6002b3c..de0aa92adb 100644 --- a/gnu/packages/base.scm +++ b/gnu/packages/base.scm @@ -10,7 +10,7 @@ ;;; Copyright © 2016, 2018 Alex Vong <alexvong1995@gmail.com> ;;; Copyright © 2017 Rene Saavedra <rennes@openmailbox.org> ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com> -;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com> +;;; Copyright © 2017, 2018 Marius Bakke <mbakke@fastmail.com> ;;; Copyright © 2017 Eric Bavier <bavier@member.fsf.org> ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net> @@ -1131,7 +1131,7 @@ command.") (define-public tzdata (package (name "tzdata") - (version "2018d") + (version "2018e") (source (origin (method url-fetch) (uri (string-append @@ -1139,7 +1139,7 @@ command.") version ".tar.gz")) (sha256 (base32 - "0m6020dnk9r40z7k36jp13fa06xip3hn0fdx3nly66jzxgffs1ji")))) + "0bk97fv2i5ns42prpmlaadsswdjwv0ifi7whj2s4q6l44rcqwa3b")))) (build-system gnu-build-system) (arguments '(#:tests? #f @@ -1189,7 +1189,7 @@ command.") version ".tar.gz")) (sha256 (base32 - "1nd882yhsazmcfqmcqyfig3axycryl30gmizgqhqsx5dpa2lxr3x")))))) + "1kpb02631s58i068mwq63xlamcv1ffj4p6y4wpb9kdl01vr0qd6a")))))) (home-page "https://www.iana.org/time-zones") (synopsis "Database of current and historical time zones") (description "The Time Zone Database (often called tz or zoneinfo) @@ -1205,7 +1205,25 @@ and daylight-saving rules.") ;;; will typically be obsolete and should never be referred to by a built ;;; package. (define-public tzdata-for-tests - (hidden-package tzdata)) + (hidden-package + (package + (inherit tzdata) + (version "2018d") + (source (origin + (method url-fetch) + (uri (string-append "https://www.iana.org/time-zones/repository" + "/releases/tzdata" version ".tar.gz")) + (sha256 + (base32 + "0m6020dnk9r40z7k36jp13fa06xip3hn0fdx3nly66jzxgffs1ji")))) + (inputs `(("tzcode" ,(origin + (method url-fetch) + (uri (string-append + "http://www.iana.org/time-zones/repository/releases/tzcode" + version ".tar.gz")) + (sha256 + (base32 + "1nd882yhsazmcfqmcqyfig3axycryl30gmizgqhqsx5dpa2lxr3x"))))))))) (define-public libiconv (package diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm index 73130b7312..7599f4ac25 100644 --- a/gnu/packages/bootloaders.scm +++ b/gnu/packages/bootloaders.scm @@ -425,8 +425,7 @@ def test_ctrl_c")) (apply invoke "make" "tools_defconfig" make-flags))) (replace 'build (lambda* (#:key inputs make-flags #:allow-other-keys) - (apply invoke "make" "tools-only" make-flags) - (apply invoke "make" "envtools" make-flags))) + (apply invoke "make" "tools-all" make-flags))) (replace 'install (lambda* (#:key outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) @@ -443,7 +442,8 @@ def test_ctrl_c")) "tools/mkimage" "tools/proftool" "tools/fdtgrep" - "tools/env/fw_printenv")) + "tools/env/fw_printenv" + "tools/sunxi-spl-image-builder")) #t))) (delete 'check) (add-after 'install 'check @@ -519,7 +519,8 @@ board-independent tools."))) (let ((target-file (string-append libexec "/" file))) (mkdir-p (dirname target-file)) (copy-file file target-file))) - uboot-files)))))))))) + uboot-files) + #t))))))))) (define-public u-boot-vexpress (make-u-boot-package "vexpress_ca9x4" "arm-linux-gnueabihf")) diff --git a/gnu/packages/build-tools.scm b/gnu/packages/build-tools.scm index a6d9fa8cfc..e693aec4ac 100644 --- a/gnu/packages/build-tools.scm +++ b/gnu/packages/build-tools.scm @@ -100,7 +100,7 @@ generate such a compilation database.") (define-public meson (package (name "meson") - (version "0.45.1") + (version "0.46.1") (source (origin (method url-fetch) (uri (string-append "https://github.com/mesonbuild/meson/" @@ -108,7 +108,7 @@ generate such a compilation database.") version ".tar.gz")) (sha256 (base32 - "1yqa4337nb8w92bvr91rsxmn0xkf7pmdybq9ljvnqmdvn7dv02sd")))) + "0y7f5hhy16q99l7x06x8sid9p9dbg6d7i60zs7c07cz5ww1plj8r")))) (build-system python-build-system) (arguments `(;; FIXME: Tests require many additional inputs, a fix for the RUNPATH diff --git a/gnu/packages/certs.scm b/gnu/packages/certs.scm index 3f592cf17b..cb05fb83fc 100644 --- a/gnu/packages/certs.scm +++ b/gnu/packages/certs.scm @@ -76,7 +76,7 @@ (define-public nss-certs (package (name "nss-certs") - (version "3.36.1") + (version "3.38") (source (origin (method url-fetch) (uri (let ((version-with-underscores @@ -87,7 +87,7 @@ "nss-" version ".tar.gz"))) (sha256 (base32 - "1zrb49mp7cy3snnday1zv8d76h1mgppbcwxnlkqsgxlga8fl89b0")))) + "0qigcy3d169cf67jzv3rbai0m6dn34vp8h2z696mz4yn10y3sr1c")))) (build-system gnu-build-system) (outputs '("out")) (native-inputs diff --git a/gnu/packages/chemistry.scm b/gnu/packages/chemistry.scm index f1359b2cf6..1a5086d622 100644 --- a/gnu/packages/chemistry.scm +++ b/gnu/packages/chemistry.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2018 Konrad Hinsen <konrad.hinsen@fastmail.net> +;;; Copyright © 2018 Kei Kebreau <kkebreau@posteo.net> ;;; ;;; This file is part of GNU Guix. ;;; @@ -20,9 +21,11 @@ #:use-module (guix packages) #:use-module ((guix licenses) #:prefix license:) #:use-module (guix download) + #:use-module (gnu packages compression) #:use-module (gnu packages gv) #:use-module (gnu packages maths) #:use-module (gnu packages python) + #:use-module (guix build-system gnu) #:use-module (guix build-system python)) (define-public domainfinder @@ -54,6 +57,84 @@ single structure. The software is currently not actively maintained and works only with Python 2 and NumPy < 1.9.") (license license:cecill-c))) +(define-public inchi + (package + (name "inchi") + (version "1.05") + (source (origin + (method url-fetch) + (uri (string-append "http://www.inchi-trust.org/download/" + (string-join (string-split version #\.) "") + "/INCHI-1-SRC.zip")) + (sha256 + (base32 + "081pcjx1z5jm23fs1pl2r3bccia0ww8wfkzcjpb7byhn7b513hsa")) + (file-name (string-append name "-" version ".zip")))) + (build-system gnu-build-system) + (arguments + '(#:tests? #f ; no check target + #:phases + (modify-phases %standard-phases + (delete 'configure) ; no configure script + (add-before 'build 'chdir-to-build-directory + (lambda _ (chdir "INCHI_EXE/inchi-1/gcc") #t)) + (add-after 'build 'build-library + (lambda _ + (chdir "../../../INCHI_API/libinchi/gcc") + (invoke "make"))) + (replace 'install + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bin (string-append out "/bin")) + (doc (string-append out "/share/doc/inchi")) + (include-dir (string-append out "/include/inchi")) + (lib (string-append out "/lib/inchi")) + (inchi-doc (assoc-ref inputs "inchi-doc")) + (unzip (string-append (assoc-ref inputs "unzip") + "/bin/unzip"))) + (chdir "../../..") + ;; Install binary. + (with-directory-excursion "INCHI_EXE/bin/Linux" + (rename-file "inchi-1" "inchi") + (install-file "inchi" bin)) + ;; Install libraries. + (with-directory-excursion "INCHI_API/bin/Linux" + (for-each (lambda (file) + (install-file file lib)) + (find-files "." "libinchi\\.so\\.1\\.*"))) + ;; Install header files. + (with-directory-excursion "INCHI_BASE/src" + (for-each (lambda (file) + (install-file file include-dir)) + (find-files "." "\\.h$"))) + ;; Install documentation. + (mkdir-p doc) + (invoke unzip "-j" "-d" doc inchi-doc) + #t)))))) + (native-inputs + `(("unzip" ,unzip) + ("inchi-doc" + ,(origin + (method url-fetch) + (uri (string-append "http://www.inchi-trust.org/download/" + (string-join (string-split version #\.) "") + "/INCHI-1-DOC.zip")) + (sha256 + (base32 + "1id1qb2y4lwsiw91qr2yqpn6kxbwjwhjk0hb2rwk4fxhdqib6da6")) + (file-name (string-append name "-" version ".zip")))))) + (home-page "https://www.inchi-trust.org") + (synopsis "Utility for manipulating machine-readable chemical structures") + (description + "The @dfn{InChI} (IUPAC International Chemical Identifier) algorithm turns +chemical structures into machine-readable strings of information. InChIs are +unique to the compound they describe and can encode absolute stereochemistry +making chemicals and chemistry machine-readable and discoverable. A simple +analogy is that InChI is the bar-code for chemistry and chemical structures.") + (license (license:non-copyleft + "file://LICENCE" + "See LICENCE in the distribution.")))) + (define with-numpy-1.8 (package-input-rewriting `((,python2-numpy . ,python2-numpy-1.8)))) diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm index 2ca431b2c1..0d73886109 100644 --- a/gnu/packages/compression.scm +++ b/gnu/packages/compression.scm @@ -1889,19 +1889,19 @@ create, manipulate, read, and write Zip archive files.") (define-public libzip (package (name "libzip") - (version "1.3.2") + (version "1.5.1") (source (origin (method url-fetch) (uri (string-append "https://libzip.org/download/" name "-" version ".tar.xz")) (sha256 (base32 - "11g1hvm2bxa2v5plakfzcwyk5hb5fz4kgrkp38l0xhnv21888xv2")))) + "0wnkkvkq90wyawj9221i77sf3nix1vj3ygzdy59k8yvcjnv3bsh4")))) (native-inputs `(("perl" ,perl))) (inputs `(("zlib" ,zlib))) - (build-system gnu-build-system) + (build-system cmake-build-system) (home-page "https://libzip.org") (synopsis "C library for reading, creating, and modifying zip archives") (description "Libzip is a C library for reading, creating, and modifying diff --git a/gnu/packages/curl.scm b/gnu/packages/curl.scm index 65bc698389..e724fd147b 100644 --- a/gnu/packages/curl.scm +++ b/gnu/packages/curl.scm @@ -51,7 +51,7 @@ (package (name "curl") (version "7.59.0") - (replacement curl-7.60.0) + (replacement curl-7.61.0) (source (origin (method url-fetch) (uri (string-append "https://curl.haxx.se/download/curl-" @@ -141,10 +141,10 @@ tunneling, and so on.") "See COPYING in the distribution.")) (home-page "https://curl.haxx.se/"))) -(define-public curl-7.60.0 +(define-public curl-7.61.0 (package (inherit curl) - (version "7.60.0") + (version "7.61.0") (source (origin (method url-fetch) @@ -152,7 +152,7 @@ tunneling, and so on.") version ".tar.xz")) (sha256 (base32 - "1876ck0smbqz3xakm7s6q6gh4zarh9pv3izf4vlzgpc9xn6zydl7")))))) + "080p9r2kln8cbfj0rqfn6wqp5kdn9k5wp720nirkcw845lcmavpg")))))) (define-public kurly (package diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm index 0f1e47f485..55979834c9 100644 --- a/gnu/packages/databases.scm +++ b/gnu/packages/databases.scm @@ -705,14 +705,14 @@ as a drop-in replacement of MySQL.") (define-public postgresql (package (name "postgresql") - (version "10.3") + (version "10.4") (source (origin (method url-fetch) (uri (string-append "https://ftp.postgresql.org/pub/source/v" version "/postgresql-" version ".tar.bz2")) (sha256 (base32 - "06lkcwsf851z49zqcws5yc77s2yrbaazf2nvbk38hpp31rw6i8kf")))) + "0j000bcs9w8wrllg8m7j1lxsd3n2x0yzkack5p35cmxx20iq2q0v")))) (build-system gnu-build-system) (arguments `(#:configure-flags '("--with-uuid=e2fs") @@ -1070,14 +1070,14 @@ is in the public domain.") (define-public tdb (package (name "tdb") - (version "1.3.15") + (version "1.3.16") (source (origin (method url-fetch) (uri (string-append "https://www.samba.org/ftp/tdb/tdb-" version ".tar.gz")) (sha256 (base32 - "0a37jhpij8wr4f4pjqdlwnffy2l6a2vkqdpz1bqxj6v06cwbz8dl")))) + "1ibcz466xwk1x6xvzlgzd5va4lyrjzm3rnjak29kkwk7cmhw4gva")))) (build-system gnu-build-system) (arguments '(#:phases diff --git a/gnu/packages/dns.scm b/gnu/packages/dns.scm index 78479b2d32..ffa442f4d6 100644 --- a/gnu/packages/dns.scm +++ b/gnu/packages/dns.scm @@ -9,6 +9,7 @@ ;;; Copyright © 2016 Marius Bakke <mbakke@fastmail.com> ;;; Copyright © 2017 Vasile Dumitrascu <va511e@yahoo.com> ;;; Copyright © 2017 Gregor Giesen <giesen@zaehlwerk.net> +;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -29,7 +30,9 @@ #:use-module (gnu packages admin) #:use-module (gnu packages autotools) #:use-module (gnu packages base) + #:use-module (gnu packages bash) #:use-module (gnu packages databases) + #:use-module (gnu packages compression) #:use-module (gnu packages crypto) #:use-module (gnu packages datastructures) #:use-module (gnu packages flex) @@ -55,7 +58,8 @@ #:use-module (guix packages) #:use-module (guix download) #:use-module (guix utils) - #:use-module (guix build-system gnu)) + #:use-module (guix build-system gnu) + #:use-module (guix build-system trivial)) (define-public dnsmasq (package @@ -99,16 +103,15 @@ and BOOTP/TFTP for network booting of diskless machines.") (define-public isc-bind (package (name "bind") - (version "9.12.1-P2") + (version "9.12.2") (source (origin (method url-fetch) (uri (string-append "ftp://ftp.isc.org/isc/bind9/" version "/" name "-" version ".tar.gz")) - (patches (search-patches "bind-CVE-2018-5738.patch")) (sha256 (base32 - "0a9dvyg1dk7vpqn9gz7p5jas3bz7z22bjd66b98g1qk16i2w7rqd")))) + "0ll46igs9xfq2qclc5wzqsnj3zv7ssga0544gm24s1m7765lqslz")))) (build-system gnu-build-system) (outputs `("out" "utils")) (inputs @@ -288,7 +291,7 @@ asynchronous fashion.") (define-public unbound (package (name "unbound") - (version "1.6.8") + (version "1.7.3") (source (origin (method url-fetch) @@ -296,7 +299,7 @@ asynchronous fashion.") version ".tar.gz")) (sha256 (base32 - "0jfxhh4gc5amhndikskz1s7da27ycn442j3l20bm992n7zijid73")))) + "0bb0p8nbda77ghx20yfl7hqxm9x709223q35465v99i8v4ay27f1")))) (build-system gnu-build-system) (outputs '("out" "python")) (native-inputs @@ -576,3 +579,89 @@ synthesis, and on-the-fly re-configuration.") license:lgpl2.0+ ; parts of scr/contrib/ucw license:public-domain ; src/contrib/fnv and possibly murmurhash3 license:gpl3+)))) ; everything else + +(define-public ddclient + (package + (name "ddclient") + (version "3.8.3") + (source (origin + (method url-fetch) + (uri (string-append "mirror://sourceforge/ddclient/ddclient/ddclient-" + version "/ddclient-" version ".tar.gz")) + (sha256 + (base32 + "1j8zdn7fy7i0bjk3jf0hxnbnshc2yf054vxq64imxdpfd7n5zgfy")))) + (build-system trivial-build-system) ; no Makefile.PL + (native-inputs + `(("bash" ,bash) + ("gzip" ,gzip) + ("perl" ,perl) + ("tar" ,tar))) + (inputs + `(("net-tools" ,net-tools) + ("inetutils" ,inetutils) ;logger + ("perl-io-socket-ssl" ,perl-io-socket-ssl) + ("perl-digest-sha1" ,perl-digest-sha1))) + (arguments + `(#:modules ((guix build utils) + (ice-9 match) + (srfi srfi-26)) + #:builder + (begin + (use-modules (guix build utils) + (ice-9 match) + (srfi srfi-26)) + ;; bootstrap + (setenv "PATH" (string-append + (assoc-ref %build-inputs "bash") "/bin" ":" + (assoc-ref %build-inputs "tar") "/bin" ":" + (assoc-ref %build-inputs "gzip") "/bin" ":" + (assoc-ref %build-inputs "perl") "/bin")) + ;; extract source + (invoke "tar" "xvf" (assoc-ref %build-inputs "source")) + ;; package + (with-directory-excursion (string-append ,name "-" ,version) + (let* ((out (assoc-ref %outputs "out")) + (bin (string-append out "/bin"))) + (let ((file "ddclient")) + (substitute* file + (("/usr/bin/perl") (which "perl")) + ;; Strictly use ‘/etc/ddclient/ddclient.conf’. + (("\\$\\{program\\}\\.conf") "/etc/ddclient/ddclient.conf") + (("\\$etc\\$program.conf") "/etc/ddclient/ddclient.conf") + ;; Strictly use ‘/var/cache/ddclient/ddclient.cache’ + (("\\$cachedir\\$program\\.cache") + "/var/cache/ddclient/ddclient.cache")) + (install-file file bin) + (wrap-program (string-append bin "/" file) + `("PATH" ":" = + ("$PATH" + ,@(map (lambda (input) + (match input + ((name . store) + (string-append store "/bin")))) + %build-inputs))) + `("PERL5LIB" ":" = + ,(delete + "" + (map (match-lambda + (((? (cut string-prefix? "perl-" <>) name) . dir) + (string-append dir "/lib/perl5/site_perl")) + (_ "")) + %build-inputs))))) + (for-each (cut install-file <> (string-append out + "/share/ddclient")) + (find-files "." "sample.*$"))))))) + (home-page "https://sourceforge.net/projects/ddclient/") + (synopsis "Address updating utility for dynamic DNS services") + (description "This package provides a client to update dynamic IP +addresses with several dynamic DNS service providers, such as +@uref{https://www.dyndns.com/account/login.html,DynDNS.com}. + +This makes it possible to use a fixed hostname (such as myhost.dyndns.org) to +access a machine with a dynamic IP address. + +The client supports both dynamic and (near) static services, as well as MX +record and alternative name management. It caches the address, and only +attempts the update when it has changed.") + (license license:gpl2+))) diff --git a/gnu/packages/documentation.scm b/gnu/packages/documentation.scm index 2ffe541294..f533535f03 100644 --- a/gnu/packages/documentation.scm +++ b/gnu/packages/documentation.scm @@ -123,14 +123,14 @@ markup) can be customized and extended by the user.") (define-public doxygen (package (name "doxygen") - (version "1.8.13") + (version "1.8.14") (source (origin (method url-fetch) (uri (string-append "http://ftp.stack.nl/pub/users/dimitri/" name "-" version ".src.tar.gz")) (sha256 (base32 - "0srzawqn3apzrg8hwycwrawdylmmjrndij4spw6xr1vspn3phrmg")) + "0kcxymbam9jwiyjwyvwdjj0h74lbb6c467szsipzbxjyfl17wxfi")) (patches (search-patches "doxygen-test.patch")))) (build-system cmake-build-system) (native-inputs diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm index c6c7a1df4b..11cd244deb 100644 --- a/gnu/packages/emacs.scm +++ b/gnu/packages/emacs.scm @@ -35,6 +35,7 @@ ;;; Copyright © 2018 Sohom Bhattacharjee <soham.bhattacharjee15@gmail.com> ;;; Copyright © 2018 Mathieu Lirzin <mthl@gnu.org> ;;; Copyright © 2018 Pierre Neidhardt <ambrevar@gmail.com> +;;; Copyright © 2018 Tim Gesthuizen <tim.gesthuizen@yahoo.de> ;;; ;;; This file is part of GNU Guix. ;;; @@ -8516,6 +8517,10 @@ outline-mode), so there is no such thing like an outshine mode, only (base32 "109fvivsb4r0rbqljngqrmxqvbnbkqlivczx6brrvlr7ci625lhf")))) (build-system emacs-build-system) + (propagated-inputs + `(("emacs-seq" ,emacs-seq) + ("emacs-dash" ,emacs-dash) + ("emacs-let-alist" ,emacs-let-alist))) (home-page "https://github.com/cpitclaudel/biblio.el") (synopsis "Browse and import bibliographic references") (description "This package provides an extensible Emacs package for @@ -8550,7 +8555,8 @@ automatically fetched from well-curated sources, and formatted as BibTeX.") ("emacs-s" ,emacs-s) ("emacs-dash" ,emacs-dash) ("emacs-f" ,emacs-f) - ("emacs-biblio" ,emacs-biblio))) + ("emacs-biblio" ,emacs-biblio) + ("emacs-ivy" ,emacs-ivy))) (home-page "https://github.com/tmalsburg/helm-bibtex") (synopsis "Bibliography manager based on Helm") (description "This package provides bibliography manager for Emacs, @@ -11410,3 +11416,50 @@ siblings and friends. This visual overview can also be used to browse your entries. You can think of entries as nodes in a mind map, or pages in a wiki.") (license license:expat))) + +(define-public emacs-recent-addresses + (let ((commit "d9da58db542089a1ceb5ef29e420dbfbc4a36373") + (revision "0")) + (package + (name "emacs-recent-addresses") + (home-page "http://nschum.de/src/emacs/recent-addresses/") + (version (git-version "0.1" revision commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/nschum/recent-addresses.el") + (commit commit))) + (sha256 + (base32 + "175rvcwmkb5z7ss7q2y5178mvdvp5bhn39irz80qinlvaz8fm4nk")) + (file-name (git-file-name name version)))) + (build-system emacs-build-system) + (synopsis "Record recently-used email addressed and auto-complete them") + (description + "@code{recent-addresses} is an Emacs allows you to quickly look up +previously used email addresses. It can be used alongside the Gnus email +client.") + (license license:gpl2+)))) + +(define-public emacs-fold-dwim + (let ((commit "c46f4bb2ce91b4e307136320e72c28dd50b6cd8b") + (revision "0")) + (package + (name "emacs-fold-dwim") + (version (git-version "1.2" revision commit)) + (home-page "https://github.com/emacsattic/fold-dwim") + (source (origin + (method git-fetch) + (uri (git-reference (url home-page) (commit commit))) + (sha256 + (base32 + "1yz1wis31asw6xa5maliyd1ck2q02xnnh7dc6swgj9cb4wi7k6i1")) + (file-name (git-file-name name version)))) + (build-system emacs-build-system) + (synopsis "Unified user interface for Emacs folding modes") + (description + "DWIM stands for \"do what I mean\", as in the idea that one keystroke +can do different things depending on the context. In this package, it means +that, if the cursor is in a currently hidden folded construction, we want to +show it; if it's not, we want to hide whatever fold the cursor is in.") + (license license:gpl2+)))) diff --git a/gnu/packages/freedesktop.scm b/gnu/packages/freedesktop.scm index 7775e85714..b42a27b8c8 100644 --- a/gnu/packages/freedesktop.scm +++ b/gnu/packages/freedesktop.scm @@ -147,14 +147,14 @@ freedesktop.org project.") (define-public libinput (package (name "libinput") - (version "1.10.3") + (version "1.11.1") (source (origin (method url-fetch) (uri (string-append "https://freedesktop.org/software/libinput/" name "-" version ".tar.xz")) (sha256 (base32 - "0002xk9cqzpqrlhgav1wp8nimsbp9d2w8rd8mgygczq2hjar0lhd")))) + "1z7i8vk0i61npkdqwsk85wp9v4yjlvylqnyydikjqnbsrjp9abk4")))) (build-system meson-build-system) (arguments `(#:configure-flags '("-Ddocumentation=false"))) @@ -474,7 +474,7 @@ applications, X servers (rootless or fullscreen) or other display servers.") (define-public wayland-protocols (package (name "wayland-protocols") - (version "1.13") + (version "1.14") (source (origin (method url-fetch) (uri (string-append @@ -482,7 +482,7 @@ applications, X servers (rootless or fullscreen) or other display servers.") "wayland-protocols-" version ".tar.xz")) (sha256 (base32 - "0f4gqvmz53q9d8h0ilhf4z773nb4vskzx11a3d1jycym120bqn07")))) + "1xknjcfhqvdi1s4iq4kk1q61fg2rar3g8q4vlqarpd324imqjj4n")))) (build-system gnu-build-system) (inputs `(("wayland" ,wayland))) diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm index 4131c130ff..afabeb0c62 100644 --- a/gnu/packages/game-development.scm +++ b/gnu/packages/game-development.scm @@ -7,7 +7,7 @@ ;;; Copyright © 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2016, 2017 Kei Kebreau <kkebreau@posteo.net> ;;; Copyright © 2016, 2018 Ricardo Wurmus <rekado@elephly.net> -;;; Copyright © 2016, 2017 Julian Graham <joolean@gmail.com> +;;; Copyright © 2016, 2017, 2018 Julian Graham <joolean@gmail.com> ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2017 Manolis Fragkiskos Ragkousis <manolis837@gmail.com> ;;; Copyright © 2017 Peter Mikkelsen <petermikkelsen10@gmail.com> @@ -225,14 +225,14 @@ PCM data.") (define-public gzochi (package (name "gzochi") - (version "0.11.1") + (version "0.12") (source (origin (method url-fetch) (uri (string-append "mirror://savannah/gzochi/gzochi-" version ".tar.gz")) (sha256 (base32 - "13j1m92zhxwkaaja3lg5x0h0b28mrrawdzk9d3hd19031akfxwb3")))) + "0h8yvk7154kd8zdfa9nqy73blrjq2x19kv305jcnwlmm09vvss59")))) (build-system gnu-build-system) (arguments '(#:phases (modify-phases %standard-phases diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm index f6e277e33d..fdca3d2ffc 100644 --- a/gnu/packages/gcc.scm +++ b/gnu/packages/gcc.scm @@ -627,7 +627,7 @@ as the 'native-search-paths' field." (lambda* (#:key outputs #:allow-other-keys) (for-each delete-file (find-files (string-append (assoc-ref outputs "out") "/bin") - ".*(c\\+\\+|cpp|g\\+\\+|gcov|gcc.*)")) + ".*(c\\+\\+|cpp|g\\+\\+|gcov|gcc|gcc-.*)")) #t)))))))) (define %generic-search-paths diff --git a/gnu/packages/gl.scm b/gnu/packages/gl.scm index 503308ac16..bde6e55607 100644 --- a/gnu/packages/gl.scm +++ b/gnu/packages/gl.scm @@ -224,7 +224,7 @@ also known as DXTn or DXTC) for Mesa.") (define-public mesa (package (name "mesa") - (version "17.3.8") + (version "18.1.2") (source (origin (method url-fetch) @@ -236,10 +236,9 @@ also known as DXTn or DXTC) for Mesa.") version "/mesa-" version ".tar.xz"))) (sha256 (base32 - "1cd6a4ll5arla3kncxnw9196ak1v4rvnb098aa7lm3n4h7r9p7cg")) + "1ydivzm4c2k53b65lvm11d62z140xlmd7viw63bl5cm5idjg02q7")) (patches - (search-patches "mesa-wayland-egl-symbols-check-mips.patch" - "mesa-skip-disk-cache-test.patch")))) + (search-patches "mesa-skip-disk-cache-test.patch")))) (build-system gnu-build-system) (propagated-inputs `(;; The following are in the Requires.private field of gl.pc. @@ -260,7 +259,7 @@ also known as DXTn or DXTC) for Mesa.") ("libxvmc" ,libxvmc) ,@(match (%current-system) ((or "x86_64-linux" "i686-linux") - `(("llvm" ,llvm-3.9.1))) ; exactly 3.9.0 or 3.9.1 for swrast + `(("llvm" ,llvm))) (_ `())) ("makedepend" ,makedepend) @@ -276,15 +275,15 @@ also known as DXTn or DXTC) for Mesa.") '(,@(match (%current-system) ("armhf-linux" ;; TODO: Add etnaviv,imx when libdrm supports etnaviv. - '("--with-gallium-drivers=freedreno,nouveau,r300,r600,swrast,vc4,virgl")) + '("--with-gallium-drivers=freedreno,nouveau,r300,r600,swrast,tegra,vc4,virgl")) ("aarch64-linux" ;; TODO: Fix svga driver for aarch64 and armhf. - '("--with-gallium-drivers=freedreno,nouveau,pl111,r300,r600,swrast,vc4,virgl")) + '("--with-gallium-drivers=freedreno,nouveau,pl111,r300,r600,swrast,tegra,vc4,virgl")) (_ '("--with-gallium-drivers=i915,nouveau,r300,r600,radeonsi,svga,swrast,virgl"))) ;; Enable various optional features. TODO: opencl requires libclc, ;; omx requires libomxil-bellagio - "--with-platforms=x11,drm,wayland,surfaceless" + "--with-platforms=x11,drm,surfaceless,wayland" "--enable-glx-tls" ;Thread Local Storage, improves performance ;; "--enable-opencl" ;; "--enable-omx" @@ -328,23 +327,15 @@ also known as DXTn or DXTC) for Mesa.") (add-after 'unpack 'patch-create_test_cases (lambda _ - (substitute* "src/compiler/glsl/tests/lower_jumps/create_test_cases.py" - (("/usr/bin/env bash") (which "bash"))) (substitute* "src/intel/genxml/gen_pack_header.py" (("/usr/bin/env python2") (which "python"))) #t)) (add-before 'build 'fix-dlopen-libnames (lambda* (#:key inputs outputs #:allow-other-keys) - (let ((s2tc (assoc-ref inputs "s2tc")) - (out (assoc-ref outputs "out"))) + (let ((out (assoc-ref outputs "out"))) ;; Remain agnostic to .so.X.Y.Z versions while doing ;; the substitutions so we're future-safe. - (substitute* - '("src/gallium/auxiliary/util/u_format_s3tc.c" - "src/mesa/main/texcompress_s3tc.c") - (("\"libtxc_dxtn\\.so") - (string-append "\"" s2tc "/lib/libtxc_dxtn.so"))) (substitute* "src/glx/dri_common.c" (("dlopen\\(\"libGL\\.so") (string-append "dlopen(\"" out "/lib/libGL.so"))) @@ -559,7 +550,7 @@ OpenGL graphics API.") (define-public libepoxy (package (name "libepoxy") - (version "1.5.0") + (version "1.5.2") (source (origin (method url-fetch) (uri (string-append @@ -567,7 +558,7 @@ OpenGL graphics API.") version "/libepoxy-" version ".tar.xz")) (sha256 (base32 - "1md58amxyp34yjnw4xa185hw5jm0hnb2xnhdc28zdsx6k19rk52c")))) + "1n57xj5i6giw4mp5s59w1m9bm33sd6gjg7r00dzzvcwya6326mm9")))) (arguments `(#:phases (modify-phases %standard-phases diff --git a/gnu/packages/glib.scm b/gnu/packages/glib.scm index 7ea22fe88f..95d7976bf8 100644 --- a/gnu/packages/glib.scm +++ b/gnu/packages/glib.scm @@ -787,7 +787,7 @@ programming langauage. It also contains the utility (define-public appstream-glib (package (name "appstream-glib") - (version "0.7.5") + (version "0.7.10") (source (origin (method url-fetch) (uri (string-append "https://people.freedesktop.org/~hughsient/" @@ -795,7 +795,7 @@ programming langauage. It also contains the utility "appstream-glib-" version ".tar.xz")) (sha256 (base32 - "0ps80cbqnf3q86rvz3ajqjssdgkjc9kmynqf0wxqfir7ayc9y9ag")))) + "08bs0hnkvdzqv9pakv1y4c4ph77rmzjq22g760w20sv7vs63nia3")))) (build-system meson-build-system) (native-inputs `(("gettext" ,gettext-minimal) diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm index 19a216aa2a..a571d922cb 100644 --- a/gnu/packages/gnome.scm +++ b/gnu/packages/gnome.scm @@ -30,6 +30,7 @@ ;;; Copyright © 2017 Brendan Tildesley <brendan.tildesley@openmailbox.org> ;;; Copyright © 2017, 2018 Rutger Helling <rhelling@mykolab.com> ;;; Copyright © 2018 Jovany Leandro G.C <bit4bit@riseup.net> +;;; Copyright © 2018 Vasile Dumitrascu <va511e@yahoo.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -6321,7 +6322,16 @@ fit the GNOME desktop.") (base32 "007k2bq8iplg4psdpz074r5d4zxvn4s95qym4rw9hs6giljbrf0n")))) (build-system meson-build-system) - (arguments '(#:glib-or-gtk? #t)) + (arguments '(#:glib-or-gtk? #t + #:phases (modify-phases %standard-phases + (add-after 'unpack 'patch-install-script + (lambda _ + ;; This script attempts to compile glib schemas + ;; and create an empty MIME database. We do + ;; that elsewhere, so prevent it from running. + (substitute* "build-aux/post-install.sh" + (("\\[ -z \"\\$DESTDIR\" \\]") "false")) + #t))))) (native-inputs `(("glib:bin" ,glib "bin") ("gobject-introspection" ,gobject-introspection) @@ -6467,7 +6477,7 @@ like GNOME, Unity, Budgie, Pantheon, XFCE, Mate, etc.") (define-public faba-icon-theme (package (name "faba-icon-theme") - (version "4.1.2") + (version "4.3") (source (origin (method url-fetch) @@ -6476,23 +6486,15 @@ like GNOME, Unity, Budgie, Pantheon, XFCE, Mate, etc.") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "0hi2dl627ayfnihn3v6x9xzid668m4hp098hb7hrkxvahh4h9by7")))) - (build-system gnu-build-system) + "18ln06xl60qzvzz61zq9q72hdbfgjsza3flph8i2asyzx3dffz68")))) + (build-system meson-build-system) (arguments - '(#:phases + `(#:phases (modify-phases %standard-phases - (add-after 'unpack 'patch-makefile.am + (add-before 'configure 'disable-post-install (lambda _ - (substitute* '("Makefile.am") - (("\\$\\(DESTDIR\\)/usr/share") - "$(datadir)")) - #t)) - (add-after 'unpack 'disable-configure-during-bootstrap - (lambda _ - ;; Do not run configure as part of autogen.sh because references - ;; to /bin are not fixed yet. - (setenv "NOCONFIGURE" "y") - #t))))) + (substitute* "meson.build" + (("meson.add_install_script.*") ""))))))) (native-inputs `(("autoconf" ,autoconf) ("automake" ,automake))) @@ -6508,7 +6510,7 @@ Moka") (package (inherit faba-icon-theme) (name "moka-icon-theme") - (version "5.3.6") + (version "5.4.0") (source (origin (method url-fetch) (uri (string-append "https://github.com/moka-project" @@ -6517,7 +6519,7 @@ Moka") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "04axinv79qnngsxkwqzi5j9lc3hn24rjqps5ai8d42pdnfaf0x37")))) + "1nbwdjj268hxv9lfagd9aylily9f0hhallp841v0i3imljp84bmk")))) (propagated-inputs ;; Moka is based on Faba by using it as a fallback icon set instead of ;; bundling it, so we need to add it as a propagated input. diff --git a/gnu/packages/gnupg.scm b/gnu/packages/gnupg.scm index da0c33565a..c095a966c2 100644 --- a/gnu/packages/gnupg.scm +++ b/gnu/packages/gnupg.scm @@ -245,14 +245,14 @@ compatible to GNU Pth.") (define-public gnupg (package (name "gnupg") - (version "2.2.8") + (version "2.2.9") (source (origin (method url-fetch) (uri (string-append "mirror://gnupg/gnupg/gnupg-" version ".tar.bz2")) (sha256 (base32 - "1k8dnnfs9888yp713l7kg2jg110lw47s4krx0njna6fjrsw4qyvp")))) + "0r11mx8nkh7ysrnshs560amha5csx8zcaggb5kxcksx1zymyly32")))) (build-system gnu-build-system) (native-inputs `(("pkg-config" ,pkg-config))) diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm index 9e6061eb64..ba60d1372a 100644 --- a/gnu/packages/gnuzilla.scm +++ b/gnu/packages/gnuzilla.scm @@ -291,7 +291,7 @@ in the Mozilla clients.") (define-public nss (package (name "nss") - (version "3.36.1") + (version "3.38") (source (origin (method url-fetch) (uri (let ((version-with-underscores @@ -302,7 +302,7 @@ in the Mozilla clients.") "nss-" version ".tar.gz"))) (sha256 (base32 - "1zrb49mp7cy3snnday1zv8d76h1mgppbcwxnlkqsgxlga8fl89b0")) + "0qigcy3d169cf67jzv3rbai0m6dn34vp8h2z696mz4yn10y3sr1c")) ;; Create nss.pc and nss-config. (patches (search-patches "nss-pkgconfig.patch" "nss-increase-test-timeout.patch")))) diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm index 21783f2ee6..92ce504c52 100644 --- a/gnu/packages/golang.scm +++ b/gnu/packages/golang.scm @@ -1840,3 +1840,138 @@ deliver content") store, and deliver content. It's containe Docker Registry 2.0 and libraries to interacting with distribution components.") (license license:asl2.0)))) + +(define-public go-github-com-docker-go-connections + (let ((commit "3ede32e2033de7505e6500d6c868c2b9ed9f169d") + (revision "0")) + (package + (name "go-github-com-docker-go-connections") + (version (git-version "0.0.0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/docker/go-connections.git") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0v1pkr8apwmhyzbjfriwdrs1ihlk6pw7izm57r24mf9jdmg3fyb0")))) + (build-system go-build-system) + (arguments + '(#:import-path "github.com/docker/go-connections")) + (home-page "https://github.com/docker/go-connections") + (synopsis "Networking library for Go") + (description + "This packages provides a library to work with network connections in +the Go language. In particular it provides tools to deal with network address +translation (NAT), proxies, sockets, and transport layer security (TLS).") + (license license:asl2.0)))) + +(define-public go-github-com-docker-machine + (let ((commit "7b7a141da84480342357c51838be142bf183b095") + (revision "0")) + (package + (name "go-github-com-docker-machine") + (version (git-version "0.0.0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/docker/machine.git") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0bavk0lvs462yh0lnmnxi9psi5qv1x3nvzmd2b0drsahlp1gxi8s")))) + (build-system go-build-system) + (arguments + '(#:import-path "github.com/docker/machine")) + (home-page "https://github.com/docker/machine") + (synopsis "Machine management for a container-centric world") + (description + "@dfn{Machine} lets you create Docker hosts on your computer, on +hosting providers, and inside your data center. It creates servers, installs +Docker on them, then configures the Docker client to talk to them.") + (license license:asl2.0)))) + +(define-public go-github-com-gorhill-cronexpr + (let ((commit "f0984319b44273e83de132089ae42b1810f4933b") + (revision "0")) + (package + (name "go-github-com-gorhill-cronexpr") + (version (git-version "0.0.0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/gorhill/cronexpr.git") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0dphhhqy3i7265znv3m8n57l80dmaq6z4hsj5kgd87qd19z8x0l2")))) + (build-system go-build-system) + (arguments + '(#:import-path "github.com/gorhill/cronexpr")) + (home-page "https://github.com/gorhill/cronexpr") + (synopsis "Cron expression parser in the Go language") + (description + "This package provides a cron expression parser in the Go language. +Given a cron expression and a time stamp, you can get the next time stamp +which satisfies the cron expression.") + (license (list license:gpl3+ + license:asl2.0))))) + +(define-public go-gopkg-in-check-v1 + (let ((commit "20d25e2804050c1cd24a7eea1e7a6447dd0e74ec") + (revision "0")) + (package + (name "go-gopkg-in-check-v1") + (version (git-version "0.0.0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/go-check/check") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0k1m83ji9l1a7ng8a7v40psbymxasmssbrrhpdv2wl4rhs0nc3np")))) + (build-system go-build-system) + (arguments + '(#:import-path "gopkg.in/check.v1")) + (home-page "https://gopkg.in/check.v1") + (synopsis "Test framework for the Go language") + (description + "This package provides a test library for the Go language.") + (license license:asl2.0)))) + +(define-public go-gopkg-in-yaml-v2 + (let ((commit "14227de293ca979cf205cd88769fe71ed96a97e2") + (revision "0")) + (package + (name "go-gopkg-in-yaml-v2") + (version (git-version "0.0.0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://gopkg.in/yaml.v2.git") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "038hnrjcnjygyi3qidfrkpkakis82qg381sr495d2s40g2dwlzah")))) + (build-system go-build-system) + (arguments + '(#:import-path "gopkg.in/yaml.v2")) + (native-inputs + `(("go-gopkg-in-check-v1" ,go-gopkg-in-check-v1))) + (home-page "https://gopkg.in/yaml.v2") + (synopsis "YAML reader and writer for the Go language") + (description + "This package provides a Go library for encode and decode YAML +values.") + (license license:asl2.0)))) diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm index 83db8f6b30..3718e939d1 100644 --- a/gnu/packages/gtk.scm +++ b/gnu/packages/gtk.scm @@ -42,6 +42,7 @@ #:use-module (guix download) #:use-module (guix git-download) #:use-module (guix build-system gnu) + #:use-module (guix build-system meson) #:use-module (guix build-system perl) #:use-module (guix build-system python) #:use-module (guix build-system waf) @@ -670,7 +671,7 @@ application suites.") (name "gtk+") ;; NOTE: When updating the version of 'gtk+', the hash of 'mate-themes' in ;; mate.scm will also need to be updated. - (version "3.22.29") + (version "3.22.30") (source (origin (method url-fetch) (uri (string-append "mirror://gnome/sources/" name "/" @@ -678,7 +679,7 @@ application suites.") name "-" version ".tar.xz")) (sha256 (base32 - "1y5vzdbgww9l7xcrg13azff2rs94kggkywmpcsh39h7w76wn8zd0")) + "0rv5k8fyi2i19k4zncai6vf429s6zy3kncr8vb6f3m034z0sb951")) (patches (search-patches "gtk3-respect-GUIX_GTK3_PATH.patch" "gtk3-respect-GUIX_GTK3_IM_MODULE_FILE.patch")))) (outputs '("out" "bin" "doc")) @@ -1362,15 +1363,15 @@ and routines to assist in editing internationalized text.") (define-public girara (package (name "girara") - (version "0.2.8") + (version "0.2.9") (source (origin (method url-fetch) (uri (string-append "https://pwmt.org/projects/girara/download/girara-" - version ".tar.gz")) + version ".tar.xz")) (sha256 (base32 - "18wss3sak3djip090v2vdbvq1mvkwcspfswc87zbvv3magihan98")))) + "0lkxrfna818wkkr2f6mdzf15y5z8xl1b9592ylmzjbqsqya3w7x8")))) (native-inputs `(("pkg-config" ,pkg-config) ("check" ,check) ("gettext" ,gettext-minimal) @@ -1379,13 +1380,7 @@ and routines to assist in editing internationalized text.") ;; Listed in 'Requires.private' of 'girara.pc'. (propagated-inputs `(("gtk+" ,gtk+))) (arguments - `(#:make-flags - `(,(string-append "PREFIX=" (assoc-ref %outputs "out")) - "COLOR=0" "CC=gcc") - #:test-target "test" - #:disallowed-references (,xorg-server-1.19.3) - #:phases (modify-phases %standard-phases - (delete 'configure) + `(#:phases (modify-phases %standard-phases (add-before 'check 'start-xserver ;; Tests require a running X server. (lambda* (#:key inputs #:allow-other-keys) @@ -1401,7 +1396,7 @@ and routines to assist in editing internationalized text.") (setenv "DBUS_FATAL_WARNINGS" "0") (zero? (system (string-append xorg-server "/bin/Xvfb " display " &"))))))))) - (build-system gnu-build-system) + (build-system meson-build-system) (home-page "https://pwmt.org/projects/girara/") (synopsis "Library for minimalistic gtk+3 user interfaces") (description "Girara is a library that implements a user interface that diff --git a/gnu/packages/haskell.scm b/gnu/packages/haskell.scm index 2176f07cc4..8d2dcba208 100644 --- a/gnu/packages/haskell.scm +++ b/gnu/packages/haskell.scm @@ -2487,6 +2487,31 @@ Haskell library @code{regex-base}.") @code{libtre} (fork by Roman Cheplyaka).") (license license:bsd-3))) +(define-public ghc-regex-tdfa-text + (package + (name "ghc-regex-tdfa-text") + (version "1.0.0.3") + (source + (origin + (method url-fetch) + (uri (string-append + "https://hackage.haskell.org/package/regex-tdfa-text/" + "regex-tdfa-text-" version ".tar.gz")) + (sha256 + (base32 + "0090g6lgbdm9lywpqm2d3724nnnh24nx3vnlqr96qc2w486pmmrq")))) + (build-system haskell-build-system) + (inputs + `(("ghc-text" ,ghc-text) + ("ghc-regex-base" ,ghc-regex-base) + ("ghc-regex-tdfa" ,ghc-regex-tdfa))) + (home-page + "http://hackage.haskell.org/package/regex-tdfa-text") + (synopsis "Text interface for regex-tdfa") + (description + "This provides an extra text interface for regex-tdfa.") + (license license:bsd-3))) + (define-public ghc-parsers (package (name "ghc-parsers") @@ -9678,4 +9703,23 @@ serialization code.") disk space usage.") (license license:bsd-3))) +(define-public ghc-xdg-basedir + (package + (name "ghc-xdg-basedir") + (version "0.2.2") + (source + (origin + (method url-fetch) + (uri (string-append + "https://hackage.haskell.org/package/xdg-basedir/" + "xdg-basedir-" version ".tar.gz")) + (sha256 + (base32 + "0azlzaxp2dn4l1nr7shsxah2magk1szf6fx0mv75az00qsjw6qg4")))) + (build-system haskell-build-system) + (home-page "http://github.com/willdonnelly/xdg-basedir") + (synopsis "XDG Base Directory library for Haskell") + (description "This package provides a library implementing the XDG Base Directory spec.") + (license license:bsd-3))) + ;;; haskell.scm ends here diff --git a/gnu/packages/iso-codes.scm b/gnu/packages/iso-codes.scm index 9f67cf2868..67c6dc73e5 100644 --- a/gnu/packages/iso-codes.scm +++ b/gnu/packages/iso-codes.scm @@ -45,7 +45,7 @@ `(("gettext" ,gettext-minimal) ("perl" ,perl) ("python" ,python-wrapper))) - (home-page "https://pkg-isocodes.alioth.debian.org/") + (home-page "https://salsa.debian.org/iso-codes-team/iso-codes") (synopsis "Various ISO standards") (description "This package provides lists of various ISO standards (e.g. country, diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm index 2b72c98319..a7d5c9f445 100644 --- a/gnu/packages/java.scm +++ b/gnu/packages/java.scm @@ -9,6 +9,7 @@ ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2018 Gábor Boskovits <boskovits@gmail.com> ;;; Copyright © 2018 Chris Marusich <cmmarusich@gmail.com> +;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il> ;;; ;;; This file is part of GNU Guix. ;;; @@ -150,7 +151,7 @@ and binary format defined in The Java Virtual Machine Specification.") #:phases (modify-phases %standard-phases (add-after 'install 'install-data - (lambda _ (zero? (system* "make" "install-data"))))))) + (lambda _ (invoke "make" "install-data")))))) (native-inputs `(("jikes" ,jikes) ("fastjar" ,fastjar) @@ -175,6 +176,7 @@ language.") (uri (string-append "mirror://sourceforge/jamvm/jamvm/" "JamVM%20" version "/jamvm-" version ".tar.gz")) + (patches (search-patches "jamvm-arm.patch")) (sha256 (base32 "06lhi03l3b0h48pc7x58bk9my2nrcf1flpmglvys3wyad6yraf36")))) @@ -212,7 +214,13 @@ JNI.") "1cg0lga887qz5iizh6mlkxp01lciymrhmp7wzxpl6zpnldxmzrjx")))) (build-system gnu-build-system) (arguments - `(#:tests? #f ; no "check" target + `(#:imported-modules ((guix build syscalls) + ,@%gnu-build-system-modules) + #:modules ((srfi srfi-1) + (guix build gnu-build-system) + (guix build utils) + (guix build syscalls)) + #:tests? #f ; no "check" target #:phases (modify-phases %standard-phases (delete 'bootstrap) @@ -245,19 +253,54 @@ JNI.") ;; Without these JamVM options the build may freeze. (substitute* "bootstrap.sh" (("^\"\\$\\{JAVACMD\\}\" " m) - (string-append m "-Xnocompact -Xnoinlining "))) + ,@(if (string-prefix? "armhf" (or (%current-system) + (%current-target-system))) + `((string-append m "-Xnocompact ")) + `((string-append m "-Xnocompact -Xnoinlining "))))) ;; Disable tests because we are bootstrapping and thus don't have ;; any of the dependencies required to build and run the tests. (substitute* "build.xml" (("depends=\"jars,test-jar\"") "depends=\"jars\"")) - (zero? (system* "bash" "bootstrap.sh" - (string-append "-Ddist.dir=" - (assoc-ref %outputs "out")))))) + (invoke "bash" "bootstrap.sh" + (string-append "-Ddist.dir=" + (assoc-ref %outputs "out"))))) + (add-after 'build 'strip-jar-timestamps ;based on ant-build-system + (lambda* (#:key outputs #:allow-other-keys) + (define (repack-archive jar) + (let* ((dir (mkdtemp! "jar-contents.XXXXXX")) + (manifest (string-append dir "/META-INF/MANIFESTS.MF"))) + (with-directory-excursion dir + (invoke "unzip" jar)) + (delete-file jar) + ;; XXX: copied from (gnu build install) + (for-each (lambda (file) + (let ((s (lstat file))) + (unless (eq? (stat:type s) 'symlink) + (utime file 0 0 0 0)))) + (find-files dir #:directories? #t)) + ;; It is important that the manifest appears first. + (with-directory-excursion dir + (let* ((files (find-files "." ".*" #:directories? #t)) + ;; To ensure that the reference scanner can + ;; detect all store references in the jars + ;; we disable compression with the "-0" option. + (command (if (file-exists? manifest) + `("zip" "-0" "-X" ,jar ,manifest + ,@files) + `("zip" "-0" "-X" ,jar ,@files)))) + (apply invoke command))))) + (for-each repack-archive + (find-files + (string-append (assoc-ref %outputs "out") "/lib") + "\\.jar$")) + #t)) (delete 'install)))) (native-inputs `(("jikes" ,jikes) - ("jamvm" ,jamvm-1-bootstrap))) + ("jamvm" ,jamvm-1-bootstrap) + ("unzip" ,unzip) + ("zip", zip))) (home-page "http://ant.apache.org") (synopsis "Build tool for Java") (description @@ -316,10 +359,10 @@ build process and its dependencies, whereas Make uses Makefile format.") Main-Class: org.eclipse.jdt.internal.compiler.batch.Main\n"))) ;; Compile it all! - (and (zero? (apply system* "jikes" - (find-files "." "\\.java$"))) - (zero? (system* "fastjar" "cvfm" - "ecj-bootstrap.jar" "manifest" "."))))) + (and (apply invoke "jikes" + (find-files "." "\\.java$")) + (invoke "fastjar" "cvfm" + "ecj-bootstrap.jar" "manifest" ".")))) (replace 'install (lambda* (#:key outputs #:allow-other-keys) (let ((share (string-append (assoc-ref outputs "out") @@ -394,7 +437,6 @@ requirement for all GNU Classpath releases after version 0.93.") args defaults)) (apply system* ,java (append - (list "-Xnocompact" "-Xnoinlining") ;; Remove "-J" prefix (map (cut string-drop <> 2) vm-args) '("org.eclipse.jdt.internal.compiler.batch.Main") @@ -453,7 +495,7 @@ the standard javac executable."))) #:phases (modify-phases %standard-phases (add-after 'install 'install-data - (lambda _ (zero? (system* "make" "install-data"))))))) + (lambda _ (invoke "make" "install-data")))))) (native-inputs `(("ecj-bootstrap" ,ecj-bootstrap) ("ecj-javac-wrapper" ,ecj-javac-wrapper) @@ -484,12 +526,20 @@ the standard javac executable."))) (for-each (lambda (tool) (with-output-to-file (string-append bin tool) (lambda _ - (format #t "#!~a/bin/sh + ,@(if (string-prefix? "armhf" (or (%current-system) + (%current-target-system))) + `((format #t "#!~a/bin/sh +~a/bin/jamvm -Xnocompact -classpath ~a/share/classpath/tools.zip \ +gnu.classpath.tools.~a.~a $@" + bash jamvm classpath tool + (if (string=? "native2ascii" tool) + "Native2ASCII" "Main"))) + `((format #t "#!~a/bin/sh ~a/bin/jamvm -Xnocompact -Xnoinlining -classpath ~a/share/classpath/tools.zip \ gnu.classpath.tools.~a.~a $@" bash jamvm classpath tool (if (string=? "native2ascii" tool) - "Native2ASCII" "Main")))) + "Native2ASCII" "Main")))))) (chmod (string-append bin tool) #o755)) (list "javah" "rmic" @@ -562,7 +612,7 @@ machine."))) (("@Override") "")) #t)) (add-after 'install 'install-data - (lambda _ (zero? (system* "make" "install-data"))))))) + (lambda _ (invoke "make" "install-data")))))) (native-inputs `(("autoconf" ,autoconf) ("automake" ,automake) @@ -668,37 +718,35 @@ machine."))) (modify-phases %standard-phases (replace 'unpack (lambda* (#:key source inputs #:allow-other-keys) - (and (zero? (system* "tar" "xvf" source)) - (begin - (chdir (string-append "icedtea6-" ,version)) - (mkdir "openjdk") - (copy-recursively (assoc-ref inputs "openjdk-src") "openjdk") - ;; The convenient OpenJDK source bundle is no longer - ;; available for download, so we have to take the sources - ;; from the Mercurial repositories and change the Makefile - ;; to avoid tests for the OpenJDK zip archive. - (with-directory-excursion "openjdk" - (for-each (lambda (part) - (mkdir part) - (copy-recursively - (assoc-ref inputs - (string-append part "-src")) - part)) - '("jdk" "corba" - "langtools" "jaxp" "jaxws"))) - (with-directory-excursion "openjdk" - (invoke "tar" "xvf" (assoc-ref inputs "hotspot-src")) - (rename-file "hg-checkout" "hotspot")) - (substitute* "Makefile.in" - (("echo \"ERROR: No up-to-date OpenJDK zip available\"; exit -1;") - "echo \"trust me\";") - ;; The contents of the bootstrap directory must be - ;; writeable but when copying from the store they are - ;; not. - (("mkdir -p lib/rt" line) - (string-append line "; chmod -R u+w $(BOOT_DIR)"))) - (zero? (system* "chmod" "-R" "u+w" "openjdk")) - #t)))) + (invoke "tar" "xvf" source) + (chdir (string-append "icedtea6-" ,version)) + (mkdir "openjdk") + (copy-recursively (assoc-ref inputs "openjdk-src") "openjdk") + ;; The convenient OpenJDK source bundle is no longer + ;; available for download, so we have to take the sources + ;; from the Mercurial repositories and change the Makefile + ;; to avoid tests for the OpenJDK zip archive. + (with-directory-excursion "openjdk" + (for-each (lambda (part) + (mkdir part) + (copy-recursively + (assoc-ref inputs + (string-append part "-src")) + part)) + '("jdk" "corba" + "langtools" "jaxp" "jaxws"))) + (with-directory-excursion "openjdk" + (invoke "tar" "xvf" (assoc-ref inputs "hotspot-src")) + (rename-file "hg-checkout" "hotspot")) + (substitute* "Makefile.in" + (("echo \"ERROR: No up-to-date OpenJDK zip available\"; exit -1;") + "echo \"trust me\";") + ;; The contents of the bootstrap directory must be + ;; writeable but when copying from the store they are + ;; not. + (("mkdir -p lib/rt" line) + (string-append line "; chmod -R u+w $(BOOT_DIR)"))) + (invoke "chmod" "-R" "u+w" "openjdk"))) (add-after 'unpack 'use-classpath (lambda* (#:key inputs #:allow-other-keys) (let ((jvmlib (assoc-ref inputs "classpath")) @@ -1036,23 +1084,22 @@ bootstrapping purposes.") (let ((dir (or dir (string-drop-right name 5)))) (mkdir dir) - (zero? (system* "tar" "xvf" - (assoc-ref inputs name) - "-C" dir - "--strip-components=1")))))) + (invoke "tar" "xvf" + (assoc-ref inputs name) + "-C" dir + "--strip-components=1"))))) (mkdir target) - (and - (zero? (system* "tar" "xvf" source - "-C" target "--strip-components=1")) - (chdir target) - (unpack "openjdk-src" "openjdk.src") - (with-directory-excursion "openjdk.src" - (for-each unpack - (filter (cut string-suffix? "-drop" <>) - (map (match-lambda - ((name . _) name)) - inputs)))) - #t)))) + (invoke "tar" "xvf" source + "-C" target "--strip-components=1") + (chdir target) + (unpack "openjdk-src" "openjdk.src") + (with-directory-excursion "openjdk.src" + (for-each unpack + (filter (cut string-suffix? "-drop" <>) + (map (match-lambda + ((name . _) name)) + inputs)))) + #t))) (add-after 'unpack 'fix-x11-extension-include-path (lambda* (#:key inputs #:allow-other-keys) (substitute* "openjdk.src/jdk/make/sun/awt/mawt.gmk" @@ -1277,17 +1324,19 @@ bootstrapping purposes.") (let ((line (read-line port))) (cond ((eof-object? line) #t) - ((regexp-exec error-pattern line) #f) + ((regexp-exec error-pattern line) + (error "test failed")) (else (loop))))))) (run-test (lambda (test) - (system* "make" test) + (invoke "make" test) (call-with-input-file (string-append "test/" test ".log") checker)))) - (or #t ; skip tests - (and (run-test "check-hotspot") - (run-test "check-langtools") - (run-test "check-jdk")))))) + (when #f ; skip tests + (run-test "check-hotspot") + (run-test "check-langtools") + (run-test "check-jdk")) + #t))) (replace 'install (lambda* (#:key outputs #:allow-other-keys) (let ((doc (string-append (assoc-ref outputs "doc") @@ -1665,11 +1714,13 @@ new Date();")) ;; result in the tests to be run. (substitute* "build.xml" (("depends=\"jars,test-jar\"") "depends=\"jars\"")) - (zero? (system* "bash" "bootstrap.sh" - (string-append "-Ddist.dir=" - (assoc-ref outputs "out")))))))))) + (invoke "bash" "bootstrap.sh" + (string-append "-Ddist.dir=" + (assoc-ref outputs "out"))))))))) (native-inputs - `(("jdk" ,icedtea-8 "jdk"))))) + `(("jdk" ,icedtea-8 "jdk") + ("zip" ,zip) + ("unzip" ,unzip))))) ;; The 1.9.x series is the last that can be built with GCJ. The 1.10.x series ;; requires Java 8. @@ -1684,7 +1735,9 @@ new Date();")) (base32 "1k28mka0m3isy9yr8gz84kz1f3f879rwaxrd44vdn9xbfwvwk86n")))) (native-inputs - `(("jdk" ,icedtea-7 "jdk"))))) + `(("jdk" ,icedtea-7 "jdk") + ("zip" ,zip) + ("unzip" ,unzip))))) (define-public ant-apache-bcel (package @@ -1793,14 +1846,13 @@ new Date();")) (lambda (name) (mkdir-p name) (with-directory-excursion name - (or (zero? (system* "tar" - ;; Use xz for repacked tarball. - "--xz" - "--extract" - "--verbose" - "--file" (assoc-ref inputs name) - "--strip-components=1")) - (error "failed to unpack tarball" name))) + (invoke "tar" + ;; Use xz for repacked tarball. + "--xz" + "--extract" + "--verbose" + "--file" (assoc-ref inputs name) + "--strip-components=1")) (copy-recursively (string-append name "/src/main/clojure/") "src/clj/")) '("core-specs-alpha-src" @@ -1813,7 +1865,7 @@ new Date();")) ;; The javadoc target is not built by default. (add-after 'build 'build-doc (lambda _ - (zero? (system* "ant" "javadoc")))) + (invoke "ant" "javadoc"))) ;; Needed since no install target is provided. (replace 'install (lambda* (#:key outputs #:allow-other-keys) @@ -1975,7 +2027,8 @@ debugging, etc.") (lambda (in out) (display "Manifest-Version: 1.0 Main-Class: org.eclipse.jdt.internal.compiler.batch.Main\n" - out))))) + out))) + #t)) (replace 'install (install-jars "."))))) (home-page "https://eclipse.org") (synopsis "Eclipse Java development tools core batch compiler") @@ -2008,7 +2061,8 @@ Main-Class: org.eclipse.jdt.internal.compiler.batch.Main\n" (lambda (in out) (dump-port in out) (display "Main-Class: org.eclipse.jdt.internal.compiler.batch.Main\n" - out))))) + out))) + #t)) (replace 'install (install-jars "."))))) (native-inputs `(("unzip" ,unzip))))) @@ -2475,7 +2529,7 @@ HDF5 files, building on the libraries provided by the HDF Group.") (modify-phases %standard-phases (replace 'install (lambda* (#:key make-flags #:allow-other-keys) - (zero? (apply system* `("ant" "dist" ,@make-flags)))))))) + (apply invoke `("ant" "dist" ,@make-flags))))))) (home-page "https://www.gnu.org/software/classpathx/") (synopsis "Java servlet API implementation") (description "This is the GNU servlet API distribution, part of the @@ -2517,11 +2571,11 @@ API and version 2.1 of the Java ServerPages API.") (modify-phases %standard-phases (replace 'unpack (lambda* (#:key source #:allow-other-keys) - (and (mkdir "swt") - (zero? (system* "unzip" source "-d" "swt")) - (chdir "swt") - (mkdir "src") - (zero? (system* "unzip" "src.zip" "-d" "src"))))) + (mkdir "swt") + (invoke "unzip" source "-d" "swt") + (chdir "swt") + (mkdir "src") + (invoke "unzip" "src.zip" "-d" "src"))) ;; The classpath contains invalid icecat jars. Since we don't need ;; anything other than the JDK on the classpath, we can simply unset ;; it. @@ -2536,7 +2590,7 @@ API and version 2.1 of the Java ServerPages API.") (mkdir-p lib) (setenv "OUTPUT_DIR" lib) (with-directory-excursion "src" - (zero? (system* "bash" "build.sh")))))) + (invoke "bash" "build.sh"))))) (add-after 'install 'install-native (lambda* (#:key outputs #:allow-other-keys) (let ((lib (string-append (assoc-ref outputs "out") "/lib"))) @@ -2622,7 +2676,7 @@ decompression and random access decompression have been fully implemented.") (lambda* (#:key source #:allow-other-keys) (mkdir "src") (with-directory-excursion "src" - (zero? (system* "jar" "-xf" source))))) + (invoke "jar" "-xf" source)))) ;; At this point we don't have junit, so we must remove the API ;; tests. (add-after 'unpack 'delete-tests @@ -2764,7 +2818,8 @@ private Method[] getSortedMethods() { return _allMethods; } -private Method[] allMethods = getSortedMethods();"))))) +private Method[] allMethods = getSortedMethods();"))) + #t)) (add-before 'build 'do-not-use-bundled-qdox (lambda* (#:key inputs #:allow-other-keys) (substitute* "build.xml" @@ -3055,7 +3110,8 @@ reusing it in maven.") (lambda _ ;; Requires an older version of plexus container (delete-file - "src/test/java/org/codehaus/plexus/archiver/DuplicateFilesTest.java"))) + "src/test/java/org/codehaus/plexus/archiver/DuplicateFilesTest.java") + #t)) (add-before 'build 'copy-resources (lambda _ (mkdir-p "build/classes/META-INF/plexus") @@ -3248,15 +3304,15 @@ Compiler component."))) (add-before 'build 'generate-models (lambda* (#:key inputs #:allow-other-keys) (define (modello-single-mode file version mode) - (zero? (system* "java" - "org.codehaus.modello.ModelloCli" - file mode "src/main/java" version - "false" "true"))) + (invoke "java" + "org.codehaus.modello.ModelloCli" + file mode "src/main/java" version + "false" "true")) (let ((file "src/main/mdo/settings-security.mdo")) - (and (modello-single-mode file "1.0.0" "java") (modello-single-mode file "1.0.0" "xpp3-reader") - (modello-single-mode file "1.0.0" "xpp3-writer"))))) + (modello-single-mode file "1.0.0" "xpp3-writer")) + #t)) (add-before 'build 'generate-components.xml (lambda _ (mkdir-p "build/classes/META-INF/plexus") @@ -3285,10 +3341,12 @@ Compiler component."))) </configuration>\n </component>\n </components>\n -</component-set>\n"))))) +</component-set>\n"))) + #t)) (add-before 'check 'fix-paths (lambda _ - (copy-recursively "src/test/resources" "target")))))) + (copy-recursively "src/test/resources" "target") + #t))))) (inputs `(("java-plexus-cipher" ,java-plexus-cipher))) (native-inputs @@ -3511,7 +3569,8 @@ XSD and documentation.") (with-directory-excursion "modello-plugins/modello-plugin-xml/src/test" (substitute* "java/org/codehaus/modello/plugins/xml/XmlModelloPluginTest.java" - (("src/test") "modello-plugins/modello-plugin-xml/src/test")))))))) + (("src/test") "modello-plugins/modello-plugin-xml/src/test"))) + #t))))) (inputs `(("java-modello-core" ,java-modello-core) ("java-modello-plugins-java" ,java-modello-plugins-java) @@ -3606,9 +3665,9 @@ on the XPP3 API (XML Pull Parser)."))) ;; We cannot use the "jar" target because it depends on a couple ;; of unpackaged, complicated tools. (mkdir "dist") - (zero? (system* "jar" - "-cf" (string-append "dist/asm-" ,version ".jar") - "-C" "output/build/tmp" ".")))) + (invoke "jar" + "-cf" (string-append "dist/asm-" ,version ".jar") + "-C" "output/build/tmp" "."))) (replace 'install (install-jars "dist"))))) (native-inputs @@ -4105,7 +4164,8 @@ are many features, including: (mkdir-p "build/conf") (call-with-output-file "build/conf/MANIFEST.MF" (lambda (file) - (format file "Manifest-Version: 1.0\n"))))) + (format file "Manifest-Version: 1.0\n"))) + #t)) (replace 'install (install-jars "build")))))))) @@ -4351,7 +4411,8 @@ in the @code{java.lang} package. The following classes are included: (property (@ (name "tests.dir") (value "src/org/apache/bsf/test"))) (property (@ (name "build.tests") (value "build/test-classes"))) (property (@ (name "build.dest") (value "build/classes")))) - port))))) + port))) + #t)) (replace 'install (install-jars "build"))))) (native-inputs `(("java-junit" ,java-junit))) @@ -5798,8 +5859,8 @@ more efficient storage-wise than an uncompressed bitmap (as implemented in the ;; pom.xml ignores these files in the jar creation process. If we don't, ;; we get the error "This code should have never made it into slf4j-api.jar" (delete-file-recursively "build/classes/org/slf4j/impl") - (zero? (system* "jar" "-cf" "build/jar/slf4j-api.jar" "-C" - "build/classes" ".")))) + (invoke "jar" "-cf" "build/jar/slf4j-api.jar" "-C" + "build/classes" "."))) (add-before 'check 'dont-test-abstract-classes (lambda _ ;; abstract classes are not meant to be run with junit @@ -5807,7 +5868,8 @@ more efficient storage-wise than an uncompressed bitmap (as implemented in the (("<include name=\"\\*\\*/\\*Test.java\" />") (string-append "<include name=\"**/*Test.java\" />" "<exclude name=\"**/MultithreadedInitializationTest" - ".java\" />")))))))) + ".java\" />"))) + #t))))) (inputs `(("java-junit" ,java-junit) ("java-hamcrest-core" ,java-hamcrest-core))) @@ -5848,10 +5910,9 @@ time.") (setenv "CLASSPATH" (string-append (getcwd) ":" (getenv "CLASSPATH"))) ;; ... and build test helper classes here: - (zero? - (apply system* - `("javac" "-d" "." - ,@(find-files "slf4j-api/src/test" ".*\\.java"))))))))) + (apply invoke + `("javac" "-d" "." + ,@(find-files "slf4j-api/src/test" ".*\\.java")))))))) (inputs `(("java-junit" ,java-junit) ("java-hamcrest-core" ,java-hamcrest-core) @@ -5950,11 +6011,12 @@ tree walking, and translation.") (add-before 'build 'generate-grammar (lambda _ (with-directory-excursion "src/org/antlr/stringtemplate/language/" - (every (lambda (file) - (format #t "~a\n" file) - (zero? (system* "antlr" file))) - '("template.g" "angle.bracket.template.g" "action.g" - "eval.g" "group.g" "interface.g")))))))) + (for-each (lambda (file) + (format #t "~a\n" file) + (invoke "antlr" file)) + '("template.g" "angle.bracket.template.g" "action.g" + "eval.g" "group.g" "interface.g"))) + #t))))) (native-inputs `(("antlr" ,antlr2) ("java-junit" ,java-junit))) @@ -6012,10 +6074,11 @@ StringTemplate also powers ANTLR.") (add-before 'build 'generate-grammar (lambda _ (with-directory-excursion "src/org/stringtemplate/v4/compiler/" - (every (lambda (file) - (format #t "~a\n" file) - (zero? (system* "antlr3" file))) - '("STParser.g" "Group.g" "CodeGenerator.g")))))))) + (for-each (lambda (file) + (format #t "~a\n" file) + (invoke "antlr3" file)) + '("STParser.g" "Group.g" "CodeGenerator.g"))) + #t))))) (inputs `(("antlr3" ,antlr3-bootstrap) ("antlr2" ,antlr2) @@ -6082,14 +6145,15 @@ StringTemplate also powers ANTLR.") "/lib") ".*\\.jar")) " org.antlr.Tool $*")))) - (chmod (string-append bin "/antlr3") #o755)))) + (chmod (string-append bin "/antlr3") #o755)) + #t)) (add-before 'build 'generate-grammar (lambda _ (chdir "tool/src/main/antlr3/org/antlr/grammar/v3/") (for-each (lambda (file) (display file) (newline) - (system* "antlr3" file)) + (invoke "antlr3" file)) '("ANTLR.g" "ANTLRTreePrinter.g" "ActionAnalysis.g" "AssignTokenTypesWalker.g" "ActionTranslator.g" "TreeToNFAConverter.g" @@ -6100,14 +6164,13 @@ StringTemplate also powers ANTLR.") (substitute* "ANTLRv3Parser.java" (("public Object getTree") "public CommonTree getTree")) (chdir "../../../../../java") - (system* "antlr" "-o" "org/antlr/tool" - "org/antlr/tool/serialize.g") (substitute* "org/antlr/tool/LeftRecursiveRuleAnalyzer.java" (("import org.antlr.grammar.v3.\\*;") "import org.antlr.grammar.v3.*; import org.antlr.grammar.v3.ANTLRTreePrinter;")) (substitute* "org/antlr/tool/ErrorManager.java" (("case NO_SUCH_ATTRIBUTE_PASS_THROUGH:") "")) - (chdir "../../../.."))) + (chdir "../../../..") + #t)) (add-before 'build 'fix-build-xml (lambda _ (substitute* "build.xml" @@ -6118,7 +6181,8 @@ import org.antlr.grammar.v3.ANTLRTreePrinter;")) <include name=\"**/*.sti\"/> <include name=\"**/STLexer.tokens\"/> </fileset> -</copy><exec"))))))) +</copy><exec")) + #t))))) (native-inputs `(("antlr" ,antlr2) ("antlr3" ,antlr3-bootstrap))) @@ -6207,19 +6271,19 @@ tree walking, and translation.") import org.antlr.grammar.v2.TreeToNFAConverter;\n import org.antlr.grammar.v2.DefineGrammarItemsWalker;\n import org.antlr.grammar.v2.ANTLRTreePrinter;")) - (and - (with-directory-excursion "tool/src/main/antlr2/org/antlr/grammar/v2/" - (every (lambda (file) - (format #t "~a\n" file) - (zero? (system* "antlr" file))) - '("antlr.g" "antlr.print.g" "assign.types.g" - "buildnfa.g" "codegen.g" "define.g"))) - (with-directory-excursion "tool/src/main/antlr3/org/antlr/grammar/v3/" - (every (lambda (file) - (format #t "~a\n" file) - (zero? (system* "antlr3" file))) - '("ActionAnalysis.g" "ActionTranslator.g" "ANTLRv3.g" - "ANTLRv3Tree.g")))))) + (with-directory-excursion "tool/src/main/antlr2/org/antlr/grammar/v2/" + (for-each (lambda (file) + (format #t "~a\n" file) + (invoke "antlr" file)) + '("antlr.g" "antlr.print.g" "assign.types.g" + "buildnfa.g" "codegen.g" "define.g"))) + (with-directory-excursion "tool/src/main/antlr3/org/antlr/grammar/v3/" + (for-each (lambda (file) + (format #t "~a\n" file) + (invoke "antlr3" file)) + '("ActionAnalysis.g" "ActionTranslator.g" "ANTLRv3.g" + "ANTLRv3Tree.g"))) + #t)) (add-before 'build 'fix-build-xml (lambda _ (substitute* "build.xml" @@ -6282,7 +6346,8 @@ import org.antlr.grammar.v2.ANTLRTreePrinter;")) "/lib") ".*\\.jar")) " org.antlr.Tool $*")))) - (chmod (string-append bin "/antlr3") #o755)))) + (chmod (string-append bin "/antlr3") #o755)) + #t)) (add-before 'build 'generate-grammar (lambda _ (let ((dir "src/org/antlr/tool/")) @@ -6306,7 +6371,8 @@ import org.antlr.grammar.v2.ANTLRTreePrinter;")) <include name=\"**/*.sti\"/> <include name=\"**/STLexer.tokens\"/> </fileset> -</copy><exec"))))))) +</copy><exec")) + #t))))) (native-inputs `(("antlr" ,antlr2))) (inputs @@ -6931,7 +6997,8 @@ the packageadmin service.") (string-append "version=" ,version "\n" "groupId=org.ops4j.base" - "artifactId=ops4j-base-lang\n"))))))))) + "artifactId=ops4j-base-lang\n")))) + #t))))) (home-page "https://ops4j1.jira.com/wiki/spaces/base/overview") (synopsis "Utility classes and extensions to be used in OPS4J projects") (description "OPS4J stands for Open Participation Software for Java. This @@ -7170,7 +7237,8 @@ it manages project dependencies, gives diffs jars, and much more.") ;; it with our own version. (substitute* "src/test/java/org/ops4j/pax/tinybundles/bnd/BndTest.java" (("[0-9][0-9]*\\.[0-9][0-9]*\\.[0-9][0-9]*\\.[0-9][0-9]*") - ,(package-version java-aqute-bndlib)))))))) + ,(package-version java-aqute-bndlib))) + #t))))) (inputs `(("lang" ,java-ops4j-base-lang) ("io" ,java-ops4j-base-io) @@ -7245,7 +7313,8 @@ the system under test at the same time.") (add-before 'configure 'chdir (lambda _ ;; Tests assume we are in this directory - (chdir "core/pax-exam-spi"))) + (chdir "core/pax-exam-spi") + #t)) (add-before 'check 'fix-tests (lambda _ ;; One test checks that this file is present. @@ -7264,7 +7333,8 @@ the system under test at the same time.") (("target") "build")) ;; One test is expected to fail, but it doesn't throw the expected exception (substitute* "src/test/java/org/ops4j/pax/exam/spi/reactors/BaseStagedReactorTest.java" - (("AssertionError") "IllegalArgumentException"))))))) + (("AssertionError") "IllegalArgumentException")) + #t))))) (inputs `(("java-ops4j-pax-exam-core" ,java-ops4j-pax-exam-core) ("lang" ,java-ops4j-base-lang) @@ -7364,15 +7434,18 @@ not included are ones that require dependency to the Databind package.") (("@package@") "com.fasterxml.jackson.core.json") (("@projectversion@") ,version) (("@projectgroupid@") "com.fasterxml.jackson.core") - (("@projectartifactid@") "jackson-core"))))) + (("@projectartifactid@") "jackson-core"))) + #t)) (add-before 'build 'copy-resources (lambda _ (copy-recursively "src/main/resources" - "build/classes"))) + "build/classes") + #t)) (add-before 'check 'copy-test-resources (lambda _ (copy-recursively "src/test/resources" - "build/test-classes")))))) + "build/test-classes") + #t))))) (native-inputs `(("junit" ,java-junit) ("hamcrest" ,java-hamcrest-core))) @@ -7409,10 +7482,12 @@ not included are ones that require dependency to the Databind package.") (("@package@") "com.fasterxml.jackson.databind.cfg") (("@projectversion@") ,version) (("@projectgroupid@") "com.fasterxml.jackson.databind") - (("@projectartifactid@") "jackson-databind"))))) + (("@projectartifactid@") "jackson-databind"))) + #t)) (add-before 'build 'copy-resources (lambda _ - (copy-recursively "src/main/resources" "build/classes")))))) + (copy-recursively "src/main/resources" "build/classes") + #t))))) (inputs `(("java-fasterxml-jackson-annotations" ,java-fasterxml-jackson-annotations) ("java-fasterxml-jackson-core" ,java-fasterxml-jackson-core))) @@ -7456,10 +7531,12 @@ configuration.") (("@package@") "com.fasterxml.jackson.module.jaxb") (("@projectversion@") ,version) (("@projectgroupid@") "com.fasterxml.jackson.module.jaxb") - (("@projectartifactid@") "jackson-module-jaxb"))))) + (("@projectartifactid@") "jackson-module-jaxb"))) + #t)) (add-before 'build 'copy-resources (lambda _ - (copy-recursively "jaxb/src/main/resources" "build/classes")))))) + (copy-recursively "jaxb/src/main/resources" "build/classes") + #t))))) (inputs `(("java-fasterxml-jackson-annotations" ,java-fasterxml-jackson-annotations) ("java-fasterxml-jackson-core" ,java-fasterxml-jackson-core) @@ -7524,7 +7601,8 @@ configuration.") (("@package@") "com.fasterxml.jackson.dataformat.yaml") (("@projectversion@") ,version) (("@projectgroupid@") "com.fasterxml.jackson.dataformat.yaml") - (("@projectartifactid@") "jackson-dataformat-yaml")))))))) + (("@projectartifactid@") "jackson-dataformat-yaml"))) + #t))))) (inputs `(("java-fasterxml-jackson-annotations" ,java-fasterxml-jackson-annotations) ("java-fasterxml-jackson-core" ,java-fasterxml-jackson-core) @@ -7591,10 +7669,12 @@ interface and high-performance Typed Access API.") ;; msv's latest release is from 2011 and we don't need it (delete-file-recursively "src/main/java/com/ctc/wstx/msv") (delete-file-recursively "src/test/java/wstxtest/osgi") - (delete-file-recursively "src/test/java/wstxtest/msv"))) + (delete-file-recursively "src/test/java/wstxtest/msv") + #t)) (add-before 'build 'copy-resources (lambda _ - (copy-recursively "src/main/resources" "build/classes")))))) + (copy-recursively "src/main/resources" "build/classes") + #t))))) (inputs `(("stax2" ,java-stax2-api))) (native-inputs @@ -7634,10 +7714,12 @@ interface and high-performance Typed Access API.") (("@package@") "com.fasterxml.jackson.dataformat.xml") (("@projectversion@") ,version) (("@projectgroupid@") "com.fasterxml.jackson.dataformat.xml") - (("@projectartifactid@") "jackson-dataformat-xml"))))) + (("@projectartifactid@") "jackson-dataformat-xml"))) + #t)) (add-before 'build 'copy-resources (lambda _ - (copy-recursively "src/main/resources" "build/classes")))))) + (copy-recursively "src/main/resources" "build/classes") + #t))))) (inputs `(("jackson-annotations" ,java-fasterxml-jackson-annotations) ("jackson-core" ,java-fasterxml-jackson-core) @@ -8112,15 +8194,15 @@ those in Perl and JavaScript.") #t)) (replace 'check (lambda _ - (system* "ant" "compile-tests") + (invoke "ant" "compile-tests") ;; we don't have groovy (substitute* "src/test/resources/testng.xml" (("<class name=\"test.groovy.GroovyTest\" />") "")) - (zero? (system* "java" "-cp" (string-append (getenv "CLASSPATH") - ":build/classes" - ":build/test-classes") - "-Dtest.resources.dir=src/test/resources" - "org.testng.TestNG" "src/test/resources/testng.xml"))))))) + (invoke "java" "-cp" (string-append (getenv "CLASSPATH") + ":build/classes" + ":build/test-classes") + "-Dtest.resources.dir=src/test/resources" + "org.testng.TestNG" "src/test/resources/testng.xml")))))) (propagated-inputs `(("junit" ,java-junit) ("java-jsr305" ,java-jsr305) @@ -8184,8 +8266,7 @@ to use.") ":build/classes" ":build/test-classes") "org.testng.TestNG" "-testclass" - "build/test-classes/com/neilalexander/jnacl/NaClTest.class") - #t))))) + "build/test-classes/com/neilalexander/jnacl/NaClTest.class")))))) (native-inputs `(("java-testng" ,java-testng) ("java-fest-util" ,java-fest-util) @@ -8368,8 +8449,7 @@ algorithms and xxHash hashing algorithm.") (replace 'build (lambda _ (invoke "ant" "-f" "ant/jdk15+.xml" "build-provider") - (invoke "ant" "-f" "ant/jdk15+.xml" "build") - #t)) + (invoke "ant" "-f" "ant/jdk15+.xml" "build"))) ;; FIXME: the tests freeze. ;; (replace 'check ;; (lambda _ @@ -8547,7 +8627,8 @@ done to the IDE or continuous integration servers which simplifies adoption.") (add-before 'build 'copy-resources (lambda _ (copy-recursively "powermock-core/src/main/resources" - "build/classes")))))) + "build/classes") + #t))))) (inputs `(("reflect" ,java-powermock-reflect) ("javassist" ,java-jboss-javassist))) @@ -8604,7 +8685,8 @@ done to the IDE or continuous integration servers which simplifies adoption.") ;; Our junit version is 4.12-SNAPSHOT (substitute* (find-files "powermock-modules/powermock-module-junit4" "PowerMockJUnit4MethodValidator.java") - (("4.12") "4.12-SNAPSHOT"))))))) + (("4.12") "4.12-SNAPSHOT")) + #t))))) (inputs `(("core" ,java-powermock-core) ("reflect" ,java-powermock-reflect) @@ -9069,8 +9151,7 @@ that is part of the SWT Tools project.") (string-append "-I" (assoc-ref inputs "jdk") "/include/linux") "-fPIC" "-O2") - (invoke "gcc" "-o" "libjansi.so" "-shared" "jansi_ttyname.o") - #t))) + (invoke "gcc" "-o" "libjansi.so" "-shared" "jansi_ttyname.o")))) (add-before 'build 'install-native (lambda _ (let ((dir (string-append "build/classes/META-INF/native/" @@ -9115,7 +9196,7 @@ console output.") (modify-phases %standard-phases (add-after 'check 'clear-term (lambda _ - (zero? (system* "echo" "-e" "\\e[0m"))))))) + (invoke "echo" "-e" "\\e[0m")))))) (inputs `(("java-jansi-native" ,java-jansi-native))) (native-inputs @@ -9579,7 +9660,8 @@ graphs, and pie charts.") '("src/java/org/apache/commons/httpclient/HttpContentTooLargeException.java" "src/examples/TrivialApp.java" "src/examples/ClientApp.java" "src/test/org/apache/commons/httpclient/TestHttps.java" - "src/test/org/apache/commons/httpclient/TestURIUtil2.java")))) + "src/test/org/apache/commons/httpclient/TestURIUtil2.java")) + #t)) (replace 'install (lambda* (#:key outputs #:allow-other-keys) (invoke "ant" "dist" @@ -9629,7 +9711,8 @@ authentication, HTTP state management, and HTTP connection management.") (lambda _ (for-each delete-file-recursively '("commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/webdav" - "commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/hdfs"))))))) + "commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/hdfs")) + #t))))) (inputs `(("java-commons-collections4" ,java-commons-collections4) ("java-commons-compress" ,java-commons-compress) @@ -9940,7 +10023,8 @@ jsch-agent-proxy with JSch."))) (find-files "." ".*.properties") (find-files "." ".*.xsd") (find-files "." ".*.xsl") - (find-files "." ".*.xml")))))) + (find-files "." ".*.xml")))) + #t)) (add-before 'build 'fix-vfs (lambda _ (substitute* @@ -9955,8 +10039,7 @@ jsch-agent-proxy with JSch."))) (add-before 'install 'repack (lambda _ (invoke "jar" "-cmf" "build/classes/META-INF/MANIFEST.MF" "build/jar/ivy.jar" - "-C" "build/classes" ".") - #t)) + "-C" "build/classes" "."))) (add-after 'install 'install-bin (lambda* (#:key outputs #:allow-other-keys) (let* ((bin (string-append (assoc-ref outputs "out") "/bin")) @@ -10169,7 +10252,8 @@ and @code{ISimpleCompiler} interfaces.") (modify-phases %standard-phases (add-before 'configure 'chdir (lambda _ - (chdir "janino")))))) + (chdir "janino") + #t))))) (inputs `(("java-commons-compiler" ,java-commons-compiler))) (native-inputs @@ -10194,7 +10278,9 @@ static code analysis or code manipulation."))) "1x6ga74yfgm94cfx98gybakbrlilx8i2gn6dx13l40kasmys06mi")) (modules '((guix build utils))) (snippet - '(delete-file-recursively "logback-access/lib")))) + '(begin + (delete-file-recursively "logback-access/lib") + #t)))) (build-system ant-build-system) (arguments `(#:jar-name "logback.jar" diff --git a/gnu/packages/libreoffice.scm b/gnu/packages/libreoffice.scm index 33ecdc47f0..dc13be19d2 100644 --- a/gnu/packages/libreoffice.scm +++ b/gnu/packages/libreoffice.scm @@ -754,7 +754,7 @@ word compounding or character encoding.") (name (match variant ("classique" "hunspell-dict-fr") (_ (string-append "hunspell-dict-fr-" variant)))) - (version "6.1") + (version "6.2") (source (origin (uri (string-append "http://www.dicollecte.org/download/fr/hunspell-french-dictionaries-v" @@ -762,7 +762,7 @@ word compounding or character encoding.") (method url-fetch) (sha256 (base32 - "0w2hzh36wj3lsj2yd4mh7z7547dg452sywj79vnzx27csclwqshc")))) + "139hfrn5p87sl8hqmgkf6sgvnxrk2mm8vd8xsm8sm98qjnwlg0f9")))) (build-system trivial-build-system) (native-inputs `(("unzip" ,unzip))) (arguments diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm index cd3924ccee..2ce0f56b84 100644 --- a/gnu/packages/linux.scm +++ b/gnu/packages/linux.scm @@ -402,8 +402,8 @@ It has been modified to remove all non-free binary blobs.") ;; supports qemu "virt" machine and possibly a large number of ARM boards. ;; See : https://wiki.debian.org/DebianKernel/ARMMP. -(define %linux-libre-version "4.17.5") -(define %linux-libre-hash "0pldqw7f4nhziw3r73l339d79aijxhy6anf1ryiy3makip6gkib1") +(define %linux-libre-version "4.17.6") +(define %linux-libre-hash "0d48r5jpj71ikdalz5z756snwq54cpnwnba8bbhg8r2ri3770wcm") (define-public linux-libre (make-linux-libre %linux-libre-version @@ -411,8 +411,8 @@ It has been modified to remove all non-free binary blobs.") %linux-compatible-systems #:configuration-file kernel-config)) -(define %linux-libre-4.14-version "4.14.54") -(define %linux-libre-4.14-hash "027138z7p5ld1zyrxq1xjc7x3b7wbgikh7gn2xfvwm9gn8qpazki") +(define %linux-libre-4.14-version "4.14.55") +(define %linux-libre-4.14-hash "1rlapfwkjfmyk4ahvqwqap4w9flbw2zag0r04fwrmyqz1y5ijayf") (define-public linux-libre-4.14 (make-linux-libre %linux-libre-4.14-version @@ -421,14 +421,14 @@ It has been modified to remove all non-free binary blobs.") #:configuration-file kernel-config)) (define-public linux-libre-4.9 - (make-linux-libre "4.9.111" - "0ld57627k6mjp14x5bvndakj6lc4l31zp2yq74h7ski2g3k7ppk2" + (make-linux-libre "4.9.112" + "1zrnbvzr7z5ky79r6hpjvn15bxmwcyi8lr7yq2nx1r8ladl8lnb0" %intel-compatible-systems #:configuration-file kernel-config)) (define-public linux-libre-4.4 - (make-linux-libre "4.4.139" - "0x58ykgx7vbv23q763ydifi548mz39nal7wbvrrl4i9ndk7pzfzz" + (make-linux-libre "4.4.140" + "10h4k2c2ncnc1h61kikqb618dh9lp8fmzagz2ydykrdbb5jjiy82" %intel-compatible-systems #:configuration-file kernel-config)) @@ -537,15 +537,15 @@ at login. Local and dynamic reconfiguration are its key features.") (define-public psmisc (package (name "psmisc") - (version "22.21") + (version "23.1") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/psmisc/psmisc/psmisc-" - version ".tar.gz")) + version ".tar.xz")) (sha256 (base32 - "0nhlm1vrrwn4a845p6y4nnnb4liq70n74zbdd5dq844jc6nkqclp")))) + "0c5s94hqpwfmyswx2f96gifa6wdbpxxpkyxcrlzbxpvmrxsd911f")))) (build-system gnu-build-system) (inputs `(("ncurses" ,ncurses))) (home-page "https://gitlab.com/psmisc/psmisc") @@ -975,15 +975,8 @@ intercept and print the system calls executed by the program.") version ".tar.bz2")) (sha256 (base32 - "096pwrnhj36yndldvs2pj4r871zhcgisks0is78f1jkjn9sd4b2z")) - (patches (search-patches "alsa-lib-add-environment-variable.patch")))) + "096pwrnhj36yndldvs2pj4r871zhcgisks0is78f1jkjn9sd4b2z")))) (build-system gnu-build-system) - (native-search-paths - (list (search-path-specification - (variable "ALSA_PLUGIN_DIR") - (file-type 'regular) - (separator #f) ;single entry - (files '("lib/alsa-lib"))))) (home-page "https://www.alsa-project.org/") (synopsis "The Advanced Linux Sound Architecture libraries") (description @@ -3049,15 +3042,15 @@ Linux Device Mapper multipathing driver: (define-public libaio (package (name "libaio") - (version "0.3.110") + (version "0.3.111") (source (origin (method url-fetch) - (uri (list - (string-append "mirror://debian/pool/main/liba/libaio/" - name "_" version ".orig.tar.gz"))) - (sha256 - (base32 - "0zjzfkwd1kdvq6zpawhzisv7qbq1ffs343i5fs9p498pcf7046g0")))) + (uri (list + (string-append "https://releases.pagure.org/libaio/" + name "-" version ".tar.gz"))) + (sha256 + (base32 + "0ajhzbqjwsmz51gwccfyw6w9k4j4gmxcl2ph30sfn2gxv0d8gkv2")))) (build-system gnu-build-system) (arguments '(#:make-flags @@ -3065,7 +3058,7 @@ Linux Device Mapper multipathing driver: #:test-target "partcheck" ; need root for a full 'check' #:phases (modify-phases %standard-phases (delete 'configure)))) ; no configure script - (home-page "http://lse.sourceforge.net/io/aio.html") + (home-page "https://pagure.io/libaio") (synopsis "Linux-native asynchronous I/O access library") (description "This library enables userspace to use Linux kernel asynchronous I/O @@ -3099,7 +3092,7 @@ Bluetooth audio output devices like headphones or loudspeakers.") (define-public bluez (package (name "bluez") - (version "5.49") + (version "5.50") (source (origin (method url-fetch) (uri (string-append @@ -3107,7 +3100,7 @@ Bluetooth audio output devices like headphones or loudspeakers.") version ".tar.xz")) (sha256 (base32 - "15ffsaz7l3fgdg03l7g1xx9jw7xgs6pc548zxqsxawsca5x1sc1k")))) + "048r91vx9gs5nwwbah2s0xig04nwk14c5s0vb7qmaqdvighsmz2z")))) (build-system gnu-build-system) (arguments `(#:configure-flags @@ -3290,7 +3283,7 @@ and copy/paste text in the console and in xterm.") ("which" ,which) ;; The tests need 'grep' with perl regexp support. ("grep" ,grep))) - (home-page "https://btrfs.wiki.kernel.org/") + (home-page "https://btrfs.wiki.kernel.org/index.php/Main_Page") (synopsis "Create and manage btrfs copy-on-write file systems") (description "Btrfs is a @dfn{copy-on-write} (CoW) file system for Linux aimed at implementing advanced features while focusing on fault tolerance, @@ -3595,7 +3588,7 @@ The following service daemons are also provided: (define-public rng-tools (package (name "rng-tools") - (version "6.2") + (version "6.3") (source (origin (method url-fetch) (uri (string-append "https://github.com/nhorman/rng-tools/" @@ -3603,7 +3596,7 @@ The following service daemons are also provided: (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "0xy4qmfhvkr5z4jr9j55dn5gnajr2jccdp6n0xsxkipjcgag342j")))) + "1lc2kqw3idwmjyjnf16sqz0f4r1w7c638n4la1j1n5c3188q26bv")))) (build-system gnu-build-system) (arguments `(;; Avoid using OpenSSL, curl, and libxml2, reducing the closure by 166 MiB. diff --git a/gnu/packages/lsof.scm b/gnu/packages/lsof.scm index 098242dc7a..8b3ebe2945 100644 --- a/gnu/packages/lsof.scm +++ b/gnu/packages/lsof.scm @@ -28,7 +28,7 @@ (define-public lsof (package (name "lsof") - (version "4.89") + (version "4.91") (source (origin (method url-fetch) @@ -53,7 +53,7 @@ (string-append "ftp://ftp.mirrorservice.org/sites/" "lsof.itap.purdue.edu/pub/tools/unix/lsof"))))) (sha256 - (base32 "061p18v0mhzq517791xkjs8a5dfynq1418a1mwxpji69zp2jzb41")))) + (base32 "18sh4hbl9jw2szkf0gvgan8g13f3g4c6s2q9h3zq5gsza9m99nn9")))) (build-system gnu-build-system) (native-inputs `(("perl" ,perl))) (arguments @@ -73,14 +73,16 @@ (add-after 'configure 'patch-timestamps (lambda _ (substitute* "Makefile" - (("`date`") "`date --date=@1`")))) + (("`date`") "`date --date=@1`")) + #t)) (add-before 'check 'disable-failing-tests (lambda _ (substitute* "tests/Makefile" ;; Fails with ‘ERROR!!! client gethostbyaddr() failure’. (("(STDTST=.*) LTsock" _ prefix) prefix) ;; Fails without access to a remote NFS server. - (("(OPTTST=.*) LTnfs" _ prefix) prefix)))) + (("(OPTTST=.*) LTnfs" _ prefix) prefix)) + #t)) (replace 'check (lambda _ (with-directory-excursion "tests" diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm index bf77b0a7fe..f127e27e3c 100644 --- a/gnu/packages/mail.scm +++ b/gnu/packages/mail.scm @@ -1071,15 +1071,15 @@ which can add many functionalities to the base client.") (define-public msmtp (package (name "msmtp") - (version "1.6.6") + (version "1.6.8") (source (origin (method url-fetch) - (uri (string-append "mirror://sourceforge/msmtp/msmtp/" version + (uri (string-append "https://marlam.de/msmtp/releases/" "/msmtp-" version ".tar.xz")) (sha256 (base32 - "0ppvww0sb09bnsrpqnvlrn8vx231r24xn2iiwpy020mxc8gxn5fs")))) + "1ysrnshvwhzwmvb2walw5i9jdzlvmckj7inr0xnvb26q0jirbzsm")))) (build-system gnu-build-system) (inputs `(("libidn" ,libidn) @@ -1089,7 +1089,7 @@ which can add many functionalities to the base client.") ("gsasl" ,gsasl))) (native-inputs `(("pkg-config" ,pkg-config))) - (home-page "http://msmtp.sourceforge.net/") + (home-page "https://marlam.de/msmtp/") (arguments `(#:configure-flags (list "--with-libgsasl" "--with-libidn" diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm index 39e2c38eb4..1e0e1998db 100644 --- a/gnu/packages/maths.scm +++ b/gnu/packages/maths.scm @@ -2798,7 +2798,7 @@ parts of it.") (define-public openblas (package (name "openblas") - (version "0.2.20") + (version "0.3.0") (source (origin (method url-fetch) @@ -2807,7 +2807,7 @@ parts of it.") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "1bd03c5xni0bla0wg1wba841b36b0sg13sjja955kn5xzvy4i61a")))) + "14a9vyvp2k5zpd0axbnqk0d3khc1v3cck10nb5fj7d2sgn8490ky")))) (build-system gnu-build-system) (arguments `(#:test-target "test" @@ -2846,6 +2846,16 @@ parts of it.") #:phases (modify-phases %standard-phases (delete 'configure) + ;; Conditionally apply a patch on i686 to avoid rebuilding + ;; all architectures. FIXME: This should be moved to the + ;; (source (patches ...)) field in the next rebuild cycle. + ,@(if (string-prefix? "i686" (or (%current-target-system) + (%current-system))) + `((add-after 'unpack 'fix-tests + (lambda* (#:key inputs #:allow-other-keys) + (invoke "patch" "-p1" + "--input" (assoc-ref inputs "i686-fix-tests.patch"))))) + '()) (add-before 'build 'set-extralib (lambda* (#:key inputs #:allow-other-keys) ;; Get libgfortran found when building in utest. @@ -2857,6 +2867,11 @@ parts of it.") `(("fortran-lib" ,gfortran "lib"))) (native-inputs `(("cunit" ,cunit) + ,@(if (string-prefix? "i686" (or (%current-target-system) + (%current-system))) + `(("i686-fix-tests.patch" + ,(search-patch "openblas-fix-tests-i686.patch"))) + '()) ("fortran" ,gfortran) ("perl" ,perl))) (home-page "http://www.openblas.net/") diff --git a/gnu/packages/mes.scm b/gnu/packages/mes.scm index 52464e28d4..8bde7b1525 100644 --- a/gnu/packages/mes.scm +++ b/gnu/packages/mes.scm @@ -25,8 +25,10 @@ #:use-module (gnu packages cross-base) #:use-module (gnu packages gcc) #:use-module (gnu packages guile) + #:use-module (gnu packages man) #:use-module (gnu packages package-management) #:use-module (gnu packages perl) + #:use-module (gnu packages texinfo) #:use-module (guix build-system gnu) #:use-module (guix download) #:use-module (guix git-download) @@ -73,7 +75,7 @@ extensive examples, including parsers for the Javascript and C99 languages.") (let ((triplet "i686-unknown-linux-gnu")) (package (name "mes") - (version "0.16") + (version "0.16.1") (source (origin (method url-fetch) (uri (string-append "https://gitlab.com/janneke/mes" @@ -81,7 +83,7 @@ extensive examples, including parsers for the Javascript and C99 languages.") "/mes-" version ".tar.gz")) (sha256 (base32 - "0c4vz1qw767af5h615055hh8zjwwmwf5mwkb64l0l921zaa9hg2n")))) + "0qghlbx2qn674q8vckxpzsd0p845kclg457bw6r25jpmslgm0bz2")))) (build-system gnu-build-system) (supported-systems '("i686-linux" "x86_64-linux")) (propagated-inputs @@ -96,7 +98,9 @@ extensive examples, including parsers for the Javascript and C99 languages.") `(("i686-linux-binutils" ,(cross-binutils triplet)) ("i686-linux-gcc" ,(cross-gcc triplet))) '()) - ("perl" ,perl))) ;build-aux/gitlog-to-changelog + ("help2man" ,help2man) + ("perl" ,perl) ;build-aux/gitlog-to-changelog + ("texinfo" ,texinfo))) (arguments `(#:phases (modify-phases %standard-phases diff --git a/gnu/packages/messaging.scm b/gnu/packages/messaging.scm index cdcd1225f2..1212a06eeb 100644 --- a/gnu/packages/messaging.scm +++ b/gnu/packages/messaging.scm @@ -9,7 +9,7 @@ ;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca> ;;; Copyright © 2016, 2017, 2018 Clément Lassieur <clement@lassieur.org> ;;; Copyright © 2017 Mekeor Melire <mekeor.melire@gmail.com> -;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net> +;;; Copyright © 2017, 2018 Arun Isaac <arunisaac@systemreboot.net> ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2017 Theodoros Foradis <theodoros@foradis.org> ;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com> @@ -1644,4 +1644,77 @@ c-toxcore and ncurses. It provides audio calls, sound and desktop notifications, and Python scripting support.") (license license:gpl3+))) +(define-public libqmatrixclient + (package + (name "libqmatrixclient") + (version "0.3.0.2") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/QMatrixClient/libqmatrixclient/archive/v" + version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "0yl7lw0s2z98xkxbklkb3i8xcd9af9qayl1zxl070d8ykl6ayqy3")))) + (build-system cmake-build-system) + (inputs + `(("qt" ,qt))) + (arguments + `(#:configure-flags (list "-DBUILD_SHARED_LIBS=ON") + #:tests? #f)) ; No tests + (home-page "https://matrix.org/docs/projects/sdk/libqmatrixclient.html") + (synopsis "Qt5 client library for the Matrix instant messaging protocol") + (description "libqmatrixclient is a Qt5 library to write clients for the +Matrix instant messaging protocol. Quaternion is the reference client +implementation. Quaternion and libqmatrixclient together form the +QMatrixClient project.") + (license license:lgpl2.1+))) + +(define-public quaternion + (package + (name "quaternion") + (version "0.0.9.2") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/QMatrixClient/Quaternion/archive/v" + version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "0s2mpw11s2n21ds1spf94j1p2lj2px2bv5zxldlcx81ch0rb4ng8")))) + (build-system cmake-build-system) + (inputs + `(("libqmatrixclient" ,libqmatrixclient) + ("qt" ,qt))) + (arguments + `(#:tests? #f ; No tests + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'fix-libqmatrixclient-dynamic-linking + ;; Upstream recommends statically linking with + ;; libqmatrixclient. Patch the source so that we can dynamically + ;; link instead. In a future release, when upstream moves to + ;; dynamic linking, remove this phase. + (lambda _ + (substitute* "CMakeLists.txt" + (("^add_subdirectory\\(lib\\)" all) + (string-append "#" all))) + (for-each + (lambda (file) + (substitute* file + (("#include \"lib/([^\"]*)\"" all header) + (string-append "#include <" header ">")))) + (find-files "client" "\\.(cpp|h)$")) + #t))))) + (home-page "https://matrix.org/docs/projects/client/quaternion.html") + (synopsis "Graphical client for the Matrix instant messaging protocol") + (description "Quaternion is a Qt5 desktop client for the Matrix instant +messaging protocol. It uses libqmatrixclient and is its reference client +implementation. Quaternion and libqmatriclient together form the +QMatrixClient project.") + (license (list license:gpl3+ ; all source code + license:lgpl3+)))) ; icons/breeze + ;;; messaging.scm ends here diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm index b72a4734d7..ebf0e86f12 100644 --- a/gnu/packages/networking.scm +++ b/gnu/packages/networking.scm @@ -22,6 +22,7 @@ ;;; Copyright © 2018 Fis Trivial <ybbs.daans@hotmail.com> ;;; Copyright © 2018 Tonton <tonton@riseup.net> ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org> +;;; Copyright © 2018 Theodoros Foradis <theodoros@foradis.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -315,6 +316,35 @@ more.") between different versions of ØMQ.") (license license:mpl2.0))) +(define-public cppzmq + (let ((revision "0") + (commit "d9f0f016c07046742738c65e1eb84722ae32d7d4")) + (package + (name "cppzmq") + (version (string-append "4.2.2-" revision "." + (string-take commit 7))) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/zeromq/cppzmq") + (commit commit))) + (sha256 + (base32 + "1gmqlm00y6xpa5m6d4ajq3ww63n2w7h4sy997wj81vcqmqx45b1f")) + (file-name (string-append name "-" version "-checkout")))) + (build-system cmake-build-system) + (arguments '(#:tests? #f)) ; No tests. + (native-inputs + `(("pkg-config" ,pkg-config))) + (inputs + `(("zeromq" ,zeromq))) + (home-page "http://zeromq.org") + (synopsis "C++ bindings for the ØMQ messaging library") + (description + "This package provides header-only C++ bindings for ØMQ. The header +files contain direct mappings of the abstractions provided by the ØMQ C API.") + (license license:expat)))) + (define-public librdkafka (package (name "librdkafka") diff --git a/gnu/packages/patches/alsa-lib-add-environment-variable.patch b/gnu/packages/patches/alsa-lib-add-environment-variable.patch deleted file mode 100644 index a468a7fc4f..0000000000 --- a/gnu/packages/patches/alsa-lib-add-environment-variable.patch +++ /dev/null @@ -1,110 +0,0 @@ -From 1822fb453128a1b5de93b4c590cd272d6488a077 Mon Sep 17 00:00:00 2001 -From: Julien Lepiller <julien@lepiller.eu> -Date: Fri, 25 May 2018 19:26:58 +0200 -Subject: [PATCH] Add support for a ALSA_PLUGIN_DIR environment variable. - -If it is not set, default to previous behavior. ---- - src/control/control.c | 6 +++++- - src/dlmisc.c | 9 +++++++-- - src/pcm/pcm.c | 9 +++++++-- - src/pcm/pcm_rate.c | 13 +++++++++---- - 4 files changed, 28 insertions(+), 9 deletions(-) - -diff --git a/src/control/control.c b/src/control/control.c -index 11f7815..9dba7dd 100644 ---- a/src/control/control.c -+++ b/src/control/control.c -@@ -1331,7 +1331,11 @@ static int snd_ctl_open_conf(snd_ctl_t **ctlp, const char *name, - build_in++; - } - if (*build_in == NULL) { -- buf1 = malloc(strlen(str) + sizeof(ALSA_PLUGIN_DIR) + 32); -+ char* plugdir = ALSA_PLUGIN_DIR; -+ char* envplugdir = getenv("ALSA_PLUGIN_DIR"); -+ if(envplugdir != NULL) -+ plugdir = envplugdir; -+ buf1 = malloc(strlen(str) + strlen(plugdir) + 32); - if (buf1 == NULL) { - err = -ENOMEM; - goto _err; -diff --git a/src/dlmisc.c b/src/dlmisc.c -index 3757d33..92aa864 100644 ---- a/src/dlmisc.c -+++ b/src/dlmisc.c -@@ -82,9 +82,14 @@ void *snd_dlopen(const char *name, int mode, char *errbuf, size_t errbuflen) - char *filename = NULL; - - if (name && name[0] != '/') { -- filename = alloca(sizeof(ALSA_PLUGIN_DIR) + 1 + strlen(name) + 1); -+ char* plugdir = ALSA_PLUGIN_DIR; -+ char* envplugdir = getenv("ALSA_PLUGIN_DIR"); -+ if(envplugdir != NULL) -+ plugdir = envplugdir; -+ -+ filename = malloc(strlen(plugdir) + 1 + strlen(name) + 1); - if (filename) { -- strcpy(filename, ALSA_PLUGIN_DIR); -+ strcpy(filename, plugdir); - strcat(filename, "/"); - strcat(filename, name); - handle = dlopen(filename, mode); -diff --git a/src/pcm/pcm.c b/src/pcm/pcm.c -index 11aec80..590e8b6 100644 ---- a/src/pcm/pcm.c -+++ b/src/pcm/pcm.c -@@ -2496,13 +2496,18 @@ static int snd_pcm_open_conf(snd_pcm_t **pcmp, const char *name, - build_in++; - } - if (*build_in == NULL) { -- buf1 = malloc(strlen(str) + sizeof(ALSA_PLUGIN_DIR) + 32); -+ char* plugdir = ALSA_PLUGIN_DIR; -+ char* envplugdir = getenv("ALSA_PLUGIN_DIR"); -+ if(envplugdir != NULL) -+ plugdir = envplugdir; -+ buf1 = malloc(strlen(str) + strlen(plugdir) + 32); -+ - if (buf1 == NULL) { - err = -ENOMEM; - goto _err; - } - lib = buf1; -- sprintf(buf1, "%s/libasound_module_pcm_%s.so", ALSA_PLUGIN_DIR, str); -+ sprintf(buf1, "%s/libasound_module_pcm_%s.so", plugdir, str); - } - } - #ifndef PIC -diff --git a/src/pcm/pcm_rate.c b/src/pcm/pcm_rate.c -index 4e0c7ca..8694a38 100644 ---- a/src/pcm/pcm_rate.c -+++ b/src/pcm/pcm_rate.c -@@ -1260,7 +1260,8 @@ static const char *const default_rate_plugins[] = { - - static int rate_open_func(snd_pcm_rate_t *rate, const char *type, const snd_config_t *converter_conf, int verbose) - { -- char open_name[64], open_conf_name[64], lib_name[128], *lib = NULL; -+ char open_name[64], open_conf_name[64], *lib = NULL; -+ char *buf1; - snd_pcm_rate_open_func_t open_func; - snd_pcm_rate_open_conf_func_t open_conf_func; - int err; -@@ -1268,9 +1269,13 @@ static int rate_open_func(snd_pcm_rate_t *rate, const char *type, const snd_conf - snprintf(open_name, sizeof(open_name), "_snd_pcm_rate_%s_open", type); - snprintf(open_conf_name, sizeof(open_conf_name), "_snd_pcm_rate_%s_open_conf", type); - if (!is_builtin_plugin(type)) { -- snprintf(lib_name, sizeof(lib_name), -- "%s/libasound_module_rate_%s.so", ALSA_PLUGIN_DIR, type); -- lib = lib_name; -+ char* plugdir = ALSA_PLUGIN_DIR; -+ char* envplugdir = getenv("ALSA_PLUGIN_DIR"); -+ if(envplugdir != NULL) -+ plugdir = envplugdir; -+ buf1 = malloc(strlen(type) + strlen(plugdir) + 32); -+ sprintf(buf1, "%s/libasound_module_rate_%s.so", plugdir, type); -+ lib = buf1; - } - - rate->rate_min = SND_PCM_PLUGIN_RATE_MIN; --- -2.17.0 - diff --git a/gnu/packages/patches/bind-CVE-2018-5738.patch b/gnu/packages/patches/bind-CVE-2018-5738.patch deleted file mode 100644 index ddef014651..0000000000 --- a/gnu/packages/patches/bind-CVE-2018-5738.patch +++ /dev/null @@ -1,100 +0,0 @@ -Fix CVE-2018-5738: - -https://kb.isc.org/article/AA-01616/0/CVE-2018-5738 -https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-5738 - -diff --git a/bin/named/server.c b/bin/named/server.c -index f63554e..847c4ff 100644 ---- a/bin/named/server.c -+++ b/bin/named/server.c -@@ -3725,10 +3725,6 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist, - CHECKM(named_config_getport(config, &port), "port"); - dns_view_setdstport(view, port); - -- CHECK(configure_view_acl(vconfig, config, named_g_config, -- "allow-query", NULL, actx, -- named_g_mctx, &view->queryacl)); -- - /* - * Make the list of response policy zone names for a view that - * is used for real lookups and so cares about hints. -@@ -4692,21 +4688,35 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist, - "allow-query-cache-on", NULL, actx, - named_g_mctx, &view->cacheonacl)); - /* -- * Set "allow-query-cache", "allow-recursion", and -- * "allow-recursion-on" acls if configured in named.conf. -- * (Ignore the global defaults for now, because these ACLs -- * can inherit from each other when only some of them set at -- * the options/view level.) -+ * Set the "allow-query", "allow-query-cache", "allow-recursion", -+ * and "allow-recursion-on" ACLs if configured in named.conf, but -+ * NOT from the global defaults. This is done by leaving the third -+ * argument to configure_view_acl() NULL. -+ * -+ * We ignore the global defaults here because these ACLs -+ * can inherit from each other. If any are still unset after -+ * applying the inheritance rules, we'll look up the defaults at -+ * that time. - */ -- CHECK(configure_view_acl(vconfig, config, NULL, "allow-query-cache", -- NULL, actx, named_g_mctx, &view->cacheacl)); -+ -+ /* named.conf only */ -+ CHECK(configure_view_acl(vconfig, config, NULL, -+ "allow-query", NULL, actx, -+ named_g_mctx, &view->queryacl)); -+ -+ /* named.conf only */ -+ CHECK(configure_view_acl(vconfig, config, NULL, -+ "allow-query-cache", NULL, actx, -+ named_g_mctx, &view->cacheacl)); - - if (strcmp(view->name, "_bind") != 0 && - view->rdclass != dns_rdataclass_chaos) - { -+ /* named.conf only */ - CHECK(configure_view_acl(vconfig, config, NULL, - "allow-recursion", NULL, actx, - named_g_mctx, &view->recursionacl)); -+ /* named.conf only */ - CHECK(configure_view_acl(vconfig, config, NULL, - "allow-recursion-on", NULL, actx, - named_g_mctx, &view->recursiononacl)); -@@ -4744,18 +4754,21 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist, - * the global config. - */ - if (view->recursionacl == NULL) { -+ /* global default only */ - CHECK(configure_view_acl(NULL, NULL, named_g_config, - "allow-recursion", NULL, - actx, named_g_mctx, - &view->recursionacl)); - } - if (view->recursiononacl == NULL) { -+ /* global default only */ - CHECK(configure_view_acl(NULL, NULL, named_g_config, - "allow-recursion-on", NULL, - actx, named_g_mctx, - &view->recursiononacl)); - } - if (view->cacheacl == NULL) { -+ /* global default only */ - CHECK(configure_view_acl(NULL, NULL, named_g_config, - "allow-query-cache", NULL, - actx, named_g_mctx, -@@ -4769,6 +4782,14 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist, - CHECK(dns_acl_none(mctx, &view->cacheacl)); - } - -+ if (view->queryacl == NULL) { -+ /* global default only */ -+ CHECK(configure_view_acl(NULL, NULL, named_g_config, -+ "allow-query", NULL, -+ actx, named_g_mctx, -+ &view->queryacl)); -+ } -+ - /* - * Ignore case when compressing responses to the specified - * clients. This causes case not always to be preserved, diff --git a/gnu/packages/patches/jamvm-arm.patch b/gnu/packages/patches/jamvm-arm.patch new file mode 100644 index 0000000000..9e998e18db --- /dev/null +++ b/gnu/packages/patches/jamvm-arm.patch @@ -0,0 +1,1313 @@ +From 67faeb7d58e0d25a50d36788ed49ed383b92e090 Mon Sep 17 00:00:00 2001 +From: Efraim Flashner <efraim@flashner.co.il> +Date: Mon, 26 Mar 2018 11:08:17 +0300 +Subject: [PATCH] add ARMv7 support + +--- + src/arch/arm.h | 75 +++++- + src/os/linux/arm/Makefile.am | 9 +- + src/os/linux/arm/Makefile.in | 166 ++++++++---- + src/os/linux/arm/callNative.S | 12 +- + src/os/linux/arm/callNativeEABI.S | 8 +- + src/os/linux/arm/callNativeEABIHard.S | 315 +++++++++++++++++++++++ + src/os/linux/arm/callNativeEABIHardARM.S | 266 +++++++++++++++++++ + src/os/linux/arm/dll_md.c | 61 ++++- + 8 files changed, 843 insertions(+), 69 deletions(-) + create mode 100644 src/os/linux/arm/callNativeEABIHard.S + create mode 100644 src/os/linux/arm/callNativeEABIHardARM.S + +diff --git a/src/arch/arm.h b/src/arch/arm.h +index ccf68c4..d2c0318 100644 +--- a/src/arch/arm.h ++++ b/src/arch/arm.h +@@ -1,6 +1,6 @@ + /* +- * Copyright (C) 2003, 2004, 2005, 2006, 2007 +- * Robert Lougher <rob@lougher.org.uk>. ++ * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, ++ * 2014 Robert Lougher <rob@jamvm.org.uk>. + * + * This file is part of JamVM. + * +@@ -21,10 +21,16 @@ + + #define OS_ARCH "arm" + +-/* Override default min and max heap sizes. ARM machines are +- usually embedded, and the standard defaults are too large. */ +-#define DEFAULT_MAX_HEAP 16*MB ++/* Override minimum min heap size. The initial heap size is a ratio ++ of the physical memory, but it must be at least the minimum min ++ size. The normal setting is too large for ARM machines as they ++ are usually embedded. */ ++#define MIN_MIN_HEAP 1*MB ++ ++/* Likewise, override the default min/max heap sizes used when the ++ size of physical memory is not available */ + #define DEFAULT_MIN_HEAP 1*MB ++#define DEFAULT_MAX_HEAP 64*MB + + #ifdef DIRECT + #define HANDLER_TABLE_T static const void +@@ -51,6 +57,36 @@ + /* Needed for i386 -- empty here */ + #define FPU_HACK + ++#if defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_7A__) ++#define COMPARE_AND_SWAP_32(addr, old_val, new_val) \ ++({ \ ++ int result, read_val; \ ++ __asm__ __volatile__ (" \ ++ 1: mov %0, #0; \ ++ ldrex %1, [%2]; \ ++ cmp %3, %1; \ ++ bne 2f; \ ++ strex %0, %4, [%2]; \ ++ cmp %0, #1; \ ++ beq 1b; \ ++ mov %0, #1; \ ++ 2:" \ ++ : "=&r" (result), "=&r" (read_val) \ ++ : "r" (addr), "r" (old_val), "r" (new_val) \ ++ : "cc", "memory"); \ ++ result; \ ++}) ++ ++#define COMPARE_AND_SWAP(addr, old_val, new_val) \ ++ COMPARE_AND_SWAP_32(addr, old_val, new_val) ++ ++#define LOCKWORD_READ(addr) *addr ++#define LOCKWORD_WRITE(addr, value) *addr = value ++#define LOCKWORD_COMPARE_AND_SWAP(addr, old_val, new_val) \ ++ COMPARE_AND_SWAP(addr, old_val, new_val) ++ ++#else ++ + #define LOCKWORD_COMPARE_AND_SWAP(addr, old_val, new_val) \ + ({ \ + int result, read_val; \ +@@ -94,7 +130,7 @@ do { \ + : "r" (addr), "r" (new_val) \ + : "cc", "memory"); \ + } while(0) +- ++#endif + + #ifdef __ARM_EABI__ + #define FLUSH_CACHE(addr, length) \ +@@ -124,8 +160,33 @@ do { \ + } + #endif + ++#define GEN_REL_JMP(target_addr, patch_addr, patch_size) \ ++({ \ ++ int patched = FALSE; \ ++ \ ++ if(patch_size >= 4) { \ ++ /* Guard against the pointer difference being \ ++ larger than the signed range */ \ ++ long long offset = (uintptr_t)(target_addr) - \ ++ (uintptr_t)(patch_addr) - 8; \ ++ \ ++ if(offset >= -1<<25 && offset < 1<<25) { \ ++ *(int*)(patch_addr) = offset>>2 & 0x00ffffff \ ++ | 0xea000000; \ ++ patched = TRUE; \ ++ } \ ++ } \ ++ patched; \ ++}) ++ ++#ifdef __ARM_ARCH_7A__ ++#define MBARRIER() __asm__ __volatile__ ("dmb" ::: "memory") ++#define UNLOCK_MBARRIER() __asm__ __volatile__ ("dmb" ::: "memory") ++#define JMM_LOCK_MBARRIER() __asm__ __volatile__ ("dmb" ::: "memory") ++#define JMM_UNLOCK_MBARRIER() __asm__ __volatile__ ("dmb" ::: "memory") ++#else + #define MBARRIER() __asm__ __volatile__ ("" ::: "memory") + #define UNLOCK_MBARRIER() __asm__ __volatile__ ("" ::: "memory") + #define JMM_LOCK_MBARRIER() __asm__ __volatile__ ("" ::: "memory") + #define JMM_UNLOCK_MBARRIER() __asm__ __volatile__ ("" ::: "memory") +- ++#endif +diff --git a/src/os/linux/arm/Makefile.am b/src/os/linux/arm/Makefile.am +index d18ea5a..74e7786 100644 +--- a/src/os/linux/arm/Makefile.am ++++ b/src/os/linux/arm/Makefile.am +@@ -1,6 +1,6 @@ + ## +-## Copyright (C) 2003, 2004, 2005, 2006, 2007 +-## Robert Lougher <rob@lougher.org.uk>. ++## Copyright (C) 2003, 2004, 2005, 2006, 2007, 2010, 2011, 2012 ++## Robert Lougher <rob@jamvm.org.uk>. + ## + ## This file is part of JamVM. + ## +@@ -19,10 +19,11 @@ + ## Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + ## + +-EXTRA_DIST = callNativeOABI.S callNativeEABI.S ++EXTRA_DIST = callNativeOABI.S callNativeEABI.S callNativeEABIHard.S \ ++ callNativeEABIHardARM.S + + noinst_LTLIBRARIES = libnative.la + libnative_la_SOURCES = init.c dll_md.c callNative.S + +-AM_CPPFLAGS = -I$(top_builddir)/src ++AM_CPPFLAGS = -I$(top_builddir)/src -I$(top_srcdir)/src + AM_CCASFLAGS = -I$(top_builddir)/src +diff --git a/src/os/linux/arm/Makefile.in b/src/os/linux/arm/Makefile.in +index 63b21ad..6d44ea9 100644 +--- a/src/os/linux/arm/Makefile.in ++++ b/src/os/linux/arm/Makefile.in +@@ -1,8 +1,9 @@ +-# Makefile.in generated by automake 1.10 from Makefile.am. ++# Makefile.in generated by automake 1.11.6 from Makefile.am. + # @configure_input@ + + # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +-# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. ++# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software ++# Foundation, Inc. + # This Makefile.in is free software; the Free Software Foundation + # gives unlimited permission to copy and/or distribute it, + # with or without modifications, as long as this notice is preserved. +@@ -15,9 +16,27 @@ + @SET_MAKE@ + + VPATH = @srcdir@ ++am__make_dryrun = \ ++ { \ ++ am__dry=no; \ ++ case $$MAKEFLAGS in \ ++ *\\[\ \ ]*) \ ++ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ ++ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ ++ *) \ ++ for am__flg in $$MAKEFLAGS; do \ ++ case $$am__flg in \ ++ *=*|--*) ;; \ ++ *n*) am__dry=yes; break;; \ ++ esac; \ ++ done;; \ ++ esac; \ ++ test $$am__dry = yes; \ ++ } + pkgdatadir = $(datadir)/@PACKAGE@ +-pkglibdir = $(libdir)/@PACKAGE@ + pkgincludedir = $(includedir)/@PACKAGE@ ++pkglibdir = $(libdir)/@PACKAGE@ ++pkglibexecdir = $(libexecdir)/@PACKAGE@ + am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd + install_sh_DATA = $(install_sh) -c -m 644 + install_sh_PROGRAM = $(install_sh) -c +@@ -42,13 +61,15 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs + CONFIG_HEADER = $(top_builddir)/src/config.h + CONFIG_CLEAN_FILES = ++CONFIG_CLEAN_VPATH_FILES = + LTLIBRARIES = $(noinst_LTLIBRARIES) + libnative_la_LIBADD = + am_libnative_la_OBJECTS = init.lo dll_md.lo callNative.lo + libnative_la_OBJECTS = $(am_libnative_la_OBJECTS) +-DEFAULT_INCLUDES = -I. -I$(top_builddir)/src@am__isrc@ ++DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src + depcomp = $(SHELL) $(top_srcdir)/depcomp + am__depfiles_maybe = depfiles ++am__mv = mv -f + CPPASCOMPILE = $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) + LTCPPASCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ +@@ -65,6 +86,11 @@ LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + $(LDFLAGS) -o $@ + SOURCES = $(libnative_la_SOURCES) + DIST_SOURCES = $(libnative_la_SOURCES) ++am__can_run_installinfo = \ ++ case $$AM_UPDATE_INFO_DIR in \ ++ n|no|NO) false;; \ ++ *) (install-info --version) >/dev/null 2>&1;; \ ++ esac + ETAGS = etags + CTAGS = ctags + DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +@@ -84,21 +110,18 @@ CCDEPMODE = @CCDEPMODE@ + CFLAGS = @CFLAGS@ + CPP = @CPP@ + CPPFLAGS = @CPPFLAGS@ +-CXX = @CXX@ +-CXXCPP = @CXXCPP@ +-CXXDEPMODE = @CXXDEPMODE@ +-CXXFLAGS = @CXXFLAGS@ + CYGPATH_W = @CYGPATH_W@ + DEFS = @DEFS@ + DEPDIR = @DEPDIR@ +-ECHO = @ECHO@ ++DLLTOOL = @DLLTOOL@ ++DSYMUTIL = @DSYMUTIL@ ++DUMPBIN = @DUMPBIN@ + ECHO_C = @ECHO_C@ + ECHO_N = @ECHO_N@ + ECHO_T = @ECHO_T@ + EGREP = @EGREP@ + EXEEXT = @EXEEXT@ +-F77 = @F77@ +-FFLAGS = @FFLAGS@ ++FGREP = @FGREP@ + GREP = @GREP@ + INSTALL = @INSTALL@ + INSTALL_DATA = @INSTALL_DATA@ +@@ -106,21 +129,30 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ + INSTALL_SCRIPT = @INSTALL_SCRIPT@ + INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ + JAVAC = @JAVAC@ ++LD = @LD@ + LDFLAGS = @LDFLAGS@ + LIBOBJS = @LIBOBJS@ + LIBS = @LIBS@ + LIBTOOL = @LIBTOOL@ ++LIPO = @LIPO@ + LN_S = @LN_S@ + LTLIBOBJS = @LTLIBOBJS@ + MAINT = @MAINT@ + MAKEINFO = @MAKEINFO@ ++MANIFEST_TOOL = @MANIFEST_TOOL@ + MKDIR_P = @MKDIR_P@ ++NM = @NM@ ++NMEDIT = @NMEDIT@ ++OBJDUMP = @OBJDUMP@ + OBJEXT = @OBJEXT@ ++OTOOL = @OTOOL@ ++OTOOL64 = @OTOOL64@ + PACKAGE = @PACKAGE@ + PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ + PACKAGE_NAME = @PACKAGE_NAME@ + PACKAGE_STRING = @PACKAGE_STRING@ + PACKAGE_TARNAME = @PACKAGE_TARNAME@ ++PACKAGE_URL = @PACKAGE_URL@ + PACKAGE_VERSION = @PACKAGE_VERSION@ + PATH_SEPARATOR = @PATH_SEPARATOR@ + RANLIB = @RANLIB@ +@@ -133,9 +165,9 @@ abs_builddir = @abs_builddir@ + abs_srcdir = @abs_srcdir@ + abs_top_builddir = @abs_top_builddir@ + abs_top_srcdir = @abs_top_srcdir@ ++ac_ct_AR = @ac_ct_AR@ + ac_ct_CC = @ac_ct_CC@ +-ac_ct_CXX = @ac_ct_CXX@ +-ac_ct_F77 = @ac_ct_F77@ ++ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ + am__include = @am__include@ + am__leading_dot = @am__leading_dot@ + am__quote = @am__quote@ +@@ -149,6 +181,7 @@ build_cpu = @build_cpu@ + build_os = @build_os@ + build_vendor = @build_vendor@ + builddir = @builddir@ ++classlib = @classlib@ + datadir = @datadir@ + datarootdir = @datarootdir@ + docdir = @docdir@ +@@ -181,15 +214,18 @@ sharedstatedir = @sharedstatedir@ + srcdir = @srcdir@ + sysconfdir = @sysconfdir@ + target_alias = @target_alias@ ++top_build_prefix = @top_build_prefix@ + top_builddir = @top_builddir@ + top_srcdir = @top_srcdir@ + use_zip_no = @use_zip_no@ + use_zip_yes = @use_zip_yes@ + with_classpath_install_dir = @with_classpath_install_dir@ +-EXTRA_DIST = callNativeOABI.S callNativeEABI.S ++EXTRA_DIST = callNativeOABI.S callNativeEABI.S callNativeEABIHard.S \ ++ callNativeEABIHardARM.S ++ + noinst_LTLIBRARIES = libnative.la + libnative_la_SOURCES = init.c dll_md.c callNative.S +-AM_CPPFLAGS = -I$(top_builddir)/src ++AM_CPPFLAGS = -I$(top_builddir)/src -I$(top_srcdir)/src + AM_CCASFLAGS = -I$(top_builddir)/src + all: all-am + +@@ -199,14 +235,14 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ +- && exit 0; \ ++ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ ++ && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ +- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/os/linux/arm/Makefile'; \ +- cd $(top_srcdir) && \ +- $(AUTOMAKE) --gnu src/os/linux/arm/Makefile ++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/os/linux/arm/Makefile'; \ ++ $(am__cd) $(top_srcdir) && \ ++ $(AUTOMAKE) --gnu src/os/linux/arm/Makefile + .PRECIOUS: Makefile + Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ +@@ -224,6 +260,7 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(am__aclocal_m4_deps): + + clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) +@@ -233,7 +270,7 @@ clean-noinstLTLIBRARIES: + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +-libnative.la: $(libnative_la_OBJECTS) $(libnative_la_DEPENDENCIES) ++libnative.la: $(libnative_la_OBJECTS) $(libnative_la_DEPENDENCIES) $(EXTRA_libnative_la_DEPENDENCIES) + $(LINK) $(libnative_la_OBJECTS) $(libnative_la_LIBADD) $(LIBS) + + mostlyclean-compile: +@@ -248,42 +285,42 @@ distclean-compile: + + .S.o: + @am__fastdepCCAS_TRUE@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +-@am__fastdepCCAS_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po ++@am__fastdepCCAS_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po + @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ + @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ + @am__fastdepCCAS_FALSE@ $(CPPASCOMPILE) -c -o $@ $< + + .S.obj: + @am__fastdepCCAS_TRUE@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +-@am__fastdepCCAS_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po ++@am__fastdepCCAS_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po + @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ + @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ + @am__fastdepCCAS_FALSE@ $(CPPASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + + .S.lo: + @am__fastdepCCAS_TRUE@ $(LTCPPASCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +-@am__fastdepCCAS_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo ++@am__fastdepCCAS_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo + @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ + @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ + @am__fastdepCCAS_FALSE@ $(LTCPPASCOMPILE) -c -o $@ $< + + .c.o: + @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po ++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po + @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ + @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ + @am__fastdepCC_FALSE@ $(COMPILE) -c $< + + .c.obj: + @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po ++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po + @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ + @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ + @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + + .c.lo: + @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo ++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo + @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ + @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ + @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< +@@ -299,45 +336,49 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ +- $(AWK) ' { files[$$0] = 1; } \ +- END { for (i in files) print i; }'`; \ ++ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ ++ END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique + tags: TAGS + + TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) +- tags=; \ ++ set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ +- $(AWK) ' { files[$$0] = 1; } \ +- END { for (i in files) print i; }'`; \ +- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ ++ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ ++ END { if (nonempty) { for (i in files) print i; }; }'`; \ ++ shift; \ ++ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ +- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ +- $$tags $$unique; \ ++ if test $$# -gt 0; then \ ++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ ++ "$$@" $$unique; \ ++ else \ ++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ ++ $$unique; \ ++ fi; \ + fi + ctags: CTAGS + CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) +- tags=; \ +- here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ +- $(AWK) ' { files[$$0] = 1; } \ +- END { for (i in files) print i; }'`; \ +- test -z "$(CTAGS_ARGS)$$tags$$unique" \ ++ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ ++ END { if (nonempty) { for (i in files) print i; }; }'`; \ ++ test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ +- $$tags $$unique ++ $$unique + + GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ +- && cd $(top_srcdir) \ +- && gtags -i $(GTAGS_ARGS) $$here ++ && $(am__cd) $(top_srcdir) \ ++ && gtags -i $(GTAGS_ARGS) "$$here" + + distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags +@@ -358,13 +399,17 @@ distdir: $(DISTFILES) + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ ++ if test -d "$(distdir)/$$file"; then \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ +- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ ++ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ +- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ ++ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ +- test -f $(distdir)/$$file \ +- || cp -p $$d/$$file $(distdir)/$$file \ ++ test -f "$(distdir)/$$file" \ ++ || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +@@ -382,16 +427,22 @@ install-am: all-am + + installcheck: installcheck-am + install-strip: +- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ +- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ +- `test -z '$(STRIP)' || \ +- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install ++ if test -z '$(STRIP)'; then \ ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ install; \ ++ else \ ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ ++ fi + mostlyclean-generic: + + clean-generic: + + distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) ++ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + + maintainer-clean-generic: + @echo "This command is intended for maintainers to use" +@@ -413,6 +464,8 @@ dvi-am: + + html: html-am + ++html-am: ++ + info: info-am + + info-am: +@@ -421,18 +474,28 @@ install-data-am: + + install-dvi: install-dvi-am + ++install-dvi-am: ++ + install-exec-am: + + install-html: install-html-am + ++install-html-am: ++ + install-info: install-info-am + ++install-info-am: ++ + install-man: + + install-pdf: install-pdf-am + ++install-pdf-am: ++ + install-ps: install-ps-am + ++install-ps-am: ++ + installcheck-am: + + maintainer-clean: maintainer-clean-am +@@ -470,6 +533,7 @@ uninstall-am: + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am + ++ + # Tell versions [3.59,3.63) of GNU make to not export all variables. + # Otherwise a system limit (for SysV at least) may be exceeded. + .NOEXPORT: +diff --git a/src/os/linux/arm/callNative.S b/src/os/linux/arm/callNative.S +index 39ab6d3..245afd1 100644 +--- a/src/os/linux/arm/callNative.S ++++ b/src/os/linux/arm/callNative.S +@@ -1,6 +1,6 @@ + /* +- * Copyright (C) 2003, 2004, 2005, 2006, 2007 +- * Robert Lougher <rob@lougher.org.uk>. ++ * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2011, 2012 ++ * Robert Lougher <rob@jamvm.org.uk>. + * + * This file is part of JamVM. + * +@@ -23,7 +23,15 @@ + + #ifndef USE_FFI + #ifdef __ARM_EABI__ ++#ifdef __ARM_PCS_VFP ++#ifdef __ARM_ARCH_7A__ ++#include "callNativeEABIHard.S" ++#else ++#include "callNativeEABIHardARM.S" ++#endif ++#else + #include "callNativeEABI.S" ++#endif + #else + #include "callNativeOABI.S" + #endif +diff --git a/src/os/linux/arm/callNativeEABI.S b/src/os/linux/arm/callNativeEABI.S +index 5effa57..3a7539e 100644 +--- a/src/os/linux/arm/callNativeEABI.S ++++ b/src/os/linux/arm/callNativeEABI.S +@@ -1,6 +1,6 @@ + /* +- * Copyright (C) 2003, 2004, 2005, 2006, 2007 +- * Robert Lougher <rob@lougher.org.uk>. ++ * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2011 ++ * Robert Lougher <rob@jamvm.org.uk>. + * + * This file is part of JamVM. + * +@@ -95,8 +95,12 @@ done: + ldmfd sp!, {r2, r3} + + /* Call the function */ ++#if defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__) + mov lr, pc + bx ip ++#else ++ blx ip ++#endif + + subs r4, r4, #8 /* Pop argument area */ + /* (minus 8 for r2/r3) */ +diff --git a/src/os/linux/arm/callNativeEABIHard.S b/src/os/linux/arm/callNativeEABIHard.S +new file mode 100644 +index 0000000..5d5785b +--- /dev/null ++++ b/src/os/linux/arm/callNativeEABIHard.S +@@ -0,0 +1,315 @@ ++/* ++ * Copyright (C) 2011, 2012 Robert Lougher <rob@jamvm.org.uk>. ++ * ++ * This file is part of JamVM. ++ * ++ * This program 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 2, ++ * or (at your option) any later version. ++ * ++ * This program 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 this program; if not, write to the Free Software ++ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ++ */ ++ ++ .text ++ .syntax unified ++ .arch armv7-a ++ .thumb ++ .align 2 ++ .global callJNIMethod ++ .type callJNIMethod,function ++ ++/* ++ * Arguments passed in: ++ * ++ * r0 JNIEnv ++ * r1 class or NULL ++ * r2 sig ++ * r3 extra arg ++ * sp + 0 ostack ++ * sp + 4 function pntr ++ * sp + 8 args count ++ */ ++ ++/* Register usage : ++ * ++ * r11 function pntr ++ * lr ostack pntr ++ * ip args pntr ++ * r8 sig pntr ++ * r10 extra stack ++ * r6 fp backfill ++ * r4 fp reg ++ * r7 int reg ++ * r5 scratch ++ * r3, r2 outgoing int args ++ * r1 outgoing class or this pntr ++ * r0 outgoing JNIEnv (as passed in) ++ * ++ * s0 - s16 (d0 - d7) outgoing float args ++ */ ++ ++callJNIMethod: ++ stmfd sp!, {r4, r5, r6, r7, r8, r10, r11, lr} ++ ldr lr, [sp, #32] /* get ostack pntr */ ++ ldr r11, [sp, #36] /* get function pntr */ ++ ++ cmp r1, #0 /* is method non-static? */ ++ it eq ++ ldreq r1, [lr], #4 /* yes, load r1 with "this" */ ++ ++ mov r10, r3 ++ subs sp, sp, r3 /* allocate room for stacked */ ++ add r8, r2, #1 /* init sig pntr -- skipping '(' */ ++ ++ mov ip, sp /* init loop pntr */ ++ ++ mov r7, #2 ++ mov r4, #16 ++ mov r6, #0 ++ ++scan_sig: ++ ldrb r5, [r8], #1 ++ ++ cmp r5, #41 /* ')' */ ++ beq done ++ ++ cmp r5, #70 /* 'F' */ ++ beq float ++ ++ cmp r5, #68 /* 'D' */ ++ beq double ++ ++ cmp r5, #74 /* 'J' */ ++ beq long ++ ++skip_brackets: ++ cmp r5, #91 /* '[' */ ++ itt eq ++ ldrbeq r5, [r8], #1 ++ beq skip_brackets ++ ++ cmp r5, #76 /* 'L' */ ++ bne int ++ ++skip_ref: ++ ldrb r5, [r8], #1 ++ cmp r5, #59 /* ';' */ ++ bne skip_ref ++ ++int: ++ cbz r7, stack_int ++ ++ subs r7, r7, #1 ++ ite ne ++ ldrne r2, [lr], #4 ++ ldreq r3, [lr], #4 ++ ++ b scan_sig ++ ++float: ++ cbz r6, no_backfill ++ ++ sub r5, r6, #1 ++ mov r6, #0 ++ b load_float ++ ++no_backfill: ++ cbz r4, stack_int ++ ++ sub r4, r4, #1 ++ mov r5, r4 ++ ++load_float: ++ add lr, lr, #4 ++ tbb [pc, r5] ++ ++float_table: ++ .byte (s15-float_table)/2 ++ .byte (s14-float_table)/2 ++ .byte (s13-float_table)/2 ++ .byte (s12-float_table)/2 ++ .byte (s11-float_table)/2 ++ .byte (s10-float_table)/2 ++ .byte (s9-float_table)/2 ++ .byte (s8-float_table)/2 ++ .byte (s7-float_table)/2 ++ .byte (s6-float_table)/2 ++ .byte (s5-float_table)/2 ++ .byte (s4-float_table)/2 ++ .byte (s3-float_table)/2 ++ .byte (s2-float_table)/2 ++ .byte (s1-float_table)/2 ++ .byte (s0-float_table)/2 ++ ++stack_int: ++ ldr r5, [lr], #4 ++ str r5, [ip], #4 ++ b scan_sig ++ ++s0: ++ vldr s0, [lr, #-4] ++ b scan_sig ++s1: ++ vldr s1, [lr, #-4] ++ b scan_sig ++s2: ++ vldr s2, [lr, #-4] ++ b scan_sig ++s3: ++ vldr s3, [lr, #-4] ++ b scan_sig ++s4: ++ vldr s4, [lr, #-4] ++ b scan_sig ++s5: ++ vldr s5, [lr, #-4] ++ b scan_sig ++s6: ++ vldr s6, [lr, #-4] ++ b scan_sig ++s7: ++ vldr s7, [lr, #-4] ++ b scan_sig ++s8: ++ vldr s8, [lr, #-4] ++ b scan_sig ++s9: ++ vldr s9, [lr, #-4] ++ b scan_sig ++s10: ++ vldr s10, [lr, #-4] ++ b scan_sig ++s11: ++ vldr s11, [lr, #-4] ++ b scan_sig ++s12: ++ vldr s12, [lr, #-4] ++ b scan_sig ++s13: ++ vldr s13, [lr, #-4] ++ b scan_sig ++s14: ++ vldr s14, [lr, #-4] ++ b scan_sig ++s15: ++ vldr s15, [lr, #-4] ++ b scan_sig ++ ++long: ++ cmp r7, #2 ++ mov r7, #0 ++ bne stack_long ++ ++ ldmia lr!, {r2, r3} ++ b scan_sig ++ ++double: ++ lsrs r5, r4, #1 ++ it cs ++ movcs r6, r4 ++ ++ lsls r4, r5, #1 ++ beq stack_double ++ ++ sub r4, r4, #2 ++ add lr, lr, #8 ++ tbb [pc, r5] ++ ++double_table: ++ .byte 0 ++ .byte (d7-double_table)/2 ++ .byte (d6-double_table)/2 ++ .byte (d5-double_table)/2 ++ .byte (d4-double_table)/2 ++ .byte (d3-double_table)/2 ++ .byte (d2-double_table)/2 ++ .byte (d1-double_table)/2 ++ .byte (d0-double_table)/2 ++ .align 2 ++d0: ++ vldr d0, [lr, #-8] ++ b scan_sig ++d1: ++ vldr d1, [lr, #-8] ++ b scan_sig ++d2: ++ vldr d2, [lr, #-8] ++ b scan_sig ++d3: ++ vldr d3, [lr, #-8] ++ b scan_sig ++d4: ++ vldr d4, [lr, #-8] ++ b scan_sig ++d5: ++ vldr d5, [lr, #-8] ++ b scan_sig ++d6: ++ vldr d6, [lr, #-8] ++ b scan_sig ++d7: ++ vldr d7, [lr, #-8] ++ b scan_sig ++ ++stack_double: ++ mov r6, #0 ++ ++stack_long: ++ /* Ensure address is 8 byte aligned */ ++ add ip, ip, #7 ++ bic ip, ip, #7 ++ ++ ldr r5, [lr], #4 ++ str r5, [ip], #4 ++ ldr r5, [lr], #4 ++ str r5, [ip], #4 ++ b scan_sig ++ ++done: ++ /* Call the function */ ++ blx r11 ++ ++ add sp, sp, r10 /* Pop argument area */ ++ ++ ldr r4, [sp, #32] /* Reload ostack for */ ++ /* address of return value */ ++ ++ ldrb r5, [r8] /* Return type */ ++ ++ cmp r5, #86 /* 'V' */ ++ beq return ++ ++ cmp r5, #68 /* 'D' */ ++ beq return_double ++ ++ cmp r5, #70 /* 'F' */ ++ beq return_float ++ ++ str r0, [r4], #4 /* Low word */ ++ ++ cmp r5, #74 /* 'J' */ ++ it eq ++ streq r1, [r4], #4 /* High word */ ++ ++return: ++ mov r0, r4 /* return ostack */ ++ ldmfd sp!, {r4, r5, r6, r7, r8, r10, r11, lr} ++ bx lr ++ ++return_float: ++ vstr s0, [r4] ++ add r4, r4, #4 ++ b return ++ ++return_double: ++ vstr d0, [r4] ++ add r4, r4, #8 ++ b return +diff --git a/src/os/linux/arm/callNativeEABIHardARM.S b/src/os/linux/arm/callNativeEABIHardARM.S +new file mode 100644 +index 0000000..3a31acd +--- /dev/null ++++ b/src/os/linux/arm/callNativeEABIHardARM.S +@@ -0,0 +1,266 @@ ++/* ++ * Copyright (C) 2011, 2012 Robert Lougher <rob@jamvm.org.uk>. ++ * ++ * This file is part of JamVM. ++ * ++ * This program 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 2, ++ * or (at your option) any later version. ++ * ++ * This program 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 this program; if not, write to the Free Software ++ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ++ */ ++ ++ .text ++ .align 2 ++ .global callJNIMethod ++ .type callJNIMethod,function ++ ++/* ++ * Arguments passed in: ++ * ++ * r0 JNIEnv ++ * r1 class or NULL ++ * r2 sig ++ * r3 extra arg ++ * sp + 0 ostack ++ * sp + 4 function pntr ++ * sp + 8 args count ++ */ ++ ++/* Register usage : ++ * ++ * lr ostack pntr ++ * ip scratch ++ * r11 function pntr ++ * r10 fp backfill ++ * r8 fp reg ++ * r7 int reg ++ * r6 args pntr ++ * r5 sig pntr ++ * r4 extra stack ++ * r3, r2 outgoing int args ++ * r1 outgoing class or this pntr ++ * r0 outgoing JNIEnv (as passed in) ++ * ++ * s0 - s16 (d0 - d7) outgoing float args ++ */ ++ ++callJNIMethod: ++ stmfd sp!, {r4, r5, r6, r7, r8, r10, r11, lr} ++ ldr lr, [sp, #32] /* get ostack pntr */ ++ ldr r11, [sp, #36] /* get function pntr */ ++ ++ cmp r1, #0 /* is method non-static? */ ++ ldreq r1, [lr], #4 /* yes, load r1 with "this" */ ++ ++ mov r4, r3 ++ sub sp, sp, r4 /* allocate room for stacked */ ++ add r5, r2, #1 /* init sig pntr -- skipping '(' */ ++ ++ mov r6, sp /* init loop pntr */ ++ ++ mov r7, #2 ++ mov r8, #16 ++ mov r10, #0 ++ ++scan_sig: ++ ldrb ip, [r5], #1 ++ ++ cmp ip, #41 /* ')' */ ++ beq done ++ ++ cmp ip, #70 /* 'F' */ ++ beq float ++ ++ cmp ip, #68 /* 'D' */ ++ beq double ++ ++ cmp ip, #74 /* 'J' */ ++ beq long ++ ++skip_brackets: ++ cmp ip, #91 /* '[' */ ++ ldreqb ip, [r5], #1 ++ beq skip_brackets ++ ++ cmp ip, #76 /* 'L' */ ++ bne int ++ ++skip_ref: ++ ldrb ip, [r5], #1 ++ cmp ip, #59 /* ';' */ ++ bne skip_ref ++ ++int: ++ cmp r7, #0 ++ beq stack_int ++ ++ subs r7, r7, #1 ++ ++ ldrne r2, [lr], #4 ++ ldreq r3, [lr], #4 ++ ++ b scan_sig ++ ++stack_int: ++ ldr ip, [lr], #4 ++ str ip, [r6], #4 ++ b scan_sig ++ ++float: ++ cmp r10, #0 ++ beq no_backfill ++ ++ sub ip, r10, #1 ++ mov r10, #0 ++ b load_float ++ ++no_backfill: ++ cmp r8, #0 ++ beq stack_int ++ ++ sub r8, r8, #1 ++ mov ip, r8 ++ ++load_float: ++ add lr, lr, #4 ++ add pc, pc, ip, lsl #3 ++ nop ++ ++ flds s15, [lr, #-4] ++ b scan_sig ++ flds s14, [lr, #-4] ++ b scan_sig ++ flds s13, [lr, #-4] ++ b scan_sig ++ flds s12, [lr, #-4] ++ b scan_sig ++ flds s11, [lr, #-4] ++ b scan_sig ++ flds s10, [lr, #-4] ++ b scan_sig ++ flds s9, [lr, #-4] ++ b scan_sig ++ flds s8, [lr, #-4] ++ b scan_sig ++ flds s7, [lr, #-4] ++ b scan_sig ++ flds s6, [lr, #-4] ++ b scan_sig ++ flds s5, [lr, #-4] ++ b scan_sig ++ flds s4, [lr, #-4] ++ b scan_sig ++ flds s3, [lr, #-4] ++ b scan_sig ++ flds s2, [lr, #-4] ++ b scan_sig ++ flds s1, [lr, #-4] ++ b scan_sig ++ flds s0, [lr, #-4] ++ b scan_sig ++ ++long: ++ cmp r7, #2 ++ mov r7, #0 ++ bne stack_long ++ ++ ldr r2, [lr], #4 ++ ldr r3, [lr], #4 ++ b scan_sig ++ ++double: ++ lsrs ip, r8, #1 ++ movcs r10, r8 ++ ++ lsls r8, ip, #1 ++ beq stack_double ++ ++ sub r8, r8, #2 ++ add lr, lr, #8 ++ add pc, pc, ip, lsl #3 ++ nop ++ nop ++ nop ++ ++ fldd d7, [lr, #-8] ++ b scan_sig ++ fldd d6, [lr, #-8] ++ b scan_sig ++ fldd d5, [lr, #-8] ++ b scan_sig ++ fldd d4, [lr, #-8] ++ b scan_sig ++ fldd d3, [lr, #-8] ++ b scan_sig ++ fldd d2, [lr, #-8] ++ b scan_sig ++ fldd d1, [lr, #-8] ++ b scan_sig ++ fldd d0, [lr, #-8] ++ b scan_sig ++ ++stack_double: ++ mov r10, #0 ++ ++stack_long: ++ /* Ensure address is 8 byte aligned */ ++ add r6, r6, #7 ++ bic r6, r6, #7 ++ ++ ldr ip, [lr], #4 ++ str ip, [r6], #4 ++ ldr ip, [lr], #4 ++ str ip, [r6], #4 ++ b scan_sig ++ ++done: ++ /* Call the function */ ++#if defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__) ++ mov lr, pc ++ bx r11 ++#else ++ blx r11 ++#endif ++ ++ add sp, sp, r4 /* Pop argument area */ ++ ldr r4, [sp, #32] /* Reload ostack for */ ++ /* address of return value */ ++ ldrb ip, [r5] /* Return type */ ++ ++ cmp ip, #86 /* 'V' */ ++ beq return ++ ++ cmp ip, #68 /* 'D' */ ++ beq return_double ++ ++ cmp ip, #70 /* 'F' */ ++ beq return_float ++ ++ str r0, [r4], #4 /* Low word */ ++ ++ cmp ip, #74 /* 'J' */ ++ streq r1, [r4], #4 /* High word */ ++ ++return: ++ mov r0, r4 /* return ostack */ ++ ldmfd sp!, {r4, r5, r6, r7, r8, r10, r11, lr} ++ bx lr ++ ++return_float: ++ add r4, r4, #4 ++ fsts s0, [r4, #-4] ++ b return ++ ++return_double: ++ add r4, r4, #8 ++ fstd d0, [r4, #-8] ++ b return +diff --git a/src/os/linux/arm/dll_md.c b/src/os/linux/arm/dll_md.c +index f5df90e..39bdf7c 100644 +--- a/src/os/linux/arm/dll_md.c ++++ b/src/os/linux/arm/dll_md.c +@@ -1,6 +1,6 @@ + /* +- * Copyright (C) 2003, 2004, 2005, 2006, 2007 +- * Robert Lougher <rob@lougher.org.uk>. ++ * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2011 ++ * Robert Lougher <rob@jamvm.org.uk>. + * + * This file is part of JamVM. + * +@@ -31,6 +31,61 @@ + * out stack requirements and then to push arguments. To + * save the first scan at call time, the signature is pre- + * scanned and stack requirement stored in the extra argument. */ ++ ++#ifdef __ARM_PCS_VFP ++int nativeExtraArg(MethodBlock *mb) { ++ char *sig = mb->type; ++ int fp_backfill = 0; ++ int stack_args = 0; ++ int int_args = 2; ++ int fp_args = 16; ++ ++ while(*++sig != ')') ++ switch(*sig) { ++ case 'J': ++ if(int_args < 2) ++ stack_args = (stack_args + 15) & ~7; ++ int_args = 0; ++ break; ++ ++ case 'D': ++ fp_backfill |= fp_args & 1; ++ fp_args &= ~1; ++ ++ if(fp_args == 0) { ++ stack_args = (stack_args + 15) & ~7; ++ fp_backfill = 0; ++ } else ++ fp_args -= 2; ++ break; ++ ++ case 'F': ++ if(fp_backfill) ++ fp_backfill = 0; ++ else { ++ if(fp_args == 0) ++ stack_args += 4; ++ else ++ fp_args--; ++ } ++ break; ++ ++ default: ++ if(int_args == 0) ++ stack_args += 4; ++ else ++ int_args--; ++ ++ if(*sig == '[') ++ while(*++sig == '['); ++ if(*sig == 'L') ++ while(*++sig != ';'); ++ break; ++ } ++ ++ return (stack_args + 7) & ~7; ++} ++#else + int nativeExtraArg(MethodBlock *mb) { + char *sig = mb->type; + int args = 0; +@@ -57,7 +112,7 @@ int nativeExtraArg(MethodBlock *mb) { + native method, so minimum stack requirement is 8 bytes. */ + return args < 8 ? 8 : args; + } +- ++#endif + #else + + /* Under OABI, arguments can be copied onto the stack "as is" +-- +2.17.1 + diff --git a/gnu/packages/patches/mesa-wayland-egl-symbols-check-mips.patch b/gnu/packages/patches/mesa-wayland-egl-symbols-check-mips.patch deleted file mode 100644 index aa2278697e..0000000000 --- a/gnu/packages/patches/mesa-wayland-egl-symbols-check-mips.patch +++ /dev/null @@ -1,15 +0,0 @@ -Fix 'wayland-egl-symbols-check' on mips64el-linux, where an additional symbol -(_ftext) is present in libwayland-egl.so. - -Patch by Mark H Weaver <mhw@netris.org> - ---- mesa-12.0.1/src/egl/wayland/wayland-egl/wayland-egl-symbols-check.orig 2016-01-18 02:39:25.000000000 -0500 -+++ mesa-12.0.1/src/egl/wayland/wayland-egl/wayland-egl-symbols-check 2016-10-24 16:25:07.110721426 -0400 -@@ -7,6 +7,7 @@ - wl_egl_window_destroy - wl_egl_window_get_attached_size - _fini -+_ftext - _init - EOF - done) diff --git a/gnu/packages/patches/meson-for-build-rpath.patch b/gnu/packages/patches/meson-for-build-rpath.patch index 4e20c9aed3..2151d53565 100644 --- a/gnu/packages/patches/meson-for-build-rpath.patch +++ b/gnu/packages/patches/meson-for-build-rpath.patch @@ -6,14 +6,13 @@ Patch by Peter Mikkelsen <petermikkelsen10@gmail.com> --- meson-0.42.0/mesonbuild/scripts/meson_install.py.orig 2017-09-09 01:49:39.147374148 +0200 +++ meson-0.42.0/mesonbuild/scripts/meson_install.py 2017-09-09 01:51:01.209134717 +0200 -@@ -345,15 +345,6 @@ +@@ -391,14 +391,6 @@ print("Symlink creation does not work on this platform. " "Skipping all symlinking.") printed_symlink_error = True -- if is_elf_platform() and os.path.isfile(outname): +- if os.path.isfile(outname): - try: -- e = depfixer.Elf(outname, False) -- e.fix_rpath(install_rpath) +- depfixer.fix_rpath(outname, install_rpath, False) - except SystemExit as e: - if isinstance(e.code, int) and e.code == 0: - pass diff --git a/gnu/packages/patches/openblas-fix-tests-i686.patch b/gnu/packages/patches/openblas-fix-tests-i686.patch new file mode 100644 index 0000000000..3325546ea3 --- /dev/null +++ b/gnu/packages/patches/openblas-fix-tests-i686.patch @@ -0,0 +1,35 @@ +Fix a test failure on some i686 systems: + +https://github.com/xianyi/OpenBLAS/issues/1575 + +This patch is a squashed version of these commits: + +https://github.com/xianyi/OpenBLAS/pull/1583 + +diff --git a/kernel/x86/KERNEL.NEHALEM b/kernel/x86/KERNEL.NEHALEM +index 835520ef..65b03ae5 100644 +--- a/kernel/x86/KERNEL.NEHALEM ++++ b/kernel/x86/KERNEL.NEHALEM +@@ -1,3 +1 @@ + include $(KERNELDIR)/KERNEL.PENRYN +-SSWAPKERNEL = ../arm/swap.c +-DSWAPKERNEL = ../arm/swap.c +diff --git a/kernel/x86/swap.S b/kernel/x86/swap.S +index 54b00b33..e30c2789 100644 +--- a/kernel/x86/swap.S ++++ b/kernel/x86/swap.S +@@ -138,6 +138,14 @@ + /* INCX != 1 or INCY != 1 */ + + .L14: ++ cmpl $0, %ebx ++ jne .L141 ++ cmpl $0, %ecx ++ jne .L141 ++/* INCX == 0 and INCY == 0 */ ++ jmp .L27 ++ ++.L141: + movl %edx, %eax + sarl $2, %eax + jle .L28 diff --git a/gnu/packages/patches/syncthing-fix-crash.patch b/gnu/packages/patches/syncthing-fix-crash.patch new file mode 100644 index 0000000000..d27e543982 --- /dev/null +++ b/gnu/packages/patches/syncthing-fix-crash.patch @@ -0,0 +1,72 @@ +Avoid a crash: + +https://github.com/syncthing/syncthing/issues/5002 + +Patch copied from upstream source repository: + +https://github.com/syncthing/syncthing/commit/35a75a95dc6383b2d73ab645f1407f7907ec1a2c + +From 35a75a95dc6383b2d73ab645f1407f7907ec1a2c Mon Sep 17 00:00:00 2001 +From: Jakob Borg <jakob@kastelo.net> +Date: Wed, 13 Jun 2018 19:07:52 +0200 +Subject: [PATCH] lib/model: Don't panic when rechecking file (fixes #5002) + (#5003) + +--- + lib/model/model.go | 2 +- + lib/model/model_test.go | 26 ++++++++++++++++++++++++++ + 2 files changed, 27 insertions(+), 1 deletion(-) + +diff --git a/lib/model/model.go b/lib/model/model.go +index 5a9146e0..302f06c5 100644 +--- a/lib/model/model.go ++++ b/lib/model/model.go +@@ -1373,7 +1373,7 @@ func (m *Model) recheckFile(deviceID protocol.DeviceID, folderFs fs.Filesystem, + return + } + +- if blockIndex > len(cf.Blocks) { ++ if blockIndex >= len(cf.Blocks) { + l.Debugf("%v recheckFile: %s: %q / %q i=%d: block index too far", m, deviceID, folder, name, blockIndex) + return + } +diff --git a/lib/model/model_test.go b/lib/model/model_test.go +index 295eafc1..456bbc4a 100644 +--- a/lib/model/model_test.go ++++ b/lib/model/model_test.go +@@ -3608,6 +3608,32 @@ func TestIssue4903(t *testing.T) { + } + } + ++func TestIssue5002(t *testing.T) { ++ // recheckFile should not panic when given an index equal to the number of blocks ++ ++ db := db.OpenMemory() ++ m := NewModel(defaultCfgWrapper, protocol.LocalDeviceID, "syncthing", "dev", db, nil) ++ m.AddFolder(defaultFolderConfig) ++ m.StartFolder("default") ++ ++ m.ServeBackground() ++ defer m.Stop() ++ ++ if err := m.ScanFolder("default"); err != nil { ++ t.Error(err) ++ } ++ ++ file, ok := m.CurrentFolderFile("default", "foo") ++ if !ok { ++ t.Fatal("test file should exist") ++ } ++ nBlocks := len(file.Blocks) ++ ++ m.recheckFile(protocol.LocalDeviceID, defaultFolderConfig.Filesystem(), "default", "foo", nBlocks-1, []byte{1, 2, 3, 4}) ++ m.recheckFile(protocol.LocalDeviceID, defaultFolderConfig.Filesystem(), "default", "foo", nBlocks, []byte{1, 2, 3, 4}) // panic ++ m.recheckFile(protocol.LocalDeviceID, defaultFolderConfig.Filesystem(), "default", "foo", nBlocks+1, []byte{1, 2, 3, 4}) ++} ++ + func addFakeConn(m *Model, dev protocol.DeviceID) *fakeConnection { + fc := &fakeConnection{id: dev, model: m} + m.AddConnection(fc, protocol.HelloResult{}) +-- +2.18.0 + diff --git a/gnu/packages/patches/xapian-revert-5489fb2f8.patch b/gnu/packages/patches/xapian-revert-5489fb2f8.patch new file mode 100644 index 0000000000..7b78e2abb5 --- /dev/null +++ b/gnu/packages/patches/xapian-revert-5489fb2f8.patch @@ -0,0 +1,23 @@ +Revert this upstream commit which breaks a test case in "notmuch": + +https://git.xapian.org/?p=xapian;a=commitdiff;h=5489fb2f838c0f0b0a593b4c17df282a93a1fe5a + +See the notmuch FAQ entry: + +https://notmuchmail.org/faq/#index12h2 + +This should be fixed for later releases. + +diff --git a/backends/glass/glass_postlist.cc b/xapian-core/backends/glass/glass_postlist.cc +index 80e578b85..a47f14a68 100644 +--- a/backends/glass/glass_postlist.cc ++++ b/backends/glass/glass_postlist.cc +@@ -759,7 +759,7 @@ GlassPostList::open_nearby_postlist(const std::string & term_, + (void)need_pos; + if (term_.empty()) + RETURN(NULL); +- if (!this_db.get() || this_db->postlist_table.is_modified()) ++ if (!this_db.get() || this_db->postlist_table.is_writable()) + RETURN(NULL); + RETURN(new GlassPostList(this_db, term_, cursor->clone())); + } diff --git a/gnu/packages/patches/xf86-video-savage-xorg-compat.patch b/gnu/packages/patches/xf86-video-savage-xorg-compat.patch new file mode 100644 index 0000000000..9524032676 --- /dev/null +++ b/gnu/packages/patches/xf86-video-savage-xorg-compat.patch @@ -0,0 +1,33 @@ +Fix build against xorg-server >= 1.20. + +Patch taken from upstream: +https://cgit.freedesktop.org/xorg/driver/xf86-video-savage/commit/?id=0ece556daa8a88771b669d8104396abd9166d2d0 + +diff --git a/src/savage_driver.c b/src/savage_driver.c +index 58a294d..3cda923 100644 +--- a/src/savage_driver.c ++++ b/src/savage_driver.c +@@ -2034,8 +2034,6 @@ static Bool SavagePreInit(ScrnInfoPtr pScrn, int flags) + xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "Detected current MCLK value of %1.3f MHz\n", + mclk / 1000.0); + +- pScrn->maxHValue = 2048 << 3; /* 11 bits of h_total 8-pixel units */ +- pScrn->maxVValue = 2048; /* 11 bits of v_total */ + pScrn->virtualX = pScrn->display->virtualX; + pScrn->virtualY = pScrn->display->virtualY; + +@@ -3637,6 +3635,14 @@ static ModeStatus SavageValidMode(SCRN_ARG_TYPE arg, DisplayModePtr pMode, + (pMode->VDisplay > psav->PanelY))) + return MODE_PANEL; + ++ /* 11 bits of h_total 8-pixel units */ ++ if (pMode->HTotal > (2048 << 3)) ++ return MODE_BAD_HVALUE; ++ ++ /* 11 bits of v_total */ ++ if (pMode->VTotal > 2048) ++ return MODE_BAD_VVALUE; ++ + if (psav->UseBIOS) { + refresh = SavageGetRefresh(pMode); + return (SavageMatchBiosMode(pScrn,pMode->HDisplay, diff --git a/gnu/packages/patches/xf86-video-sis-xorg-compat.patch b/gnu/packages/patches/xf86-video-sis-xorg-compat.patch new file mode 100644 index 0000000000..ebe9715d13 --- /dev/null +++ b/gnu/packages/patches/xf86-video-sis-xorg-compat.patch @@ -0,0 +1,18 @@ +Remove use of interface no longer provided by xorg-server. + +Patch taken from upstream: +https://cgit.freedesktop.org/xorg/driver/xf86-video-sis/commit/?id=4b1356a2b7fd06e9a05d134caa4033681c939737 + +diff --git a/src/sis_driver.c b/src/sis_driver.c +index 8f06164..513f68b 100644 +--- a/src/sis_driver.c ++++ b/src/sis_driver.c +@@ -2738,7 +2738,7 @@ SiSPrintModes(ScrnInfoPtr pScrn) + float hsync, refresh = 0.0; + char *desc, *desc2, *prefix, *uprefix, *output; + +- xf86DrvMsg(pScrn->scrnIndex, pScrn->virtualFrom, "Virtual size is %dx%d " ++ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Virtual size is %dx%d " + "(pitch %d)\n", pScrn->virtualX, pScrn->virtualY, + pScrn->displayWidth); + diff --git a/gnu/packages/patches/zathura-pdf-mupdf-link-to-jpeg-libraries.patch b/gnu/packages/patches/zathura-pdf-mupdf-link-to-jpeg-libraries.patch new file mode 100644 index 0000000000..63e058bbef --- /dev/null +++ b/gnu/packages/patches/zathura-pdf-mupdf-link-to-jpeg-libraries.patch @@ -0,0 +1,55 @@ +From: Tobias Geerinckx-Rice <me@tobias.gr> +Date: Mon, 18 Jun 2018 02:37:41 +0200 +Subject: zathura-pdf-mupdf: Link to JPEG libraries. + +As of version 0.3.3, zathura-pdf-mupdf no longer links to some required +JPEG libraries, leading to such errors as: + + $ zathura foo.pdf + error: Could not load plugin '/gnu/store/...-profile/lib/zathura/libpdf-mupdf.so' (/gnu/store/...-profile/lib/zathura/libpdf-mupdf.so: undefined symbol: jpeg_resync_to_restart). + +The patch below, copied verbatim from Arch[0], fixes that. +Its description happens to match our reality, too. + +[0]: https://git.archlinux.org/svntogit/community.git/tree/trunk?h=packages/zathura-pdf-mupdf +--- +From 3fb0ff750373d45d4f5172ce1d41b74183cd07e8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Johannes=20L=C3=B6thberg?= <johannes@kyriasis.com> +Date: Sat, 24 Mar 2018 14:31:18 +0100 +Subject: [PATCH] Explicitly link against jbig2dec, openjp2, and jpeg +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Normally these are statically linked into libmupdfthird, but we delete +those to make mupdf use the system libraries. Previously +zathura-pdf-mupdf explicitly linked against them, but this is +technically incorrect since they are supposed to be in libmupdfthird so +that was removed. This commit essentially reverts that in the new build +system. + +Signed-off-by: Johannes Löthberg <johannes@kyriasis.com> +--- + meson.build | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/meson.build b/meson.build +index 3b0d7b7..ae2fc9c 100644 +--- a/meson.build ++++ b/meson.build +@@ -22,7 +22,11 @@ cairo = dependency('cairo') + mupdf = cc.find_library('mupdf') + mupdfthird = cc.find_library('mupdfthird') + +-build_dependencies = [zathura, girara, glib, cairo, mupdf, mupdfthird] ++jbig2dec = cc.find_library('jbig2dec') ++openjp2 = cc.find_library('openjp2') ++jpeg = cc.find_library('jpeg') ++ ++build_dependencies = [zathura, girara, glib, cairo, mupdf, mupdfthird, jbig2dec, openjp2, jpeg] + + # defines + defines = [ +-- +2.16.3 + diff --git a/gnu/packages/patches/zathura-plugindir-environment-variable.patch b/gnu/packages/patches/zathura-plugindir-environment-variable.patch index 2e3ea527d0..a8ffff965a 100644 --- a/gnu/packages/patches/zathura-plugindir-environment-variable.patch +++ b/gnu/packages/patches/zathura-plugindir-environment-variable.patch @@ -8,15 +8,15 @@ different file formats) called ZATHURA_PLUGIN_PATH. Command line option -p still takes precedence. Patch by Paul van der Walt <paul@denknerd.org> +Adjusted for Zathura 0.3.9 by Tobias Geerinckx-Rice <me@tobias.gr> --- zathura/zathura.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/zathura/zathura.c b/zathura/zathura.c -index 589dd28..375ec54 100644 --- a/zathura/zathura.c +++ b/zathura/zathura.c -@@ -413,6 +413,13 @@ zathura_set_plugin_dir(zathura_t* zathura, const char* dir) +@@ -597,6 +597,13 @@ zathura_set_plugin_dir(zathura_t* zathura, const char* dir) g_return_if_fail(zathura != NULL); g_return_if_fail(zathura->plugins.manager != NULL); @@ -28,8 +28,5 @@ index 589dd28..375ec54 100644 + dir = g_getenv("ZATHURA_PLUGIN_PATH"); + if (dir != NULL) { - girara_list_t* paths = girara_split_path_array(dir); - GIRARA_LIST_FOREACH(paths, char*, iter, path) --- -2.3.1 - + set_plugin_dir(zathura, dir); + #ifdef ZATHURA_PLUGINDIR diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm index e83b2c1960..66fbb20038 100644 --- a/gnu/packages/pdf.scm +++ b/gnu/packages/pdf.scm @@ -13,7 +13,7 @@ ;;; Copyright © 2017, 2018 Leo Famulari <leo@famulari.name> ;;; Copyright © 2017 Alex Vong <alexvong1995@gmail.com> ;;; Copyright © 2017 Rene Saavedra <rennes@openmailbox.org> -;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr> +;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr> ;;; ;;; This file is part of GNU Guix. ;;; @@ -37,6 +37,7 @@ #:use-module (guix utils) #: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 trivial) #:use-module (gnu packages) @@ -343,26 +344,32 @@ reading and editing of existing PDF files.") (define-public zathura-cb (package (name "zathura-cb") - (version "0.1.7") + (version "0.1.8") (source (origin (method url-fetch) (uri (string-append "https://pwmt.org/projects/zathura-cb/download/zathura-cb-" - version ".tar.gz")) + version ".tar.xz")) (sha256 (base32 - "0r4viisycj39kaz4281cmkr7n9w5q96dmlf7nf45n8zq8qy2npw3")))) + "1i6cf0vks501cggwvfsl6qb7mdaf3sszdymphimfvnspw810faj5")))) (native-inputs `(("pkg-config" ,pkg-config))) (inputs `(("libarchive" ,libarchive) ("zathura" ,zathura))) - (build-system gnu-build-system) + (build-system meson-build-system) (arguments - `(#:make-flags (list (string-append "PREFIX=" %output) - (string-append "PLUGINDIR=" %output "/lib/zathura") - "CC=gcc") - #:tests? #f ; Package does not contain tests. + `(#:tests? #f ; package does not contain tests #:phases - (modify-phases %standard-phases (delete 'configure)))) + (modify-phases %standard-phases + (add-after 'unpack 'patch-plugin-directory + ;; Something of a regression in 0.1.8: the new Meson build system + ;; now hard-codes an incorrect plugin directory. Fix it. + (lambda* (#:key outputs #:allow-other-keys) + (substitute* "meson.build" + (("(install_dir:).*" _ key) + (string-append key + "'" (assoc-ref outputs "out") "/lib/zathura'\n"))) + #t))))) (home-page "https://pwmt.org/projects/zathura-cb/") (synopsis "Comic book support for zathura (libarchive backend)") (description "The zathura-cb plugin adds comic book support to zathura @@ -372,26 +379,32 @@ using libarchive.") (define-public zathura-ps (package (name "zathura-ps") - (version "0.2.5") + (version "0.2.6") (source (origin (method url-fetch) (uri (string-append "https://pwmt.org/projects/zathura-ps/download/zathura-ps-" - version ".tar.gz")) + version ".tar.xz")) (sha256 (base32 - "1x4knqja8pw2a5cb3y2209nr3iddj1z8nwasy48v5nprj61fdxqj")))) + "0wygq89nyjrjnsq7vbpidqdsirjm6iq4w2rijzwpk2f83ys8bc3y")))) (native-inputs `(("pkg-config" ,pkg-config))) (inputs `(("libspectre" ,libspectre) ("zathura" ,zathura))) - (build-system gnu-build-system) + (build-system meson-build-system) (arguments - `(#:make-flags (list (string-append "PREFIX=" %output) - (string-append "PLUGINDIR=" %output "/lib/zathura") - "CC=gcc") - #:tests? #f ; Package does not contain tests. + `(#:tests? #f ; package does not contain tests #:phases - (modify-phases %standard-phases (delete 'configure)))) + (modify-phases %standard-phases + (add-after 'unpack 'patch-plugin-directory + ;; Something of a regression in 0.2.6: the new Meson build system + ;; now hard-codes an incorrect plugin directory. Fix it. + (lambda* (#:key outputs #:allow-other-keys) + (substitute* "meson.build" + (("(install_dir:).*" _ key) + (string-append key + "'" (assoc-ref outputs "out") "/lib/zathura'\n"))) + #t))))) (home-page "https://pwmt.org/projects/zathura-ps/") (synopsis "PS support for zathura (libspectre backend)") (description "The zathura-ps plugin adds PS support to zathura @@ -401,27 +414,33 @@ using libspectre.") (define-public zathura-djvu (package (name "zathura-djvu") - (version "0.2.7") + (version "0.2.8") (source (origin (method url-fetch) (uri (string-append "https://pwmt.org/projects/zathura-djvu/download/zathura-djvu-" - version ".tar.gz")) + version ".tar.xz")) (sha256 (base32 - "1sbfdsyp50qc85xc4458sn4w1rv1qbygdwmcr5kjlfpsmdq98vhd")))) + "0axkv1crdxn0z44whaqp2ibkdqcykhjnxk7qzms0dp1b67an9rnh")))) (native-inputs `(("pkg-config" ,pkg-config))) (inputs `(("djvulibre" ,djvulibre) ("zathura" ,zathura))) - (build-system gnu-build-system) + (build-system meson-build-system) (arguments - `(#:make-flags (list (string-append "PREFIX=" %output) - (string-append "PLUGINDIR=" %output "/lib/zathura") - "CC=gcc") - #:tests? #f ; Package does not contain tests. + `(#:tests? #f ; package does not contain tests #:phases - (modify-phases %standard-phases (delete 'configure)))) + (modify-phases %standard-phases + (add-after 'unpack 'patch-plugin-directory + ;; Something of a regression in 0.2.8: the new Meson build system + ;; now hard-codes an incorrect plugin directory. Fix it. + (lambda* (#:key outputs #:allow-other-keys) + (substitute* "meson.build" + (("(install_dir:).*" _ key) + (string-append key + "'" (assoc-ref outputs "out") "/lib/zathura'\n"))) + #t))))) (home-page "https://pwmt.org/projects/zathura-djvu/") (synopsis "DjVu support for zathura (DjVuLibre backend)") (description "The zathura-djvu plugin adds DjVu support to zathura @@ -431,15 +450,17 @@ using the DjVuLibre library.") (define-public zathura-pdf-mupdf (package (name "zathura-pdf-mupdf") - (version "0.3.2") + (version "0.3.3") (source (origin (method url-fetch) (uri (string-append "https://pwmt.org/projects/zathura-pdf-mupdf" - "/download/zathura-pdf-mupdf-" version ".tar.gz")) + "/download/zathura-pdf-mupdf-" version ".tar.xz")) + (patches + (search-patches "zathura-pdf-mupdf-link-to-jpeg-libraries.patch")) (sha256 (base32 - "0xkajc3is7ncmb2fmymbzfgrran2bz12i7zsm1vvxhxds728h7ck")))) + "1zbdqimav4wfgimpy3nfzl10qj7vyv23rdy2z5z7z93jwbp2rc2j")))) (native-inputs `(("pkg-config" ,pkg-config))) (inputs `(("jbig2dec" ,jbig2dec) @@ -448,13 +469,20 @@ using the DjVuLibre library.") ("openjpeg" ,openjpeg) ("openssl" ,openssl) ("zathura" ,zathura))) - (build-system gnu-build-system) + (build-system meson-build-system) (arguments - `(#:make-flags (list (string-append "PREFIX=" %output) - (string-append "PLUGINDIR=" %output "/lib/zathura") - "CC=gcc") - #:tests? #f ;No tests. - #:phases (modify-phases %standard-phases (delete 'configure)))) + `(#:tests? #f ; package does not contain tests + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'patch-plugin-directory + ;; Something of a regression in 0.3.3: the new Meson build system + ;; now hard-codes an incorrect plugin directory. Fix it. + (lambda* (#:key outputs #:allow-other-keys) + (substitute* "meson.build" + (("(install_dir:).*" _ key) + (string-append key + "'" (assoc-ref outputs "out") "/lib/zathura'\n"))) + #t))))) (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 @@ -464,27 +492,33 @@ by using the @code{mupdf} rendering library.") (define-public zathura-pdf-poppler (package (name "zathura-pdf-poppler") - (version "0.2.8") + (version "0.2.9") (source (origin (method url-fetch) (uri (string-append "https://pwmt.org/projects/zathura-pdf-poppler/download/zathura-pdf-poppler-" - version ".tar.gz")) + version ".tar.xz")) (sha256 (base32 - "1m55m7s7f8ng8a7lmcw9z4n5zv7xk4vp9n6fp9j84z6rk2imf7a2")))) + "1p4jcny0jniygns78mcf0nlm298dszh49qpmjmackrm6dq8hc25y")))) (native-inputs `(("pkg-config" ,pkg-config))) (inputs `(("poppler" ,poppler) ("zathura" ,zathura))) - (build-system gnu-build-system) + (build-system meson-build-system) (arguments - `(#:make-flags (list (string-append "PREFIX=" %output) - (string-append "PLUGINDIR=" %output "/lib/zathura") - "CC=gcc") - #:tests? #f ; Package does not include tests. + `(#:tests? #f ; package does not include tests #:phases - (modify-phases %standard-phases (delete 'configure)))) + (modify-phases %standard-phases + (add-after 'unpack 'patch-plugin-directory + ;; Something of a regression in 0.2.9: the new Meson build system + ;; now hard-codes an incorrect plugin directory. Fix it. + (lambda* (#:key outputs #:allow-other-keys) + (substitute* "meson.build" + (("(install_dir:).*" _ key) + (string-append key + "'" (assoc-ref outputs "out") "/lib/zathura'\n"))) + #t))))) (home-page "https://pwmt.org/projects/zathura-pdf-poppler/") (synopsis "PDF support for zathura (poppler backend)") (description "The zathura-pdf-poppler plugin adds PDF support to zathura @@ -494,21 +528,24 @@ by using the poppler rendering engine.") (define-public zathura (package (name "zathura") - (version "0.3.8") + (version "0.3.9") (source (origin (method url-fetch) (uri (string-append "https://pwmt.org/projects/zathura/download/zathura-" - version ".tar.gz")) + version ".tar.xz")) (sha256 (base32 - "0dz5pky3vmf3s2cp2rv1c099gb1s49p9xlgm3ghyy4pzyxc8bgs6")) + "0z09kz92a2n8qqv3cy8bx5j5k612g2f9mmh4szqlc7yvi39aax1g")) (patches (search-patches "zathura-plugindir-environment-variable.patch")))) (native-inputs `(("pkg-config" ,pkg-config) ("gettext" ,gettext-minimal) ("glib:bin" ,glib "bin") + ;; For building documentation. + ("python-sphinx" ,python-sphinx) + ;; For tests. ("check" ,check) ("xorg-server" ,xorg-server-1.19.3))) @@ -520,15 +557,9 @@ by using the poppler rendering engine.") (list (search-path-specification (variable "ZATHURA_PLUGIN_PATH") (files '("lib/zathura"))))) - (build-system gnu-build-system) + (build-system meson-build-system) (arguments - `(#:make-flags - `(,(string-append "PREFIX=" (assoc-ref %outputs "out")) - "CC=gcc" "COLOR=0") - #:test-target "test" - #:disallowed-references (,xorg-server-1.19.3) - #:phases (modify-phases %standard-phases - (delete 'configure) + `(#:phases (modify-phases %standard-phases (add-before 'check 'start-xserver ;; Tests require a running X server. (lambda* (#:key inputs #:allow-other-keys) diff --git a/gnu/packages/php.scm b/gnu/packages/php.scm index 90e6ab1c1c..1acab0de71 100644 --- a/gnu/packages/php.scm +++ b/gnu/packages/php.scm @@ -318,7 +318,7 @@ ("libxpm" ,libxpm) ("libxslt" ,libxslt) ("libx11" ,libx11) - ("oniguruma" ,oniguruma) + ("oniguruma" ,oniguruma-5) ("openldap" ,openldap) ("openssl" ,openssl) ("pcre" ,pcre) diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm index c9b22e87ee..d350990c67 100644 --- a/gnu/packages/python.scm +++ b/gnu/packages/python.scm @@ -782,14 +782,14 @@ NetCDF files can also be read and modified. Python-HDF4 is a fork of (define-public python-h5py (package (name "python-h5py") - (version "2.7.0") + (version "2.8.0") (source (origin (method url-fetch) (uri (pypi-uri "h5py" version)) (sha256 (base32 - "0433sdv6xc9p7v1xs1gvbxp7p152ywi3nplgjb258q9fvw9469br")))) + "0mdr6wrq02ac93m1aqx9kad0ppfzmm4imlxqgyy1x4l7hmdcc9p6")))) (build-system python-build-system) (arguments `(#:tests? #f ; no test target @@ -2218,14 +2218,14 @@ environments and back.") (define-public python-pyyaml (package (name "python-pyyaml") - (version "3.12") + (version "3.13") (source (origin (method url-fetch) (uri (pypi-uri "PyYAML" version)) (sha256 (base32 - "1aqjl8dk9amd4zr99n8v2qxzgmr2hdvqfma4zh7a41rj6336c9sr")))) + "1gx603g484z46cb74j9rzr6sjlh2vndxayicvlyhxdz98lhhkwry")))) (build-system python-build-system) (inputs `(("libyaml" ,libyaml))) @@ -7834,14 +7834,14 @@ python-xdo for newer bindings.)") (define-public python-mako (package (name "python-mako") - (version "1.0.6") + (version "1.0.7") (source (origin (method url-fetch) (uri (pypi-uri "Mako" version)) (sha256 (base32 - "03dyxgjknp4ffsv7vwfd28l5bbpzi0ylp20543wpg3iahyyrwma8")))) + "1bi5gnr8r8dva06qpyx4kgjc6spm2k1y908183nbbaylggjzs0jf")))) (build-system python-build-system) (propagated-inputs `(("python-markupsafe" ,python-markupsafe))) diff --git a/gnu/packages/samba.scm b/gnu/packages/samba.scm index 0ce46056f5..64017224a7 100644 --- a/gnu/packages/samba.scm +++ b/gnu/packages/samba.scm @@ -236,14 +236,14 @@ Desktops into Active Directory environments using the winbind daemon.") (define-public talloc (package (name "talloc") - (version "2.1.13") + (version "2.1.14") (source (origin (method url-fetch) (uri (string-append "https://www.samba.org/ftp/talloc/talloc-" version ".tar.gz")) (sha256 (base32 - "0iv09iv385x69gfzvassq6m3y0rd8ncylls95dm015xdy3drkww4")))) + "1kk76dyav41ip7ddbbf04yfydb4jvywzi2ps0z2vla56aqkn11di")))) (build-system gnu-build-system) (arguments '(#:phases @@ -306,14 +306,14 @@ destructors. It is the core memory allocator used in Samba.") (define-public tevent (package (name "tevent") - (version "0.9.36") + (version "0.9.37") (source (origin (method url-fetch) (uri (string-append "https://www.samba.org/ftp/tevent/tevent-" version ".tar.gz")) (sha256 (base32 - "0k1v4vnlzpf7h3p4khaw8a7damrc68g136bf2xzys08nzpinnaxx")))) + "1q77vbjic2bb79li2a54ffscnrnwwww55fbpry2kgh7acpnlb0qn")))) (build-system gnu-build-system) (arguments '(#:phases @@ -341,14 +341,14 @@ many event types, including timers, signals, and the classic file descriptor eve (define-public ldb (package (name "ldb") - (version "1.4.0") + (version "1.3.3") (source (origin (method url-fetch) (uri (string-append "https://www.samba.org/ftp/ldb/ldb-" version ".tar.gz")) (sha256 (base32 - "1d591ny4j4s409s2afjv4fn7inqlclr0zlyclw3619rkbaixlzm8")) + "14gsrm7dvyjpbpnc60z75j6fz2p187abm2h353lq95kx2bv70c1b")) (modules '((guix build utils))) (snippet '(begin @@ -361,10 +361,7 @@ many event types, including timers, signals, and the classic file descriptor eve #t)))) (build-system gnu-build-system) (arguments - '(;; LMDB is only supported on 64-bit systems, yet the test suite - ;; requires it. - #:tests? (assoc-ref %build-inputs "lmdb") - #:phases + '(#:phases (modify-phases %standard-phases (replace 'configure ;; ldb use a custom configuration script that runs waf. @@ -384,10 +381,7 @@ many event types, including timers, signals, and the classic file descriptor eve `(("talloc" ,talloc) ("tdb" ,tdb))) (inputs - `(,@(if (target-64bit?) - `(("lmdb" ,lmdb)) - '()) - ("popt" ,popt) + `(("popt" ,popt) ("tevent" ,tevent))) (synopsis "LDAP-like embedded database") (home-page "https://ldb.samba.org/") diff --git a/gnu/packages/search.scm b/gnu/packages/search.scm index e9e74817f2..386092b358 100644 --- a/gnu/packages/search.scm +++ b/gnu/packages/search.scm @@ -46,14 +46,15 @@ (define-public xapian (package (name "xapian") - (version "1.4.5") + (version "1.4.6") ;; Note: When updating Xapian, remember to update xapian-bindings below. (source (origin (method url-fetch) (uri (string-append "https://oligarchy.co.uk/xapian/" version "/xapian-core-" version ".tar.xz")) + (patches (search-patches "xapian-revert-5489fb2f8.patch")) (sha256 - (base32 "0axhqrj202hbll9mcx1qdm8gsqj19216w3z02gyjbycxvr9gkdc5")))) + (base32 "166qpfq7pvyrj2w2x07v31ypvqg6c2xyvds5sms9h4g2sg0z23hy")))) (build-system gnu-build-system) (inputs `(("zlib" ,zlib) ("util-linux" ,util-linux))) @@ -91,7 +92,7 @@ rich set of boolean query operators.") "/xapian-bindings-" version ".tar.xz")) (sha256 (base32 - "0cwx39764w24xd25w271had4w78lnw1dgz36yvlw1g3i19rqcy34")))) + "0z5ma66n742241ys037i3k66c6lvsywviqf33vqsf4jb7j03qsbi")))) (build-system gnu-build-system) (arguments `(#:configure-flags '("--with-python3") diff --git a/gnu/packages/syncthing.scm b/gnu/packages/syncthing.scm index 14e83b5861..4c0bceedf6 100644 --- a/gnu/packages/syncthing.scm +++ b/gnu/packages/syncthing.scm @@ -24,6 +24,7 @@ #:use-module (guix download) #:use-module (guix git-download) #:use-module (guix licenses) + #:use-module (gnu packages) #:use-module (gnu packages golang)) (define-public syncthing @@ -35,6 +36,7 @@ (uri (string-append "https://github.com/syncthing/syncthing" "/releases/download/v" version "/syncthing-source-v" version ".tar.gz")) + (patches (search-patches "syncthing-fix-crash.patch")) (sha256 (base32 "0bxkm5jlj6l4gai23bg0y31brr80r9qllh1rdg29pahjn0c2b4ml")) diff --git a/gnu/packages/textutils.scm b/gnu/packages/textutils.scm index 5dec41428b..355683df8a 100644 --- a/gnu/packages/textutils.scm +++ b/gnu/packages/textutils.scm @@ -338,7 +338,7 @@ as existing hashing techniques, with provably negligible risk of collisions.") (define-public oniguruma (package (name "oniguruma") - (version "5.9.6") + (version "6.8.2") (source (origin (method url-fetch) (uri (string-append "https://github.com/kkos/" @@ -346,7 +346,7 @@ as existing hashing techniques, with provably negligible risk of collisions.") "/onig-" version ".tar.gz")) (sha256 (base32 - "19s79vsclqn170mw0ajwv7j37qsbn4f1yjz3yavnhvva6c820r6m")))) + "00s9gjgb3srn5sbmx4x9bssn52mi04d868ghizssdhjlddgxmsmd")))) (build-system gnu-build-system) (home-page "https://github.com/kkos/oniguruma") (synopsis "Regular expression library") @@ -355,6 +355,20 @@ characteristic of this library is that different character encoding for every regular expression object can be specified.") (license license:bsd-2))) +;; PHP < 7.3.0 requires this old version. Remove once no longer needed. +(define-public oniguruma-5 + (package + (inherit oniguruma) + (version "5.9.6") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/kkos/" + "oniguruma/releases/download/v" version + "/onig-" version ".tar.gz")) + (sha256 + (base32 + "19s79vsclqn170mw0ajwv7j37qsbn4f1yjz3yavnhvva6c820r6m")))))) + (define-public antiword (package (name "antiword") diff --git a/gnu/packages/upnp.scm b/gnu/packages/upnp.scm index 475e1750a8..24b17111e9 100644 --- a/gnu/packages/upnp.scm +++ b/gnu/packages/upnp.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2014 Sree Harsha Totakura <sreeharsha@totakura.in> ;;; Copyright © 2015 Federico Beffa <beffa@fbengineering.ch> ;;; Copyright © 2016, 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr> +;;; Copyright © 2018 Theodoros Foradis <theodoros@foradis.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -22,7 +23,9 @@ #:use-module (gnu packages) #:use-module (gnu packages python) #:use-module (guix build-system gnu) + #:use-module (guix utils) #:use-module (guix download) + #:use-module (guix git-download) #:use-module (guix licenses) #:use-module (guix packages)) @@ -76,6 +79,49 @@ over IRC, instant messaging, network games, and most server software.") (license (x11-style "file://LICENSE" "See 'LICENSE' file in the distribution")))) +(define-public monero-miniupnpc + ;; This package is the bundled version of miniupnpc used with monero. + ;; Monero-project has been maintaining its own version of the package since + ;; release 0.12.2.0. It includes security fixes not included in upstream + ;; releases. + (let ((revision "0") + (commit "6a63f9954959119568fbc4af57d7b491b9428d87")) + (package + (inherit miniupnpc) + (name "miniupnpc-monero") + (version (string-append "2.1-monero-0.12.3.0-" revision "." + (string-take commit 7))) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/monero-project/miniupnp/") + (commit commit))) + (sha256 + (base32 + "0s67zcz978iapjlq30yy9dl8qda9xhrl3jdi5f99cnbglh5gy16a")) + (file-name (string-append name "-" version "-checkout")) + (modules '((guix build utils))) + (snippet + '(begin + ;; Delete miniupnp subprojects except for miniupnpc. + (for-each + delete-file-recursively + '("minissdpd" "miniupnpc-async" "miniupnpc-libevent" + "miniupnpd" )) + #t)))) + (arguments + (substitute-keyword-arguments (package-arguments miniupnpc) + ((#:phases phases) + `(modify-phases ,phases + (add-before 'build 'change-directory + (lambda _ + (chdir "miniupnpc") + #t)) + (add-after 'change-directory 'chmod-header-file + (lambda _ + (chmod "miniupnpc.h" #o644) + #t))))))))) + (define-public libupnp (package (name "libupnp") diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm index 737844d8fa..1cc0d5dfde 100644 --- a/gnu/packages/video.scm +++ b/gnu/packages/video.scm @@ -2410,15 +2410,16 @@ of modern, widely supported codecs.") (define-public openh264 (package (name "openh264") - (version "1.7.0") + (version "1.8.0") (source (origin (method url-fetch) (uri (string-append "https://github.com/cisco/" - name "/archive/v" version ".tar.gz")) + name "/releases/download/v" + version "/Source.Code.tar.gz.gz")) (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "0gv571bqkxk7ic64dmavs1q8nr7p59mcf4ibqp4lc070gn6w61ww")))) + "0niha3wnn1jsndvz9vfwy2wyql8mp9j6v75vjsipy0idwan5yzgf")))) (build-system gnu-build-system) (native-inputs `(("nasm" ,nasm) diff --git a/gnu/packages/xdisorg.scm b/gnu/packages/xdisorg.scm index 2877ff2ac1..2a8958d37f 100644 --- a/gnu/packages/xdisorg.scm +++ b/gnu/packages/xdisorg.scm @@ -22,6 +22,7 @@ ;;; Copyright © 2017 Marek Benc <dusxmt@gmx.com> ;;; Copyright © 2017 Mike Gerwitz <mtg@gnu.org> ;;; Copyright © 2018 Thomas Sigurdsen <tonton@riseup.net> +;;; Copyright © 2018 Rutger Helling <rhelling@mykolab.com> ;;; Copyright © 2018 Pierre Neidhardt <ambrevar@gmail.com> ;;; ;;; This file is part of GNU Guix. @@ -316,7 +317,7 @@ rasterisation.") (define-public libdrm (package (name "libdrm") - (version "2.4.91") + (version "2.4.92") (source (origin (method url-fetch) @@ -326,7 +327,7 @@ rasterisation.") ".tar.bz2")) (sha256 (base32 - "0068dn47c478vm1lyyhy02gilrpsma0xmcblhvs0dzqyrk80wjk3")) + "1yirzx8hmlvv6r0l7lb3zxmgy5la2mri9al0k16xqfg19pdqzr79")) (patches (search-patches "libdrm-symbol-check.patch")))) (build-system gnu-build-system) (arguments diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm index 895db8ea13..3e8f9fe4a7 100644 --- a/gnu/packages/xorg.scm +++ b/gnu/packages/xorg.scm @@ -1026,7 +1026,7 @@ of new capabilities and controls for text keyboards.") (define-public libdmx (package (name "libdmx") - (version "1.1.3") + (version "1.1.4") (source (origin (method url-fetch) @@ -1036,7 +1036,7 @@ of new capabilities and controls for text keyboards.") ".tar.bz2")) (sha256 (base32 - "00djlxas38kbsrglcmwmxfbmxjdchlbj95pqwjvdg8jn5rns6zf9")))) + "0hvjfhrcym770cr0zpqajdy3cda30aiwbjzv16iafkqkbl090gr5")))) (build-system gnu-build-system) (inputs `(("xorgproto" ,xorgproto) @@ -2447,7 +2447,7 @@ including most mice, keyboards, tablets and touchscreens.") (define-public xf86-input-libinput (package (name "xf86-input-libinput") - (version "0.27.1") + (version "0.28.0") (source (origin (method url-fetch) (uri (string-append @@ -2455,7 +2455,7 @@ including most mice, keyboards, tablets and touchscreens.") name "-" version ".tar.bz2")) (sha256 (base32 - "1riflw6dc8fp5d74i7zfgsss0zz3z3lsj6zn2lzjm5kgmp2qvbfl")))) + "189h8vl0005yizwrs4d0sng6j8lwkd3xi1zwqg8qavn2bw34v691")))) (build-system gnu-build-system) (arguments '(#:configure-flags @@ -2961,7 +2961,7 @@ It supports a variety of Intel graphics chipsets.") (define-public xf86-video-mach64 (package (name "xf86-video-mach64") - (version "6.9.5") + (version "6.9.6") (source (origin (method url-fetch) @@ -2971,7 +2971,7 @@ It supports a variety of Intel graphics chipsets.") ".tar.bz2")) (sha256 (base32 - "07xlf5nsjm0x18ij5gyy4lf8hwpl10i8chi3skpqjh84drdri61y")) + "171wg8r6py1l138s58rlapin3rlpwsg9spmvhc7l68mm3g3hf1vs")) (patches (search-patches "xf86-video-mach64-glibc-2.20.patch")))) (build-system gnu-build-system) (inputs `(("mesa" ,mesa) @@ -3176,33 +3176,47 @@ This driver is intended for the spice qxl virtio device.") (home-page "http://www.spice-space.org") (license license:x11))) - (define-public xf86-video-r128 - (package - (name "xf86-video-r128") - (version "6.10.2") - (source - (origin - (method url-fetch) - (uri (string-append - "mirror://xorg/individual/driver/xf86-video-r128-" - version - ".tar.bz2")) - (sha256 - (base32 - "1pkpka5m4cd6iy0f8iqnmg6xci14nb6887ilvxzn3xrsgx8j3nl4")))) - (build-system gnu-build-system) - (inputs `(("mesa" ,mesa) - ("xorgproto" ,xorgproto) - ("xorg-server" ,xorg-server))) - (native-inputs `(("pkg-config" ,pkg-config))) - (home-page "https://www.x.org/wiki/") - (synopsis "ATI Rage 128 video driver for X server") - (description - "xf86-video-r128 is a video driver for the Xorg X server. + ;; We need a newer version than 6.10.2 to build against the latest xorg-server. + ;; Remove this binding and the bootstrap inputs when >6.10.2 is released. + (let ((commit "c4c878d2ccb75fa75afe46e0e50ee9975c5c57fc") + (revision "0")) + (package + (name "xf86-video-r128") + (version (git-version "6.10.2" revision commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url (string-append "https://anongit.freedesktop.org/git/xorg" + "/driver/" name ".git")) + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "01pff30zz4zxjhw28h8bn9x2kq7c6iswgn19b72wnfgl0arxb63j")))) + (build-system gnu-build-system) + (arguments + `(#:phases (modify-phases %standard-phases + (add-before 'bootstrap 'prevent-configure + (lambda _ + ;; Prevent autogen from calling "./configure" as part of + ;; the bootstrap step, which fails due to wrong shebang. + (setenv "NOCONFIGURE" "1") + #t))))) + (inputs `(("mesa" ,mesa) + ("xorgproto" ,xorgproto) + ("xorg-server" ,xorg-server))) + (native-inputs + `(("pkg-config" ,pkg-config) + ("autoconf" ,autoconf) + ("automake" ,automake) + ("libtool" ,libtool))) + (home-page "https://www.x.org/wiki/") + (synopsis "ATI Rage 128 video driver for X server") + (description + "xf86-video-r128 is a video driver for the Xorg X server. This driver is intended for ATI Rage 128 based cards.") - (license license:x11))) - + (license license:x11)))) (define-public xf86-video-savage (package @@ -3215,6 +3229,7 @@ This driver is intended for ATI Rage 128 based cards.") "mirror://xorg/individual/driver/xf86-video-savage-" version ".tar.bz2")) + (patches (search-patches "xf86-video-savage-xorg-compat.patch")) (sha256 (base32 "11pcrsdpdrwk0mrgv83s5nsx8a9i4lhmivnal3fjbrvi3zdw94rc")))) @@ -3267,6 +3282,7 @@ Xorg X server.") "mirror://xorg/individual/driver/xf86-video-sis-" version ".tar.bz2")) + (patches (search-patches "xf86-video-sis-xorg-compat.patch")) (sha256 (base32 "03f1abjjf68y8y1iz768rn95va9d33wmbwfbsqrgl6k0gi0bf9jj")))) @@ -3723,7 +3739,7 @@ alternative implementations like XRandR or TwinView.") (define xkbcomp-intermediate ; used as input for xkeyboard-config (package (name "xkbcomp-intermediate") - (version "1.4.1") + (version "1.4.2") (source (origin (method url-fetch) @@ -3733,7 +3749,7 @@ alternative implementations like XRandR or TwinView.") ".tar.bz2")) (sha256 (base32 - "0djp7bb0ch2ddwmc1bkg4fddxdvamiiz375x0r0ni5dcb37w93bl")))) + "0944rrkkf0dxp07vhh9yr4prslxhqyw63qmbjirbv1bypswvrn3d")))) (build-system gnu-build-system) (inputs `(("xorgproto" ,xorgproto) @@ -5072,7 +5088,7 @@ over Xlib, including: (define-public xorg-server (package (name "xorg-server") - (version "1.19.6") + (version "1.20.0") (source (origin (method url-fetch) @@ -5081,7 +5097,7 @@ over Xlib, including: name "-" version ".tar.bz2")) (sha256 (base32 - "15y13ihgkggmly5s07vzvpn35gzx1w0hrkbnlcvcy05h3lpm0cm7")) + "1rnka3sp8yg2bir0bjjhwn33jikj8qd8ckqcxrs94w05bwc7v5lx")) (patches (list ;; See: diff --git a/gnu/services/herd.scm b/gnu/services/herd.scm index d882c232cf..8c96b70731 100644 --- a/gnu/services/herd.scm +++ b/gnu/services/herd.scm @@ -45,6 +45,7 @@ live-service-requirement live-service-running + with-shepherd-action current-services unload-services unload-service @@ -168,6 +169,8 @@ return #f." (define-syntax-rule (with-shepherd-action service (action args ...) result body ...) + "Invoke ACTION on SERVICE with the given ARGS, and evaluate BODY with RESULT +bound to the action's result." (invoke-action service action (list args ...) (lambda (result) body ...))) diff --git a/gnu/services/mcron.scm b/gnu/services/mcron.scm index 5bee02a587..5757bf8cf6 100644 --- a/gnu/services/mcron.scm +++ b/gnu/services/mcron.scm @@ -60,29 +60,71 @@ (define (job-file job) (scheme-file "mcron-job" job)) +(define (shepherd-schedule-action mcron files) + "Return a Shepherd action that runs MCRON with '--schedule' for the given +files." + (shepherd-action + (name 'schedule) + (documentation + "Display jobs that are going to be scheduled.") + (procedure + #~(lambda* (_ #:optional (n "5")) + ;; XXX: This is a global side effect. + (setenv "GUILE_AUTO_COMPILE" "0") + + ;; Run 'mcron' in a pipe so we can explicitly redirect its output to + ;; 'current-output-port', which at this stage is bound to the client + ;; connection. + (let ((pipe (open-pipe* OPEN_READ + #$(file-append mcron "/bin/mcron") + (string-append "--schedule=" n) + #$@files))) + (let loop () + (match (read-line pipe 'concat) + ((? eof-object?) + (catch 'system-error + (lambda () + (zero? (close-pipe pipe))) + (lambda args + ;; There's with race between the SIGCHLD handler, which + ;; could call 'waitpid' before 'close-pipe' above does. If + ;; we get ECHILD, that means we lost the race, but that's + ;; fine. + (or (= ECHILD (system-error-errno args)) + (apply throw args))))) + (line + (display line) + (loop))))))))) + (define mcron-shepherd-services (match-lambda (($ <mcron-configuration> mcron ()) ;nothing to do! '()) (($ <mcron-configuration> mcron jobs) - (list (shepherd-service - (provision '(mcron)) - (requirement '(user-processes)) - (modules `((srfi srfi-1) - (srfi srfi-26) - ,@%default-modules)) - (start #~(make-forkexec-constructor - (list (string-append #$mcron "/bin/mcron") - #$@(map job-file jobs)) + (let ((files (map job-file jobs))) + (list (shepherd-service + (provision '(mcron)) + (requirement '(user-processes)) + (modules `((srfi srfi-1) + (srfi srfi-26) + (ice-9 popen) ;for the 'schedule' action + (ice-9 rdelim) + (ice-9 match) + ,@%default-modules)) + (start #~(make-forkexec-constructor + (list (string-append #$mcron "/bin/mcron") #$@files) + + ;; Disable auto-compilation of the job files and set a + ;; sane value for 'PATH'. + #:environment-variables + (cons* "GUILE_AUTO_COMPILE=0" + "PATH=/run/current-system/profile/bin" + (remove (cut string-prefix? "PATH=" <>) + (environ))))) + (stop #~(make-kill-destructor)) - ;; Disable auto-compilation of the job files and set a - ;; sane value for 'PATH'. - #:environment-variables - (cons* "GUILE_AUTO_COMPILE=0" - "PATH=/run/current-system/profile/bin" - (remove (cut string-prefix? "PATH=" <>) - (environ))))) - (stop #~(make-kill-destructor))))))) + (actions + (list (shepherd-schedule-action mcron files))))))))) (define mcron-service-type (service-type (name 'mcron) diff --git a/gnu/services/shepherd.scm b/gnu/services/shepherd.scm index 6ca53faa3d..4cd2249841 100644 --- a/gnu/services/shepherd.scm +++ b/gnu/services/shepherd.scm @@ -49,6 +49,12 @@ shepherd-service-auto-start? shepherd-service-modules + shepherd-action + shepherd-action? + shepherd-action-name + shepherd-action-documentation + shepherd-action-procedure + %default-modules shepherd-service-file @@ -146,11 +152,20 @@ DEFAULT is given, use it as the service's default value." (start shepherd-service-start) ;g-expression (procedure) (stop shepherd-service-stop ;g-expression (procedure) (default #~(const #f))) + (actions shepherd-service-actions ;list of <shepherd-action> + (default '())) (auto-start? shepherd-service-auto-start? ;Boolean (default #t)) (modules shepherd-service-modules ;list of module names (default %default-modules))) +(define-record-type* <shepherd-action> + shepherd-action make-shepherd-action + shepherd-action? + (name shepherd-action-name) ;symbol + (procedure shepherd-action-procedure) ;gexp + (documentation shepherd-action-documentation)) ;string + (define (shepherd-service-canonical-name service) "Return the 'canonical name' of SERVICE." (first (shepherd-service-provision service))) @@ -223,7 +238,13 @@ stored." #:requires '#$(shepherd-service-requirement service) #:respawn? '#$(shepherd-service-respawn? service) #:start #$(shepherd-service-start service) - #:stop #$(shepherd-service-stop service)))))) + #:stop #$(shepherd-service-stop service) + #:actions + (make-actions + #$@(map (match-lambda + (($ <shepherd-action> name proc doc) + #~(#$name #$doc #$proc))) + (shepherd-service-actions service)))))))) (define (shepherd-configuration-file services) "Return the shepherd configuration file for SERVICES." diff --git a/gnu/services/virtualization.scm b/gnu/services/virtualization.scm index bf71e7f26a..705ed84d06 100644 --- a/gnu/services/virtualization.scm +++ b/gnu/services/virtualization.scm @@ -37,6 +37,7 @@ #:export (libvirt-configuration libvirt-service-type + virtlog-configuration virtlog-service-type %qemu-platforms diff --git a/gnu/tests/base.scm b/gnu/tests/base.scm index 0efb4a6e55..f27064af85 100644 --- a/gnu/tests/base.scm +++ b/gnu/tests/base.scm @@ -632,6 +632,13 @@ non-ASCII names from /tmp.") (wait-for-file "/root/witness-touch" marionette #:read '(@ (ice-9 rdelim) read-string))) + ;; Make sure the 'schedule' action is accepted. + (test-equal "schedule action" + '(#t) ;one value, #t + (marionette-eval '(with-shepherd-action 'mcron ('schedule) result + result) + marionette)) + (test-end) (exit (= (test-runner-fail-count (test-runner-current)) 0))))) diff --git a/guix/build-system/meson.scm b/guix/build-system/meson.scm index 529a2b8b0f..e894e1472d 100644 --- a/guix/build-system/meson.scm +++ b/guix/build-system/meson.scm @@ -148,8 +148,7 @@ has a 'meson.build' file." #:search-paths ',(map search-path-specification->sexp search-paths) #:phases - (if (string-prefix? "arm" ,(or (%current-target-system) - (%current-system))) + (if (string-prefix? "arm" ,system) (modify-phases build-phases (delete 'fix-runpath)) build-phases) #:configure-flags ,configure-flags diff --git a/guix/build/ant-build-system.scm b/guix/build/ant-build-system.scm index d081a2b313..d79b4d503b 100644 --- a/guix/build/ant-build-system.scm +++ b/guix/build/ant-build-system.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net> +;;; Copyright © 2016, 2018 Ricardo Wurmus <rekado@elephly.net> ;;; ;;; This file is part of GNU Guix. ;;; @@ -68,14 +68,11 @@ (target (@ (name "manifest")) (mkdir (@ (dir "${manifest.dir}"))) - (echo (@ (file "${manifest.file}") - (message ,(string-append - (if main-class - (string-append - "Main-Class: " main-class - "${line.separator}") - "") - ""))))) + (manifest (@ (file "${manifest.file}")) + ,(if main-class + `(attribute (@ (name "Main-Class") + (value ,main-class))) + ""))) (target (@ (name "compile")) (mkdir (@ (dir "${classes.dir}"))) @@ -150,7 +147,8 @@ to the default GNU unpack strategy." (begin (mkdir "src") (with-directory-excursion "src" - (zero? (system* "jar" "-xf" source)))) + (invoke "jar" "-xf" source)) + #t) ;; Use GNU unpack strategy for things that aren't jar archives. ((assq-ref gnu:%standard-phases 'unpack) #:source source))) @@ -171,7 +169,7 @@ to the default GNU unpack strategy." (define* (build #:key (make-flags '()) (build-target "jar") #:allow-other-keys) - (zero? (apply system* `("ant" ,build-target ,@make-flags)))) + (apply invoke `("ant" ,build-target ,@make-flags))) (define* (generate-jar-indices #:key outputs #:allow-other-keys) "Generate file \"META-INF/INDEX.LIST\". This file does not use word wraps @@ -181,10 +179,11 @@ grafting works - and so that the garbage collector doesn't collect dependencies of this jar file." (define (generate-index jar) (invoke "jar" "-i" jar)) - (every (match-lambda - ((output . directory) - (every generate-index (find-files directory "\\.jar$")))) - outputs)) + (for-each (match-lambda + ((output . directory) + (for-each generate-index (find-files directory "\\.jar$")))) + outputs) + #t) (define* (strip-jar-timestamps #:key outputs #:allow-other-keys) @@ -194,50 +193,49 @@ repack them. This is necessary to ensure that archives are reproducible." (format #t "repacking ~a\n" jar) (let* ((dir (mkdtemp! "jar-contents.XXXXXX")) (manifest (string-append dir "/META-INF/MANIFEST.MF"))) - (and (with-directory-excursion dir - (zero? (system* "jar" "xf" jar))) - (delete-file jar) - ;; XXX: copied from (gnu build install) - (for-each (lambda (file) - (let ((s (lstat file))) - (unless (eq? (stat:type s) 'symlink) - (utime file 0 0 0 0)))) - (find-files dir #:directories? #t)) + (with-directory-excursion dir + (invoke "jar" "xf" jar)) + (delete-file jar) + ;; XXX: copied from (gnu build install) + (for-each (lambda (file) + (let ((s (lstat file))) + (unless (eq? (stat:type s) 'symlink) + (utime file 0 0 0 0)))) + (find-files dir #:directories? #t)) - ;; The jar tool will always set the timestamp on the manifest file - ;; and the containing directory to the current time, even when we - ;; reuse an existing manifest file. To avoid this we use "zip" - ;; instead of "jar". It is important that the manifest appears - ;; first. - (with-directory-excursion dir - (let* ((files (find-files "." ".*" #:directories? #t)) - ;; To ensure that the reference scanner can detect all - ;; store references in the jars we disable compression - ;; with the "-0" option. - (command (if (file-exists? manifest) - `("zip" "-0" "-X" ,jar ,manifest ,@files) - `("zip" "-0" "-X" ,jar ,@files)))) - (unless (zero? (apply system* command)) - (error "'zip' failed")))) - (utime jar 0 0) - #t))) + ;; The jar tool will always set the timestamp on the manifest file + ;; and the containing directory to the current time, even when we + ;; reuse an existing manifest file. To avoid this we use "zip" + ;; instead of "jar". It is important that the manifest appears + ;; first. + (with-directory-excursion dir + (let* ((files (find-files "." ".*" #:directories? #t)) + ;; To ensure that the reference scanner can detect all + ;; store references in the jars we disable compression + ;; with the "-0" option. + (command (if (file-exists? manifest) + `("zip" "-0" "-X" ,jar ,manifest ,@files) + `("zip" "-0" "-X" ,jar ,@files)))) + (apply invoke command))) + (utime jar 0 0) + #t)) - (every (match-lambda - ((output . directory) - (every repack-archive (find-files directory "\\.jar$")))) - outputs)) + (for-each (match-lambda + ((output . directory) + (for-each repack-archive (find-files directory "\\.jar$")))) + outputs) + #t) (define* (check #:key target (make-flags '()) (tests? (not target)) (test-target "check") #:allow-other-keys) (if tests? - (zero? (apply system* `("ant" ,test-target ,@make-flags))) - (begin - (format #t "test suite not run~%") - #t))) + (apply invoke `("ant" ,test-target ,@make-flags)) + (format #t "test suite not run~%")) + #t) (define* (install #:key (make-flags '()) #:allow-other-keys) - (zero? (apply system* `("ant" "install" ,@make-flags)))) + (apply invoke `("ant" "install" ,@make-flags))) (define %standard-phases (modify-phases gnu:%standard-phases diff --git a/guix/build/java-utils.scm b/guix/build/java-utils.scm index 402d377bf8..128be1edeb 100644 --- a/guix/build/java-utils.scm +++ b/guix/build/java-utils.scm @@ -31,7 +31,7 @@ (define* (ant-build-javadoc #:key (target "javadoc") (make-flags '()) #:allow-other-keys) - (zero? (apply system* `("ant" ,target ,@make-flags)))) + (apply invoke `("ant" ,target ,@make-flags))) (define* (install-jars jar-directory) "Install jar files from JAR-DIRECTORY to the default target directory. This diff --git a/guix/build/meson-build-system.scm b/guix/build/meson-build-system.scm index e7690a4c37..e4aae8212f 100644 --- a/guix/build/meson-build-system.scm +++ b/guix/build/meson-build-system.scm @@ -58,15 +58,14 @@ (mkdir build-dir) (chdir build-dir) - (zero? (apply system* "meson" args)))) + (apply invoke "meson" args))) (define* (build #:key parallel-build? #:allow-other-keys) "Build a given meson package." - (zero? (apply system* "ninja" - (if parallel-build? - `("-j" ,(number->string (parallel-job-count))) - '("-j" "1"))))) + (invoke "ninja" "-j" (if parallel-build? + (number->string (parallel-job-count)) + "1"))) (define* (check #:key test-target parallel-tests? tests? #:allow-other-keys) @@ -75,13 +74,13 @@ (number->string (parallel-job-count)) "1")) (if tests? - (zero? (system* "ninja" test-target)) + (invoke "ninja" test-target) (begin (format #t "test suite not run~%") #t))) (define* (install #:rest args) - (zero? (system* "ninja" "install"))) + (invoke "ninja" "install")) (define* (fix-runpath #:key (elf-directories '("lib" "lib64" "libexec" "bin" "sbin")) @@ -135,7 +134,7 @@ for example libraries only needed for the tests." (find-files dir elf-pred)) existing-elf-dirs)))) (for-each (lambda (elf-file) - (system* "patchelf" "--shrink-rpath" elf-file) + (invoke "patchelf" "--shrink-rpath" elf-file) (handle-file elf-file elf-list)) elf-list))))) (for-each handle-output outputs) diff --git a/guix/gexp.scm b/guix/gexp.scm index 153b29bd42..cc3613f6f6 100644 --- a/guix/gexp.scm +++ b/guix/gexp.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org> +;;; Copyright © 2018 Jan Nieuwenhuizen <janneke@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -23,6 +24,7 @@ #:use-module (guix derivations) #:use-module (guix grafts) #:use-module (guix utils) + #:use-module (rnrs bytevectors) #:use-module (srfi srfi-1) #:use-module (srfi srfi-9) #:use-module (srfi srfi-9 gnu) @@ -334,7 +336,7 @@ appears." (%plain-file name content references) plain-file? (name plain-file-name) ;string - (content plain-file-content) ;string + (content plain-file-content) ;string or bytevector (references plain-file-references)) ;list (currently unused) (define (plain-file name content) @@ -349,8 +351,10 @@ This is the declarative counterpart of 'text-file'." (define-gexp-compiler (plain-file-compiler (file <plain-file>) system target) ;; "Compile" FILE by adding it to the store. (match file - (($ <plain-file> name content references) - (text-file name content references)))) + (($ <plain-file> name (and (? string?) content) references) + (text-file name content references)) + (($ <plain-file> name (and (? bytevector?) content) references) + (binary-file name content references)))) (define-record-type <computed-file> (%computed-file name gexp guile options) diff --git a/guix/git.scm b/guix/git.scm index 9e89cc0062..193e2df111 100644 --- a/guix/git.scm +++ b/guix/git.scm @@ -114,7 +114,8 @@ OID (roughly the commit hash) corresponding to REF." #:key (ref '(branch . "origin/master")) (cache-directory - (%repository-cache-directory))) + (url-cache-directory + url (%repository-cache-directory)))) "Update the cached checkout of URL to REF in CACHE-DIRECTORY. Return two values: the cache directory name, and the SHA1 commit (a string) corresponding to REF. @@ -122,11 +123,10 @@ to REF. REF is pair whose key is [branch | commit | tag] and value the associated data, respectively [<branch name> | <sha1> | <tag name>]." (with-libgit2 - (let* ((cache-dir (url-cache-directory url cache-directory)) - (cache-exists? (openable-repository? cache-dir)) + (let* ((cache-exists? (openable-repository? cache-directory)) (repository (if cache-exists? - (repository-open cache-dir) - (clone* url cache-dir)))) + (repository-open cache-directory) + (clone* url cache-directory)))) ;; Only fetch remote if it has not been cloned just before. (when cache-exists? (remote-fetch (remote-lookup repository "origin"))) @@ -138,7 +138,7 @@ data, respectively [<branch name> | <sha1> | <tag name>]." 'repository-close!) (repository-close! repository)) - (values cache-dir (oid->string oid)))))) + (values cache-directory (oid->string oid)))))) (define* (latest-repository-commit store url #:key @@ -157,12 +157,14 @@ Git repositories are kept in the cache directory specified by (and (string=? (basename file) ".git") (eq? 'directory (stat:type stat)))) - (let*-values (((checkout commit) - (update-cached-checkout url - #:ref ref - #:cache-directory cache-directory)) - ((name) - (url+commit->name url commit))) + (let*-values + (((checkout commit) + (update-cached-checkout url + #:ref ref + #:cache-directory + (url-cache-directory url cache-directory))) + ((name) + (url+commit->name url commit))) (values (add-to-store store name #t "sha256" checkout #:select? (negate dot-git?)) commit))) diff --git a/guix/gnu-maintenance.scm b/guix/gnu-maintenance.scm index c2a7a33b6a..3634f4bb27 100644 --- a/guix/gnu-maintenance.scm +++ b/guix/gnu-maintenance.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2012, 2013 Nikita Karetnikov <nikita@karetnikov.org> ;;; ;;; This file is part of GNU Guix. @@ -82,13 +82,14 @@ (define %package-list-url (string->uri - (string-append %gnumaint-base-url "gnupackages.txt"))) + (string-append %gnumaint-base-url "rec/gnupackages.rec"))) (define %package-description-url ;; This file contains package descriptions in recutils format. - ;; See <https://lists.gnu.org/archive/html/guix-devel/2013-10/msg00071.html>. + ;; See <https://lists.gnu.org/archive/html/guix-devel/2013-10/msg00071.html> + ;; and <https://lists.gnu.org/archive/html/guix-devel/2018-06/msg00362.html>. (string->uri - (string-append %gnumaint-base-url "pkgblurbs.txt"))) + (string-append %gnumaint-base-url "rec/pkgblurbs.rec"))) (define-record-type* <gnu-package-descriptor> gnu-package-descriptor @@ -121,7 +122,12 @@ to fetch the list of GNU packages over HTTP." (if (null? alist) (reverse result) (loop (recutils->alist port) - (cons alist result))))) + + ;; Ignore things like "%rec" (info "(recutils) Record + ;; Descriptors"). + (if (assoc-ref alist "package") + (cons alist result) + result))))) (define official-description (let ((db (read-records (fetch %package-description-url #:text? #t)))) @@ -148,12 +154,12 @@ to fetch the list of GNU packages over HTTP." (alist->record `(("description" . ,(official-description name)) ,@alist) make-gnu-package-descriptor - (list "package" "mundane-name" "copyright-holder" + (list "package" "mundane_name" "copyright_holder" "savannah" "fsd" "language" "logo" - "doc-category" "doc-summary" "description" - "doc-url" - "download-url") - '("doc-url" "language")))) + "doc_category" "doc_summary" "description" + "doc_url" + "download_url") + '("doc_url" "language")))) (let* ((port (fetch %package-list-url #:text? #t)) (lst (read-records port))) (close-port port) diff --git a/guix/import/cabal.scm b/guix/import/cabal.scm index 09130e4498..4b2bfd4a25 100644 --- a/guix/import/cabal.scm +++ b/guix/import/cabal.scm @@ -139,8 +139,8 @@ to the stack." "Generate a parser for Cabal files." (lalr-parser ;; --- token definitions - (CCURLY VCCURLY OPAREN CPAREN TEST ID VERSION RELATION TRUE FALSE - (right: IF FLAG EXEC TEST-SUITE SOURCE-REPO BENCHMARK LIB OCURLY) + (CCURLY VCCURLY OPAREN CPAREN TEST ID VERSION RELATION TRUE FALSE -ANY -NONE + (right: IF FLAG EXEC TEST-SUITE CUSTOM-SETUP SOURCE-REPO BENCHMARK LIB OCURLY) (left: OR) (left: PROPERTY AND) (right: ELSE NOT)) @@ -150,6 +150,7 @@ to the stack." (sections source-repo) : (append $1 (list $2)) (sections executables) : (append $1 $2) (sections test-suites) : (append $1 $2) + (sections custom-setup) : (append $1 $2) (sections benchmarks) : (append $1 $2) (sections lib-sec) : (append $1 (list $2)) () : '()) @@ -172,6 +173,7 @@ to the stack." (ts-sec) : (list $1)) (ts-sec (TEST-SUITE OCURLY exprs CCURLY) : `(section test-suite ,$1 ,$3) (TEST-SUITE open exprs close) : `(section test-suite ,$1 ,$3)) + (custom-setup (CUSTOM-SETUP exprs) : (list `(section custom-setup ,$1 ,$2))) (benchmarks (benchmarks bm-sec) : (append $1 (list $2)) (bm-sec) : (list $1)) (bm-sec (BENCHMARK OCURLY exprs CCURLY) : `(section benchmark ,$1 ,$3) @@ -211,6 +213,10 @@ to the stack." (FALSE) : 'false (TEST OPAREN ID RELATION VERSION CPAREN) : `(,$1 ,(string-append $3 " " $4 " " $5)) + (TEST OPAREN ID -ANY CPAREN) + : `(,$1 ,(string-append $3 " -any")) + (TEST OPAREN ID -NONE CPAREN) + : `(,$1 ,(string-append $3 " -none")) (TEST OPAREN ID RELATION VERSION AND RELATION VERSION CPAREN) : `(and (,$1 ,(string-append $3 " " $4 " " $5)) (,$1 ,(string-append $3 " " $7 " " $8))) @@ -349,6 +355,9 @@ matching a string against the created regexp." (define is-test-suite (make-rx-matcher "^test-suite +([a-z0-9_-]+)" regexp/icase)) +(define is-custom-setup (make-rx-matcher "^(custom-setup)" + regexp/icase)) + (define is-benchmark (make-rx-matcher "^benchmark +([a-z0-9_-]+)" regexp/icase)) @@ -362,13 +371,17 @@ matching a string against the created regexp." (define (is-false s) (string-ci=? s "false")) +(define (is-any s) (string-ci=? s "-any")) + +(define (is-none s) (string-ci=? s "-none")) + (define (is-and s) (string=? s "&&")) (define (is-or s) (string=? s "||")) (define (is-id s port) (let ((cabal-reserved-words - '("if" "else" "library" "flag" "executable" "test-suite" + '("if" "else" "library" "flag" "executable" "test-suite" "custom-setup" "source-repository" "benchmark")) (spaces (read-while (cut char-set-contains? char-set:blank <>) port)) (c (peek-char port))) @@ -392,8 +405,11 @@ matching a string against the created regexp." (define (lex-version loc port) (make-lexical-token 'VERSION loc - (read-while char-numeric? port - (cut char=? #\. <>) char-numeric?))) + (read-while (lambda (x) + (or (char-numeric? x) + (char=? x #\*) + (char=? x #\.))) + port))) (define* (read-while is? port #:optional (is-if-followed-by? (lambda (c) #f)) @@ -435,6 +451,8 @@ string with the read characters." (define (lex-test-suite ts-rx-res loc) (lex-rx-res ts-rx-res 'TEST-SUITE loc)) +(define (lex-custom-setup ts-rx-res loc) (lex-rx-res ts-rx-res 'CUSTOM-SETUP loc)) + (define (lex-benchmark bm-rx-res loc) (lex-rx-res bm-rx-res 'BENCHMARK loc)) (define (lex-lib loc) (make-lexical-token 'LIB loc #f)) @@ -447,6 +465,10 @@ string with the read characters." (define (lex-false loc) (make-lexical-token 'FALSE loc #f)) +(define (lex-any loc) (make-lexical-token '-ANY loc #f)) + +(define (lex-none loc) (make-lexical-token '-NONE loc #f)) + (define (lex-and loc) (make-lexical-token 'AND loc #f)) (define (lex-or loc) (make-lexical-token 'OR loc #f)) @@ -514,6 +536,8 @@ LOC is the current port location." ((is-test w port) (lex-test w loc)) ((is-true w) (lex-true loc)) ((is-false w) (lex-false loc)) + ((is-any w) (lex-any loc)) + ((is-none w) (lex-none loc)) ((is-and w) (lex-and loc)) ((is-or w) (lex-or loc)) ((is-id w port) (lex-id w loc)) @@ -529,6 +553,7 @@ the current port location." ((is-src-repo s) => (cut lex-src-repo <> loc)) ((is-exec s) => (cut lex-exec <> loc)) ((is-test-suite s) => (cut lex-test-suite <> loc)) + ((is-custom-setup s) => (cut lex-custom-setup <> loc)) ((is-benchmark s) => (cut lex-benchmark <> loc)) ((is-lib s) (lex-lib loc)) ((is-else s) (lex-else loc)) @@ -658,6 +683,12 @@ If #f use the function 'port-filename' to obtain it." (name cabal-test-suite-name) (dependencies cabal-test-suite-dependencies)) ; list of <cabal-dependency> +(define-record-type <cabal-custom-setup> + (make-cabal-custom-setup name dependencies) + cabal-custom-setup? + (name cabal-custom-setup-name) + (dependencies cabal-custom-setup-dependencies)) ; list of <cabal-dependency> + (define (cabal-flags->alist flag-list) "Retrun an alist associating the flag name to its default value from a list of <cabal-flag> objects." @@ -694,13 +725,20 @@ the ordering operation and the version." (let* ((with-ver-matcher-fn (make-rx-matcher "([a-zA-Z0-9_-]+) *([<>=]+) *([0-9.]+) *")) (without-ver-matcher-fn (make-rx-matcher "([a-zA-Z0-9_-]+)")) + (without-ver-matcher-fn-2 (make-rx-matcher "([a-zA-Z0-9_-]+) (-any|-none)")) (name (or (and=> (with-ver-matcher-fn spec) (cut match:substring <> 1)) + (and=> (without-ver-matcher-fn-2 spec) + (cut match:substring <> 1)) (match:substring (without-ver-matcher-fn spec) 1))) - (operator (and=> (with-ver-matcher-fn spec) - (cut match:substring <> 2))) - (version (and=> (with-ver-matcher-fn spec) - (cut match:substring <> 3)))) + (operator (or (and=> (with-ver-matcher-fn spec) + (cut match:substring <> 2)) + (and=> (without-ver-matcher-fn-2 spec) + (cut match:substring <> 2)))) + (version (or (and=> (with-ver-matcher-fn spec) + (cut match:substring <> 3)) + (and=> (without-ver-matcher-fn-2 spec) + (cut match:substring <> 2))))) (values name operator version))) (define (impl haskell) @@ -716,6 +754,8 @@ the ordering operation and the version." ((string= spec-op ">") (version>? comp-ver spec-ver)) ((string= spec-op "<=") (not (version>? comp-ver spec-ver))) ((string= spec-op "<") (not (version>=? comp-ver spec-ver))) + ((string= spec-op "-any") #t) + ((string= spec-op "-none") #f) (else (raise (condition (&message (message "Failed to evaluate 'impl' test.")))))) @@ -728,7 +768,6 @@ the ordering operation and the version." (let ((value (or (assoc-ref env name) (assoc-ref (cabal-flags->alist (cabal-flags)) name)))) (if (eq? value 'false) #f #t))) - (define (eval sexp) (match sexp (() '()) @@ -755,6 +794,8 @@ the ordering operation and the version." ;; no need to evaluate flag parameters (('section 'flag name parameters) (list 'section 'flag name parameters)) + (('section 'custom-setup parameters) + (list 'section 'custom-setup parameters)) ;; library does not have a name parameter (('section 'library parameters) (list 'section 'library (eval parameters))) @@ -795,12 +836,15 @@ See the manual for limitations."))))))) (define (make-cabal-section sexp section-type) "Given an SEXP as produced by 'read-cabal', produce a list of objects pertaining to SECTION-TYPE sections. SECTION-TYPE must be one of: -'executable, 'flag, 'test-suite, 'source-repository or 'library." +'executable, 'flag, 'test-suite, 'custom-setup, 'source-repository or +'library." (filter-map (cut match <> (('section (? (cut equal? <> section-type)) name parameters) (case section-type ((test-suite) (make-cabal-test-suite name (dependencies parameters))) + ((custom-setup) (make-cabal-custom-setup + name (dependencies parameters "setup-depends"))) ((executable) (make-cabal-executable name (dependencies parameters))) ((source-repository) (make-cabal-source-repository @@ -843,10 +887,10 @@ to be added between the values found in different key/value pairs." (define dependency-name-version-rx (make-regexp "([a-zA-Z0-9_-]+) *(.*)")) -(define (dependencies key-values-list) +(define* (dependencies key-values-list #:optional (key "build-depends")) "Return a list of 'cabal-dependency' objects for the dependencies found in KEY-VALUES-LIST." - (let ((deps (string-tokenize (lookup-join key-values-list "build-depends" ",") + (let ((deps (string-tokenize (lookup-join key-values-list key ",") (char-set-complement (char-set #\,))))) (map (lambda (d) (let ((rx-result (regexp-exec dependency-name-version-rx d))) diff --git a/guix/inferior.scm b/guix/inferior.scm new file mode 100644 index 0000000000..629c2c4313 --- /dev/null +++ b/guix/inferior.scm @@ -0,0 +1,197 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2018 Ludovic Courtès <ludo@gnu.org> +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +(define-module (guix inferior) + #:use-module (srfi srfi-9) + #:use-module (srfi srfi-9 gnu) + #:use-module (ice-9 match) + #:use-module (ice-9 popen) + #:export (inferior? + open-inferior + close-inferior + inferior-eval + inferior-object? + + inferior-package? + inferior-package-name + inferior-package-version + + inferior-packages + inferior-package-synopsis + inferior-package-description)) + +;;; Commentary: +;;; +;;; This module provides a way to spawn Guix "inferior" processes and to talk +;;; to them. It allows us, from one instance of Guix, to interact with +;;; another instance of Guix coming from a different commit. +;;; +;;; Code: + +;; Inferior Guix process. +(define-record-type <inferior> + (inferior pid socket version) + inferior? + (pid inferior-pid) + (socket inferior-socket) + (version inferior-version)) ;REPL protocol version + +(define (inferior-pipe directory command) + "Return an input/output pipe on the Guix instance in DIRECTORY. This runs +'DIRECTORY/COMMAND repl' if it exists, or falls back to some other method if +it's an old Guix." + (let ((pipe (with-error-to-port (%make-void-port "w") + (lambda () + (open-pipe* OPEN_BOTH + (string-append directory "/" command) + "repl" "-t" "machine"))))) + (if (eof-object? (peek-char pipe)) + (begin + (close-pipe pipe) + + ;; Older versions of Guix didn't have a 'guix repl' command, so + ;; emulate it. + (open-pipe* OPEN_BOTH "guile" + "-L" (string-append directory "/share/guile/site/" + (effective-version)) + "-C" (string-append directory "/share/guile/site/" + (effective-version)) + "-C" (string-append directory "/lib/guile/" + (effective-version) "/site-ccache") + "-c" + (object->string + `(begin + (primitive-load ,(search-path %load-path + "guix/scripts/repl.scm")) + ((@ (guix scripts repl) machine-repl)))))) + pipe))) + +(define* (open-inferior directory #:key (command "bin/guix")) + "Open the inferior Guix in DIRECTORY, running 'DIRECTORY/COMMAND repl' or +equivalent. Return #f if the inferior could not be launched." + (define pipe + (inferior-pipe directory command)) + + (setvbuf pipe _IOLBF) + (match (read pipe) + (('repl-version 0 rest ...) + (let ((result (inferior 'pipe pipe (cons 0 rest)))) + (inferior-eval '(use-modules (guix)) result) + (inferior-eval '(use-modules (gnu)) result) + (inferior-eval '(define %package-table (make-hash-table)) + result) + result)) + (_ + #f))) + +(define (close-inferior inferior) + "Close INFERIOR." + (close-pipe (inferior-socket inferior))) + +;; Non-self-quoting object of the inferior. +(define-record-type <inferior-object> + (inferior-object address appearance) + inferior-object? + (address inferior-object-address) + (appearance inferior-object-appearance)) + +(define (write-inferior-object object port) + (match object + (($ <inferior-object> _ appearance) + (format port "#<inferior-object ~a>" appearance)))) + +(set-record-type-printer! <inferior-object> write-inferior-object) + +(define (inferior-eval exp inferior) + "Evaluate EXP in INFERIOR." + (define sexp->object + (match-lambda + (('value value) + value) + (('non-self-quoting address string) + (inferior-object address string)))) + + (write exp (inferior-socket inferior)) + (newline (inferior-socket inferior)) + (match (read (inferior-socket inferior)) + (('values objects ...) + (apply values (map sexp->object objects))) + (('exception key objects ...) + (apply throw key (map sexp->object objects))))) + + +;;; +;;; Inferior packages. +;;; + +(define-record-type <inferior-package> + (inferior-package inferior name version id) + inferior-package? + (inferior inferior-package-inferior) + (name inferior-package-name) + (version inferior-package-version) + (id inferior-package-id)) + +(define (write-inferior-package package port) + (match package + (($ <inferior-package> _ name version) + (format port "#<inferior-package ~a@~a ~a>" + name version + (number->string (object-address package) 16))))) + +(set-record-type-printer! <inferior-package> write-inferior-package) + +(define (inferior-packages inferior) + "Return the list of packages known to INFERIOR." + (let ((result (inferior-eval + '(fold-packages (lambda (package result) + (let ((id (object-address package))) + (hashv-set! %package-table id package) + (cons (list (package-name package) + (package-version package) + id) + result))) + '()) + inferior))) + (map (match-lambda + ((name version id) + (inferior-package inferior name version id))) + result))) + +(define (inferior-package-field package getter) + "Return the field of PACKAGE, an inferior package, accessed with GETTER." + (let ((inferior (inferior-package-inferior package)) + (id (inferior-package-id package))) + (inferior-eval `(,getter (hashv-ref %package-table ,id)) + inferior))) + +(define* (inferior-package-synopsis package #:key (translate? #t)) + "Return the Texinfo synopsis of PACKAGE, an inferior package. When +TRANSLATE? is true, translate it to the current locale's language." + (inferior-package-field package + (if translate? + '(compose (@ (guix ui) P_) package-synopsis) + 'package-synopsis))) + +(define* (inferior-package-description package #:key (translate? #t)) + "Return the Texinfo description of PACKAGE, an inferior package. When +TRANSLATE? is true, translate it to the current locale's language." + (inferior-package-field package + (if translate? + '(compose (@ (guix ui) P_) package-description) + 'package-description))) diff --git a/guix/profiles.scm b/guix/profiles.scm index d2a794b187..f34f4fcff6 100644 --- a/guix/profiles.scm +++ b/guix/profiles.scm @@ -1521,7 +1521,7 @@ the generation that was current before switching." (profile profile) (generation number))))) (else - (switch-symlinks profile generation) + (switch-symlinks profile (basename generation)) current)))) (define (switch-to-previous-generation profile) diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm index 29829f52c8..b38a55d01c 100644 --- a/guix/scripts/package.scm +++ b/guix/scripts/package.scm @@ -190,7 +190,7 @@ do not treat collisions in MANIFEST as an error." (let* ((entries (manifest-entries manifest)) (count (length entries))) (switch-symlinks name prof) - (switch-symlinks profile name) + (switch-symlinks profile (basename name)) (unless (string=? profile %current-profile) (register-gc-root store name)) (format #t (N_ "~a package in profile~%" diff --git a/guix/scripts/pull.scm b/guix/scripts/pull.scm index 7202e3cc16..433502b5de 100644 --- a/guix/scripts/pull.scm +++ b/guix/scripts/pull.scm @@ -28,9 +28,12 @@ #:use-module (guix profiles) #:use-module (guix gexp) #:use-module (guix grafts) + #:use-module (guix memoization) #:use-module (guix monads) + #:autoload (guix inferior) (open-inferior) #:use-module (guix scripts build) #:autoload (guix self) (whole-package) + #:use-module (gnu packages) #:autoload (gnu packages ssh) (guile-ssh) #:autoload (gnu packages tls) (gnutls) #:use-module ((guix scripts package) #:select (build-and-use-profile)) @@ -45,9 +48,11 @@ #:use-module ((gnu packages certs) #:select (le-certs)) #:use-module (srfi srfi-1) #:use-module (srfi srfi-11) + #:use-module (srfi srfi-26) #:use-module (srfi srfi-35) #:use-module (srfi srfi-37) #:use-module (ice-9 match) + #:use-module (ice-9 vlist) #:export (guix-pull)) (module-autoload! (resolve-module '(guix scripts pull)) @@ -230,12 +235,32 @@ URL, BRANCH, and COMMIT as a property in the manifest entry." (branch ,branch) (commit ,commit)))))))))) +(define (display-profile-news profile) + "Display what's up in PROFILE--new packages, and all that." + (match (memv (generation-number profile) + (reverse (profile-generations profile))) + ((current previous _ ...) + (newline) + (let ((old (fold-packages (lambda (package result) + (alist-cons (package-name package) + (package-version package) + result)) + '())) + (new (profile-package-alist + (generation-file-name profile current)))) + (display-new/upgraded-packages old new + #:heading (G_ "New in this revision:\n")))) + (_ #t))) + (define* (build-and-install source config-dir #:key verbose? url branch commit) "Build the tool from SOURCE, and install it in CONFIG-DIR." (define update-profile (store-lift build-and-use-profile)) + (define profile + (string-append config-dir "/current")) + (mlet* %store-monad ((drv (build-from-source source #:commit commit #:verbose? verbose?)) @@ -243,8 +268,9 @@ URL, BRANCH, and COMMIT as a property in the manifest entry." #:url url #:branch branch #:commit commit))) - (update-profile (string-append config-dir "/current") - (manifest (list entry))))) + (mbegin %store-monad + (update-profile profile (manifest (list entry))) + (return (display-profile-news profile))))) (define (honor-lets-encrypt-certificates! store) "Tell Guile-Git to use the Let's Encrypt certificates." @@ -289,6 +315,7 @@ certificates~%")) (define (display-profile-content profile number) "Display the packages in PROFILE, generation NUMBER, in a human-readable way and displaying details about the channel's source code." + (display-generation profile number) (for-each (lambda (entry) (format #t " ~a ~a~%" (manifest-entry-name entry) @@ -310,6 +337,90 @@ way and displaying details about the channel's source code." (manifest-entries (profile-manifest (generation-file-name profile number)))))) +(define (indented-string str indent) + "Return STR with each newline preceded by IDENT spaces." + (define indent-string + (make-list indent #\space)) + + (list->string + (string-fold-right (lambda (chr result) + (if (eqv? chr #\newline) + (cons chr (append indent-string result)) + (cons chr result))) + '() + str))) + +(define profile-package-alist + (mlambda (profile) + "Return a name/version alist representing the packages in PROFILE." + (fold (lambda (package lst) + (alist-cons (inferior-package-name package) + (inferior-package-version package) + lst)) + '() + (let* ((inferior (open-inferior profile)) + (packages (inferior-packages inferior))) + (close-inferior inferior) + packages)))) + +(define* (display-new/upgraded-packages alist1 alist2 + #:key (heading "")) + "Given the two package name/version alists ALIST1 and ALIST2, display the +list of new and upgraded packages going from ALIST1 to ALIST2. When ALIST1 +and ALIST2 differ, display HEADING upfront." + (let* ((old (fold (match-lambda* + (((name . version) table) + (vhash-cons name version table))) + vlist-null + alist1)) + (new (remove (match-lambda + ((name . _) + (vhash-assoc name old))) + alist2)) + (upgraded (filter-map (match-lambda + ((name . new-version) + (match (vhash-fold* cons '() name old) + (() #f) + ((= (cut sort <> version>?) old-versions) + (and (version>? new-version + (first old-versions)) + (string-append name "@" + new-version)))))) + alist2))) + (unless (and (null? new) (null? upgraded)) + (display heading)) + + (match (length new) + (0 #t) + (count + (format #t (N_ " ~h new package: ~a~%" + " ~h new packages: ~a~%" count) + count + (indented-string + (fill-paragraph (string-join (sort (map first new) string<?) + ", ") + (- (%text-width) 4) 30) + 4)))) + (match (length upgraded) + (0 #t) + (count + (format #t (N_ " ~h package upgraded: ~a~%" + " ~h packages upgraded: ~a~%" count) + count + (indented-string + (fill-paragraph (string-join (sort upgraded string<?) ", ") + (- (%text-width) 4) 35) + 4)))))) + +(define (display-profile-content-diff profile gen1 gen2) + "Display the changes in PROFILE GEN2 compared to generation GEN1." + (define (package-alist generation) + (profile-package-alist (generation-file-name profile generation))) + + (display-profile-content profile gen2) + (display-new/upgraded-packages (package-alist gen1) + (package-alist gen2))) + (define (process-query opts) "Process any query specified by OPTS." (define profile @@ -317,29 +428,32 @@ way and displaying details about the channel's source code." (match (assoc-ref opts 'query) (('list-generations pattern) - (define (list-generation display-function number) - (unless (zero? number) - (display-generation profile number) - (display-function profile number) - (newline))) + (define (list-generations profile numbers) + (match numbers + ((first rest ...) + (display-profile-content profile first) + (let loop ((numbers numbers)) + (match numbers + ((first second rest ...) + (display-profile-content-diff profile + first second) + (loop (cons second rest))) + ((_) #t) + (() #t)))))) (leave-on-EPIPE (cond ((not (file-exists? profile)) ; XXX: race condition (raise (condition (&profile-not-found-error (profile profile))))) ((string-null? pattern) - (for-each (lambda (generation) - (list-generation display-profile-content generation)) - (profile-generations profile))) + (list-generations profile (profile-generations profile))) ((matching-generations pattern profile) => (match-lambda (() (exit 1)) ((numbers ...) - (for-each (lambda (generation) - (list-generation display-profile-content generation)) - numbers))))))))) + (list-generations profile numbers))))))))) (define (guix-pull . args) diff --git a/guix/scripts/repl.scm b/guix/scripts/repl.scm new file mode 100644 index 0000000000..b157833a49 --- /dev/null +++ b/guix/scripts/repl.scm @@ -0,0 +1,199 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2018 Ludovic Courtès <ludo@gnu.org> +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +(define-module (guix scripts repl) + #:use-module (guix ui) + #:use-module (guix scripts) + #:use-module (guix utils) + #:use-module (guix packages) + #:use-module (gnu packages) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-37) + #:use-module (ice-9 match) + #:use-module (rnrs bytevectors) + #:autoload (system repl repl) (start-repl) + #:autoload (system repl server) + (make-tcp-server-socket make-unix-domain-server-socket) + #:export (machine-repl + guix-repl)) + +;;; Commentary: +;;; +;;; This command provides a Guile REPL + +(define %default-options + `((type . guile))) + +(define %options + (list (option '(#\h "help") #f #f + (lambda args + (show-help) + (exit 0))) + (option '(#\V "version") #f #f + (lambda args + (show-version-and-exit "guix repl"))) + (option '(#\t "type") #t #f + (lambda (opt name arg result) + (alist-cons 'type (string->symbol arg) result))) + (option '("listen") #t #f + (lambda (opt name arg result) + (alist-cons 'listen arg result))))) + + +(define (show-help) + (display (G_ "Usage: guix repl [OPTIONS...] +Start a Guile REPL in the Guix execution environment.\n")) + (display (G_ " + -t, --type=TYPE start a REPL of the given TYPE")) + (newline) + (display (G_ " + -h, --help display this help and exit")) + (display (G_ " + -V, --version display version information and exit")) + (newline) + (show-bug-report-information)) + +(define (self-quoting? x) + "Return #t if X is self-quoting." + (letrec-syntax ((one-of (syntax-rules () + ((_) #f) + ((_ pred rest ...) + (or (pred x) + (one-of rest ...)))))) + (one-of symbol? string? pair? null? vector? + bytevector? number? boolean?))) + +(define user-module + ;; Module where we execute user code. + (let ((module (resolve-module '(guix-user) #f #f #:ensure #t))) + (beautify-user-module! module) + module)) + +(define* (machine-repl #:optional + (input (current-input-port)) + (output (current-output-port))) + "Run a machine-usable REPL over ports INPUT and OUTPUT. + +The protocol of this REPL is meant to be machine-readable and provides proper +support to represent multiple-value returns, exceptions, objects that lack a +read syntax, and so on. As such it is more convenient and robust than parsing +Guile's REPL prompt." + (define (value->sexp value) + (if (self-quoting? value) + `(value ,value) + `(non-self-quoting ,(object-address value) + ,(object->string value)))) + + (write `(repl-version 0 0) output) + (newline output) + (force-output output) + + (let loop () + (match (read input) + ((? eof-object?) #t) + (exp + (catch #t + (lambda () + (let ((results (call-with-values + (lambda () + + (primitive-eval exp)) + list))) + (write `(values ,@(map value->sexp results)) + output) + (newline output) + (force-output output))) + (lambda (key . args) + (write `(exception ,key ,@(map value->sexp args))) + (newline output) + (force-output output))) + (loop))))) + +(define (call-with-connection spec thunk) + "Dynamically-bind the current input and output ports according to SPEC and +call THUNK." + (if (not spec) + (thunk) + + ;; Note: the "PROTO:" prefix in SPEC is here so that we can eventually + ;; parse things like "fd:123" in a non-ambiguous way. + (match (string-index spec #\:) + (#f + (leave (G_ "~A: invalid listen specification~%") spec)) + (index + (let ((protocol (string-take spec index)) + (address (string-drop spec (+ index 1)))) + (define socket + (match protocol + ("tcp" + (make-tcp-server-socket #:port (string->number address))) + ("unix" + (make-unix-domain-server-socket #:path address)) + (_ + (leave (G_ "~A: unsupported protocol family~%") + protocol)))) + + (listen socket 10) + (let loop () + (match (accept socket) + ((connection . address) + (if (= AF_UNIX (sockaddr:fam address)) + (info (G_ "accepted connection~%")) + (info (G_ "accepted connection from ~a~%") + (inet-ntop (sockaddr:fam address) + (sockaddr:addr address)))) + (dynamic-wind + (const #t) + (lambda () + (parameterize ((current-input-port connection) + (current-output-port connection)) + (thunk))) + (lambda () + (false-if-exception (close-port connection)) + (info (G_ "connection closed~%")))))) + (loop))))))) + + +(define (guix-repl . args) + (define opts + ;; Return the list of package names. + (args-fold* args %options + (lambda (opt name arg result) + (leave (G_ "~A: unrecognized option~%") name)) + (lambda (arg result) + (leave (G_ "~A: extraneous argument~%") arg)) + %default-options)) + + (with-error-handling + (let ((type (assoc-ref opts 'type))) + (call-with-connection (assoc-ref opts 'listen) + (lambda () + (case type + ((guile) + (save-module-excursion + (lambda () + (set-current-module user-module) + (start-repl)))) + ((machine) + (machine-repl)) + (else + (leave (G_ "~a: unknown type of REPL~%") type)))))))) + +;; Local Variables: +;; eval: (put 'call-with-connection 'scheme-indent-function 1) +;; End: diff --git a/guix/store.scm b/guix/store.scm index bac42f2738..cc5c24a77d 100644 --- a/guix/store.scm +++ b/guix/store.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2018 Jan Nieuwenhuizen <janneke@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -77,6 +78,7 @@ add-data-to-store add-text-to-store add-to-store + binary-file build-things build query-failed-paths @@ -1362,7 +1364,18 @@ taking the store as its first argument." ;; Store monad operators. ;; -(define* (text-file name text +(define* (binary-file name + data ;bytevector + #:optional (references '())) + "Return as a monadic value the absolute file name in the store of the file +containing DATA, a bytevector. REFERENCES is a list of store items that the +resulting text file refers to; it defaults to the empty list." + (lambda (store) + (values (add-data-to-store store name data references) + store))) + +(define* (text-file name + text ;string #:optional (references '())) "Return as a monadic value the absolute file name in the store of the file containing TEXT, a string. REFERENCES is a list of store items that the diff --git a/guix/utils.scm b/guix/utils.scm index f934b6ed13..200bb69e03 100644 --- a/guix/utils.scm +++ b/guix/utils.scm @@ -33,10 +33,11 @@ #:use-module (srfi srfi-35) #:use-module (srfi srfi-39) #:use-module (ice-9 binary-ports) + #:use-module (ice-9 ftw) #:autoload (rnrs io ports) (make-custom-binary-input-port) #:use-module ((rnrs bytevectors) #:select (bytevector-u8-set!)) #:use-module (guix memoization) - #:use-module ((guix build utils) #:select (dump-port mkdir-p)) + #:use-module ((guix build utils) #:select (dump-port mkdir-p delete-file-recursively)) #:use-module ((guix build syscalls) #:select (mkdtemp! fdatasync)) #:use-module (ice-9 format) #:autoload (ice-9 popen) (open-pipe*) @@ -631,7 +632,7 @@ delete it when leaving the dynamic extent of this call." (lambda () (proc tmp-dir)) (lambda () - (false-if-exception (rmdir tmp-dir)))))) + (false-if-exception (delete-file-recursively tmp-dir)))))) (define (with-atomic-file-output file proc) "Call PROC with an output port for the file that is going to replace FILE. diff --git a/tests/gexp.scm b/tests/gexp.scm index 83fe811546..391a0f8be5 100644 --- a/tests/gexp.scm +++ b/tests/gexp.scm @@ -948,7 +948,7 @@ (return (and (zero? (close-pipe pipe)) (= (expt n 2) (string->number str))))))) -(test-assertm "gexp->script #:module-path" +(test-assert "gexp->script #:module-path" (call-with-temporary-directory (lambda (directory) (define str @@ -961,23 +961,24 @@ (define-public %fake! ,str)) port))) - (mlet* %store-monad ((exp -> (with-imported-modules '((guix base32)) - (gexp (begin - (use-modules (guix base32)) - (write (list %load-path - %fake!)))))) - (drv (gexp->script "guile-thing" exp - #:guile %bootstrap-guile - #:module-path (list directory))) - (out -> (derivation->output-path drv)) - (done (built-derivations (list drv)))) - (let* ((pipe (open-input-pipe out)) - (data (read pipe))) - (return (and (zero? (close-pipe pipe)) - (match data - ((load-path str*) - (and (string=? str* str) - (not (member directory load-path)))))))))))) + (run-with-store %store + (mlet* %store-monad ((exp -> (with-imported-modules '((guix base32)) + (gexp (begin + (use-modules (guix base32)) + (write (list %load-path + %fake!)))))) + (drv (gexp->script "guile-thing" exp + #:guile %bootstrap-guile + #:module-path (list directory))) + (out -> (derivation->output-path drv)) + (done (built-derivations (list drv)))) + (let* ((pipe (open-input-pipe out)) + (data (read pipe))) + (return (and (zero? (close-pipe pipe)) + (match data + ((load-path str*) + (and (string=? str* str) + (not (member directory load-path))))))))))))) (test-assertm "program-file" (let* ((n (random (expt 2 50))) @@ -996,7 +997,7 @@ (return (and (zero? (close-pipe pipe)) (= n (string->number str))))))))) -(test-assertm "program-file #:module-path" +(test-assert "program-file #:module-path" (call-with-temporary-directory (lambda (directory) (define text (random-text)) @@ -1014,14 +1015,15 @@ (file (program-file "program" exp #:guile %bootstrap-guile #:module-path (list directory)))) - (mlet* %store-monad ((drv (lower-object file)) - (out -> (derivation->output-path drv))) - (mbegin %store-monad - (built-derivations (list drv)) - (let* ((pipe (open-input-pipe out)) - (str (get-string-all pipe))) - (return (and (zero? (close-pipe pipe)) - (string=? text str)))))))))) + (run-with-store %store + (mlet* %store-monad ((drv (lower-object file)) + (out -> (derivation->output-path drv))) + (mbegin %store-monad + (built-derivations (list drv)) + (let* ((pipe (open-input-pipe out)) + (str (get-string-all pipe))) + (return (and (zero? (close-pipe pipe)) + (string=? text str))))))))))) (test-assertm "program-file & with-extensions" (let* ((exp (with-extensions (list %extension-package) diff --git a/tests/guix-package.sh b/tests/guix-package.sh index 3b3fa35cd8..cef3b3452e 100644 --- a/tests/guix-package.sh +++ b/tests/guix-package.sh @@ -185,6 +185,16 @@ grep -E 'emacs[[:blank:]]+42\.5\.9rc7[[:blank:]]+.*-emacs-42.5.9rc7' \ rm "$emacs_tarball" "$tmpfile" rmdir "$module_dir" +# Profiles with a relative file name. Make sure we don't create dangling +# symlinks--see bug report at +# <https://lists.gnu.org/archive/html/guix-devel/2018-07/msg00036.html>. +mkdir -p "$module_dir/foo" +( cd "$module_dir" ; \ + guix package --bootstrap -i guile-bootstrap -p foo/prof ) +test -f "$module_dir/foo/prof/bin/guile" +rm "$module_dir/foo"/* +rmdir "$module_dir/foo" +rmdir "$module_dir" # # Try with the default profile. @@ -215,7 +225,7 @@ do guix package --bootstrap --roll-back ! test -f "$HOME/.guix-profile/bin" ! test -f "$HOME/.guix-profile/lib" - test "`readlink "$default_profile"`" = "$default_profile-0-link" + test "`readlink "$default_profile"`" = "`basename $default_profile-0-link`" done # Check whether '-p ~/.guix-profile' makes any difference. diff --git a/tests/hackage.scm b/tests/hackage.scm index a4de8be91e..e17851a213 100644 --- a/tests/hackage.scm +++ b/tests/hackage.scm @@ -69,6 +69,65 @@ library mtl >= 2.0 && < 3 ") +;; Check "-any", "-none" when name is different. +(define test-cabal-4 + "name: foo +version: 1.0.0 +homepage: http://test.org +synopsis: synopsis +description: description +license: BSD3 +library + if impl(ghcjs -any) + Build-depends: ghc-a + if impl(ghc>=7.2&&<7.6) + Build-depends: ghc-b + if impl(ghc == 7.8) + Build-depends: + HTTP >= 4000.2.5 && < 4000.3, + mtl >= 2.0 && < 3 +") + +;; Check "-any", "-none". +(define test-cabal-5 + "name: foo +version: 1.0.0 +homepage: http://test.org +synopsis: synopsis +description: description +license: BSD3 +library + if impl(ghc == 7.8) + Build-depends: + HTTP >= 4000.2.5 && < 4000.3, + if impl(ghc -any) + Build-depends: mtl >= 2.0 && < 3 + if impl(ghc>=7.2&&<7.6) + Build-depends: ghc-b +") + +;; Check "custom-setup". +(define test-cabal-6 + "name: foo +build-type: Custom +version: 1.0.0 +homepage: http://test.org +synopsis: synopsis +description: description +license: BSD3 +custom-setup + setup-depends: base >= 4.7 && < 5, + Cabal >= 1.24, + haskell-gi == 0.21.* +library + if impl(ghc>=7.2&&<7.6) + Build-depends: ghc-b + if impl(ghc == 7.8) + Build-depends: + HTTP >= 4000.2.5 && < 4000.3, + mtl >= 2.0 && < 3 +") + ;; A fragment of a real Cabal file with minor modification to check precedence ;; of 'and' over 'or', missing final newline, spaces between keywords and ;; parentheses and between key and column. @@ -139,6 +198,18 @@ library (eval-test-with-cabal test-cabal-3 #:cabal-environment '(("impl" . "ghc-7.8")))) +(test-assert "hackage->guix-package test 4" + (eval-test-with-cabal test-cabal-4 + #:cabal-environment '(("impl" . "ghc-7.8")))) + +(test-assert "hackage->guix-package test 5" + (eval-test-with-cabal test-cabal-5 + #:cabal-environment '(("impl" . "ghc-7.8")))) + +(test-assert "hackage->guix-package test 6" + (eval-test-with-cabal test-cabal-6 + #:cabal-environment '(("impl" . "ghc-7.8")))) + (test-assert "read-cabal test 1" (match (call-with-input-string test-read-cabal-1 read-cabal) ((("name" ("test-me")) diff --git a/tests/inferior.scm b/tests/inferior.scm new file mode 100644 index 0000000000..5e0f8ae66e --- /dev/null +++ b/tests/inferior.scm @@ -0,0 +1,69 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2018 Ludovic Courtès <ludo@gnu.org> +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +(define-module (test-inferior) + #:use-module (guix inferior) + #:use-module (guix packages) + #:use-module (gnu packages) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-64)) + +(define %top-srcdir + (dirname (search-path %load-path "guix.scm"))) + +(define %top-builddir + (dirname (search-path %load-compiled-path "guix.go"))) + + +(test-begin "inferior") + +(test-equal "open-inferior" + '(42 #t) + (let ((inferior (open-inferior %top-builddir + #:command "scripts/guix"))) + (and (inferior? inferior) + (let ((a (inferior-eval '(apply * '(6 7)) inferior)) + (b (inferior-eval '(@ (gnu packages base) coreutils) + inferior))) + (close-inferior inferior) + (list a (inferior-object? b)))))) + +(test-equal "inferior-packages" + (take (sort (fold-packages (lambda (package lst) + (alist-cons (package-name package) + (package-version package) + lst)) + '()) + (lambda (x y) + (string<? (car x) (car y)))) + 10) + (let* ((inferior (open-inferior %top-builddir + #:command "scripts/guix")) + (packages (inferior-packages inferior))) + (and (every string? (map inferior-package-synopsis packages)) + (begin + (close-inferior inferior) + (take (sort (map (lambda (package) + (cons (inferior-package-name package) + (inferior-package-version package))) + packages) + (lambda (x y) + (string<? (car x) (car y)))) + 10))))) + +(test-end "inferior") |