diff --git a/.dir-locals.el b/.dir-locals.el index 228685a69f..22aac2c402 100644 --- a/.dir-locals.el +++ b/.dir-locals.el @@ -90,6 +90,7 @@ (eval . (put 'eventually 'scheme-indent-function 1)) (eval . (put 'call-with-progress-reporter 'scheme-indent-function 1)) + (eval . (put 'with-temporary-git-repository 'scheme-indent-function 2)) ;; This notably allows '(' in Paredit to not insert a space when the ;; preceding symbol is one of these. diff --git a/.gitignore b/.gitignore index aa374b54b9..df59a9176e 100644 --- a/.gitignore +++ b/.gitignore @@ -29,22 +29,23 @@ /doc/*.1 /doc/.dirstamp /doc/contributing.*.texi -/doc/guix.*.aux -/doc/guix.*.cp -/doc/guix.*.cps -/doc/guix.*.fn -/doc/guix.*.fns -/doc/guix.*.html -/doc/guix.*.info -/doc/guix.*.info-[0-9] -/doc/guix.*.ky -/doc/guix.*.pg -/doc/guix.*.toc -/doc/guix.*.t2p -/doc/guix.*.tp -/doc/guix.*.vr -/doc/guix.*.vrs +/doc/guix*.aux +/doc/guix*.cp +/doc/guix*.cps +/doc/guix*.fn +/doc/guix*.fns +/doc/guix*.html +/doc/guix*.info +/doc/guix*.info-[0-9] +/doc/guix*.ky +/doc/guix*.pg +/doc/guix*.toc +/doc/guix*.t2p +/doc/guix*.tp +/doc/guix*.vr +/doc/guix*.vrs /doc/guix.*.texi +/doc/guix-cookbook.*.texi /doc/guix.aux /doc/guix.cp /doc/guix.cps diff --git a/.guix-channel b/.guix-channel new file mode 100644 index 0000000000..3e618d79f8 --- /dev/null +++ b/.guix-channel @@ -0,0 +1,5 @@ +;; This is a Guix channel. + +(channel + (version 0) + (news-file "etc/news.scm")) diff --git a/Makefile.am b/Makefile.am index b5e7a01dce..2b78091af3 100644 --- a/Makefile.am +++ b/Makefile.am @@ -241,6 +241,7 @@ MODULES = \ guix/scripts/remove.scm \ guix/scripts/upgrade.scm \ guix/scripts/search.scm \ + guix/scripts/show.scm \ guix/scripts/gc.scm \ guix/scripts/hash.scm \ guix/scripts/pack.scm \ @@ -306,7 +307,10 @@ STORE_MODULES = \ MODULES += $(STORE_MODULES) # Internal modules with test suite support. -dist_noinst_DATA = guix/tests.scm guix/tests/http.scm +dist_noinst_DATA = \ + guix/tests.scm \ + guix/tests/http.scm \ + guix/tests/git.scm # Auxiliary files for packages. AUX_FILES = \ @@ -390,6 +394,7 @@ SCM_TESTS = \ tests/file-systems.scm \ tests/gem.scm \ tests/gexp.scm \ + tests/git.scm \ tests/glob.scm \ tests/gnu-maintenance.scm \ tests/grafts.scm \ @@ -528,8 +533,10 @@ EXTRA_DIST += \ TODO \ CODE-OF-CONDUCT \ .dir-locals.el \ + .guix-channel \ scripts/guix.in \ etc/guix-install.sh \ + etc/news.scm \ build-aux/build-self.scm \ build-aux/compile-all.scm \ build-aux/hydra/evaluate.scm \ @@ -814,7 +821,8 @@ assert-no-store-file-names: $(AM_V_at)if grep -r --exclude=*.texi --exclude=*.info \ --exclude=*.info-[0-9] --exclude=*.dot \ --exclude=*.eps --exclude-dir=bootstrap \ - --exclude=guix-manual.pot --exclude=guix-manual.*.po \ + --exclude=guix-manual.pot --exclude=guix-manual.*.po \ + --exclude=guix-cookbook.pot --exclude=guix-cookbook.*.po \ --exclude=guix-prettify.el \ --exclude=ChangeLog* \ --exclude=binutils-boot-2.20*.patch \ diff --git a/bootstrap b/bootstrap index c0b5af7677..c9e7a084a1 100755 --- a/bootstrap +++ b/bootstrap @@ -4,7 +4,7 @@ set -e -x # Generate stubs for translations. -langs=`find po/doc -type f -name '*.po' \ +langs=`find po/doc -type f -name 'guix-manual*.po' \ | sed -e 's,guix-manual\.,,' \ | xargs -n 1 -I{} basename {} .po` for lang in ${langs}; do @@ -15,5 +15,15 @@ for lang in ${langs}; do touch "po/doc/guix-manual.${lang}.po" fi done +langs=`find po/doc -type f -name 'guix-cookbook*.po' \ + | sed -e 's,guix-manual\.,,' \ + | xargs -n 1 -I{} basename {} .po` +for lang in ${langs}; do + if [ ! -e "doc/guix-cookbook.${lang}.texi" ]; then + echo "@setfilename guix-cookbook.${lang}.info" > "doc/guix-cookbook.${lang}.texi" + # Ensure .po file is newer. + touch "po/doc/guix-cookbook.${lang}.po" + fi +done exec autoreconf -vfi diff --git a/doc/guix-cookbook.texi b/doc/guix-cookbook.texi new file mode 100644 index 0000000000..66f94a0fe7 --- /dev/null +++ b/doc/guix-cookbook.texi @@ -0,0 +1,821 @@ +\input texinfo +@c -*-texinfo-*- + +@c %**start of header +@setfilename guix-cookbook.info +@documentencoding UTF-8 +@settitle GNU Guix Cookbook +@c %**end of header + +@copying +Copyright @copyright{} 2019 Ricardo Wurmus@* +Copyright @copyright{} 2019 Efraim Flashner@* +Copyright @copyright{} 2019 Pierre Neidhardt@* + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A +copy of the license is included in the section entitled ``GNU Free +Documentation License''. +@end copying + +@dircategory System administration +@direntry +* Guix cookbook: (guix-cookbook). Tutorials and examples for GNU Guix. +@end direntry + +@titlepage +@title GNU Guix Cookbook +@subtitle Tutorials and examples for using the GNU Guix Functional Package Manager +@author The GNU Guix Developers + +@page +@vskip 0pt plus 1filll + +@insertcopying +@end titlepage + +@contents + +@c ********************************************************************* +@node Top +@top GNU Guix Cookbook + +This document presents tutorials and detailed examples for GNU@tie{}Guix, a +functional package management tool written for the GNU system. Please +@pxref{Top,,, guix, GNU Guix reference manual} for details about the system, +its API, and related concepts. + +@c TRANSLATORS: You can replace the following paragraph with information on +@c how to join your own translation team and how to report issues with the +@c translation. +If you would like to translate this document in your native language, consider +joining the @uref{https://translationproject.org/domain/guix-cookbook.html, +Translation Project}. + +@menu +* Scheme tutorials:: Meet your new favorite language! +* Packaging:: Packaging tutorials +* System Configuration:: Customizing the GNU System + +* Acknowledgments:: Thanks! +* GNU Free Documentation License:: The license of this document. +* Concept Index:: Concepts. + +@detailmenu + --- The Detailed Node Listing --- + +Scheme tutorials + +* A Scheme Crash Course:: Learn the basics of Scheme + +Packaging + +* Packaging Tutorial:: Let's add a package to Guix! + +System Configuration + +* Customizing the Kernel:: Creating and using a custom Linux kernel + + +@end detailmenu +@end menu + +@c ********************************************************************* +@node Scheme tutorials +@chapter Scheme tutorials + +GNU@tie{}Guix is written in the general purpose programming language Scheme, +and many of its features can be accessed and manipulated programmatically. +You can use Scheme to generate package definitions, to modify them, to build +them, to deploy whole operating systems, etc. + +Knowing the basics of how to program in Scheme will unlock many of the +advanced features Guix provides --- and you don't even need to be an +experienced programmer to use them! + +Let's get started! + +@node A Scheme Crash Course +@section A Scheme Crash Course + +@cindex Scheme, crash course + +Guix uses the Guile implementation of Scheme. To start playing with the +language, install it with @code{guix install guile} and start a +@uref{https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop, +REPL} by running @code{guile} from the command line. + +Alternatively you can also run @code{guix environment --ad-hoc guile -- guile} +if you'd rather not have Guile installed in your user profile. + +In the following examples we use the @code{>} symbol to denote the REPL +prompt, that is, the line reserved for user input. @xref{Using Guile +Interactively,,, guile, GNU Guile Reference Manual}) for more details on the +REPL. + +@itemize +@item +Scheme syntax boils down to a tree of expressions (or @emph{s-expression} in +Lisp lingo). An expression can be a literal such as numbers and strings, or a +compound which is a parenthesized list of compounds and literals. @code{#t} +and @code{#f} stand for the booleans "true" and "false", respectively. + +Examples of valid expressions: + +@example scheme +> "Hello World!" +"Hello World!" +> 17 +17 +> (display (string-append "Hello " "Guix" "\n")) +"Hello Guix!" +@end example + +@item +This last example is a function call nested in another function call. When a +parenthesized expression is evaluated, the first term is the function and the +rest are the arguments passed to the function. Every function returns the +last evaluated expression as its return value. + +@item +Anonymous functions are declared with the @code{lambda} term: + +@example scheme +> (lambda (x) (* x x)) +#:24:0 (x)> +@end example + +The above procedure returns the square of its argument. Since everything is +an expression, the @code{lambda} expression returns an anonymous procedure, +which can in turn be applied to an argument: + +@example scheme +> ((lambda (x) (* x x)) 3) +9 +@end example + +@item +Anything can be assigned a global name with @code{define}: + +@example scheme +> (define a 3) +> (define square (lambda (x) (* x x))) +> (square a) +9 +@end example + +@item +Procedures can be defined more concisely with the following syntax: + +@example scheme +(define (square x) (* x x)) +@end example + +@item +A list structure can be created with the @code{list} procedure: + +@example scheme +> (list 2 a 5 7) +(2 3 5 7) +@end example + +@item +The @emph{quote} disables evaluation of a parenthesized expression: the first +term is not called over the other terms. Thus it effectively returns a list +of terms. + +@example scheme +> '(display (string-append "Hello " "Guix" "\n")) +(display (string-append "Hello " "Guix" "\n")) +> '(2 a 5 7) +(2 a 5 7) +@end example + +@item +The @emph{quasiquote} disables evaluation of a parenthesized expression until +a comma re-enables it. Thus it provides us with fine-grained control over +what is evaluated and what is not. + +@example scheme +> `(2 a 5 7 (2 ,a 5 ,(+ a 4))) +(2 a 5 7 (2 3 5 7)) +@end example + +Note that the above result is a list of mixed elements: numbers, symbols (here +@code{a}) and the last element is a list itself. + +@item +Multiple variables can be named locally with @code{let}: + +@example scheme +> (define x 10) +> (let ((x 2) + (y 3)) + (list x y)) +(2 3) +> x +10 +> y +ERROR: In procedure module-lookup: Unbound variable: y +@end example + +Use @code{let*} to allow later variable declarations to refer to earlier +definitions. + +@example scheme +> (let* ((x 2) + (y (* x 3))) + (list x y)) +(2 6) +@end example + +@item +The keyword syntax is @code{#:}; it is used to create unique identifiers. +@pxref{Keywords,,, guile, GNU Guile Reference Manual}. + +@item +The percentage @code{%} is typically used for read-only global variables in +the build stage. Note that it is merely a convention, like @code{_} in C. +Scheme treats @code{%} exactly the same as any other letter. + +@item +Modules are created with @code{define-module}. For instance + +@example scheme +(define-module (guix build-system ruby) + #:use-module (guix store) + #:export (ruby-build + ruby-build-system)) +@end example + +defines the module @code{guix build-system ruby} which must be located in +@file{guix/build-system/ruby.scm} somewhere in the Guile load path. It +depends on the @code{(guix store)} module and it exports two variables, +@code{ruby-build} and @code{ruby-build-system}. +@end itemize + +For a more detailed introduction, check out +@uref{http://www.troubleshooters.com/codecorn/scheme_guile/hello.htm, Scheme +at a Glance}, by Steve Litt. + +One of the reference Scheme books is the seminal ``Structure and +Interpretation of Computer Programs'', by Harold Abelson and Gerald Jay +Sussman, with Julie Sussman. You'll find a +@uref{https://mitpress.mit.edu/sites/default/files/sicp/index.html, free copy +online}, together with +@uref{https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/video-lectures/, +videos of the lectures by the authors}. The book is available in Texinfo +format as the @code{sicp} Guix package. Go ahead, run @code{guix install +sicp} and start reading with @code{info sicp} (or with the Emacs Info reader). +An @uref{https://sarabander.github.io/sicp/, unofficial ebook is also +available}. + +You'll find more books, tutorials and other resources at +@url{https://schemers.org/}. + + +@c ********************************************************************* +@node Packaging +@chapter Packaging + +@cindex packaging + +This chapter is dedicated to teaching you how to add packages to the +collection of packages that come with GNU Guix. This involves writing package +definitions in Guile Scheme, organizing them in package modules, and building +them. + +@menu +* Packaging Tutorial:: A tutorial on how to add packages to Guix. +@end menu + +@node Packaging Tutorial +@section Packaging Tutorial + +GNU Guix stands out as the @emph{hackable} package manager, mostly because it +uses @uref{https://www.gnu.org/software/guile/, GNU Guile}, a powerful +high-level programming language, one of the +@uref{https://en.wikipedia.org/wiki/Scheme_%28programming_language%29, Scheme} +dialects from the +@uref{https://en.wikipedia.org/wiki/Lisp_%28programming_language%29, Lisp family}. + +Package definitions are also written in Scheme, which empowers Guix in some +very unique ways, unlike most other package managers that use shell scripts or +simple languages. + +@itemize +@item +Use functions, structures, macros and all of Scheme expressiveness for your +package definitions. + +@item +Inheritance makes it easy to customize a package by inheriting from it and +modifying only what is needed. + +@item +Batch processing: the whole package collection can be parsed, filtered and +processed. Building a headless server with all graphical interfaces stripped +out? It's possible. Want to rebuild everything from source using specific +compiler optimization flags? Pass the @code{#:make-flags "..."} argument to +the list of packages. It wouldn't be a stretch to think +@uref{https://wiki.gentoo.org/wiki/USE_flag, Gentoo USE flags} here, but this +goes even further: the changes don't have to be thought out beforehand by the +packager, they can be @emph{programmed} by the user! +@end itemize + +The following tutorial covers all the basics around package creation with Guix. +It does not assume much knowledge of the Guix system nor of the Lisp language. +The reader is only expected to be familiar with the command line and to have some +basic programming knowledge. + +@subsection A "Hello World" package + +The “Defining Packages” section of the manual introduces the basics of Guix +packaging (@pxref{Defining Packages,,, guix, GNU Guix Reference Manual}). In +the following section, we will partly go over those basics again. + +``GNU hello'' is a dummy project that serves as an idiomatic example for +packaging. It uses the GNU build system (@code{./configure && make && make +install}). Guix already provides a package definition which is a perfect +example to start with. You can look up its declaration with @code{guix edit +hello} from the command line. Let's see how it looks: + +@example scheme +(define-public hello + (package + (name "hello") + (version "2.10") + (source (origin + (method url-fetch) + (uri (string-append "mirror://gnu/hello/hello-" version + ".tar.gz")) + (sha256 + (base32 + "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i")))) + (build-system gnu-build-system) + (synopsis "Hello, GNU world: An example GNU package") + (description + "GNU Hello prints the message \"Hello, world!\" and then exits. It +serves as an example of standard GNU coding practices. As such, it supports +command-line arguments, multiple languages, and so on.") + (home-page "https://www.gnu.org/software/hello/") + (license gpl3+))) +@end example + +As you can see, most of it is rather straightforward. But let's review the +fields together: + +@table @samp +@item name +The project name. Using Scheme conventions, we prefer to keep it +lower case, without underscore and using dash-separated words. + +@item source +This field contains a description of the source code origin. The +@code{origin} record contains these fields: + +@enumerate +@item The method, here @code{url-fetch} to download via HTTP/FTP, but other methods + exist, such as @code{git-fetch} for Git repositories. +@item The URI, which is typically some @code{https://} location for @code{url-fetch}. Here + the special `mirror://gnu` refers to a set of well known locations, all of + which can be used by Guix to fetch the source, should some of them fail. +@item The @code{sha256} checksum of the requested file. This is essential to ensure + the source is not corrupted. Note that Guix works with base32 strings, + hence the call to the @code{base32} function. +@end enumerate + +@item build-system + +This is where the power of abstraction provided by the Scheme language really +shines: in this case, the @code{gnu-build-system} abstracts away the famous +@code{./configure && make && make install} shell invocations. Other build +systems include the @code{trivial-build-system} which does not do anything and +requires from the packager to program all the build steps, the +@code{python-build-system}, the @code{emacs-build-system}, and many more +(@pxref{Build Systems,,, guix, GNU Guix Reference Manual}). + +@item synopsis +It should be a concise summary of what the package does. For many packages a +tagline from the project's home page can be used as the synopsis. + +@item description +Same as for the synopsis, it's fine to re-use the project description from the +homepage. Note that Guix uses Texinfo syntax. + +@item home-page +Use HTTPS if available. + +@item license +See @code{guix/licenses.scm} in the project source for a full list of +available licenses. +@end table + +Time to build our first package! Nothing fancy here for now: we will stick to a +dummy "my-hello", a copy of the above declaration. + +As with the ritualistic "Hello World" taught with most programming languages, +this will possibly be the most "manual" approach. We will work out an ideal +setup later; for now we will go the simplest route. + +Save the following to a file @file{my-hello.scm}. + +@example scheme +(use-modules (guix packages) + (guix download) + (guix build-system gnu) + (guix licenses)) + +(package + (name "my-hello") + (version "2.10") + (source (origin + (method url-fetch) + (uri (string-append "mirror://gnu/hello/hello-" version + ".tar.gz")) + (sha256 + (base32 + "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i")))) + (build-system gnu-build-system) + (synopsis "Hello, Guix world: An example custom Guix package") + (description + "GNU Hello prints the message \"Hello, world!\" and then exits. It +serves as an example of standard GNU coding practices. As such, it supports +command-line arguments, multiple languages, and so on.") + (home-page "https://www.gnu.org/software/hello/") + (license gpl3+)) +@end example + +We will explain the extra code in a moment. + +Feel free to play with the different values of the various fields. If you +change the source, you'll need to update the checksum. Indeed, Guix refuses to +build anything if the given checksum does not match the computed checksum of the +source code. To obtain the correct checksum of the package declaration, we +need to download the source, compute the sha256 checksum and convert it to +base32. + +Thankfully, Guix can automate this task for us; all we need is to provide the +URI: + +@c TRANSLATORS: This is example shell output. +@example sh +$ guix download mirror://gnu/hello/hello-2.10.tar.gz + +Starting download of /tmp/guix-file.JLYgL7 +From https://ftpmirror.gnu.org/gnu/hello/hello-2.10.tar.gz... +following redirection to `https://mirror.ibcp.fr/pub/gnu/hello/hello-2.10.tar.gz'... + …10.tar.gz 709KiB 2.5MiB/s 00:00 [##################] 100.0% +/gnu/store/hbdalsf5lpf01x4dcknwx6xbn6n5km6k-hello-2.10.tar.gz +0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i +@end example + +In this specific case the output tells us which mirror was chosen. +If the result of the above command is not the same as in the above snippet, +update your @code{my-hello} declaration accordingly. + +Note that GNU package tarballs come with an OpenPGP signature, so you +should definitely check the signature of this tarball with `gpg` to +authenticate it before going further: + +@c TRANSLATORS: This is example shell output. +@example sh +$ guix download mirror://gnu/hello/hello-2.10.tar.gz.sig + +Starting download of /tmp/guix-file.03tFfb +From https://ftpmirror.gnu.org/gnu/hello/hello-2.10.tar.gz.sig... +following redirection to `https://ftp.igh.cnrs.fr/pub/gnu/hello/hello-2.10.tar.gz.sig'... + ….tar.gz.sig 819B 1.2MiB/s 00:00 [##################] 100.0% +/gnu/store/rzs8wba9ka7grrmgcpfyxvs58mly0sx6-hello-2.10.tar.gz.sig +0q0v86n3y38z17rl146gdakw9xc4mcscpk8dscs412j22glrv9jf +$ gpg --verify /gnu/store/rzs8wba9ka7grrmgcpfyxvs58mly0sx6-hello-2.10.tar.gz.sig /gnu/store/hbdalsf5lpf01x4dcknwx6xbn6n5km6k-hello-2.10.tar.gz +gpg: Signature made Sun 16 Nov 2014 01:08:37 PM CET +gpg: using RSA key A9553245FDE9B739 +gpg: Good signature from "Sami Kerola " [unknown] +gpg: aka "Sami Kerola (http://www.iki.fi/kerolasa/) " [unknown] +gpg: WARNING: This key is not certified with a trusted signature! +gpg: There is no indication that the signature belongs to the owner. +Primary key fingerprint: 8ED3 96E3 7E38 D471 A005 30D3 A955 3245 FDE9 B739 +@end example + +You can then happily run + +@c TRANSLATORS: Do not translate this command +@example sh +$ guix package --install-from-file=my-hello.scm +@end example + +You should now have @code{my-hello} in your profile! + +@c TRANSLATORS: Do not translate this command +@example sh +$ guix package --list-installed=my-hello +my-hello 2.10 out +/gnu/store/f1db2mfm8syb8qvc357c53slbvf1g9m9-my-hello-2.10 +@end example + +We've gone as far as we could without any knowledge of Scheme. Before moving +on to more complex packages, now is the right time to brush up on your Scheme +knowledge. @pxref{A Scheme Crash Course} to get up to speed. + +@c TODO: Continue the tutorial + + +@c ********************************************************************* +@node System Configuration +@chapter System Configuration + +Guix offers a flexible language for declaratively configuring your Guix +System. This flexibility can at times be overwhelming. The purpose of this +chapter is to demonstrate some advanced configuration concepts. + +@pxref{System Configuration,,, guix, GNU Guix Reference Manual} for a complete +reference. + +@menu +* Customizing the Kernel:: Creating and using a custom Linux kernel on Guix System. +@end menu + +@node Customizing the Kernel +@section Customizing the Kernel + +Guix is, at its core, a source based distribution with substitutes +(@pxref{Substitutes,,, guix, GNU Guix Reference Manual}), and as such building +packages from their source code is an expected part of regular package +installations and upgrades. Given this starting point, it makes sense that +efforts are made to reduce the amount of time spent compiling packages, and +recent changes and upgrades to the building and distribution of substitutes +continues to be a topic of discussion within Guix. + +The kernel, while not requiring an overabundance of RAM to build, does take a +rather long time on an average machine. The official kernel configuration, as +is the case with many GNU/Linux distributions, errs on the side of +inclusiveness, and this is really what causes the build to take such a long +time when the kernel is built from source. + +The Linux kernel, however, can also just be described as a regular old +package, and as such can be customized just like any other package. The +procedure is a little bit different, although this is primarily due to the +nature of how the package definition is written. + +The @code{linux-libre} kernel package definition is actually a procedure which +creates a package. + +@example scheme +(define* (make-linux-libre version hash supported-systems + #:key + ;; A function that takes an arch and a variant. + ;; See kernel-config for an example. + (extra-version #f) + (configuration-file #f) + (defconfig "defconfig") + (extra-options %default-extra-linux-options) + (patches (list %boot-logo-patch))) + ...) +@end example + +The current @code{linux-libre} package is for the 5.1.x series, and is +declared like this: + +@example scheme +(define-public linux-libre + (make-linux-libre %linux-libre-version + %linux-libre-hash + '("x86_64-linux" "i686-linux" "armhf-linux" "aarch64-linux") + #:patches %linux-libre-5.1-patches + #:configuration-file kernel-config)) +@end example + +Any keys which are not assigned values inherit their default value from the +@code{make-linux-libre} definition. When comparing the two snippets above, +you may notice that the code comment in the first doesn't actually refer to +the @code{#:extra-version} keyword; it is actually for +@code{#:configuration-file}. Because of this, it is not actually easy to +include a custom kernel configuration from the definition, but don't worry, +there are other ways to work with what we do have. + +There are two ways to create a kernel with a custom kernel configuration. The +first is to provide a standard @file{.config} file during the build process by +including an actual @file{.config} file as a native input to our custom +kernel. The following is a snippet from the custom @code{'configure} phase of +the @code{make-linux-libre} package definition: + +@example scheme +(let ((build (assoc-ref %standard-phases 'build)) + (config (assoc-ref (or native-inputs inputs) "kconfig"))) + + ;; Use a custom kernel configuration file or a default + ;; configuration file. + (if config + (begin + (copy-file config ".config") + (chmod ".config" #o666)) + (invoke "make" ,defconfig)) +@end example + +Below is a sample kernel package. The @code{linux-libre} package is nothing +special and can be inherited from and have its fields overridden like any +other package: + +@example scheme +(define-public linux-libre/E2140 + (package + (inherit linux-libre) + (native-inputs + `(("kconfig" ,(local-file "E2140.config")) + ,@@(alist-delete "kconfig" + (package-native-inputs linux-libre)))))) +@end example + +In the same directory as the file defining @code{linux-libre-E2140} is a file +named @file{E2140.config}, which is an actual kernel configuration file. The +@code{defconfig} keyword of @code{make-linux-libre} is left blank here, so the +only kernel configuration in the package is the one which was included in the +@code{native-inputs} field. + +The second way to create a custom kernel is to pass a new value to the +@code{extra-options} keyword of the @code{make-linux-libre} procedure. The +@code{extra-options} keyword works with another function defined right below +it: + +@example scheme +(define %default-extra-linux-options + `(;; https://lists.gnu.org/archive/html/guix-devel/2014-04/msg00039.html + ("CONFIG_DEVPTS_MULTIPLE_INSTANCES" . #t) + ;; Modules required for initrd: + ("CONFIG_NET_9P" . m) + ("CONFIG_NET_9P_VIRTIO" . m) + ("CONFIG_VIRTIO_BLK" . m) + ("CONFIG_VIRTIO_NET" . m) + ("CONFIG_VIRTIO_PCI" . m) + ("CONFIG_VIRTIO_BALLOON" . m) + ("CONFIG_VIRTIO_MMIO" . m) + ("CONFIG_FUSE_FS" . m) + ("CONFIG_CIFS" . m) + ("CONFIG_9P_FS" . m))) + +(define (config->string options) + (string-join (map (match-lambda + ((option . 'm) + (string-append option "=m")) + ((option . #t) + (string-append option "=y")) + ((option . #f) + (string-append option "=n"))) + options) + "\n")) +@end example + +And in the custom configure script from the `make-linux-libre` package: + +@example scheme +;; Appending works even when the option wasn't in the +;; file. The last one prevails if duplicated. +(let ((port (open-file ".config" "a")) + (extra-configuration ,(config->string extra-options))) + (display extra-configuration port) + (close-port port)) + +(invoke "make" "oldconfig")))) +@end example + +So by not providing a configuration-file the @file{.config} starts blank, and +then we write into it the collection of flags that we want. Here's another +custom kernel: + +@example scheme +(define %macbook41-full-config + (append %macbook41-config-options + %filesystems + %efi-support + %emulation + (@@@@ (gnu packages linux) %default-extra-linux-options))) + +(define-public linux-libre-macbook41 + ;; XXX: Access the internal 'make-linux-libre' procedure, which is + ;; private and unexported, and is liable to change in the future. + ((@@@@ (gnu packages linux) make-linux-libre) (@@@@ (gnu packages linux) %linux-libre-version) + (@@@@ (gnu packages linux) %linux-libre-hash) + '("x86_64-linux") + #:extra-version "macbook41" + #:patches (@@@@ (gnu packages linux) %linux-libre-5.1-patches) + #:extra-options %macbook41-config-options)) +@end example + +In the above example @code{%filesystems} is a collection of flags enabling +different filesystem support, @code{%efi-support} enables EFI support and +@code{%emulation} enables a x86_64-linux machine to act in 32-bit mode also. +@code{%default-extra-linux-options} are the ones quoted above, which had to be +added in since they were replaced in the @code{extra-options} keyword. + +This all sounds like it should be doable, but how does one even know which +modules are required for a particular system? Two places that can be helpful +in trying to answer this question is the +@uref{https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Kernel, Gentoo +Handbook} and the +@uref{https://www.kernel.org/doc/html/latest/admin-guide/README.html?highlight=localmodconfig, +documentation from the kernel itself}. From the kernel documentation, it +seems that @code{make localmodconfig} is the command we want. + +In order to actually run @code{make localmodconfig} we first need to get and +unpack the kernel source code: + +@example shell +tar xf $(guix build linux-libre --source) +@end example + +Once inside the directory containing the source code run @code{touch .config} +to create an initial, empty @file{.config} to start with. @code{make +localmodconfig} works by seeing what you already have in @file{.config} and +letting you know what you're missing. If the file is blank then you're +missing everything. The next step is to run: + +@example shell +guix environment linux-libre -- make localmodconfig +@end example + +and note the output. Do note that the @file{.config} file is still empty. +The output generally contains two types of warnings. The first start with +"WARNING" and can actually be ignored in our case. The second read: + +@example shell +module pcspkr did not have configs CONFIG_INPUT_PCSPKR +@end example + +For each of these lines, copy the @code{CONFIG_XXXX_XXXX} portion into the +@file{.config} in the directory, and append @code{=m}, so in the end it looks +like this: + +@example shell +CONFIG_INPUT_PCSPKR=m +CONFIG_VIRTIO=m +@end example + +After copying all the configuration options, run @code{make localmodconfig} +again to make sure that you don't have any output starting with "module". +After all of these machine specific modules there are a couple more left that +are also needed. @code{CONFIG_MODULES} is necessary so that you can build and +load modules separately and not have everything built into the kernel. +@code{CONFIG_BLK_DEV_SD} is required for reading from hard drives. It is +possible that there are other modules which you will need. + +This post does not aim to be a guide to configuring your own kernel however, +so if you do decide to build a custom kernel you'll have to seek out other +guides to create a kernel which is just right for your needs. + +The second way to setup the kernel configuration makes more use of Guix's +features and allows you to share configuration segments between different +kernels. For example, all machines using EFI to boot have a number of EFI +configuration flags that they need. It is likely that all the kernels will +share a list of filesystems to support. By using variables it is easier to +see at a glance what features are enabled and to make sure you don't have +features in one kernel but missing in another. + +Left undiscussed however, is Guix's initrd and its customization. It is +likely that you'll need to modify the initrd on a machine using a custom +kernel, since certain modules which are expected to be built may not be +available for inclusion into the initrd. + +@c ********************************************************************* +@node Acknowledgments +@chapter Acknowledgments + +Guix is based on the @uref{https://nixos.org/nix/, Nix package manager}, +which was designed and +implemented by Eelco Dolstra, with contributions from other people (see +the @file{nix/AUTHORS} file in Guix.) Nix pioneered functional package +management, and promoted unprecedented features, such as transactional +package upgrades and rollbacks, per-user profiles, and referentially +transparent build processes. Without this work, Guix would not exist. + +The Nix-based software distributions, Nixpkgs and NixOS, have also been +an inspiration for Guix. + +GNU@tie{}Guix itself is a collective work with contributions from a +number of people. See the @file{AUTHORS} file in Guix for more +information on these fine people. The @file{THANKS} file lists people +who have helped by reporting bugs, taking care of the infrastructure, +providing artwork and themes, making suggestions, and more---thank you! + +This document includes adapted sections from articles that have previously +been published on the Guix blog at @uref{https://guix.gnu.org/blog}. + + +@c ********************************************************************* +@node GNU Free Documentation License +@appendix GNU Free Documentation License +@cindex license, GNU Free Documentation License +@include fdl-1.3.texi + +@c ********************************************************************* +@node Concept Index +@unnumbered Concept Index +@printindex cp + +@bye + +@c Local Variables: +@c ispell-local-dictionary: "american"; +@c End: diff --git a/doc/guix.texi b/doc/guix.texi index aff9aed06b..843afcdd1a 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -2657,7 +2657,9 @@ For your convenience, we also provide the following aliases: @item @command{guix remove} is an alias for @command{guix package -r}, @item -and @command{guix upgrade} is an alias for @command{guix package -u}. +@command{guix upgrade} is an alias for @command{guix package -u}, +@item +and @command{guix show} is an alias for @command{guix package --show=}. @end itemize These aliases are less expressive than @command{guix package} and provide @@ -2916,6 +2918,25 @@ variable, even though, taken individually, neither @file{foo} nor @itemx -p @var{profile} Use @var{profile} instead of the user's default profile. +@var{profile} must be the name of a file that will be created upon +completion. Concretely, @var{profile} will be a mere symbolic link +(``symlink'') pointing to the actual profile where packages are +installed: + +@example +$ guix install hello -p ~/code/my-profile +@dots{} +$ ~/code/my-profile/bin/hello +Hello, world! +@end example + +All it takes to get rid of the profile is to remove this symlink and its +siblings that point to specific generations: + +@example +$ rm ~/code/my-profile ~/code/my-profile-*-link +@end example + @cindex collisions, in a profile @cindex colliding packages in profiles @cindex profile collisions @@ -3020,9 +3041,9 @@ version: 3.3.5 @end example You may also specify the full name of a package to only get details about a -specific version of it: +specific version of it (this time using the @command{guix show} alias): @example -$ guix package --show=python@@3.4 | recsel -p name,version +$ guix show python@@3.4 | recsel -p name,version name: python version: 3.4.3 @end example @@ -3673,11 +3694,20 @@ Generation 3 Jun 13 2018 23:31:07 (current) @xref{Invoking guix describe, @command{guix describe}}, for other ways to describe the current status of Guix. -This @code{~/.config/guix/current} profile works like any other profile -created by @command{guix package} (@pxref{Invoking guix package}). That +This @code{~/.config/guix/current} profile works exactly like the profiles +created by @command{guix package} (@pxref{Invoking guix package}). That is, you can list generations, roll back to the previous generation---i.e., the previous Guix---and so on: +@example +$ guix pull --roll-back +switched from generation 3 to 2 +$ guix pull --delete-generations=1 +deleting /var/guix/profiles/per-user/charlie/current-guix-1-link +@end example + +You can also use @command{guix package} (@pxref{Invoking guix package}) +to manage the profile by naming it explicitly: @example $ guix package -p ~/.config/guix/current --roll-back switched from generation 3 to 2 @@ -3709,13 +3739,16 @@ Read the list of channels from @var{file} instead of evaluates to a list of channel objects. @xref{Channels}, for more information. +@cindex channel news @item --news @itemx -N -Display the list of packages added or upgraded since the previous generation. +Display the list of packages added or upgraded since the previous +generation, as well as, occasionally, news written by channel authors +for their users (@pxref{Channels, Writing Channel News}). -This is the same information as displayed upon @command{guix pull} completion, -but without ellipses; it is also similar to the output of @command{guix pull --l} for the last generation (see below). +The package information is the same as displayed upon @command{guix +pull} completion, but without ellipses; it is also similar to the output +of @command{guix pull -l} for the last generation (see below). @item --list-generations[=@var{pattern}] @itemx -l [@var{pattern}] @@ -3724,6 +3757,40 @@ is provided, the subset of generations that match @var{pattern}. The syntax of @var{pattern} is the same as with @code{guix package --list-generations} (@pxref{Invoking guix package}). +@item --roll-back +@cindex rolling back +@cindex undoing transactions +@cindex transactions, undoing +Roll back to the previous @dfn{generation} of @file{~/.config/guix/current}---i.e., +undo the last transaction. + +@item --switch-generation=@var{pattern} +@itemx -S @var{pattern} +@cindex generations +Switch to a particular generation defined by @var{pattern}. + +@var{pattern} may be either a generation number or a number prefixed +with ``+'' or ``-''. The latter means: move forward/backward by a +specified number of generations. For example, if you want to return to +the latest generation after @code{--roll-back}, use +@code{--switch-generation=+1}. + +@item --delete-generations[=@var{pattern}] +@itemx -d [@var{pattern}] +When @var{pattern} is omitted, delete all generations except the current +one. + +This command accepts the same patterns as @option{--list-generations}. +When @var{pattern} is specified, delete the matching generations. When +@var{pattern} specifies a duration, generations @emph{older} than the +specified duration match. For instance, @code{--delete-generations=1m} +deletes generations that are more than one month old. + +If the current generation matches, it is @emph{not} deleted. + +Note that deleting generations prevents rolling back to them. +Consequently, this command must be used with care. + @xref{Invoking guix describe}, for a way to display information about the current generation only. @@ -3946,6 +4013,68 @@ add a meta-data file @file{.guix-channel} that contains: (directory "guix")) @end lisp +@cindex news, for channels +@subsection Writing Channel News + +Channel authors may occasionally want to communicate to their users +information about important changes in the channel. You'd send them all +an email, but that's not convenient. + +Instead, channels can provide a @dfn{news file}; when the channel users +run @command{guix pull}, that news file is automatically read and +@command{guix pull --news} can display the announcements that correspond +to the new commits that have been pulled, if any. + +To do that, channel authors must first declare the name of the news file +in their @file{.guix-channel} file: + +@lisp +(channel + (version 0) + (news-file "etc/news.txt")) +@end lisp + +The news file itself, @file{etc/news.txt} in this example, must look +something like this: + +@lisp +(channel-news + (version 0) + (entry (tag "the-bug-fix") + (title (en "Fixed terrible bug") + (fr "Oh la la")) + (body (en "@@emph@{Good news@}! It's fixed!") + (eo "Certe ĝi pli bone funkcias nun!"))) + (entry (commit "bdcabe815cd28144a2d2b4bc3c5057b051fa9906") + (title (en "Added a great package") + (ca "Què vol dir guix?")) + (body (en "Don't miss the @@code@{hello@} package!")))) +@end lisp + +The file consists of a list of @dfn{news entries}. Each entry is +associated with a commit or tag: it describes changes made in this +commit, possibly in preceding commits as well. Users see entries only +the first time they obtain the commit the entry refers to. + +The @code{title} field should be a one-line summary while @code{body} +can be arbitrarily long, and both can contain Texinfo markup +(@pxref{Overview,,, texinfo, GNU Texinfo}). Both the title and body are +a list of language tag/message tuples, which allows @command{guix pull} +to display news in the language that corresponds to the user's locale. + +If you want to translate news using a gettext-based workflow, you can +extract translatable strings with @command{xgettext} (@pxref{xgettext +Invocation,,, gettext, GNU Gettext Utilities}). For example, assuming +you write news entries in English first, the command below creates a PO +file containing the strings to translate: + +@example +xgettext -o news.po -l scheme -ken etc/news.scm +@end example + +To sum up, yes, you could use your channel as a blog. But beware, this +is @emph{not quite} what your users might expect. + @subsection Replicating Guix @cindex pinning, channels @@ -4835,7 +4964,9 @@ specified binaries and symlinks. @item docker This produces a tarball that follows the @uref{https://github.com/docker/docker/blob/master/image/spec/v1.2.md, -Docker Image Specification}. +Docker Image Specification}. The ``repository name'' as it appears in +the output of the @command{docker images} command is computed from +package names passed on the command line or in the manifest file. @item squashfs This produces a SquashFS image containing all the specified binaries and @@ -6050,7 +6181,7 @@ package, correctly capitalized. For packages requiring shared library dependencies, you may need to write the @file{/deps/deps.jl} file manually. It's usually a line of @code{const -variable = /gnu/store/libary.so} for each dependency, plus a void function +variable = /gnu/store/library.so} for each dependency, plus a void function @code{check_deps() = nothing}. Some older packages that aren't using @file{Package.toml} yet, will require @@ -13041,6 +13172,33 @@ objects}). @end table @end deftp +@cindex nftables +@defvr {Scheme Variable} nftables-service-type +This is the service type to set up a nftables configuration. nftables is a +netfilter project that aims to replace the existing iptables, ip6tables, +arptables and ebtables framework. It provides a new packet filtering +framework, a new user-space utility @command{nft}, and a compatibility layer +for iptables. This service comes with a default ruleset +@code{%default-nftables-ruleset} that rejecting all incomming connections +except those to the ssh port 22. To use it, simply write: + +@lisp +(service nftables-service-type) +@end lisp +@end defvr + +@deftp {Data Type} nftables-configuration +The data type representing the configuration of nftables. + +@table @asis +@item @code{package} (default: @code{nftables}) +The nftables package that provides @command{nft}. +@item @code{ruleset} (default: @code{%default-nftables-ruleset}) +The nftables ruleset to use. This may be any ``file-like'' object +(@pxref{G-Expressions, file-like objects}). +@end table +@end deftp + @cindex NTP (Network Time Protocol), service @cindex ntpd, service for the Network Time Protocol daemon @cindex real time clock diff --git a/doc/local.mk b/doc/local.mk index 42dd09f089..a361f2388e 100644 --- a/doc/local.mk +++ b/doc/local.mk @@ -26,7 +26,8 @@ info_TEXINFOS = %D%/guix.texi \ %D%/guix.es.texi \ %D%/guix.fr.texi \ %D%/guix.ru.texi \ - %D%/guix.zh_CN.texi + %D%/guix.zh_CN.texi \ + %D%/guix-cookbook.texi %C%_guix_TEXINFOS = \ %D%/contributing.texi \ @@ -109,6 +110,12 @@ $(srcdir)/%D%/guix.%.texi: po/doc/guix-manual.%.po $(srcdir)/%D%/contributing.%. -$(AM_V_POXREF)$(xref_command) -mv "$@.tmp" "$@" +$(srcdir)/%D%/guix-cookbook.%.texi: po/doc/guix-cookbook.%.po + -$(AM_V_PO4A)$(PO4A_TRANSLATE) $(PO4A_PARAMS) -m "%D%/guix-cookbook.texi" -p "$<" -l "$@.tmp" + -sed -i "s|guix-cookbook\.info|$$(basename "$@" | sed 's|texi$$|info|')|" "$@.tmp" + -$(AM_V_POXREF)$(xref_command) + -mv "$@.tmp" "$@" + $(srcdir)/%D%/contributing.%.texi: po/doc/guix-manual.%.po -$(AM_V_PO4A)$(PO4A_TRANSLATE) $(PO4A_PARAMS) -m "%D%/contributing.texi" -p "$<" -l "$@.tmp" -$(AM_V_POXREF)$(xref_command) diff --git a/etc/news.scm b/etc/news.scm new file mode 100644 index 0000000000..736e8b5516 --- /dev/null +++ b/etc/news.scm @@ -0,0 +1,30 @@ +;; GNU Guix news, for use by 'guix pull'. +;; +;; Copyright © 2019 Ludovic Courtès +;; +;; Copying and distribution of this file, with or without modification, are +;; permitted in any medium without royalty provided the copyright notice and +;; this notice are preserved. + +(channel-news + (version 0) + (entry (commit "dcc90d15581189dbc30e201db2b807273d6484f0") + (title (en "New channel news mechanism") + (de "Neuer Mechanismus, um Neuigkeiten über Kanäle anzuzeigen.") + (fr "Nouveau mécanisme d'information sur les canaux")) + (body + (en "You are reading this message through the new channel news +mechanism, congratulations! This mechanism allows channel authors to provide +@dfn{news entries} that their users can view with @command{guix pull --news}. +Run @command{info \"(guix) Invoking guix pull\"} for more info.") + (de "Sie lesen diese Meldung mit Hilfe des neuen Mechanismus, um +Neuigkeiten über Kanäle anzuzeigen — Glückwunsch! Mit diesem +Mechanismus können Kanalautoren Ihren Nutzern @dfn{Einträge zu +Neuigkeiten} mitteilen, die diese sich mit @command{guix pull --news} +anzeigen lassen können. Führen Sie @command{info \"(guix.de) Aufruf +von guix pull\"} aus, um weitere Informationen zu erhalten.") + (fr "Ce message t'arrive à travers le nouveau mécanisme d'information +des canaux, bravo ! Ce mécanisme permet aux auteur·rice·s de canaux de +fournir des informations qu'on peut visualiser avec @command{guix pull +--news}. Tape @command{info \"(guix.fr) Invoquer guix pull\"} pour plus de +détails.")))) diff --git a/gnu/installer/newt/partition.scm b/gnu/installer/newt/partition.scm index cd9d46316a..7a9f11a15e 100644 --- a/gnu/installer/newt/partition.scm +++ b/gnu/installer/newt/partition.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2018 Mathieu Othacehe +;;; Copyright © 2018, 2019 Mathieu Othacehe ;;; Copyright © 2019 Ludovic Courtès ;;; ;;; This file is part of GNU Guix. @@ -159,14 +159,14 @@ USER-PARTITIONS list. Return this list with password fields filled-in." (format #f (G_ "Please enter the password for the \ encryption of partition ~a (label: ~a).") file-name crypt-label) (G_ "Password required") - #:input-hide-checkbox? #t))) + #:input-visibility-checkbox? #t))) (password-confirm-page (lambda () (run-input-page (format #f (G_ "Please confirm the password for the \ encryption of partition ~a (label: ~a).") file-name crypt-label) (G_ "Password confirmation required") - #:input-hide-checkbox? #t)))) + #:input-visibility-checkbox? #t)))) (if crypt-label (let loop () (let ((password (password-page)) diff --git a/gnu/local.mk b/gnu/local.mk index 5705494090..2fcd2648ed 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -143,6 +143,7 @@ GNU_SYSTEM_MODULES = \ %D%/packages/dejagnu.scm \ %D%/packages/dico.scm \ %D%/packages/dictionaries.scm \ + %D%/packages/diffoscope.scm \ %D%/packages/digest.scm \ %D%/packages/direct-connect.scm \ %D%/packages/disk.scm \ @@ -270,6 +271,7 @@ GNU_SYSTEM_MODULES = \ %D%/packages/jrnl.scm \ %D%/packages/jose.scm \ %D%/packages/julia.scm \ + %D%/packages/jupyter.scm \ %D%/packages/kawa.scm \ %D%/packages/kde.scm \ %D%/packages/kde-frameworks.scm \ @@ -789,10 +791,10 @@ dist_patch_DATA = \ %D%/packages/patches/emacs-highlight-stages-add-gexp.patch \ %D%/packages/patches/emacs-scheme-complete-scheme-r5rs-info.patch \ %D%/packages/patches/emacs-source-date-epoch.patch \ - %D%/packages/patches/emacs-unpackaged-req.patch \ %D%/packages/patches/emacs-undohist-ignored.patch \ %D%/packages/patches/emacs-wordnut-require-adaptive-wrap.patch \ %D%/packages/patches/emacs-zones-called-interactively.patch \ + %D%/packages/patches/enjarify-setup-py.patch \ %D%/packages/patches/enlightenment-fix-setuid-path.patch \ %D%/packages/patches/erlang-man-path.patch \ %D%/packages/patches/eudev-rules-directory.patch \ diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm index 2e072deed7..327abe455a 100644 --- a/gnu/packages/admin.scm +++ b/gnu/packages/admin.scm @@ -25,6 +25,7 @@ ;;; Copyright © 2018 Pierre Neidhardt ;;; Copyright © 2019 Brett Gilio ;;; Copyright © 2019 Björn Höfling +;;; Copyright © 2019 Jakob L. Kreuze ;;; ;;; This file is part of GNU Guix. ;;; @@ -55,6 +56,7 @@ #:use-module (guix build-system python) #:use-module (guix build-system trivial) #:use-module (gnu packages) + #:use-module (gnu packages algebra) #:use-module (gnu packages base) #:use-module (gnu packages bash) #:use-module (gnu packages check) @@ -684,7 +686,7 @@ connection alive.") (define-public isc-dhcp (let* ((bind-major-version "9") (bind-minor-version "11") - (bind-patch-version "10") + (bind-patch-version "11") (bind-release-type "") ; for patch release, use "-P" (bind-release-version "") ; for patch release, e.g. "6" (bind-version (string-append bind-major-version @@ -825,7 +827,7 @@ connection alive.") "/bind-" bind-version ".tar.gz")) (sha256 (base32 - "1hvhdaar9swh5087kzkbmav1nbn19rxh0m60x0d7gri0v8689fxj")))) + "0swavslyli3vcrkcm2ip11s6p58g3k7r4gjs2b899r25cqrk0lk1")))) ;; When cross-compiling, we need the cross Coreutils and sed. ;; Otherwise just use those from %FINAL-INPUTS. @@ -2751,6 +2753,64 @@ used in screenshots to show other users what operating system or distribution you are running, what theme or icon set you are using, etc.") (license license:expat))) +(define-public screenfetch + ;; First commit supporting current Guix System. + (let ((commit "e3ec82dd464e81e4d10bef218b3016e3044c766c")) + (package + (name "screenfetch") + (version (git-version "3.8.0" "1" commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/KittyKatt/screenFetch") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1lzs1l5xgj9mn4b59lhkfgqnyiivf8svd1iwjabzrax90rdmxfwj")))) + (build-system trivial-build-system) + (arguments + `(#:modules ((guix build utils)) + #:builder + (begin + (use-modules (guix build utils)) + (let ((source (assoc-ref %build-inputs "source")) + (out (assoc-ref %outputs "out"))) + (mkdir-p (string-append out "/bin/")) + (copy-file (string-append source "/screenfetch-dev") + (string-append out "/bin/screenfetch")) + (install-file (string-append source "/screenfetch.1") + (string-append out "/man/man1/")) + (install-file (string-append source "/COPYING") + (string-append out "/share/doc/" ,name "-" ,version)) + (substitute* (string-append out "/bin/screenfetch") + (("/usr/bin/env bash") + (string-append (assoc-ref %build-inputs "bash") + "/bin/bash"))) + (wrap-program + (string-append out "/bin/screenfetch") + `("PATH" ":" prefix + (,(string-append (assoc-ref %build-inputs "bc") "/bin:" + (assoc-ref %build-inputs "scrot") "/bin:" + (assoc-ref %build-inputs "xdpyinfo") "/bin" + (assoc-ref %build-inputs "xprop") "/bin")))) + (substitute* (string-append out "/bin/screenfetch") + (("#!#f") + (string-append "#!" (assoc-ref %build-inputs "bash") + "/bin/bash"))))))) + (inputs + `(("bash" ,bash) + ("bc" ,bc) + ("scrot" ,scrot) + ("xdpyinfo" ,xdpyinfo) + ("xprop" ,xprop))) + (home-page "https://github.com/KittyKatt/screenFetch") + (synopsis "System information script") + (description "Bash screenshot information tool which can be used to +generate those nifty terminal theme information and ASCII distribution logos in +everyone's screenshots nowadays.") + (license license:gpl3)))) + (define-public nnn (package (name "nnn") diff --git a/gnu/packages/android.scm b/gnu/packages/android.scm index fd900aaf03..b312c5b2af 100644 --- a/gnu/packages/android.scm +++ b/gnu/packages/android.scm @@ -40,6 +40,7 @@ #:use-module (gnu packages docker) #:use-module (gnu packages gcc) #:use-module (gnu packages gnupg) + #:use-module (gnu packages java) #:use-module (gnu packages linux) #:use-module (gnu packages pcre) #:use-module (gnu packages python) @@ -936,3 +937,60 @@ these same tools to create your own additional or alternative repository for publishing, or to assist in creating, testing and submitting metadata to the main repository.") (license license:agpl3+))) + +(define-public enjarify + (package + (name "enjarify") + (version "1.0.3") + (home-page "https://github.com/Storyyeller/enjarify") + (source + (origin + (method git-fetch) + (uri (git-reference + (url home-page) + (commit version))) + (file-name (git-file-name name version)) + (patches + (search-patches "enjarify-setup-py.patch")) + (sha256 + (base32 + "1nam7h1g4f1h6jla4qcjjagnyvd24dv6d5445w04q8hx07nxdapk")))) + (build-system python-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'enjarify-wrapper-inherit-pythonpath + ;; enjarify sets PYTHONPATH from a shell script, overwriting + ;; PYTHONPATH set from guix. Comment out this line. + (lambda _ + (substitute* "enjarify.sh" + (("export PYTHONPATH") "# export PYTHONPATH")) + #t)) + (add-before 'check 'fixup-expected-test-results + ;; Upstream adjusted this test in commit: + ;; 3ae884a6485af82d300515813f537685b08dd800 + (lambda _ + (substitute* "tests/test2/expected.txt" + (("^20") "0")) + #t)) + (add-before 'check 'drop-java-xss-argument + ;; Upstream removed this argument in order to support 32-bit + ;; architectures. commit: 4be0111d879aa95fdc0d9f24fe529f8c664d4093 + (lambda _ + (substitute* "enjarify/runtests.py" + (("java -Xss515m") "java ")) + #t)) + (add-after 'install 'install-enjarify-wrapper + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out"))) + (mkdir-p (string-append out "/bin/")) + (copy-file "enjarify.sh" (string-append out "/bin/enjarify")) + #t)))))) + (native-inputs `(("openjdk" ,openjdk12))) + (synopsis "Translate Dalvik bytecode to equivalent Java bytecode") + (description "Android applications are Java programs that run on a +customized virtual machine, which is part of the Android operating system, the +Dalvik VM. Their bytecode differs from the bytecode of normal Java +applications. Enjarify can translate the Dalvik bytecode back to equivalent +Java bytecode, which simplifies the analysis of Android applications.") + (license license:asl2.0))) diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm index 1209e94e25..36fc434160 100644 --- a/gnu/packages/audio.scm +++ b/gnu/packages/audio.scm @@ -1027,7 +1027,7 @@ audio signals.") @enumerate @item Pulse-VCO, a dirac pulse oscillator with flat amplitude spectrum @item Saw-VCO, a sawtooth oscillator with 1/F amplitude spectrum -@item Rec-VCO, a square / rectange oscillator +@item Rec-VCO, a square / rectangle oscillator @end enumerate\n All oscillators are low-pass filtered to provide waveforms similar to the diff --git a/gnu/packages/aux-files/linux-libre/4.19-arm.conf b/gnu/packages/aux-files/linux-libre/4.19-arm.conf index 184f73276f..72161c09ff 100644 --- a/gnu/packages/aux-files/linux-libre/4.19-arm.conf +++ b/gnu/packages/aux-files/linux-libre/4.19-arm.conf @@ -1133,7 +1133,7 @@ CONFIG_NETFILTER_NETLINK_LOG=m CONFIG_NETFILTER_NETLINK_OSF=m CONFIG_NF_CONNTRACK=m CONFIG_NF_LOG_COMMON=m -# CONFIG_NF_LOG_NETDEV is not set +CONFIG_NF_LOG_NETDEV=m CONFIG_NETFILTER_CONNCOUNT=m CONFIG_NF_CONNTRACK_MARK=y CONFIG_NF_CONNTRACK_SECMARK=y @@ -1176,8 +1176,8 @@ CONFIG_NF_NAT_REDIRECT=y CONFIG_NETFILTER_SYNPROXY=m CONFIG_NF_TABLES=m CONFIG_NF_TABLES_SET=m -# CONFIG_NF_TABLES_INET is not set -# CONFIG_NF_TABLES_NETDEV is not set +CONFIG_NF_TABLES_INET=y +CONFIG_NF_TABLES_NETDEV=y CONFIG_NFT_NUMGEN=m CONFIG_NFT_CT=m CONFIG_NFT_FLOW_OFFLOAD=m @@ -1189,15 +1189,22 @@ CONFIG_NFT_MASQ=m CONFIG_NFT_REDIR=m CONFIG_NFT_NAT=m CONFIG_NFT_TUNNEL=m -# CONFIG_NFT_OBJREF is not set +CONFIG_NFT_OBJREF=m CONFIG_NFT_QUEUE=m CONFIG_NFT_QUOTA=m CONFIG_NFT_REJECT=m +CONFIG_NFT_REJECT_INET=m CONFIG_NFT_COMPAT=m CONFIG_NFT_HASH=m +CONFIG_NFT_FIB=m +CONFIG_NFT_FIB_INET=m CONFIG_NFT_SOCKET=m CONFIG_NFT_OSF=m CONFIG_NFT_TPROXY=m +CONFIG_NF_DUP_NETDEV=m +CONFIG_NFT_DUP_NETDEV=m +CONFIG_NFT_FWD_NETDEV=m +CONFIG_NFT_FIB_NETDEV=m CONFIG_NF_FLOW_TABLE_INET=m CONFIG_NF_FLOW_TABLE=m CONFIG_NETFILTER_XTABLES=m @@ -1361,8 +1368,12 @@ CONFIG_IP_VS_PE_SIP=m CONFIG_NF_DEFRAG_IPV4=m CONFIG_NF_SOCKET_IPV4=m CONFIG_NF_TPROXY_IPV4=m -# CONFIG_NF_TABLES_IPV4 is not set -# CONFIG_NF_TABLES_ARP is not set +CONFIG_NF_TABLES_IPV4=y +CONFIG_NFT_CHAIN_ROUTE_IPV4=m +CONFIG_NFT_REJECT_IPV4=m +CONFIG_NFT_DUP_IPV4=m +CONFIG_NFT_FIB_IPV4=m +CONFIG_NF_TABLES_ARP=y CONFIG_NF_FLOW_TABLE_IPV4=m CONFIG_NF_DUP_IPV4=m CONFIG_NF_LOG_ARP=m @@ -1370,6 +1381,9 @@ CONFIG_NF_LOG_IPV4=m CONFIG_NF_REJECT_IPV4=m CONFIG_NF_NAT_IPV4=m CONFIG_NF_NAT_MASQUERADE_IPV4=y +CONFIG_NFT_CHAIN_NAT_IPV4=m +CONFIG_NFT_MASQ_IPV4=m +CONFIG_NFT_REDIR_IPV4=m CONFIG_NF_NAT_SNMP_BASIC=m CONFIG_NF_NAT_PROTO_GRE=m CONFIG_NF_NAT_PPTP=m @@ -1401,7 +1415,14 @@ CONFIG_IP_NF_ARP_MANGLE=m # CONFIG_NF_SOCKET_IPV6=m CONFIG_NF_TPROXY_IPV6=m -# CONFIG_NF_TABLES_IPV6 is not set +CONFIG_NF_TABLES_IPV6=y +CONFIG_NFT_CHAIN_ROUTE_IPV6=m +CONFIG_NFT_CHAIN_NAT_IPV6=m +CONFIG_NFT_MASQ_IPV6=m +CONFIG_NFT_REDIR_IPV6=m +CONFIG_NFT_REJECT_IPV6=m +CONFIG_NFT_DUP_IPV6=m +CONFIG_NFT_FIB_IPV6=m CONFIG_NF_FLOW_TABLE_IPV6=m CONFIG_NF_DUP_IPV6=m CONFIG_NF_REJECT_IPV6=m @@ -1430,7 +1451,9 @@ CONFIG_IP6_NF_NAT=m CONFIG_IP6_NF_TARGET_MASQUERADE=m CONFIG_IP6_NF_TARGET_NPT=m CONFIG_NF_DEFRAG_IPV6=m -# CONFIG_NF_TABLES_BRIDGE is not set +CONFIG_NF_TABLES_BRIDGE=y +CONFIG_NFT_BRIDGE_REJECT=m +CONFIG_NF_LOG_BRIDGE=m CONFIG_BRIDGE_NF_EBTABLES=m CONFIG_BRIDGE_EBT_BROUTE=m CONFIG_BRIDGE_EBT_T_FILTER=m diff --git a/gnu/packages/aux-files/linux-libre/4.19-arm64.conf b/gnu/packages/aux-files/linux-libre/4.19-arm64.conf index 73cd300c18..47ec3c9765 100644 --- a/gnu/packages/aux-files/linux-libre/4.19-arm64.conf +++ b/gnu/packages/aux-files/linux-libre/4.19-arm64.conf @@ -1120,10 +1120,11 @@ CONFIG_NF_NAT_REDIRECT=y CONFIG_NETFILTER_SYNPROXY=m CONFIG_NF_TABLES=m CONFIG_NF_TABLES_SET=m -# CONFIG_NF_TABLES_INET is not set -# CONFIG_NF_TABLES_NETDEV is not set +CONFIG_NF_TABLES_INET=y +CONFIG_NF_TABLES_NETDEV=y CONFIG_NFT_NUMGEN=m CONFIG_NFT_CT=m +CONFIG_NFT_FLOW_OFFLOAD=m CONFIG_NFT_COUNTER=m CONFIG_NFT_CONNLIMIT=m CONFIG_NFT_LOG=m @@ -1136,12 +1137,20 @@ CONFIG_NFT_OBJREF=m CONFIG_NFT_QUEUE=m CONFIG_NFT_QUOTA=m CONFIG_NFT_REJECT=m +CONFIG_NFT_REJECT_INET=m CONFIG_NFT_COMPAT=m CONFIG_NFT_HASH=m +CONFIG_NFT_FIB=m +CONFIG_NFT_FIB_INET=m CONFIG_NFT_SOCKET=m CONFIG_NFT_OSF=m CONFIG_NFT_TPROXY=m -# CONFIG_NF_FLOW_TABLE is not set +CONFIG_NF_DUP_NETDEV=m +CONFIG_NFT_DUP_NETDEV=m +CONFIG_NFT_FWD_NETDEV=m +CONFIG_NFT_FIB_NETDEV=m +CONFIG_NF_FLOW_TABLE_INET=m +CONFIG_NF_FLOW_TABLE=m CONFIG_NETFILTER_XTABLES=m # @@ -1303,14 +1312,22 @@ CONFIG_IP_VS_PE_SIP=m CONFIG_NF_DEFRAG_IPV4=m CONFIG_NF_SOCKET_IPV4=m CONFIG_NF_TPROXY_IPV4=m -# CONFIG_NF_TABLES_IPV4 is not set -# CONFIG_NF_TABLES_ARP is not set +CONFIG_NF_TABLES_IPV4=y +CONFIG_NFT_CHAIN_ROUTE_IPV4=m +CONFIG_NFT_REJECT_IPV4=m +CONFIG_NFT_DUP_IPV4=m +CONFIG_NFT_FIB_IPV4=m +CONFIG_NF_TABLES_ARP=y +CONFIG_NF_FLOW_TABLE_IPV4=m CONFIG_NF_DUP_IPV4=m CONFIG_NF_LOG_ARP=m CONFIG_NF_LOG_IPV4=m CONFIG_NF_REJECT_IPV4=m CONFIG_NF_NAT_IPV4=m CONFIG_NF_NAT_MASQUERADE_IPV4=y +CONFIG_NFT_CHAIN_NAT_IPV4=m +CONFIG_NFT_MASQ_IPV4=m +CONFIG_NFT_REDIR_IPV4=m CONFIG_NF_NAT_SNMP_BASIC=m CONFIG_NF_NAT_PROTO_GRE=m CONFIG_NF_NAT_PPTP=m @@ -1342,7 +1359,15 @@ CONFIG_IP_NF_ARP_MANGLE=m # CONFIG_NF_SOCKET_IPV6=m CONFIG_NF_TPROXY_IPV6=m -# CONFIG_NF_TABLES_IPV6 is not set +CONFIG_NF_TABLES_IPV6=y +CONFIG_NFT_CHAIN_ROUTE_IPV6=m +CONFIG_NFT_CHAIN_NAT_IPV6=m +CONFIG_NFT_MASQ_IPV6=m +CONFIG_NFT_REDIR_IPV6=m +CONFIG_NFT_REJECT_IPV6=m +CONFIG_NFT_DUP_IPV6=m +CONFIG_NFT_FIB_IPV6=m +CONFIG_NF_FLOW_TABLE_IPV6=m CONFIG_NF_DUP_IPV6=m CONFIG_NF_REJECT_IPV6=m CONFIG_NF_LOG_IPV6=m @@ -1358,7 +1383,7 @@ CONFIG_IP6_NF_MATCH_IPV6HEADER=m CONFIG_IP6_NF_MATCH_MH=m CONFIG_IP6_NF_MATCH_RPFILTER=m CONFIG_IP6_NF_MATCH_RT=m -# CONFIG_IP6_NF_MATCH_SRH is not set +CONFIG_IP6_NF_MATCH_SRH=m CONFIG_IP6_NF_TARGET_HL=m CONFIG_IP6_NF_FILTER=m CONFIG_IP6_NF_TARGET_REJECT=m @@ -1370,7 +1395,9 @@ CONFIG_IP6_NF_NAT=m CONFIG_IP6_NF_TARGET_MASQUERADE=m CONFIG_IP6_NF_TARGET_NPT=m CONFIG_NF_DEFRAG_IPV6=m -# CONFIG_NF_TABLES_BRIDGE is not set +CONFIG_NF_TABLES_BRIDGE=y +CONFIG_NFT_BRIDGE_REJECT=m +CONFIG_NF_LOG_BRIDGE=m CONFIG_BRIDGE_NF_EBTABLES=m CONFIG_BRIDGE_EBT_BROUTE=m CONFIG_BRIDGE_EBT_T_FILTER=m diff --git a/gnu/packages/aux-files/linux-libre/4.19-i686.conf b/gnu/packages/aux-files/linux-libre/4.19-i686.conf index c1df3f0f49..75a18ec5ef 100644 --- a/gnu/packages/aux-files/linux-libre/4.19-i686.conf +++ b/gnu/packages/aux-files/linux-libre/4.19-i686.conf @@ -1209,8 +1209,8 @@ CONFIG_NF_NAT_REDIRECT=y CONFIG_NETFILTER_SYNPROXY=m CONFIG_NF_TABLES=m CONFIG_NF_TABLES_SET=m -# CONFIG_NF_TABLES_INET is not set -# CONFIG_NF_TABLES_NETDEV is not set +CONFIG_NF_TABLES_INET=y +CONFIG_NF_TABLES_NETDEV=y CONFIG_NFT_NUMGEN=m CONFIG_NFT_CT=m CONFIG_NFT_FLOW_OFFLOAD=m @@ -1226,11 +1226,18 @@ CONFIG_NFT_OBJREF=m CONFIG_NFT_QUEUE=m CONFIG_NFT_QUOTA=m CONFIG_NFT_REJECT=m +CONFIG_NFT_REJECT_INET=m CONFIG_NFT_COMPAT=m CONFIG_NFT_HASH=m +CONFIG_NFT_FIB=m +CONFIG_NFT_FIB_INET=m CONFIG_NFT_SOCKET=m CONFIG_NFT_OSF=m CONFIG_NFT_TPROXY=m +CONFIG_NF_DUP_NETDEV=m +CONFIG_NFT_DUP_NETDEV=m +CONFIG_NFT_FWD_NETDEV=m +CONFIG_NFT_FIB_NETDEV=m CONFIG_NF_FLOW_TABLE_INET=m CONFIG_NF_FLOW_TABLE=m CONFIG_NETFILTER_XTABLES=m @@ -1394,8 +1401,12 @@ CONFIG_IP_VS_PE_SIP=m CONFIG_NF_DEFRAG_IPV4=m CONFIG_NF_SOCKET_IPV4=m CONFIG_NF_TPROXY_IPV4=m -# CONFIG_NF_TABLES_IPV4 is not set -# CONFIG_NF_TABLES_ARP is not set +CONFIG_NF_TABLES_IPV4=y +CONFIG_NFT_CHAIN_ROUTE_IPV4=m +CONFIG_NFT_REJECT_IPV4=m +CONFIG_NFT_DUP_IPV4=m +CONFIG_NFT_FIB_IPV4=m +CONFIG_NF_TABLES_ARP=y CONFIG_NF_FLOW_TABLE_IPV4=m CONFIG_NF_DUP_IPV4=m CONFIG_NF_LOG_ARP=m @@ -1403,6 +1414,9 @@ CONFIG_NF_LOG_IPV4=m CONFIG_NF_REJECT_IPV4=m CONFIG_NF_NAT_IPV4=m CONFIG_NF_NAT_MASQUERADE_IPV4=y +CONFIG_NFT_CHAIN_NAT_IPV4=m +CONFIG_NFT_MASQ_IPV4=m +CONFIG_NFT_REDIR_IPV4=m CONFIG_NF_NAT_SNMP_BASIC=m CONFIG_NF_NAT_PROTO_GRE=m CONFIG_NF_NAT_PPTP=m @@ -1434,7 +1448,14 @@ CONFIG_IP_NF_ARP_MANGLE=m # CONFIG_NF_SOCKET_IPV6=m CONFIG_NF_TPROXY_IPV6=m -# CONFIG_NF_TABLES_IPV6 is not set +CONFIG_NF_TABLES_IPV6=y +CONFIG_NFT_CHAIN_ROUTE_IPV6=m +CONFIG_NFT_CHAIN_NAT_IPV6=m +CONFIG_NFT_MASQ_IPV6=m +CONFIG_NFT_REDIR_IPV6=m +CONFIG_NFT_REJECT_IPV6=m +CONFIG_NFT_DUP_IPV6=m +CONFIG_NFT_FIB_IPV6=m CONFIG_NF_FLOW_TABLE_IPV6=m CONFIG_NF_DUP_IPV6=m CONFIG_NF_REJECT_IPV6=m @@ -1468,7 +1489,9 @@ CONFIG_NF_DEFRAG_IPV6=m # DECnet: Netfilter Configuration # CONFIG_DECNET_NF_GRABULATOR=m -# CONFIG_NF_TABLES_BRIDGE is not set +CONFIG_NF_TABLES_BRIDGE=y +CONFIG_NFT_BRIDGE_REJECT=m +CONFIG_NF_LOG_BRIDGE=m CONFIG_BRIDGE_NF_EBTABLES=m CONFIG_BRIDGE_EBT_BROUTE=m CONFIG_BRIDGE_EBT_T_FILTER=m diff --git a/gnu/packages/aux-files/linux-libre/4.19-x86_64.conf b/gnu/packages/aux-files/linux-libre/4.19-x86_64.conf index a8f8c81648..f151036410 100644 --- a/gnu/packages/aux-files/linux-libre/4.19-x86_64.conf +++ b/gnu/packages/aux-files/linux-libre/4.19-x86_64.conf @@ -1219,8 +1219,8 @@ CONFIG_NF_NAT_REDIRECT=y CONFIG_NETFILTER_SYNPROXY=m CONFIG_NF_TABLES=m CONFIG_NF_TABLES_SET=m -# CONFIG_NF_TABLES_INET is not set -# CONFIG_NF_TABLES_NETDEV is not set +CONFIG_NF_TABLES_INET=y +CONFIG_NF_TABLES_NETDEV=y CONFIG_NFT_NUMGEN=m CONFIG_NFT_CT=m CONFIG_NFT_FLOW_OFFLOAD=m @@ -1236,11 +1236,18 @@ CONFIG_NFT_OBJREF=m CONFIG_NFT_QUEUE=m CONFIG_NFT_QUOTA=m CONFIG_NFT_REJECT=m +CONFIG_NFT_REJECT_INET=m CONFIG_NFT_COMPAT=m CONFIG_NFT_HASH=m +CONFIG_NFT_FIB=m +CONFIG_NFT_FIB_INET=m CONFIG_NFT_SOCKET=m CONFIG_NFT_OSF=m CONFIG_NFT_TPROXY=m +CONFIG_NF_DUP_NETDEV=m +CONFIG_NFT_DUP_NETDEV=m +CONFIG_NFT_FWD_NETDEV=m +CONFIG_NFT_FIB_NETDEV=m CONFIG_NF_FLOW_TABLE_INET=m CONFIG_NF_FLOW_TABLE=m CONFIG_NETFILTER_XTABLES=m @@ -1404,8 +1411,12 @@ CONFIG_IP_VS_PE_SIP=m CONFIG_NF_DEFRAG_IPV4=m CONFIG_NF_SOCKET_IPV4=m CONFIG_NF_TPROXY_IPV4=m -# CONFIG_NF_TABLES_IPV4 is not set -# CONFIG_NF_TABLES_ARP is not set +CONFIG_NF_TABLES_IPV4=y +CONFIG_NFT_CHAIN_ROUTE_IPV4=m +CONFIG_NFT_REJECT_IPV4=m +CONFIG_NFT_DUP_IPV4=m +CONFIG_NFT_FIB_IPV4=m +CONFIG_NF_TABLES_ARP=y CONFIG_NF_FLOW_TABLE_IPV4=m CONFIG_NF_DUP_IPV4=m CONFIG_NF_LOG_ARP=m @@ -1413,6 +1424,9 @@ CONFIG_NF_LOG_IPV4=m CONFIG_NF_REJECT_IPV4=m CONFIG_NF_NAT_IPV4=m CONFIG_NF_NAT_MASQUERADE_IPV4=y +CONFIG_NFT_CHAIN_NAT_IPV4=m +CONFIG_NFT_MASQ_IPV4=m +CONFIG_NFT_REDIR_IPV4=m CONFIG_NF_NAT_SNMP_BASIC=m CONFIG_NF_NAT_PROTO_GRE=m CONFIG_NF_NAT_PPTP=m @@ -1444,7 +1458,14 @@ CONFIG_IP_NF_ARP_MANGLE=m # CONFIG_NF_SOCKET_IPV6=m CONFIG_NF_TPROXY_IPV6=m -# CONFIG_NF_TABLES_IPV6 is not set +CONFIG_NF_TABLES_IPV6=y +CONFIG_NFT_CHAIN_ROUTE_IPV6=m +CONFIG_NFT_CHAIN_NAT_IPV6=m +CONFIG_NFT_MASQ_IPV6=m +CONFIG_NFT_REDIR_IPV6=m +CONFIG_NFT_REJECT_IPV6=m +CONFIG_NFT_DUP_IPV6=m +CONFIG_NFT_FIB_IPV6=m CONFIG_NF_FLOW_TABLE_IPV6=m CONFIG_NF_DUP_IPV6=m CONFIG_NF_REJECT_IPV6=m @@ -1478,7 +1499,9 @@ CONFIG_NF_DEFRAG_IPV6=m # DECnet: Netfilter Configuration # CONFIG_DECNET_NF_GRABULATOR=m -# CONFIG_NF_TABLES_BRIDGE is not set +CONFIG_NF_TABLES_BRIDGE=y +CONFIG_NFT_BRIDGE_REJECT=m +CONFIG_NF_LOG_BRIDGE=m CONFIG_BRIDGE_NF_EBTABLES=m CONFIG_BRIDGE_EBT_BROUTE=m CONFIG_BRIDGE_EBT_T_FILTER=m diff --git a/gnu/packages/aux-files/linux-libre/5.2-arm.conf b/gnu/packages/aux-files/linux-libre/5.2-arm.conf index 4ac8ed642d..7cab0ab66c 100644 --- a/gnu/packages/aux-files/linux-libre/5.2-arm.conf +++ b/gnu/packages/aux-files/linux-libre/5.2-arm.conf @@ -1117,7 +1117,7 @@ CONFIG_NETFILTER_NETLINK_LOG=m CONFIG_NETFILTER_NETLINK_OSF=m CONFIG_NF_CONNTRACK=m CONFIG_NF_LOG_COMMON=m -# CONFIG_NF_LOG_NETDEV is not set +CONFIG_NF_LOG_NETDEV=m CONFIG_NETFILTER_CONNCOUNT=m CONFIG_NF_CONNTRACK_MARK=y CONFIG_NF_CONNTRACK_SECMARK=y @@ -1157,8 +1157,8 @@ CONFIG_NF_NAT_MASQUERADE=y CONFIG_NETFILTER_SYNPROXY=m CONFIG_NF_TABLES=m CONFIG_NF_TABLES_SET=m -# CONFIG_NF_TABLES_INET is not set -# CONFIG_NF_TABLES_NETDEV is not set +CONFIG_NF_TABLES_INET=y +CONFIG_NF_TABLES_NETDEV=y CONFIG_NFT_NUMGEN=m CONFIG_NFT_CT=m CONFIG_NFT_FLOW_OFFLOAD=m @@ -1168,17 +1168,25 @@ CONFIG_NFT_LOG=m CONFIG_NFT_LIMIT=m CONFIG_NFT_MASQ=m CONFIG_NFT_REDIR=m +CONFIG_NFT_NAT=m CONFIG_NFT_TUNNEL=m -# CONFIG_NFT_OBJREF is not set +CONFIG_NFT_OBJREF=m CONFIG_NFT_QUEUE=m CONFIG_NFT_QUOTA=m CONFIG_NFT_REJECT=m +CONFIG_NFT_REJECT_INET=m CONFIG_NFT_COMPAT=m CONFIG_NFT_HASH=m +CONFIG_NFT_FIB=m +CONFIG_NFT_FIB_INET=m CONFIG_NFT_XFRM=m CONFIG_NFT_SOCKET=m CONFIG_NFT_OSF=m CONFIG_NFT_TPROXY=m +CONFIG_NF_DUP_NETDEV=m +CONFIG_NFT_DUP_NETDEV=m +CONFIG_NFT_FWD_NETDEV=m +CONFIG_NFT_FIB_NETDEV=m CONFIG_NF_FLOW_TABLE_INET=m CONFIG_NF_FLOW_TABLE=m CONFIG_NETFILTER_XTABLES=m @@ -1345,8 +1353,11 @@ CONFIG_IP_VS_PE_SIP=m CONFIG_NF_DEFRAG_IPV4=m CONFIG_NF_SOCKET_IPV4=m CONFIG_NF_TPROXY_IPV4=m -# CONFIG_NF_TABLES_IPV4 is not set -# CONFIG_NF_TABLES_ARP is not set +CONFIG_NF_TABLES_IPV4=y +CONFIG_NFT_REJECT_IPV4=m +CONFIG_NFT_DUP_IPV4=m +CONFIG_NFT_FIB_IPV4=m +CONFIG_NF_TABLES_ARP=y CONFIG_NF_FLOW_TABLE_IPV4=m CONFIG_NF_DUP_IPV4=m CONFIG_NF_LOG_ARP=m @@ -1383,7 +1394,10 @@ CONFIG_IP_NF_ARP_MANGLE=m # CONFIG_NF_SOCKET_IPV6=m CONFIG_NF_TPROXY_IPV6=m -# CONFIG_NF_TABLES_IPV6 is not set +CONFIG_NF_TABLES_IPV6=y +CONFIG_NFT_REJECT_IPV6=m +CONFIG_NFT_DUP_IPV6=m +CONFIG_NFT_FIB_IPV6=m CONFIG_NF_FLOW_TABLE_IPV6=m CONFIG_NF_DUP_IPV6=m CONFIG_NF_REJECT_IPV6=m @@ -1412,7 +1426,9 @@ CONFIG_IP6_NF_TARGET_NPT=m # end of IPv6: Netfilter Configuration CONFIG_NF_DEFRAG_IPV6=m -# CONFIG_NF_TABLES_BRIDGE is not set +CONFIG_NF_TABLES_BRIDGE=y +CONFIG_NFT_BRIDGE_REJECT=m +CONFIG_NF_LOG_BRIDGE=m CONFIG_BRIDGE_NF_EBTABLES=m CONFIG_BRIDGE_EBT_BROUTE=m CONFIG_BRIDGE_EBT_T_FILTER=m diff --git a/gnu/packages/aux-files/linux-libre/5.2-arm64.conf b/gnu/packages/aux-files/linux-libre/5.2-arm64.conf index 4ad652a78f..99ff63354f 100644 --- a/gnu/packages/aux-files/linux-libre/5.2-arm64.conf +++ b/gnu/packages/aux-files/linux-libre/5.2-arm64.conf @@ -1118,28 +1118,38 @@ CONFIG_NF_NAT_MASQUERADE=y CONFIG_NETFILTER_SYNPROXY=m CONFIG_NF_TABLES=m CONFIG_NF_TABLES_SET=m -# CONFIG_NF_TABLES_INET is not set -# CONFIG_NF_TABLES_NETDEV is not set +CONFIG_NF_TABLES_INET=y +CONFIG_NF_TABLES_NETDEV=y CONFIG_NFT_NUMGEN=m CONFIG_NFT_CT=m +# CONFIG_NFT_FLOW_OFFLOAD is not set CONFIG_NFT_COUNTER=m CONFIG_NFT_CONNLIMIT=m CONFIG_NFT_LOG=m CONFIG_NFT_LIMIT=m CONFIG_NFT_MASQ=m CONFIG_NFT_REDIR=m +CONFIG_NFT_NAT=m CONFIG_NFT_TUNNEL=m CONFIG_NFT_OBJREF=m CONFIG_NFT_QUEUE=m CONFIG_NFT_QUOTA=m CONFIG_NFT_REJECT=m +CONFIG_NFT_REJECT_INET=m CONFIG_NFT_COMPAT=m CONFIG_NFT_HASH=m +CONFIG_NFT_FIB=m +CONFIG_NFT_FIB_INET=m CONFIG_NFT_XFRM=m CONFIG_NFT_SOCKET=m CONFIG_NFT_OSF=m CONFIG_NFT_TPROXY=m -# CONFIG_NF_FLOW_TABLE is not set +CONFIG_NF_DUP_NETDEV=m +CONFIG_NFT_DUP_NETDEV=m +CONFIG_NFT_FWD_NETDEV=m +CONFIG_NFT_FIB_NETDEV=m +CONFIG_NF_FLOW_TABLE_INET=m +CONFIG_NF_FLOW_TABLE=m CONFIG_NETFILTER_XTABLES=m # @@ -1304,8 +1314,12 @@ CONFIG_IP_VS_PE_SIP=m CONFIG_NF_DEFRAG_IPV4=m CONFIG_NF_SOCKET_IPV4=m CONFIG_NF_TPROXY_IPV4=m -# CONFIG_NF_TABLES_IPV4 is not set -# CONFIG_NF_TABLES_ARP is not set +CONFIG_NF_TABLES_IPV4=y +CONFIG_NFT_REJECT_IPV4=m +CONFIG_NFT_DUP_IPV4=m +CONFIG_NFT_FIB_IPV4=m +CONFIG_NF_TABLES_ARP=y +CONFIG_NF_FLOW_TABLE_IPV4=m CONFIG_NF_DUP_IPV4=m CONFIG_NF_LOG_ARP=m CONFIG_NF_LOG_IPV4=m @@ -1341,7 +1355,11 @@ CONFIG_IP_NF_ARP_MANGLE=m # CONFIG_NF_SOCKET_IPV6=m CONFIG_NF_TPROXY_IPV6=m -# CONFIG_NF_TABLES_IPV6 is not set +CONFIG_NF_TABLES_IPV6=y +CONFIG_NFT_REJECT_IPV6=m +CONFIG_NFT_DUP_IPV6=m +CONFIG_NFT_FIB_IPV6=m +CONFIG_NF_FLOW_TABLE_IPV6=m CONFIG_NF_DUP_IPV6=m CONFIG_NF_REJECT_IPV6=m CONFIG_NF_LOG_IPV6=m @@ -1355,7 +1373,7 @@ CONFIG_IP6_NF_MATCH_IPV6HEADER=m CONFIG_IP6_NF_MATCH_MH=m CONFIG_IP6_NF_MATCH_RPFILTER=m CONFIG_IP6_NF_MATCH_RT=m -# CONFIG_IP6_NF_MATCH_SRH is not set +CONFIG_IP6_NF_MATCH_SRH=m CONFIG_IP6_NF_TARGET_HL=m CONFIG_IP6_NF_FILTER=m CONFIG_IP6_NF_TARGET_REJECT=m @@ -1369,7 +1387,9 @@ CONFIG_IP6_NF_TARGET_NPT=m # end of IPv6: Netfilter Configuration CONFIG_NF_DEFRAG_IPV6=m -# CONFIG_NF_TABLES_BRIDGE is not set +CONFIG_NF_TABLES_BRIDGE=y +CONFIG_NFT_BRIDGE_REJECT=m +CONFIG_NF_LOG_BRIDGE=m CONFIG_BRIDGE_NF_EBTABLES=m CONFIG_BRIDGE_EBT_BROUTE=m CONFIG_BRIDGE_EBT_T_FILTER=m @@ -8028,9 +8048,9 @@ CONFIG_EXT4_USE_FOR_EXT2=y CONFIG_EXT4_FS_POSIX_ACL=y CONFIG_EXT4_FS_SECURITY=y # CONFIG_EXT4_DEBUG is not set -CONFIG_JBD2=m +CONFIG_JBD2=y # CONFIG_JBD2_DEBUG is not set -CONFIG_FS_MBCACHE=m +CONFIG_FS_MBCACHE=y CONFIG_REISERFS_FS=m # CONFIG_REISERFS_CHECK is not set # CONFIG_REISERFS_PROC_INFO is not set @@ -8687,7 +8707,7 @@ CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y CONFIG_ARCH_HAS_FAST_MULTIPLIER=y # CONFIG_INDIRECT_PIO is not set CONFIG_CRC_CCITT=m -CONFIG_CRC16=m +CONFIG_CRC16=y CONFIG_CRC_T10DIF=y CONFIG_CRC_ITU_T=m CONFIG_CRC32=y diff --git a/gnu/packages/aux-files/linux-libre/5.2-i686.conf b/gnu/packages/aux-files/linux-libre/5.2-i686.conf index 0a211f6eb9..8813a70d3d 100644 --- a/gnu/packages/aux-files/linux-libre/5.2-i686.conf +++ b/gnu/packages/aux-files/linux-libre/5.2-i686.conf @@ -1147,8 +1147,8 @@ CONFIG_NF_NAT_MASQUERADE=y CONFIG_NETFILTER_SYNPROXY=m CONFIG_NF_TABLES=m CONFIG_NF_TABLES_SET=m -# CONFIG_NF_TABLES_INET is not set -# CONFIG_NF_TABLES_NETDEV is not set +CONFIG_NF_TABLES_INET=y +CONFIG_NF_TABLES_NETDEV=y CONFIG_NFT_NUMGEN=m CONFIG_NFT_CT=m CONFIG_NFT_FLOW_OFFLOAD=m @@ -1158,17 +1158,25 @@ CONFIG_NFT_LOG=m CONFIG_NFT_LIMIT=m CONFIG_NFT_MASQ=m CONFIG_NFT_REDIR=m +CONFIG_NFT_NAT=m CONFIG_NFT_TUNNEL=m CONFIG_NFT_OBJREF=m CONFIG_NFT_QUEUE=m CONFIG_NFT_QUOTA=m CONFIG_NFT_REJECT=m +CONFIG_NFT_REJECT_INET=m CONFIG_NFT_COMPAT=m CONFIG_NFT_HASH=m +CONFIG_NFT_FIB=m +CONFIG_NFT_FIB_INET=m CONFIG_NFT_XFRM=m CONFIG_NFT_SOCKET=m CONFIG_NFT_OSF=m CONFIG_NFT_TPROXY=m +CONFIG_NF_DUP_NETDEV=m +CONFIG_NFT_DUP_NETDEV=m +CONFIG_NFT_FWD_NETDEV=m +CONFIG_NFT_FIB_NETDEV=m CONFIG_NF_FLOW_TABLE_INET=m CONFIG_NF_FLOW_TABLE=m CONFIG_NETFILTER_XTABLES=m @@ -1335,8 +1343,11 @@ CONFIG_IP_VS_PE_SIP=m CONFIG_NF_DEFRAG_IPV4=m CONFIG_NF_SOCKET_IPV4=m CONFIG_NF_TPROXY_IPV4=m -# CONFIG_NF_TABLES_IPV4 is not set -# CONFIG_NF_TABLES_ARP is not set +CONFIG_NF_TABLES_IPV4=y +CONFIG_NFT_REJECT_IPV4=m +CONFIG_NFT_DUP_IPV4=m +CONFIG_NFT_FIB_IPV4=m +CONFIG_NF_TABLES_ARP=y CONFIG_NF_FLOW_TABLE_IPV4=m CONFIG_NF_DUP_IPV4=m CONFIG_NF_LOG_ARP=m @@ -1373,7 +1384,10 @@ CONFIG_IP_NF_ARP_MANGLE=m # CONFIG_NF_SOCKET_IPV6=m CONFIG_NF_TPROXY_IPV6=m -# CONFIG_NF_TABLES_IPV6 is not set +CONFIG_NF_TABLES_IPV6=y +CONFIG_NFT_REJECT_IPV6=m +CONFIG_NFT_DUP_IPV6=m +CONFIG_NFT_FIB_IPV6=m CONFIG_NF_FLOW_TABLE_IPV6=m CONFIG_NF_DUP_IPV6=m CONFIG_NF_REJECT_IPV6=m @@ -1409,7 +1423,9 @@ CONFIG_NF_DEFRAG_IPV6=m CONFIG_DECNET_NF_GRABULATOR=m # end of DECnet: Netfilter Configuration -# CONFIG_NF_TABLES_BRIDGE is not set +CONFIG_NF_TABLES_BRIDGE=y +CONFIG_NFT_BRIDGE_REJECT=m +CONFIG_NF_LOG_BRIDGE=m CONFIG_BRIDGE_NF_EBTABLES=m CONFIG_BRIDGE_EBT_BROUTE=m CONFIG_BRIDGE_EBT_T_FILTER=m diff --git a/gnu/packages/aux-files/linux-libre/5.2-x86_64.conf b/gnu/packages/aux-files/linux-libre/5.2-x86_64.conf index 51d4e93372..e1d2c93f9a 100644 --- a/gnu/packages/aux-files/linux-libre/5.2-x86_64.conf +++ b/gnu/packages/aux-files/linux-libre/5.2-x86_64.conf @@ -1168,8 +1168,8 @@ CONFIG_NF_NAT_MASQUERADE=y CONFIG_NETFILTER_SYNPROXY=m CONFIG_NF_TABLES=m CONFIG_NF_TABLES_SET=m -# CONFIG_NF_TABLES_INET is not set -# CONFIG_NF_TABLES_NETDEV is not set +CONFIG_NF_TABLES_INET=y +CONFIG_NF_TABLES_NETDEV=y CONFIG_NFT_NUMGEN=m CONFIG_NFT_CT=m CONFIG_NFT_FLOW_OFFLOAD=m @@ -1179,17 +1179,25 @@ CONFIG_NFT_LOG=m CONFIG_NFT_LIMIT=m CONFIG_NFT_MASQ=m CONFIG_NFT_REDIR=m +CONFIG_NFT_NAT=m CONFIG_NFT_TUNNEL=m CONFIG_NFT_OBJREF=m CONFIG_NFT_QUEUE=m CONFIG_NFT_QUOTA=m CONFIG_NFT_REJECT=m +CONFIG_NFT_REJECT_INET=m CONFIG_NFT_COMPAT=m CONFIG_NFT_HASH=m +CONFIG_NFT_FIB=m +CONFIG_NFT_FIB_INET=m CONFIG_NFT_XFRM=m CONFIG_NFT_SOCKET=m CONFIG_NFT_OSF=m CONFIG_NFT_TPROXY=m +CONFIG_NF_DUP_NETDEV=m +CONFIG_NFT_DUP_NETDEV=m +CONFIG_NFT_FWD_NETDEV=m +CONFIG_NFT_FIB_NETDEV=m CONFIG_NF_FLOW_TABLE_INET=m CONFIG_NF_FLOW_TABLE=m CONFIG_NETFILTER_XTABLES=m @@ -1356,8 +1364,11 @@ CONFIG_IP_VS_PE_SIP=m CONFIG_NF_DEFRAG_IPV4=m CONFIG_NF_SOCKET_IPV4=m CONFIG_NF_TPROXY_IPV4=m -# CONFIG_NF_TABLES_IPV4 is not set -# CONFIG_NF_TABLES_ARP is not set +CONFIG_NF_TABLES_IPV4=y +CONFIG_NFT_REJECT_IPV4=m +CONFIG_NFT_DUP_IPV4=m +CONFIG_NFT_FIB_IPV4=m +CONFIG_NF_TABLES_ARP=y CONFIG_NF_FLOW_TABLE_IPV4=m CONFIG_NF_DUP_IPV4=m CONFIG_NF_LOG_ARP=m @@ -1394,7 +1405,10 @@ CONFIG_IP_NF_ARP_MANGLE=m # CONFIG_NF_SOCKET_IPV6=m CONFIG_NF_TPROXY_IPV6=m -# CONFIG_NF_TABLES_IPV6 is not set +CONFIG_NF_TABLES_IPV6=y +CONFIG_NFT_REJECT_IPV6=m +CONFIG_NFT_DUP_IPV6=m +CONFIG_NFT_FIB_IPV6=m CONFIG_NF_FLOW_TABLE_IPV6=m CONFIG_NF_DUP_IPV6=m CONFIG_NF_REJECT_IPV6=m @@ -1430,7 +1444,9 @@ CONFIG_NF_DEFRAG_IPV6=m CONFIG_DECNET_NF_GRABULATOR=m # end of DECnet: Netfilter Configuration -# CONFIG_NF_TABLES_BRIDGE is not set +CONFIG_NF_TABLES_BRIDGE=y +CONFIG_NFT_BRIDGE_REJECT=m +CONFIG_NF_LOG_BRIDGE=m CONFIG_BRIDGE_NF_EBTABLES=m CONFIG_BRIDGE_EBT_BROUTE=m CONFIG_BRIDGE_EBT_T_FILTER=m diff --git a/gnu/packages/ci.scm b/gnu/packages/ci.scm index 608cd0af23..5807c8b68c 100644 --- a/gnu/packages/ci.scm +++ b/gnu/packages/ci.scm @@ -47,8 +47,8 @@ #:use-module (guix build-system gnu)) (define-public cuirass - (let ((commit "1cd2f9334dde13542732c22753c4ebde61bc95e0") - (revision "23")) + (let ((commit "d27ff21e430cd38b02bd70a0dc8d60c9c2736f83") + (revision "24")) (package (name "cuirass") (version (string-append "0.0.1-" revision "." (string-take commit 7))) @@ -60,7 +60,7 @@ (file-name (string-append name "-" version)) (sha256 (base32 - "0r3x8gv0v89brjqi8r31p6c0mblbaf2kdk2fz99jiab4pir16w87")))) + "166xl9zfy7dm645fk2ln45bvw0y0gy0xw8fb7mprbjz8v95dh27p")))) (build-system gnu-build-system) (arguments '(#:modules ((guix build utils) diff --git a/gnu/packages/crates-io.scm b/gnu/packages/crates-io.scm index 906a8e66bf..7a0ea03a67 100644 --- a/gnu/packages/crates-io.scm +++ b/gnu/packages/crates-io.scm @@ -25,11 +25,16 @@ #:use-module ((guix licenses) #:prefix license:) #:use-module (guix packages) #:use-module (gnu packages compression) + #:use-module (gnu packages curl) #:use-module (gnu packages gcc) #:use-module (gnu packages jemalloc) #:use-module (gnu packages llvm) #:use-module (gnu packages maths) - #:use-module (gnu packages pkg-config)) + #:use-module (gnu packages pkg-config) + #:use-module (gnu packages ssh) + #:use-module (gnu packages tls) + #:use-module (gnu packages version-control) + #:use-module (gnu packages web)) ;;; ;;; Please: Try to add new module packages in alphabetic order. @@ -158,6 +163,35 @@ support.") (license (list license:asl2.0 license:expat)))) +(define-public rust-backtrace-sys + (package + (name "rust-backtrace-sys") + (version "0.1.31") + (source + (origin + (method url-fetch) + (uri (crate-uri "backtrace-sys" version)) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "0as2pk77br4br04daywhivpi1ixxb8y2c7f726kj849dxys31a42")))) + (build-system cargo-build-system) + (arguments + `(#:cargo-inputs + (("rust-compiler-builtins" + ,rust-compiler-builtins) + ("rust-libc" ,rust-libc) + ("rust-rustc-std-workspace-core" + ,rust-rustc-std-workspace-core)) + #:cargo-development-inputs + (("rust-cc" ,rust-cc)))) + (home-page "https://github.com/rust-lang/backtrace-rs") + (synopsis "Bindings to the libbacktrace gcc library") + (description + "This package provides bindings to the libbacktrace gcc library.") + (license (list license:asl2.0 + license:expat)))) + (define-public rust-base-x (package (name "rust-base-x") @@ -386,6 +420,35 @@ depending on a large number of #[cfg] parameters. Structured like an "This package provides Rust bindings for @code{libclang}.") (license license:asl2.0))) +(define-public rust-clang-sys-0.26 + (package + (inherit rust-clang-sys) + (name "rust-clang-sys") + (version "0.26.4") + (source + (origin + (method url-fetch) + (uri (crate-uri "clang-sys" version)) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1r50dwy5hj5gq07dn0qf8222d07qv0970ymx0j8n9779yayc3w3f")))) + (arguments + `(#:cargo-inputs + (("rust-glob" ,rust-glob-0.2) + ("rust-libc" ,rust-libc) + ("rust-libloading" ,rust-libloading)) + #:cargo-development-inputs + (("rust-glob" ,rust-glob-0.2)) + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'set-environmental-variable + (lambda* (#:key inputs #:allow-other-keys) + (let ((clang (assoc-ref inputs "libclang"))) + (setenv "LIBCLANG_PATH" + (string-append clang "/lib"))) + #t))))))) + (define-public rust-clicolors-control (package (name "rust-clicolors-control") @@ -412,6 +475,31 @@ depending on a large number of #[cfg] parameters. Structured like an colorization.") (license license:expat))) +(define-public rust-clippy + (package + (name "rust-clippy") + (version "0.0.302") + (source + (origin + (method url-fetch) + (uri (crate-uri "clippy" version)) + (file-name + (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1562x3sq9mgmc8j39gd34wqm7ybrdvpmj7cc1n450gwsawayw4fr")))) + (build-system cargo-build-system) + (arguments + `(#:cargo-inputs + (("rust-term" ,rust-term)))) + (home-page "https://github.com/rust-lang/rust-clippy") + (synopsis + "A bunch of helpful lints to avoid common pitfalls in Rust.") + (description + "This package provides a bunch of helpful lints to avoid common pitfalls in Rust.") + (license (list license:asl2.0 + license:expat)))) + (define-public rust-cloudabi (package (name "rust-cloudabi") @@ -529,6 +617,51 @@ It is inspired by the Linux kernel's @code{crypto_memneq}.") (license (list license:asl2.0 license:expat)))) +(define-public rust-curl-sys + (package + (name "rust-curl-sys") + (version "0.4.20") + (source + (origin + (method url-fetch) + (uri (crate-uri "curl-sys" version)) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "02542zmvl3fpdqf7ai4cqnamm4albx9j645dkjx5qr1myq8ax42y")))) + (build-system cargo-build-system) + (arguments + `(#:cargo-inputs + (("rust-libc" ,rust-libc) + ("rust-libnghttp2-sys" ,rust-libnghttp2-sys) + ("rust-libz-sys" ,rust-libz-sys) + ("rust-openssl-sys" ,rust-openssl-sys) + ("rust-winapi" ,rust-winapi)) + #:cargo-development-inputs + (("rust-cc" ,rust-cc) + ("rust-pkg-config" ,rust-pkg-config) + ("rust-openssl-src" ,rust-openssl-src) + ("rust-vcpkg" ,rust-vcpkg)) + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'find-openssl + (lambda* (#:key inputs #:allow-other-keys) + (let ((openssl (assoc-ref inputs "openssl"))) + (setenv "OPENSSL_DIR" openssl)) + #t))))) + (native-inputs + `(("pkg-config" ,pkg-config))) + (inputs + `(("curl" ,curl) + ("nghttp2" ,nghttp2) + ("openssl" ,openssl) + ("zlib" ,zlib))) + (home-page "https://github.com/alexcrichton/curl-rust") + (synopsis "Native bindings to the libcurl library") + (description + "This package provides native bindings to the @code{libcurl} library.") + (license license:expat))) + (define-public rust-data-encoding (package (name "rust-data-encoding") @@ -582,6 +715,33 @@ hexadecimal, bas32, and base64.") (base32 "17giv0n0n1r64z0dahfvkjy3ys517jxyhs8sd9lmgvcljpjyryxa")))))) +(define-public rust-dirs + (package + (name "rust-dirs") + (version "1.0.3") + (source + (origin + (method url-fetch) + (uri (crate-uri "dirs" version)) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "02vigc566z5i6n9wr2x8sch39qp4arn89xhhrh18fhpm3jfc0ygn")))) + (build-system cargo-build-system) + (arguments + `(#:cargo-inputs + (("rust-libc" ,rust-libc) + ("rust-winapi" ,rust-winapi)))) + (home-page "https://github.com/soc/dirs-rs") + (synopsis "Abstractions for standard locations for various platforms") + (description + "This package provides a tiny low-level library that provides +platform-specific standard locations of directories for config, cache and other +data on Linux, Windows, macOS and Redox by leveraging the mechanisms defined by +the XDG base/user directory specifications on Linux, the Known Folder API on +Windows, and the Standard Directory guidelines on macOS.") + (license (list license:expat license:asl2.0)))) + (define-public rust-discard (package (name "rust-discard") @@ -641,6 +801,20 @@ floating-point primitives to an @code{io::Write}.") (license (list license:asl2.0 license:expat)))) +(define-public rust-dtoa-0.2 + (package + (inherit rust-dtoa) + (name "rust-dtoa") + (version "0.2.2") + (source + (origin + (method url-fetch) + (uri (crate-uri "dtoa" version)) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "0g96cap6si1g6wi62hsdk2fnj3sf5vd4i97zj6163j8hhnsl3n0d")))))) + (define-public rust-fallible-iterator (package (name "rust-fallible-iterator") @@ -883,6 +1057,28 @@ featuring zero allocations, composability, and iterator-like interfaces.") (license (list license:asl2.0 license:expat)))) +(define-public rust-futures-core-preview + (package + (name "rust-futures-core-preview") + (version "0.3.0-alpha.17") + (source + (origin + (method url-fetch) + (uri (crate-uri "futures-core-preview" version)) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1xaq8m609k6cz8xydwhwp8xxyxigabcw1w9ngycfy0bnkg7iq52b")))) + (build-system cargo-build-system) + (arguments + '(#:tests? #f)) ; The only tests are doc tests, which fail. + (home-page "https://rust-lang-nursery.github.io/futures-rs/") + (synopsis "Core traits and types in for the @code{futures} library.") + (description "This crate provides the core traits and types in for the +@code{futures} library.") + (license (list license:asl2.0 + license:expat)))) + (define-public rust-futures-cpupool (package (name "rust-futures-cpupool") @@ -928,6 +1124,30 @@ the computation on the threads themselves.") (license (list license:asl2.0 license:expat)))) +(define-public rust-futures-sink-preview + (package + (name "rust-futures-sink-preview") + (version "0.3.0-alpha.17") + (source + (origin + (method url-fetch) + (uri (crate-uri "futures-sink-preview" version)) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1r4d0gy73hdxkh5g1lrhl1kjnwp6mywjgcj70v0z78b921da42a3")))) + (build-system cargo-build-system) + (arguments + `(#:cargo-inputs + (("rust-futures-core-preview" ,rust-futures-core-preview)))) + (home-page "https://rust-lang-nursery.github.io/futures-rs/") + (synopsis "Asynchronous `Sink` trait for the futures-rs library") + (description + "This package provides the asynchronous @code{Sink} trait for the +futures-rs library.") + (license (list license:asl2.0 + license:expat)))) + (define-public rust-gcc (package (inherit rust-cc) @@ -1208,6 +1428,20 @@ primitives to an @code{io::Write}.") (license (list license:asl2.0 license:expat)))) +(define-public rust-itoa-0.1 + (package + (inherit rust-itoa) + (name "rust-itoa") + (version "0.1.1") + (source + (origin + (method url-fetch) + (uri (crate-uri "itoa" version)) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "18g7p2hrb3dk84z3frfgmszfc9hjb4ps9vp99qlb1kmf9gm8hc5f")))))) + (define-public rust-jemalloc-sys (package (name "rust-jemalloc-sys") @@ -1379,6 +1613,79 @@ the platform that libc is compiled for.") (license (list license:expat license:asl2.0)))) +(define-public rust-libgit2-sys + (package + (name "rust-libgit2-sys") + (version "0.8.2") + (source + (origin + (method url-fetch) + (uri (crate-uri "libgit2-sys" version)) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "0y2mibmx7wy91s2kmb2gfb29mrqlqaxpy5wcwr8s1lwws7b9w5sc")) )) + (build-system cargo-build-system) + (arguments + `(#:cargo-inputs + (("rust-libc" ,rust-libc) + ("rust-libssh2-sys" ,rust-libssh2-sys) + ("rust-libz-sys" ,rust-libz-sys) + ("rust-openssl-sys" ,rust-openssl-sys)) + #:cargo-development-inputs + (("rust-cc" ,rust-cc) + ("rust-pkg-config" ,rust-pkg-config)) + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'find-openssl + (lambda* (#:key inputs #:allow-other-keys) + (let ((openssl (assoc-ref inputs "openssl"))) + (setenv "OPENSSL_DIR" openssl)) + (delete-file-recursively "libgit2") + (setenv "LIBGIT2_SYS_USE_PKG_CONFIG" "1") + (setenv "LIBSSH2_SYS_USE_PKG_CONFIG" "1") + #t))))) + (native-inputs + `(("pkg-config" ,pkg-config))) + (inputs + `(("libgit2" ,libgit2) + ("openssl" ,openssl) + ("zlib" ,zlib))) + (home-page "https://github.com/rust-lang/git2-rs") + (synopsis "Native bindings to the libgit2 library") + (description + "This package provides native rust bindings to the @code{libgit2} library.") + (license (list license:asl2.0 + license:expat)))) + +(define-public rust-libgit2-sys-0.7 + (package + (inherit rust-libgit2-sys) + (name "rust-libgit2-sys") + (version "0.7.11") + (source + (origin + (method url-fetch) + (uri (crate-uri "libgit2-sys" version)) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1wcvg2qqra2aviasvqcscl8gb2rnjnd6h998wy5dlmf2bnriqi28")))) + (build-system cargo-build-system) + (arguments + `(#:cargo-inputs + (("rust-curl-sys" ,rust-curl-sys) + ("rust-libc" ,rust-libc) + ("rust-libssh2-sys" ,rust-libssh2-sys) + ("rust-libz-sys" ,rust-libz-sys) + ("rust-openssl-sys" ,rust-openssl-sys)) + #:cargo-development-inputs + (("rust-cc" ,rust-cc) + ("rust-pkg-config" ,rust-pkg-config)))) + (inputs + `(("curl" ,curl) + ,@(package-inputs rust-libgit2-sys))))) + (define-public rust-libloading (package (name "rust-libloading") @@ -1406,6 +1713,77 @@ allows loading dynamic libraries (also known as shared libraries) as well as use functions and static variables these libraries contain.") (license license:isc))) +(define-public rust-libssh2-sys + (package + (name "rust-libssh2-sys") + (version "0.2.12") + (source + (origin + (method url-fetch) + (uri (crate-uri "libssh2-sys" version)) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1zb6gsw795nq848nk5x2smzpfnn1s15wjlzjnvr8ihlz2l5x2549")))) + (build-system cargo-build-system) + (arguments + `(#:cargo-inputs + (("rust-libc" ,rust-libc) + ("rust-libz-sys" ,rust-libz-sys) + ("rust-openssl-sys" ,rust-openssl-sys)) + #:cargo-development-inputs + (("rust-cc" ,rust-cc) + ("rust-openssl-src" ,rust-openssl-src) + ("rust-pkg-config" ,rust-pkg-config) + ("rust-vcpkg" ,rust-vcpkg)) + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'find-openssl + (lambda* (#:key inputs #:allow-other-keys) + (let ((openssl (assoc-ref inputs "openssl"))) + (setenv "OPENSSL_DIR" openssl)) + (delete-file-recursively "libssh2") + (setenv "LIBSSH2_SYS_USE_PKG_CONFIG" "1") + #t))))) + (native-inputs + `(("pkg-config" ,pkg-config))) + (inputs + `(("libssh2" ,libssh2) + ("openssl" ,openssl) + ("zlib" ,zlib))) + (home-page "https://github.com/alexcrichton/ssh2-rs") + (synopsis "Native bindings to the libssh2 library") + (description + "This package provides native rust bindings to the @code{libssh2} library.") + (license (list license:asl2.0 + license:expat)))) + + +(define-public rust-lock-api + (package + (name "rust-lock-api") + (version "0.1.5") + (source + (origin + (method url-fetch) + (uri (crate-uri "lock_api" version)) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "0b24q9mh258xa52ap636q1sxz0j5vrnp0hwbbh7ddjka3wwz3sv2")))) + (build-system cargo-build-system) + (arguments + `(#:cargo-inputs + (("rust-owning-ref" ,rust-owning-ref) + ("rust-scopeguard" ,rust-scopeguard-0.3)))) + (home-page "https://github.com/Amanieu/parking_lot") + (synopsis "Wrappers to create fully-featured Mutex and RwLock types") + (description + "This package provides wrappers to create fully-featured @code{Mutex} and +@code{RwLock} types. It is compatible with @code{no_std}.") + (license (list license:asl2.0 + license:expat)))) + (define-public rust-log (package (name "rust-log") @@ -1776,6 +2154,69 @@ types as proposed in RFC 1158.") (license (list license:asl2.0 license:expat)))) +(define-public rust-libnghttp2-sys + (package + (name "rust-libnghttp2-sys") + (version "0.1.2") + (source + (origin + (method url-fetch) + (uri (crate-uri "libnghttp2-sys" version)) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "0qr4lyh7righx9n22c7amlcpk906rn1jnb2zd6gdfpa3yi24s982")))) + (build-system cargo-build-system) + (arguments + `(#:cargo-inputs + (("rust-libc" ,rust-libc)) + #:cargo-development-inputs + (("rust-cc" ,rust-cc)))) + (inputs + `(("nghttp2" ,nghttp2))) + (home-page "https://github.com/alexcrichton/nghttp2-rs") + (synopsis "FFI bindings for libnghttp2 (nghttp2)") + (description + "This package provides FFI bindings for libnghttp2 (nghttp2).") + (license (list license:asl2.0 + license:expat)))) + +(define-public rust-libz-sys + (package + (name "rust-libz-sys") + (version "1.0.25") + (source + (origin + (method url-fetch) + (uri (crate-uri "libz-sys" version)) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1gjycyl2283525abks98bhxa4r259m617xfm5z52p3p3c8ry9d9f")))) + (build-system cargo-build-system) + (arguments + `(#:cargo-inputs + (("rust-libc" ,rust-libc) + ("rust-cc" ,rust-cc) + ("rust-pkg-config" ,rust-pkg-config) + ("rust-vcpkg" ,rust-vcpkg)) + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'delete-vendored-zlib + (lambda _ + (delete-file-recursively "src/zlib") + #t))))) + (inputs + `(("pkg-config" ,pkg-config) + ("zlib" ,zlib))) + (home-page "https://github.com/rust-lang/libz-sys") + (synopsis "Bindings to the system libz library") + (description + "This package provides bindings to the system @code{libz} library (also +known as zlib).") + (license (list license:asl2.0 + license:expat)))) + (define-public rust-nodrop (package (name "rust-nodrop") @@ -1923,6 +2364,24 @@ implementation (which is unstable / requires nightly).") (license (list license:asl2.0 license:expat)))) +(define-public rust-num-traits-0.1 + (package + (inherit rust-num-traits) + (name "rust-num-traits") + (version "0.1.43") + (source + (origin + (method url-fetch) + (uri (crate-uri "num-traits" version)) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "0c9whknf2dm74a3cqirafy6gj83a76gl56g4v3g19k6lkwz13rcj")))) + (build-system cargo-build-system) + (arguments + `(#:cargo-inputs + (("rust-num-traits" ,rust-num-traits)))))) + (define-public rust-openssl-probe (package (name "rust-openssl-probe") @@ -1944,6 +2403,67 @@ system for OpenSSL.") (license (list license:asl2.0 license:expat)))) +(define-public rust-openssl-src + (package + (name "rust-openssl-src") + (version "111.6.0+1.1.1d") + (source + (origin + (method url-fetch) + (uri (crate-uri "openssl-src" version)) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "172xh95hp7aygahah1940kg1dnx60c5m80cwj5hgi8x7x0fxmhmr")))) + (build-system cargo-build-system) + (arguments + `(#:cargo-inputs (("rust-cc" ,rust-cc)))) + (home-page "https://github.com/alexcrichton/openssl-src-rs") + (synopsis "Source of OpenSSL for rust crates") + (description + "This package contains the source of OpenSSL and logic to build it.") + (license (list license:asl2.0 + license:expat)))) + +(define-public rust-openssl-sys + (package + (name "rust-openssl-sys") + (version "0.9.49") + (source + (origin + (method url-fetch) + (uri (crate-uri "openssl-sys" version)) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1168vivyqbzaxl48bvv9r1x714c03f5c1za8pv5x8fyj9gjxkypl")))) + (build-system cargo-build-system) + (arguments + `(#:cargo-inputs + (("rust-autocfg" ,rust-autocfg) + ("rust-libc" ,rust-libc)) + #:cargo-development-inputs + (("rust-autocfg" ,rust-autocfg) + ("rust-cc" ,rust-cc) + ("rust-openssl-src" ,rust-openssl-src) + ("rust-pkg-config" ,rust-pkg-config) + ("rust-vcpkg" ,rust-vcpkg)) + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'find-openssl + (lambda* (#:key inputs #:allow-other-keys) + (let ((openssl (assoc-ref inputs "openssl"))) + (setenv "OPENSSL_DIR" openssl)) + #t))))) + (inputs + `(("openssl" ,openssl) + ("pkg-config" ,pkg-config))) + (home-page "https://github.com/sfackler/rust-openssl") + (synopsis "FFI bindings to OpenSSL") + (description + "This package provides FFI bindings to OpenSSL for use in rust crates.") + (license license:expat))) + (define-public rust-owning-ref (package (name "rust-owning-ref") @@ -2035,6 +2555,20 @@ the @code{take_while} predicate returned false after dropping the @code{by_ref}. (license (list license:asl2.0 license:expat)))) +(define-public rust-percent-encoding-1 + (package + (inherit rust-percent-encoding) + (name "rust-percent-encoding") + (version "1.0.1") + (source + (origin + (method url-fetch) + (uri (crate-uri "percent-encoding" version)) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "0cgq08v1fvr6bs5fvy390cz830lq4fak8havdasdacxcw790s09i")))))) + (define-public rust-permutohedron (package (name "rust-permutohedron") @@ -2468,6 +3002,26 @@ system calls.") (license (list license:asl2.0 license:expat)))) +(define-public rust-rustc-hash + (package + (name "rust-rustc-hash") + (version "1.0.0") + (source + (origin + (method url-fetch) + (uri (crate-uri "rustc-hash" version)) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "114bf72466bl63i5hh8fgqfnhihs0w1m9c9jz505095agfixnvg0")))) + (build-system cargo-build-system) + (home-page "https://github.com/rust-lang-nursery/rustc-hash") + (synopsis "Speedy, non-cryptographic hash used in rustc") + (description + "This package provides a speedy, non-cryptographic hash used in rustc.") + (license (list license:asl2.0 + license:expat)))) + (define-public rust-rustc-serialize (package (name "rust-rustc-serialize") @@ -2904,6 +3458,26 @@ deeply recursive algorithms that may accidentally blow the stack.") (license (list license:asl2.0 license:expat)))) +(define-public rust-static-assertions + (package + (name "rust-static-assertions") + (version "0.3.4") + (source + (origin + (method url-fetch) + (uri (crate-uri "static-assertions" version)) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1lw33i89888yb3x29c6dv4mrkg3534n0rlg3r7qzh4p58xmv6gkz")))) + (build-system cargo-build-system) + (home-page "https://github.com/nvzqz/static-assertions-rs") + (synopsis "Compile-time assertions for rust") + (description + "This package provides compile-time assertions to ensure that invariants +are met.") + (license (list license:expat license:asl2.0)))) + (define-public rust-stdweb-internal-runtime (package (name "rust-stdweb-internal-runtime") @@ -2991,6 +3565,20 @@ metrics. It includes Hamming, Levenshtein, OSA, Damerau-Levenshtein, Jaro, and Jaro-Winkler.") (license license:expat))) +(define-public rust-strsim-0.8 + (package + (inherit rust-strsim) + (name "rust-strsim") + (version "0.8.0") + (source + (origin + (method url-fetch) + (uri (crate-uri "strsim" version)) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "0sjsm7hrvjdifz661pjxq5w4hf190hx53fra8dfvamacvff139cf")))))) + (define-public rust-synstructure-test-traits (package (name "rust-synstructure-test-traits") @@ -3096,6 +3684,30 @@ directories.") (license (list license:asl2.0 license:expat)))) +(define-public rust-term + (package + (name "rust-term") + (version "0.4.6") + (source + (origin + (method url-fetch) + (uri (crate-uri "term" version)) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1wbh8ngqkqr3f6wz902yplf60bd5yapnckvrkgmzp5nffi7n8qzs")))) + (build-system cargo-build-system) + (arguments + `(#:cargo-inputs + (("rust-kernel32-sys" ,rust-kernel32-sys) + ("rust-winapi" ,rust-winapi)))) + (home-page "https://github.com/Stebalien/term") + (synopsis "Terminal formatting library") + (description + "This package provides a terminal formatting library in rust.") + (license (list license:asl2.0 + license:expat)))) + (define-public rust-termcolor (package (name "rust-termcolor") @@ -3552,6 +4164,28 @@ whitespace from a string.") (license (list license:asl2.0 license:expat)))) +(define-public rust-unreachable + (package + (name "rust-unreachable") + (version "1.0.0") + (source + (origin + (method url-fetch) + (uri (crate-uri "unreachable" version)) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "0mps2il4xy2mjqc3appas27hhn2xmvixc3bzzhfrjj74gy3i0a1q")))) + (build-system cargo-build-system) + (arguments + `(#:cargo-inputs (("rust-void" ,rust-void)))) + (home-page "https://github.com/reem/rust-unreachable") + (synopsis "Unreachable code optimization hint in rust") + (description + "This package provides an unreachable code optimization hint in rust.") + (license (list license:asl2.0 + license:expat)))) + (define-public rust-unsafe-any (package (name "rust-unsafe-any") @@ -3787,7 +4421,7 @@ in Rust.") (synopsis "Wide string Rust FFI library") (description "A wide string Rust FFI library for converting to and from wide strings, -such as those often used in Windows API or other FFI libaries. Both UTF-16 and +such as those often used in Windows API or other FFI libraries. Both UTF-16 and UTF-32 types are provided, including support for malformed encoding.") (license (list license:asl2.0 license:expat)))) diff --git a/gnu/packages/datamash.scm b/gnu/packages/datamash.scm index 81b0069aab..ac1b71e63b 100644 --- a/gnu/packages/datamash.scm +++ b/gnu/packages/datamash.scm @@ -1,6 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014, 2018 Eric Bavier -;;; Copyright © 2016, 2017, 2018 Efraim Flashner +;;; Copyright © 2016, 2017, 2018, 2019 Efraim Flashner ;;; ;;; This file is part of GNU Guix. ;;; @@ -29,7 +29,7 @@ (define-public datamash (package (name "datamash") - (version "1.4") + (version "1.5") (source (origin (method url-fetch) @@ -37,7 +37,7 @@ version ".tar.gz")) (sha256 (base32 - "0aj7wvv14s2fsf2rl49mqhxdagy8cbz6rz4xyi7bkg2nahnxsi7s")))) + "1b91pbdarnfmbhid8aa2f50k0fln8n7pg62782b4y0jlzvaljqi2")))) (native-inputs `(("which" ,which) ;for tests ("perl" ,perl))) ;for help2man diff --git a/gnu/packages/diffoscope.scm b/gnu/packages/diffoscope.scm new file mode 100644 index 0000000000..15d5a5787e --- /dev/null +++ b/gnu/packages/diffoscope.scm @@ -0,0 +1,279 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2015, 2016, 2017, 2018, 2019 Ludovic Courtès +;;; Copyright © 2017 Ricardo Wurmus +;;; Copyright © 2017, 2018, 2019 Tobias Geerinckx-Rice +;;; Copyright © 2018 Julien Lepiller +;;; Copyright © 2018, 2019 Rutger Helling +;;; Copyright © 2019 Vagrant Cascadian +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see . + +(define-module (gnu packages diffoscope) + #:use-module (gnu packages) + #:use-module (gnu packages acl) + #:use-module (gnu packages admin) + #:use-module (gnu packages android) + #:use-module (gnu packages backup) + #:use-module (gnu packages base) + #:use-module (gnu packages bootloaders) + #:use-module (gnu packages cdrom) + #:use-module (gnu packages check) + #:use-module (gnu packages compression) + #:use-module (gnu packages cpio) + #:use-module (gnu packages dbm) + #:use-module (gnu packages gettext) + #:use-module (gnu packages ghostscript) + #:use-module (gnu packages gnome) + #:use-module (gnu packages gnupg) + #:use-module (gnu packages haskell) + #:use-module (gnu packages image) + #:use-module (gnu packages imagemagick) + #:use-module (gnu packages java) + #:use-module (gnu packages linux) + #:use-module (gnu packages llvm) + #:use-module (gnu packages mono) + #:use-module (gnu packages ocaml) + #:use-module (gnu packages package-management) + #:use-module (gnu packages patchutils) + #:use-module (gnu packages pdf) + #:use-module (gnu packages python-web) + #:use-module (gnu packages python-xyz) + #:use-module (gnu packages sqlite) + #:use-module (gnu packages ssh) + #:use-module (gnu packages statistics) + #:use-module (gnu packages textutils) + #:use-module (gnu packages video) + #:use-module (gnu packages vim) + #:use-module (gnu packages web) + #:use-module (guix build-system python) + #:use-module (guix gexp) + #:use-module (guix git-download) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (guix packages) + #:use-module (guix utils) + #:use-module (ice-9 match)) + +(define-public diffoscope + (let ((version "125")) + (package + (name "diffoscope") + (version version) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://salsa.debian.org/reproducible-builds/diffoscope.git") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "02kwisp9j63w27hhcwpdhg66dgxzz61q4fcyfz8z4hwlz6r0gyqy")))) + (build-system python-build-system) + (arguments + `(#:phases (modify-phases %standard-phases + ;; setup.py mistakenly requires python-magic from PyPi, even + ;; though the Python bindings of `file` are sufficient. + ;; https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=815844 + (add-after 'unpack 'dependency-on-python-magic + (lambda _ + (substitute* "setup.py" + (("'python-magic',") "")))) + ;; Patch in support for known tools + (add-after 'unpack 'add-known-tools + (lambda _ + (substitute* "diffoscope/external_tools.py" + (("'arch': 'enjarify'},") + "'arch': 'enjarify', 'guix': 'enjarify'},")) + (substitute* "diffoscope/external_tools.py" + (("'arch': 'python-jsbeautifier'},") + "'arch': 'python-jsbeautifier', 'guix': 'python-jsbeautifier'},")) + (substitute* "diffoscope/external_tools.py" + (("'arch': 'wabt'},") + "'arch': 'wabt', 'guix': 'wabt'},")))) + ;; This test is broken because our `file` package has a + ;; bug in berkeley-db file type detection. + (add-after 'unpack 'remove-berkeley-test + (lambda _ + (delete-file "tests/comparators/test_berkeley_db.py") + #t)) + ;; Test is dynamically generated and may have false + ;; negatives with different ocaml versions. Further + ;; background in: https://bugs.debian.org/939386 + (add-after 'unpack 'remove-ocaml-test + (lambda _ + (substitute* "tests/comparators/test_ocaml.py" + (("def test_diff.differences.:") + "def skip_test_diff(differences):")) + #t)) + (add-after 'unpack 'skip-elf-tests + ;; FIXME: libmix_differences test added in 125, and is + ;; failing, need to explore why... + (lambda _ + (substitute* "tests/comparators/test_elf.py" + (("def test_libmix_differences.libmix_differences.:") + "def skip_test_libmix_differences(libmix_differences):")) + #t)) + (add-after 'unpack 'embed-tool-references + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "diffoscope/comparators/utils/compare.py" + (("\\['xxd',") + (string-append "['" (which "xxd") "',"))) + (substitute* "diffoscope/comparators/elf.py" + (("@tool_required\\('readelf'\\)") "") + (("get_tool_name\\('readelf'\\)") + (string-append "'" (which "readelf") "'"))) + (substitute* "diffoscope/comparators/directory.py" + (("@tool_required\\('stat'\\)") "") + (("@tool_required\\('getfacl'\\)") "") + (("\\['stat',") + (string-append "['" (which "stat") "',")) + (("\\['getfacl',") + (string-append "['" (which "getfacl") "',"))) + #t)) + (add-before 'check 'writable-test-data + (lambda _ + ;; tests may need needs write access to tests + ;; directory + (for-each make-file-writable (find-files "tests")) + #t)) + (add-before 'check 'delete-failing-test + (lambda _ + ;; this requires /sbin to be on the path + (delete-file "tests/test_tools.py") + #t))))) + (inputs `(("rpm" ,rpm) ;for rpm-python + ("python-file" ,python-file) + ("python-debian" ,python-debian) + ("python-libarchive-c" ,python-libarchive-c) + ("python-tlsh" ,python-tlsh) + ("acl" ,acl) ;for getfacl + ("colordiff" ,colordiff) + ("xxd" ,xxd))) + ;; Below are modules used for tests. + (native-inputs `(("python-pytest" ,python-pytest) + ("python-chardet" ,python-chardet) + ("python-binwalk" ,python-binwalk) + ;; test suite skips tests when tool is missing + ,@(match (%current-system) + ;; ghc is only available on x86 currently. + ((or "x86_64-linux" "i686-linux") + `(("ghc" ,ghc))) + (_ + `())) + ,@(match (%current-system) + ;; openjdk and dependent packages are only + ;; available on x86_64 currently. + ((or "x86_64-linux") + `(("enjarify" ,enjarify) + ;; no unversioned openjdk available + ("openjdk:jdk" ,openjdk12 "jdk") + )) + (_ + `())) + ("abootimg" ,abootimg) + ("bdb" ,bdb) + ("binutils" ,binutils) + ("bzip2" ,bzip2) + ("cdrtools" ,cdrtools) + ("colord" ,colord) + ("cpio" ,cpio) + ("docx2txt" ,docx2txt) + ("dtc" ,dtc) + ("e2fsprogs" ,e2fsprogs) + ("ffmpeg" ,ffmpeg) + ("gettext" ,gettext-minimal) + ("ghostscript" ,ghostscript) + ("giflib:bin" ,giflib "bin") + ("gnumeric" ,gnumeric) + ("gnupg" ,gnupg) + ("imagemagick" ,imagemagick) + ("libarchive" ,libarchive) + ("llvm" ,llvm) + ("lz4" ,lz4) + ("mono" ,mono) + ("ocaml" ,ocaml) + ("odt2txt" ,odt2txt) + ("openssh" ,openssh) + ("pgpdump" ,pgpdump) + ("poppler" ,poppler) + ("python-jsbeautifier" ,python-jsbeautifier) + ("r-minimal" ,r-minimal) + ("rpm" ,rpm) + ("sng" ,sng) + ("sqlite" ,sqlite) + ("squashfs-tools" ,squashfs-tools) + ("tcpdump" ,tcpdump) + ("unzip" ,unzip) + ("wabt" ,wabt) + ("xxd" ,xxd) + ("xz" ,xz) + ("zip" ,zip))) + (home-page "https://diffoscope.org/") + (synopsis "Compare files, archives, and directories in depth") + (description + "Diffoscope tries to get to the bottom of what makes files or directories +different. It recursively unpacks archives of many kinds and transforms +various binary formats into more human readable forms to compare them. It can +compare two tarballs, ISO images, or PDFs just as easily.") + (license license:gpl3+)))) + +(define-public trydiffoscope + (package + (name "trydiffoscope") + (version "67.0.1") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://salsa.debian.org/reproducible-builds/trydiffoscope.git") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "03b66cjii7l2yiwffj6ym6mycd5drx7prfp4j2550281pias6mjh")))) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-after 'install 'install-doc + (lambda* (#:key outputs #:allow-other-keys) + (let* ((share (string-append (assoc-ref outputs "out") "/share/"))) + (mkdir-p (string-append share "/man/man1/" )) + (invoke "rst2man.py" + "trydiffoscope.1.rst" + (string-append share "/man/man1/trydiffoscope.1")) + (mkdir-p (string-append share "/doc/" ,name "-" ,version)) + (install-file "./README.rst" + (string-append share "/doc/" ,name "-" ,version))) + #t))))) + (propagated-inputs + `(("python-requests" ,python-requests))) + (native-inputs + `(("gzip" ,gzip) + ("python-docutils" ,python-docutils))) + (build-system python-build-system) + (home-page "https://try.diffoscope.org") + (synopsis "Client for remote diffoscope service") + (description "This is a client for the @url{https://try.diffoscope.org, +remote diffoscope service}. + +Diffoscope tries to get to the bottom of what makes files or directories +different. It recursively unpacks archives of many kinds and transforms +various binary formats into more human readable forms to compare them. It can +compare two tarballs, ISO images, or PDFs just as easily. + +Results are displayed by default, stored as local text or html files, or made +available via a URL on @url{https://try.diffoscope.org}. Results stored on the +server are purged after 30 days.") + (license license:gpl3+))) diff --git a/gnu/packages/dns.scm b/gnu/packages/dns.scm index ae2e5cf8fa..5f3686347d 100644 --- a/gnu/packages/dns.scm +++ b/gnu/packages/dns.scm @@ -109,7 +109,7 @@ and BOOTP/TFTP for network booting of diskless machines.") (define-public isc-bind (package (name "bind") - (version "9.14.5") + (version "9.14.6") (source (origin (method url-fetch) (uri (string-append @@ -117,7 +117,7 @@ and BOOTP/TFTP for network booting of diskless machines.") "/bind-" version ".tar.gz")) (sha256 (base32 - "0ic0k0kpavwnbyf10rwx6yypxg66f65fprwc0dbmp61xp0n6gl0j")))) + "1zpd47ckn5lf4qbscfkj7krngwn2gwsp961v5401h3lhxm0a0rw9")))) (build-system gnu-build-system) (outputs `("out" "utils")) (inputs @@ -373,14 +373,14 @@ to result in system-wide compromise.") (define-public unbound (package (name "unbound") - (version "1.9.2") + (version "1.9.3") (source (origin (method url-fetch) (uri (string-append "https://www.unbound.net/downloads/unbound-" version ".tar.gz")) (sha256 - (base32 "15bbrczibap30db8a1pmqhvjbmkxms39hwiivby7f4j5rz2wwykg")))) + (base32 "1ykdy62sgzv33ggkmzwx2h0ifm7hyyxyfkb4zckv7gz4f28xsm8v")))) (build-system gnu-build-system) (outputs '("out" "python")) (native-inputs diff --git a/gnu/packages/elixir.scm b/gnu/packages/elixir.scm index 2a1d99452f..88ada71aea 100644 --- a/gnu/packages/elixir.scm +++ b/gnu/packages/elixir.scm @@ -24,7 +24,7 @@ (define-module (gnu packages elixir) #:use-module ((guix licenses) #:prefix license:) #:use-module (guix build-system gnu) - #:use-module (guix download) + #:use-module (guix git-download) #:use-module (guix packages) #:use-module (gnu packages) #:use-module (gnu packages erlang) @@ -34,15 +34,16 @@ (package (name "elixir") (version "1.8.2") - (source (origin - (method url-fetch) - (uri (string-append "https://github.com/elixir-lang/elixir" - "/archive/v" version ".tar.gz")) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "0ddqxw24zdqlg7glzk22m7qjal8f18divzp364a6gi1bv6rg16yg")) - (patches (search-patches "elixir-path-length.patch")))) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/elixir-lang/elixir.git") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "1n77cpcl2b773gmj3m9s24akvj9gph9byqbmj2pvlsmby4aqwckq")) + (patches (search-patches "elixir-path-length.patch")))) (build-system gnu-build-system) (arguments `(#:test-target "test" @@ -51,7 +52,11 @@ (assoc-ref %outputs "out"))) #:phases (modify-phases %standard-phases - (add-after 'unpack 'replace-paths + (add-after 'unpack 'make-git-checkout-writable + (lambda _ + (for-each make-file-writable (find-files ".")) + #t)) + (add-after 'make-git-checkout-writable 'replace-paths (lambda* (#:key inputs outputs #:allow-other-keys) (let ((out (assoc-ref outputs "out"))) (substitute* '("lib/elixir/lib/system.ex" diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 6b9027df8a..488712bd48 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -53,6 +53,7 @@ ;;; Copyright © 2019 Jens Mølgaard ;;; Copyright © 2019 Amin Bandali ;;; Copyright © 2019 Jelle Licht +;;; Copyright © 2019 Björn Höfling ;;; ;;; This file is part of GNU Guix. ;;; @@ -557,16 +558,11 @@ handful of functions that are not resource-specific.") (license license:gpl3+))) (define-public emacs-scribble-mode - (let ((commit "34e9e5edb921813b6483e0fefa848efb6ee4b314") - (version "0.0") - (revision 0)) + (let ((commit "217945d54de5e4bb207033f2116baa28f5c5ecf2") + (revision "2")) (package (name "emacs-scribble-mode") - (version (if (zero? revision) - version - (string-append version "-" - (number->string revision) - "." (string-take commit 7)))) + (version (git-version "0.1" revision commit)) (source (origin (method git-fetch) (uri (git-reference @@ -574,7 +570,7 @@ handful of functions that are not resource-specific.") (commit commit))) (sha256 (base32 - "0598byqpz2q6yi2q4dwd77jj9z3n99z34d3an51s9m2za0nh1qvp")))) + "1s5ccw1a5ack01wd94ywfcrar9j98agchwdh30q7iyxr0d2z4sii")))) (build-system emacs-build-system) (home-page "https://github.com/emacs-pe/scribble-mode") (synopsis "Emacs mode for editing the Scribble documentation syntax.") @@ -613,8 +609,8 @@ from within Emacs.") (license license:gpl3+))) (define-public emacs-unpackaged-el - (let ((commit "f4df7f8dfea715e893b2223adda32545803f5cce") - (revision "1")) + (let ((commit "c0d58cf81e531b2b6fa1bd5dd612dc1b93d4d186") + (revision "2")) (package (name "emacs-unpackaged-el") (version (git-version "0" revision commit)) @@ -627,9 +623,7 @@ from within Emacs.") (file-name (git-file-name name version)) (sha256 (base32 - "1yf3zrgqfhnr0az8gn1kqqwnhfi3nc0vbjkcagwcqwk3sp1jda86")) - (patches - (search-patches "emacs-unpackaged-req.patch")))) + "0y3sgvd51l4pb3acps92bazfk49da6nim1f1hyxzy1ravg4kbw83")))) (build-system emacs-build-system) (propagated-inputs `(("emacs-dash" ,emacs-dash) @@ -637,6 +631,14 @@ from within Emacs.") ("emacs-s" ,emacs-s) ("emacs-hydra" ,emacs-hydra) ("emacs-use-package" ,emacs-use-package))) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'require-hydra + (lambda _ + (substitute* "unpackaged.el" + ((";;; Code:") ";;; Code:\n(require 'hydra)")) + #t))))) (home-page "https://github.com/alphapapa/unpackaged.el") (synopsis "Useful snippets of Emacs Lisp code") (description "This package provides Emacs Lisp utilities for a variety @@ -738,8 +740,8 @@ programs.") (deprecated-package "haskell-mode" emacs-haskell-mode)) (define-public emacs-dante - (let ((commit "149dded24ca9cdff09a3d859e4b62638db4aadda") - (revision "1")) + (let ((commit "a25ae9e5b5425cffdd88d498777e90ea8655fa37") + (revision "2")) (package (name "emacs-dante") (version (git-version "1.5" revision commit)) @@ -750,7 +752,7 @@ programs.") (commit commit))) (sha256 (base32 - "0i7kj3d6pfys6si9va5f36qzifyac9mahdl0qh40rya9m0syrkla")) + "1ziw3snbs2z2cg8a3jbyjd48qkgrkzs4bh8lrbs0h2c87nzldvhd")) (file-name (git-file-name name version)))) (build-system emacs-build-system) (propagated-inputs @@ -2125,15 +2127,16 @@ a command.") (define-public emacs-olivetti (package (name "emacs-olivetti") - (version "1.5.7") + (version "1.8.0") (source (origin - (method url-fetch) - (uri (string-append - "https://stable.melpa.org/packages/olivetti-" - version ".el")) + (method git-fetch) + (uri (git-reference + (url "https://github.com/rnkn/olivetti.git") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) (sha256 (base32 - "1yj2ylg46q0pw1xzlv2b0fv9x8p56x25284s9v2smwjr4vf0nwcj")))) + "0ba30swqxxbpa8866chymywnahby1hk670zzkz44q49328i2wksj")))) (build-system emacs-build-system) (home-page "https://github.com/rnkn/olivetti") (synopsis "Emacs minor mode for a nice writing environment") @@ -2701,7 +2704,7 @@ in Lisp modes.") `(("emacs-dash" ,emacs-dash))) (home-page "https://github.com/Fuco1/litable/") (synopsis "Dynamic evaluation replacement with Emacs") - (description "This packages provides dynamic evaluation in Emacs.") + (description "This package provides dynamic evaluation in Emacs.") (license license:gpl3+)))) (define-public emacs-string-inflection @@ -3551,6 +3554,29 @@ completion candidate when using the Company text completion framework.") @code{company-mode} allowing for completion of common math symbols.") (license license:gpl3+)))) +(define-public emacs-compdef + (let ((commit "fc08a9b049c3718fc7d6c6ee2140759aff031bc9") + (revision "1")) + (package + (name "emacs-compdef") + (version (git-version "0.2" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://gitlab.com/jjzmajic/compdef.git") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 "1dwf4rlj19d80yp656c7nkp6hb3mabv808r6ix3hpv6rjjs38vhl")))) + (build-system emacs-build-system) + (home-page "https://gitlab.com/jjzmajic/compdef") + (synopsis "Set local completion backends") + (description "This package provides a function to cleanly set local +completion backends according to mode, and integrates with +@code{use-package}.") + (license license:gpl3+)))) + (define-public emacs-nswbuff (let ((commit "362da7f3687e2eb5bb11667347de85f4a9d002bc") (revision "1")) @@ -3713,6 +3739,11 @@ on context.") ("emacs-company" ,emacs-company) ("emacs-s" ,emacs-s) ("emacs-dash" ,emacs-dash))) + (native-inputs + `(("emacs-buttercup" ,emacs-buttercup))) + (arguments + `(#:tests? #t + #:test-command '("buttercup" "-L" "."))) (home-page "https://github.com/tigersoldier/company-lsp") (synopsis "Completion for @code{lsp-mode}") (description @@ -4166,6 +4197,8 @@ sgml/html integration, and indentation (working with sgml).") (build-system emacs-build-system) (propagated-inputs `(("emacs-company" ,emacs-company))) + (arguments + `(#:include (cons "^tools\\/" %default-include))) (home-page "https://github.com/iquiw/company-cabal/") (synopsis "Company completion for Haskell Cabal files") (description @@ -4297,8 +4330,8 @@ started with 20 minutes. All values are customizable.") (license license:gpl3+)))) (define-public emacs-org-sidebar - (let ((commit "ed951d1e0d8b7e65ed35797403fd3e8c88f507f5") - (revision "1")) + (let ((commit "b2a5a69b1ebbab63b55e7d1a9453f385624a642c") + (revision "2")) (package (name "emacs-org-sidebar") (version (git-version "0.1" revision commit)) @@ -4310,7 +4343,7 @@ started with 20 minutes. All values are customizable.") (commit commit))) (file-name (git-file-name name version)) (sha256 - (base32 "01sf8v53pjsy80fzwmj2n8rp2z5gsnpyld0fm6j3bdv213clp69y")))) + (base32 "0dajwg92kj7998xl0x35dlqwdhgwjcwxa726kf4f3wgv1azpyff6")))) (build-system emacs-build-system) (propagated-inputs `(("emacs-dash" ,emacs-dash) @@ -4590,15 +4623,16 @@ board and goal value can be customized.") (define-public emacs-base16-theme (package (name "emacs-base16-theme") - (version "2.1") + (version "2.2") (source (origin - (method url-fetch) - (uri (string-append "https://stable.melpa.org/packages/base16-theme-" - version ".tar")) + (method git-fetch) + (uri (git-reference + (url "https://github.com/belak/base16-emacs.git") + (commit version))) + (file-name (git-file-name name version)) (sha256 - (base32 - "0z6hrwz2jlz6jbr381rcqcqvx6hss5cad352klx07rark7zccacj")))) + (base32 "01w89g413s1da6rf94y1xnhw79cjy2bqb01yfjs58cy492cm0vr6")))) (build-system emacs-build-system) (home-page "https://github.com/belak/base16-emacs") (synopsis "Base16 color themes for Emacs") @@ -4867,7 +4901,7 @@ after buffer changes.") (define-public emacs-realgud (package (name "emacs-realgud") - (version "1.5.0") + (version "1.5.1") (source (origin (method git-fetch) @@ -4876,7 +4910,7 @@ after buffer changes.") (commit version))) (sha256 (base32 - "0xnick9016wxrgi8v0lycvxhyz8l2k4nfvdpjc5yq476vwrjfzbz")) + "1d3s23jk0i34wpyxfajydgyyvsxnpbqrfl0mgydsq7zw2c75ylnq")) (file-name (git-file-name name version)))) (build-system emacs-build-system) (arguments @@ -4997,8 +5031,8 @@ automatically.") ;; The latest release version introduced a new feature, swiper-isearch, that ;; generally works well but had some noticeable bugs; this later commit ;; includes fixes for several of them. - (let ((commit "d3e4514fd72f217c704ae18afdf711bb9036a04d") - (revision "1")) + (let ((commit "79333e9edfee38ec3b367c33711a68bdf7783259") + (revision "2")) (package (name "emacs-ivy") (version (git-version "0.12.0" revision commit)) @@ -5011,7 +5045,7 @@ automatically.") (file-name (git-file-name name version)) (sha256 (base32 - "142axxc6vsl14cfyvzj9csiykxdn7vhw88fy955hzx7av4qfqg4x")))) + "0dyclc51sprhmr5fi4lylhwsrn8v1jgyblwk9ly60jj84lj6278z")))) (build-system emacs-build-system) (arguments `(#:phases @@ -5023,11 +5057,20 @@ automatically.") (with-directory-excursion "doc" (invoke "makeinfo" "ivy.texi") (install-file "ivy.info" info) - #t))))))) + #t)))) + (add-before 'check 'make-dummy-git-directory + (lambda _ + (mkdir-p ".git"))) + (add-after 'check 'delete-dummy-git-directory + (lambda _ + (delete-file-recursively ".git")))) + #:tests? #t + #:test-command '("make" "test"))) (propagated-inputs `(("emacs-hydra" ,emacs-hydra))) (native-inputs - `(("texinfo" ,texinfo))) + `(("texinfo" ,texinfo) + ("emacs-wgrep" ,emacs-wgrep))) (home-page "http://oremacs.com/swiper/") (synopsis "Incremental vertical completion for Emacs") (description @@ -5140,6 +5183,9 @@ show icons as well.") (sha256 (base32 "09qdni1s74i5pv8741szl5g4ynj8fxn0x65qmwa9rmfkbimnc0fs")))) (build-system emacs-build-system) + (arguments + `(#:tests? #t + #:test-command '("make" "test"))) (home-page "https://github.com/abo-abo/avy") (synopsis "Tree-based completion for Emacs") (description @@ -5156,55 +5202,62 @@ windows.") (license license:gpl3+))) (define-public emacs-ace-window - (package - (name "emacs-ace-window") - (version "0.9.0") - (source - (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/abo-abo/ace-window.git") - (commit version))) - (file-name (git-file-name name version)) - (sha256 - (base32 "07mcdzjmgrqdvjs94f2n5bkrf5vrq2fwzz256wbm3wzqxqkfy1q6")))) - (build-system emacs-build-system) - (propagated-inputs - `(("emacs-avy" ,emacs-avy))) - (home-page "https://github.com/abo-abo/ace-window") - (synopsis "Quickly switch windows in Emacs") - (description - "@code{ace-window} is meant to replace @code{other-window}. + ;; last release version is from 2015 + (let ((commit "a5344925e399e1f015721cda6cf5db03c90ab87a") + (revision "1")) + (package + (name "emacs-ace-window") + (version (git-version "0.9.0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/abo-abo/ace-window.git") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "18jm8gfgnf6ja9aarws5650lw2zfi3wdwc5j8r5ijn5fcqhfy7rc")))) + (build-system emacs-build-system) + (propagated-inputs + `(("emacs-avy" ,emacs-avy))) + (home-page "https://github.com/abo-abo/ace-window") + (synopsis "Quickly switch windows in Emacs") + (description + "@code{ace-window} is meant to replace @code{other-window}. In fact, when there are only two windows present, @code{other-window} is called. If there are more, each window will have its first character highlighted. Pressing that character will switch to that window.") - (license license:gpl3+))) + (license license:gpl3+)))) (define-public emacs-iedit - (package - (name "emacs-iedit") - (version "0.9.9.9") - (source - (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/victorhge/iedit.git") - (commit (string-append "v" version)))) - (file-name (git-file-name name version)) - (sha256 - (base32 "1pwkrm98vlpzsy5iwwfksdaz3zzyi7bvdf5fglhsn4ssf47p787g")))) - (build-system emacs-build-system) - (home-page "http://www.emacswiki.org/emacs/Iedit") - (synopsis "Edit multiple regions in the same way simultaneously") - (description - "This package is an Emacs minor mode and allows you to edit one + ;; Last release version was in 2016. + (let ((commit "e2c100cdd67b7d82835d281ac2cd1bf4f374bc8f") + (revision "1")) + (package + (name "emacs-iedit") + (version (git-version "0.9.9.9" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/victorhge/iedit.git") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 "0wr3w2id95wx2rma8n1ifjrv9rx37ly26ijc5zi58id0yrip3hnc")))) + (build-system emacs-build-system) + (home-page "http://www.emacswiki.org/emacs/Iedit") + (synopsis "Edit multiple regions in the same way simultaneously") + (description + "This package is an Emacs minor mode and allows you to edit one occurrence of some text in a buffer (possibly narrowed) or region, and simultaneously have other occurrences edited in the same way. You can also use Iedit mode as a quick way to temporarily show only the buffer lines that match the current text being edited. This gives you the effect of a temporary @code{keep-lines} or @code{occur}.") - (license license:gpl3+))) + (license license:gpl3+)))) (define-public emacs-zoutline (package @@ -5249,6 +5302,34 @@ navigate code in a tree-like fashion.") ("emacs-ivy" ,emacs-ivy) ("emacs-hydra" ,emacs-hydra) ("emacs-zoutline" ,emacs-zoutline))) + (native-inputs + `(("emacs-clojure-mode" ,emacs-clojure-mode) + ("emacs-undercover" ,emacs-undercover))) + (arguments + `(#:include (cons* "^lispy-clojure\\.clj$" + "^lispy-python\\.py$" + %default-include) + #:phases + ;; XXX: one failing test involving python evaluation + (modify-phases %standard-phases + (add-before 'check 'make-test-writable + (lambda _ + (make-file-writable "lispy-test.el") + #t)) + (add-before 'check 'remove-python-eval-test + (lambda _ + (emacs-batch-edit-file "lispy-test.el" + `(progn + (progn + (goto-char (point-min)) + (re-search-forward + "ert-deftest lispy-eval-python-str") + (beginning-of-line) + (kill-sexp)) + (basic-save-buffer))) + #t))) + #:tests? #t + #:test-command '("make" "test"))) (synopsis "Modal S-expression editing") (description "Due to the structure of Lisp syntax it's very rare for the programmer @@ -5277,6 +5358,25 @@ S-expression.") `(("emacs-evil" ,emacs-evil) ("emacs-lispy" ,emacs-lispy))) (build-system emacs-build-system) + (arguments + `(#:phases + ;; XXX: mysterious whitespace issue with one test + (modify-phases %standard-phases + (add-before 'check 'make-test-writable + (lambda _ + (make-file-writable "lispyville-test.el") + #t)) + (add-after 'make-test-writable 'remove-test + (lambda _ + (emacs-batch-edit-file "lispyville-test.el" + `(progn (progn (goto-char (point-min)) + (re-search-forward + "ert-deftest lispyville-comment-and-clone-dwim") + (beginning-of-line) + (kill-sexp)) + (basic-save-buffer)))))) + #:tests? #t + #:test-command '("make" "test"))) (synopsis "Minor mode for integrating Evil with lispy") (description "LispyVille's main purpose is to provide a Lisp editing environment @@ -5287,12 +5387,11 @@ state and will work even without lispy being enabled.") (license license:gpl3+)))) (define-public emacs-lpy - (let ((commit "553d28f7b6523ae5d44d34852ab770b871b0b0ad") - (version "0.1.0") - (revision "1")) + (let ((commit "dfd9a0fc8f84674fc669eab2942cfa038d7dc590") + (revision "2")) (package (name "emacs-lpy") - (version (git-version version revision commit)) + (version (git-version "0.1.0" revision commit)) (source (origin (method git-fetch) @@ -5301,7 +5400,7 @@ state and will work even without lispy being enabled.") (commit commit))) (sha256 (base32 - "0kl9b3gga18cwv5cq4db8i6b7waj6mp3h2l7qjnp7wq6dpvwhn0i")) + "15y1fvn1sjngpiqlq090hxqhmxp32f88rspfapwcisxa3hcg5r5a")) (file-name (git-file-name name version)))) (propagated-inputs `(("emacs-zoutline" ,emacs-zoutline) @@ -5610,6 +5709,9 @@ to all the other commands, too.") (sha256 (base32 "0766bbr4piia9vfr4ivd2gwi8dxah654adv6h28ylz4q8xmfzm1b")))) (build-system emacs-build-system) + (arguments + `(#:tests? #t + #:test-command '("make" "test"))) (home-page "https://github.com/mooz/js2-mode/") (synopsis "Improved JavaScript editing mode for Emacs") (description @@ -5786,7 +5888,7 @@ If you want to mark a folder manually as a project just create an empty (define-public emacs-elfeed (package (name "emacs-elfeed") - (version "3.1.0") + (version "3.2.0") (source (origin (method git-fetch) @@ -5795,7 +5897,7 @@ If you want to mark a folder manually as a project just create an empty (commit version))) (file-name (git-file-name name version)) (sha256 - (base32 "1bzpl6lc7kq9bph4bfz1fn19207blrnhjr2g7yinhn0nnnjmxi8i")))) + (base32 "0m0a35210pb4yf6m8mzaq6nkl9x6fphjjqyl3dzygnmmzxkc8aw2")))) (build-system emacs-build-system) (arguments `(#:tests? #t @@ -6921,11 +7023,10 @@ surrounding lines.") (define-public emacs-evil-lion (let ((commit "6b03593f5dd6e7c9ca02207f9a73615cf94c93ab") - (version "0.0.2") (revision "1")) (package (name "emacs-evil-lion") - (version (git-version version revision commit)) + (version (git-version "0.0.2" revision commit)) (source (origin (method git-fetch) @@ -6938,6 +7039,9 @@ surrounding lines.") "1a162hynp0jcsn50c1w5a02mrw9w3q05c7lkqzqd25px3d0p772q")))) (build-system emacs-build-system) (propagated-inputs `(("emacs-evil" ,emacs-evil))) + (arguments + `(#:tests? #t + #:test-command '("make" "test"))) (home-page "https://github.com/edkolev/evil-lion") (synopsis "Align operator for @code{evil-mode}") (description @@ -7401,6 +7505,11 @@ procedures for emacs-lisp-mode.") (base32 "1p3qa7g0wa0wbviv2f8bda39cjys3naayk5xjm3nxxmqsyy8papx")))) (build-system emacs-build-system) (propagated-inputs `(("emacs-dash" ,emacs-dash))) + (native-inputs + `(("emacs-ert-runner" ,emacs-ert-runner))) + (arguments + `(#:tests? #t + #:test-command '("ert-runner"))) (home-page "https://github.com/Wilfred/ht.el") (synopsis "Hash table library for Emacs") (description @@ -9279,30 +9388,29 @@ settings).") (license license:gpl3+))) (define-public emacs-hercules - (let ((commit "3345904a0dab4c7a4d4478f0766f1d9f5d1bb501") - (revision "1")) - (package - (name "emacs-hercules") - (version (git-version "0.2" revision commit)) - (source - (origin - (method git-fetch) - (uri (git-reference - (url "https://gitlab.com/jjzmajic/hercules.el.git") - (commit commit))) - (file-name (git-file-name name version)) - (sha256 - (base32 "0cpq8h6l47nqhzch6snax5yrhxl8p4wn35q13ci35lj3iq8kmlk8")))) - (build-system emacs-build-system) - (propagated-inputs - `(("emacs-which-key" ,emacs-which-key))) - (home-page "https://gitlab.com/jjzmajic/hercules.el") - (synopsis "Call a chain of related commands without repeated prefix keys") - (description - "This package provides sticky-key-like functionality to obviate the + (package + (name "emacs-hercules") + (version "0.2.1") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://gitlab.com/jjzmajic/hercules.el.git") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "19939pf5d6p2facmfhpyghx0vipb5k6ry3bmkmjfkj1zp132zfqf")))) + (build-system emacs-build-system) + (propagated-inputs + `(("emacs-which-key" ,emacs-which-key))) + (home-page "https://gitlab.com/jjzmajic/hercules.el") + (synopsis "Call a chain of related commands without repeated prefix keys") + (description + "This package provides sticky-key-like functionality to obviate the need for repeated prefix-key sequences, and can reuse existing keymaps. The list of commands is displayed in a handy popup.") - (license license:gpl3+)))) + (license license:gpl3+))) (define-public emacs-ws-butler (package @@ -9424,8 +9532,8 @@ functions written in continuation-passing style.") (license license:gpl3+))) (define-public emacs-attrap - (let ((commit "3b092bb8f6755a97e6ecb7623b9d2dde58beba4a") - (revision "1")) + (let ((commit "18cd1f7832870a36c404e872fa83a271fe8e688d") + (revision "2")) (package (name "emacs-attrap") (version (git-version "1.0" revision commit)) @@ -9436,7 +9544,7 @@ functions written in continuation-passing style.") (commit commit))) (sha256 (base32 - "05d32980saji8ja1pcv65l0s3dq7w0n5hpikbf246hciy1x067pp")) + "078391949h0fgmshin8f79a1a595m06ig577rkgjqgngcp0d61l9")) (file-name (git-file-name name version)))) (build-system emacs-build-system) (propagated-inputs @@ -10166,7 +10274,7 @@ Feautures: (define-public emacs-evil-matchit (package (name "emacs-evil-matchit") - (version "2.3.3") + (version "2.3.4") (source (origin (method git-fetch) @@ -10175,7 +10283,7 @@ Feautures: (commit version))) (file-name (git-file-name name version)) (sha256 - (base32 "04kllxd7vvziwqiff3vx60a0r6805wynsla73j8xkcz4yzk8q91r")))) + (base32 "1nflkmx08n3ya5vaipy1xg19hnqcp6f7ddsx9xjh5gl6ix2iz0az")))) (build-system emacs-build-system) (propagated-inputs `(("emacs-evil" ,emacs-evil))) @@ -11239,8 +11347,8 @@ as well as functions for navigating between these headings.") (define-public emacs-org-super-agenda ;; emacs-org-sidebar depends on a newer commit than the latest release version. - (let ((commit "375bde4ca72494ac88a2a9738754f047fe45cc4e") - (revision "1")) + (let ((commit "f0ee7ed9766d352d16a787707d35695b48cbf153") + (revision "2")) (package (name "emacs-org-super-agenda") (version (git-version "1.1.1" revision commit)) @@ -11252,11 +11360,12 @@ as well as functions for navigating between these headings.") (file-name (git-file-name name version)) (sha256 (base32 - "0hrwf02fqjm0d9gj146ax67ib76093qpqh7066dcxj2gy20625yj")))) + "1b1qi96x83acv2frl94i4frx46i82vipaa8mfwpzyj2gyq2bq5zf")))) (build-system emacs-build-system) (propagated-inputs `(("emacs-org" ,emacs-org) ("emacs-dash" ,emacs-dash) + ("emacs-ts" ,emacs-ts) ("emacs-ht" ,emacs-ht) ("emacs-s" ,emacs-s))) (home-page "https://github.com/alphapapa/org-super-agenda") @@ -11290,8 +11399,8 @@ tables of contents.") (license license:gpl3+))) (define-public emacs-ts - (let ((commit "93c074f2895a204e003e8c7f3033c37d6486fac8") - (revision "1")) + (let ((commit "395649a2f2ba79028331bb1fa9ec08b218950ff6") + (revision "2")) (package (name "emacs-ts") (version (git-version "0.1" revision commit)) @@ -11302,7 +11411,7 @@ tables of contents.") (commit commit))) (sha256 (base32 - "0lpyv78k04vbp9glnv14dawcfgi3m49847wlgwfmkdq5cr3fn735")) + "02603wv66fplsigxd87jy23hrb5g9vigszcpdqrdv0ypaqaxlr3a")) (file-name (git-file-name name version)))) (build-system emacs-build-system) (propagated-inputs @@ -11893,6 +12002,12 @@ tramp.") (sha256 (base32 "1gs95xnmnn8aa4794k7h8mw1sz1nfdh9v0caqj6yvnsdnwy74n5x")))) (build-system emacs-build-system) + (native-inputs + `(("emacs-ert-runner" ,emacs-ert-runner) + ("emacs-undercover" ,emacs-undercover))) + (arguments + `(#:tests? #t + #:test-command '("ert-runner"))) (home-page "https://github.com/Wilfred/loop.el") (synopsis "Imperative loop structures for Emacs") (description "Loop structures familiar to users of other languages. This @@ -11921,6 +12036,12 @@ continue.") ("emacs-loop" ,emacs-loop) ("emacs-s" ,emacs-s) ("emacs-shut-up" ,emacs-shut-up))) + (native-inputs + `(("emacs-ert-runner" ,emacs-ert-runner) + ("emacs-undercover" ,emacs-undercover))) + (arguments + `(#:tests? #t + #:test-command '("ert-runner"))) (home-page "https://github.com/Wilfred/elisp-refs") (synopsis "Find callers of elisp functions or macros") (description "Find references to functions, macros or variables. Unlike a @@ -11929,12 +12050,11 @@ confused by comments or @code{foo-bar} matching @code{foo}.") (license license:gpl3+))) (define-public emacs-crux - (let ((commit "4f5c8fefd5a6aa52e128c4a0401cc86410d6ac8f") - (revision "1")) + (let ((commit "308f17d914e2cd79cbc809de66d02b03ceb82859") + (revision "2")) (package (name "emacs-crux") - (version (string-append "0.3.0" "-" revision "." - (string-take commit 7))) + (version (git-version "0.3.0" revision commit)) (source (origin (method git-fetch) @@ -11944,7 +12064,7 @@ confused by comments or @code{foo-bar} matching @code{foo}.") (file-name (git-file-name name version)) (sha256 (base32 - "1fdxvv25cs01sg6fmvmzxpzvs50i6v8n2jya60lbavxqqhi0sbxd")))) + "0rf84finwlvmy0xpgyljjvnrijlmkzjyw9rh97svgxp9c1rzfk0x")))) (build-system emacs-build-system) (home-page "https://github.com/bbatsov/crux") (synopsis "Collection of useful functions for Emacs") @@ -12179,8 +12299,8 @@ until the top-level form is no longer a macro call.") (license license:gpl3))) (define-public emacs-isearch-prop - (let ((commit "5e9dc44cf582d998aaa73ccd4d07cbda01248156") - (revision "1")) + (let ((commit "4a2765f835dd115d472142da05215c4c748809f4") + (revision "2")) (package (name "emacs-isearch-prop") (version (git-version "0" revision commit)) @@ -12193,7 +12313,7 @@ until the top-level form is no longer a macro call.") (file-name (git-file-name name version)) (sha256 (base32 - "1xawppy705ybsgx566zvj8zk2aajq0sqvhvfs7nijqq32lx0a2zl")))) + "06gdk5m84q6pxwng8rjxny1zkll8f3m2x6lw4xyib2dvg7iaslh3")))) (build-system emacs-build-system) (home-page "https://www.emacswiki.org/emacs/isearch-prop.el") (synopsis "Extensions to @code{isearch.el}") @@ -12205,10 +12325,11 @@ until the top-level form is no longer a macro call.") (license license:gpl3+)))) (define-public emacs-company-lua - (let ((commit "0be8122f3adf57ad27953bf4b03545d6298d3da4")) + (let ((commit "29f6819de4d691e5fd0b62893a9f4fbc1c6fcb52") + (revision "2")) (package (name "emacs-company-lua") - (version (git-version "0.1" "1" commit)) + (version (git-version "0.1" "2" commit)) (source (origin (method git-fetch) @@ -12218,13 +12339,15 @@ until the top-level form is no longer a macro call.") (file-name (git-file-name name version)) (sha256 (base32 - "1d9i165apgmwns7b2fd5wcpjpkah3dyj20v5sb8ynvz6qhhr5r9c")))) + "0ny2dcc7c585p7v3j6q0rpkbj1qmf2ismy8a5020jpr585xvz0hh")))) (build-system emacs-build-system) (propagated-inputs `(("emacs-company" ,emacs-company) ("emacs-s" ,emacs-s) ("emacs-f" ,emacs-f) ("emacs-lua-mode" ,emacs-lua-mode))) + (arguments + `(#:include (cons* "^lua\\/" %default-include))) (home-page "https://github.com/ptrv/company-lua") (synopsis "Company backend for Lua") (description @@ -12671,6 +12794,12 @@ downloading manager for Emacs.") ("emacs-s" ,emacs-s) ("emacs-f" ,emacs-f) ("emacs-shut-up" ,emacs-shut-up))) + (native-inputs + `(("emacs-ert-runner" ,emacs-ert-runner) + ("emacs-undercover" ,emacs-undercover))) + (arguments + `(#:tests? #t + #:test-command '("ert-runner"))) (home-page "https://github.com/Wilfred/helpful") (synopsis "More contextual information in Emacs help") (description "@code{helpful} is an alternative to the built-in Emacs help @@ -12738,6 +12867,12 @@ and doesn't require memorisation of commands. ("emacs-f" ,emacs-f) ("emacs-spinner" ,emacs-spinner) ("emacs-shut-up" ,emacs-shut-up))) + (native-inputs + `(("emacs-ert-runner" ,emacs-ert-runner) + ("emacs-undercover" ,emacs-undercover))) + (arguments + `(#:tests? #t + #:test-command '("ert-runner"))) (synopsis "Suggest Elisp functions that give the output requested") (description "Suggest.el will find functions that give the output requested. It's a great way of exploring list, string and arithmetic @@ -12904,10 +13039,11 @@ browse the phrases by the paper section and fill-in the blanks if required.") (license license:gpl3+)))) (define-public emacs-auto-yasnippet - (let ((commit "d1ccfea87312c6dd8cf8501ab5b71b1d3d44d95b")) + (let ((commit "624b0d9711222073a2a3f2186e2605eb99fc83c9") + (revision "2")) (package (name "emacs-auto-yasnippet") - (version (git-version "0.3.0" "1" commit)) + (version (git-version "0.3.0" revision commit)) (source (origin (method git-fetch) (uri (git-reference @@ -12916,17 +13052,11 @@ browse the phrases by the paper section and fill-in the blanks if required.") (file-name (git-file-name name version)) (sha256 (base32 - "1i8k2qiyzd5rq0zplk4xb5nfa5mp0ibxbzwqj6c7877waq7244xk")))) + "15g8wi067f345xhpi0c12w0h04p4f4lpccwmdjdfj8hzfl4gyxy9")))) (build-system emacs-build-system) (arguments - '(#:phases - (modify-phases %standard-phases - (add-before 'install 'check - (lambda _ - (invoke "emacs" "--batch" - "-l" "auto-yasnippet.el" - "-l" "auto-yasnippet-test.el" - "-f" "ert-run-tests-batch-and-exit")))))) + '(#:tests? #t + #:test-command '("make" "test"))) (propagated-inputs `(("emacs-yasnippet" ,emacs-yasnippet))) (home-page "https://github.com/abo-abo/auto-yasnippet/") @@ -13136,10 +13266,11 @@ perform regression test for packages that provide font-lock rules.") (license license:gpl3+)))) (define-public emacs-grep-context - (let ((commit "a17c57e66687a54e195e08afe776bdd60cb6c0a7")) + (let ((commit "5a4e3efdf775755c1bbefcfe4b461c1166d81d7d") + (revision "1")) (package (name "emacs-grep-context") - (version (git-version "0.1" "1" commit)) + (version (git-version "0.1.0" revision commit)) (source (origin (method git-fetch) @@ -13149,11 +13280,11 @@ perform regression test for packages that provide font-lock rules.") (file-name (git-file-name name version)) (sha256 (base32 - "1nqfa6kjzjshww4hnwg1c0vcr90bdjihy3kmixq3c3jkvxg99b62")))) + "00q7l4a3c0ay6g5ff9bfa2qgkiswsyh4s6pqnpg0zpzhvv5710f5")))) (build-system emacs-build-system) (propagated-inputs `(("emacs-dash" ,emacs-dash))) - (home-page "https://github.com/nashamri/academic-phrases") + (home-page "https://github.com/mkcms/grep-context") (synopsis "Increase context in compilation and grep buffers") (description "This package provides an Emacs package for more context in @@ -13758,8 +13889,8 @@ systems.") (license license:gpl3+))) (define-public emacs-isearch+ - (let ((commit "95e49af9dbf0254e095a11f115e101b52659520a") - (revision "1")) + (let ((commit "7c251b91a67bf914066e23e269ba52fda5b45f5f") + (revision "2")) (package (name "emacs-isearch+") (version (git-version "0" revision commit)) @@ -13772,7 +13903,7 @@ systems.") (file-name (git-file-name name version)) (sha256 (base32 - "0xhd9zgknf4lvzyf4apirpd7spb1hbpzkvys00a7pkmd0vvahk0v")))) + "1w2799714jcdycjlxgs8lpmmz6dmzvcvqy8xwxhvmgpb60g4f2yr")))) (build-system emacs-build-system) (home-page "https://www.emacswiki.org/emacs/isearch+.el") (synopsis "Extensions to @code{isearch.el}") @@ -14680,12 +14811,11 @@ viewing files with long lines.") (license license:gpl3+)))) (define-public emacs-github-review - (let ((commit "9c3ffe30fba5d02e9951e76d1a5be2ed046663da") - (version "0.1") - (revision "1")) + (let ((commit "a13a3b4f1b6114a32af843971a145ab880f51232") + (revision "2")) (package (name "emacs-github-review") - (version (git-version version revision commit)) + (version (git-version "0.1" revision commit)) (source (origin (method git-fetch) @@ -14695,12 +14825,18 @@ viewing files with long lines.") (file-name (git-file-name name version)) (sha256 (base32 - "078rv6f2p3wrznhgvmkhd071bwy72007f5l2m2a0r1k2i3vbfaja")))) + "0injfpxzgfhmqalba845j5l5cdcxxqz43knhxwinf36g52nfabl0")))) (build-system emacs-build-system) (inputs `(("emacs-dash" ,emacs-dash) ("emacs-s" ,emacs-s) ("emacs-ghub" ,emacs-ghub))) + (native-inputs + `(("emacs-buttercup" ,emacs-buttercup) + ("emacs-undercover" ,emacs-undercover))) + (arguments + `(#:tests? #t + #:test-command '("buttercup" "-L" "test/github-review-test.el"))) (home-page "https://github.com/charignon/github-review") (synopsis "Review GitHub pull requests within Emacs") (description "This package provides commands to pull in, comment on, and @@ -14785,12 +14921,11 @@ Pandoc, the document-conversion tool.") (license license:bsd-3))) (define-public emacs-ccls - (let ((commit "2764ddd57b03646f0327ea680a954b4a67450aef") - (version "0.1") - (revision "1")) + (let ((commit "9061ebbf9d5ec3ee7e88dbd226c77017cf0447b1") + (revision "2")) (package (name "emacs-ccls") - (version (git-version version revision commit)) + (version (git-version "0.1" revision commit)) (source (origin (method git-fetch) @@ -14800,7 +14935,7 @@ Pandoc, the document-conversion tool.") (file-name (git-file-name name version)) (sha256 (base32 - "16427jvzhjy8kpvlgl3qzkzppv98124hkgi8q8pv1h7m46k9lhh3")))) + "106jh25ivq0ydiz37p51agk5zbpai7fv91pwn6dpqzsq5g281ls7")))) (build-system emacs-build-system) (propagated-inputs `(("emacs-dash" ,emacs-dash) @@ -15762,21 +15897,22 @@ other frame parameters.") (license license:gpl3+)))) (define-public emacs-general - (let ((commit "675050199b5a30d54a24b58a367db32c0bdc47f5")) + (let ((commit "f032c3a77079487d0ea563b17ee3e5b2fb084611") + (revision "2")) (package (name "emacs-general") - (version (git-version "0" "0" commit)) - (home-page "https://github.com/noctuid/general.el") + (version (git-version "0" revision commit)) (source (origin (method git-fetch) (uri (git-reference - (url (string-append home-page ".git")) + (url "https://github.com/noctuid/general.el.git") (commit commit))) (sha256 (base32 - "175yyhzk57yk1sskxh3d2jzhrh2waiibbcfsll167qxr117yji5h")) + "0lgh5z17ag5wvvnqwagvam29cp1n1vd50amn6df02xln80bsbllx")) (file-name (git-file-name name version)))) (build-system emacs-build-system) + (home-page "https://github.com/noctuid/general.el") (synopsis "More convenient key definitions in emacs") (description "@code{general.el} provides a more convenient method for binding keys in emacs (for both evil and non-evil users). Like @@ -16440,6 +16576,33 @@ like @code{company}, @code{flycheck}, and @code{projectile}.") and code peeking.") (license license:gpl3+))) +(define-public emacs-helm-lsp + (let ((commit "3a58ca4cfd94b9ab1e15e819d3b16ef568e8889b") + (revision "1")) + (package + (name "emacs-helm-lsp") + (version (git-version "0.1" revision commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/emacs-lsp/helm-lsp.git") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0wh5zai3s17ss2q8wcdd6d87hv1h3nbyrxxs4js9cas8m6y2ssjv")))) + (build-system emacs-build-system) + (propagated-inputs + `(("emacs-helm" ,emacs-helm) + ("emacs-lsp-mode" ,emacs-lsp-mode) + ("emacs-dash" ,emacs-dash))) + (home-page "https://github.com/emacs-lsp/helm-lsp") + (synopsis "Convert keyboard macros to Emacs Lisp") + (description + "This package displays keyboard macros or latest interactive commands +as Emacs Lisp.") + (license license:gpl3+)))) + (define-public emacs-helm-notmuch (package (name "emacs-helm-notmuch") @@ -16571,8 +16734,8 @@ packages with a consistent way to use them.") (license license:gpl3+)))) (define-public emacs-undo-propose-el - (let ((commit "21a5cdc8ebfe8113f7039867c4abb0197c0fe71c") - (revision "1")) + (let ((commit "47b7df0c97ad0099537d1ade21c4c52f0618a945") + (revision "2")) (package (name "emacs-undo-propose-el") (version (git-version "3.0.0" revision commit)) @@ -16585,7 +16748,7 @@ packages with a consistent way to use them.") (file-name (git-file-name name version)) (sha256 (base32 - "035hav4lfxwgikg3zpb4cz1nf08qfp27awl87dqbm2ly6d74lpny")))) + "078bs8lk9f0lklxqh15976fffayg5z5386y59nxxfhm27lmwgka9")))) (build-system emacs-build-system) (home-page "https://github.com/jackkamm/undo-propose-el") (synopsis "Simple and safe navigation of @code{undo} history") @@ -16675,12 +16838,11 @@ buffers.") (license license:gpl3+)))) (define-public emacs-js2-refactor-el - (let ((commit "79124b3274c43ad1f9ec6205fa362576552db02f") - (version "0.9.0") - (revision "27")) + (let ((commit "d4c40b5fc86d3edd7c6a7d83ac86483ee1cb7a28") + (revision "2")) (package (name "emacs-js2-refactor-el") - (version (git-version version revision commit)) + (version (git-version "0.9.0" revision commit)) (source (origin (method git-fetch) @@ -16690,7 +16852,7 @@ buffers.") (file-name (git-file-name name version)) (sha256 (base32 - "1wswhlpbd3airrhyncb9vblqigwnqg9n96z0iis8jnz37q2whica")))) + "08b25y3raz0p98zxk9xdd8nj9shqd6mzrqhbq1gg4cwsmi7h7ly1")))) (build-system emacs-build-system) (propagated-inputs `(("emacs-dash" ,emacs-dash) @@ -16778,11 +16940,10 @@ parent directory using @code{Eshell}.") (define-public emacs-tco-el (let ((commit "482db5313f090b17ed22ccd856f0e141dc75afe6") - (version "0.3") (revision "1")) (package (name "emacs-tco-el") - (version (git-version version revision commit)) + (version (git-version "0.3" revision commit)) (source (origin (method git-fetch) @@ -16796,6 +16957,12 @@ parent directory using @code{Eshell}.") (build-system emacs-build-system) (propagated-inputs `(("emacs-dash" ,emacs-dash))) + (native-inputs + `(("emacs-ert-runner" ,emacs-ert-runner) + ("emacs-undercover" ,emacs-undercover))) + (arguments + `(#:tests? #t + #:test-command '("ert-runner"))) (home-page "https://github.com/Wilfred/tco.el") (synopsis "Tail-call optimization for Emacs Lisp") (description "This package provides tail-call optimization for Emacs @@ -16803,12 +16970,11 @@ Lisp functions that call themselves in tail position.") (license license:gpl3+)))) (define-public emacs-equake - (let ((commit "ed15fd55cd4f2276161a6f712ed0b83cd10a8cdc") - (version "0.85") - (revision "1")) + (let ((commit "7eddc025ee61b83029363e22219af228b8c20681") + (revision "2")) (package (name "emacs-equake") - (version (git-version version revision commit)) + (version (git-version "0.85" revision commit)) (source (origin (method git-fetch) @@ -16818,7 +16984,7 @@ Lisp functions that call themselves in tail position.") (file-name (git-file-name name version)) (sha256 (base32 - "04kj88rlnn22gwmmv2gly2ibi6jka6l2cd4979pi6lhlvqqgjdnj")))) + "1c55pbqak3d02sw6z1139baxzy401b90g0gxzcc3j6sgplz6sc6w")))) (build-system emacs-build-system) (propagated-inputs `(("emacs-dash" ,emacs-dash) @@ -16959,12 +17125,11 @@ invoked.") (license license:gpl3+))) (define-public emacs-prodigy-el - (let ((commit "701dccaa56de9e6a330c05bde33bce4f3b3d6a97") - (version "0.7.0") - (revision "28")) + (let ((commit "0a12eec1f001a4eef16b2c0c524f02f2647a4ff1") + (revision "2")) (package (name "emacs-prodigy-el") - (version (git-version version revision commit)) + (version (git-version "0.7.0" revision commit)) (source (origin (method git-fetch) @@ -16974,7 +17139,7 @@ invoked.") (file-name (git-file-name name version)) (sha256 (base32 - "1vyvxawlayp2nra0q83146q2nzv8qwn5a4nj0sx1jc90a0a83vgj")))) + "02kysq57kqzg0zkhaf302ada9cp9spgp71z8vbdq4c7dl6x75h4g")))) (build-system emacs-build-system) (propagated-inputs `(("emacs-dash" ,emacs-dash) @@ -17109,12 +17274,11 @@ definition-jumping and type-checking on demand.") (license license:bsd-3)))) (define-public emacs-rjsx-mode - (let ((commit "03dd8d1683501e81b58674d64c3032b7b718402c") - (version "0.4.0") - (revision "35")) + (let ((commit "0e7fa6b4facdec4f85a7a8865bdf59dfd57217b5") + (revision "2")) (package (name "emacs-rjsx-mode") - (version (git-version version revision commit)) + (version (git-version "0.4" revision commit)) (source (origin (method git-fetch) @@ -17124,10 +17288,13 @@ definition-jumping and type-checking on demand.") (file-name (git-file-name name version)) (sha256 (base32 - "1kc44g9f38klpjklmz9n50a28nqv7prz6ck6ghdr6bnj1s98pb8a")))) + "0s0871sx3ch09kgvbcp9na4zdrfrda62xjq8m9knbq5vnj8q8qpi")))) (build-system emacs-build-system) (propagated-inputs `(("emacs-js2-mode" ,emacs-js2-mode))) + (arguments + `(#:tests? #t + #:test-command '("make" "test"))) (home-page "https://github.com/felipeochoa/rjsx-mode") (synopsis "Major mode for JSX files") (description "This package extends the parser of @code{js2-mode} to @@ -17202,6 +17369,9 @@ previewed by scrolling up and down within a @code{dired} buffer.") (build-system emacs-build-system) (propagated-inputs `(("emacs-ivy" ,emacs-ivy))) + (arguments + `(#:tests? #t + #:test-command '("make" "test"))) (home-page "https://github.com/redguardtoo/counsel-etags") (synopsis "Fast @code{Ctags}/@code{Etags} solution with @code{ivy-mode}") (description "This package uses @code{ivy-mode} to facilitate navigating @@ -17311,12 +17481,11 @@ to be examined using Ediff.") (license license:expat))) (define-public emacs-info-plus - (let ((commit "b837d710f7d58db586116cf6f75e75a9a074bc4b") - (version "5101") - (revision "55")) + (let ((commit "4a6b93c170169594e1e8ea60cd799a1a88a969da") + (revision "2")) (package (name "emacs-info-plus") - (version (git-version version revision commit)) + (version (git-version "0" revision commit)) (source (origin (method git-fetch) @@ -17326,7 +17495,7 @@ to be examined using Ediff.") (file-name (git-file-name name version)) (sha256 (base32 - "1knyjkdm4rcs3qrc51jllw46ph7ycq5zxnvl70ydchzfwava43h6")))) + "1xzmx7m1qbl3b1x6yq1db1a108xqaa64ljfv1hdw763zmy4kc6m0")))) (build-system emacs-build-system) (home-page "https://github.com/emacsmirror/info-plus") (synopsis "Extensions to @file{info.el}") @@ -18168,7 +18337,7 @@ JIRA issue servers.") (synopsis "Mode for fontification of ~/.ssh/config") (description - "This packages fontifies the ssh config keywords and creates + "This package fontifies the ssh config keywords and creates keybindings for skipping from host section to host section.") (license license:gpl3+)))) @@ -18241,14 +18410,13 @@ Emacs that integrate with major modes like Org-mode.") (version "2.3.1") (source (origin - (method url-fetch) - (uri (string-append - "https://stable.melpa.org/packages/elixir-mode-" - version - ".tar")) + (method git-fetch) + (uri (git-reference + (url "https://github.com/elixir-editors/emacs-elixir.git") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) (sha256 - (base32 - "091cizxg1aw8bkj58y048mj020ssapjflav633z9bl6gmi10dy4v")))) + (base32 "06bi68x49v6f7flpz279mm4jpg31ll3s274givm3pvr8slcxs6xg")))) (build-system emacs-build-system) (propagated-inputs `(("emacs-pkg-info" ,emacs-pkg-info))) diff --git a/gnu/packages/enchant.scm b/gnu/packages/enchant.scm index cfec161784..bcf2507e86 100644 --- a/gnu/packages/enchant.scm +++ b/gnu/packages/enchant.scm @@ -33,7 +33,7 @@ (define-public enchant (package (name "enchant") - (version "2.2.5") + (version "2.2.7") (source (origin (method url-fetch) (uri (string-append "https://github.com/AbiWord/enchant/releases" @@ -41,7 +41,7 @@ version ".tar.gz")) (sha256 (base32 - "0iqwzs11i9fvqdxv5kn0svcn2mzymn657qf3j66lg8dx1nh4xkpz")))) + "029smcna98hllgkm2gy94qa7qphxs4xaa8cdbg5kaaw16mhrf8hv")))) (build-system gnu-build-system) (arguments '(#:configure-flags '("--disable-static" diff --git a/gnu/packages/engineering.scm b/gnu/packages/engineering.scm index c1c1b18ed3..bbd9151995 100644 --- a/gnu/packages/engineering.scm +++ b/gnu/packages/engineering.scm @@ -13,6 +13,7 @@ ;;; Copyright © 2019 Tim Stahel ;;; Copyright © 2019 Jovany Leandro G.C ;;; Copyright © 2019 Steve Sprang +;;; Copyright © 2019 John Soo ;;; ;;; This file is part of GNU Guix. ;;; @@ -50,9 +51,11 @@ #:use-module (gnu packages bison) #:use-module (gnu packages boost) #:use-module (gnu packages check) + #:use-module (gnu packages cmake) #:use-module (gnu packages commencement) #:use-module (gnu packages compression) #:use-module (gnu packages curl) + #:use-module (gnu packages documentation) #:use-module (gnu packages flex) #:use-module (gnu packages fontutils) #:use-module (gnu packages fpga) @@ -66,10 +69,12 @@ #:use-module (gnu packages gnome) #:use-module (gnu packages gperf) #:use-module (gnu packages graphics) + #:use-module (gnu packages graphviz) #:use-module (gnu packages groff) #:use-module (gnu packages gtk) #:use-module (gnu packages guile) #:use-module (gnu packages image) + #:use-module (gnu packages image-processing) #:use-module (gnu packages imagemagick) #:use-module (gnu packages linux) ;FIXME: for pcb #:use-module (gnu packages m4) @@ -84,6 +89,7 @@ #:use-module (gnu packages qt) #:use-module (gnu packages readline) #:use-module (gnu packages swig) + #:use-module (gnu packages tbb) #:use-module (gnu packages tcl) #:use-module (gnu packages texinfo) #:use-module (gnu packages tls) @@ -2214,3 +2220,214 @@ interactive modeler, OpenSCAD generates 3D models from a script, giving you full programmatic control over your models.") (home-page "https://www.openscad.org/") (license license:gpl2+))) + +(define-public freecad + (package + (name "freecad") + (version "0.18.3") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/FreeCAD/FreeCAD.git") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1ny29y0h8smg1bwi5yn4kcnyfprqh3v7v2z8837cmmhcwp8dr95m")))) + (build-system cmake-build-system) + (native-inputs + `(("doxygen" ,doxygen) + ("graphviz" ,graphviz) + ("qttools" ,qttools) + ("pkg-config" ,pkg-config) + ("swig" ,swig))) + (inputs + `(("boost" ,boost) + ("coin3D" ,coin3D) + ("eigen" ,eigen) + ("freetype" ,freetype) + ("glew" ,glew) + ("hdf5" ,hdf5-1.10) + ("libarea" ,libarea) + ("libmedfile" ,libmedfile) + ("libspnav" ,libspnav) + ("libxi" ,libxi) + ("libxmu" ,libxmu) + ("openmpi" ,openmpi) + ("opencascade-occt" ,opencascade-occt) + ("python-matplotlib" ,python-matplotlib) + ("python-pyside-2" ,python-pyside-2) + ("python-pyside-2-tools" ,python-pyside-2-tools) + ("python-shiboken-2" ,python-shiboken-2) + ("python-wrapper" ,python-wrapper) + ("qtbase" ,qtbase) + ("qtsvg" ,qtsvg) + ("qtx11extras" ,qtx11extras) + ("qtxmlpatterns" ,qtxmlpatterns) + ;; qtwebkit is optional. We remove it currently, because it takes + ;; much time to compile and substitutes are often unavailable + ;;("qtwebkit" ,qtwebkit) + ("tbb" ,tbb) + ("vtk" ,vtk) + ("xerces-c" ,xerces-c) + ("zlib" ,zlib))) + (arguments + `(#:tests? #f + #:configure-flags + (list + "-DBUILD_QT5=ON" + (string-append "-DCMAKE_INSTALL_LIBDIR=" + (assoc-ref %outputs "out") "/lib")) + #:phases + (modify-phases %standard-phases + (add-before 'configure 'restore-pythonpath + (lambda _ + (substitute* "src/Main/MainGui.cpp" + (("_?putenv\\(\"PYTHONPATH=\"\\);") "")) + #t)) + (add-after 'install 'wrap-pythonpath + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (wrap-program (string-append out "/bin/FreeCAD") + (list "PYTHONPATH" + 'prefix (list (getenv "PYTHONPATH"))))) + #t))))) + (home-page "https://www.freecadweb.org/") + (synopsis "Your Own 3D Parametric Modeler") + (description + "FreeCAD is a general purpose feature-based, parametric 3D modeler for +CAD, MCAD, CAx, CAE and PLM, aimed directly at mechanical engineering and +product design but also fits a wider range of uses in engineering, such as +architecture or other engineering specialties. It is 100% Open Source (LGPL2+ +license) and extremely modular, allowing for very advanced extension and +customization.") + (license + (list + license:lgpl2.1+ + license:lgpl2.0+ + license:gpl3+ + license:bsd-3)))) + +(define-public libmedfile + (package + (name "libmedfile") + (version "4.0.0") + (source + (origin + (method url-fetch) + (uri (string-append + "https://files.salome-platform.org/Salome/other/med-" + version ".tar.gz")) + (sha256 + (base32 + "017h9p0x533fm4gn6pwc8kmp72rvqmcn6vznx72nkkl2b05yjx54")))) + (build-system cmake-build-system) + (inputs `(("hdf5" ,hdf5-1.10))) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-after 'install 'remove-test-output + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (delete-file-recursively + (string-append out "/bin/testc")) + #t)))))) + (home-page "https://www.salome-platform.org") + (synopsis "Library to read and write MED files") + (description + "The purpose of the MED module is to provide a standard for storing and +recovering computer data associated to numerical meshes and fields, and to +facilitate the exchange between codes and solvers. + +The persistent data storage is based upon HDF format (like CGNS, a standard +developed by Boeing and NASA in the area of Computational Fluid Dynamic). + +MED also provides structures to hold data on meshes and fields. These +structures are exchanged between solvers, hide the communication level (CORBA +or MPI), and offer persistence (read/write in .med files). + +The main benefit of a common exchange format is reduced complexity of code +coupling. It also allows sharing such high level functionalities as +computation of nodal connectivity of sub-elements (faces and edges), +arithmetic operations on fields, entity location functionalities, and +interpolation toolkit.") + (license license:gpl3+))) + +(define-public libarea + (let ((revision "1") + (commit "8f8bac811c10f1f01fda0d742a18591f61dd76ee")) + (package + (name "libarea") + (version (git-version "0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference (url "https://github.com/Heeks/libarea.git") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 "0pvqz6cabxqdz5y26wnj6alkn8v5d7gkx0d3h8xmg4lvy9r3kh3g")))) + (build-system gnu-build-system) + (inputs `(("boost" ,boost) + ("python-wrapper" ,python-wrapper))) + (native-inputs + `(("cmake" ,cmake))) + (arguments + `(#:tests? #f + #:phases + (modify-phases %standard-phases + (add-after 'configure 'cmake-configure + (lambda* (#:key inputs outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (cmake (assoc-ref inputs "cmake"))) + (mkdir-p "build") + (invoke "cmake" + (string-append "-DCMAKE_INSTALL_PREFIX=" out))))) + (delete 'configure)))) + (home-page "https://github.com/Heeks/libarea") + (synopsis + "Library and python module for pocketing and profiling operations") + (description + "Area is a CAM-related software for pocketing operation. + +This project provides library and associated python-module to compute pocket +operations.") + (license (list + license:bsd-3 + license:gpl3+))))) + +(define-public libspnav + (package + (name "libspnav") + (version "0.2.3") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/FreeSpacenav/libspnav.git") + (commit (string-append "libspnav-" version)))) + (sha256 + (base32 + "098h1jhlj87axpza5zgy58prp0zn94wyrbch6x0s7q4mzh7dc8ba")) + (file-name (git-file-name name version)))) + (build-system gnu-build-system) + (inputs + `(("libx11" ,libx11))) + (arguments `(#:tests? #f)) + (home-page "http://spacenav.sourceforge.net/") + (synopsis + "Library for communicating with spacenavd or 3dxsrv") + (description + "The libspnav library is provided as a replacement of the magellan +library. It provides a cleaner, and more orthogonal interface. libspnav +supports both the original X11 protocol for communicating with the driver, and +the new alternative non-X protocol. Programs that choose to use the X11 +protocol, are automatically compatible with either the free spacenavd driver +or the official 3dxserv, as if they were using the magellan SDK. + +Also, libspnav provides a magellan API wrapper on top of the new API. So, any +applications that were using the magellan library, can switch to libspnav +without any changes. And programmers that are familliar with the magellan API +can continue using it with a free library without the restrictions of the +official SDK.") + (license license:bsd-3))) diff --git a/gnu/packages/enlightenment.scm b/gnu/packages/enlightenment.scm index cc9f43e935..2ff37d496f 100644 --- a/gnu/packages/enlightenment.scm +++ b/gnu/packages/enlightenment.scm @@ -65,7 +65,7 @@ (define-public efl (package (name "efl") - (version "1.22.4") + (version "1.22.5") (source (origin (method url-fetch) (uri (string-append @@ -73,7 +73,7 @@ version ".tar.xz")) (sha256 (base32 - "084ihxy6g86yczhln5vn1amxi4qzqhvk4lpz9005kx92i6wh4h25")))) + "1cjk56z0whpzcqwg3xdq23kyp1g83xa67m9dlp7ywmb36bn4ca59")))) (outputs '("out" ; 53 MB "include")) ; 21 MB (build-system gnu-build-system) diff --git a/gnu/packages/gdb.scm b/gnu/packages/gdb.scm index 5697664491..48d1c0da6b 100644 --- a/gnu/packages/gdb.scm +++ b/gnu/packages/gdb.scm @@ -1,7 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2013, 2014, 2015, 2019 Ludovic Courtès ;;; Copyright © 2015 Mark H Weaver -;;; Copyright © 2015, 2016 Efraim Flashner +;;; Copyright © 2015, 2016, 2019 Efraim Flashner ;;; ;;; This file is part of GNU Guix. ;;; @@ -109,14 +109,14 @@ written in C, C++, Ada, Objective-C, Pascal and more.") (define-public gdb-8.3 (package (inherit gdb-8.2) - (version "8.3") + (version "8.3.1") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/gdb/gdb-" version ".tar.xz")) (sha256 (base32 - "0bnpzz0rl672xg5547q5qck2sxi6cnyixmk8bbb4gifw17ipwbw0")))))) + "1i2pjwaafrlz7wqm40b4znr77ai32rjsxkpl2az38yyarpbv8m8y")))))) (define-public gdb ;; This is the fixed version that packages depend on. Update it rarely diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm index 03550b6fa8..b7e375e5d8 100644 --- a/gnu/packages/gnome.scm +++ b/gnu/packages/gnome.scm @@ -7259,9 +7259,9 @@ GLib/GObject code.") (version "3.26.1") (source (origin (method url-fetch) - (uri (string-append "mirror://gnome/sources/" name "/" + (uri (string-append "mirror://gnome/sources/libgnomekbd/" (version-major+minor version) "/" - name "-" version ".tar.xz")) + "libgnomekbd-" version ".tar.xz")) (sha256 (base32 "0y962ykn3rr9gylj0pwpww7bi20lmhvsw6qvxs5bisbn2mih5jpp")))) diff --git a/gnu/packages/graphics.scm b/gnu/packages/graphics.scm index b3518efc5f..1b94b66b51 100644 --- a/gnu/packages/graphics.scm +++ b/gnu/packages/graphics.scm @@ -14,6 +14,7 @@ ;;; Copyright © 2019 Mark H Weaver ;;; Copyright © 2019 Carlo Zancanaro ;;; Copyright © 2019 Steve Sprang +;;; Copyright © 2019 John Soo ;;; ;;; This file is part of GNU Guix. ;;; @@ -1060,3 +1061,49 @@ For example, two shapes can be combined by uniting them, by intersecting them, or by subtracting one shape from the other.") (home-page "http://www.opencsg.org/") (license license:gpl2)))) + +(define-public coin3D + (package + (name "coin3D") + (version "4.0.0") + (source + (origin + (method url-fetch) + (uri (string-append + "https://bitbucket.org/Coin3D/coin/downloads/coin-" + version "-src.zip")) + (sha256 + (base32 + "1mqwlqzvc9ydfxi0bfskwlil16mbnkphfz36p0zl2mvw6h05aqh0")) + (modules '((guix build utils))) + (snippet + '(begin + (for-each delete-file + '("cfg/csubst.exe" + "cfg/wrapmsvc.exe")) + #t)))) + (build-system cmake-build-system) + (native-inputs + `(("doxygen" ,doxygen) + ("graphviz" ,graphviz))) + (inputs + `(("boost" ,boost) + ("freeglut" ,freeglut) + ("glew" ,glew))) + (arguments + `(#:configure-flags + (list + "-DCOIN_BUILD_DOCUMENTATION_MAN=ON" + (string-append "-DBOOST_ROOT=" + (assoc-ref %build-inputs "boost"))))) + (home-page "https://bitbucket.org/Coin3D/coin/wiki/Home") + (synopsis + "High-level 3D visualization library with Open Inventor 2.1 API") + (description + "Coin is a 3D graphics library with an Application Programming Interface +based on the Open Inventor 2.1 API. For those who are not familiar with +Open Inventor, it is a scene-graph based retain-mode rendering and model +interaction library, written in C++, which has become the de facto +standard graphics library for 3D visualization and visual simulation +software in the scientific and engineering community.") + (license license:bsd-3))) diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm index 2f974ee63b..2736b36a38 100644 --- a/gnu/packages/guile-xyz.scm +++ b/gnu/packages/guile-xyz.scm @@ -909,7 +909,7 @@ tracker's SOAP service, such as @url{https://bugs.gnu.org}.") (define-public guile-email (package (name "guile-email") - (version "0.2.0") + (version "0.2.1") (source (origin (method url-fetch) @@ -918,7 +918,7 @@ tracker's SOAP service, such as @url{https://bugs.gnu.org}.") version ".tar.lz")) (sha256 (base32 - "0zgvh2329zrclxfb1lh7dnqrq46jj77l0lx7j9y6y3xgbhd2d9l0")))) + "1ph3pb69hr3d8mj05fmbpf5rc67dlm8qnb35cc7cxz8ingvl7kv3")))) (build-system gnu-build-system) (native-inputs `(("pkg-config" ,pkg-config) @@ -936,8 +936,8 @@ format.") (license license:agpl3+))) (define-public guile-debbugs-next - (let ((commit "75a331d561c8b6f8efcf16216dab961c17759efe") - (revision "1")) + (let ((commit "fb0ae064037a38a0d526e08b4ad24c52e205edb9") + (revision "2")) (package (inherit guile-debbugs) (name "guile-debbugs") (version (git-version "0.0.3" revision commit)) @@ -949,7 +949,7 @@ format.") (file-name (git-file-name name version)) (sha256 (base32 - "0br3mgbw41bpc9x57jlghl0i8dz9nl63r4wzs5l47aqszf84870y")))) + "195sacx2xc1mzzfljj62nfpi8mxn0rc6dabxckizjksnhb5irfwy")))) (build-system gnu-build-system) (native-inputs `(("pkg-config" ,pkg-config) @@ -2156,7 +2156,7 @@ chunks can be expressions as well as simple tokens.") ("libtool" ,libtool) ("pkg-config" ,pkg-config))) (home-page "https://gitlab.com/tampe/guile-persist") - (synopsis "Persistance programming framework for Guile") + (synopsis "Persistence programming framework for Guile") (description "This is a serialization library for serializing objects like classes and objects, closures and structs. This currently does not support @@ -2554,3 +2554,67 @@ Emacsy. It has a small C layer and most browser features are fully programmable in Guile. It has hooks, keymaps, and self documentation features.") (license license:gpl3+))) + +(define-public guile-cv + (package + (name "guile-cv") + (version "0.2.1") + (source (origin + (method url-fetch) + (uri (string-append "mirror://gnu/guile-cv/guile-cv-" + version ".tar.gz")) + (sha256 + (base32 + "0qdf0s2h1xj5lbhnc1pfw69i3zg08pqy2y6869b92ydfis8r82j9")))) + (build-system gnu-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'prepare-build + (lambda* (#:key inputs outputs #:allow-other-keys) + (substitute* "configure" + (("SITEDIR=\"\\$datadir/guile-cv\"") + "SITEDIR=\"$datadir/guile/site/$GUILE_EFFECTIVE_VERSION\"") + (("SITECCACHEDIR=\"\\$libdir/guile-cv/") + "SITECCACHEDIR=\"$libdir/")) + (substitute* "cv/init.scm" + (("\\(dynamic-link \"libvigra_c\"\\)") + (string-append "(dynamic-link \"" + (assoc-ref inputs "vigra-c") + "/lib/libvigra_c\")")) + (("\\(dynamic-link \"libguile-cv\"\\)") + (format #f "~s" + `(dynamic-link + (format #f "~alibguile-cv" + (if (getenv "GUILE_CV_UNINSTALLED") + "" + ,(format #f "~a/lib/" + (assoc-ref outputs "out")))))))) + (setenv "GUILE_CV_UNINSTALLED" "1") + ;; Only needed to satisfy the configure script. + (setenv "LD_LIBRARY_PATH" + (string-append (assoc-ref inputs "vigra-c") "/lib")) + #t))))) + (inputs + `(("vigra" ,vigra) + ("vigra-c" ,vigra-c) + ("guile" ,guile-2.2))) + (native-inputs + `(("texlive" ,(texlive-union (list texlive-booktabs + texlive-lm + texlive-siunitx + texlive-standalone + texlive-xcolor + texlive-fonts-iwona))) + ("pkg-config" ,pkg-config))) + (propagated-inputs + `(("guile-lib" ,guile-lib))) + (home-page "https://www.gnu.org/software/guile-cv/") + (synopsis "Computer vision library for Guile") + (description "Guile-CV is a Computer Vision functional programming library +for the Guile Scheme language. It is based on Vigra (Vision with Generic +Algorithms), a C++ image processing and analysis library. Guile-CV contains +bindings to Vigra C (a C wrapper to most of the Vigra functionality) and is +enriched with pure Guile Scheme algorithms, all accessible through a nice, +clean and easy to use high level API.") + (license license:gpl3+))) diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm index 4313b6059e..a36451fa8c 100644 --- a/gnu/packages/haskell-xyz.scm +++ b/gnu/packages/haskell-xyz.scm @@ -7801,7 +7801,7 @@ examination.") ("ghc-listlike" ,ghc-listlike))) (home-page "https://github.com/seereason/process-extras") (synopsis "Extra tools for managing processes") - (description "This packages extends + (description "This package extends @url{http://hackage.haskell.org/package/process}. It allows you to read process input and output as ByteStrings or Text, or write your own ProcessOutput instance. It also provides lazy process input and output, diff --git a/gnu/packages/javascript.scm b/gnu/packages/javascript.scm index 2993eb66f6..0e33f889b8 100644 --- a/gnu/packages/javascript.scm +++ b/gnu/packages/javascript.scm @@ -286,14 +286,14 @@ detection.") (define-public js-datatables (package (name "js-datatables") - (version "1.10.15") + (version "1.10.19") (source (origin (method url-fetch) (uri (string-append "https://datatables.net/releases/DataTables-" version ".zip")) (sha256 (base32 - "1y9xqyqyz7x1ls3ska71pshl2hpiy3qnw1f7wygyslbhy4ssgf57")))) + "0cff8a1g7pjwbjdqq0yzqd963ar7pfi4splmm6rwdzganr77rkhb")))) (build-system minify-build-system) (arguments `(#:javascript-files '("media/js/dataTables.bootstrap.js" diff --git a/gnu/packages/jupyter.scm b/gnu/packages/jupyter.scm new file mode 100644 index 0000000000..7ec987b2a4 --- /dev/null +++ b/gnu/packages/jupyter.scm @@ -0,0 +1,189 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2019 Ludovic Courtès +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see . + +(define-module (gnu packages jupyter) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (guix packages) + #:use-module (guix download) + #:use-module (guix git-download) + #:use-module (guix build-system cmake) + #:use-module (guix build-system python) + #:use-module (gnu packages check) + #:use-module (gnu packages cpp) + #:use-module (gnu packages linux) + #:use-module (gnu packages networking) + #:use-module (gnu packages pkg-config) + #:use-module (gnu packages python) + #:use-module (gnu packages python-xyz) + #:use-module (gnu packages serialization) + #:use-module (gnu packages time) + #:use-module (gnu packages tls)) + +(define-public python-jupyter-protocol + (package + (name "python-jupyter-protocol") + (version "0.1.1") + (source (origin + (method url-fetch) + (uri (pypi-uri "jupyter_protocol" version)) + (sha256 + (base32 + "1bk3as5yw9y5nmq6l15nr46aby34phmvsx9kxgqnm5pd5q2b5h57")))) + (build-system python-build-system) + (propagated-inputs + `(("python-dateutil" ,python-dateutil) + ("python-jupyter-core" ,python-jupyter-core) + ("python-pyzmq" ,python-pyzmq) + ("python-traitlets" ,python-traitlets))) + (native-inputs + `(("python-ipykernel" ,python-ipykernel) + ("python-ipython" ,python-ipython) + ("python-mock" ,python-mock) + ("python-pytest" ,python-pytest))) + (home-page "https://jupyter.org") + (synopsis "Jupyter protocol implementation") + (description + "This Python library is an experimental implementation of the +@uref{https://jupyter-client.readthedocs.io/en/latest/messaging.html, Jupyter +protocol} to be used by both clients and kernels.") + (license license:bsd-3) + (properties '((upstream-name . "jupyter_protocol"))))) + +(define-public python-jupyter-kernel-mgmt + (package + (name "python-jupyter-kernel-mgmt") + (version "0.4.0") + (source (origin + (method url-fetch) + (uri (pypi-uri "jupyter_kernel_mgmt" version)) + (sha256 + (base32 + "0i7a78dn89ca8h0a42giyxwcmk6y4wrdr7q8h2ax9vybb84c795q")))) + (build-system python-build-system) + (propagated-inputs + `(("python-dateutil" ,python-dateutil) + ("python-entrypoints" ,python-entrypoints) + ("python-jupyter-core" ,python-jupyter-core) + ("python-jupyter-protocol" ,python-jupyter-protocol) + ("python-pyzmq" ,python-pyzmq) + ("python-traitlets" ,python-traitlets))) + (native-inputs + `(("python-ipykernel" ,python-ipykernel) + ("python-ipython" ,python-ipython) + ("python-mock" ,python-mock) + ("python-pytest" ,python-pytest))) + (home-page "https://jupyter.org") + (synopsis "Discover, launch, and communicate with Jupyter kernels") + (description + "This package is an experimental refactoring of the machinery for +launching and using Jupyter kernels.") + (license license:bsd-3) + (properties '((upstream-name . "jupyter_kernel_mgmt"))))) + +(define-public python-jupyter-kernel-test + (package + (name "python-jupyter-kernel-test") + (version "0.3") + (home-page "https://github.com/jupyter/jupyter_kernel_test") + (source (origin + ;; PyPI has a ".whl" file but not a proper source release. + ;; Thus, fetch code from Git. + (method git-fetch) + (uri (git-reference (url home-page) (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "00iy74i4i8is6axb9vlsm0b9wxkvyyxnbl8r0i4gaj3xd788jm83")))) + (build-system python-build-system) + (arguments + ;; The repo doesn't contain a "setup.py" file so install files manually. + '(#:phases (modify-phases %standard-phases + (delete 'build) + (delete 'check) + (replace 'install + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (version ((@@ (guix build python-build-system) + get-python-version) + (assoc-ref inputs "python"))) + (pydir (string-append out "/lib/python" + version "/site-packages/" + "jupyter_kernel_test"))) + (for-each (lambda (file) + (install-file file pydir)) + (find-files "jupyter_kernel_test" + "\\.py$")) + #t)))))) + (propagated-inputs + `(("python-jupyter-kernel-mgmt" ,python-jupyter-kernel-mgmt) + ("python-jupyter-protocol" ,python-jupyter-protocol) + ("python-jsonschema" ,python-jsonschema))) + (synopsis "Test Jupyter kernels") + (description + "@code{jupyter_kernel_test} is a tool for testing Jupyter kernels. It +tests kernels for successful code execution and conformance with the +@uref{https://jupyter-client.readthedocs.io/en/latest/messaging.html, Jupyter +Messaging Protocol}.") + (license license:bsd-3))) + +(define-public xeus + (package + (name "xeus") + (version "0.23.2") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/QuantStack/xeus.git") + (commit version))) + (sha256 + (base32 + "1m1b6z1538r7mv2ggn7bdbd9570ja7cadplq64zl8rgl2c8vdi2a")) + (file-name (git-file-name name version)))) + (build-system cmake-build-system) + (arguments + '(#:configure-flags '("-DBUILD_STATIC_LIBS=OFF" + "-DDISABLE_ARCH_NATIVE=ON" ;no '-march=native' + "-DBUILD_TESTING=ON"))) + (native-inputs + `(("pkg-config" ,pkg-config) + + ;; The following inputs are used by the test suite. + ("googletest" ,googletest) + ("python-pytest" ,python-pytest) + ("python" ,python-3) + ("python-jupyter-kernel-test" ,python-jupyter-kernel-test) + ("python-jupyter-client" ,python-jupyter-client))) + (inputs + `(("xtl" ,xtl) + ("nlohmann-json-cpp" ,nlohmann-json-cpp) + ("cppzmq" ,cppzmq) + ("zeromq" ,zeromq) + ("openssl" ,openssl) + ("util-linux" ,util-linux))) ;libuuid + (home-page "https://quantstack.net/xeus") + (synopsis "C++ implementation of the Jupyter Kernel protocol") + (description + "@code{xeus} is a library meant to facilitate the implementation of +kernels for Jupyter. It takes the burden of implementing the Jupyter Kernel +protocol so developers can focus on implementing the interpreter part of the +kernel. + +Several Jupyter kernels are built upon @code{xeus}, such as @code{xeus-cling}, +a kernel for the C++ programming language, and @code{xeus-python}, an +alternative Python kernel for Jupyter.") + (license license:bsd-3))) diff --git a/gnu/packages/libevent.scm b/gnu/packages/libevent.scm index ae87671611..465ed95eb2 100644 --- a/gnu/packages/libevent.scm +++ b/gnu/packages/libevent.scm @@ -132,14 +132,14 @@ resolution, asynchronous file system operations, and threading primitives.") (define-public perl-anyevent (package (name "perl-anyevent") - (version "7.15") + (version "7.17") (source (origin (method url-fetch) (uri (string-append "mirror://cpan/authors/id/M/ML/MLEHMANN/" "AnyEvent-" version ".tar.gz")) (sha256 (base32 - "0m73r67ah9xmcwzxs50jxf8ncd8h71mi4wf2mvnqkxvibhrv478i")))) + "11drlj8r02czhjgzkb39axnr8zzyp506r043xfmf93q9kilfmgjh")))) (build-system perl-build-system) (native-inputs `(("perl-canary-stability" ,perl-canary-stability))) diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm index b65303ae6f..e13cd4a07e 100644 --- a/gnu/packages/linux.scm +++ b/gnu/packages/linux.scm @@ -349,10 +349,10 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS." "linux-" version ".tar.xz")) (sha256 hash))) -(define-public linux-libre-5.2-version "5.2.15") +(define-public linux-libre-5.2-version "5.2.16") (define-public linux-libre-5.2-pristine-source (let ((version linux-libre-5.2-version) - (hash (base32 "0jhc70r2rygm91qifjagg1jgbpjwyyq6m8g1n5iv81l1v84i0mpb"))) + (hash (base32 "0xg5jnkmc7b552jrhi200ck7q4hql3az2fpjfwxj3ay8xp4n280c"))) (make-linux-libre-source version (%upstream-linux-source version hash) deblob-scripts-5.2))) @@ -2114,7 +2114,7 @@ processes currently causing I/O.") (define-public fuse (package (name "fuse") - (version "2.9.8") + (version "2.9.9") (source (origin (method url-fetch) (uri (string-append "https://github.com/libfuse/libfuse/releases/" @@ -2122,7 +2122,7 @@ processes currently causing I/O.") "/fuse-" version ".tar.gz")) (sha256 (base32 - "1qxg1r1mgysfq6qakmvid2njph3lr00w0swvydsfl9ymilfzi12y")) + "1ddlq6kzxilccgbvxjfx80jx6kamgw4sv49phks2zhlcc1frvrnh")) (patches (search-patches "fuse-overlapping-headers.patch")))) (build-system gnu-build-system) (inputs `(("util-linux" ,util-linux))) @@ -3299,14 +3299,14 @@ about ACPI devices.") (define-public acpid (package (name "acpid") - (version "2.0.31") + (version "2.0.32") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/acpid2/acpid-" version ".tar.xz")) (sha256 (base32 - "1hrc0xm6q12knbgzhq0i8g2rfrkwcvh1asd7k9rs3nc5xmlwd7gw")))) + "0zhmxnhnhg4v1viw82yjr22kram6k5k1ixznhayk8cnw7q5x7lpj")))) (build-system gnu-build-system) (home-page "https://sourceforge.net/projects/acpid2/") (synopsis "Daemon for delivering ACPI events to user-space programs") diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm index 0c8ad1e2fa..6c373ce6e2 100644 --- a/gnu/packages/lisp.scm +++ b/gnu/packages/lisp.scm @@ -2485,7 +2485,7 @@ new fiends in addition to old friends like @command{aif} and (let ((commit "7d49a66c62759535624037826891152223d4206c")) (package (name "sbcl-lift") - (version (git-version "0.0.0" "1" commit)) + (version (git-version "1.7.1" "1" commit)) (source (origin (method git-fetch) @@ -6474,7 +6474,7 @@ Trivia.") quasiquote is enable matching of quasiquoted patterns, using Optima or Trivia. -This packages uses fare-quasiquote with named-readtable."))) +This package uses fare-quasiquote with named-readtable."))) (define-public sbcl-trivia.level0 (let ((commit "902e0c65602bbfe96ae82e679330b3771ddc7603") @@ -6597,7 +6597,7 @@ This system contains the base level system of Trivia with a trivial optimizer.") with Optima, another pattern matching library for Common Lisp. It is meant to be faster and more extensible than Optima. -This system contains the PPCRE extention."))) +This system contains the PPCRE extension."))) (define-public sbcl-trivia.quasiquote (package @@ -6833,7 +6833,7 @@ Emacs. In the Common LISP Object System (CLOS), a similar kind of extensibility is possible using the flexible multi-method dispatch mechanism. It may even seem -that the concept of hooks does not provide any benefits over the possibilites +that the concept of hooks does not provide any benefits over the possibilities of CLOS. However, there are some differences: @itemize @@ -6934,3 +6934,429 @@ classes and cyclic data structures are supported.") (define-public ecl-cl-prevalence (sbcl-package->ecl-package sbcl-cl-prevalence)) + +(define-public sbcl-series + (let ((commit "da9061b336119d1e5214aff9117171d494d5a58a") + (revision "1")) + (package + (name "sbcl-series") + (version (git-version "2.2.11" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "git://git.code.sf.net/p/series/series") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "07hk2lhfx42zk018pxqvn4gs77vd4n4g8m4xxbqaxgca76mifwfw")))) + (build-system asdf-build-system/sbcl) + (arguments + ;; Disable the tests, they are apparently buggy and I didn't find + ;; a simple way to make them run and pass. + '(#:tests? #f)) + (synopsis "Series data structure for Common Lisp") + (description + "This Common Lisp library provides a series data structure much like +a sequence, with similar kinds of operations. The difference is that in many +situations, operations on series may be composed functionally and yet execute +iteratively, without the need to construct intermediate series values +explicitly. In this manner, series provide both the clarity of a functional +programming style and the efficiency of an iterative programming style.") + (home-page "http://series.sourceforge.net/") + (license license:expat)))) + +(define-public cl-series + (sbcl-package->cl-source-package sbcl-series)) + +(define-public ecl-series + (sbcl-package->ecl-package sbcl-series)) + +(define-public sbcl-periods + (let ((commit "983d4a57325db3c8def942f163133cec5391ec28") + (revision "1")) + (package + (name "sbcl-periods") + (version (git-version "0.0.2" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/jwiegley/periods.git") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0z30jr3lxz3cmi019fsl4lgcgwf0yqpn95v9zkkkwgymdrkd4lga")))) + (build-system asdf-build-system/sbcl) + (inputs + `(("local-time" ,sbcl-local-time))) + (synopsis "Common Lisp library for manipulating date/time objects") + (description + "Periods is a Common Lisp library providing a set of utilities for +manipulating times, distances between times, and both contiguous and +discontiguous ranges of time.") + (home-page "https://github.com/jwiegley/periods") + (license license:bsd-3)))) + +(define-public cl-periods + (sbcl-package->cl-source-package sbcl-periods)) + +(define-public ecl-periods + (sbcl-package->ecl-package sbcl-periods)) + +(define-public sbcl-periods-series + (package + (inherit sbcl-periods) + (name "sbcl-periods-series") + (inputs + `(("periods" ,sbcl-periods) + ("series" ,sbcl-series))) + (arguments + '(#:asd-file "periods-series.asd" + #:asd-system-name "periods-series")) + (description + "Periods-series is an extension of the periods Common Lisp library +providing functions compatible with the series Common Lisp library."))) + +(define-public cl-periods-series + (sbcl-package->cl-source-package sbcl-periods-series)) + +(define-public ecl-periods-series + (sbcl-package->ecl-package sbcl-periods-series)) + +(define-public sbcl-metatilities-base + (let ((commit "6eaa9e3ff0939a93a92109dd0fcd218de85417d5") + (revision "1")) + (package + (name "sbcl-metatilities-base") + (version (git-version "0.6.6" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/gwkkwg/metatilities-base.git") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0xpa86pdzlnf4v5g64j3ifaplx71sx2ha8b7vvakswi652679ma0")))) + (build-system asdf-build-system/sbcl) + (native-inputs + `(("lift" ,sbcl-lift))) + (synopsis "Core of the metatilities Common Lisp library") + (description + "Metatilities-base is the core of the metatilities Common Lisp library +which implements a set of utilities.") + (home-page "https://common-lisp.net/project/metatilities-base/") + (license license:expat)))) + +(define-public cl-metatilities-base + (sbcl-package->cl-source-package sbcl-metatilities-base)) + +(define-public ecl-metatilities-base + (sbcl-package->ecl-package sbcl-metatilities-base)) + +(define-public sbcl-cl-containers + (let ((commit "810927e19d933bcf38ffeb7a23ce521efc432d45") + (revision "1")) + (package + (name "sbcl-cl-containers") + (version (git-version "0.12.1" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/gwkkwg/cl-containers.git") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1s9faxw7svhbjpkhfrz2qxgjm3cvyjb8wpyb4m8dx4i5g7vvprkv")))) + (build-system asdf-build-system/sbcl) + (native-inputs + `(("lift" ,sbcl-lift))) + (inputs + `(("metatilities-base" ,sbcl-metatilities-base))) + (arguments + '(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'relax-version-checks + (lambda _ + (substitute* "cl-containers.asd" + (("\\(:version \"metatilities-base\" \"0\\.6\\.6\"\\)") + "\"metatilities-base\"")) + (substitute* "cl-containers-test.asd" + (("\\(:version \"lift\" \"1\\.7\\.0\"\\)") + "\"lift\"")) + #t))))) + (synopsis "Container library for Common Lisp") + (description + "Common Lisp ships with a set of powerful built in data structures +including the venerable list, full featured arrays, and hash-tables. +CL-containers enhances and builds on these structures by adding containers +that are not available in native Lisp (for example: binary search trees, +red-black trees, sparse arrays and so on), and by providing a standard +interface so that they are simpler to use and so that changing design +decisions becomes significantly easier.") + (home-page "https://common-lisp.net/project/cl-containers/") + (license license:expat)))) + +(define-public cl-containers + (sbcl-package->cl-source-package sbcl-cl-containers)) + +(define-public ecl-cl-containers + (sbcl-package->ecl-package sbcl-cl-containers)) + +(define-public sbcl-xlunit + (let ((commit "3805d34b1d8dc77f7e0ee527a2490194292dd0fc") + (revision "1")) + (package + (name "sbcl-xlunit") + (version (git-version "0.6.3" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "http://git.kpe.io/xlunit.git") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0argfmp9nghs4sihyj3f8ch9qfib2b7ll07v5m9ziajgzsfl5xw3")))) + (build-system asdf-build-system/sbcl) + (arguments + '(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'fix-tests + (lambda _ + (substitute* "xlunit.asd" + ((" :force t") "")) + #t))))) + (synopsis "Unit testing package for Common Lisp") + (description + "The XLUnit package is a toolkit for building test suites. It is based +on the XPTest package by Craig Brozensky and the JUnit package by Kent Beck.") + (home-page "http://quickdocs.org/xlunit/") + (license license:bsd-3)))) + +(define-public cl-xlunit + (sbcl-package->cl-source-package sbcl-xlunit)) + +(define-public ecl-xlunit + (sbcl-package->ecl-package sbcl-xlunit)) + +(define-public sbcl-fprog + (let ((commit "7016d1a98215f82605d1c158e7a16504ca1f4636") + (revision "1")) + (package + (name "sbcl-fprog") + (version (git-version "1.0.0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/jwiegley/cambl.git") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "103mry04j2k9vznsxm7wcvccgxkil92cdrv52miwcmxl8daa4jiz")))) + (build-system asdf-build-system/sbcl) + (synopsis "Functional programming utilities for Common Lisp") + (description + "@code{fprog} is a Common Lisp library allowing iteration over +immutable lists sharing identical sublists.") + (home-page "https://github.com/jwiegley/cambl") + (license license:bsd-3)))) + +(define-public cl-fprog + (sbcl-package->cl-source-package sbcl-fprog)) + +(define-public ecl-fprog + (sbcl-package->ecl-package sbcl-fprog)) + +(define-public sbcl-cambl + (let ((commit "7016d1a98215f82605d1c158e7a16504ca1f4636") + (revision "1")) + (package + (inherit sbcl-fprog) + (name "sbcl-cambl") + (version (git-version "4.0.0" revision commit)) + (native-inputs + `(("xlunit" ,sbcl-xlunit))) + (inputs + `(("alexandria" ,sbcl-alexandria) + ("cl-containers" ,sbcl-cl-containers) + ("local-time" ,sbcl-local-time) + ("periods" ,sbcl-periods) + ("fprog" ,sbcl-fprog))) + (synopsis "Commoditized amounts and balances for Common Lisp") + (description + "CAMBL is a Common Lisp library providing a convenient facility for +working with commoditized values. It does not allow compound units (and so is +not suited for scientific operations) but does work rather nicely for the +purpose of financial calculations.")))) + +(define-public cl-cambl + (sbcl-package->cl-source-package sbcl-cambl)) + +(define-public ecl-cambl + (sbcl-package->ecl-package sbcl-cambl)) + +(define-public sbcl-cl-ledger + (let ((commit "08e0be41795e804cd36142e51756ad0b1caa377b") + (revision "1")) + (package + (name "sbcl-cl-ledger") + (version (git-version "4.0.0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/ledger/cl-ledger.git") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1via0qf6wjcyxnfbmfxjvms0ik9j8rqbifgpmnhrzvkhrq9pv8h1")))) + (build-system asdf-build-system/sbcl) + (inputs + `(("cambl" ,sbcl-cambl) + ("cl-ppcre" ,sbcl-cl-ppcre) + ("local-time" ,sbcl-local-time) + ("periods-series" ,sbcl-periods-series))) + (arguments + '(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'fix-system-definition + (lambda _ + (substitute* "cl-ledger.asd" + ((" :build-operation program-op") "") + ((" :build-pathname \"cl-ledger\"") "") + ((" :entry-point \"ledger::main\"") "")) + #t))))) + (synopsis "Common Lisp port of the Ledger accounting system") + (description + "CL-Ledger is a Common Lisp port of the Ledger double-entry accounting +system.") + (home-page "https://github.com/ledger/cl-ledger") + (license license:bsd-3)))) + +(define-public cl-ledger + (sbcl-package->cl-source-package sbcl-cl-ledger)) + +(define-public ecl-cl-ledger + (sbcl-package->ecl-package sbcl-cl-ledger)) + +(define-public sbcl-bst + (let ((commit "34f9c7e8e0a9f2c952fe310ab36cb630d5d9c15a") + (revision "1")) + (package + (name "sbcl-bst") + (version (git-version "1.1" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/glv2/bst.git") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1amxns7hvvh4arwbh8ciwfzplg127vh37dnbamv1m1kmmnmihfc8")))) + (build-system asdf-build-system/sbcl) + (native-inputs + `(("alexandria" ,sbcl-alexandria) + ("fiveam" ,sbcl-fiveam))) + (synopsis "Binary search tree for Common Lisp") + (description + "BST is a Common Lisp library for working with binary search trees that +can contain any kind of values.") + (home-page "https://github.com/glv2/bst") + (license license:gpl3)))) + +(define-public cl-bst + (sbcl-package->cl-source-package sbcl-bst)) + +(define-public ecl-bst + (sbcl-package->ecl-package sbcl-bst)) + +(define-public sbcl-cl-octet-streams + (package + (name "sbcl-cl-octet-streams") + (version "1.0") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/glv2/cl-octet-streams.git") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1d7mn6ydv0j2x4r7clpc9ijjwrnfpxmvhifv8n5j7jh7s744sf8d")))) + (build-system asdf-build-system/sbcl) + (native-inputs + `(("fiveam" ,sbcl-fiveam))) + (inputs + `(("trivial-gray-streams" ,sbcl-trivial-gray-streams))) + (synopsis "In-memory octet streams for Common Lisp") + (description + "CL-octet-streams is a library implementing in-memory octet +streams for Common Lisp. It was inspired by the trivial-octet-streams and +cl-plumbing libraries.") + (home-page "https://github.com/glv2/cl-octet-streams") + (license license:gpl3+))) + +(define-public cl-octet-streams + (sbcl-package->cl-source-package sbcl-cl-octet-streams)) + +(define-public ecl-cl-octet-streams + (sbcl-package->ecl-package sbcl-cl-octet-streams)) + +(define-public sbcl-lzlib + (let ((commit "0de1db7129fef9a58a059d35a2fa2ecfc5b47b47") + (revision "1")) + (package + (name "sbcl-lzlib") + (version (git-version "1.0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/glv2/cl-lzlib.git") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "12ny7vj52fgnd8hb8fc8mry92vq4c1x72x2350191m4476j95clz")))) + (build-system asdf-build-system/sbcl) + (native-inputs + `(("fiveam" ,sbcl-fiveam))) + (inputs + `(("cffi" ,sbcl-cffi) + ("cl-octet-streams" ,sbcl-cl-octet-streams) + ("lzlib" ,lzlib))) + (arguments + '(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'fix-paths + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "src/lzlib.lisp" + (("liblz\\.so") + (string-append (assoc-ref inputs "lzlib") "/lib/liblz.so"))) + #t))))) + (synopsis "Common Lisp library for lzip (de)compression") + (description + "This Common Lisp library provides functions for lzip (LZMA) +compression/decompression using bindings to the lzlib C library.") + (home-page "https://github.com/glv2/cl-lzlib") + (license license:gpl3+)))) + +(define-public cl-lzlib + (sbcl-package->cl-source-package sbcl-lzlib)) + +(define-public ecl-lzlib + (sbcl-package->ecl-package sbcl-lzlib)) diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm index 9efb4a4841..9a42d4fe07 100644 --- a/gnu/packages/llvm.scm +++ b/gnu/packages/llvm.scm @@ -369,7 +369,7 @@ requirements according to version 1.1 of the OpenCL specification.") '(#:configure-flags '("-DLIBOMP_USE_HWLOC=ON" "-DOPENMP_TEST_C_COMPILER=clang" "-DOPENMP_TEST_CXX_COMPILER=clang++") - #:test-target "check-libomptarget")) + #:test-target "check-libomp")) (native-inputs `(("clang" ,clang) ("llvm" ,llvm) @@ -440,6 +440,23 @@ with that of libgomp, the GNU Offloading and Multi Processing Library.") "0rxn4rh7rrnsqbdgp4gzc8ishbkryhpl1kd3mpnxzpxxhla3y93w" #:patches '("clang-6.0-libc-search-path.patch"))) +;; Libcxx files specifically used by PySide2. +(define-public libcxx-6 + (package + (inherit libcxx) + (version (package-version llvm-6)) + (source + (origin + (inherit (package-source libcxx)) + (uri (string-append "http://llvm.org/releases/" + version "/libcxx-" version ".src.tar.xz")) + (sha256 + (base32 + "0rzw4qvxp6qx4l4h9amrq02gp7hbg8lw4m0sy3k60f50234gnm3n")))) + (native-inputs + `(("clang" ,clang-6) + ("llvm" ,llvm-6))))) + (define-public llvm-3.9.1 (package (inherit llvm) (name "llvm") diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm index fdbb082fdc..3d5417bfb5 100644 --- a/gnu/packages/mail.scm +++ b/gnu/packages/mail.scm @@ -353,14 +353,14 @@ aliasing facilities to work just as they would on normal mail.") (define-public mutt (package (name "mutt") - (version "1.12.1") + (version "1.12.2") (source (origin (method url-fetch) (uri (string-append "https://bitbucket.org/mutt/mutt/downloads/" "mutt-" version ".tar.gz")) (sha256 (base32 - "0311sip2q90aqaxn7h3cck1zl98b4vifqi8bp5fsizy4dr06bi81")) + "10k8352s0z7yan6d4z2am80qd3bsaky4h89g72wl4xr3x067ahmw")) (patches (search-patches "mutt-store-references.patch")))) (build-system gnu-build-system) (inputs @@ -2937,8 +2937,8 @@ replacement for the @code{urlview} program.") (license gpl2+))) (define-public mumi - (let ((commit "ea0a28f8d5db5761765eb60043b8593901552e25") - (revision "4")) + (let ((commit "8a57c87797ffb07baa88697130204184db643521") + (revision "5")) (package (name "mumi") (version (git-version "0.0.0" revision commit)) @@ -2950,7 +2950,7 @@ replacement for the @code{urlview} program.") (file-name (git-file-name name version)) (sha256 (base32 - "0b6dmi41vhssyf983blgi8a2kj3zjccc9cz7b7kvwh781ldqcywh")))) + "1575gn5p086sjxz5hvg6iyskq6cxf6vf50s9nsc4xgrbcqa3pv2c")))) (build-system gnu-build-system) (arguments `(#:phases diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm index e44ec66cb5..811a25f380 100644 --- a/gnu/packages/maths.scm +++ b/gnu/packages/maths.scm @@ -1553,7 +1553,7 @@ script files.") ,@(package-inputs octave-cli))) (native-inputs `(("qttools" , qttools) ;for lrelease - ("texlive" ,texlive) ;for texi2dvi + ("texlive" ,(texlive-union (list texlive-epsf))) ; for texi2dvi ,@(package-native-inputs octave-cli))) (arguments (substitute-keyword-arguments (package-arguments octave-cli) @@ -2982,7 +2982,7 @@ point numbers.") (define-public wxmaxima (package (name "wxmaxima") - (version "19.08.0") + (version "19.09.0") (source (origin (method git-fetch) @@ -2991,8 +2991,7 @@ point numbers.") (commit (string-append "Version-" version)))) (file-name (git-file-name name version)) (sha256 - (base32 - "028g4g2081vsgslbdliskfy5q2wknvknw89lk3zp89py6wranxas")))) + (base32 "195j6j8z0jd6xg3a63ywbrbsc6dany795m3fb95nbx1vq0bqqvvn")))) (build-system cmake-build-system) (native-inputs `(("gettext" ,gettext-minimal))) diff --git a/gnu/packages/messaging.scm b/gnu/packages/messaging.scm index afe62eb680..7a77b45d1d 100644 --- a/gnu/packages/messaging.scm +++ b/gnu/packages/messaging.scm @@ -996,18 +996,18 @@ messenger protocol.") (define-public utox (package (name "utox") - (version "0.17.0") + (version "0.17.1") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/uTox/uTox.git") - (commit "v0.17.0") + (commit (string-append "v" version)) (recursive? #t))) ;; Needed for 'minini' git submodule. (file-name (string-append name "-" version "-checkout")) (sha256 (base32 - "12wbq883il7ikldayh8hm0cjfrkp45vn05xx9s1jbfz6gmkidyar")))) + "17kwqw24iqljp2icih9k6ikx12gzr8zzqr8y5h35bg8m5s8pasq5")))) (build-system cmake-build-system) (arguments `(#:configure-flags '("-DENABLE_TESTS=on") diff --git a/gnu/packages/mpd.scm b/gnu/packages/mpd.scm index 9758675b66..57ecef4913 100644 --- a/gnu/packages/mpd.scm +++ b/gnu/packages/mpd.scm @@ -181,7 +181,7 @@ player daemon.") (define-public ncmpc (package (name "ncmpc") - (version "0.34") + (version "0.35") (source (origin (method url-fetch) (uri @@ -190,7 +190,7 @@ player daemon.") "/ncmpc-" version ".tar.xz")) (sha256 (base32 - "0mz8r6vc4zn5sa3hlq4ii74qcrkh01nbg784zcwahgz8g3fb3i8l")))) + "0hfjvm1p0z7x6gfn5xhl5c0jsmidvz0qfl04pq45x4chh9iiwkxx")))) (build-system meson-build-system) (arguments `(#:configure-flags diff --git a/gnu/packages/node.scm b/gnu/packages/node.scm index 05da1ba0e1..83427d935f 100644 --- a/gnu/packages/node.scm +++ b/gnu/packages/node.scm @@ -90,7 +90,6 @@ (modify-phases %standard-phases (add-before 'configure 'patch-files (lambda* (#:key inputs #:allow-other-keys) - ;; Fix hardcoded /bin/sh references. (substitute* '("lib/child_process.js" "lib/internal/v8_prof_polyfill.js" diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm index d396f001ef..c72950e2b0 100644 --- a/gnu/packages/package-management.scm +++ b/gnu/packages/package-management.scm @@ -10,7 +10,6 @@ ;;; Copyright © 2018 Sou Bunnbu ;;; Copyright © 2018, 2019 Eric Bavier ;;; Copyright © 2019 Efraim Flashner -;;; Copyright © 2019 Vagrant Cascadian ;;; Copyright © 2019 Jonathan Brielmaier ;;; ;;; This file is part of GNU Guix. @@ -31,7 +30,6 @@ (define-module (gnu packages package-management) #:use-module (gnu packages) #:use-module (gnu packages acl) - #:use-module (gnu packages admin) #:use-module (gnu packages attr) #:use-module (gnu packages avahi) #:use-module (gnu packages autotools) @@ -40,7 +38,6 @@ #:use-module (gnu packages bdw-gc) #:use-module (gnu packages bison) #:use-module (gnu packages bootstrap) ;for 'bootstrap-guile-origin' - #:use-module (gnu packages cdrom) #:use-module (gnu packages check) #:use-module (gnu packages compression) #:use-module (gnu packages cpio) @@ -50,7 +47,6 @@ #:use-module (gnu packages docbook) #:use-module (gnu packages file) #:use-module (gnu packages gettext) - #:use-module (gnu packages ghostscript) #:use-module (gnu packages glib) #:use-module (gnu packages gnome) #:use-module (gnu packages gnupg) @@ -58,19 +54,12 @@ #:use-module (gnu packages gtk) #:use-module (gnu packages guile) #:use-module (gnu packages guile-xyz) - #:use-module (gnu packages haskell) - #:use-module (gnu packages image) - #:use-module (gnu packages imagemagick) - #:use-module (gnu packages java) #:use-module (gnu packages linux) #:use-module (gnu packages lisp) - #:use-module (gnu packages llvm) #:use-module (gnu packages man) - #:use-module (gnu packages mono) #:use-module (gnu packages nettle) #:use-module (gnu packages nss) #:use-module (gnu packages patchutils) - #:use-module (gnu packages pdf) #:use-module (gnu packages perl) #:use-module (gnu packages perl-check) #:use-module (gnu packages pkg-config) @@ -82,10 +71,8 @@ #:use-module (gnu packages sqlite) #:use-module (gnu packages ssh) #:use-module (gnu packages texinfo) - #:use-module (gnu packages textutils) #:use-module (gnu packages time) #:use-module (gnu packages tls) - #:use-module (gnu packages video) #:use-module (gnu packages vim) #:use-module (gnu packages virtualization) #:use-module (gnu packages web) @@ -557,176 +544,6 @@ transactions from C or Python.") ;; The whole is GPLv2+; librpm itself is dual-licensed LGPLv2+ | GPLv2+. (license license:gpl2+))) -(define-public diffoscope - (let ((version "123")) - (package - (name "diffoscope") - (version version) - (source (origin - (method git-fetch) - (uri (git-reference - (url "https://salsa.debian.org/reproducible-builds/diffoscope.git") - (commit version))) - (file-name (git-file-name name version)) - (sha256 - (base32 - "11bxms5rkhi0v4pxx29v4qgvhp3fmf0fkzci6gn5xcv4fl1zy4wj")))) - (build-system python-build-system) - (arguments - `(#:phases (modify-phases %standard-phases - ;; setup.py mistakenly requires python-magic from PyPi, even - ;; though the Python bindings of `file` are sufficient. - ;; https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=815844 - (add-after 'unpack 'dependency-on-python-magic - (lambda _ - (substitute* "setup.py" - (("'python-magic',") "")))) - ;; This test is broken because our `file` package has a - ;; bug in berkeley-db file type detection. - (add-after 'unpack 'remove-berkeley-test - (lambda _ - (delete-file "tests/comparators/test_berkeley_db.py") - #t)) - ;; Test is dynamically generated and may have false - ;; negatives with different ocaml versions. Further - ;; background in: https://bugs.debian.org/939386 - (add-after 'unpack 'remove-ocaml-test - (lambda _ - (delete-file "tests/comparators/test_ocaml.py") - #t)) - (add-after 'unpack 'embed-tool-references - (lambda* (#:key inputs #:allow-other-keys) - (substitute* "diffoscope/comparators/utils/compare.py" - (("\\['xxd',") - (string-append "['" (which "xxd") "',"))) - (substitute* "diffoscope/comparators/elf.py" - (("@tool_required\\('readelf'\\)") "") - (("get_tool_name\\('readelf'\\)") - (string-append "'" (which "readelf") "'"))) - (substitute* "diffoscope/comparators/directory.py" - (("@tool_required\\('stat'\\)") "") - (("@tool_required\\('getfacl'\\)") "") - (("\\['stat',") - (string-append "['" (which "stat") "',")) - (("\\['getfacl',") - (string-append "['" (which "getfacl") "',"))) - #t)) - (add-before 'check 'writable-test-data - (lambda _ - ;; tests may need needs write access to tests - ;; directory - (for-each make-file-writable (find-files "tests")) - #t)) - (add-before 'check 'delete-failing-test - (lambda _ - ;; this requires /sbin to be on the path - (delete-file "tests/test_tools.py") - #t))))) - (inputs `(("rpm" ,rpm) ;for rpm-python - ("python-file" ,python-file) - ("python-debian" ,python-debian) - ("python-libarchive-c" ,python-libarchive-c) - ("python-tlsh" ,python-tlsh) - ("acl" ,acl) ;for getfacl - ("colordiff" ,colordiff) - ("xxd" ,xxd))) - ;; Below are modules used for tests. - (native-inputs `(("python-pytest" ,python-pytest) - ("python-chardet" ,python-chardet) - ;; test suite skips tests when tool is missing - ("bdb" ,bdb) - ("binutils" ,binutils) - ("bzip2" ,bzip2) - ("cdrtools" ,cdrtools) - ("colord" ,colord) - ("cpio" ,cpio) - ("docx2txt" ,docx2txt) - ("e2fsprogs" ,e2fsprogs) - ("ffmpeg" ,ffmpeg) - ("gettext" ,gettext-minimal) - ("ghc" ,ghc) - ("ghostscript" ,ghostscript) - ("giflib:bin" ,giflib "bin") - ("gnumeric" ,gnumeric) - ("gnupg" ,gnupg) - ("imagemagick" ,imagemagick) - ("libarchive" ,libarchive) - ("llvm" ,llvm) - ("lz4" ,lz4) - ("mono" ,mono) - ("odt2txt" ,odt2txt) - ;; no unversioned openjdk available - ("openjdk:jdk" ,openjdk12 "jdk") - ("openssh" ,openssh) - ("pgpdump" ,pgpdump) - ("poppler" ,poppler) - ("rpm" ,rpm) - ("sng" ,sng) - ("sqlite" ,sqlite) - ("squashfs-tools" ,squashfs-tools) - ("tcpdump" ,tcpdump) - ("unzip" ,unzip) - ("xxd" ,xxd) - ("xz" ,xz) - ("zip" ,(@ (gnu packages compression) zip)))) - (home-page "https://diffoscope.org/") - (synopsis "Compare files, archives, and directories in depth") - (description - "Diffoscope tries to get to the bottom of what makes files or directories -different. It recursively unpacks archives of many kinds and transforms -various binary formats into more human readable forms to compare them. It can -compare two tarballs, ISO images, or PDFs just as easily.") - (license license:gpl3+)))) - -(define-public trydiffoscope - (package - (name "trydiffoscope") - (version "67.0.1") - (source - (origin - (method git-fetch) - (uri (git-reference - (url "https://salsa.debian.org/reproducible-builds/trydiffoscope.git") - (commit version))) - (file-name (git-file-name name version)) - (sha256 - (base32 - "03b66cjii7l2yiwffj6ym6mycd5drx7prfp4j2550281pias6mjh")))) - (arguments - `(#:phases - (modify-phases %standard-phases - (add-after 'install 'install-doc - (lambda* (#:key outputs #:allow-other-keys) - (let* ((share (string-append (assoc-ref outputs "out") "/share/"))) - (mkdir-p (string-append share "/man/man1/" )) - (invoke "rst2man.py" - "trydiffoscope.1.rst" - (string-append share "/man/man1/trydiffoscope.1")) - (mkdir-p (string-append share "/doc/" ,name "-" ,version)) - (install-file "./README.rst" - (string-append share "/doc/" ,name "-" ,version))) - #t))))) - (propagated-inputs - `(("python-requests" ,python-requests))) - (native-inputs - `(("gzip" ,gzip) - ("python-docutils" ,python-docutils))) - (build-system python-build-system) - (home-page "https://try.diffoscope.org") - (synopsis "Client for remote diffoscope service") - (description "This is a client for the @url{https://try.diffoscope.org, -remote diffoscope service}. - -Diffoscope tries to get to the bottom of what makes files or directories -different. It recursively unpacks archives of many kinds and transforms -various binary formats into more human readable forms to compare them. It can -compare two tarballs, ISO images, or PDFs just as easily. - -Results are displayed by default, stored as local text or html files, or made -available via a URL on @url{https://try.diffoscope.org}. Results stored on the -server are purged after 30 days.") - (license license:gpl3+))) - (define-public python-anaconda-client (package (name "python-anaconda-client") @@ -1073,7 +890,7 @@ the boot loader configuration.") (define-public flatpak (package (name "flatpak") - (version "1.4.2") + (version "1.4.3") (source (origin (method url-fetch) @@ -1081,7 +898,7 @@ the boot loader configuration.") version "/flatpak-" version ".tar.xz")) (sha256 (base32 - "08nmpp26mgv0vp3mlwk97rnp0j7i108h4hr9nllja19sjxnrlygj")))) + "11bfxmv8pxlb5x0lb2rsl45615fzfvq5r6wldf0l6ab2ngryd7i7")))) ;; Wrap 'flatpak' so that GIO_EXTRA_MODULES is set, thereby allowing GIO to ;; find the TLS backend in glib-networking. diff --git a/gnu/packages/parallel.scm b/gnu/packages/parallel.scm index 3b7ce4c150..253596d8e3 100644 --- a/gnu/packages/parallel.scm +++ b/gnu/packages/parallel.scm @@ -52,14 +52,14 @@ (define-public parallel (package (name "parallel") - (version "20190822") + (version "20190922") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/parallel/parallel-" version ".tar.bz2")) (sha256 - (base32 "1mi3a18fdwcx50jg51pw1ks1fkmc2slyinff0yb3xhihi2szbskp")))) + (base32 "0qrw34rpp8g5knb2nhs8z1hz9i42nxjn6i12m4rblm0anhnfwbr8")))) (build-system gnu-build-system) (arguments `(#:phases diff --git a/gnu/packages/patches/emacs-unpackaged-req.patch b/gnu/packages/patches/emacs-unpackaged-req.patch deleted file mode 100644 index ddb9277610..0000000000 --- a/gnu/packages/patches/emacs-unpackaged-req.patch +++ /dev/null @@ -1,24 +0,0 @@ -From e5be173e201710538464c279335bef735a327a68 Mon Sep 17 00:00:00 2001 -From: Brian Leung -Date: Tue, 18 Jun 2019 06:37:46 +0200 -Subject: [PATCH] Add missing require. - ---- - unpackaged.el | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/unpackaged.el b/unpackaged.el -index 2d46b3c..e62184a 100644 ---- a/unpackaged.el -+++ b/unpackaged.el -@@ -38,6 +38,7 @@ - (require 'dash) - (require 's) - (require 'use-package) -+(require 'hydra) - - ;;; Faces, fonts - --- -2.22.0 - diff --git a/gnu/packages/patches/enjarify-setup-py.patch b/gnu/packages/patches/enjarify-setup-py.patch new file mode 100644 index 0000000000..4b382ca320 --- /dev/null +++ b/gnu/packages/patches/enjarify-setup-py.patch @@ -0,0 +1,19 @@ +Author: Reiner Herrmann +Origin: https://salsa.debian.org/android-tools-team/enjarify/blob/master/debian/patches/setup_py.patch +Description: provides a minimal setup.py to build/install the package + +Index: enjarify/setup.py +=================================================================== +--- /dev/null ++++ enjarify/setup.py +@@ -0,0 +1,10 @@ ++#!/usr/bin/env python3 ++ ++from setuptools import setup, find_packages ++ ++setup(name='enjarify', ++ version='1.0.3', ++ url='https://github.com/google/enjarify', ++ packages=find_packages(), ++ ) ++ diff --git a/gnu/packages/patches/python-slugify-depend-on-unidecode.patch b/gnu/packages/patches/python-slugify-depend-on-unidecode.patch index 6038f432f1..5ac749c19d 100644 --- a/gnu/packages/patches/python-slugify-depend-on-unidecode.patch +++ b/gnu/packages/patches/python-slugify-depend-on-unidecode.patch @@ -6,8 +6,8 @@ index 4800173..6bdd77f 100755 author = 'Val Neekman' author_email = 'info@neekware.com' license = 'MIT' --install_requires = ['text-unidecode==1.2'] --extras_require = {'unidecode': ['Unidecode==1.0.23']} +-install_requires = ['text-unidecode>=1.3'] +-extras_require = {'unidecode': ['Unidecode>=1.1.1']} +install_requires = ['Unidecode'] classifiers = [ diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm index 79d8f3b684..77c8048e86 100644 --- a/gnu/packages/perl.scm +++ b/gnu/packages/perl.scm @@ -1266,14 +1266,14 @@ arrays for their internal representation.") (define-public perl-clone (package (name "perl-clone") - (version "0.42") + (version "0.43") (source (origin (method url-fetch) - (uri (string-append "mirror://cpan/authors/id/G/GA/GARU/" + (uri (string-append "mirror://cpan/authors/id/A/AT/ATOOMIC/" "Clone-" version ".tar.gz")) (sha256 (base32 - "1r87rdm0nilfayxwlzvylwc8r3hr5m24180x437j30qpizdk1aal")))) + "1npf5s4b90ds6lv8gn76b2w4bdh0z5ni5zk4skgc2db5d12560lr")))) (build-system perl-build-system) (synopsis "Recursively copy Perl datatypes") (description diff --git a/gnu/packages/python-crypto.scm b/gnu/packages/python-crypto.scm index 88a00070a8..b83721946c 100644 --- a/gnu/packages/python-crypto.scm +++ b/gnu/packages/python-crypto.scm @@ -160,7 +160,7 @@ to providing full-strength password hashing for multi-user application.") system hashes passwords using a version of Bruce Schneier's Blowfish block cipher with modifications designed to raise the cost of off-line password cracking and frustrate fast hardware implementation. The computation cost of -the algorithm is parametised, so it can be increased as computers get faster. +the algorithm is parametrised, so it can be increased as computers get faster. The intent is to make a compromise of a password database less likely to result in an attacker gaining knowledge of the plaintext passwords (e.g. using John the Ripper).") @@ -845,13 +845,13 @@ in userspace) (define-public python-m2crypto (package (name "python-m2crypto") - (version "0.30.1") + (version "0.35.2") (source (origin (method url-fetch) (uri (pypi-uri "M2Crypto" version)) (sha256 - (base32 "1iizrpkn4c2n70nvcjqlmnk6fz3vddkrjmwavz1zlsnwv8f7bcm1")))) + (base32 "09yirf3w77w6f49q6nxhrjm9c3a4y9s30s1k09chqrw8zdgx8sjc")))) (build-system python-build-system) (inputs `(("openssl" ,openssl))) (home-page "https://gitlab.com/m2crypto/m2crypto") diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm index dde35a1f3a..ffef3319f7 100644 --- a/gnu/packages/python-web.scm +++ b/gnu/packages/python-web.scm @@ -306,16 +306,24 @@ other HTTP libraries.") (define-public python-html2text (package (name "python-html2text") - (version "2018.1.9") + (version "2019.8.11") (source (origin (method url-fetch) (uri (pypi-uri "html2text" version)) (sha256 (base32 - "1m6d7ciq30adc3d1n8g6r46072n7q8kdy039pqvnnmp763xi8xb2")))) + "0ppgjplg06kmv9sj0x8p7acczcq2mcfgk1jdjwm4w5w40b0vj5pm")))) (build-system python-build-system) - (home-page "https://pypi.org/project/html2text/") + (arguments + '(#:phases + (modify-phases %standard-phases + (replace 'check + (lambda _ + (invoke "pytest" "test/")))))) + (native-inputs + `(("python-pytest" ,python-pytest))) + (home-page "https://github.com/Alir3z4/html2text") (synopsis "Convert HTML into plain text") (description "html2text takes HTML and converts it into plain ASCII text which is also valid markdown. html2text was originally written by Aaron @@ -3219,14 +3227,13 @@ Python.") (define-public python-slugify (package (name "python-slugify") - (version "3.0.2") + (version "3.0.4") (source (origin (method url-fetch) (uri (pypi-uri "python-slugify" version)) (sha256 - (base32 - "0n6pfmsq899c54plpvzi46l7zrpa3zfpm8im6h32czjw6kxky5jp")) + (base32 "0dv97yi5fq074q5qyqbin09pmi8ixg36caf5nkpw2bqkd8jh6pap")) (patches (search-patches "python-slugify-depend-on-unidecode.patch")))) (native-inputs diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm index eef2079c19..35353bc6fc 100644 --- a/gnu/packages/python-xyz.scm +++ b/gnu/packages/python-xyz.scm @@ -65,6 +65,7 @@ ;;; Copyright © 2019 Pierre Langlois ;;; Copyright © 2019 Jacob MacDonald ;;; Copyright © 2019 Giacomo Leidi +;;; Copyright © 2019 Wiktor Żelazny ;;; ;;; This file is part of GNU Guix. ;;; @@ -902,6 +903,27 @@ messages in color.") (define-public python2-coloredlogs (package-with-python2 python-coloredlogs)) +(define-public python-editorconfig + (package + (name "python-editorconfig") + (version "0.12.2") + (source + (origin + (method url-fetch) + (uri (pypi-uri "EditorConfig" version)) + (sha256 + (base32 + "0v55z351p9qkyp3bbspwywwn28sbcknhirngjbj779n3z52z63hv")))) + (build-system python-build-system) + (home-page "https://editorconfig.org/") + (synopsis "EditorConfig bindings for python") + (description "The EditorConfig project consists of a file format for +defining coding styles and a collection of text editor plugins that enable +editors to read the file format and adhere to defined styles. EditorConfig +files are easily readable and they work nicely with version control systems.") + ;; "fnmatch.py" and "ini.py" are licensed under psfl, the rest is bsd-2. + (license (list license:bsd-2 license:psfl)))) + (define-public python-et-xmlfile (package (name "python-et-xmlfile") @@ -3962,7 +3984,7 @@ tests = True~%" (assoc-ref inputs "tcl") (assoc-ref inputs "tk"))))) #t))))) - (home-page "http://matplotlib.org") + (home-page "https://matplotlib.org/") (synopsis "2D plotting library for Python") (description "Matplotlib is a Python 2D plotting library which produces publication @@ -3977,14 +3999,29 @@ toolkits.") (let ((matplotlib (package-with-python2 (strip-python2-variant python-matplotlib)))) (package (inherit matplotlib) - (version "2.2.3") + (version "2.2.4") (source (origin (method url-fetch) (uri (pypi-uri "matplotlib" version)) (sha256 (base32 - "1rcc7x9ig3hpchkc4cwdvym3y451w74275fxr455zkfagrsvymbk")))) + "09i1gnrra1590brc1f8d5rh2zvnknmfgzp613ab0462qkrwj15h2")))) + (arguments + (substitute-keyword-arguments (package-arguments matplotlib) + ((#:phases phases) + `(modify-phases ,phases + (replace 'install-jquery-ui + (lambda* (#:key outputs inputs #:allow-other-keys) + (let ((dir (string-append (assoc-ref outputs "out") + "/lib/python2.7/site-packages/" + "matplotlib/backends/web_backend/"))) + (mkdir-p dir) + (invoke "unzip" + (assoc-ref inputs "jquery-ui") + "-d" dir)) + #t)) + (delete 'check))))) ; These tests weren't run the the past. ;; Make sure to use special packages for Python 2 instead ;; of those automatically rewritten by package-with-python2. (propagated-inputs @@ -8009,6 +8046,45 @@ Jupyter kernels such as IJulia and IRKernel.") support for rich media output.") (license license:bsd-3))) +(define-public python-jsbeautifier + (package + (name "python-jsbeautifier") + (version "1.10.2") + (home-page "https://github.com/beautify-web/js-beautify") + (source (origin + (method git-fetch) + (uri (git-reference + (url home-page) + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0wawb070ki1axb3jc9xvsrgpji52vcfif3zmjzc3z4g98m5xw4kg")))) + (build-system python-build-system) + (arguments + `(#:phases (modify-phases %standard-phases + (add-after 'unpack 'chdir + (lambda _ + ;; The upstream Git repository contains all the code, + ;; but this package only builds the python code. + (chdir "python") + #t)) + (add-after 'unpack 'patch-python-six-requirements + (lambda _ + (substitute* "python/setup.py" + (("six>=1.12.0") + "six>=1.11.0")) + #t))))) + (propagated-inputs + `(("python-editorconfig" ,python-editorconfig) + ("python-six" ,python-six))) + (native-inputs + `(("python-pytest" ,python-pytest))) + (synopsis "JavaScript unobfuscator and beautifier") + (description "Beautify, unpack or deobfuscate JavaScript, leveraging +popular online obfuscators.") + (license license:expat))) + (define-public jupyter (package (name "jupyter") @@ -10865,6 +10941,42 @@ binary or text.") `(("python2-enum34" ,python2-enum34) ,@(package-propagated-inputs base)))))) +(define-public python-binwalk + (let ((commit "64201acfb5b0a9cdd9faa58c40a36dcff8612e29") + (revision "0")) + (package + (name "python-binwalk") + (version (git-version "2.1.1" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/ReFirmLabs/binwalk") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1z7ca6rfp887hw5jc3sb45mm4fa0xid4lsp2z8g4r590dr7k7w15")))) + (build-system python-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-before 'check 'set-pythonpath + (lambda _ + (setenv "PYTHONPATH" + (string-append + (getcwd) "/src/" + ":" (getenv "PYTHONPATH"))) + (setenv "HOME" "") + #t))))) + (native-inputs + `(("python-coverage" ,python-coverage) + ("python-nose" ,python-nose))) + (home-page "https://github.com/ReFirmLabs/binwalk") + (synopsis "Firmware analysis tool") + (description "Binwalk is a tool for analyzing, reverse engineering, and extracting firmware images") + (license license:expat)))) + (define-public python-nltk (package (name "python-nltk") @@ -16264,3 +16376,24 @@ ElementTree library and for the @uref{http://lxml.de, lxml.etree} library. For lxml.etree this package can be useful for providing XPath 2.0 selectors, because lxml.etree already has it's own implementation of XPath 1.0.") (license license:expat))) + +(define-public python-bibtexparser + (package + (name "python-bibtexparser") + (version "1.1.0") + (source + (origin + (method url-fetch) + (uri (pypi-uri "bibtexparser" version)) + (sha256 + (base32 + "0zwhfkrzf3n5847dbnfng92k7ak199l9v6x6ax3dgdidfpm6d2fz")))) + (build-system python-build-system) + (propagated-inputs + `(("python-pyparsing" ,python-pyparsing))) + (native-inputs + `(("python-future" ,python-future))) + (home-page "https://github.com/sciunto-org/python-bibtexparser") + (synopsis "Python library to parse BibTeX files") + (description "BibtexParser is a Python library to parse BibTeX files.") + (license (list license:bsd-3 license:lgpl3)))) diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm index 768c4e5d89..929144f30d 100644 --- a/gnu/packages/qt.scm +++ b/gnu/packages/qt.scm @@ -12,6 +12,7 @@ ;;; Copyright © 2018 Hartmut Goebel ;;; Copyright © 2018 Eric Bavier ;;; Copyright © 2019 Marius Bakke +;;; Copyright © 2018 John Soo ;;; ;;; This file is part of GNU Guix. ;;; @@ -39,7 +40,9 @@ #:use-module (guix packages) #:use-module (guix utils) #:use-module (gnu packages) + #:use-module (gnu packages base) #:use-module (gnu packages bison) + #:use-module (gnu packages cmake) #:use-module (gnu packages compression) #:use-module (gnu packages cups) #:use-module (gnu packages databases) @@ -56,6 +59,7 @@ #:use-module (gnu packages icu4c) #:use-module (gnu packages image) #:use-module (gnu packages linux) + #:use-module (gnu packages llvm) #:use-module (gnu packages maths) #:use-module (gnu packages nss) #:use-module (gnu packages pciutils) @@ -2290,3 +2294,173 @@ user-friendly than the default @code{QColorDialog} and several other color-related widgets.") ;; Includes a license exception for combining with GPL2 code. (license license:lgpl3+)))) + +(define-public python-shiboken-2 + (let ((revision "1") + ;; Pinned to branches with support for qt 5.11.3 + (commit "4018787a3cc01d632fdca7891ac8aa9487110c26")) + (package + (name "python-shiboken-2") + (version (git-version "v5.11.3" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + ;; The latest versions of Shiboken live in the pyside repo. + ;; There is another standalone repo only for Shiboken + ;; but it is outdated + (url "https://code.qt.io/pyside/pyside-setup") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0g8jacm2iqd7lw2m7f1dp1nnrsk38bl3m8pihm8zz9gxs8d31sf5")))) + (build-system cmake-build-system) + (inputs + `(("llvm-6" ,llvm-6) + ("clang-6" ,clang-6) + ("libxml2" ,libxml2) + ("libxslt" ,libxslt) + ("python-wrapper" ,python-wrapper) + ("qtbase" ,qtbase) + ("qtxmlpatterns" ,qtxmlpatterns))) + (arguments + `(#:tests? #f + ;; FIXME: Building tests fails + #:configure-flags '("-DBUILD_TESTS=off") + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'use-shiboken-dir-only + (lambda _ (chdir "sources/shiboken2") #t)) + (add-before 'configure 'set-build-env + (lambda* (#:key inputs #:allow-other-keys) + (let ((llvm (assoc-ref inputs "llvm-6"))) + (setenv "CLANG_INSTALL_DIR" llvm) + #t)))))) + (home-page "https://wiki.qt.io/Qt_for_Python") + (synopsis + "Shiboken generates bindings for C++ libraries using CPython source code") + (description + "Shiboken generates bindings for C++ libraries using CPython source code") + (license + (list + ;; The main code is GPL3 or LGPL3. + ;; Examples are BSD-3. + license:gpl3 + license:lgpl3 + license:bsd-3))))) + +(define-public python-pyside-2 + (let ((revision "1") + ;; Pinned to branches with support for qt 5.11.3 + (commit "4018787a3cc01d632fdca7891ac8aa9487110c26")) + (package + (name "python-pyside-2") + (version (git-version "v5.11.3" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://code.qt.io/pyside/pyside-setup") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0g8jacm2iqd7lw2m7f1dp1nnrsk38bl3m8pihm8zz9gxs8d31sf5")))) + (build-system cmake-build-system) + (inputs + `(("libcxx" ,libcxx-6) + ("libxml2" ,libxml2) + ("libxslt" ,libxslt) + ("llvm-6" ,llvm-6) + ("clang-6" ,clang-6) + ("qtbase" ,qtbase) + ("qtdatavis3d" ,qtdatavis3d) + ("qtlocation" ,qtlocation) + ("qtmultimedia" ,qtmultimedia) + ("qtquickcontrols" ,qtquickcontrols) + ("qtscript" ,qtscript) + ("qtscxml" ,qtscxml) + ("qtsensors" ,qtsensors) + ("qtspeech" ,qtspeech) + ("qtsvg" ,qtsvg) + ("qtwebchannel" ,qtwebchannel) + ("qtwebsockets" ,qtwebsockets) + ("qtx11extras" ,qtx11extras) + ("qtxmlpatterns" ,qtxmlpatterns))) + (native-inputs + `(("cmake" ,cmake) + ("python-shiboken-2" ,python-shiboken-2) + ("python-wrapper" ,python-wrapper) + ("qttools" ,qttools) + ("which" ,which))) + (arguments + `(#:tests? #f + ;; FIXME: Building tests fail. + #:configure-flags '("-DBUILD_TESTS=FALSE") + #:phases + (modify-phases + %standard-phases + (add-after 'unpack 'go-to-source-dir + (lambda _ (chdir "sources/pyside2") #t)) + (add-before 'configure 'set-clang-dir + (lambda* (#:key inputs #:allow-other-keys) + (let ((clang (assoc-ref inputs "clang-6")) + (libcxx (assoc-ref inputs "libcxx"))) + (setenv "CLANG_INSTALL_DIR" clang) + (substitute* "cmake/Macros/PySideModules.cmake" + (("--include-paths=") + (string-append "--include-paths=" libcxx "/include/c++/v1:"))) + #t)))))) + (home-page "https://wiki.qt.io/Qt_for_Python") + (synopsis + "The Qt for Python product enables the use of Qt5 APIs in Python applications") + (description + "The Qt for Python product enables the use of Qt5 APIs in Python +applications. It lets Python developers utilize the full potential of Qt, +using the PySide2 module. The PySide2 module provides access to the +individual Qt modules such as QtCore, QtGui,and so on. Qt for Python also +comes with the Shiboken2 CPython binding code generator, which can be used to +generate Python bindings for your C or C++ code.") + (license (list + license:lgpl3 + ;;They state that: + ;; this file may be used under the terms of the GNU General + ;; Public License version 2.0 or (at your option) the GNU + ;; General Public license version 3 or any later version + ;; approved by the KDE Free Qt Foundation. + ;; Thus, it is currently v2 or v3, but no "+". + license:gpl3 + license:gpl2))))) + +(define-public python-pyside-2-tools + (let ((revision "1") + ;; Pinned to branches with support for qt 5.11.3 + (commit "f1b775537e7fbd718516749583b2abf1cb6adbce")) + (package + (name "python-pyside-2-tools") + (version (git-version "v5.11.2" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://code.qt.io/pyside/pyside-tools") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1w2g5afvww9r89wmdm9jx8sz67x4bzy9difkh72n4c73ya1n91ry")))) + (build-system cmake-build-system) + (inputs + `(("python-pyside-2" ,python-pyside-2) + ("python-shiboken-2" ,python-shiboken-2) + ("qtbase" ,qtbase))) + (arguments + `(#:tests? #f + #:configure-flags '("-DBUILD_TESTS=off"))) + (home-page "https://wiki.qt.io/Qt_for_Python") + (synopsis + "Contains command line tools for PySide2") + (description + "Contains lupdate, rcc and uic tools for PySide2") + (license license:gpl2)))) diff --git a/gnu/packages/samba.scm b/gnu/packages/samba.scm index 45d700ec37..c69345910b 100644 --- a/gnu/packages/samba.scm +++ b/gnu/packages/samba.scm @@ -154,14 +154,14 @@ anywhere.") (define-public samba (package (name "samba") - (version "4.10.8") + (version "4.11.0") (source (origin (method url-fetch) (uri (string-append "https://download.samba.org/pub/samba/stable/" "samba-" version ".tar.gz")) (sha256 (base32 - "1x0hlhb674fndfkmimjicnzs543n3i8465a5ifcmjwvzavxha7y4")))) + "174fwi8n191dnb8ix9afchfp59hic6iwa3062iz3y7zzmxs1rpva")))) (build-system gnu-build-system) (arguments `(#:phases diff --git a/gnu/packages/scheme.scm b/gnu/packages/scheme.scm index 9962cbdcb5..5753035643 100644 --- a/gnu/packages/scheme.scm +++ b/gnu/packages/scheme.scm @@ -204,8 +204,8 @@ (base32 "05sjyz90xxfnmi87qv8x0yx0fcallnzl1dciygdafp317pn489is")) (_ - (base32 - "")))))))) + (base32 + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")))))))) ;; Fails to build on MIPS, see . ;; Also, the portable C version of MIT/GNU Scheme did not work in time for diff --git a/gnu/packages/serialization.scm b/gnu/packages/serialization.scm index 3c5a9e7c9d..b01886c775 100644 --- a/gnu/packages/serialization.scm +++ b/gnu/packages/serialization.scm @@ -42,6 +42,7 @@ #:use-module (gnu packages compression) #:use-module (gnu packages databases) #:use-module (gnu packages documentation) + #:use-module (gnu packages gcc) #:use-module (gnu packages lua) #:use-module (gnu packages pkg-config) #:use-module (gnu packages python) @@ -393,17 +394,29 @@ it is comparable to protobuf.") (define-public nlohmann-json-cpp (package (name "nlohmann-json-cpp") - (version "2.1.1") - (source - (origin - (method url-fetch) - (uri (string-append "https://github.com/nlohmann/json/" - "archive/v" version ".tar.gz")) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "0lrh6cjd643c7kmvmwafbgq7dqj3b778483gjhjbvp6rc6z5xf2r")))) + (version "3.7.0") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/nlohmann/json.git") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0v7xih4zjixxxfvkfbs7a8j9qcvpwlsv4vrkbyns3hc7b44nb8ap")))) (build-system cmake-build-system) + (native-inputs + ;; Integer overflow tests like those from + ;; fail when building with + ;; gcc@5. Thus, build with a newer GCC. + `(("gcc" ,gcc-9))) + (arguments + '(#:phases (modify-phases %standard-phases + (add-before 'build 'unset-path-variables + (lambda _ + (unsetenv "C_INCLUDE_PATH") + (unsetenv "CPLUS_INCLUDE_PATH") + #t))))) (home-page "https://nlohmann.github.io/json/") (synopsis "JSON library for C++") (description diff --git a/gnu/packages/speech.scm b/gnu/packages/speech.scm index dbdbe7ea49..21d6027004 100644 --- a/gnu/packages/speech.scm +++ b/gnu/packages/speech.scm @@ -4,6 +4,7 @@ ;;; Copyright © 2017 Leo Famulari ;;; Copyright © 2018 Tobias Geerinckx-Rice ;;; Copyright © 2016 Kei Kebreau +;;; Copyright © 2019 Ricardo Wurmus ;;; ;;; This file is part of GNU Guix. ;;; @@ -30,12 +31,15 @@ #:use-module (gnu packages audio) #:use-module (gnu packages autotools) #:use-module (gnu packages compression) + #:use-module (gnu packages emacs) #:use-module (gnu packages gcc) #:use-module (gnu packages glib) #:use-module (gnu packages linux) + #:use-module (gnu packages ncurses) #:use-module (gnu packages pkg-config) #:use-module (gnu packages pulseaudio) #:use-module (gnu packages python) + #:use-module (gnu packages texinfo) #:use-module (gnu packages textutils)) (define-public espeak @@ -220,3 +224,236 @@ to improve their productivity with speech engines, like eSpeak. Sonic can also be used by the sighted.") (home-page "https://github.com/waywardgeek/sonic") (license license:asl2.0))) + +(define-public festival + (package + (name "festival") + (version "2.5.0") + (source (origin + (method url-fetch) + (uri (string-append "http://festvox.org/packed/festival/" + (version-major+minor version) + "/festival-" version "-release.tar.gz")) + (sha256 + (base32 + "1d5415nckiv19adxisxfm1l1xxfyw88g87ckkmcr0lhjdd10g42c")))) + (build-system gnu-build-system) + (arguments + `(#:tests? #f ; there is no test target + #:make-flags + (list (string-append "RM=" + (assoc-ref %build-inputs "coreutils") + "/bin/rm") + (string-append "ECHO_N=" + (assoc-ref %build-inputs "coreutils") + "/bin/printf \"%s\"")) + #:parallel-build? #f ; not supported + #:modules ((guix build gnu-build-system) + (guix build utils) + (guix build emacs-utils)) + #:imported-modules (,@%gnu-build-system-modules + (guix build emacs-utils)) + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'unpack-and-patch-speech-tools + (lambda* (#:key inputs #:allow-other-keys) + (invoke "tar" "-C" ".." + "-xf" (assoc-ref inputs "speech-tools")) + (with-directory-excursion "../speech_tools" + (substitute* '("config/rules/modules.mak" + "config/rules/test_make_rules.mak" + "config/make_system.mak") + (("/bin/sh") (which "sh")))) + #t)) + (add-after 'unpack 'patch-/bin/sh + (lambda _ + (substitute* '("config/test_make_rules" + "config/make_system.mak") + (("/bin/sh") (which "sh"))) + #t)) + (add-before 'build 'build-speech-tools + (lambda* (#:key configure-flags make-flags #:allow-other-keys) + (with-directory-excursion "../speech_tools" + (apply invoke "sh" "configure" + (string-append "CONFIG_SHELL=" (which "sh")) + (string-append "SHELL=" (which "sh")) + configure-flags) + (apply invoke "make" make-flags)))) + (add-after 'build 'build-documentation + (lambda _ + (with-directory-excursion "doc" + (invoke "make" "festival.info")))) + (add-after 'unpack 'set-installation-directories + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (substitute* "config/project.mak" + (("^FTLIBDIR.*") + (string-append "FTLIBDIR=" out "/share/festival/lib"))) + (substitute* "config/systems/default.mak" + (("^INSTALL_PREFIX.*") + (string-append "INSTALL_PREFIX=" out))) + #t))) + (add-after 'install 'actually-install + (lambda* (#:key inputs outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + ;; Install Speech Tools first + (with-directory-excursion "../speech_tools" + ;; Target directories + (for-each (lambda (dir) + (mkdir-p (string-append out dir))) + '("/bin" + "/lib" + "/include/speech_tools/" + "/include/speech_tools/instantiate" + "/include/speech_tools/ling_class" + "/include/speech_tools/rxp" + "/include/speech_tools/sigpr" + "/include/speech_tools/unix")) + ;; Install binaries + (for-each (lambda (file) + (install-file file (string-append out "/bin"))) + (find-files "bin" ".*")) + (for-each (lambda (file) + (delete-file (string-append out "/bin/" file))) + '("est_gdb" "est_examples" "est_program")) + ;; Install libraries + (for-each (lambda (file) + (install-file file (string-append out "/lib"))) + (find-files "lib" "lib.*\\.so.*")) + + ;; Install headers + (for-each + (lambda (dir) + (for-each + (lambda (header) + (install-file header + (string-append out "/include/speech_tools/" dir))) + (find-files (string-append "include/" dir) + "\\.h$"))) + '("." "instantiate" "ling_class" "rxp" "sigpr" "unix"))) + + ;; Unpack files that will be installed together with the + ;; Festival libraries. + (invoke "tar" "--strip-components=1" + "-xvf" (assoc-ref inputs "festvox-cmu")) + (invoke "tar" "--strip-components=1" + "-xvf" (assoc-ref inputs "festvox-poslex")) + (invoke "tar" "--strip-components=1" + "-xvf" (assoc-ref inputs "default-voice")) + + ;; Install Festival + (let ((bin (string-append out "/bin")) + (incdir (string-append out "/include/festival")) + (share (string-append out "/share/festival")) + (info (string-append out "/share/info"))) + (for-each (lambda (executable) + (install-file executable bin)) + '("src/main/festival" + "src/main/festival_client" + "examples/benchmark")) + (let ((scripts '("examples/dumpfeats" + "examples/durmeanstd" + "examples/latest" + "examples/make_utts" + "examples/powmeanstd" + "examples/run-festival-script" + "examples/saytime" + "examples/scfg_parse_text" + "examples/text2pos" + "examples/text2wave"))) + (substitute* scripts + (("exec /tmp/guix-build.*/bin/festival") + (string-append "exec " bin "/festival"))) + (for-each (lambda (script) + (install-file script bin)) + scripts)) + + ;; Documentation + (for-each (lambda (file) + (install-file file info)) + (find-files "doc/info/" "festival.info.*")) + + ;; Headers + (mkdir-p incdir) + (for-each (lambda (header) + (install-file header + (string-append incdir "/" + (dirname header)))) + (find-files "src/include" "\\.h$")) + + ;; Data + (mkdir-p share) + (for-each (lambda (file) + (install-file file + (string-append share "/" + (dirname file)))) + (find-files "lib" ".*")) + (for-each delete-file + (append (find-files share "Makefile") + (find-files bin "Makefile"))))) + #t)) + (add-after 'actually-install 'install-emacs-mode + (lambda* (#:key outputs #:allow-other-keys) + (let ((emacs-dir (string-append (assoc-ref outputs "out") + "/share/emacs/site-lisp"))) + (install-file "lib/festival.el" emacs-dir) + (emacs-generate-autoloads ,name emacs-dir) + #t))) + ;; Rebuild the very old configure script that is confused by extra + ;; arguments. + (add-before 'configure 'bootstrap + (lambda _ (invoke "autoreconf" "-vif")))))) + (inputs + `(("ncurses" ,ncurses))) + (native-inputs + `(("autoconf" ,autoconf) + ("automake" ,automake) + ("texinfo" ,texinfo) + ("emacs" ,emacs-minimal) + ("festvox-cmu" + ,(origin + (method url-fetch) + (uri (string-append "http://festvox.org/packed/festival/" + (version-major+minor version) + "/festlex_CMU.tar.gz")) + (sha256 + (base32 + "01vwidqhhg2zifvk1gby91mckg1z2pv2mj6lihvdaifakf8k1561")))) + ("festvox-poslex" + ,(origin + (method url-fetch) + (uri (string-append "http://festvox.org/packed/festival/" + (version-major+minor version) + "/festlex_POSLEX.tar.gz")) + (sha256 + (base32 + "18wywilxaqwy63lc47p5g5529mpxhslibh1bjij0snxx5mjf7ip7")))) + ("default-voice" + ,(origin + (method url-fetch) + (uri (string-append "http://festvox.org/packed/festival/" + (version-major+minor version) + "/voices/festvox_kallpc16k.tar.gz")) + (sha256 + (base32 + "136hmsyiwnlg2qwa508dy0imf19mzrb5r3dmb2kg8kcyxnslm740")))) + ("speech-tools" + ,(origin + (method url-fetch) + (uri (string-append "http://festvox.org/packed/festival/" + (version-major+minor version) + "/speech_tools-" version "-release.tar.gz")) + (sha256 + (base32 + "1k2xh13miyv48gh06rgsq2vj25xwj7z6vwq9ilsn8i7ig3nrgzg4")))))) + (home-page "http://www.cstr.ed.ac.uk/projects/festival/") + (synopsis "Speech synthesis system") + (description "Festival offers a general framework for building speech +synthesis systems as well as including examples of various modules. As a +whole it offers full text to speech through a number APIs: from shell level, +though a Scheme command interpreter, as a C++ library, from Java, and an Emacs +interface. Festival is multi-lingual though English is the most advanced. +The system is written in C++ and uses the Edinburgh Speech Tools Library for +low level architecture and has a Scheme (SIOD) based command interpreter for +control.") + (license (license:non-copyleft "file://COPYING")))) diff --git a/gnu/packages/sphinx.scm b/gnu/packages/sphinx.scm index 9bd1e8d421..da7492c42e 100644 --- a/gnu/packages/sphinx.scm +++ b/gnu/packages/sphinx.scm @@ -216,7 +216,7 @@ to code blocks.") (arguments `(#:tests? #f)) ;XXX: circular dependency on Sphinx (home-page "https://github.com/sphinx-doc/sphinxcontrib-htmlhelp") - (synopsis "Sphinx exension for rendering HTML help files") + (synopsis "Sphinx extension for rendering HTML help files") (description "@code{sphinxcontrib-htmlhelp} is a Sphinx extension which renders HTML help files.") diff --git a/gnu/packages/statistics.scm b/gnu/packages/statistics.scm index 2ffe0a10d6..74eb466066 100644 --- a/gnu/packages/statistics.scm +++ b/gnu/packages/statistics.scm @@ -4288,7 +4288,7 @@ including: @item enhanced regression diagnostic plots @item formula-enabled interface to @code{stats::lowess} function @item displaying textual data in plots -@item baloon plots +@item balloon plots @item plotting \"Venn\" diagrams @item displaying Open-Office style plots @item plotting multiple data on same region, with separate axes diff --git a/gnu/packages/sync.scm b/gnu/packages/sync.scm index 0c840a1a1d..7a85b6ce9e 100644 --- a/gnu/packages/sync.scm +++ b/gnu/packages/sync.scm @@ -264,14 +264,14 @@ over the Internet in an HTTP and CDN friendly way; (define-public rclone (package (name "rclone") - (version "1.49.2") + (version "1.49.3") (source (origin (method url-fetch) (uri (string-append "https://github.com/rclone/rclone/releases/download/" "v" version "/rclone-v" version ".tar.gz")) (sha256 - (base32 "1q8lf85hg2havb1xsal75r19ck166rh19lffpd3i43zgblc6gs8j")))) + (base32 "04blngspm2hzi6d37bd3v19lpcvq0wlk38a9q0a4diwfwp2ab20n")))) ;; FIXME: Rclone bundles some libraries Guix already provides. Need to ;; un-bundle them. (build-system go-build-system) diff --git a/gnu/packages/syncthing.scm b/gnu/packages/syncthing.scm index 74457f6ec4..7e1d8df333 100644 --- a/gnu/packages/syncthing.scm +++ b/gnu/packages/syncthing.scm @@ -1219,7 +1219,7 @@ quoting, commenting, and escaping.") (build-system go-build-system) (arguments '(#:import-path "github.com/AudriusButkevicius/pfilter")) - (synopsis "Filter packets into mulitple virtual connections") + (synopsis "Filter packets into multiple virtual connections") (description "Pfilter is a Go package for filtering packets into multiple virtual connections from a single physical connection.") (home-page "https://github.com/AudriusButkevicius/pfilter") diff --git a/gnu/packages/telephony.scm b/gnu/packages/telephony.scm index 41896f2eb6..5d6f0ffed6 100644 --- a/gnu/packages/telephony.scm +++ b/gnu/packages/telephony.scm @@ -284,7 +284,7 @@ supporting cryptographic kernel.") (home-page "https://www.linphone.org") (synopsis "Utilities library for linphone software") (description "BCtoolbox is a utilities library used by Belledonne -Communications softwares like linphone.") +Communications software like linphone.") (license license:gpl2+))) (define-public ortp diff --git a/gnu/packages/terminals.scm b/gnu/packages/terminals.scm index 98ed77289a..d9a5f1db9a 100644 --- a/gnu/packages/terminals.scm +++ b/gnu/packages/terminals.scm @@ -460,7 +460,7 @@ should be thread-safe.") (define-public libvterm (package (name "libvterm") - (version "0.1") + (version "0.1.1") (source (origin (method url-fetch) @@ -468,13 +468,12 @@ should be thread-safe.") "libvterm-" version ".tar.gz")) (sha256 (base32 - "1pcxjhvdwhr2f3lyzf2rv1vp3l62bgkjm1ybhj82qf8yly7ca6g4")))) + "1n5maylann2anfifjy576vzyar9q5m1kzpyiz2hca2pacxy8xf4v")))) (build-system gnu-build-system) (arguments `(#:make-flags (list "CC=gcc" (string-append "PREFIX=" (assoc-ref %outputs "out"))) - #:tests? #f ; XXX: some tests fail in this release #:test-target "test" #:phases (modify-phases %standard-phases @@ -956,7 +955,7 @@ tmux.") (define-public kitty (package (name "kitty") - (version "0.14.4") + (version "0.14.5") (home-page "https://sw.kovidgoyal.net/kitty/") (source (origin @@ -967,7 +966,7 @@ tmux.") (file-name (git-file-name name version)) (sha256 (base32 - "0z0y80wcbra3zfyaiim98afbqlfpkjkql430zfb8shx61rzzmn9i")) + "0qx3wj4n3zgjcpd1vjjwdlz8d1vp8bkxihsg2khlla1izandgxxa")) (modules '((guix build utils))) (snippet '(begin diff --git a/gnu/packages/tex.scm b/gnu/packages/tex.scm index e67b0505f3..1e26fc3965 100644 --- a/gnu/packages/tex.scm +++ b/gnu/packages/tex.scm @@ -2518,214 +2518,213 @@ formats.") (license license:lppl))) (define-public texlive-latex-base - (package - (name "texlive-latex-base") - (version (number->string %texlive-revision)) - (source (texlive-origin - name version - (list "/doc/latex/base/" - "/source/latex/base/" - ;; Almost all files in /tex/latex/base are generated, but - ;; these are not: - "/tex/latex/base/idx.tex" - "/tex/latex/base/lablst.tex" - "/tex/latex/base/lppl.tex" - "/tex/latex/base/ltnews.cls" - "/tex/latex/base/ltxcheck.tex" - "/tex/latex/base/ltxguide.cls" - "/tex/latex/base/minimal.cls" - "/tex/latex/base/sample2e.tex" - "/tex/latex/base/small2e.tex" - "/tex/latex/base/source2e.tex" - "/tex/latex/base/testpage.tex" - "/tex/latex/base/texsys.cfg") - (base32 - "0f8d41wk1gb7i6xq1a10drwhhayc50pg9nwzjkrqnxrv0pcc08w5"))) - (build-system gnu-build-system) - (arguments - `(#:modules ((guix build gnu-build-system) - (guix build utils) - (ice-9 match) - (srfi srfi-26)) - #:tests? #f ; no tests - #:phases - (modify-phases %standard-phases - (delete 'configure) - (replace 'build - (lambda* (#:key inputs #:allow-other-keys) - ;; Find required fonts - (setenv "TFMFONTS" - (string-join - (map (match-lambda - ((pkg-name . dir) - (string-append - (assoc-ref inputs pkg-name) - "/share/texmf-dist/fonts/tfm/public" - dir))) - '(("texlive-etex" . "/etex") - ("texlive-cm" . "/cm") - ("texlive-fonts-latex" . "/latex-fonts") - ("texlive-fonts-knuth-lib" . "/knuth-lib"))) - ":")) - (let ((cwd (getcwd))) - (setenv "TEXINPUTS" - (string-append - cwd "//:" - cwd "/source/latex/base//:" - cwd "/build:" - (string-join - (map (match-lambda ((_ . dir) dir)) inputs) - "//:")))) + (let ((template (simple-texlive-package + "texlive-latex-base" + (list "/doc/latex/base/" + "/source/latex/base/" + ;; Almost all files in /tex/latex/base are generated, but + ;; these are not: + "/tex/latex/base/idx.tex" + "/tex/latex/base/lablst.tex" + "/tex/latex/base/lppl.tex" + "/tex/latex/base/ltnews.cls" + "/tex/latex/base/ltxcheck.tex" + "/tex/latex/base/ltxguide.cls" + "/tex/latex/base/minimal.cls" + "/tex/latex/base/sample2e.tex" + "/tex/latex/base/small2e.tex" + "/tex/latex/base/source2e.tex" + "/tex/latex/base/testpage.tex" + "/tex/latex/base/texsys.cfg") + (base32 + "0f8d41wk1gb7i6xq1a10drwhhayc50pg9nwzjkrqnxrv0pcc08w5") + #:trivial? #t))) + (package + (inherit template) + (arguments + (substitute-keyword-arguments (package-arguments template) + ((#:modules modules '()) + '((guix build gnu-build-system) + (guix build utils) + (ice-9 match) + (srfi srfi-26))) + ((#:phases phases) + `(modify-phases ,phases + (replace 'build + (lambda* (#:key inputs #:allow-other-keys) + ;; Find required fonts + (setenv "TFMFONTS" + (string-join + (map (match-lambda + ((pkg-name . dir) + (string-append + (assoc-ref inputs pkg-name) + "/share/texmf-dist/fonts/tfm/public" + dir))) + '(("texlive-etex" . "/etex") + ("texlive-cm" . "/cm") + ("texlive-fonts-latex" . "/latex-fonts") + ("texlive-fonts-knuth-lib" . "/knuth-lib"))) + ":")) + (let ((cwd (getcwd))) + (setenv "TEXINPUTS" + (string-append + cwd "//:" + cwd "/source/latex/base//:" + cwd "/build:" + (string-join + (map (match-lambda ((_ . dir) dir)) inputs) + "//:")))) - ;; This is the actual build step. - (mkdir "build") - (invoke "tex" "-ini" "-interaction=scrollmode" - "-output-directory=build" "unpack.ins") + ;; This is the actual build step. + (mkdir "build") + (invoke "tex" "-ini" "-interaction=scrollmode" + "-output-directory=build" "unpack.ins") - ;; XXX: We can't build all formats at this point, nor are they - ;; part of the LaTeX base, so we disable them. Actually, we - ;; should be running this all in a profile hook, so that only - ;; selected formats and hyphenation patterns are included, but it - ;; takes long and TeX Live isn't designed to be modular like - ;; that. Everything operates on a shared directory, which we - ;; would only have at profile generation time. - (let ((disabled-formats - '("aleph aleph" "lamed aleph" "uptex uptex" "euptex euptex" - "eptex eptex" "ptex ptex" "pdfxmltex pdftex" "platex eptex" - "csplain pdftex" "mf mf-nowin" "mex pdftex" "pdfmex pdftex" - "cont-en xetex" "cont-en pdftex" "pdfcsplain xetex" - "pdfcsplain pdftex" "pdfcsplain luatex" "cslatex pdftex" - "mptopdf pdftex" "uplatex euptex" "jadetex pdftex" - "amstex pdftex" "pdfcslatex pdftex" "lollipop tex" - "xmltex pdftex" "pdfjadetex pdftex" "eplain pdftex" - "texsis pdftex" "mltex pdftex" "utf8mex pdftex"))) - (mkdir "web2c") - (install-file (string-append - (assoc-ref inputs "texlive-kpathsea") - "/share/texmf-dist/web2c/fmtutil.cnf") - "web2c") - (make-file-writable "web2c/fmtutil.cnf") - (substitute* "web2c/fmtutil.cnf" - (((string-append "^(" (string-join disabled-formats "|") ")") m) - (string-append "#! " m)))) - (invoke "fmtutil-sys" "--all" - "--fmtdir=web2c" - (string-append "--cnffile=web2c/fmtutil.cnf")) - ;; We don't actually want to install it. - (delete-file "web2c/fmtutil.cnf") - #t)) - (replace 'install - (lambda* (#:key inputs outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (root (string-append out "/share/texmf-dist")) - (target (string-append root "/tex/latex/base")) - (web2c (string-append root "/web2c")) - (makeindex (string-append root "/makeindex/latex"))) - (for-each delete-file (find-files "." "\\.(log|aux)$")) + ;; XXX: We can't build all formats at this point, nor are they + ;; part of the LaTeX base, so we disable them. Actually, we + ;; should be running this all in a profile hook, so that only + ;; selected formats and hyphenation patterns are included, but it + ;; takes long and TeX Live isn't designed to be modular like + ;; that. Everything operates on a shared directory, which we + ;; would only have at profile generation time. + (let ((disabled-formats + '("aleph aleph" "lamed aleph" "uptex uptex" "euptex euptex" + "eptex eptex" "ptex ptex" "pdfxmltex pdftex" "platex eptex" + "csplain pdftex" "mf mf-nowin" "mex pdftex" "pdfmex pdftex" + "cont-en xetex" "cont-en pdftex" "pdfcsplain xetex" + "pdfcsplain pdftex" "pdfcsplain luatex" "cslatex pdftex" + "mptopdf pdftex" "uplatex euptex" "jadetex pdftex" + "amstex pdftex" "pdfcslatex pdftex" "lollipop tex" + "xmltex pdftex" "pdfjadetex pdftex" "eplain pdftex" + "texsis pdftex" "mltex pdftex" "utf8mex pdftex"))) + (mkdir "web2c") + (install-file (string-append + (assoc-ref inputs "texlive-kpathsea") + "/share/texmf-dist/web2c/fmtutil.cnf") + "web2c") + (make-file-writable "web2c/fmtutil.cnf") + (substitute* "web2c/fmtutil.cnf" + (((string-append "^(" (string-join disabled-formats "|") ")") m) + (string-append "#! " m)))) + (invoke "fmtutil-sys" "--all" + "--fmtdir=web2c" + (string-append "--cnffile=web2c/fmtutil.cnf")) + ;; We don't actually want to install it. + (delete-file "web2c/fmtutil.cnf") + #t)) + (add-after 'install 'install-more + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (root (string-append out "/share/texmf-dist")) + (target (string-append root "/tex/latex/base")) + (web2c (string-append root "/web2c")) + (makeindex (string-append root "/makeindex/latex"))) + (for-each delete-file (find-files "." "\\.(log|aux)$")) - ;; The usedir directive in docstrip.ins is ignored, so these - ;; two files end up in the wrong place. Move them. - (mkdir-p makeindex) - (for-each (lambda (file) - (install-file file makeindex) - (delete-file file)) - '("build/gglo.ist" - "build/gind.ist")) - (for-each (cut install-file <> target) - (find-files "build" ".*")) - (for-each (cut install-file <> web2c) - (find-files "web2c" ".*")) - #t)))))) - (native-inputs - `(("texlive-bin" ,texlive-bin) - ("texlive-tex-ini-files" ,texlive-tex-ini-files) - ("texlive-tex-plain" ,texlive-tex-plain) - ("texlive-kpathsea" ,texlive-kpathsea) - ("texlive-cm" ,texlive-cm) - ("texlive-fonts-latex" ,texlive-fonts-latex) - ("texlive-fonts-knuth-lib" ,texlive-fonts-knuth-lib) - ("texlive-luatexconfig" - ,(texlive-origin - "texlive-luatexconfig" (number->string %texlive-revision) - (list "/tex/generic/config/luatex-unicode-letters.tex" - "/tex/generic/config/luatexiniconfig.tex" - "/web2c/texmfcnf.lua") - (base32 - "0cs67a8wwh4s5p5gn8l49jyccgy7glw8mfq5klgn3dfsl2fdlhk7"))))) - (propagated-inputs - `(("texlive-dehyph-exptl" ,texlive-dehyph-exptl) - ("texlive-etex" ,texlive-etex) - ("texlive-hyph-utf8" ,texlive-hyph-utf8) - ("texlive-hyphen-base" ,texlive-hyphen-base) - ("texlive-hyphen-afrikaans" ,texlive-hyphen-afrikaans) - ("texlive-hyphen-ancientgreek" ,texlive-hyphen-ancientgreek) - ("texlive-hyphen-armenian" ,texlive-hyphen-armenian) - ("texlive-hyphen-basque" ,texlive-hyphen-basque) - ("texlive-hyphen-belarusian" ,texlive-hyphen-belarusian) - ("texlive-hyphen-bulgarian" ,texlive-hyphen-bulgarian) - ("texlive-hyphen-catalan" ,texlive-hyphen-catalan) - ("texlive-hyphen-chinese" ,texlive-hyphen-chinese) - ("texlive-hyphen-churchslavonic" ,texlive-hyphen-churchslavonic) - ("texlive-hyphen-coptic" ,texlive-hyphen-coptic) - ("texlive-hyphen-croatian" ,texlive-hyphen-croatian) - ("texlive-hyphen-czech" ,texlive-hyphen-czech) - ("texlive-hyphen-danish" ,texlive-hyphen-danish) - ("texlive-hyphen-dutch" ,texlive-hyphen-dutch) - ("texlive-hyphen-english" ,texlive-hyphen-english) - ("texlive-hyphen-esperanto" ,texlive-hyphen-esperanto) - ("texlive-hyphen-estonian" ,texlive-hyphen-estonian) - ("texlive-hyphen-ethiopic" ,texlive-hyphen-ethiopic) - ("texlive-hyphen-finnish" ,texlive-hyphen-finnish) - ("texlive-hyphen-french" ,texlive-hyphen-french) - ("texlive-hyphen-friulan" ,texlive-hyphen-friulan) - ("texlive-hyphen-galician" ,texlive-hyphen-galician) - ("texlive-hyphen-georgian" ,texlive-hyphen-georgian) - ("texlive-hyphen-german" ,texlive-hyphen-german) - ("texlive-hyphen-greek" ,texlive-hyphen-greek) - ("texlive-hyphen-hungarian" ,texlive-hyphen-hungarian) - ("texlive-hyphen-icelandic" ,texlive-hyphen-icelandic) - ("texlive-hyphen-indic" ,texlive-hyphen-indic) - ("texlive-hyphen-indonesian" ,texlive-hyphen-indonesian) - ("texlive-hyphen-interlingua" ,texlive-hyphen-interlingua) - ("texlive-hyphen-irish" ,texlive-hyphen-irish) - ("texlive-hyphen-italian" ,texlive-hyphen-italian) - ("texlive-hyphen-kurmanji" ,texlive-hyphen-kurmanji) - ("texlive-hyphen-latin" ,texlive-hyphen-latin) - ("texlive-hyphen-latvian" ,texlive-hyphen-latvian) - ("texlive-hyphen-lithuanian" ,texlive-hyphen-lithuanian) - ("texlive-hyphen-mongolian" ,texlive-hyphen-mongolian) - ("texlive-hyphen-norwegian" ,texlive-hyphen-norwegian) - ("texlive-hyphen-occitan" ,texlive-hyphen-occitan) - ("texlive-hyphen-piedmontese" ,texlive-hyphen-piedmontese) - ("texlive-hyphen-polish" ,texlive-hyphen-polish) - ("texlive-hyphen-portuguese" ,texlive-hyphen-portuguese) - ("texlive-hyphen-romanian" ,texlive-hyphen-romanian) - ("texlive-hyphen-romansh" ,texlive-hyphen-romansh) - ("texlive-hyphen-russian" ,texlive-hyphen-russian) - ("texlive-hyphen-sanskrit" ,texlive-hyphen-sanskrit) - ("texlive-hyphen-serbian" ,texlive-hyphen-serbian) - ("texlive-hyphen-slovak" ,texlive-hyphen-slovak) - ("texlive-hyphen-slovenian" ,texlive-hyphen-slovenian) - ("texlive-hyphen-spanish" ,texlive-hyphen-spanish) - ("texlive-hyphen-swedish" ,texlive-hyphen-swedish) - ("texlive-hyphen-thai" ,texlive-hyphen-thai) - ("texlive-hyphen-turkish" ,texlive-hyphen-turkish) - ("texlive-hyphen-turkmen" ,texlive-hyphen-turkmen) - ("texlive-hyphen-ukrainian" ,texlive-hyphen-ukrainian) - ("texlive-hyphen-uppersorbian" ,texlive-hyphen-uppersorbian) - ("texlive-hyphen-welsh" ,texlive-hyphen-welsh) - ("texlive-unicode-data" ,texlive-unicode-data) - ("texlive-ukrhyph" ,texlive-ukrhyph) - ("texlive-ruhyphen" ,texlive-ruhyphen) - ("texlive-latexconfig" ,texlive-latexconfig))) - (home-page "https://www.ctan.org/pkg/latex-base") - (synopsis "Base sources of LaTeX") - (description - "This bundle comprises the source of LaTeX itself, together with several + ;; The usedir directive in docstrip.ins is ignored, so these + ;; two files end up in the wrong place. Move them. + (mkdir-p makeindex) + (for-each (lambda (file) + (install-file file makeindex) + (delete-file file)) + '("build/gglo.ist" + "build/gind.ist")) + (for-each (cut install-file <> target) + (find-files "build" ".*")) + (for-each (cut install-file <> web2c) + (find-files "web2c" ".*")) + #t))))))) + (native-inputs + `(("texlive-bin" ,texlive-bin) + ("texlive-tex-ini-files" ,texlive-tex-ini-files) + ("texlive-tex-plain" ,texlive-tex-plain) + ("texlive-kpathsea" ,texlive-kpathsea) + ("texlive-cm" ,texlive-cm) + ("texlive-fonts-latex" ,texlive-fonts-latex) + ("texlive-fonts-knuth-lib" ,texlive-fonts-knuth-lib) + ("texlive-luatexconfig" + ,(texlive-origin + "texlive-luatexconfig" (number->string %texlive-revision) + (list "/tex/generic/config/luatex-unicode-letters.tex" + "/tex/generic/config/luatexiniconfig.tex" + "/web2c/texmfcnf.lua") + (base32 + "0cs67a8wwh4s5p5gn8l49jyccgy7glw8mfq5klgn3dfsl2fdlhk7"))))) + (propagated-inputs + `(("texlive-dehyph-exptl" ,texlive-dehyph-exptl) + ("texlive-etex" ,texlive-etex) + ("texlive-hyph-utf8" ,texlive-hyph-utf8) + ("texlive-hyphen-base" ,texlive-hyphen-base) + ("texlive-hyphen-afrikaans" ,texlive-hyphen-afrikaans) + ("texlive-hyphen-ancientgreek" ,texlive-hyphen-ancientgreek) + ("texlive-hyphen-armenian" ,texlive-hyphen-armenian) + ("texlive-hyphen-basque" ,texlive-hyphen-basque) + ("texlive-hyphen-belarusian" ,texlive-hyphen-belarusian) + ("texlive-hyphen-bulgarian" ,texlive-hyphen-bulgarian) + ("texlive-hyphen-catalan" ,texlive-hyphen-catalan) + ("texlive-hyphen-chinese" ,texlive-hyphen-chinese) + ("texlive-hyphen-churchslavonic" ,texlive-hyphen-churchslavonic) + ("texlive-hyphen-coptic" ,texlive-hyphen-coptic) + ("texlive-hyphen-croatian" ,texlive-hyphen-croatian) + ("texlive-hyphen-czech" ,texlive-hyphen-czech) + ("texlive-hyphen-danish" ,texlive-hyphen-danish) + ("texlive-hyphen-dutch" ,texlive-hyphen-dutch) + ("texlive-hyphen-english" ,texlive-hyphen-english) + ("texlive-hyphen-esperanto" ,texlive-hyphen-esperanto) + ("texlive-hyphen-estonian" ,texlive-hyphen-estonian) + ("texlive-hyphen-ethiopic" ,texlive-hyphen-ethiopic) + ("texlive-hyphen-finnish" ,texlive-hyphen-finnish) + ("texlive-hyphen-french" ,texlive-hyphen-french) + ("texlive-hyphen-friulan" ,texlive-hyphen-friulan) + ("texlive-hyphen-galician" ,texlive-hyphen-galician) + ("texlive-hyphen-georgian" ,texlive-hyphen-georgian) + ("texlive-hyphen-german" ,texlive-hyphen-german) + ("texlive-hyphen-greek" ,texlive-hyphen-greek) + ("texlive-hyphen-hungarian" ,texlive-hyphen-hungarian) + ("texlive-hyphen-icelandic" ,texlive-hyphen-icelandic) + ("texlive-hyphen-indic" ,texlive-hyphen-indic) + ("texlive-hyphen-indonesian" ,texlive-hyphen-indonesian) + ("texlive-hyphen-interlingua" ,texlive-hyphen-interlingua) + ("texlive-hyphen-irish" ,texlive-hyphen-irish) + ("texlive-hyphen-italian" ,texlive-hyphen-italian) + ("texlive-hyphen-kurmanji" ,texlive-hyphen-kurmanji) + ("texlive-hyphen-latin" ,texlive-hyphen-latin) + ("texlive-hyphen-latvian" ,texlive-hyphen-latvian) + ("texlive-hyphen-lithuanian" ,texlive-hyphen-lithuanian) + ("texlive-hyphen-mongolian" ,texlive-hyphen-mongolian) + ("texlive-hyphen-norwegian" ,texlive-hyphen-norwegian) + ("texlive-hyphen-occitan" ,texlive-hyphen-occitan) + ("texlive-hyphen-piedmontese" ,texlive-hyphen-piedmontese) + ("texlive-hyphen-polish" ,texlive-hyphen-polish) + ("texlive-hyphen-portuguese" ,texlive-hyphen-portuguese) + ("texlive-hyphen-romanian" ,texlive-hyphen-romanian) + ("texlive-hyphen-romansh" ,texlive-hyphen-romansh) + ("texlive-hyphen-russian" ,texlive-hyphen-russian) + ("texlive-hyphen-sanskrit" ,texlive-hyphen-sanskrit) + ("texlive-hyphen-serbian" ,texlive-hyphen-serbian) + ("texlive-hyphen-slovak" ,texlive-hyphen-slovak) + ("texlive-hyphen-slovenian" ,texlive-hyphen-slovenian) + ("texlive-hyphen-spanish" ,texlive-hyphen-spanish) + ("texlive-hyphen-swedish" ,texlive-hyphen-swedish) + ("texlive-hyphen-thai" ,texlive-hyphen-thai) + ("texlive-hyphen-turkish" ,texlive-hyphen-turkish) + ("texlive-hyphen-turkmen" ,texlive-hyphen-turkmen) + ("texlive-hyphen-ukrainian" ,texlive-hyphen-ukrainian) + ("texlive-hyphen-uppersorbian" ,texlive-hyphen-uppersorbian) + ("texlive-hyphen-welsh" ,texlive-hyphen-welsh) + ("texlive-unicode-data" ,texlive-unicode-data) + ("texlive-ukrhyph" ,texlive-ukrhyph) + ("texlive-ruhyphen" ,texlive-ruhyphen) + ("texlive-latexconfig" ,texlive-latexconfig))) + (home-page "https://www.ctan.org/pkg/latex-base") + (synopsis "Base sources of LaTeX") + (description + "This bundle comprises the source of LaTeX itself, together with several packages which are considered \"part of the kernel\". This bundle, together with the required packages, constitutes what every LaTeX distribution should contain.") - (license license:lppl1.3c+))) + (license license:lppl1.3c+)))) (define-public texlive-latex-filecontents (package @@ -3578,7 +3577,10 @@ standard LaTeX packages." ;; the updmap.cfg file) (match (filter (match-lambda ((name . _) - (not (member name '("bash" "updmap.cfg"))))) + (not (member name '("bash" + "coreutils" + "sed" + "updmap.cfg"))))) %build-inputs) (((names . directories) ...) (union-build (assoc-ref %outputs "out") @@ -3598,6 +3600,7 @@ standard LaTeX packages." (setenv "PATH" (string-append (assoc-ref %build-inputs "bash") "/bin:" (assoc-ref %build-inputs "coreutils") "/bin:" + (assoc-ref %build-inputs "sed") "/bin:" (string-append out "/bin"))) (for-each (cut wrap-program <> @@ -3606,16 +3609,32 @@ standard LaTeX packages." (find-files (string-append out "/bin") ".*")) ;; Remove invalid maps from config file. - (let ((port (open-pipe* OPEN_WRITE "updmap-sys" - "--syncwithtrees" - "--nohash" - (assoc-ref %build-inputs "updmap.cfg")))) - (display "Y\n" port) - (when (not (zero? (status:exit-val (close-pipe port)))) - (error "failed to filter updmap.cfg"))) - ;; Generate maps. - (invoke "updmap-sys" "--force" - (string-append out "/share/texmf-config/web2c/updmap.cfg")) + (let ((web2c (string-append out "/share/texmf-config/web2c/")) + (maproot (string-append out "/share/texmf-dist/fonts/map/"))) + (mkdir-p web2c) + (copy-file + (assoc-ref %build-inputs "updmap.cfg") + (string-append web2c "updmap.cfg")) + (make-file-writable (string-append web2c "updmap.cfg")) + + (let* ((port (open-pipe* OPEN_WRITE "updmap-sys" + "--syncwithtrees" + "--nohash" + (string-append "--cnffile=" web2c "updmap.cfg")))) + (display "Y\n" port) + (when (not (zero? (status:exit-val (close-pipe port)))) + (error "failed to filter updmap.cfg"))) + ;; Generate maps. + (invoke "updmap-sys" + (string-append "--cnffile=" web2c "updmap.cfg") + (string-append "--dvipdfmxoutputdir=" + maproot "dvipdfmx/updmap/") + (string-append "--dvipsoutputdir=" + maproot "dvips/updmap/") + (string-append "--pdftexoutputdir=" + maproot "pdftex/updmap/")) + ;; Having this file breaks all file lookups later. + (delete-file (string-append out "/share/texmf-dist/ls-R"))) #t)))) (inputs `(("bash" ,bash) diff --git a/gnu/packages/text-editors.scm b/gnu/packages/text-editors.scm index 432e79e350..e5dee2f4e5 100644 --- a/gnu/packages/text-editors.scm +++ b/gnu/packages/text-editors.scm @@ -607,7 +607,7 @@ The basic features of Geany are: arbitrary text regions; it is not bound to syntactic units. Fe has no configuration or extension language and requires no setup. -Its user interface is emacs-like and it has menues for the very most +Its user interface is emacs-like and it has menus for the very most important functions to help beginners. Further there is a reference card. It offers: diff --git a/gnu/packages/tor.scm b/gnu/packages/tor.scm index 2e8e48c8e2..27090c14cf 100644 --- a/gnu/packages/tor.scm +++ b/gnu/packages/tor.scm @@ -50,14 +50,14 @@ (define-public tor (package (name "tor") - (version "0.4.1.5") + (version "0.4.1.6") (source (origin (method url-fetch) (uri (string-append "https://dist.torproject.org/tor-" version ".tar.gz")) (sha256 (base32 - "0984jb6hdcc10f7aq8xzl7l4jf93skp45wkv2v63z4zv0nvf0r58")))) + "0wgdid8w7srd218hh4rwslzdx2ickxw1pg18p2wry1r6wi65521a")))) (build-system gnu-build-system) (native-inputs `(("pkg-config" ,pkg-config) diff --git a/gnu/packages/usb-modeswitch.scm b/gnu/packages/usb-modeswitch.scm index 8f1cf9df60..7e4526ae46 100644 --- a/gnu/packages/usb-modeswitch.scm +++ b/gnu/packages/usb-modeswitch.scm @@ -69,7 +69,7 @@ (install-file (string-append files "/COPYING") license-dir))))) (home-page "http://www.draisberghof.de/usb_modeswitch/") (synopsis "Data package for USB_ModeSwitch") - (description "This packages contains data about devices and a UDEV rules + (description "This package contains data about devices and a UDEV rules file for use with USB_ModeSwitch.") (license license:gpl2+))) diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm index 11219589b6..eef481d52a 100644 --- a/gnu/packages/video.scm +++ b/gnu/packages/video.scm @@ -1495,8 +1495,8 @@ access to mpv's powerful playback capabilities.") (version "2019.09.12") (source (origin (method url-fetch) - (uri (string-append "https://github.com/rg3/youtube-dl/releases/" - "download/" version "/youtube-dl-" + (uri (string-append "https://github.com/ytdl-org/youtube-dl/" + "releases/download/" version "/youtube-dl-" version ".tar.gz")) (sha256 (base32 @@ -2297,7 +2297,7 @@ be used for realtime video capture via Linux-specific APIs.") (define-public obs (package (name "obs") - (version "23.0.2") + (version "24.0.1") (source (origin (method git-fetch) (uri (git-reference @@ -2306,7 +2306,7 @@ be used for realtime video capture via Linux-specific APIs.") (file-name (git-file-name name version)) (sha256 (base32 - "1c0a5vy4h3qwz69qw3bydyk7r651ib5a9jna4yj6c25p3p9isdvp")))) + "056s0hs1ds3c57sc0gy39dxaxvwlakl3w25jxgawh0fs99211ar5")))) (build-system cmake-build-system) (arguments `(#:tests? #f)) ; no tests @@ -2326,6 +2326,7 @@ be used for realtime video capture via Linux-specific APIs.") ("mesa" ,mesa) ("pulseaudio" ,pulseaudio) ("qtbase" ,qtbase) + ("qtsvg" ,qtsvg) ("qtx11extras" ,qtx11extras) ("speex" ,speex) ("v4l-utils" ,v4l-utils) diff --git a/gnu/packages/web-browsers.scm b/gnu/packages/web-browsers.scm index bfc0976f0e..6d9126dedc 100644 --- a/gnu/packages/web-browsers.scm +++ b/gnu/packages/web-browsers.scm @@ -368,7 +368,7 @@ driven and does not detract you from your daily work.") (define next-gtk-webkit (package (name "next-gtk-webkit") - (version "1.3.1") + (version "1.3.2") (source (origin (method git-fetch) @@ -379,7 +379,7 @@ driven and does not detract you from your daily work.") (commit version))) (sha256 (base32 - "01fn1f080ydk0wj1bwkyakqz93bdq9xb5x8qz820jpl9id17bqgj")) + "0863p6ch4pdrn6b81cx2abis0ld7r2n6x34v3z0ihj3jlfj21yx4")) (file-name (git-file-name "next" version)))) (build-system glib-or-gtk-build-system) (arguments @@ -417,19 +417,31 @@ features for productive professionals.") #:asd-file "next.asd" #:asd-system-name "next/download-manager")) (inputs - `(;; ASD libraries: - ("trivial-features" ,sbcl-trivial-features) - ;; Lisp libraries: - ("cl-ppcre" ,sbcl-cl-ppcre) + `(("cl-ppcre" ,sbcl-cl-ppcre) ("dexador" ,sbcl-dexador) ("log4cl" ,sbcl-log4cl) ("lparallel" ,sbcl-lparallel) ("quri" ,sbcl-quri) ("str" ,sbcl-cl-str))) (native-inputs - `(("prove-asdf" ,sbcl-prove-asdf))) + `(("trivial-features" ,sbcl-trivial-features) + ("prove-asdf" ,sbcl-prove-asdf))) (synopsis "Infinitely extensible web-browser (download manager)"))) +(define sbcl-next-ring + (package + (inherit next-gtk-webkit) + (name "sbcl-next-ring") + (build-system asdf-build-system/sbcl) + (arguments + `(#:tests? #t + #:asd-file "next.asd" + #:asd-system-name "next/ring")) + (native-inputs + `(("trivial-features" ,sbcl-trivial-features) + ("prove-asdf" ,sbcl-prove-asdf))) + (synopsis "Infinitely extensible web-browser (ring)"))) + (define-public next (let ((version (package-version next-gtk-webkit))) (package @@ -491,14 +503,11 @@ features for productive professionals.") (string-append "PREFIX=" (assoc-ref outputs "out")))))))) (inputs - `(("next-gtk-webkit" ,next-gtk-webkit) - ;; ASD libraries: - ("trivial-features" ,sbcl-trivial-features) - ("trivial-garbage" ,sbcl-trivial-garbage) - ;; Lisp libraries: - ("alexandria" ,sbcl-alexandria) + `(("alexandria" ,sbcl-alexandria) ("bordeaux-threads" ,sbcl-bordeaux-threads) + ("cl-annot" ,sbcl-cl-annot) ("cl-css" ,sbcl-cl-css) + ("cl-hooks" ,sbcl-cl-hooks) ("cl-json" ,sbcl-cl-json) ("cl-markup" ,sbcl-cl-markup) ("cl-ppcre" ,sbcl-cl-ppcre) @@ -507,6 +516,7 @@ features for productive professionals.") ("dbus" ,cl-dbus) ("dexador" ,sbcl-dexador) ("ironclad" ,sbcl-ironclad) + ("local-time" ,sbcl-local-time) ("log4cl" ,sbcl-log4cl) ("lparallel" ,sbcl-lparallel) ("mk-string-metrics" ,sbcl-mk-string-metrics) @@ -519,9 +529,12 @@ features for productive professionals.") ("trivial-clipboard" ,sbcl-trivial-clipboard) ("unix-opts" ,sbcl-unix-opts) ;; Local deps - ("next-download-manager" ,sbcl-next-download-manager))) + ("next-gtk-webkit" ,next-gtk-webkit) + ("next-download-manager" ,sbcl-next-download-manager) + ("next-ring" ,sbcl-next-ring))) (native-inputs - `(("prove-asdf" ,sbcl-prove-asdf))) + `(("trivial-features" ,sbcl-trivial-features) + ("prove-asdf" ,sbcl-prove-asdf))) (synopsis "Infinitely extensible web-browser (with Lisp development files)")))) (define-public sbcl-next diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm index 5b1f60cfdd..c9e46ef7e9 100644 --- a/gnu/packages/web.scm +++ b/gnu/packages/web.scm @@ -123,6 +123,7 @@ #:use-module (gnu packages pkg-config) #:use-module (gnu packages qt) #:use-module (gnu packages readline) + #:use-module (gnu packages re2c) #:use-module (gnu packages sphinx) #:use-module (gnu packages texinfo) #:use-module (gnu packages textutils) @@ -860,6 +861,45 @@ for efficient socket-like bidirectional reliable communication channels.") ;; This is LGPLv2.1-only with extra exceptions specified in 'LICENSE'. (license license:lgpl2.1))) +(define-public wabt + (package + (name "wabt") + (version "1.0.11") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/WebAssembly/wabt") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 "0hn88vlqyclpk79v3wg3lrssd9vwhjdgvb41g03jqakygxxgnmp5")))) + (build-system cmake-build-system) + (arguments + `(#:configure-flags '("-DBUILD_TESTS=OFF") + #:tests? #f)) + (inputs `(("python" ,python-2) + ("re2c" ,re2c))) + (home-page "https://github.com/WebAssembly/wabt") + (synopsis "WebAssembly Binary Toolkit") + (description "WABT (pronounced: wabbit) is a suite of tools for +WebAssembly, including: + +* wat2wasm: translate from WebAssembly text format to the WebAssembly binary + format +* wasm2wat: the inverse of wat2wasm, translate from the binary format back + to the text format (also known as a .wat) +* wasm-objdump: print information about a wasm binary. Similar to objdump. +* wasm-interp: decode and run a WebAssembly binary file using a stack-based + interpreter +* wat-desugar: parse .wat text form as supported by the spec interpreter + (s-expressions, flat syntax, or mixed) and print canonical flat format +* wasm2c: convert a WebAssembly binary file to a C source and header + +These tools are intended for use in (or for development of) toolchains or +other systems that want to manipulate WebAssembly files.") + (license license:asl2.0))) + (define-public websocketpp (package (name "websocketpp") diff --git a/gnu/packages/xdisorg.scm b/gnu/packages/xdisorg.scm index ae399803f3..70213a617e 100644 --- a/gnu/packages/xdisorg.scm +++ b/gnu/packages/xdisorg.scm @@ -11,7 +11,7 @@ ;;; Copyright © 2015 Florian Paul Schmidt ;;; Copyright © 2016 Christopher Allan Webber ;;; Copyright © 2016, 2018 Ricardo Wurmus -;;; Copyright © 2016, 2017, 2018 Efraim Flashner +;;; Copyright © 2016, 2017, 2018, 2019 Efraim Flashner ;;; Copyright © 2016 Leo Famulari ;;; Copyright © 2016 Alex Kost ;;; Copyright © 2016, 2017, 2019 Marius Bakke @@ -25,6 +25,7 @@ ;;; Copyright © 2018, 2019 Rutger Helling ;;; Copyright © 2018, 2019 Pierre Neidhardt ;;; Copyright © 2018 Nam Nguyen +;;; Copyright © 2019 Wiktor Żelazny ;;; ;;; This file is part of GNU Guix. ;;; @@ -1687,16 +1688,16 @@ temperature of the screen.") (define-public wl-clipboard (package (name "wl-clipboard") - (version "1.0.0") + (version "2.0.0_beta2") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/bugaevc/wl-clipboard.git") - (commit (string-append "v" version)))) + (commit version))) (file-name (git-file-name name version)) (sha256 - (base32 "03h6ajcc30w6928bkd4h6xfj4iy2359ww6hdlybq8mr1zwmb2h0q")))) + (base32 "0wyqbaph9v1v6lwfcjf8gjhdl70icpss4wapshzfxcz3l9m1p8hv")))) (build-system meson-build-system) (native-inputs `(("pkg-config" ,pkg-config))) @@ -1708,3 +1709,28 @@ temperature of the screen.") (description "Wl-clipboard is a set of command-line copy/paste utilities for Wayland.") (license license:gpl3+))) + +(define-public autocutsel + (package + (name "autocutsel") + (version "0.10.0") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/sigmike/autocutsel" + "/releases/download/" version "/" + "autocutsel-" version ".tar.gz")) + (sha256 + (base32 + "0gsys2dzh4az51ndcsabhlbbrjn2nm75lnjr45kg6r8sm8q66dx2")))) + (build-system gnu-build-system) + (arguments + '(#:tests? #f)) ; no "check" target + (native-inputs `(("libx11" ,libx11) + ("libxaw" ,libxaw))) + (home-page "https://www.nongnu.org/autocutsel/") + (synopsis "Automated X11 clipboard and cutbuffer synchronization") + (description "@code{autocutsel} tracks changes in the server's cutbuffer +and clipboard selection. When the clipboard is changed, it updates the +cutbuffer. When the cutbuffer is changed, it owns the clipboard selection. +The cutbuffer and clipboard selection are always synchronized.") + (license license:gpl2+))) diff --git a/gnu/packages/xml.scm b/gnu/packages/xml.scm index b8f3774039..3a853ea661 100644 --- a/gnu/packages/xml.scm +++ b/gnu/packages/xml.scm @@ -1363,7 +1363,7 @@ maintaining each reference encountered.") "This module provides an XPath engine, that can be re-used by other modules/classes that implement trees. -In order to use the XPath engine, nodes in the user module need to mimick DOM +In order to use the XPath engine, nodes in the user module need to mimic DOM nodes. The degree of similitude between the user tree and a DOM dictates how much of the XPath features can be used. A module implementing all of the DOM should be able to use this module very easily (you might need to add the diff --git a/gnu/services/cuirass.scm b/gnu/services/cuirass.scm index 7bd43cd427..914a0d337f 100644 --- a/gnu/services/cuirass.scm +++ b/gnu/services/cuirass.scm @@ -81,70 +81,68 @@ (define (cuirass-shepherd-service config) "Return a for the Cuirass service with CONFIG." - (and - (cuirass-configuration? config) - (let ((cuirass (cuirass-configuration-cuirass config)) - (cache-directory (cuirass-configuration-cache-directory config)) - (web-log-file (cuirass-configuration-web-log-file config)) - (log-file (cuirass-configuration-log-file config)) - (user (cuirass-configuration-user config)) - (group (cuirass-configuration-group config)) - (interval (cuirass-configuration-interval config)) - (database (cuirass-configuration-database config)) - (ttl (cuirass-configuration-ttl config)) - (port (cuirass-configuration-port config)) - (host (cuirass-configuration-host config)) - (specs (cuirass-configuration-specifications config)) - (use-substitutes? (cuirass-configuration-use-substitutes? config)) - (one-shot? (cuirass-configuration-one-shot? config)) - (fallback? (cuirass-configuration-fallback? config))) - (list (shepherd-service - (documentation "Run Cuirass.") - (provision '(cuirass)) - (requirement '(guix-daemon networking)) - (start #~(make-forkexec-constructor - (list (string-append #$cuirass "/bin/cuirass") - "--cache-directory" #$cache-directory - "--specifications" - #$(scheme-file "cuirass-specs.scm" specs) - "--database" #$database - "--ttl" #$(string-append (number->string ttl) "s") - "--interval" #$(number->string interval) - #$@(if use-substitutes? '("--use-substitutes") '()) - #$@(if one-shot? '("--one-shot") '()) - #$@(if fallback? '("--fallback") '())) + (let ((cuirass (cuirass-configuration-cuirass config)) + (cache-directory (cuirass-configuration-cache-directory config)) + (web-log-file (cuirass-configuration-web-log-file config)) + (log-file (cuirass-configuration-log-file config)) + (user (cuirass-configuration-user config)) + (group (cuirass-configuration-group config)) + (interval (cuirass-configuration-interval config)) + (database (cuirass-configuration-database config)) + (ttl (cuirass-configuration-ttl config)) + (port (cuirass-configuration-port config)) + (host (cuirass-configuration-host config)) + (specs (cuirass-configuration-specifications config)) + (use-substitutes? (cuirass-configuration-use-substitutes? config)) + (one-shot? (cuirass-configuration-one-shot? config)) + (fallback? (cuirass-configuration-fallback? config))) + (list (shepherd-service + (documentation "Run Cuirass.") + (provision '(cuirass)) + (requirement '(guix-daemon networking)) + (start #~(make-forkexec-constructor + (list (string-append #$cuirass "/bin/cuirass") + "--cache-directory" #$cache-directory + "--specifications" + #$(scheme-file "cuirass-specs.scm" specs) + "--database" #$database + "--ttl" #$(string-append (number->string ttl) "s") + "--interval" #$(number->string interval) + #$@(if use-substitutes? '("--use-substitutes") '()) + #$@(if one-shot? '("--one-shot") '()) + #$@(if fallback? '("--fallback") '())) - #:environment-variables - (list "GIT_SSL_CAINFO=/etc/ssl/certs/ca-certificates.crt" - (string-append "GIT_EXEC_PATH=" #$git - "/libexec/git-core")) + #:environment-variables + (list "GIT_SSL_CAINFO=/etc/ssl/certs/ca-certificates.crt" + (string-append "GIT_EXEC_PATH=" #$git + "/libexec/git-core")) - #:user #$user - #:group #$group - #:log-file #$log-file)) - (stop #~(make-kill-destructor))) - (shepherd-service - (documentation "Run Cuirass web interface.") - (provision '(cuirass-web)) - (requirement '(guix-daemon networking)) - (start #~(make-forkexec-constructor - (list (string-append #$cuirass "/bin/cuirass") - "--cache-directory" #$cache-directory - "--specifications" - #$(scheme-file "cuirass-specs.scm" specs) - "--database" #$database - "--ttl" #$(string-append (number->string ttl) "s") - "--web" - "--port" #$(number->string port) - "--listen" #$host - "--interval" #$(number->string interval) - #$@(if use-substitutes? '("--use-substitutes") '()) - #$@(if fallback? '("--fallback") '())) + #:user #$user + #:group #$group + #:log-file #$log-file)) + (stop #~(make-kill-destructor))) + (shepherd-service + (documentation "Run Cuirass web interface.") + (provision '(cuirass-web)) + (requirement '(guix-daemon networking)) + (start #~(make-forkexec-constructor + (list (string-append #$cuirass "/bin/cuirass") + "--cache-directory" #$cache-directory + "--specifications" + #$(scheme-file "cuirass-specs.scm" specs) + "--database" #$database + "--ttl" #$(string-append (number->string ttl) "s") + "--web" + "--port" #$(number->string port) + "--listen" #$host + "--interval" #$(number->string interval) + #$@(if use-substitutes? '("--use-substitutes") '()) + #$@(if fallback? '("--fallback") '())) - #:user #$user - #:group #$group - #:log-file #$web-log-file)) - (stop #~(make-kill-destructor))))))) + #:user #$user + #:group #$group + #:log-file #$web-log-file)) + (stop #~(make-kill-destructor)))))) (define (cuirass-account config) "Return the user accounts and user groups for CONFIG." diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm index 3de0b4c2f3..2606aa9e3e 100644 --- a/gnu/services/mail.scm +++ b/gnu/services/mail.scm @@ -137,7 +137,7 @@ (define (free-form-fields? val) (match val (() #t) - ((((? symbol?) . (? string)) . val) (free-form-fields? val)) + ((((? symbol?) . (? string?)) . val) (free-form-fields? val)) (_ #f))) (define (serialize-free-form-fields field-name val) (for-each (match-lambda ((k . v) (serialize-field k v))) val)) @@ -145,7 +145,7 @@ (define (free-form-args? val) (match val (() #t) - ((((? symbol?) . (? string)) . val) (free-form-args? val)) + ((((? symbol?) . (? string?)) . val) (free-form-args? val)) (_ #f))) (define (serialize-free-form-args field-name val) (serialize-field field-name diff --git a/gnu/services/networking.scm b/gnu/services/networking.scm index c775242f99..dd63009116 100644 --- a/gnu/services/networking.scm +++ b/gnu/services/networking.scm @@ -11,6 +11,7 @@ ;;; Copyright © 2018 Arun Isaac ;;; Copyright © 2019 Florian Pelz ;;; Copyright © 2019 Maxim Cournoyer +;;; Copyright © 2019 Sou Bunnbu ;;; ;;; This file is part of GNU Guix. ;;; @@ -144,7 +145,14 @@ iptables-configuration-iptables iptables-configuration-ipv4-rules iptables-configuration-ipv6-rules - iptables-service-type)) + iptables-service-type + + nftables-service-type + nftables-configuration + nftables-configuration? + nftables-configuration-package + nftables-configuration-ruleset + %default-nftables-ruleset)) ;;; Commentary: ;;; @@ -1415,4 +1423,76 @@ COMMIT (list (service-extension shepherd-root-service-type (compose list iptables-shepherd-service)))))) +;;; +;;; nftables +;;; + +(define %default-nftables-ruleset + (plain-file "nftables.conf" + "# A simple and safe firewall +table inet filter { + chain input { + type filter hook input priority 0; policy drop; + + # early drop of invalid connections + ct state invalid drop + + # allow established/related connections + ct state { established, related } accept + + # allow from loopback + iifname lo accept + + # allow icmp + ip protocol icmp accept + ip6 nexthdr icmpv6 accept + + # allow ssh + tcp dport ssh accept + + # reject everything else + reject with icmpx type port-unreachable + } + chain forward { + type filter hook forward priority 0; policy drop; + } + chain output { + type filter hook output priority 0; policy accept; + } +} +")) + +(define-record-type* + nftables-configuration + make-nftables-configuration + nftables-configuration? + (package nftables-configuration-package + (default nftables)) + (ruleset nftables-configuration-ruleset ; file-like object + (default %default-nftables-ruleset))) + +(define nftables-shepherd-service + (match-lambda + (($ package ruleset) + (let ((nft (file-append package "/sbin/nft"))) + (shepherd-service + (documentation "Packet filtering and classification") + (provision '(nftables)) + (start #~(lambda _ + (invoke #$nft "--file" #$ruleset))) + (stop #~(lambda _ + (invoke #$nft "flush" "ruleset")))))))) + +(define nftables-service-type + (service-type + (name 'nftables) + (description + "Run @command{nft}, setting up the specified ruleset.") + (extensions + (list (service-extension shepherd-root-service-type + (compose list nftables-shepherd-service)) + (service-extension profile-service-type + (compose list nftables-configuration-package)))) + (default-value (nftables-configuration)))) + ;;; networking.scm ends here diff --git a/gnu/services/virtualization.scm b/gnu/services/virtualization.scm index 3eecd2c085..bc8ac9b40a 100644 --- a/gnu/services/virtualization.scm +++ b/gnu/services/virtualization.scm @@ -313,7 +313,7 @@ be logged: Multiple filters can be defined in a single filters statement, they just need to be separated by spaces.") (log-outputs - (string "3:stderr") + (string "3:syslog:libvirtd") "Logging outputs. An output is one of the places to save logging information diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm index 06d72b5f60..1d55e388a1 100644 --- a/gnu/services/xorg.scm +++ b/gnu/services/xorg.scm @@ -773,6 +773,27 @@ the GNOME desktop environment.") (home-directory "/var/lib/gdm") (shell (file-append shadow "/sbin/nologin"))))) +(define %gdm-activation + ;; Ensure /var/lib/gdm is owned by the "gdm" user. This is normally the + ;; case but could be wrong if the "gdm" user was created, then removed, and + ;; then recreated under a different UID/GID: . + (with-imported-modules '((guix build utils)) + #~(begin + (use-modules (guix build utils)) + + (let* ((gdm (getpwnam "gdm")) + (uid (passwd:uid gdm)) + (gid (passwd:gid gdm)) + (st (stat "/var/lib/gdm" #f))) + ;; Recurse into /var/lib/gdm only if it has wrong ownership. + (when (and st + (or (not (= uid (stat:uid st))) + (not (= gid (stat:gid st))))) + (for-each (lambda (file) + (chown file uid gid)) + (find-files "/var/lib/gdm" + #:directories? #t))))))) + (define dbus-daemon-wrapper (program-file "gdm-dbus-wrapper" @@ -915,6 +936,8 @@ the GNOME desktop environment.") (extensions (list (service-extension shepherd-root-service-type gdm-shepherd-service) + (service-extension activation-service-type + (const %gdm-activation)) (service-extension account-service-type (const %gdm-accounts)) (service-extension pam-root-service-type diff --git a/gnu/system/linux-container.scm b/gnu/system/linux-container.scm index c6124cd223..2ab679ff3f 100644 --- a/gnu/system/linux-container.scm +++ b/gnu/system/linux-container.scm @@ -257,11 +257,13 @@ effects." (lowered-gexp-guile lowered)) "/bin/guile") "guile" - (append (map (lambda (directory) `("-L" ,directory)) - (lowered-gexp-load-path lowered)) - (map (lambda (directory) `("-C" ,directory)) - (lowered-gexp-load-compiled-path - lowered)) + (append (append-map (lambda (directory) + `("-L" ,directory)) + (lowered-gexp-load-path lowered)) + (append-map (lambda (directory) + `("-C" ,directory)) + (lowered-gexp-load-compiled-path + lowered)) (list "-c" (object->string (lowered-gexp-sexp lowered)))))))))))) diff --git a/gnu/tests.scm b/gnu/tests.scm index 0871b4c6f7..27cb39c2b9 100644 --- a/gnu/tests.scm +++ b/gnu/tests.scm @@ -87,8 +87,7 @@ (requirement `(udev ,@requirement)) (modules '((ice-9 match) - (srfi srfi-9 gnu) - (rnrs bytevectors))) + (srfi srfi-9 gnu))) (start (with-imported-modules imported-modules #~(lambda () @@ -98,8 +97,8 @@ ((_ pred rest ...) (or (pred x) (one-of rest ...)))))) - (one-of symbol? string? pair? null? vector? - bytevector? number? boolean?))) + (one-of symbol? string? keyword? pair? null? array? + number? boolean?))) (match (primitive-fork) (0 diff --git a/guix/build/ruby-build-system.scm b/guix/build/ruby-build-system.scm index 63c94765f7..c957a61115 100644 --- a/guix/build/ruby-build-system.scm +++ b/guix/build/ruby-build-system.scm @@ -128,7 +128,7 @@ is #f." (define* (install #:key inputs outputs (gem-flags '()) #:allow-other-keys) "Install the gem archive SOURCE to the output store item. Additional -GEM-FLAGS are passed to the 'gem' invokation, if present." +GEM-FLAGS are passed to the 'gem' invocation, if present." (let* ((ruby-version (match:substring (string-match "ruby-(.*)\\.[0-9]$" (assoc-ref inputs "ruby")) diff --git a/guix/channels.scm b/guix/channels.scm index ebb2cacbc7..4e6e7090ac 100644 --- a/guix/channels.scm +++ b/guix/channels.scm @@ -19,6 +19,7 @@ ;;; along with GNU Guix. If not, see . (define-module (guix channels) + #:use-module (git) #:use-module (guix git) #:use-module (guix records) #:use-module (guix gexp) @@ -29,6 +30,7 @@ #:use-module (guix derivations) #:use-module (guix combinators) #:use-module (guix diagnostics) + #:use-module (guix sets) #:use-module (guix store) #:use-module (guix i18n) #:use-module ((guix utils) @@ -38,6 +40,7 @@ #:use-module (srfi srfi-2) #:use-module (srfi srfi-9) #:use-module (srfi srfi-11) + #:use-module (srfi srfi-26) #:use-module (srfi srfi-34) #:use-module (srfi srfi-35) #:autoload (guix self) (whole-package make-config.scm) @@ -67,7 +70,15 @@ %channel-profile-hooks channel-instances->derivation - profile-channels)) + profile-channels + + channel-news-entry? + channel-news-entry-commit + channel-news-entry-tag + channel-news-entry-title + channel-news-entry-body + + channel-news-for-commit)) ;;; Commentary: ;;; @@ -110,10 +121,11 @@ (checkout channel-instance-checkout)) (define-record-type - (channel-metadata directory dependencies) + (channel-metadata directory dependencies news-file) channel-metadata? (directory channel-metadata-directory) ;string with leading slash - (dependencies channel-metadata-dependencies)) ;list of + (dependencies channel-metadata-dependencies) ;list of + (news-file channel-metadata-news-file)) ;string | #f (define (channel-reference channel) "Return the \"reference\" for CHANNEL, an sexp suitable for @@ -129,12 +141,13 @@ if valid metadata could not be read from PORT." (match (read port) (('channel ('version 0) properties ...) (let ((directory (and=> (assoc-ref properties 'directory) first)) - (dependencies (or (assoc-ref properties 'dependencies) '()))) + (dependencies (or (assoc-ref properties 'dependencies) '())) + (news-file (and=> (assoc-ref properties 'news-file) first))) (channel-metadata - (cond ((not directory) "/") + (cond ((not directory) "/") ;directory ((string-prefix? "/" directory) directory) (else (string-append "/" directory))) - (map (lambda (item) + (map (lambda (item) ;dependencies (let ((get (lambda* (key #:optional default) (or (and=> (assoc-ref item key) first) default)))) (and-let* ((name (get 'name)) @@ -145,7 +158,8 @@ if valid metadata could not be read from PORT." (branch branch) (url url) (commit (get 'commit)))))) - dependencies)))) + dependencies) + news-file))) ;news-file ((and ('channel ('version version) _ ...) sexp) (raise (condition (&message (message "unsupported '.guix-channel' version")) @@ -169,7 +183,7 @@ doesn't exist." read-channel-metadata)) (lambda args (if (= ENOENT (system-error-errno args)) - (channel-metadata "/" '()) + (channel-metadata "/" '() #f) (apply throw args))))) (define (channel-instance-metadata instance) @@ -560,3 +574,118 @@ PROFILE is not a profile created by 'guix pull', return the empty list." ;; Show most recently installed packages last. (reverse (manifest-entries (profile-manifest profile))))) + + +;;; +;;; News. +;;; + +;; Channel news. +(define-record-type + (channel-news entries) + channel-news? + (entries channel-news-entries)) ;list of + +;; News entry, associated with a specific commit of the channel. +(define-record-type + (channel-news-entry commit tag title body) + channel-news-entry? + (commit channel-news-entry-commit) ;hex string | #f + (tag channel-news-entry-tag) ;#f | string + (title channel-news-entry-title) ;list of language tag/string pairs + (body channel-news-entry-body)) ;list of language tag/string pairs + +(define (sexp->channel-news-entry entry) + "Return the record corresponding to ENTRY, an sexp." + (define (pair language message) + (cons (symbol->string language) message)) + + (match entry + (('entry ((and (or 'commit 'tag) type) commit-or-tag) + ('title ((? symbol? title-tags) (? string? titles)) ...) + ('body ((? symbol? body-tags) (? string? bodies)) ...) + _ ...) + (channel-news-entry (and (eq? type 'commit) commit-or-tag) + (and (eq? type 'tag) commit-or-tag) + (map pair title-tags titles) + (map pair body-tags bodies))) + (_ + (raise (condition + (&message (message "invalid channel news entry")) + (&error-location + (location (source-properties->location + (source-properties entry))))))))) + +(define (read-channel-news port) + "Read a channel news feed from PORT and return it as a +record." + (match (false-if-exception (read port)) + (('channel-news ('version 0) entries ...) + (channel-news (map sexp->channel-news-entry entries))) + (('channel-news ('version version) _ ...) + ;; This is an unsupported version from the future. There's nothing wrong + ;; with that (the user may simply need to upgrade the 'guix' channel to + ;; be able to read it), so silently ignore it. + (channel-news '())) + (#f + (raise (condition + (&message (message "syntactically invalid channel news file"))))) + (sexp + (raise (condition + (&message (message "invalid channel news file")) + (&error-location + (location (source-properties->location + (source-properties sexp))))))))) + +(define (resolve-channel-news-entry-tag repository entry) + "If ENTRY has its 'commit' field set, return ENTRY. Otherwise, lookup +ENTRY's 'tag' in REPOSITORY and return ENTRY with its 'commit' field set to +the field its 'tag' refers to. A 'git-error' exception is raised if the tag +cannot be found." + (if (channel-news-entry-commit entry) + entry + (let* ((tag (channel-news-entry-tag entry)) + (reference (string-append "refs/tags/" tag)) + (oid (reference-name->oid repository reference))) + (channel-news-entry (oid->string oid) tag + (channel-news-entry-title entry) + (channel-news-entry-body entry))))) + +(define* (channel-news-for-commit channel new #:optional old) + "Return a list of for CHANNEL between commits OLD and +NEW. When OLD is omitted or is #f, return all the news entries of CHANNEL." + (catch 'git-error + (lambda () + (let* ((checkout (update-cached-checkout (channel-url channel) + #:ref `(commit . ,new))) + (metadata (read-channel-metadata-from-source checkout)) + (news-file (channel-metadata-news-file metadata)) + (news-file (and news-file + (string-append checkout "/" news-file)))) + (if (and news-file (file-exists? news-file)) + (with-repository checkout repository + (let* ((news (call-with-input-file news-file + read-channel-news)) + (entries (map (lambda (entry) + (resolve-channel-news-entry-tag repository + entry)) + (channel-news-entries news)))) + (if old + (let* ((new (commit-lookup repository (string->oid new))) + (old (commit-lookup repository (string->oid old))) + (commits (list->set + (map (compose oid->string commit-id) + (commit-difference new old))))) + (filter (lambda (entry) + (set-contains? commits + (channel-news-entry-commit entry))) + entries)) + entries))) + '()))) + (lambda (key error . rest) + ;; If commit NEW or commit OLD cannot be found, then something must be + ;; wrong (for example, the history of CHANNEL was rewritten and these + ;; commits no longer exist upstream), so quietly return the empty list. + (if (= GIT_ENOTFOUND (git-error-code error)) + '() + (apply throw key error rest))))) diff --git a/guix/gexp.scm b/guix/gexp.scm index d9bdde2e42..44db75b7c2 100644 --- a/guix/gexp.scm +++ b/guix/gexp.scm @@ -994,6 +994,15 @@ references; otherwise, return only non-native references." (target (%current-target-system))) "Return (monadically) the sexp corresponding to EXP for the given OUTPUT, and in the current monad setting (system type, etc.)" + (define (self-quoting? x) + (letrec-syntax ((one-of (syntax-rules () + ((_) #f) + ((_ pred rest ...) + (or (pred x) + (one-of rest ...)))))) + (one-of symbol? string? keyword? pair? null? array? + number? boolean?))) + (define* (reference->sexp ref #:optional native?) (with-monad %store-monad (match ref @@ -1023,8 +1032,10 @@ and in the current monad setting (system type, etc.)" #:target target))) ;; OBJ must be either a derivation or a store file name. (return (expand thing obj output))))) - (($ x) + (($ (? self-quoting? x)) (return x)) + (($ x) + (raise (condition (&gexp-input-error (input x))))) (x (return x))))) @@ -1033,19 +1044,6 @@ and in the current monad setting (system type, etc.)" reference->sexp (gexp-references exp)))) (return (apply (gexp-proc exp) args)))) -(define (syntax-location-string s) - "Return a string representing the source code location of S." - (let ((props (syntax-source s))) - (if props - (let ((file (assoc-ref props 'filename)) - (line (and=> (assoc-ref props 'line) 1+)) - (column (assoc-ref props 'column))) - (if file - (simple-format #f "~a:~a:~a" - file line column) - (simple-format #f "~a:~a" line column))) - ""))) - (define-syntax-rule (define-syntax-parameter-once name proc) ;; Like 'define-syntax-parameter' but ensure the top-level binding for NAME ;; does not get redefined. This works around a race condition in a diff --git a/guix/git.scm b/guix/git.scm index de98fed40c..d7dddde3a7 100644 --- a/guix/git.scm +++ b/guix/git.scm @@ -28,6 +28,7 @@ #:use-module (guix utils) #:use-module (guix records) #:use-module (guix gexp) + #:use-module (guix sets) #:use-module (rnrs bytevectors) #:use-module (ice-9 match) #:use-module (srfi srfi-1) @@ -37,8 +38,10 @@ #:export (%repository-cache-directory honor-system-x509-certificates! + with-repository update-cached-checkout latest-repository-commit + commit-difference git-checkout git-checkout? @@ -220,6 +223,21 @@ dynamic extent of EXP." (G_ "Support for submodules is missing; \ please upgrade Guile-Git.~%")))) +(define (reference-available? repository ref) + "Return true if REF, a reference such as '(commit . \"cabba9e\"), is +definitely available in REPOSITORY, false otherwise." + (match ref + (('commit . commit) + (catch 'git-error + (lambda () + (->bool (commit-lookup repository (string->oid commit)))) + (lambda (key error . rest) + (if (= GIT_ENOTFOUND (git-error-code error)) + #f + (apply throw key error rest))))) + (_ + #f))) + (define* (update-cached-checkout url #:key (ref '(branch . "master")) @@ -254,7 +272,8 @@ When RECURSIVE? is true, check out submodules as well, if any." (repository-open cache-directory) (clone* url cache-directory)))) ;; Only fetch remote if it has not been cloned just before. - (when cache-exists? + (when (and cache-exists? + (not (reference-available? repository ref))) (remote-fetch (remote-lookup repository "origin"))) (when recursive? (update-submodules repository #:log-port log-port)) @@ -323,6 +342,43 @@ Log progress and checkout info to LOG-PORT." (set-exception-printer! 'git-error print-git-error) + +;;; +;;; Commit difference. +;;; + +(define (commit-closure commit) + "Return the closure of COMMIT as a set." + (let loop ((commits (list commit)) + (visited (setq))) + (match commits + (() + visited) + ((head . tail) + (if (set-contains? visited head) + (loop tail visited) + (loop (append (commit-parents head) tail) + (set-insert head visited))))))) + +(define (commit-difference new old) + "Return the list of commits between NEW and OLD, where OLD is assumed to be +an ancestor of NEW. + +Essentially, this computes the set difference between the closure of NEW and +that of OLD." + (let loop ((commits (list new)) + (result '()) + (visited (commit-closure old))) + (match commits + (() + (reverse result)) + ((head . tail) + (if (set-contains? visited head) + (loop tail result visited) + (loop (append (commit-parents head) tail) + (cons head result) + (set-insert head visited))))))) + ;;; ;;; Checkouts. diff --git a/guix/import/github.scm b/guix/import/github.scm index 55ea00a111..df5f6ff32f 100644 --- a/guix/import/github.scm +++ b/guix/import/github.scm @@ -3,6 +3,7 @@ ;;; Copyright © 2017, 2018, 2019 Ludovic Courtès ;;; Copyright © 2018 Eric Bavier ;;; Copyright © 2019 Arun Isaac +;;; Copyright © 2019 Efraim Flashner ;;; ;;; This file is part of GNU Guix. ;;; @@ -186,7 +187,12 @@ the package e.g. 'bedtools2'. Return #f if there is no releases" (substring tag 0 (+ name-length 1)))) (substring tag (+ name-length 1))) ;; some tags start with a "v" e.g. "v0.25.0" + ;; or with the word "version" e.g. "version.2.1" ;; where some are just the version number + ((string-prefix? "version" tag) + (if (char-set-contains? char-set:digit (string-ref tag 7)) + (substring tag 7) + (substring tag 8))) ((string-prefix? "v" tag) (substring tag 1)) ;; Finally, reject tags that don't start with a digit: diff --git a/guix/import/pypi.scm b/guix/import/pypi.scm index 9b3d80a02e..354cae9c4c 100644 --- a/guix/import/pypi.scm +++ b/guix/import/pypi.scm @@ -437,7 +437,8 @@ VERSION, SOURCE-URL, HOME-PAGE, SYNOPSIS, DESCRIPTION, and LICENSE." (define (pypi-url? url) (or (string-prefix? "https://pypi.org/" url) (string-prefix? "https://pypi.python.org/" url) - (string-prefix? "https://pypi.org/packages" url))) + (string-prefix? "https://pypi.org/packages" url) + (string-prefix? "https://files.pythonhosted.org/packages" url))) (let ((source-url (and=> (package-source package) origin-uri)) (fetch-method (and=> (package-source package) origin-method))) diff --git a/guix/import/stackage.scm b/guix/import/stackage.scm index 194bea633e..14150201b5 100644 --- a/guix/import/stackage.scm +++ b/guix/import/stackage.scm @@ -95,7 +95,7 @@ (lts-info-packages (stackage-lts-info-fetch lts-version)))) "Fetch Cabal file for PACKAGE-NAME from hackage.haskell.org. The retrieved -vesion corresponds to the version of PACKAGE-NAME specified in the LTS-VERSION +version corresponds to the version of PACKAGE-NAME specified in the LTS-VERSION release at stackage.org. Return the `package' S-expression corresponding to that package, or #f on failure. PACKAGES-INFO is the alist with the packages included in the Stackage LTS release." diff --git a/guix/inferior.scm b/guix/inferior.scm index fee97750b6..dcbc954432 100644 --- a/guix/inferior.scm +++ b/guix/inferior.scm @@ -19,6 +19,8 @@ (define-module (guix inferior) #:use-module (srfi srfi-9) #:use-module (srfi srfi-9 gnu) + #:use-module (srfi srfi-34) + #:use-module (srfi srfi-35) #:use-module ((guix utils) #:select (%current-system source-properties->location @@ -29,7 +31,8 @@ #:select (store-connection-socket store-connection-major-version store-connection-minor-version - store-lift)) + store-lift + &store-protocol-error)) #:use-module ((guix derivations) #:select (read-derivation-from-file)) #:use-module (guix gexp) @@ -151,6 +154,7 @@ inferior." (inferior-eval '(use-modules (guix)) result) (inferior-eval '(use-modules (gnu)) result) (inferior-eval '(use-modules (ice-9 match)) result) + (inferior-eval '(use-modules (srfi srfi-34)) result) (inferior-eval '(define %package-table (make-hash-table)) result) result)) @@ -386,7 +390,7 @@ inferior package." (cut inferior-package-input-field <> 'package-transitive-propagated-inputs)) (define (%inferior-package-search-paths package field) - "Return the list of search path specificiations of PACKAGE, an inferior + "Return the list of search path specifications of PACKAGE, an inferior package." (define paths (inferior-package-field package @@ -462,7 +466,13 @@ thus be the code of a one-argument procedure that accepts a store." (listen socket 1024) (send-inferior-request `(let ((proc ,code) - (socket (socket AF_UNIX SOCK_STREAM 0))) + (socket (socket AF_UNIX SOCK_STREAM 0)) + (error? (if (defined? 'store-protocol-error?) + store-protocol-error? + nix-protocol-error?)) + (error-message (if (defined? 'store-protocol-error-message) + store-protocol-error-message + nix-protocol-error-message))) (connect socket AF_UNIX ,name) ;; 'port->connection' appeared in June 2018 and we can hardly @@ -475,7 +485,13 @@ thus be the code of a one-argument procedure that accepts a store." (dynamic-wind (const #t) (lambda () - (proc store)) + ;; Serialize '&store-protocol-error' conditions. The + ;; exception serialization mechanism that + ;; 'read-repl-response' expects is unsuitable for SRFI-35 + ;; error conditions, hence this special case. + (guard (c ((error? c) + `(store-protocol-error ,(error-message c)))) + `(result ,(proc store)))) (lambda () (close-connection store) (close-port socket))))) @@ -484,7 +500,14 @@ thus be the code of a one-argument procedure that accepts a store." ((client . address) (proxy client (store-connection-socket store)))) (close-port socket) - (read-inferior-response inferior))))) + + (match (read-inferior-response inferior) + (('store-protocol-error message) + (raise (condition + (&store-protocol-error (message message) + (status 1))))) + (('result result) + result)))))) (define* (inferior-package-derivation store package #:optional diff --git a/guix/lint.scm b/guix/lint.scm index ba38bef806..03a8e88225 100644 --- a/guix/lint.scm +++ b/guix/lint.scm @@ -525,7 +525,7 @@ for connections to complete; when TIMEOUT is #f, wait as long as needed." (define (validate-uri uri package field) "Return #t if the given URI can be reached, otherwise return a warning for -PACKAGE mentionning the FIELD." +PACKAGE mentioning the FIELD." (let-values (((status argument) (probe-uri uri #:timeout 3))) ;wait at most 3 seconds (case status diff --git a/guix/repl.scm b/guix/repl.scm index 5cff5c71e9..1ead18c53b 100644 --- a/guix/repl.scm +++ b/guix/repl.scm @@ -17,7 +17,6 @@ ;;; along with GNU Guix. If not, see . (define-module (guix repl) - #:use-module (rnrs bytevectors) #:use-module (ice-9 match) #:export (send-repl-response machine-repl)) @@ -37,9 +36,8 @@ ((_ pred rest ...) (or (pred x) (one-of rest ...)))))) - (one-of symbol? string? pair? null? vector? - bytevector? number? boolean?))) - + (one-of symbol? string? keyword? pair? null? array? + number? boolean?))) (define (send-repl-response exp output) "Write the response corresponding to the evaluation of EXP to PORT, an diff --git a/guix/scripts/container/exec.scm b/guix/scripts/container/exec.scm index d598f5cac4..51b616b384 100644 --- a/guix/scripts/container/exec.scm +++ b/guix/scripts/container/exec.scm @@ -38,7 +38,7 @@ (define (show-help) (display (G_ "Usage: guix container exec PID COMMAND [ARGS...] -Execute COMMMAND within the container process PID.\n")) +Execute COMMAND within the container process PID.\n")) (newline) (display (G_ " -h, --help display this help and exit")) diff --git a/guix/scripts/deploy.scm b/guix/scripts/deploy.scm index cf571756fd..f311587ec3 100644 --- a/guix/scripts/deploy.scm +++ b/guix/scripts/deploy.scm @@ -26,6 +26,7 @@ #:use-module (guix ui) #:use-module (guix utils) #:use-module (guix grafts) + #:use-module (guix status) #:use-module (ice-9 format) #:use-module (srfi srfi-1) #:use-module (srfi srfi-34) @@ -52,6 +53,8 @@ Perform the deployment specified by FILE.\n")) (display (G_ " -V, --version display version information and exit")) (newline) + (display (G_ " + -v, --verbosity=LEVEL use the given verbosity LEVEL")) (show-bug-report-information)) (define %options @@ -63,6 +66,12 @@ Perform the deployment specified by FILE.\n")) (lambda (opt name arg result) (alist-cons 'system arg (alist-delete 'system result eq?)))) + (option '(#\v "verbosity") #t #f + (lambda (opt name arg result) + (let ((level (string->number* arg))) + (alist-cons 'verbosity level + (alist-delete 'verbosity result))))) + %standard-build-options)) (define %default-options @@ -87,25 +96,27 @@ Perform the deployment specified by FILE.\n")) (define (guix-deploy . args) (define (handle-argument arg result) (alist-cons 'file arg result)) + (let* ((opts (parse-command-line args %options (list %default-options) #:argument-handler handle-argument)) (file (assq-ref opts 'file)) (machines (or (and file (load-source-file file)) '()))) - (with-store store - (set-build-options-from-command-line store opts) - (for-each (lambda (machine) - (info (G_ "deploying to ~a...~%") - (machine-display-name machine)) - (parameterize ((%graft? (assq-ref opts 'graft?))) - (guard (c ((message-condition? c) - (report-error (G_ "failed to deploy ~a: ~a~%") - (machine-display-name machine) - (condition-message c))) - ((deploy-error? c) - (when (deploy-error-should-roll-back c) - (info (G_ "rolling back ~a...~%") - (machine-display-name machine)) - (run-with-store store (roll-back-machine machine))) - (apply throw (deploy-error-captured-args c)))) - (run-with-store store (deploy-machine machine))))) - machines)))) + (with-status-verbosity (assoc-ref opts 'verbosity) + (with-store store + (set-build-options-from-command-line store opts) + (for-each (lambda (machine) + (info (G_ "deploying to ~a...~%") + (machine-display-name machine)) + (parameterize ((%graft? (assq-ref opts 'graft?))) + (guard (c ((message-condition? c) + (report-error (G_ "failed to deploy ~a: ~a~%") + (machine-display-name machine) + (condition-message c))) + ((deploy-error? c) + (when (deploy-error-should-roll-back c) + (info (G_ "rolling back ~a...~%") + (machine-display-name machine)) + (run-with-store store (roll-back-machine machine))) + (apply throw (deploy-error-captured-args c)))) + (run-with-store store (deploy-machine machine))))) + machines))))) diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm index a43c96516f..f03741aa9e 100644 --- a/guix/scripts/package.scm +++ b/guix/scripts/package.scm @@ -607,7 +607,11 @@ and upgrades." (let-values (((package output) (specification->package+output spec))) (package->manifest-entry* package output)))) - (_ #f)) + (('install . obj) + (leave (G_ "cannot install non-package object: ~s~%") + obj)) + (_ + #f)) opts)) (fold manifest-transaction-install-entry @@ -760,7 +764,8 @@ processed, #f otherwise." (('show requested-name) (let-values (((name version) (package-name->name+version requested-name))) - (match (find-packages-by-name name version) + (match (remove package-superseded + (find-packages-by-name name version)) (() (leave (G_ "~a~@[@~a~]: package not found~%") name version)) (packages diff --git a/guix/scripts/pull.scm b/guix/scripts/pull.scm index 54bbaddf30..2b7b991b50 100644 --- a/guix/scripts/pull.scm +++ b/guix/scripts/pull.scm @@ -19,6 +19,7 @@ (define-module (guix scripts pull) #:use-module (guix ui) + #:use-module (guix colors) #:use-module (guix utils) #:use-module ((guix status) #:select (with-status-verbosity)) #:use-module (guix scripts) @@ -38,7 +39,8 @@ #:use-module (guix git) #:use-module (git) #:use-module (gnu packages) - #:use-module ((guix scripts package) #:select (build-and-use-profile)) + #:use-module ((guix scripts package) #:select (build-and-use-profile + delete-matching-generations)) #:use-module ((gnu packages base) #:select (canonical-package)) #:use-module (gnu packages guile) #:use-module ((gnu packages bootstrap) @@ -91,6 +93,14 @@ Download and deploy the latest version of Guix.\n")) (display (G_ " -l, --list-generations[=PATTERN] list generations matching PATTERN")) + (display (G_ " + --roll-back roll back to the previous generation")) + (display (G_ " + -d, --delete-generations[=PATTERN] + delete generations matching PATTERN")) + (display (G_ " + -S, --switch-generation=PATTERN + switch to a generation matching PATTERN")) (display (G_ " -p, --profile=PROFILE use PROFILE instead of ~/.config/guix/current")) (display (G_ " @@ -120,6 +130,18 @@ Download and deploy the latest version of Guix.\n")) (lambda (opt name arg result) (cons `(query list-generations ,arg) result))) + (option '("roll-back") #f #f + (lambda (opt name arg result) + (cons '(generation roll-back) + result))) + (option '(#\S "switch-generation") #t #f + (lambda (opt name arg result) + (cons `(generation switch ,arg) + result))) + (option '(#\d "delete-generations") #f #t + (lambda (opt name arg result) + (cons `(generation delete ,arg) + result))) (option '(#\N "news") #f #f (lambda (opt name arg result) (cons '(query display-news) result))) @@ -167,7 +189,7 @@ Download and deploy the latest version of Guix.\n")) current-is-newer?) "Display what's up in PROFILE--new packages, and all that. If CURRENT-IS-NEWER? is true, assume that the current process represents the -newest generation of PROFILE." +newest generation of PROFILE. Return true when there's more info to display." (match (memv (generation-number profile) (reverse (profile-generations profile))) ((current previous _ ...) @@ -190,7 +212,162 @@ newest generation of PROFILE." #:concise? concise? #:heading (G_ "New in this revision:\n"))))) - (_ #t))) + (_ #f))) + +(define (display-channel channel) + "Display information about CHANNEL." + (format (current-error-port) + ;; TRANSLATORS: This describes a "channel"; the first placeholder is + ;; the channel name (e.g., "guix") and the second placeholder is its + ;; URL. + (G_ " ~a at ~a~%") + (channel-name channel) + (channel-url channel))) + +(define (channel=? channel1 channel2) + "Return true if CHANNEL1 and CHANNEL2 are the same for all practical +purposes." + ;; Assume that the URL matters less than the name. + (eq? (channel-name channel1) (channel-name channel2))) + +(define (display-news-entry-title entry language port) + "Display the title of ENTRY, a news entry, to PORT." + (define title + (channel-news-entry-title entry)) + + (format port " ~a~%" + (highlight + (string-trim-right + (texi->plain-text (or (assoc-ref title language) + (assoc-ref title (%default-message-language)) + "")))))) + +(define (display-news-entry entry language port) + "Display ENTRY, a , in LANGUAGE, a language code, to +PORT." + (define body + (channel-news-entry-body entry)) + + (display-news-entry-title entry language port) + (format port (G_ " commit ~a~%") + (channel-news-entry-commit entry)) + (newline port) + (format port " ~a~%" + (indented-string + (parameterize ((%text-width (- (%text-width) 4))) + (string-trim-right + (texi->plain-text (or (assoc-ref body language) + (assoc-ref body (%default-message-language)) + "")))) + 4))) + +(define* (display-channel-specific-news new old + #:key (port (current-output-port)) + concise?) + "Display channel news applicable the commits between OLD and NEW, where OLD +and NEW are records with a proper 'commit' field. When CONCISE? is +true, display nothing but the news titles. Return true if there are more news +to display." + (let ((channel new) + (old (channel-commit old)) + (new (channel-commit new))) + (when (and old new) + (let ((language (current-message-language))) + (match (channel-news-for-commit channel new old) + (() ;no news is good news + #f) + ((entries ...) + (newline port) + (format port (G_ "News for channel '~a'~%") + (channel-name channel)) + (for-each (if concise? + (cut display-news-entry-title <> language port) + (cut display-news-entry <> language port)) + entries) + (newline port) + #t)))))) + +(define* (display-channel-news profile + #:optional + (previous + (and=> (relative-generation profile -1) + (cut generation-file-name profile <>)))) + "Display news about the channels of PROFILE compared to PREVIOUS." + (when previous + (let ((old-channels (profile-channels previous)) + (new-channels (profile-channels profile))) + (and (pair? old-channels) (pair? new-channels) + (begin + (match (lset-difference channel=? new-channels old-channels) + (() + #t) + (new + (let ((count (length new))) + (format (current-error-port) + (N_ " ~*One new channel:~%" + " ~a new channels:~%" count) + count) + (for-each display-channel new)))) + (match (lset-difference channel=? old-channels new-channels) + (() + #t) + (removed + (let ((count (length removed))) + (format (current-error-port) + (N_ " ~*One channel removed:~%" + " ~a channels removed:~%" count) + count) + (for-each display-channel removed)))) + + ;; Display channel-specific news for those channels that were + ;; here before and are still around afterwards. + (for-each (match-lambda + ((new old) + (display-channel-specific-news new old))) + (filter-map (lambda (new) + (define old + (find (cut channel=? new <>) + old-channels)) + + (and old (list new old))) + new-channels))))))) + +(define* (display-channel-news-headlines profile) + "Display the titles of news about the channels of PROFILE compared to its +previous generation. Return true if there are news to display." + (define previous + (and=> (relative-generation profile -1) + (cut generation-file-name profile <>))) + + (when previous + (let ((old-channels (profile-channels previous)) + (new-channels (profile-channels profile))) + ;; Find the channels present in both PROFILE and PREVIOUS, and print + ;; their news. + (and (pair? old-channels) (pair? new-channels) + (let ((channels (filter-map (lambda (new) + (define old + (find (cut channel=? new <>) + old-channels)) + + (and old (list new old))) + new-channels))) + (define more? + (map (match-lambda + ((new old) + (display-channel-specific-news new old + #:concise? #t))) + channels)) + + (any ->bool more?)))))) + +(define (display-news profile) + ;; Display profile news, with the understanding that this process represents + ;; the newest generation. + (display-profile-news profile + #:current-is-newer? #t) + + (display-channel-news profile)) (define* (build-and-install instances profile #:key use-substitutes? verbose? dry-run?) @@ -211,7 +388,12 @@ true, display what would be built without actually building it." #:dry-run? dry-run?) (munless dry-run? (return (newline)) - (return (display-profile-news profile #:concise? #t)) + (return + (let ((more? (list (display-profile-news profile #:concise? #t) + (display-channel-news-headlines profile)))) + (when (any ->bool more?) + (display-hint + (G_ "Run @command{guix pull --news} to read all the news."))))) (if guix-command (let ((new (map (cut string-append <> "/bin/guix") (list (user-friendly-profile profile) @@ -293,8 +475,15 @@ true, display what would be built without actually building it." ;; In 0.15.0+ we'd create ~/.config/guix/current-[0-9]*-link symlinks. Move ;; them to %PROFILE-DIRECTORY. - (unless (string=? %profile-directory - (dirname (canonicalize-profile %user-profile-directory))) + ;; + ;; XXX: Ubuntu's 'sudo' preserves $HOME by default, and thus the second + ;; condition below is always false when one runs "sudo guix pull". As a + ;; workaround, skip this code when $SUDO_USER is set. See + ;; . + (unless (or (getenv "SUDO_USER") + (string=? %profile-directory + (dirname + (canonicalize-profile %user-profile-directory)))) (migrate-generations %user-profile-directory %profile-directory)) ;; Make sure ~/.config/guix/current points to /var/guix/profiles/…. @@ -404,7 +593,9 @@ it." "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. When CONCISE? is true, do not -display long package lists that would fill the user's screen." +display long package lists that would fill the user's screen. + +Return true when there is more package info to display." (define (pretty str column) (indented-string (fill-paragraph str (- (%text-width) 4) column) @@ -447,11 +638,9 @@ display long package lists that would fill the user's screen." (pretty (list->enumeration (sort upgraded string new-count concise/max-item-count) - (> upgraded-count concise/max-item-count))) - (display-hint (G_ "Run @command{guix pull --news} to view the complete -list of package changes."))))) + (and concise? + (or (> new-count concise/max-item-count) + (> upgraded-count concise/max-item-count))))) (define (display-profile-content-diff profile gen1 gen2) "Display the changes in PROFILE GEN2 compared to generation GEN1." @@ -475,6 +664,8 @@ list of package changes."))))) ((first second rest ...) (display-profile-content-diff profile first second) + (display-channel-news (generation-file-name profile second) + (generation-file-name profile first)) (loop (cons second rest))) ((_) #t) (() #t)))))) @@ -493,10 +684,23 @@ list of package changes."))))) ((numbers ...) (list-generations profile numbers))))))) (('display-news) - ;; Display profile news, with the understanding that this process - ;; represents the newest generation. - (display-profile-news profile - #:current-is-newer? #t)))) + (display-news profile)))) + +(define (process-generation-change opts profile) + "Process a request to change the current generation (roll-back, switch, delete)." + (unless (assoc-ref opts 'dry-run?) + (match (assoc-ref opts 'generation) + (('roll-back) + (with-store store + (roll-back* store profile))) + (('switch pattern) + (let ((number (relative-generation-spec->number profile pattern))) + (if number + (switch-to-generation* profile number) + (leave (G_ "cannot switch to generation '~a'~%") pattern)))) + (('delete pattern) + (with-store store + (delete-matching-generations store profile pattern)))))) (define (channel-list opts) "Return the list of channels to use. If OPTS specify a channel file, @@ -560,18 +764,18 @@ Use '~/.config/guix/channels.scm' instead.")) (with-git-error-handling (let* ((opts (parse-command-line args %options (list %default-options))) - (cache (string-append (cache-directory) "/pull")) (channels (channel-list opts)) (profile (or (assoc-ref opts 'profile) %current-profile))) (cond ((assoc-ref opts 'query) (process-query opts profile)) + ((assoc-ref opts 'generation) + (process-generation-change opts profile)) (else (with-store store (ensure-default-profile) (with-status-verbosity (assoc-ref opts 'verbosity) (parameterize ((%current-system (assoc-ref opts 'system)) - (%graft? (assoc-ref opts 'graft?)) - (%repository-cache-directory cache)) + (%graft? (assoc-ref opts 'graft?))) (set-build-options-from-command-line store opts) (honor-x509-certificates store) diff --git a/guix/scripts/search.scm b/guix/scripts/search.scm index 8fceb83668..827b2eb7a9 100644 --- a/guix/scripts/search.scm +++ b/guix/scripts/search.scm @@ -19,6 +19,8 @@ (define-module (guix scripts search) #:use-module (guix ui) #:use-module (guix scripts package) + #:use-module ((guix scripts build) + #:select (%standard-build-options)) #:use-module (guix scripts) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) @@ -36,6 +38,9 @@ This is an alias for 'guix package -s'.\n")) (display (G_ " -V, --version display version information and exit")) (newline) + (display (G_ " + -L, --load-path=DIR prepend DIR to the package module search path")) + (newline) (show-bug-report-information)) (define %options @@ -46,7 +51,11 @@ This is an alias for 'guix package -s'.\n")) (exit 0))) (option '(#\V "version") #f #f (lambda args - (show-version-and-exit "guix search"))))) + (show-version-and-exit "guix search"))) + + (find (lambda (option) + (member "load-path" (option-names option))) + %standard-build-options))) (define (guix-search . args) (define (handle-argument arg result) diff --git a/guix/scripts/show.scm b/guix/scripts/show.scm new file mode 100644 index 0000000000..ef64b5755b --- /dev/null +++ b/guix/scripts/show.scm @@ -0,0 +1,76 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2019 Simon Tournier +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see . + +(define-module (guix scripts show) + #:use-module (guix ui) + #:use-module (guix scripts package) + #:use-module ((guix scripts build) + #:select (%standard-build-options)) + #:use-module (guix scripts) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26) + #:use-module (srfi srfi-37) + #:export (guix-show)) + +(define (show-help) + (display (G_ "Usage: guix show [OPTION] PACKAGE... +Show details about PACKAGE.")) + (display (G_" +This is an alias for 'guix package --show='.\n")) + (newline) + (display (G_ " + -h, --help display this help and exit")) + (display (G_ " + -V, --version display version information and exit")) + (newline) + (display (G_ " + -L, --load-path=DIR prepend DIR to the package module search path")) + (newline) + (show-bug-report-information)) + +(define %options + ;; Specification of the command-line 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 show"))) + + (find (lambda (option) + (member "load-path" (option-names option))) + %standard-build-options))) + +(define (guix-show . args) + (define (handle-argument arg result) + ;; Treat all non-option arguments as regexps. + (cons `(query show ,arg) + result)) + + (define opts + (args-fold* args %options + (lambda (opt name arg . rest) + (leave (G_ "~A: unrecognized option~%") name)) + handle-argument + '())) + + (unless (assoc-ref opts 'query) + (leave (G_ "missing arguments: no package to show~%"))) + + (guix-package* opts)) diff --git a/guix/tests/git.scm b/guix/tests/git.scm new file mode 100644 index 0000000000..21573ac14e --- /dev/null +++ b/guix/tests/git.scm @@ -0,0 +1,105 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2019 Ludovic Courtès +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see . + +(define-module (guix tests git) + #:use-module (git) + #:use-module ((guix git) #:select (with-repository)) + #:use-module (guix utils) + #:use-module (guix build utils) + #:use-module (ice-9 match) + #:use-module (ice-9 control) + #:export (git-command + with-temporary-git-repository + find-commit)) + +(define git-command + (make-parameter "git")) + +(define (populate-git-repository directory directives) + "Initialize a new Git checkout and repository in DIRECTORY and apply +DIRECTIVES. Each element of DIRECTIVES is an sexp like: + + (add \"foo.txt\" \"hi!\") + +Return DIRECTORY on success." + + ;; Note: As of version 0.2.0, Guile-Git lacks the necessary bindings to do + ;; all this, so resort to the "git" command. + (define (git command . args) + (apply invoke (git-command) "-C" directory + command args)) + + (mkdir-p directory) + (git "init") + + (let loop ((directives directives)) + (match directives + (() + directory) + ((('add file contents) rest ...) + (let ((file (string-append directory "/" file))) + (mkdir-p (dirname file)) + (call-with-output-file file + (lambda (port) + (display (if (string? contents) + contents + (with-repository directory repository + (contents repository))) + port))) + (git "add" file) + (loop rest))) + ((('commit text) rest ...) + (git "commit" "-m" text) + (loop rest)) + ((('tag name) rest ...) + (git "tag" name) + (loop rest)) + ((('branch name) rest ...) + (git "branch" name) + (loop rest)) + ((('checkout branch) rest ...) + (git "checkout" branch) + (loop rest)) + ((('merge branch message) rest ...) + (git "merge" branch "-m" message) + (loop rest))))) + +(define (call-with-temporary-git-repository directives proc) + (call-with-temporary-directory + (lambda (directory) + (populate-git-repository directory directives) + (proc directory)))) + +(define-syntax-rule (with-temporary-git-repository directory + directives exp ...) + "Evaluate EXP in a context where DIRECTORY contains a checkout populated as +per DIRECTIVES." + (call-with-temporary-git-repository directives + (lambda (directory) + exp ...))) + +(define (find-commit repository message) + "Return the commit in REPOSITORY whose message includes MESSAGE, a string." + (let/ec return + (fold-commits (lambda (commit _) + (and (string-contains (commit-message commit) + message) + (return commit))) + #f + repository) + (error "commit not found" message))) diff --git a/guix/ui.scm b/guix/ui.scm index 7920335928..069d542131 100644 --- a/guix/ui.scm +++ b/guix/ui.scm @@ -13,6 +13,7 @@ ;;; Copyright © 2018 Ricardo Wurmus ;;; Copyright © 2019 Chris Marusich ;;; Copyright © 2019 Tobias Geerinckx-Rice +;;; Copyright © 2019 Simon Tournier ;;; ;;; This file is part of GNU Guix. ;;; @@ -120,6 +121,10 @@ roll-back* switch-to-generation* delete-generation* + + %default-message-language + current-message-language + run-guix-command run-guix guix-main)) @@ -427,6 +432,20 @@ exiting. ARGS is the list of arguments received by the 'throw' handler." report them in a user-friendly way." (call-with-unbound-variable-handling (lambda () exp ...))) +(define %default-message-language + ;; Default language to use for messages. + (make-parameter "en")) + +(define (current-message-language) + "Return the language used for messages according to the current locale. +Return %DEFAULT-MESSAGE-LANGUAGE if that information could not be obtained. The +result is an ISO-639-2 language code such as \"ar\", without the territory +part." + (let ((locale (setlocale LC_MESSAGES))) + (match (string-index locale #\_) + (#f locale) + (index (string-take locale index))))) + (define (install-locale) "Install the current locale settings." (catch 'system-error @@ -1281,33 +1300,32 @@ weight of this field in the final score. A score of zero means that OBJ does not match any of REGEXPS. The higher the score, the more relevant OBJ is to REGEXPS." - (define (score str) - (define scores - (map (lambda (regexp) - (fold-matches regexp str 0 - (lambda (m score) - (+ score - (if (string=? (match:substring m) str) - 5 ;exact match - 1))))) - regexps)) + (define (score regexp str) + (fold-matches regexp str 0 + (lambda (m score) + (+ score + (if (string=? (match:substring m) str) + 5 ;exact match + 1))))) + (define (regexp->score regexp) + (let ((score-regexp (lambda (str) (score regexp str)))) + (fold (lambda (metric relevance) + (match metric + ((field . weight) + (match (field obj) + (#f relevance) + ((? string? str) + (+ relevance (* (score-regexp str) weight))) + ((lst ...) + (+ relevance (* weight (apply + (map score-regexp lst))))))))) + 0 metrics))) + + (let ((scores (map regexp->score regexps))) ;; Return zero if one of REGEXPS doesn't match. (if (any zero? scores) 0 - (reduce + 0 scores))) - - (fold (lambda (metric relevance) - (match metric - ((field . weight) - (match (field obj) - (#f relevance) - ((? string? str) - (+ relevance (* (score str) weight))) - ((lst ...) - (+ relevance (* weight (apply + (map score lst))))))))) - 0 - metrics)) + (reduce + 0 scores)))) (define %package-metrics ;; Metrics used to compute the "relevance score" of a package against a set diff --git a/po/doc/local.mk b/po/doc/local.mk index fb3c5aee03..f1a52615c1 100644 --- a/po/doc/local.mk +++ b/po/doc/local.mk @@ -23,9 +23,13 @@ DOC_PO_FILES= \ %D%/guix-manual.ru.po \ %D%/guix-manual.zh_CN.po +DOC_COOKBOOK_PO_FILES= + EXTRA_DIST = \ %D%/guix-manual.pot \ - $(DOC_PO_FILES) + %D%/guix-cookbook.pot \ + $(DOC_PO_FILES) \ + $(DOC_COOKBOOK_PO_FILES) POT_OPTIONS = --package-name "guix" --package-version "$(VERSION)" \ --copyright-holder "Ludovic Courtès" \ @@ -52,6 +56,27 @@ doc-po-update-%: exit 1; \ fi +doc-po-update-cookbook-%: + @lang=`echo "$@" | sed -e's/^doc-po-update-//'` ; \ + output="$(srcdir)/po/doc/guix-cookbook.$$lang.po" ; \ + input="$(srcdir)/po/doc/guix-cookbook.pot" ; \ + if test -f "$$output"; then \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $$output $$input"; \ + cd $(srcdir) \ + && { case `$(MSGMERGE_UPDATE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ + $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) "$$output" "$$input";; \ + *) \ + $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} "$$output" "$$input";; \ + esac; \ + }; \ + touch "$$output"; \ + else \ + echo "File $$output does not exist. If you are a translator, you can create it with 'msginit'." 1>&2; \ + exit 1; \ + fi + $(srcdir)/po/doc/%.pot-update: doc/%.texi $(AM_V_PO4A)$(PO4A_UPDATEPO) -M UTF-8 -f texinfo -m "$<" \ -p "$$(echo $@ | sed 's|-update||')" $(POT_OPTIONS) @@ -64,6 +89,7 @@ doc-pot-update: $(MAKE) $(srcdir)/po/doc/guix.pot-update; \ $(MAKE) $(srcdir)/po/doc/contributing.pot-update; \ done + $(MAKE) $(srcdir)/po/doc/guix-cookbook.pot-update; msgcat $(addprefix $(srcdir)/po/doc/, $(TMP_POT_FILES)) > $(srcdir)/po/doc/guix-manual.pot rm -f $(addprefix $(srcdir)/po/doc/, $(TMP_POT_FILES)) @@ -72,5 +98,10 @@ doc-po-update: doc-pot-update lang="`echo "$$f" | $(SED) -es'|.*/guix-manual\.\(.*\)\.po$$|\1|g'`"; \ $(MAKE) "doc-po-update-$$lang"; \ done + for f in $(DOC_COOKBOOK_PO_FILES); do \ + lang="`echo "$$f" | $(SED) -es'|.*/guix-cookbook\.\(.*\)\.po$$|\1|g'`"; \ + $(MAKE) "doc-po-update-cookbook-$$lang"; \ + done + .PHONY: doc-po-update doc-pot-update diff --git a/po/guix/POTFILES.in b/po/guix/POTFILES.in index 3e923af2b2..9c492997cf 100644 --- a/po/guix/POTFILES.in +++ b/po/guix/POTFILES.in @@ -49,6 +49,7 @@ guix/scripts/install.scm guix/scripts/remove.scm guix/scripts/upgrade.scm guix/scripts/search.scm +guix/scripts/show.scm guix/scripts/gc.scm guix/scripts/hash.scm guix/scripts/import.scm diff --git a/tests/channels.scm b/tests/channels.scm index e83b5437d3..f5a7955483 100644 --- a/tests/channels.scm +++ b/tests/channels.scm @@ -28,6 +28,10 @@ #:use-module (guix gexp) #:use-module ((guix utils) #:select (error-location? error-location location-line)) + #:use-module ((guix build utils) #:select (which)) + #:use-module (git) + #:use-module (guix git) + #:use-module (guix tests git) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) #:use-module (srfi srfi-34) @@ -246,4 +250,104 @@ (depends? drv3 (list drv2 drv0) (list)))))))) +(unless (which (git-command)) (test-skip 1)) +(test-equal "channel-news, no news" + '() + (with-temporary-git-repository directory + '((add "a.txt" "A") + (commit "the commit")) + (with-repository directory repository + (let ((channel (channel (url (string-append "file://" directory)) + (name 'foo))) + (latest (reference-name->oid repository "HEAD"))) + (channel-news-for-commit channel (oid->string latest)))))) + +(unless (which (git-command)) (test-skip 1)) +(test-assert "channel-news, one entry" + (with-temporary-git-repository directory + `((add ".guix-channel" + ,(object->string + '(channel (version 0) + (news-file "news.scm")))) + (commit "first commit") + (add "src/a.txt" "A") + (commit "second commit") + (tag "tag-for-first-news-entry") + (add "news.scm" + ,(lambda (repository) + (let ((previous + (reference-name->oid repository "HEAD"))) + (object->string + `(channel-news + (version 0) + (entry (commit ,(oid->string previous)) + (title (en "New file!") + (eo "Nova dosiero!")) + (body (en "Yeah, a.txt.")))))))) + (commit "third commit") + (add "src/b.txt" "B") + (commit "fourth commit") + (add "news.scm" + ,(lambda (repository) + (let ((second + (commit-id + (find-commit repository "second commit"))) + (previous + (reference-name->oid repository "HEAD"))) + (object->string + `(channel-news + (version 0) + (entry (commit ,(oid->string previous)) + (title (en "Another file!")) + (body (en "Yeah, b.txt."))) + (entry (tag "tag-for-first-news-entry") + (title (en "Old news.") + (eo "Malnovaĵoj.")) + (body (en "For a.txt")))))))) + (commit "fifth commit")) + (with-repository directory repository + (define (find-commit* message) + (oid->string (commit-id (find-commit repository message)))) + + (let ((channel (channel (url (string-append "file://" directory)) + (name 'foo))) + (commit1 (find-commit* "first commit")) + (commit2 (find-commit* "second commit")) + (commit3 (find-commit* "third commit")) + (commit4 (find-commit* "fourth commit")) + (commit5 (find-commit* "fifth commit"))) + ;; First try fetching all the news up to a given commit. + (and (null? (channel-news-for-commit channel commit2)) + (lset= string=? + (map channel-news-entry-commit + (channel-news-for-commit channel commit5)) + (list commit2 commit4)) + (lset= equal? + (map channel-news-entry-title + (channel-news-for-commit channel commit5)) + '((("en" . "Another file!")) + (("en" . "Old news.") ("eo" . "Malnovaĵoj.")))) + (lset= string=? + (map channel-news-entry-commit + (channel-news-for-commit channel commit3)) + (list commit2)) + + ;; Now fetch news entries that apply to a commit range. + (lset= string=? + (map channel-news-entry-commit + (channel-news-for-commit channel commit3 commit1)) + (list commit2)) + (lset= string=? + (map channel-news-entry-commit + (channel-news-for-commit channel commit5 commit3)) + (list commit4)) + (lset= string=? + (map channel-news-entry-commit + (channel-news-for-commit channel commit5 commit1)) + (list commit4 commit2)) + (lset= equal? + (map channel-news-entry-tag + (channel-news-for-commit channel commit5 commit1)) + '(#f "tag-for-first-news-entry"))))))) + (test-end "channels") diff --git a/tests/containers.scm b/tests/containers.scm index c6c738f234..01fbcbb45a 100644 --- a/tests/containers.scm +++ b/tests/containers.scm @@ -269,4 +269,31 @@ (lset= string=? (cons* "." ".." (map basename reqs)) (pk (call-with-input-file result read)))))))))) +(test-assert "eval/container, non-empty load path" + (call-with-temporary-directory + (lambda (directory) + (define store + (open-connection-for-tests)) + (define result + (string-append directory "/r")) + (define requisites* + (store-lift requisites)) + + (mkdir result) + (run-with-store store + (mlet %store-monad ((status (eval/container + (with-imported-modules '((guix build utils)) + #~(begin + (use-modules (guix build utils)) + (mkdir-p "/result/a/b/c"))) + #:mappings + (list (file-system-mapping + (source result) + (target "/result") + (writable? #t)))))) + (close-connection store) + (return (and (zero? status) + (file-is-directory? + (string-append result "/a/b/c"))))))))) + (test-end) diff --git a/tests/gexp.scm b/tests/gexp.scm index 5c013d838d..50d0948659 100644 --- a/tests/gexp.scm +++ b/tests/gexp.scm @@ -871,6 +871,13 @@ (eq? (derivation-input-derivation (lowered-gexp-guile lexp)) (%guile-for-build))))))) +(test-eq "lower-gexp, non-self-quoting input" + + + (guard (c ((gexp-input-error? c) + (gexp-error-invalid-input c))) + (run-with-store %store + (lower-gexp #~(foo #$+))))) + (test-assertm "gexp->derivation #:references-graphs" (mlet* %store-monad ((one (text-file "one" (random-text))) diff --git a/tests/git.scm b/tests/git.scm new file mode 100644 index 0000000000..8ba10ece51 --- /dev/null +++ b/tests/git.scm @@ -0,0 +1,99 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2019 Ludovic Courtès +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see . + +(define-module (test-git) + #:use-module (git) + #:use-module (guix git) + #:use-module (guix tests git) + #:use-module (guix build utils) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-64)) + +;; Test the (guix git) tools. + +(test-begin "git") + +;; 'with-temporary-git-repository' relies on the 'git' command. +(unless (which (git-command)) (test-skip 1)) +(test-assert "commit-difference, linear history" + (with-temporary-git-repository directory + '((add "a.txt" "A") + (commit "first commit") + (add "b.txt" "B") + (commit "second commit") + (add "c.txt" "C") + (commit "third commit") + (add "d.txt" "D") + (commit "fourth commit")) + (with-repository directory repository + (let ((commit1 (find-commit repository "first")) + (commit2 (find-commit repository "second")) + (commit3 (find-commit repository "third")) + (commit4 (find-commit repository "fourth"))) + (and (lset= eq? (commit-difference commit4 commit1) + (list commit2 commit3 commit4)) + (lset= eq? (commit-difference commit4 commit2) + (list commit3 commit4)) + (equal? (commit-difference commit3 commit2) + (list commit3)) + + ;; COMMIT4 is not an ancestor of COMMIT1 so we should get the + ;; empty list. + (null? (commit-difference commit1 commit4))))))) + +(unless (which (git-command)) (test-skip 1)) +(test-assert "commit-difference, fork" + (with-temporary-git-repository directory + '((add "a.txt" "A") + (commit "first commit") + (branch "devel") + (checkout "devel") + (add "devel/1.txt" "1") + (commit "first devel commit") + (add "devel/2.txt" "2") + (commit "second devel commit") + (checkout "master") + (add "b.txt" "B") + (commit "second commit") + (add "c.txt" "C") + (commit "third commit") + (merge "devel" "merge") + (add "d.txt" "D") + (commit "fourth commit")) + (with-repository directory repository + (let ((master1 (find-commit repository "first commit")) + (master2 (find-commit repository "second commit")) + (master3 (find-commit repository "third commit")) + (master4 (find-commit repository "fourth commit")) + (devel1 (find-commit repository "first devel")) + (devel2 (find-commit repository "second devel")) + (merge (find-commit repository "merge"))) + (and (equal? (commit-difference master4 merge) + (list master4)) + (lset= eq? (commit-difference master3 master1) + (list master3 master2)) + (lset= eq? (commit-difference devel2 master1) + (list devel2 devel1)) + + ;; The merge occurred between MASTER2 and MASTER4 so here we + ;; expect to see all the commits from the "devel" branch in + ;; addition to those on "master". + (lset= eq? (commit-difference master4 master2) + (list master4 merge master3 devel1 devel2))))))) + +(test-end "git") diff --git a/tests/guix-package-aliases.sh b/tests/guix-package-aliases.sh index 5c68664093..4beed2e5b7 100644 --- a/tests/guix-package-aliases.sh +++ b/tests/guix-package-aliases.sh @@ -58,3 +58,10 @@ if guix remove -i guile-bootstrap -p "$profile" --bootstrap then false; else true; fi guix search '\' game | grep '^name: gnubg' + +guix show --version +guix show guile +guix show python@3 | grep "^name: python" + +# "python@2" exists but is deprecated; make sure it doesn't show up. +if guix show python@2; then false; else true; fi diff --git a/tests/guix-package.sh b/tests/guix-package.sh index 79d6ec65e4..79e89286f1 100644 --- a/tests/guix-package.sh +++ b/tests/guix-package.sh @@ -331,6 +331,17 @@ cat > "$module_dir/package.scm"< "$module_dir/package.scm"<package "guile-gcrypt")) (go (specification->package "go")) (gnugo (specification->package "gnugo")) + (libb2 (specification->package "libb2")) (rx (cut make-regexp <> regexp/icase)) (>0 (cut > <> 0)) (=0 zero?)) @@ -283,6 +284,8 @@ Second line" 24)) (=0 (package-relevance go (map rx '("go" "game")))) (>0 (package-relevance gnugo - (map rx '("go" "game"))))))) + (map rx '("go" "game")))) + (>0 (package-relevance libb2 + (map rx '("crypto" "library"))))))) (test-end "ui")