diff --git a/.dir-locals.el b/.dir-locals.el index 0873c1d747..572a35f828 100644 --- a/.dir-locals.el +++ b/.dir-locals.el @@ -41,6 +41,8 @@ (eval . (put 'with-atomic-file-output 'scheme-indent-function 1)) (eval . (put 'call-with-compressed-output-port 'scheme-indent-function 2)) (eval . (put 'call-with-decompressed-port 'scheme-indent-function 2)) + (eval . (put 'call-with-gzip-input-port 'scheme-indent-function 1)) + (eval . (put 'call-with-gzip-output-port 'scheme-indent-function 1)) (eval . (put 'signature-case 'scheme-indent-function 1)) (eval . (put 'emacs-batch-eval 'scheme-indent-function 0)) (eval . (put 'emacs-batch-edit-file 'scheme-indent-function 1)) @@ -59,6 +61,7 @@ (eval . (put 'run-with-store 'scheme-indent-function 1)) (eval . (put 'run-with-state 'scheme-indent-function 1)) (eval . (put 'wrap-program 'scheme-indent-function 1)) + (eval . (put 'with-imported-modules 'scheme-indent-function 1)) (eval . (put 'call-with-container 'scheme-indent-function 1)) (eval . (put 'container-excursion 'scheme-indent-function 1)) diff --git a/.gitignore b/.gitignore index 003412eeab..6e892ca687 100644 --- a/.gitignore +++ b/.gitignore @@ -35,6 +35,7 @@ /doc/guix.ky /doc/guix.pg /doc/guix.toc +/doc/guix.t2p /doc/guix.tp /doc/guix.vr /doc/guix.vrs diff --git a/.mailmap b/.mailmap index 21841c1a0a..2af7760b16 100644 --- a/.mailmap +++ b/.mailmap @@ -30,8 +30,9 @@ Ludovic Courtès Mathieu Lirzin Mathieu Lirzin Nikita Karetnikov -Nils Gillmann -Nils Gillmann +ng0 +ng0 +ng0 Pjotr Prins Pjotr Prins Raimon Grau @@ -41,3 +42,4 @@ Ricardo Wurmus Sou Bunnbu (宋文武) Taylan Ulrich Bayırlı/Kammer Tomáš Čech +Tobias Geerinckx-Rice \ No newline at end of file diff --git a/HACKING b/HACKING index 41838ee816..d5828f6836 100644 --- a/HACKING +++ b/HACKING @@ -35,6 +35,10 @@ upgrading GnuTLS or GLib.) We have a mailing list for commit notifications (guix-commits@gnu.org), so people can notice. Before pushing your changes, make sure to run ‘git pull --rebase’. +All commits that are pushed to the central repository on Savannah should be +signed with a PGP key, and the public key should be uploaded to your user +account on Savannah. + For anything else, please post to guix-devel@gnu.org and leave time for a review, without committing anything. If you didn’t receive any reply after two weeks, and if you’re confident, it’s OK to commit. diff --git a/Makefile.am b/Makefile.am index b7792d0721..dc81d32b6c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -57,6 +57,7 @@ MODULES = \ guix/licenses.scm \ guix/graph.scm \ guix/cve.scm \ + guix/zlib.scm \ guix/build-system.scm \ guix/build-system/ant.scm \ guix/build-system/cmake.scm \ @@ -252,6 +253,7 @@ SCM_TESTS = \ tests/graph.scm \ tests/challenge.scm \ tests/cve.scm \ + tests/zlib.scm \ tests/file-systems.scm \ tests/system.scm \ tests/services.scm \ diff --git a/THANKS b/THANKS index b0dd79382a..af7afd3576 100644 --- a/THANKS +++ b/THANKS @@ -14,6 +14,7 @@ infrastructure help: Alexandru Cojocaru Aleix Conchillo Flaqué Malcolm Cook + Thomas Danckaert Rafael Ferreira Christian Grothoff Eric Hanchrow diff --git a/config-daemon.ac b/config-daemon.ac index 803eb53699..f66f31269d 100644 --- a/config-daemon.ac +++ b/config-daemon.ac @@ -113,10 +113,10 @@ if test "x$guix_build_daemon" = "xyes"; then dnl Determine the appropriate default list of substitute URLs. GUILE_MODULE_AVAILABLE([have_gnutls], [(gnutls)]) if test "x$have_gnutls" = "xyes"; then - guix_substitute_urls="https://mirror.hydra.gnu.org https://hydra.gnu.org" + guix_substitute_urls="https://mirror.hydra.gnu.org" else AC_MSG_WARN([GnuTLS is missing, substitutes will be downloaded in the clear]) - guix_substitute_urls="http://mirror.hydra.gnu.org http://hydra.gnu.org" + guix_substitute_urls="http://mirror.hydra.gnu.org" fi AC_MSG_CHECKING([for default substitute URLs]) AC_MSG_RESULT([$guix_substitute_urls]) diff --git a/configure.ac b/configure.ac index 1f5c549aee..20adf85f0b 100644 --- a/configure.ac +++ b/configure.ac @@ -189,6 +189,17 @@ AC_SUBST([LIBGCRYPT_LIBDIR]) GUIX_ASSERT_LIBGCRYPT_USABLE +dnl Library name of zlib suitable for 'dynamic-link'. +GUIX_LIBZ_LIBDIR([libz_libdir]) +if test "x$libz_libdir" = "x"; then + LIBZ="libz" +else + LIBZ="$libz_libdir/libz" +fi +AC_MSG_CHECKING([for zlib's shared library name]) +AC_MSG_RESULT([$LIBZ]) +AC_SUBST([LIBZ]) + AC_CACHE_SAVE m4_include([config-daemon.ac]) diff --git a/doc/guix.texi b/doc/guix.texi index 7204f2e939..318e6cb5d9 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -17,6 +17,7 @@ Copyright @copyright{} 2015, 2016 Mathieu Lirzin@* Copyright @copyright{} 2014 Pierre-Antoine Rault@* Copyright @copyright{} 2015 Taylan Ulrich Bayırlı/Kammer@* Copyright @copyright{} 2015, 2016 Leo Famulari@* +Copyright @copyright{} 2015, 2016 Ricardo Wurmus@* Copyright @copyright{} 2016 Ben Woodcroft@* Copyright @copyright{} 2016 Chris Marusich@* Copyright @copyright{} 2016 Efraim Flashner @@ -546,6 +547,10 @@ Installing allow you to use the @command{guix import pypi} command (@pxref{Invoking guix import}). It is of interest primarily for developers and not for casual users. + +@item +When @url{http://zlib.net, zlib} is available, @command{guix publish} +can compress build byproducts (@pxref{Invoking guix publish}). @end itemize Unless @code{--disable-daemon} was passed to @command{configure}, the @@ -2669,6 +2674,7 @@ Examples include: download a file from the HTTP, HTTPS, or FTP URL specified in the @code{uri} field; +@vindex git-fetch @item @var{git-fetch} from @code{(guix git-download)} clone the Git version control repository, and check out the revision specified in the @code{uri} field as a @code{git-reference} object; a @@ -2686,6 +2692,10 @@ A bytevector containing the SHA-256 hash of the source. Typically the @code{base32} form is used here to generate the bytevector from a base-32 string. +You can obtain this information using @code{guix download} +(@pxref{Invoking guix download}) or @code{guix hash} (@pxref{Invoking +guix hash}). + @item @code{file-name} (default: @code{#f}) The file name under which the source code should be saved. When this is @code{#f}, a sensible default value will be used in most cases. In case @@ -2697,8 +2707,9 @@ file name explicitly because the default is not very descriptive. A list of file names containing patches to be applied to the source. @item @code{snippet} (default: @code{#f}) -A quoted piece of code that will be run in the source directory to make -any modifications, which is sometimes more convenient than a patch. +A G-expression (@pxref{G-Expressions}) or S-expression that will be run +in the source directory. This is a convenient way to modify the source, +sometimes more convenient than a patch. @item @code{patch-flags} (default: @code{'("-p1")}) A list of command-line flags that should be passed to the @code{patch} @@ -2713,10 +2724,6 @@ such as GNU@tie{}Patch. A list of Guile modules that should be loaded during the patching process and while running the code in the @code{snippet} field. -@item @code{imported-modules} (default: @code{'()}) -The list of Guile modules to import in the patch derivation, for use by -the @code{snippet}. - @item @code{patch-guile} (default: @code{#f}) The Guile package that should be used in the patching process. When this is @code{#f}, a sensible default is used. @@ -3697,6 +3704,30 @@ In the example above, the native build of @var{coreutils} is used, so that @command{ln} can actually run on the host; but then the cross-compiled build of @var{emacs} is referenced. +@cindex imported modules, for gexps +@findex with-imported-modules +Another gexp feature is @dfn{imported modules}: sometimes you want to be +able to use certain Guile modules from the ``host environment'' in the +gexp, so those modules should be imported in the ``build environment''. +The @code{with-imported-modules} form allows you to express that: + +@example +(let ((build (with-imported-modules '((guix build utils)) + #~(begin + (use-modules (guix build utils)) + (mkdir-p (string-append #$output "/bin")))))) + (gexp->derivation "empty-dir" + #~(begin + #$build + (display "success!\n") + #t))) +@end example + +@noindent +In this example, the @code{(guix build utils)} module is automatically +pulled into the isolated build environment of our gexp, such that +@code{(use-modules (guix build utils))} works as expected. + The syntactic form to construct gexps is summarized below. @deffn {Scheme Syntax} #~@var{exp} @@ -3756,6 +3787,16 @@ G-expressions created by @code{gexp} or @code{#~} are run-time objects of the @code{gexp?} type (see below.) @end deffn +@deffn {Scheme Syntax} with-imported-modules @var{modules} @var{body}@dots{} +Mark the gexps defined in @var{body}@dots{} as requiring @var{modules} +in their execution environment. @var{modules} must be a list of Guile +module names, such as @code{'((guix build utils) (guix build gremlin))}. + +This form has @emph{lexical} scope: it has an effect on the gexps +directly defined in @var{body}@dots{}, but not on those defined, say, in +procedures called from @var{body}@dots{}. +@end deffn + @deffn {Scheme Procedure} gexp? @var{obj} Return @code{#t} if @var{obj} is a G-expression. @end deffn @@ -3781,7 +3822,9 @@ stored in a file called @var{script-name}. When @var{target} is true, it is used as the cross-compilation target triplet for packages referred to by @var{exp}. -Make @var{modules} available in the evaluation context of @var{exp}; +@var{modules} is deprecated in favor of @code{with-imported-modules}. +Its meaning is to +make @var{modules} available in the evaluation context of @var{exp}; @var{modules} is a list of names of Guile modules searched in @var{module-path} to be copied in the store, compiled, and made available in the load path during the execution of @var{exp}---e.g., @code{((guix @@ -3862,10 +3905,9 @@ This is the declarative counterpart of @code{text-file}. @end deffn @deffn {Scheme Procedure} computed-file @var{name} @var{gexp} @ - [#:modules '()] [#:options '(#:local-build? #t)] + [#:options '(#:local-build? #t)] Return an object representing the store item @var{name}, a file or -directory computed by @var{gexp}. @var{modules} specifies the set of -modules visible in the execution context of @var{gexp}. @var{options} +directory computed by @var{gexp}. @var{options} is a list of additional arguments to pass to @code{gexp->derivation}. This is the declarative counterpart of @code{gexp->derivation}. @@ -3873,7 +3915,7 @@ This is the declarative counterpart of @code{gexp->derivation}. @deffn {Monadic Procedure} gexp->script @var{name} @var{exp} Return an executable script @var{name} that runs @var{exp} using -@var{guile} with @var{modules} in its search path. +@var{guile}, with @var{exp}'s imported modules in its search path. The example below builds a script that simply invokes the @command{ls} command: @@ -3899,16 +3941,20 @@ executable file @file{/gnu/store/@dots{}-list-files} along these lines: @end deffn @deffn {Scheme Procedure} program-file @var{name} @var{exp} @ - [#:modules '()] [#:guile #f] + [#:guile #f] Return an object representing the executable store item @var{name} that runs @var{gexp}. @var{guile} is the Guile package used to execute that -script, and @var{modules} is the list of modules visible to that script. +script. This is the declarative counterpart of @code{gexp->script}. @end deffn -@deffn {Monadic Procedure} gexp->file @var{name} @var{exp} +@deffn {Monadic Procedure} gexp->file @var{name} @var{exp} @ + [#:set-load-path? #t] Return a derivation that builds a file @var{name} containing @var{exp}. +When @var{set-load-path?} is true, emit code in the resulting file to +set @code{%load-path} and @code{%load-compiled-path} to honor +@var{exp}'s imported modules. The resulting file holds references to all the dependencies of @var{exp} or a subset thereof. @@ -4533,6 +4579,17 @@ hash (@pxref{Invoking guix archive}). @c FIXME: Replace xref above with xref to an ``Archive'' section when @c it exists. +@vindex git-fetch +As an example, here is how you would compute the hash of a Git checkout, +which is useful when using the @code{git-fetch} method (@pxref{origin +Reference}): + +@example +$ git clone http://example.org/foo.git +$ cd foo +$ rm -rf .git +$ guix hash -r . +@end example @end table @node Invoking guix import @@ -5592,6 +5649,18 @@ accept connections from any interface. Change privileges to @var{user} as soon as possible---i.e., once the server socket is open and the signing key has been read. +@item --compression[=@var{level}] +@itemx -C [@var{level}] +Compress data using the given @var{level}. When @var{level} is zero, +disable compression. The range 1 to 9 corresponds to different gzip +compression levels: 1 is the fastest, and 9 is the best (CPU-intensive). +The default is 3. + +Compression occurs on the fly and the compressed streams are not +cached. Thus, to reduce load on the machine that runs @command{guix +publish}, it may be a good idea to choose a low compression level, or to +run @command{guix publish} behind a caching proxy. + @item --ttl=@var{ttl} Produce @code{Cache-Control} HTTP headers that advertise a time-to-live (TTL) of @var{ttl}. @var{ttl} must denote a duration: @code{5d} means 5 @@ -7494,6 +7563,41 @@ created by @command{guix archive --generate-key} (@pxref{Invoking guix archive}). If that is not the case, the service will fail to start. @end deffn +@anchor{rngd-service} +@deffn {Scheme Procedure} rngd-service [#:rng-tools @var{rng-tools}] @ + [#:device "/dev/hwrng"] +Return a service that runs the @command{rngd} program from @var{rng-tools} +to add @var{device} to the kernel's entropy pool. The service will fail if +@var{device} does not exist. +@end deffn + +@anchor{pam-limits-service} +@cindex session limits +@cindex ulimit +@cindex priority +@deffn {Scheme Procedure} pam-limits-service [#:limits @var{limits}] + +Return a service that installs a configuration file for the +@uref{http://linux-pam.org/Linux-PAM-html/sag-pam_limits.html, +@code{pam_limits} module}. The procedure optionally takes a list of +@code{pam-limits-entry} values, which can be used to specify +@code{ulimit} limits and nice priority limits to user sessions. + +The following limits definition sets two hard and soft limits for all +login sessions of users in the @code{realtime} group: + +@example +(pam-limits-service + (list + (pam-limits-entry "@@realtime" 'both 'rtprio 99) + (pam-limits-entry "@@realtime" 'both 'memlock 'unlimited))) +@end example + +The first entry increases the maximum realtime priority for +non-privileged processes; the second entry lifts any restriction of the +maximum address space that can be locked in memory. These settings are +commonly used for real-time audio systems. +@end deffn @node Scheduled Job Execution @subsubsection Scheduled Job Execution @@ -7602,7 +7706,7 @@ Protocol (DHCP) client, on all the non-loopback network interfaces. @end deffn @deffn {Scheme Procedure} static-networking-service @var{interface} @var{ip} @ - [#:gateway #f] [#:name-services @code{'()}] + [#:gateway #f] [#:name-servers @code{'()}] Return a service that starts @var{interface} with address @var{ip}. If @var{gateway} is true, it must be a string specifying the default network gateway. @@ -7695,7 +7799,7 @@ In addition, @var{extra-settings} specifies a string to append to the configuration file. @end deffn -Furthermore, @code{(gnu services ssh)} provides the following service. +Furthermore, @code{(gnu services ssh)} provides the following services. @deffn {Scheme Procedure} lsh-service [#:host-key "/etc/lsh/host-key"] @ [#:daemonic? #t] [#:interfaces '()] [#:port-number 22] @ @@ -7733,6 +7837,47 @@ root. The other options should be self-descriptive. @end deffn +@deffn {Scheme Procedure} dropbear-service [@var{config}] +Run the @uref{https://matt.ucc.asn.au/dropbear/dropbear.html,Dropbear SSH +daemon} with the given @var{config}, a @code{} +object. + +For example, to specify a Dropbear service listening on port 1234, add +this call to the operating system's @code{services} field: + +@example +(dropbear-service (dropbear-configuration + (port-number 1234))) +@end example +@end deffn + +@deftp {Data Type} dropbear-configuration +This data type represents the configuration of a Dropbear SSH daemon. + +@table @asis +@item @code{dropbear} (default: @var{dropbear}) +The Dropbear package to use. + +@item @code{port-number} (default: 22) +The TCP port where the daemon waits for incoming connections. + +@item @code{syslog-output?} (default: @code{#t}) +Whether to enable syslog output. + +@item @code{pid-file} (default: @code{"/var/run/dropbear.pid"}) +File name of the daemon's PID file. + +@item @code{root-login?} (default: @code{#f}) +Whether to allow @code{root} logins. + +@item @code{allow-empty-passwords?} (default: @code{#f}) +Whether to allow empty passwords. + +@item @code{password-authentication?} (default: @code{#t}) +Whether to enable password-based authentication. +@end table +@end deftp + @defvr {Scheme Variable} %facebook-host-aliases This variable contains a string for use in @file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C Library Reference Manual}). Each @@ -7767,7 +7912,7 @@ The @code{(gnu services avahi)} provides the following definition. @deffn {Scheme Procedure} avahi-service [#:avahi @var{avahi}] @ [#:host-name #f] [#:publish? #t] [#:ipv4? #t] @ [#:ipv6? #t] [#:wide-area? #f] @ - [#:domains-to-browse '()] + [#:domains-to-browse '()] [#:debug? #f] Return a service that runs @command{avahi-daemon}, a system-wide mDNS/DNS-SD responder that allows for service discovery and "zero-configuration" host name lookups (see @uref{http://avahi.org/}), and @@ -9973,15 +10118,11 @@ program. That gives a lot of flexibility. The program to run in that initrd. @deffn {Monadic Procedure} expression->initrd @var{exp} @ - [#:guile %guile-static-stripped] [#:name "guile-initrd"] @ - [#:modules '()] + [#:guile %guile-static-stripped] [#:name "guile-initrd"] Return a derivation that builds a Linux initrd (a gzipped cpio archive) containing @var{guile} and that evaluates @var{exp}, a G-expression, upon booting. All the derivations referenced by @var{exp} are automatically copied to the initrd. - -@var{modules} is a list of Guile module names to be embedded in the -initrd. @end deffn @node GRUB Configuration @@ -10805,10 +10946,6 @@ where @var{service-name} is one of the symbols in @var{provision} This is the list of modules that must be in scope when @code{start} and @code{stop} are evaluated. -@item @code{imported-modules} (default: @var{%default-imported-modules}) -This is the list of modules to import in the execution environment of -the Shepherd. - @end table @end deftp diff --git a/emacs/guix-devel.el b/emacs/guix-devel.el index ee8371ce81..b71670cdfb 100644 --- a/emacs/guix-devel.el +++ b/emacs/guix-devel.el @@ -216,6 +216,7 @@ to find 'modify-phases' keywords." "with-derivation-substitute" "with-directory-excursion" "with-error-handling" + "with-imported-modules" "with-monad" "with-mutex" "with-store")) @@ -306,6 +307,7 @@ Each rule should have a form (SYMBOL VALUE). See `put' for details." (with-derivation-substitute 2) (with-directory-excursion 1) (with-error-handling 0) + (with-imported-modules 1) (with-monad 1) (with-mutex 1) (with-store 1) diff --git a/etc/guix-daemon.service.in b/etc/guix-daemon.service.in index fc7c811db6..ab0ce090c3 100644 --- a/etc/guix-daemon.service.in +++ b/etc/guix-daemon.service.in @@ -7,6 +7,7 @@ Description=Build daemon for GNU Guix [Service] ExecStart=@bindir@/guix-daemon --build-users-group=guixbuild +Environment=GUIX_LOCPATH=/root/.guix-profile/lib/locale RemainAfterExit=yes StandardOutput=syslog StandardError=syslog diff --git a/gnu/local.mk b/gnu/local.mk index ce4cdf65c1..29e1e84ae0 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -150,6 +150,7 @@ GNU_SYSTEM_MODULES = \ %D%/packages/gnustep.scm \ %D%/packages/gnuzilla.scm \ %D%/packages/gnu-pw-mgr.scm \ + %D%/packages/golang.scm \ %D%/packages/gperf.scm \ %D%/packages/gprolog.scm \ %D%/packages/gps.scm \ @@ -214,7 +215,6 @@ GNU_SYSTEM_MODULES = \ %D%/packages/llvm.scm \ %D%/packages/lout.scm \ %D%/packages/logging.scm \ - %D%/packages/lsh.scm \ %D%/packages/lsof.scm \ %D%/packages/lua.scm \ %D%/packages/lxde.scm \ @@ -441,7 +441,6 @@ dist_patch_DATA = \ %D%/packages/patches/automake-test-gzip-warning.patch \ %D%/packages/patches/avahi-localstatedir.patch \ %D%/packages/patches/avidemux-install-to-lib.patch \ - %D%/packages/patches/avrdude-fix-libusb.patch \ %D%/packages/patches/awesome-reproducible-png.patch \ %D%/packages/patches/bash-completion-directories.patch \ %D%/packages/patches/beets-image-test-failure.patch \ @@ -454,6 +453,7 @@ dist_patch_DATA = \ %D%/packages/patches/cdparanoia-fpic.patch \ %D%/packages/patches/chmlib-inttypes.patch \ %D%/packages/patches/clang-libc-search-path.patch \ + %D%/packages/patches/clang-3.8-libc-search-path.patch \ %D%/packages/patches/clucene-pkgconfig.patch \ %D%/packages/patches/cmake-fix-tests.patch \ %D%/packages/patches/cpio-gets-undeclared.patch \ @@ -511,10 +511,16 @@ dist_patch_DATA = \ %D%/packages/patches/gcc-cross-environment-variables.patch \ %D%/packages/patches/gcc-libvtv-runpath.patch \ %D%/packages/patches/gcc-5.0-libvtv-runpath.patch \ + %D%/packages/patches/gd-CVE-2016-5766.patch \ + %D%/packages/patches/gd-CVE-2016-6128.patch \ + %D%/packages/patches/gd-CVE-2016-6132.patch \ + %D%/packages/patches/gd-CVE-2016-6214.patch \ + %D%/packages/patches/gd-fix-test-on-i686.patch \ %D%/packages/patches/gegl-CVE-2012-4433.patch \ %D%/packages/patches/geoclue-config.patch \ %D%/packages/patches/ghostscript-CVE-2015-3228.patch \ %D%/packages/patches/ghostscript-runpath.patch \ + %D%/packages/patches/gimp-CVE-2016-4994.patch \ %D%/packages/patches/glib-networking-ssl-cert-file.patch \ %D%/packages/patches/glib-tests-timer.patch \ %D%/packages/patches/glibc-bootstrap-system.patch \ @@ -590,6 +596,7 @@ dist_patch_DATA = \ %D%/packages/patches/jasper-CVE-2016-2089.patch \ %D%/packages/patches/jasper-CVE-2016-2116.patch \ %D%/packages/patches/jbig2dec-ignore-testtest.patch \ + %D%/packages/patches/khmer-use-libraries.patch \ %D%/packages/patches/kmod-module-directory.patch \ %D%/packages/patches/ldc-disable-tests.patch \ %D%/packages/patches/lftp-dont-save-unknown-host-fingerprint.patch \ @@ -603,7 +610,6 @@ dist_patch_DATA = \ %D%/packages/patches/libdrm-symbol-check.patch \ %D%/packages/patches/libevent-dns-tests.patch \ %D%/packages/patches/libextractor-ffmpeg-3.patch \ - %D%/packages/patches/libmtp-devices.patch \ %D%/packages/patches/liboop-mips64-deplibs-fix.patch \ %D%/packages/patches/libotr-test-auth-fix.patch \ %D%/packages/patches/liblxqt-include.patch \ @@ -673,7 +679,6 @@ dist_patch_DATA = \ %D%/packages/patches/ocaml-CVE-2015-8869.patch \ %D%/packages/patches/ocaml-findlib-make-install.patch \ %D%/packages/patches/openexr-missing-samples.patch \ - %D%/packages/patches/openimageio-boost-1.60.patch \ %D%/packages/patches/openjpeg-CVE-2015-6581.patch \ %D%/packages/patches/openjpeg-use-after-free-fix.patch \ %D%/packages/patches/openssh-CVE-2015-8325.patch \ @@ -729,6 +734,7 @@ dist_patch_DATA = \ %D%/packages/patches/python-2.7-source-date-epoch.patch \ %D%/packages/patches/python-3-deterministic-build-info.patch \ %D%/packages/patches/python-3-search-paths.patch \ + %D%/packages/patches/python-dendropy-exclude-failing-tests.patch \ %D%/packages/patches/python-disable-ssl-test.patch \ %D%/packages/patches/python-fix-tests.patch \ %D%/packages/patches/python-ipython-inputhook-ctype.patch \ @@ -760,7 +766,6 @@ dist_patch_DATA = \ %D%/packages/patches/slim-sigusr1.patch \ %D%/packages/patches/slurm-configure-remove-nonfree-contribs.patch \ %D%/packages/patches/soprano-find-clucene.patch \ - %D%/packages/patches/sudo-CVE-2015-5602.patch \ %D%/packages/patches/superlu-dist-scotchmetis.patch \ %D%/packages/patches/synfig-build-fix.patch \ %D%/packages/patches/t1lib-CVE-2010-2642.patch \ diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm index 415a35aab3..1d08be9e13 100644 --- a/gnu/packages/admin.scm +++ b/gnu/packages/admin.scm @@ -11,6 +11,7 @@ ;;; Copyright © 2016 Ricardo Wurmus ;;; Copyright © 2016 Efraim Flashner ;;; Copyright © 2016 Peter Feigl +;;; Copyright © 2016 John J. Foerch ;;; ;;; This file is part of GNU Guix. ;;; @@ -789,18 +790,17 @@ (define-public rottlog (define-public sudo (package (name "sudo") - (version "1.8.15") + (version "1.8.17p1") (source (origin (method url-fetch) (uri - (list (string-append "http://www.sudo.ws/sudo/dist/sudo-" + (list (string-append "https://www.sudo.ws/sudo/dist/sudo-" version ".tar.gz") (string-append "ftp://ftp.sudo.ws/pub/sudo/OLD/sudo-" version ".tar.gz"))) (sha256 (base32 - "0263gi6i19fyzzc488n0qw3m518i39f6a7qmrfvahk9j10bkh5j3")) - (patches (search-patches "sudo-CVE-2015-5602.patch")))) + "1k2mn65l1kmsxm8wh0gjxy496xhbpiimbpm6yv6kw6snzc3xg466")))) (build-system gnu-build-system) (arguments `(#:configure-flags @@ -849,7 +849,7 @@ (define-public sudo `(("groff" ,groff) ("linux-pam" ,linux-pam) ("coreutils" ,coreutils))) - (home-page "http://www.sudo.ws/") + (home-page "https://www.sudo.ws/") (synopsis "Run commands as root") (description "Sudo (su \"do\") allows a system administrator to delegate authority to @@ -1139,19 +1139,20 @@ (define-public detox (define-public testdisk (package (name "testdisk") - (version "6.14") + (version "7.0") (source (origin (method url-fetch) (uri (string-append "http://www.cgsecurity.org/testdisk-" version ".tar.bz2")) (sha256 (base32 - "0v1jap83f5h99zv01v3qmqm160d36n4ysi0gyq7xzb3mqgmw75x5")))) + "0ba4wfz2qrf60vwvb1qsq9l6j0pgg81qgf7fh22siaz649mkpfq0")))) (build-system gnu-build-system) (inputs - `(;; ("ntfs" ,ntfs) + `(("ntfs-3g" ,ntfs-3g) ("util-linux" ,util-linux) ("openssl" ,openssl) + ;; FIXME: add reiserfs ("zlib" ,zlib) ("e2fsprogs" ,e2fsprogs) ("libjpeg" ,libjpeg) @@ -1345,17 +1346,14 @@ (define-public graphios (define-public ansible (package (name "ansible") - (version "1.9.2") + (version "2.1.0.0") (source (origin (method url-fetch) - (uri (string-append - "https://pypi.python.org/packages/source/a/ansible/ansible-" - version - ".tar.gz")) + (uri (pypi-uri "ansible" version)) (sha256 (base32 - "007fzgsqaahb0y4gjdxxmir9kcni7wph2z14jhqgpz88idrz8pn2")))) + "1bfc2xiplpad6f2nwi48y0kps7xqnsll85dlz63cy8k5bysl6d20")))) (build-system python-build-system) (native-inputs `(("python2-setuptools" ,python2-setuptools) @@ -1708,3 +1706,34 @@ (define-public thefuck "The Fuck tries to match a rule for a previous, mistyped command, creates a new command using the matched rule, and runs it.") (license license:x11))) + +(define-public di + (package + (name "di") + (version "4.42") + (source + (origin + (method url-fetch) + (uri (string-append "https://gentoo.com/di/di-" version ".tar.gz")) + (sha256 + (base32 "1i6m9zdnidn8268q1lz9fd8payk7s4pgwh5zlam9rr4dy6h6a67n")))) + (build-system gnu-build-system) + (arguments + `(#:tests? #f ; Obscure test failures. + #:phases + (modify-phases %standard-phases + (delete 'configure) + (add-before 'build 'setup-environment + (lambda* (#:key outputs #:allow-other-keys) + (setenv "CC" "gcc") + (setenv "prefix" (assoc-ref outputs "out")) + #t))) + #:make-flags (list "--environment-overrides"))) + (home-page "https://www.gentoo.com/di/") + (synopsis "Advanced df like disk information utility") + (description + "'di' is a disk information utility, displaying everything +(and more) that your @code{df} command does. It features the ability to +display your disk usage in whatever format you prefer. It is designed to be +highly portable. Great for heterogenous networks.") + (license license:zlib))) diff --git a/gnu/packages/algebra.scm b/gnu/packages/algebra.scm index b0ffd7009b..92b4d4c27e 100644 --- a/gnu/packages/algebra.scm +++ b/gnu/packages/algebra.scm @@ -202,7 +202,7 @@ (define-public gp2c (define-public giac-xcas (package (name "giac-xcas") - (version "1.2.2-59") + (version "1.2.2-75") (source (origin (method url-fetch) ;; "~parisse/giac" is not used because the maintainer regularly @@ -214,7 +214,7 @@ (define-public giac-xcas "source/giac_" version ".tar.gz")) (sha256 (base32 - "02s774v2zg2ya43rm8s7bcwzrmp4wlmn8h2rlg4816zpfrjkrdn4")))) + "0vs111fkd900wkm7yypaxmplc8i8j63d9shc3fbdhddn7cdj70b1")))) (build-system gnu-build-system) (arguments `(#:phases diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm index eb36238b44..956ead4d5a 100644 --- a/gnu/packages/backup.scm +++ b/gnu/packages/backup.scm @@ -407,17 +407,14 @@ (define-public libchop (define-public borg (package (name "borg") - (version "1.0.3") + (version "1.0.6") (source (origin (method url-fetch) - (uri (string-append - "https://pypi.python.org/packages/" - "c9/c6/1efc338724b054d4d264dfeadfcba11cefa6c3c50f474cec91b8f0c21d3a" - "/borgbackup-" version ".tar.gz")) + (uri (pypi-uri "borgbackup" version)) (sha256 (base32 - "0kzr0xa00yjfxx27aipli67qg5ffj52yrnqhpf3sdy6k5wzwaybs")))) + "1dxn9p4xm0zd32xzzd9hs4a542db34clykrrnnv3hrdnc394895p")))) (build-system python-build-system) (arguments `(#:phases diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm index f5e7285193..1cbf85ff6c 100644 --- a/gnu/packages/bioinformatics.scm +++ b/gnu/packages/bioinformatics.scm @@ -27,6 +27,7 @@ (define-module (gnu packages bioinformatics) #:use-module (guix utils) #:use-module (guix download) #:use-module (guix git-download) + #:use-module (guix hg-download) #:use-module (guix build-system ant) #:use-module (guix build-system gnu) #:use-module (guix build-system cmake) @@ -49,18 +50,23 @@ (define-module (gnu packages bioinformatics) #:use-module (gnu packages file) #:use-module (gnu packages gawk) #:use-module (gnu packages gcc) + #:use-module (gnu packages gd) + #:use-module (gnu packages image) #:use-module (gnu packages java) #:use-module (gnu packages linux) + #:use-module (gnu packages logging) #:use-module (gnu packages machine-learning) #:use-module (gnu packages maths) #:use-module (gnu packages mpi) #:use-module (gnu packages ncurses) #:use-module (gnu packages pcre) + #:use-module (gnu packages pdf) #:use-module (gnu packages perl) #:use-module (gnu packages pkg-config) #:use-module (gnu packages popt) #:use-module (gnu packages protobuf) #:use-module (gnu packages python) + #:use-module (gnu packages readline) #:use-module (gnu packages ruby) #:use-module (gnu packages statistics) #:use-module (gnu packages tbb) @@ -70,6 +76,7 @@ (define-module (gnu packages bioinformatics) #:use-module (gnu packages vim) #:use-module (gnu packages web) #:use-module (gnu packages xml) + #:use-module (gnu packages xorg) #:use-module (gnu packages zip) #:use-module (srfi srfi-1)) @@ -215,7 +222,7 @@ (define-public bedops (define-public bedtools (package (name "bedtools") - (version "2.25.0") + (version "2.26.0") (source (origin (method url-fetch) (uri (string-append "https://github.com/arq5x/bedtools2/archive/v" @@ -223,7 +230,7 @@ (define-public bedtools (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "1ywcy3yfwzhl905b51l0ffjia55h75vv3mw5xkvib04pp6pj548m")))) + "0xvri5hnp2iim1cx6mcd5d9f102p5ql41x69rd6106x1c17pinqm")))) (build-system gnu-build-system) (native-inputs `(("python" ,python-2))) (inputs `(("samtools" ,samtools) @@ -251,6 +258,51 @@ (define-public bedtools BED, GFF/GTF, VCF.") (license license:gpl2))) +;; Later releases of bedtools produce files with more columns than +;; what Ribotaper expects. +(define-public bedtools-2.18 + (package (inherit bedtools) + (name "bedtools") + (version "2.18.0") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/arq5x/bedtools2/" + "archive/v" version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "05vrnr8yp7swfagshzpgqmzk1blnwnq8pq5pckzi1m26w98d63vf")))))) + +(define-public ribotaper + (package + (name "ribotaper") + (version "1.3.1") + (source (origin + (method url-fetch) + (uri (string-append "https://ohlerlab.mdc-berlin.de/" + "files/RiboTaper/RiboTaper_Version_" + version ".tar.gz")) + (sha256 + (base32 + "0ykjbps1y3z3085q94npw8i9x5gldc6shy8vlc08v76zljsm07hv")))) + (build-system gnu-build-system) + (inputs + `(("bedtools" ,bedtools-2.18) + ("samtools" ,samtools-0.1) + ("r" ,r) + ("r-foreach" ,r-foreach) + ("r-xnomial" ,r-xnomial) + ("r-domc" ,r-domc) + ("r-multitaper" ,r-multitaper) + ("r-seqinr" ,r-seqinr))) + (home-page "https://ohlerlab.mdc-berlin.de/software/RiboTaper_126/") + (synopsis "Define translated ORFs using ribosome profiling data") + (description + "Ribotaper is a method for defining translated @dfn{open reading +frames} (ORFs) using ribosome profiling (ribo-seq) data. This package +provides the Ribotaper pipeline.") + (license license:gpl3+))) + (define-public bioawk (package (name "bioawk") @@ -421,7 +473,7 @@ (define-public python2-biopython (define-public blast+ (package (name "blast+") - (version "2.2.31") + (version "2.4.0") (source (origin (method url-fetch) (uri (string-append @@ -429,7 +481,7 @@ (define-public blast+ version "/ncbi-blast-" version "+-src.tar.gz")) (sha256 (base32 - "19gq6as4k1jrgsd26158ads6h7v4jca3h4r5dzg1y0m6ya50x5ph")) + "14n9jik6vhiwjd3m7bach4xj1pzfn0szbsbyfxybd9l9cc43b6mb")) (modules '((guix build utils))) (snippet '(begin @@ -1439,6 +1491,40 @@ (define-public python2-pybigwig (native-inputs `(("python-setuptools" ,python2-setuptools)))))) +(define-public python-dendropy + (package + (name "python-dendropy") + (version "4.1.0") + (source + (origin + (method url-fetch) + (uri (pypi-uri "DendroPy" version)) + (sha256 + (base32 + "1jfz7gp18wph311w1yygbvjanb3n5mdqal439bb6myw41dwb5m63")) + ;; There are two known test failures that will be fixed in the next + ;; release after 4.1.0. + ;; https://github.com/jeetsukumaran/DendroPy/issues/48 + (patches (search-patches + "python-dendropy-exclude-failing-tests.patch")))) + (build-system python-build-system) + (home-page "http://packages.python.org/DendroPy/") + (synopsis "Library for phylogenetics and phylogenetic computing") + (description + "DendroPy is a library for phylogenetics and phylogenetic computing: reading, +writing, simulation, processing and manipulation of phylogenetic +trees (phylogenies) and characters.") + (license license:bsd-3) + (properties `((python2-variant . ,(delay python2-dendropy)))))) + +(define-public python2-dendropy + (let ((base (package-with-python2 (strip-python2-variant python-dendropy)))) + (package + (inherit base) + (native-inputs `(("python2-setuptools" ,python2-setuptools) + ,@(package-native-inputs base)))))) + + (define-public deeptools (package (name "deeptools") @@ -1482,7 +1568,7 @@ (define-public deeptools (define-public diamond (package (name "diamond") - (version "0.8.7") + (version "0.8.15") (source (origin (method url-fetch) (uri (string-append @@ -1491,7 +1577,7 @@ (define-public diamond (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "15r7gcrqc4pv5d4kvv530zc3xnni92c74y63zrxzidriss7591yx")))) + "14n0p28b4i5j8vvz1fl4xj1gxnpg98bj0kr3i90mhn7miwr4pkpw")))) (build-system cmake-build-system) (arguments '(#:tests? #f ; no "check" target @@ -1517,6 +1603,75 @@ (define-public diamond (license (license:non-copyleft "file://src/COPYING" "See src/COPYING in the distribution.")))) +(define-public eigensoft + (let ((revision "1") + (commit "b14d1e202e21e532536ff8004f0419cd5e259dc7")) + (package + (name "eigensoft") + (version (string-append "6.1.2-" + revision "." + (string-take commit 9))) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/DReichLab/EIG.git") + (commit commit))) + (file-name (string-append "eigensoft-" commit "-checkout")) + (sha256 + (base32 + "0f5m6k2j5c16xc3xbywcs989xyc26ncy1zfzp9j9n55n9r4xcaiq")) + (modules '((guix build utils))) + ;; Remove pre-built binaries. + (snippet '(begin + (delete-file-recursively "bin") + (mkdir "bin") + #t)))) + (build-system gnu-build-system) + (arguments + `(#:tests? #f ; There are no tests. + #:make-flags '("CC=gcc") + #:phases + (modify-phases %standard-phases + ;; There is no configure phase, but the Makefile is in a + ;; sub-directory. + (replace 'configure + (lambda _ + (chdir "src") + ;; The link flags are incomplete. + (substitute* "Makefile" + (("-lgsl") "-lgsl -lm -llapack -llapacke -lpthread")) + #t)) + ;; The provided install target only copies executables to + ;; the "bin" directory in the build root. + (add-after 'install 'actually-install + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bin (string-append out "/bin"))) + (mkdir-p bin) + (for-each (lambda (file) + (install-file file bin)) + (find-files "../bin" ".*")) + #t)))))) + (inputs + `(("gsl" ,gsl) + ("lapack" ,lapack) + ("openblas" ,openblas) + ("perl" ,perl) + ("gfortran" ,gfortran "lib"))) + (home-page "https://github.com/DReichLab/EIG") + (synopsis "Tools for population genetics") + (description "The EIGENSOFT package provides tools for population +genetics and stratification correction. EIGENSOFT implements methods commonly +used in population genetics analyses such as PCA, computation of Tracy-Widom +statistics, and finding related individuals in structured populations. It +comes with a built-in plotting script and supports multiple file formats and +quantitative phenotypes.") + ;; The license of the eigensoft tools is Expat, but since it's + ;; linking with the GNU Scientific Library (GSL) the effective + ;; license is the GPL. + (license license:gpl3+)))) + (define-public edirect (package (name "edirect") @@ -2170,7 +2325,7 @@ (define-public java-htsjdk (define-public htslib (package (name "htslib") - (version "1.2.1") + (version "1.3.1") (source (origin (method url-fetch) (uri (string-append @@ -2178,7 +2333,7 @@ (define-public htslib version "/htslib-" version ".tar.bz2")) (sha256 (base32 - "1c32ssscbnjwfw3dra140fq7riarp2x990qxybh34nr1p5r17nxx")))) + "1rja282fwdc25ql6izkhdyh8ppw8x2fs0w0js78zgkmqjlikmma9")))) (build-system gnu-build-system) (arguments `(#:phases @@ -2301,6 +2456,87 @@ (define-public jellyfish ;; files such as lib/jsoncpp.cpp are released under the Expat license. (license (list license:gpl3+ license:expat)))) +(define-public khmer + (package + (name "khmer") + (version "2.0") + (source + (origin + (method url-fetch) + (uri (pypi-uri "khmer" version)) + (sha256 + (base32 + "0wb05shqh77v00256qlm68vbbx3kl76fyzihszbz5nhanl4ni33a")) + (patches (search-patches "khmer-use-libraries.patch")))) + (build-system python-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'set-paths + (lambda* (#:key inputs outputs #:allow-other-keys) + ;; Delete bundled libraries. + (delete-file-recursively "third-party/zlib") + (delete-file-recursively "third-party/bzip2") + ;; Replace bundled seqan. + (let* ((seqan-all "third-party/seqan") + (seqan-include (string-append + seqan-all "/core/include"))) + (delete-file-recursively seqan-all) + (copy-recursively (string-append (assoc-ref inputs "seqan") + "/include/seqan") + (string-append seqan-include "/seqan"))) + ;; We do not replace the bundled MurmurHash as the canonical + ;; repository for this code 'SMHasher' is unsuitable for + ;; providing a library. See + ;; https://lists.gnu.org/archive/html/guix-devel/2016-06/msg00977.html + #t)) + (add-after 'unpack 'set-cc + (lambda _ + (setenv "CC" "gcc") + #t)) + ;; It is simpler to test after installation. + (delete 'check) + (add-after 'install 'post-install-check + (lambda* (#:key inputs outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (setenv "PATH" + (string-append + (getenv "PATH") + ":" + (assoc-ref outputs "out") + "/bin")) + (setenv "PYTHONPATH" + (string-append + (getenv "PYTHONPATH") + ":" + out + "/lib/python" + (string-take (string-take-right + (assoc-ref inputs "python") 5) 3) + "/site-packages")) + (with-directory-excursion "build" + (zero? (system* "nosetests" "khmer" "--attr" + "!known_failing"))))))))) + (native-inputs + `(("seqan" ,seqan) + ("python-nose" ,python-nose))) + (inputs + `(("zlib" ,zlib) + ("bzip2" ,bzip2) + ("python-screed" ,python-screed) + ("python-bz2file" ,python-bz2file))) + (home-page "https://khmer.readthedocs.org/") + (synopsis "K-mer counting, filtering and graph traversal library") + (description "The khmer software is a set of command-line tools for +working with DNA shotgun sequencing data from genomes, transcriptomes, +metagenomes and single cells. Khmer can make de novo assemblies faster, and +sometimes better. Khmer can also identify and fix problems with shotgun +data.") + ;; When building on i686, armhf and mips64el, we get the following error: + ;; error: ['khmer', 'khmer.tests', 'oxli'] require 64-bit operating system + (supported-systems '("x86_64-linux")) + (license license:bsd-3))) + (define-public macs (package (name "macs") @@ -2333,7 +2569,7 @@ (define-public macs (define-public mafft (package (name "mafft") - (version "7.267") + (version "7.299") (source (origin (method url-fetch) (uri (string-append @@ -2342,7 +2578,7 @@ (define-public mafft (file-name (string-append name "-" version ".tgz")) (sha256 (base32 - "1xl6xq1rfxkws0svrlhyqxhhwbv6r77jwblsdpcyiwzsscw6wlk0")))) + "1pwwdy5a17ggx8h9v9y712ilswj27dc3d23r65l56jgjz67y5zc0")))) (build-system gnu-build-system) (arguments `(#:tests? #f ; no automated tests, though there are tests in the read me @@ -2408,7 +2644,7 @@ (define-public mafft (define-public metabat (package (name "metabat") - (version "0.26.1") + (version "0.26.3") (source (origin (method url-fetch) (uri (string-append @@ -2417,31 +2653,40 @@ (define-public metabat (file-name (string-append name "-" version ".tar.bz2")) (sha256 (base32 - "0vgrhbaxg4dkxyax2kbigak7w0arhqvw0szwp6gd9wmyilc44kfa")))) + "1vpfvgsn8wdsv1g7z73zxcncskx7dy7bw5msg1hhibk25ay11pyg")))) (build-system gnu-build-system) (arguments `(#:phases (modify-phases %standard-phases (add-after 'unpack 'fix-includes - (lambda _ - (substitute* "SConstruct" - (("/include/bam/bam.h") - "/include/samtools/bam.h")) - (substitute* "src/BamUtils.h" - (("^#include \"bam/bam\\.h\"") - "#include \"samtools/bam.h\"") - (("^#include \"bam/sam\\.h\"") - "#include \"samtools/sam.h\"")) - (substitute* "src/KseqReader.h" - (("^#include \"bam/kseq\\.h\"") - "#include \"samtools/kseq.h\"")) - #t)) + (lambda _ + (substitute* "src/BamUtils.h" + (("^#include \"bam/bam\\.h\"") + "#include \"samtools/bam.h\"") + (("^#include \"bam/sam\\.h\"") + "#include \"samtools/sam.h\"")) + (substitute* "src/KseqReader.h" + (("^#include \"bam/kseq\\.h\"") + "#include \"htslib/kseq.h\"")) + #t)) (add-after 'unpack 'fix-scons - (lambda _ - (substitute* "SConstruct" ; Do not distribute README - (("^env\\.Install\\(idir_prefix, 'README\\.md'\\)") - "")) - #t)) + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "SConstruct" + (("^htslib_dir = 'samtools'") + (string-append "hitslib_dir = '" + (assoc-ref inputs "htslib") + "'")) + (("^samtools_dir = 'samtools'") + (string-append "samtools_dir = '" + (assoc-ref inputs "htslib") + "'")) + (("^findStaticOrShared\\('bam', hts_lib") + (string-append "findStaticOrShared('bam', '" + (assoc-ref inputs "samtools") + "/lib'")) + ;; Do not distribute README. + (("^env\\.Install\\(idir_prefix, 'README\\.md'\\)") "")) + #t)) (delete 'configure) (replace 'build (lambda* (#:key inputs outputs #:allow-other-keys) @@ -2450,17 +2695,11 @@ (define-public metabat (string-append "PREFIX=" (assoc-ref outputs "out")) - (string-append - "HTSLIB_DIR=" - (assoc-ref inputs "htslib")) - (string-append - "SAMTOOLS_DIR=" - (assoc-ref inputs "samtools")) (string-append "BOOST_ROOT=" (assoc-ref inputs "boost")) "install")))) - ;; check and install carried out during build phase + ;; Check and install are carried out during build phase. (delete 'check) (delete 'install)))) (inputs @@ -2919,6 +3158,75 @@ (define-public rseqc distribution, coverage uniformity, strand specificity, etc.") (license license:gpl3+))) +(define-public seek + ;; There are no release tarballs. According to the installation + ;; instructions at http://seek.princeton.edu/installation.jsp, the latest + ;; stable release is identified by this changeset ID. + (let ((changeset "2329130") + (revision "1")) + (package + (name "seek") + (version (string-append "0-" revision "." changeset)) + (source (origin + (method hg-fetch) + (uri (hg-reference + (url "https://bitbucket.org/libsleipnir/sleipnir") + (changeset changeset))) + (sha256 + (base32 + "0qrvilwh18dpbhkf92qvxbmay0j75ra3jg2wrhz67gf538zzphsx")))) + (build-system gnu-build-system) + (arguments + `(#:modules ((srfi srfi-1) + (guix build gnu-build-system) + (guix build utils)) + #:phases + (let ((dirs '("SeekMiner" + "SeekEvaluator" + "SeekPrep" + "Distancer" + "Data2DB" + "PCL2Bin"))) + (modify-phases %standard-phases + (add-before 'configure 'bootstrap + (lambda _ + (zero? (system* "bash" "gen_auto")))) + (add-after 'build 'build-additional-tools + (lambda* (#:key make-flags #:allow-other-keys) + (every (lambda (dir) + (with-directory-excursion (string-append "tools/" dir) + (zero? (apply system* "make" make-flags)))) + dirs))) + (add-after 'install 'install-additional-tools + (lambda* (#:key make-flags #:allow-other-keys) + (fold (lambda (dir result) + (with-directory-excursion (string-append "tools/" dir) + (and result + (zero? (apply system* + `("make" ,@make-flags "install")))))) + #t dirs))))))) + (inputs + `(("gsl" ,gsl) + ("boost" ,boost) + ("libsvm" ,libsvm) + ("readline" ,readline) + ("gengetopt" ,gengetopt) + ("log4cpp" ,log4cpp))) + (native-inputs + `(("autoconf" ,autoconf) + ("automake" ,automake) + ("perl" ,perl))) + (home-page "http://seek.princeton.edu") + (synopsis "Gene co-expression search engine") + (description + "SEEK is a computational gene co-expression search engine. SEEK provides +biologists with a way to navigate the massive human expression compendium that +now contains thousands of expression datasets. SEEK returns a robust ranking +of co-expressed genes in the biological area of interest defined by the user's +query genes. It also prioritizes thousands of expression datasets according +to the user's query of interest.") + (license license:cc-by3.0)))) + (define-public samtools (package (name "samtools") @@ -3359,6 +3667,44 @@ (define-public preseq complexity samples.") (license license:gpl3+))) +(define-public python-screed + (package + (name "python-screed") + (version "0.9") + (source + (origin + (method url-fetch) + (uri (pypi-uri "screed" version)) + (sha256 + (base32 + "18czszp9fkx3j6jr7y5kp6dfialscgddk05mw1zkhh2zhn0jd8i0")))) + (build-system python-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (replace 'check + (lambda _ + (setenv "PYTHONPATH" + (string-append (getenv "PYTHONPATH") ":.")) + (zero? (system* "nosetests" "--attr" "!known_failing"))))))) + (native-inputs + `(("python-nose" ,python-nose))) + (inputs + `(("python-bz2file" ,python-bz2file))) + (home-page "http://github.com/dib-lab/screed/") + (synopsis "Short read sequence database utilities") + (description "Screed parses FASTA and FASTQ files and generates databases. +Values such as sequence name, sequence description, sequence quality and the +sequence itself can be retrieved from these databases.") + (license license:bsd-3))) + +(define-public python2-screed + (let ((base (package-with-python2 (strip-python2-variant python-screed)))) + (package + (inherit base) + (native-inputs `(("python2-setuptools" ,python2-setuptools) + ,@(package-native-inputs base)))))) + (define-public sra-tools (package (name "sra-tools") @@ -3600,7 +3946,7 @@ (define-public sortmerna (define-public star (package (name "star") - (version "2.5.1b") + (version "2.5.2a") (source (origin (method url-fetch) (uri (string-append "https://github.com/alexdobin/STAR/archive/" @@ -3608,7 +3954,7 @@ (define-public star (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "0wzcfhkg10apnh0y73xlarfa79xxwxdizicbdl11wb48awk44iq4")) + "0xjlsm4p9flln111hv4xx7xy94c2nl53zvdvbk9winmiradjsdra")) (modules '((guix build utils))) (snippet '(begin @@ -3665,6 +4011,8 @@ (define-public star detection of canonical junctions, STAR can discover non-canonical splices and chimeric (fusion) transcripts, and is also capable of mapping full-length RNA sequences.") + ;; Only 64-bit systems are supported according to the README. + (supported-systems '("x86_64-linux" "mips64el-linux")) ;; STAR is licensed under GPLv3 or later; htslib is MIT-licensed. (license license:gpl3+))) @@ -3869,7 +4217,7 @@ (define-public r-vegan (define-public vsearch (package (name "vsearch") - (version "2.0.0") + (version "2.0.1") (source (origin (method url-fetch) @@ -3879,7 +4227,7 @@ (define-public vsearch (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "1sd57abgx077icqrbj36jq9q7pdpzc6dbics2pn1555kisq2jhfh")) + "0q7szwbf7r29yxkhb415a8i51vj87kvl5ap7h09w7k9ycb2ywvzw")) (modules '((guix build utils))) (snippet '(begin @@ -4191,6 +4539,30 @@ (define-public r-s4vectors S4Vectors package itself.") (license license:artistic2.0))) +(define-public r-seqinr + (package + (name "r-seqinr") + (version "3.1-3") + (source + (origin + (method url-fetch) + (uri (cran-uri "seqinr" version)) + (sha256 + (base32 + "0bbjfwbqg74wsamb3iz01g0ssdpdpg65gh00y9xlnpk4wb990n4n")))) + (build-system r-build-system) + (propagated-inputs + `(("r-ade4" ,r-ade4))) + (inputs + `(("zlib" ,zlib))) + (home-page "http://seqinr.r-forge.r-project.org/") + (synopsis "Biological sequences retrieval and analysis") + (description + "This package provides tools for exploratory data analysis and data +visualization of biological sequence (DNA and protein) data. It also includes +utilities for sequence data management under the ACNUC system.") + (license license:gpl2+))) + (define-public r-iranges (package (name "r-iranges") @@ -4246,6 +4618,31 @@ (define-public r-genomeinfodb names in their natural, rather than lexicographic, order.") (license license:artistic2.0))) +(define-public r-edger + (package + (name "r-edger") + (version "3.14.0") + (source (origin + (method url-fetch) + (uri (bioconductor-uri "edgeR" version)) + (sha256 + (base32 + "14vrygy7rz5ngaap4kgkvr3j18y5l6m742n79h68plk6iqgmsskn")))) + (properties `((upstream-name . "edgeR"))) + (build-system r-build-system) + (propagated-inputs + `(("r-limma" ,r-limma))) + (home-page "http://bioinf.wehi.edu.au/edgeR") + (synopsis "EdgeR does empirical analysis of digital gene expression data") + (description "This package can do differential expression analysis of +RNA-seq expression profiles with biological replication. It implements a range +of statistical methodology based on the negative binomial distributions, +including empirical Bayes estimation, exact tests, generalized linear models +and quasi-likelihood tests. It be applied to differential signal analysis of +other types of genomic data that produce counts, including ChIP-seq, SAGE and +CAGE.") + (license license:gpl2+))) + (define-public r-variantannotation (package (name "r-variantannotation") @@ -4278,6 +4675,25 @@ (define-public r-variantannotation coding changes and predict coding outcomes.") (license license:artistic2.0))) +(define-public r-limma + (package + (name "r-limma") + (version "3.28.14") + (source (origin + (method url-fetch) + (uri (bioconductor-uri "limma" version)) + (sha256 + (base32 + "1jgn66ajafhjlqpfcw2p85h6ah8mgmz66znmsw6pcapia7d34akw")))) + (build-system r-build-system) + (home-page "http://bioinf.wehi.edu.au/limma") + (synopsis "Package for linear models for microarray and RNA-seq data") + (description "This package can be used for the analysis of gene expression +studies, especially the use of linear models for analysing designed experiments +and the assessment of differential expression. The analysis methods apply to +different technologies, including microarrays, RNA-seq, and quantitative PCR.") + (license license:gpl2+))) + (define-public r-xvector (package (name "r-xvector") @@ -5237,6 +5653,115 @@ (define-public r-zlibbioc libraries for systems that do not have these available via other means.") (license license:artistic2.0))) +(define-public emboss + (package + (name "emboss") + (version "6.5.7") + (source (origin + (method url-fetch) + (uri (string-append "ftp://emboss.open-bio.org/pub/EMBOSS/old/" + (version-major+minor version) ".0/" + "EMBOSS-" version ".tar.gz")) + (sha256 + (base32 + "0vsmz96gc411yj2iyzdrsmg4l2n1nhgmp7vrgzlxx3xixv9xbf0q")))) + (build-system gnu-build-system) + (arguments + `(#:configure-flags + (list (string-append "--with-hpdf=" + (assoc-ref %build-inputs "libharu"))) + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'fix-checks + (lambda _ + ;; The PNGDRIVER tests check for the presence of libgd, libpng + ;; and zlib, but assume that they are all found at the same + ;; prefix. + (substitute* "configure.in" + (("CHECK_PNGDRIVER") + "LIBS=\"$LIBS -lgd -lpng -lz -lm\" +AC_DEFINE([PLD_png], [1], [Define to 1 if PNG support is available]) +AM_CONDITIONAL(AMPNG, true)")) + #t)) + (add-after 'unpack 'disable-update-check + (lambda _ + ;; At build time there is no connection to the Internet, so + ;; looking for updates will not work. + (substitute* "Makefile.am" + (("\\$\\(bindir\\)/embossupdate") "")) + #t)) + (add-before 'configure 'autogen + (lambda _ (zero? (system* "autoreconf" "-vif"))))))) + (inputs + `(("perl" ,perl) + ("libpng" ,libpng) + ("gd" ,gd) + ("libx11" ,libx11) + ("libharu" ,libharu) + ("zlib" ,zlib))) + (native-inputs + `(("autoconf" ,autoconf) + ("automake" ,automake) + ("libtool" ,libtool) + ("pkg-config" ,pkg-config))) + (home-page "http://emboss.sourceforge.net") + (synopsis "Molecular biology analysis suite") + (description "EMBOSS is the \"European Molecular Biology Open Software +Suite\". EMBOSS is an analysis package specially developed for the needs of +the molecular biology (e.g. EMBnet) user community. The software +automatically copes with data in a variety of formats and even allows +transparent retrieval of sequence data from the web. It also provides a +number of libraries for the development of software in the field of molecular +biology. EMBOSS also integrates a range of currently available packages and +tools for sequence analysis into a seamless whole.") + (license license:gpl2+))) + +(define-public bits + (let ((revision "1") + (commit "3cc4567896d9d6442923da944beb704750a08d2d")) + (package + (name "bits") + ;; The version is 2.13.0 even though no release archives have been + ;; published as yet. + (version (string-append "2.13.0-" revision "." (string-take commit 9))) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/arq5x/bits.git") + (commit commit))) + (file-name (string-append name "-" version "-checkout")) + (sha256 + (base32 + "17n2kffk4kmhivd8c98g2vr6y1s23vbg4sxlxs689wni66797hbs")))) + (build-system gnu-build-system) + (arguments + `(#:tests? #f ;no tests included + #:phases + (modify-phases %standard-phases + (delete 'configure) + (add-after 'unpack 'remove-cuda + (lambda _ + (substitute* "Makefile" + ((".*_cuda") "") + (("(bits_test_intersections) \\\\" _ match) match)) + #t)) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (copy-recursively + "bin" (string-append (assoc-ref outputs "out") "/bin")) + #t))))) + (inputs + `(("gsl" ,gsl) + ("zlib" ,zlib))) + (home-page "https://github.com/arq5x/bits") + (synopsis "Implementation of binary interval search algorithm") + (description "This package provides an implementation of the +BITS (Binary Interval Search) algorithm, an approach to interval set +intersection. It is especially suited for the comparison of diverse genomic +datasets and the exploration of large datasets of genome +intervals (e.g. genes, sequence alignments).") + (license license:gpl2)))) + (define-public piranha ;; There is no release tarball for the latest version. The latest commit is ;; older than one year at the time of this writing. @@ -5372,3 +5897,32 @@ (define-public filevercmp (description "This program compares version strings. It intends to be a replacement for strverscmp.") (license license:gpl3+)))) + +(define-public multiqc + (package + (name "multiqc") + (version "0.6") + (source + (origin + (method url-fetch) + (uri (pypi-uri "multiqc" version)) + (sha256 + (base32 + "0avw11h63ldpxy5pizc3wl1wa01ha7q10wb240nggsjz3jaqvyiy")))) + (build-system python-build-system) + (propagated-inputs + `(("python-jinja2" ,python-jinja2) + ("python-simplejson" ,python-simplejson) + ("python-pyyaml" ,python-pyyaml) + ("python-click" ,python-click) + ("python-matplotlib" ,python-matplotlib) + ("python-numpy" ,python-numpy))) + (native-inputs + `(("python-setuptools" ,python-setuptools))) + (home-page "http://multiqc.info") + (synopsis "Aggregate bioinformatics analysis reports") + (description + "MultiQC is a tool to aggregate bioinformatics results across many +samples into a single report. It contains modules for a large number of +common bioinformatics tools.") + (license license:gpl3))) diff --git a/gnu/packages/bittorrent.scm b/gnu/packages/bittorrent.scm index 75e5519a77..f04dc95196 100644 --- a/gnu/packages/bittorrent.scm +++ b/gnu/packages/bittorrent.scm @@ -207,7 +207,7 @@ (define-public transmission-remote-cli (define-public aria2 (package (name "aria2") - (version "1.24.0") + (version "1.25.0") (source (origin (method url-fetch) (uri (string-append "https://github.com/tatsuhiro-t/aria2/" @@ -215,7 +215,7 @@ (define-public aria2 name "-" version ".tar.xz")) (sha256 (base32 - "0dxzyy3x20vla4c4563zjqkl71djv731db6wn3h0gysgf399d91m")))) + "0d8drwc5m5ps4bw63iq2gng36gyc2vadzixbynk1dj6gfr6fp2gz")))) (build-system gnu-build-system) (arguments `(#:configure-flags '("--enable-libaria2") diff --git a/gnu/packages/busybox.scm b/gnu/packages/busybox.scm index e2d6cf8f9e..ecbdd6f939 100644 --- a/gnu/packages/busybox.scm +++ b/gnu/packages/busybox.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2014 John Darrington +;;; Copyright © 2014 John Darrington +;;; Copyright © 2016 Efraim Flashner ;;; ;;; This file is part of GNU Guix. ;;; @@ -29,49 +30,48 @@ (define-module (gnu packages busybox) (define-public busybox (package (name "busybox") - (version "1.22.1") + (version "1.25.0") (source (origin (method url-fetch) (uri (string-append - "http://www.busybox.net/downloads/" name "-" + "https://www.busybox.net/downloads/" name "-" version ".tar.bz2")) (sha256 (base32 - "12v7nri79v8gns3inmz4k24q7pcnwi00hybs0wddfkcy1afh42xf")))) + "1z52mh6prhd6v47qryz4rvng5r1z0am6masrnigq06zfhmlf03ss")))) (build-system gnu-build-system) (arguments `(#:phases - (alist-replace - 'configure - (lambda _ (zero? (system* "make" "defconfig"))) - (alist-replace - 'check - (lambda _ + (modify-phases %standard-phases + (replace 'configure + (lambda _ (zero? (system* "make" "defconfig")))) + (replace 'check + (lambda _ (substitute* '("testsuite/du/du-s-works" - "testsuite/du/du-works") - (("/bin") "/etc")) ; there is no /bin but there is a /etc + "testsuite/du/du-works") + (("/bin") "/etc")) ; there is no /bin but there is a /etc ;; There is no /usr/bin or /bin - replace it with /gnu/store (substitute* "testsuite/cpio.tests" - (("/usr/bin") (%store-directory)) - (("usr") (car (filter (negate string-null?) - (string-split (%store-directory) #\/))))) + (("/usr/bin") (%store-directory)) + (("usr") (car (filter (negate string-null?) + (string-split (%store-directory) #\/))))) (substitute* "testsuite/date/date-works-1" - (("/bin/date") (which "date"))) + (("/bin/date") (which "date"))) ;; The pidof tests assume that pid 1 is called "init" but that is not ;; true in guix build environment (substitute* "testsuite/pidof.tests" - (("-s init") "-s $(cat /proc/1/comm)")) + (("-s init") "-s $(cat /proc/1/comm)")) (substitute* "testsuite/grep.tests" - ;; The subject of this test is buggy. It is known by upstream (fixed in git) - ;; So mark it with SKIP_KNOWN_BUGS like the others. - ;; Presumably it wasn't known at the time of release ... - ;; (It is strange that they release software which they know to have bugs) - (("testing \"grep -w \\^str doesn't match str not at the beginning\"") - "test x\"$SKIP_KNOWN_BUGS\" = x\"\" && testing \"grep -w ^str doesn't match str not at the beginning\"")) + ;; The subject of this test is buggy. It is known by upstream (fixed in git) + ;; So mark it with SKIP_KNOWN_BUGS like the others. + ;; Presumably it wasn't known at the time of release ... + ;; (It is strange that they release software which they know to have bugs) + (("testing \"grep -w \\^str doesn't match str not at the beginning\"") + "test x\"$SKIP_KNOWN_BUGS\" = x\"\" && testing \"grep -w ^str doesn't match str not at the beginning\"")) ;; This test cannot possibly pass. ;; It is trying to test that "which ls" returns "/bin/ls" when PATH is not set. @@ -83,24 +83,23 @@ (define-public busybox ;; "V=1" "SKIP_KNOWN_BUGS=1" "SKIP_INTERNET_TESTS=1" - "check"))) - (alist-replace - 'install - (lambda* (#:key outputs #:allow-other-keys) - (let ((out (assoc-ref outputs "out"))) - (zero? - (system* "make" - (string-append "CONFIG_PREFIX=" out) - "install")))) - %standard-phases))))) + "check")))) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (zero? + (system* "make" + (string-append "CONFIG_PREFIX=" out) + "install")))))))) (native-inputs `(("perl" ,perl) ; needed to generate the man pages (pod2man) ;; The following are needed by the tests. ("inetutils" ,inetutils) + ("which" ,(@ (gnu packages base) which)) ("zip" ,zip))) (synopsis "Many common UNIX utilities in a single executable") (description "BusyBox combines tiny versions of many common UNIX utilities into a single small executable. It provides a fairly complete environment for any small or embedded system.") - (home-page "http://www.busybox.net") + (home-page "https://www.busybox.net") ;; Some files are gplv2+ (license gpl2))) diff --git a/gnu/packages/ccache.scm b/gnu/packages/ccache.scm index d84ac80bbf..01db7ae57d 100644 --- a/gnu/packages/ccache.scm +++ b/gnu/packages/ccache.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014, 2015, 2016 Eric Bavier +;;; Copyright © 2016 Efraim Flashner ;;; ;;; This file is part of GNU Guix. ;;; @@ -28,7 +29,7 @@ (define-module (gnu packages ccache) (define-public ccache (package (name "ccache") - (version "3.2.4") + (version "3.2.5") (source (origin (method url-fetch) @@ -36,16 +37,18 @@ (define-public ccache version ".tar.xz")) (sha256 (base32 - "0pga3hvd80f2p7mz88jmmbwzxh4vn5ihyjx5f6na8y2fclzsjg8w")))) + "11db1g109g0g5si0s50yd99ja5f8j4asxb081clvx78r9d9i2w0i")))) (build-system gnu-build-system) - (native-inputs `(("perl" ,perl))) ;for test.sh + (native-inputs `(("perl" ,perl) ;for test.sh + ("which" ,(@ (gnu packages base) which)))) (inputs `(("zlib" ,zlib))) (arguments '(#:phases (alist-cons-before 'check 'setup-tests (lambda _ (substitute* '("test/test_hashutil.c" "test.sh") - (("#!/bin/sh") (string-append "#!" (which "sh")))) + (("#!/bin/sh") (string-append "#!" (which "sh"))) + (("which") (which "which"))) #t) %standard-phases))) (home-page "https://ccache.samba.org/") diff --git a/gnu/packages/cdrom.scm b/gnu/packages/cdrom.scm index 70772bf157..2dd84a2a17 100644 --- a/gnu/packages/cdrom.scm +++ b/gnu/packages/cdrom.scm @@ -130,14 +130,14 @@ (define-public libcdio-paranoia (define-public xorriso (package (name "xorriso") - (version "1.4.2") + (version "1.4.4") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/xorriso/xorriso-" version ".tar.gz")) (sha256 (base32 - "1cq4a0904lnz6nygbgarnlq49cz4qnfdyvz90s3nfk5as7gbwhr8")))) + "1izv8dvwacyh432vv1rm6lyjrq0v205kyakfra6iwa146c9m9fgr")))) (build-system gnu-build-system) (inputs `(("acl" ,acl) @@ -145,7 +145,7 @@ (define-public xorriso ("bzip2" ,bzip2) ("zlib" ,zlib) ("libcdio" ,libcdio))) - (home-page "http://www.gnu.org/software/xorriso/") + (home-page "https://www.gnu.org/software/xorriso/") (synopsis "Create, manipulate, burn ISO-9660 filesystems") (description "GNU Xorriso is a tool for copying files to and from ISO 9660 Rock diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm index 47e0499f7f..af3bba1f61 100644 --- a/gnu/packages/compression.scm +++ b/gnu/packages/compression.scm @@ -10,6 +10,7 @@ ;;; Copyright © 2015, 2016 Efraim Flashner ;;; Copyright © 2016 Ben Woodcroft ;;; Copyright © 2016 Danny Milosavljevic +;;; Copyright © 2016 Tobias Geerinckx-Rice ;;; ;;; This file is part of GNU Guix. ;;; @@ -796,3 +797,39 @@ (define-public cabextract (description "Extracts files out of Microsoft Cabinet (.cab) archives") ;; Some source files specify gpl2+, lgpl2+, however COPYING is gpl3. (license license:gpl3+))) + +(define-public xdelta + (package + (name "xdelta") + (version "3.1.0") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/jmacd/xdelta/archive/v" + version ".tar.gz")) + (sha256 + (base32 + "17g2pbbqy6h20qgdjq7ykib7kg5ajh8fwbsfgyjqg8pwg19wy5bm")) + (file-name (string-append name "-" version ".tar.gz")) + (snippet + ;; This file isn't freely distributable and has no effect on building. + '(delete-file "xdelta3/draft-korn-vcdiff.txt")))) + (build-system gnu-build-system) + (native-inputs + `(("autoconf" ,autoconf) + ("automake" ,automake))) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'enter-build-directory + (lambda _ (chdir "xdelta3"))) + (add-before 'configure 'autoconf + (lambda _ (zero? (system* "autoreconf" "-vfi"))))))) + (home-page "http://xdelta.com") + (synopsis "Delta encoder for binary files") + (description "xdelta encodes only the differences between two binary files +using the VCDIFF algorithm and patch file format described in RFC 3284. It can +also be used to apply such patches. xdelta is similar to @command{diff} and +@command{patch}, but is not limited to plain text and does not generate +human-readable output.") + (license license:asl2.0))) diff --git a/gnu/packages/conkeror.scm b/gnu/packages/conkeror.scm index cfeb22e8c3..d9722a1906 100644 --- a/gnu/packages/conkeror.scm +++ b/gnu/packages/conkeror.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014 Cyrill Schenkel ;;; Copyright © 2014, 2015 Eric Bavier +;;; Copyright © 2016 John J. Foerch ;;; ;;; This file is part of GNU Guix. ;;; @@ -28,16 +29,16 @@ (define-module (gnu packages conkeror) (define-public conkeror (package (name "conkeror") - (version "1.0pre1.20150730") + (version "1.0.3") (source (origin (method url-fetch) (uri - (string-append "http://repo.or.cz/w/conkeror.git/snapshot/" - "a1f7e879b129df5cf14ea4ce80a9c1407380ed58" - ".tar.gz")) ; tag: debian-1.0--pre-1+git150730-1 + (string-append "http://repo.or.cz/conkeror.git/snapshot/" + version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "1q45hc30733gz3ca2ixvw0rzzcbi7rlay7gx7kvzjv17a030nyk0")))) + "0ybmincxw3msnrfpby9gnckbq2x94c7fra2m66zham54cjc7mav3")))) (build-system gnu-build-system) (inputs `(("icecat" ,icecat))) (arguments diff --git a/gnu/packages/crypto.scm b/gnu/packages/crypto.scm index f167f3320c..7d61164b05 100644 --- a/gnu/packages/crypto.scm +++ b/gnu/packages/crypto.scm @@ -3,6 +3,7 @@ ;;; Copyright © 2015 Ricardo Wurmus ;;; Copyright © 2016 Leo Famulari ;;; Copyright © 2016 Lukas Gradl +;;; Copyright © 2016 Tobias Geerinckx-Rice ;;; ;;; This file is part of GNU Guix. ;;; @@ -22,14 +23,18 @@ (define-module (gnu packages crypto) #:use-module (gnu packages) #:use-module (gnu packages autotools) + #:use-module (gnu packages boost) + #:use-module (gnu packages gettext) #:use-module (gnu packages pkg-config) #:use-module (gnu packages libbsd) + #:use-module (gnu packages linux) #:use-module (gnu packages nettle) #:use-module (gnu packages password-utils) + #:use-module (gnu packages perl) #:use-module (gnu packages readline) #:use-module (gnu packages serialization) #:use-module (gnu packages tls) - #:use-module (guix licenses) + #:use-module ((guix licenses) #:prefix license:) #:use-module (guix packages) #:use-module (guix download) #:use-module (guix build-system gnu)) @@ -54,7 +59,7 @@ (define-public libsodium (description "Sodium is a new easy-to-use high-speed software library for network communication, encryption, decryption, signatures, etc.") - (license isc) + (license license:isc) (home-page "http://libsodium.org"))) (define-public signify @@ -91,10 +96,11 @@ (define-public signify (home-page "https://github.com/aperezdc/signify") ;; This package includes third-party code that was originally released under ;; various non-copyleft licenses. See the source files for clarification. - (license (list bsd-3 bsd-4 expat isc public-domain - (non-copyleft "file://base64.c" - "See base64.c in the distribution for - the license from IBM."))))) + (license (list license:bsd-3 license:bsd-4 license:expat license:isc + license:public-domain (license:non-copyleft + "file://base64.c" + "See base64.c in the distribution for + the license from IBM."))))) (define-public opendht @@ -146,4 +152,74 @@ (define-public opendht (description "OpenDHT is a Distributed Hash Table (DHT) library. It may be used to manage peer-to-peer network connections as needed for real time communication.") - (license gpl3))) + (license license:gpl3))) + +(define rlog + (package + (name "rlog") + (version "1.4") + (source + (origin + (method url-fetch) + (uri + (string-append "http://rlog.googlecode.com/files/rlog-" + version ".tar.gz")) + (sha256 + (base32 + "0y9zg0pd7vmnskwac1qdyzl282z7kb01nmn57lsg2mjdxgnywf59")))) + (build-system gnu-build-system) + (arguments + `(#:phases (modify-phases %standard-phases + (add-before 'configure 'patch-/bin/sh + (lambda _ + (substitute* "docs/Makefile.in" + (("/bin/sh") "sh"))))))) + (home-page "http://www.arg0.net/rlog") + (synopsis "Flexible message logging library for EncFS") + (description + "RLog provides message logging for EncFS. It is no longer maintained.") + (license license:lgpl2.1+))) + +(define-public encfs + (package + (name "encfs") + (version "1.8.1") + (source + (origin + (method url-fetch) + (uri + (string-append "https://github.com/vgough/encfs/releases/download/v" + version "/encfs-" version ".tar.gz")) + (sha256 + (base32 + "1lfmcsk187qr6ahy8c8959p7jrk9d5rd9kcsx572850ca3zmf0la")))) + (build-system gnu-build-system) + (arguments + `(#:configure-flags '("--with-boost-serialization=boost_wserialization" + "--with-boost-filesystem=boost_filesystem") + #:phases (modify-phases %standard-phases + (add-before 'configure 'autoconf + (lambda _ + (zero? (system* "autoreconf" "-vfi"))))))) + (native-inputs + `(("autoconf" ,autoconf) + ("automake" ,automake) + ("gettext" ,gnu-gettext) + ("libtool" ,libtool) + ("perl" ,perl) + ("pkg-config" ,pkg-config))) + (inputs + `(("boost" ,boost) + ("fuse" ,fuse) + ("openssl" ,openssl) + ("rlog" ,rlog))) + (home-page "https://vgough.github.io/encfs") + (synopsis "Encrypted virtual file system") + (description + "EncFS creates a virtual encrypted file system in user-space. Each file +created under an EncFS mount point is stored as a separate encrypted file on +the underlying file system. Like most encrypted file systems, EncFS is meant +to provide security against off-line attacks, such as a drive falling into +the wrong hands.") + (license (list license:lgpl3+ ;encfs library + license:gpl3+)))) ;command-line tools diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm index 4f2f211fb3..fdee887af7 100644 --- a/gnu/packages/databases.scm +++ b/gnu/packages/databases.scm @@ -8,7 +8,7 @@ ;;; Copyright © 2015 Sou Bunnbu ;;; Copyright © 2015 Leo Famulari ;;; Copyright © 2016 Efraim Flashner -;;; Copyright © 2016 Nils Gillmann +;;; Copyright © 2016 ng0 ;;; Copyright © 2016 Roel Janssen ;;; ;;; This file is part of GNU Guix. diff --git a/gnu/packages/datastructures.scm b/gnu/packages/datastructures.scm index 74b9fff4af..b9e6061238 100644 --- a/gnu/packages/datastructures.scm +++ b/gnu/packages/datastructures.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015, 2016 Ricardo Wurmus +;;; Copyright © 2016 Tobias Geerinckx-Rice ;;; ;;; This file is part of GNU Guix. ;;; @@ -70,3 +71,24 @@ (define-public sparsehash and time-efficient for good hash functions.") (home-page "https://github.com/sparsehash/sparsehash") (license license:bsd-3))) + +(define-public ssdeep + (package + (name "ssdeep") + (version "2.13") + (source (origin + (method url-fetch) + (uri (string-append "mirror://sourceforge/ssdeep/" + name "-" version "/" + name "-" version ".tar.gz")) + (sha256 + (base32 + "1igqy0j7jrklb8fdlrm6ald4cyl1fda5ipfl8crzyl6bax2ajk3f")))) + (build-system gnu-build-system) + (home-page "http://ssdeep.sourceforge.net") + (synopsis "Context-triggered piecewise hashing algorithm") + (description "ssdeep computes and matches context triggered piecewise +hashes (CTPH), also called fuzzy checksums. It can identify similar files +that have sequences of identical bytes in the same order, even though bytes +in between these sequences may be different in both content and length.") + (license license:gpl2+))) diff --git a/gnu/packages/disk.scm b/gnu/packages/disk.scm index c60eacb15e..54f23db01e 100644 --- a/gnu/packages/disk.scm +++ b/gnu/packages/disk.scm @@ -2,8 +2,9 @@ ;;; Copyright © 2012, 2013 Nikita Karetnikov ;;; Copyright © 2015 Mathieu Lirzin ;;; Copyright © 2015 Mark H Weaver -;;; Copyright © 2016 Tobias Geerinckx-Rice +;;; Copyright © 2016 Tobias Geerinckx-Rice ;;; Copyright © 2016 Efraim Flashner +;;; Copyright © 2016 Jan Nieuwenhuizen ;;; ;;; This file is part of GNU Guix. ;;; @@ -25,9 +26,12 @@ (define-module (gnu packages disk) #:use-module (guix packages) #:use-module (guix download) #:use-module (guix build-system gnu) + #:use-module (gnu packages) #:use-module (gnu packages gettext) #:use-module (gnu packages linux) + #:use-module (gnu packages ncurses) #:use-module (gnu packages perl) + #:use-module (gnu packages popt) #:use-module (gnu packages python) #:use-module (gnu packages readline) #:use-module (gnu packages guile) @@ -97,6 +101,46 @@ (define-public fdisk tables, and it understands a variety of different formats.") (license gpl3+))) +(define-public gptfdisk + (package + (name "gptfdisk") + (version "1.0.1") + (source + (origin + (method url-fetch) + (uri (string-append "mirror://sourceforge/gptfdisk/gptfdisk/" + version "/" name "-" version ".tar.gz")) + (sha256 + (base32 + "1izazbyv5n2d81qdym77i8mg9m870hiydmq4d0s51npx5vp8lk46")))) + (build-system gnu-build-system) + (inputs + `(("gettext" ,gnu-gettext) + ("ncurses" ,ncurses) + ("popt" ,popt) + ("util-linux" ,util-linux))) ; libuuid + (arguments + `(#:test-target "test" + #:phases + (modify-phases %standard-phases + ;; no configure script + (delete 'configure) + ;; no install target + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let ((bin (string-append (assoc-ref outputs "out") "/bin"))) + (install-file "gdisk" bin) + (install-file "sgdisk" bin) + (install-file "cgdisk" bin) + (install-file "fixparts" bin))))))) + (home-page "http://www.rodsbooks.com/gdisk/") + (synopsis "Low-level GPT disk partitioning and formatting") + (description "GPT fdisk (aka gdisk) is a text-mode partitioning tool that +works on Globally Unique Identifier (GUID) Partition Table (GPT) disks, rather +than on the more common (through 2009) Master Boot Record (MBR) partition +tables.") + (license gpl2))) + (define-public ddrescue (package (name "ddrescue") diff --git a/gnu/packages/documentation.scm b/gnu/packages/documentation.scm index 17a69e2c25..8302cc49cc 100644 --- a/gnu/packages/documentation.scm +++ b/gnu/packages/documentation.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2014 Ludovic Courtès ;;; Copyright © 2014, 2016 Andreas Enge ;;; Copyright © 2016 Eric Bavier +;;; Copyright © 2016 Roel Janssen ;;; ;;; This file is part of GNU Guix. ;;; @@ -27,9 +28,11 @@ (define-module (gnu packages documentation) #:use-module (gnu packages) #:use-module (gnu packages python) #:use-module (gnu packages bison) + #:use-module (gnu packages docbook) #:use-module (gnu packages flex) #:use-module (gnu packages graphviz) #:use-module (gnu packages gettext) + #:use-module (gnu packages glib) #:use-module (gnu packages perl) #:use-module (gnu packages xml) #:autoload (gnu packages zip) (unzip)) @@ -115,3 +118,38 @@ (define-public doc++ brwosing. The documentation is extracted directly from the C/C++/IDL source or Java class files.") (license gpl2+))) + +(define-public scrollkeeper + (package + (name "scrollkeeper") + (version "0.3.14") + (source + (origin + (method url-fetch) + (uri (string-append "mirror://sourceforge/scrollkeeper/scrollkeeper-" + version ".tar.gz")) + (sha256 + (base32 "1bfxwxc1ngh11v36z899sz9qam366r050fhkyb5adv65lb1x62sa")))) + (build-system gnu-build-system) + (arguments + `(#:configure-flags + (list (string-append "--with-xml-catalog=" + (assoc-ref %build-inputs "docbook-xml") + "/xml/dtd/docbook/catalog.xml")))) + (inputs + `(("perl" ,perl) + ("libxml2" ,libxml2) + ("libxslt" ,libxslt) + ;; The configure script checks for either version 4.2 or 4.1.2. + ("docbook-xml" ,docbook-xml-4.2))) + (native-inputs + `(("intltool" ,intltool))) + (home-page "http://scrollkeeper.sourceforge.net/") + (synopsis "Open Documentation Cataloging Project") + (description "ScrollKeeper is a cataloging system for documentation on open +systems. It manages documentation metadata as specified by the Open Source +Metadata Framework and provides a simple API to allow help browsers to find, +sort, and search the document catalog. It will also be able to communicate +with catalog servers on the Net to search for documents which are not on the +local system.") + (license lgpl2.1+))) diff --git a/gnu/packages/ebook.scm b/gnu/packages/ebook.scm index f7e15584f3..69946b1e78 100644 --- a/gnu/packages/ebook.scm +++ b/gnu/packages/ebook.scm @@ -61,7 +61,7 @@ (define-public chmlib (define-public calibre (package (name "calibre") - (version "2.58.0") + (version "2.62.0") (source (origin (method url-fetch) @@ -70,7 +70,7 @@ (define-public calibre version ".tar.xz")) (sha256 (base32 - "0npqvfjqj1vwa7nmnsyd4d30z40brydw275ldf1jankrp6dr9dyd")) + "15qskfsdg3fy9cpw1m3mccwgn45366yn7lci5kim0fdzpw9pnkna")) ;; Remove non-free or doubtful code, see ;; https://lists.gnu.org/archive/html/guix-devel/2015-02/msg00478.html (modules '((guix build utils))) diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm index 7b60722c10..926db42a46 100644 --- a/gnu/packages/emacs.scm +++ b/gnu/packages/emacs.scm @@ -5,7 +5,6 @@ ;;; Copyright © 2014, 2015, 2016 Alex Kost ;;; Copyright © 2015 Federico Beffa ;;; Copyright © 2015, 2016 Ricardo Wurmus -;;; Copyright © 2016 Nils Gillmann ;;; Copyright © 2016 Chris Marusich ;;; Copyright © 2015, 2016 Christopher Allan Webber ;;; Copyright © 2016 humanitiesNerd @@ -47,6 +46,7 @@ (define-module (gnu packages emacs) #:use-module (gnu packages gtk) #:use-module (gnu packages gnome) #:use-module (gnu packages ncurses) + #:use-module (gnu packages tex) #:use-module (gnu packages texinfo) #:use-module (gnu packages tls) #:use-module (gnu packages pkg-config) @@ -68,6 +68,7 @@ (define-module (gnu packages emacs) #:use-module (gnu packages perl) #:use-module (gnu packages pdf) #:use-module (gnu packages scheme) + #:use-module (gnu packages statistics) #:use-module (gnu packages xiph) #:use-module (gnu packages mp3) #:use-module (guix utils) @@ -554,6 +555,31 @@ (define-public magit-svn support for Git-SVN.") (license license:gpl3+))) +(define-public emacs-magit-popup + (package + (name "emacs-magit-popup") + (version (package-version magit)) + (source (origin + (method url-fetch) + (uri (string-append + "https://raw.githubusercontent.com/magit/magit/" + version "/lisp/magit-popup.el")) + (file-name (string-append "magit-popup-" version ".el")) + (sha256 + (base32 + "144nl7j5mn86ccan6qxgg40bsxpkbc83vwnhd5y657gqki74972r")))) + (build-system emacs-build-system) + (propagated-inputs + `(("emacs-dash" ,emacs-dash))) + (home-page "https://github.com/magit/magit") + (synopsis "Define prefix-infix-suffix command combos") + (description + "This library implements a generic interface for toggling switches and +setting options and then invoking an Emacs command which does something with +these arguments. The prototypical use is for the command to call an external +process, passing on the arguments as command line arguments.") + (license license:gpl3+))) + (define-public haskell-mode (package (name "haskell-mode") @@ -664,7 +690,7 @@ (define-public let-alist (define-public flycheck (package (name "emacs-flycheck") - (version "0.23") + (version "28") (source (origin (method url-fetch) (uri (string-append @@ -672,11 +698,12 @@ (define-public flycheck version "/flycheck-" version ".tar")) (sha256 (base32 - "1n2cifzsl5dbv42l82bi3y1vk6q33msi8dd4bj7b9nvnl9jfjj5b")))) + "1yjxivk11d7w39zfhj2xr4h6xhwx1aj6yhyzd63rjrad7xpjfl86")))) (build-system emacs-build-system) (propagated-inputs `(("emacs-dash" ,emacs-dash) - ("emacs-let-alist" ,let-alist))) + ("emacs-let-alist" ,let-alist) + ("emacs-seq" ,emacs-seq))) (home-page "https://www.flycheck.org") (synopsis "On-the-fly syntax checking") (description @@ -821,7 +848,7 @@ (define-public emacs-wget (define-public emms (package - (name "emms") + (name "emacs-emms") (version "4.1") (source (origin (method url-fetch) @@ -933,6 +960,29 @@ (define-public emms (home-page "http://www.gnu.org/software/emms/") (license license:gpl3+))) +(define-public emacs-emms-player-mpv + (package + (name "emacs-emms-player-mpv") + (version "0.0.8") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/dochang/emms-player-mpv/archive/" + version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "01wj410dpx25b3i8781i2j9c6nlvzvvphy9qgh7zfpmyz6a3wsm4")))) + (build-system emacs-build-system) + (propagated-inputs + `(("emms" ,emms))) + (home-page "https://github.com/dochang/emms-player-mpv/") + (synopsis "Mpv support for EMMS") + (description + "This package provides an EMMS player that uses mpv. It supports pause +and seeking.") + (license license:gpl3+))) + ;;; ;;; Miscellaneous. @@ -1225,6 +1275,317 @@ (define-public emacs-f files and directories.") (license license:gpl3+))) +(define-public emacs-el-mock + (package + (name "emacs-el-mock") + (version "1.25.1") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/rejeep/el-mock.el/" + "archive/v" version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "16xw94n58xxn3zvgyj72bmzs0k5lkvswjmzs79ws9n7rzdivb38b")))) + (build-system emacs-build-system) + (home-page "http://github.com/rejeep/el-mock.el") + (synopsis "Tiny mock and stub framework in Emacs Lisp") + (description + "Emacs Lisp Mock is a library for mocking and stubbing using readable +syntax. Most commonly Emacs Lisp Mock is used in conjunction with Emacs Lisp +Expectations, but it can be used in other contexts.") + (license license:gpl3+))) + +(define-public emacs-espuds + (package + (name "emacs-espuds") + (version "0.3.3") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/ecukes/espuds/" + "archive/v" version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "0xv551376pbmh735a3zjwc9z4qdx6ngj1vpq3xqjpn0a1rwjyn4k")))) + (build-system emacs-build-system) + (propagated-inputs + `(("emacs-s" ,emacs-s) + ("emacs-dash" ,emacs-dash) + ("emacs-f" ,emacs-f))) + (home-page "http://github.com/ecukes/espuds") + (synopsis "Common step definitions for Ecukes") + (description "Espuds is a collection of the most commonly used step +definitions for testing with the Ecukes framework.") + (license license:gpl3+))) + +(define-public emacs-expand-region + (package + (name "emacs-expand-region") + (version "0.10.0") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/magnars/expand-region.el" + "/archive/" version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1zfiaqyb3zqiyqjkpqsjw660j09805nqsg25q6ars2h8gs0rnvxb")))) + (build-system emacs-build-system) + (home-page "https://github.com/magnars/expand-region.el") + (synopsis "Increase selected region by semantic units") + (description + "Expand region increases the selected region by semantic units. Just +keep pressing the key until it selects what you want. There's also +@code{er/contract-region} if you expand too far.") + (license license:gpl3+))) + +(define-public emacs-fill-column-indicator + (package + (name "emacs-fill-column-indicator") + (version "1.81") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/alpaker/Fill-Column-Indicator" + "/archive/v" version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1xwyqbjbbicmvhlb85vg4j5snwy1vd7rfk89ws4viws5ljkhhyg8")))) + (build-system emacs-build-system) + (home-page "https://www.emacswiki.org/emacs/FillColumnIndicator") + (synopsis "Graphically indicate the fill column") + (description + "Fill-column-indicator graphically indicates the location of the fill +column by drawing a thin line down the length of the editing window.") + (license license:gpl3+))) + +(define-public emacs-znc + (package + (name "emacs-znc") + (version "0.0.2") + (source + (origin + (method url-fetch) + (uri (string-append "https://marmalade-repo.org/packages/znc-" + version ".el")) + (sha256 + (base32 + "1d8lqvybgyazin5z0g1c4l3rg1vzrrvf0saqs53jr1zcdg0lianh")))) + (build-system emacs-build-system) + (home-page "https://github.com/sshirokov/ZNC.el") + (synopsis "Make ERC and ZNC get along better") + (description + "This is a thin wrapper around @code{erc} that enables one to use the ZNC +IRC bouncer with ERC.") + (license license:expat))) + +(define-public emacs-shut-up + (package + (name "emacs-shut-up") + (version "0.3.2") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/cask/shut-up/" + "archive/v" version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "09kzrjdkb569iviyg7ydwq44yh84m3f9hkl7jizfrlk0w4gz67d1")))) + (build-system emacs-build-system) + (home-page "https://github.com/cask/shut-up") + (synopsis "Silence Emacs") + (description "This package silences most output of Emacs when running an +Emacs shell script.") + (license license:expat))) + +(define-public emacs-undercover + (package + (name "emacs-undercover") + (version "0.6.0") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/sviridov/undercover.el/" + "archive/v" version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "0f48fi0xnbsqs382rgh85m9mq1wdnr0yib7as9xhwzvq0hsr5m0a")))) + (build-system emacs-build-system) + (propagated-inputs + `(("emacs-dash" ,emacs-dash) + ("emacs-shut-up" ,emacs-shut-up))) + (home-page "https://github.com/sviridov/undercover.el") + (synopsis "Test coverage library for Emacs Lisp") + (description + "Undercover is a test coverage library for software written in Emacs +Lisp.") + (license license:expat))) + +(define-public emacs-paren-face + (package + (name "emacs-paren-face") + (version "1.0.0") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/tarsius/paren-face/archive/" + version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "0y4qrhxa9332vsvr999jg7qj1ymnfgwpf591yi4a4jgg90pm7qnn")))) + (build-system emacs-build-system) + (home-page "http://github.com/tarsius/paren-face") + (synopsis "Face for parentheses in lisp modes") + (description + "This library defines a face named @code{parenthesis} used just for +parentheses. The intended purpose of this face is to make parentheses less +visible in Lisp code by dimming them. Lispers probably don't need to be +constantly made aware of the existence of the parentheses. Dimming them might +be even more useful for people new to lisp who have not yet learned to +subconsciously blend out the parentheses.") + (license license:gpl3+))) + +(define-public emacs-page-break-lines + (package + (name "emacs-page-break-lines") + (version "0.11") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/purcell/page-break-lines/" + "archive/" version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1zzhziq5kbrm9rxk30kx2glz455fp1blqxg8cpcf6l8xl3w8z4pg")))) + (build-system emacs-build-system) + (home-page "https://github.com/purcell/page-break-lines") + (synopsis "Display page breaks as tidy horizontal lines") + (description + "This library provides a global mode which displays form feed characters +as horizontal rules.") + (license license:gpl3+))) + +(define-public emacs-simple-httpd + (package + (name "emacs-simple-httpd") + (version "1.4.6") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/skeeto/emacs-web-server/" + "archive/" version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "01r7h3imnj4qx1m53a2wjafvbylcyz5f9r2rg2cs7ky3chlg220r")))) + (build-system emacs-build-system) + (home-page "https://github.com/skeeto/emacs-http-server") + (synopsis "HTTP server in pure Emacs Lisp") + (description + "This package provides a simple HTTP server written in Emacs Lisp to +serve files and directory listings.") + (license license:unlicense))) + +(define-public emacs-skewer-mode + (package + (name "emacs-skewer-mode") + (version "1.6.2") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/skeeto/skewer-mode/archive/" + version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "07jpz374j0j964szy3zznrkyja2kpdl3xa87wh7349mzxivqxdx0")))) + (build-system emacs-build-system) + (propagated-inputs + `(("emacs-simple-httpd" ,emacs-simple-httpd) + ("emacs-js2-mode" ,emacs-js2-mode))) + (home-page "https://github.com/skeeto/skewer-mode") + (synopsis "Live web development in Emacs") + (description + "Skewer-mode provides live interaction with JavaScript, CSS, and HTML in +a web browser. Expressions are sent on-the-fly from an editing buffer to be +evaluated in the browser, just like Emacs does with an inferior Lisp process +in Lisp modes.") + (license license:unlicense))) + +(define-public emacs-rich-minority + (package + (name "emacs-rich-minority") + (version "1.0.1") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/Malabarba/rich-minority/" + "archive/" version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1l0cb0q7kyi88nwfqd542psnkgwnjklpzc5rx32gzd3lkwkrbr8v")))) + (build-system emacs-build-system) + (home-page "https://github.com/Malabarba/rich-minority") + (synopsis "Clean-up and beautify the list of minor modes") + (description + "This Emacs package hides and/or highlights minor modes in the +mode-line.") + (license license:gpl2+))) + +(define-public emacs-smart-mode-line + (package + (name "emacs-smart-mode-line") + (version "2.10.1") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/Malabarba/smart-mode-line/" + "archive/" version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "0i9wajabrrsjzwd842q0m2611kf0q31p9hg1pdj81177gynkw8l8")))) + (build-system emacs-build-system) + (propagated-inputs + `(("emacs-rich-minority" ,emacs-rich-minority))) + (home-page "http://github.com/Malabarba/smart-mode-line") + (synopsis "Color-coded smart mode-line.") + (description + "Smart Mode Line is a mode-line theme for Emacs. It aims to be easy to +read from small to large monitors by using colors, a prefix feature, and smart +truncation.") + (license license:gpl2+))) + +(define-public emacs-shell-switcher + (package + (name "emacs-shell-switcher") + (version "1.0.1") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/DamienCassou/shell-switcher" + "/archive/v" version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1c23mfkdqz2g9rixd9smm323vzlvhzz3ng34ambcqjfq309qb2nz")))) + (build-system emacs-build-system) + (home-page "https://github.com/DamienCassou/shell-switcher") + (synopsis "Provide fast switching between shell buffers") + (description + "This package provides commands to quickly switch between shell buffers.") + (license license:gpl3+))) + (define-public emacs-ob-ipython (package (name "emacs-ob-ipython") @@ -1482,10 +1843,34 @@ (define-public emacs-constants constants and units into an Emacs buffer.") (license license:gpl2+))) +(define-public emacs-tagedit + (package + (name "emacs-tagedit") + (version "1.4.0") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/magnars/tagedit/" + "archive/" version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1apfnann4qklfdsmdi7icjsj18x7gwx8d83iqr4z25clszz95xfq")))) + (build-system emacs-build-system) + (propagated-inputs + `(("emacs-s" ,emacs-s) + ("emacs-dash" ,emacs-dash))) + (home-page "https://github.com/magnars/tagedit") + (synopsis "Some paredit-like features for html-mode") + (description + "This package provides a collection of paredit-like functions for editing +in @code{html-mode}.") + (license license:gpl3+))) + (define-public emacs-slime (package (name "emacs-slime") - (version "2.15") + (version "2.18") (source (origin (file-name (string-append name "-" version ".tar.gz")) @@ -1495,7 +1880,7 @@ (define-public emacs-slime version ".tar.gz")) (sha256 (base32 - "0l2z6l2xm78mhh0nczkrmzh2ddb1n911ij9xb6q40zwvx4f8blds")))) + "146avwbwr6mw0nmgyihx8gkr0mv6al7a73igzxvysj62000cqvlj")))) (build-system emacs-build-system) (native-inputs `(("texinfo" ,texinfo))) @@ -1680,6 +2065,30 @@ (define-public emacs-zenburn-theme It is built on top of the custom theme support in Emacs 24 or later.") (license license:gpl3+))) +(define-public emacs-solarized-theme + (package + (name "emacs-solarized-theme") + (version "1.2.2") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/bbatsov/solarized-emacs/" + "archive/v" version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1ha3slc6d9wi9ilkhmwrzkvf308n6ph7b0k69pk369s9304awxzx")))) + (build-system emacs-build-system) + (propagated-inputs + `(("emacs-dash" ,emacs-dash) + ("emacs-f" ,emacs-f) + ("emacs-s" ,emacs-s))) + (home-page "http://github.com/bbatsov/solarized-emacs") + (synopsis "Port of the Solarized theme for Emacs") + (description + "Solarized for Emacs is a port of the Solarized theme for Vim. This +package provides a light and a dark variant.") + (license license:gpl3+))) + (define-public emacs-smartparens (package (name "emacs-smartparens") @@ -1709,6 +2118,55 @@ (define-public emacs-smartparens well as completely new features.") (license license:gpl3+))) +(define-public emacs-hl-todo + (package + (name "emacs-hl-todo") + (version "1.7.0") + (source (origin + (method url-fetch) + (uri (string-append + "https://raw.githubusercontent.com/tarsius/hl-todo/" + version "/hl-todo.el")) + (sha256 + (base32 + "18zydm43zajlglhgr0bhdkd4pln27amd063k2ql6p1mvyam3j8ia")))) + (build-system emacs-build-system) + (home-page "https://github.com/tarsius/hl-todo") + (synopsis "Emacs mode to highlight TODO and similar keywords") + (description + "This package provides an Emacs mode to highlight TODO and similar +keywords in comments and strings. This package also provides commands for +moving to the next or previous keyword and to invoke @code{occur} with a +regexp that matches all known keywords.") + (license license:gpl3+))) + +(define-public emacs-perspective + (package + (name "emacs-perspective") + (version "1.12") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/nex3/perspective-el/" + "archive/" version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "078ahh0kmhdylq5ib9c81c76kz1n02xwc83pm729d00i84ibviic")))) + (build-system emacs-build-system) + (home-page "http://github.com/nex3/perspective-el") + (synopsis "Switch between named \"perspectives\"") + (description + "This package provides tagged workspaces in Emacs, similar to workspaces in +windows managers such as Awesome and XMonad. @code{perspective.el} provides +multiple workspaces (or \"perspectives\") for each Emacs frame. Each +perspective is composed of a window configuration and a set of buffers. +Switching to a perspective activates its window configuration, and when in a +perspective only its buffers are available by default.") + ;; This package is released under the same license as Emacs (GPLv3+) or + ;; the Expat license. + (license license:gpl3+))) + (define-public emacs-hydra (package (name "emacs-hydra") @@ -2021,6 +2479,65 @@ (define-public emacs-better-defaults agree upon.") (license license:gpl3+))) +(define-public emacs-eprime + (let ((commit "17a481af26496be91c07139a9bfc05cfe722506f")) + (package + (name "emacs-eprime") + (version (string-append "20140513-" (string-take commit 7))) + (source (origin + (method url-fetch) + (uri (string-append "https://raw.githubusercontent.com" + "/AndrewHynes/eprime-mode/" + commit "/eprime-mode.el")) + (file-name (string-append "eprime-" version ".el")) + (sha256 + (base32 + "0v68lggkyq7kbcr9zyi573m2g2x251xy3jadlaw8kx02l8krwq8d")))) + (build-system emacs-build-system) + (home-page "https://github.com/AndrewHynes/eprime-mode") + (synopsis "E-prime checking mode for Emacs") + (description "This package provides an E-prime checking mode for Emacs +that highlights non-conforming text. The subset of the English language called +E-Prime forbids the use of the \"to be\" form to strengthen your writing.") + (license license:gpl3+)))) + +(define-public emacs-ess + (package + (name "emacs-ess") + (version "16.04") + (source (origin + (method url-fetch) + (uri (string-append "http://ess.r-project.org/downloads/ess/ess-" + version ".tgz")) + (sha256 + (base32 + "0w7mbbajn377gdmvnd21mpyr368b2ia46gq6cb99y4y5rspf9pcg")))) + (build-system gnu-build-system) + (arguments + `(#:tests? #f ; There is no test suite. + #:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out"))) + #:phases + (modify-phases %standard-phases + (delete 'configure) + (add-before 'build 'more-shebang-patching + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "Makeconf" + (("SHELL = /bin/sh") + (string-append "SHELL = " (which "sh"))))))))) + (inputs + `(("emacs" ,emacs-minimal) + ("r" ,r))) + (native-inputs + `(("perl" ,perl) + ("texinfo" ,texinfo) + ("texlive" ,texlive))) + (home-page "http://ess.r-project.org/") + (synopsis "Emacs mode for statistical analysis programs") + (description "Emacs Speaks Statistics (ESS) is an add-on package for GNU +Emacs. It is designed to support editing of scripts and interaction with +various statistical analysis programs such as R and OpenBUGS.") + (license license:gpl2+))) + (define-public emacs-smex (package (name "emacs-smex") @@ -2273,7 +2790,7 @@ (define-public emacs-web-mode (define-public emacs-helm (package (name "emacs-helm") - (version "1.9.6") + (version "1.9.8") (source (origin (method url-fetch) (uri (string-append @@ -2282,7 +2799,7 @@ (define-public emacs-helm (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "0fc897rwf1fm2m7jrsikkgcyzhngfcysxfmzchpwzfj6v9sb5rl9")))) + "019dpzr6l83k1fgxn40aqxjvrpz4dl5d9vi7fc5wjnifmxaqxia6")))) (build-system emacs-build-system) (propagated-inputs `(("emacs-async" ,emacs-async) diff --git a/gnu/packages/engineering.scm b/gnu/packages/engineering.scm index 7b21c11ad3..b3e4431138 100644 --- a/gnu/packages/engineering.scm +++ b/gnu/packages/engineering.scm @@ -58,7 +58,7 @@ (define-module (gnu packages engineering) (define-public librecad (package (name "librecad") - (version "2.0.11") + (version "2.1.1") (source (origin (method url-fetch) (uri (string-append @@ -67,7 +67,7 @@ (define-public librecad (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "0jda23qspziph6fwgq1q3nmnllbgn9kwfpjylv1f0wa7c5l85gh5")))) + "132vv9pzbx64zmbnikyg06d4j47yzlmwi4mywxnd9gkaik4yd2kb")))) (build-system gnu-build-system) (arguments '(#:phases @@ -108,26 +108,25 @@ (define-public librecad (define-public geda-gaf (package (name "geda-gaf") - (version "1.8.2") + (version "1.9.2") (source (origin (method url-fetch) (uri (string-append - "http://ftp.geda-project.org/geda-gaf/stable/v" + "http://ftp.geda-project.org/geda-gaf/unstable/v" (version-major+minor version) "/" version "/geda-gaf-" version ".tar.gz")) (sha256 (base32 - "08dpa506xk4gjbbi8vnxcb640wq4ihlgmhzlssl52nhvxwx7gx5v")))) + "14mk45pfz11v54q66gafw2l68n1p5ssvvjmdm8ffgc8x1w5ajfrz")))) (build-system gnu-build-system) (arguments '(#:phases - ;; tests require a writable HOME - (alist-cons-before - 'check 'set-home - (lambda _ - (setenv "HOME" (getenv "TMPDIR"))) - %standard-phases - ) + (modify-phases %standard-phases + ;; tests require a writable HOME + (add-before 'check 'set-home + (lambda _ + (setenv "HOME" (getenv "TMPDIR")) + #t))) #:configure-flags (let ((pcb (assoc-ref %build-inputs "pcb"))) (list (string-append "--with-pcb-datadir=" pcb "/share") @@ -229,10 +228,6 @@ (define-public fastcap (snippet ;; Remove a non-free file. '(delete-file "doc/psfig.sty")) - (modules '((guix build utils) - (guix build download) - (guix ftp-client))) - (imported-modules modules) (patches (search-patches "fastcap-mulSetup.patch" "fastcap-mulGlobal.patch")))) (build-system gnu-build-system) diff --git a/gnu/packages/enlightenment.scm b/gnu/packages/enlightenment.scm index 2a606ebd7e..a8187f8f85 100644 --- a/gnu/packages/enlightenment.scm +++ b/gnu/packages/enlightenment.scm @@ -47,7 +47,6 @@ (define-module (gnu packages enlightenment) #:use-module (gnu packages pulseaudio) #:use-module (gnu packages python) #:use-module (gnu packages tls) - #:use-module (gnu packages valgrind) #:use-module (gnu packages video) #:use-module (gnu packages xorg)) @@ -93,7 +92,6 @@ (define-public efl ("mesa" ,mesa) ("printproto" ,printproto) ("scrnsaverproto" ,scrnsaverproto) - ("valgrind" ,valgrind) ("xextproto" ,xextproto) ("xinput" ,xinput) ("xpr" ,xpr) @@ -118,12 +116,11 @@ (define-public efl (arguments `(#:configure-flags '("--disable-silent-rules") #:phases - (alist-cons-before - 'configure 'patch-config-files - (lambda _ - (substitute* "po/Makefile.in.in" - (("/bin/sh") (which "bash")))) - %standard-phases))) + (modify-phases %standard-phases + (add-before 'configure 'patch-config-files + (lambda _ + (substitute* "po/Makefile.in.in" + (("/bin/sh") (which "bash")))))))) (home-page "http://www.enlightenment.org") (synopsis "Enlightenment Foundation Libraries") (description @@ -273,7 +270,7 @@ (define-public rage (define-public enlightenment (package (name "enlightenment") - (version "0.20.9") + (version "0.21.0") (source (origin (method url-fetch) (uri @@ -281,7 +278,7 @@ (define-public enlightenment name "/" name "-" version ".tar.xz")) (sha256 (base32 - "1gniy7i3mg3q9cgqf004lvnv397yncdr2b7w1gzj69bvv7a2lyfv")))) + "0p85dmk9ysbf9y7vlc92z7495mh9l860xj3s8pspy9mscv3dnwg9")))) (build-system gnu-build-system) (arguments `(#:configure-flags '("--enable-mount-eeze"))) diff --git a/gnu/packages/flashing-tools.scm b/gnu/packages/flashing-tools.scm index 0ab8bc57ee..e3f8d80c02 100644 --- a/gnu/packages/flashing-tools.scm +++ b/gnu/packages/flashing-tools.scm @@ -90,12 +90,11 @@ (define-public avrdude version ".tar.gz")) (sha256 (base32 - "0frxg0q09nrm95z7ymzddx7ysl77ilfbdix1m81d9jjpiv5bm64y")) - (patches (search-patches "avrdude-fix-libusb.patch")))) + "0frxg0q09nrm95z7ymzddx7ysl77ilfbdix1m81d9jjpiv5bm64y")))) (build-system gnu-build-system) (inputs `(("libelf" ,libelf) - ("libusb" ,libusb) + ("libusb" ,libusb-compat) ("libftdi" ,libftdi))) (native-inputs `(("bison" ,bison) diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm index 4b8a278610..3faeb2ebd8 100644 --- a/gnu/packages/fonts.scm +++ b/gnu/packages/fonts.scm @@ -6,7 +6,8 @@ ;;; Copyright © 2015 Sou Bunnbu ;;; Copyright © 2015 Eric Dvorsak ;;; Copyright © 2015 Ricardo Wurmus -;;; Copyright © 2016 Nils Gillmann +;;; Copyright © 2015, 2016 Leo Famulari +;;; Copyright © 2016 ng0 ;;; Copyright © 2016 Jookia <166291@gmail.com> ;;; Copyright © 2016 Eric Bavier ;;; Copyright © 2016 Dmitry Nikolaev @@ -599,15 +600,15 @@ (define-public font-anonymous-pro (define-public font-gnu-unifont (package (name "font-gnu-unifont") - (version "8.0.01") + (version "9.0.01") (source (origin (method url-fetch) (uri (string-append - "mirror://gnu/unifont/unifont-8.0.01/unifont-" + "mirror://gnu/unifont/unifont-" version "/unifont-" version ".tar.gz")) (sha256 (base32 - "176bzc2y3i49xavrmbyyz5lkqp0qq3bkj7rjrl197kib873by82b")))) + "14z4lx6asa94i73m19lsdgzqjn9xzi8320h3dafvzq9ima94pm9b")))) (build-system gnu-build-system) (outputs '("out" ; TrueType version "pcf" ; PCF (bitmap) version diff --git a/gnu/packages/freedesktop.scm b/gnu/packages/freedesktop.scm index 53bd757c1d..458331d703 100644 --- a/gnu/packages/freedesktop.scm +++ b/gnu/packages/freedesktop.scm @@ -82,14 +82,14 @@ (define-public xdg-utils (define-public libinput (package (name "libinput") - (version "1.3.0") + (version "1.4.0") (source (origin (method url-fetch) (uri (string-append "https://freedesktop.org/software/libinput/" name "-" version ".tar.xz")) (sha256 (base32 - "1sn1s1bz06fa49izqkqf519sjclsvhf42i6slzx1w5hx4vxpb2lr")))) + "085lcxy111j8r1lwyghsc6zrysqh0vg8xip5axxsdl8r8n3i1vvn")))) (build-system gnu-build-system) (native-inputs `(("pkg-config" ,pkg-config))) @@ -99,7 +99,7 @@ (define-public libinput `(("libevdev" ,libevdev) ("mtdev" ,mtdev) ("libwacom" ,libwacom))) - (home-page "http://www.freedesktop.org/wiki/Software/libinput/") + (home-page "https://www.freedesktop.org/wiki/Software/libinput/") (synopsis "Input devices handling library") (description "Libinput is a library to handle input devices for display servers and diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm index 6036ce3e19..731e243f46 100644 --- a/gnu/packages/games.scm +++ b/gnu/packages/games.scm @@ -17,7 +17,7 @@ ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer ;;; Copyright © 2016 Rodger Fox ;;; Copyright © 2016 Manolis Fragkiskos Ragkousis -;;; Copyright © 2016 Nils Gillmann +;;; Copyright © 2016 ng0 ;;; Copyright © 2016 Albin Söderqvist ;;; Copyright © 2016 Kei Kebreau ;;; Copyright © 2016 Alex Griffin @@ -2493,3 +2493,39 @@ (define-public starfighter license:cc-by-sa3.0 license:cc0 license:public-domain)))) + +(define-public chromium-bsu + (package + (name "chromium-bsu") + (version "0.9.15.1") + (source (origin + (method url-fetch) + (uri (string-append "mirror://sourceforge/" name + "/Chromium B.S.U. source code/" + name "-" version ".tar.gz")) + (sha256 + (base32 + "01c4mki0rpz6wrqbf18fj4vd7axln5v0xqm80cyksbv63g04s6w6")))) + (build-system gnu-build-system) + (arguments + `(#:phases (modify-phases %standard-phases + (add-after 'set-paths 'set-sdl-paths + (lambda* (#:key inputs #:allow-other-keys) + (setenv "CPATH" + (string-append (assoc-ref inputs "sdl-union") + "/include/SDL")) + #t))))) + (native-inputs `(("pkg-config" ,pkg-config))) + (inputs `(("glu" ,glu) + ("quesoglc" ,quesoglc) + ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer))))) + (home-page "http://chromium-bsu.sourceforge.net/") + (synopsis "Fast-paced, arcade-style, top-scrolling space shooter") + (description + "In this game you are the captain of the cargo ship Chromium B.S.U. and +are responsible for delivering supplies to the troops on the front line. Your +ship has a small fleet of robotic fighters which you control from the relative +safety of the Chromium vessel.") + ;; Clarified Artistic License for everything but sound, which is covered + ;; by the Expat License. + (license (list license:clarified-artistic license:expat)))) diff --git a/gnu/packages/gd.scm b/gnu/packages/gd.scm index 4d6b1a3c89..3313ee68f2 100644 --- a/gnu/packages/gd.scm +++ b/gnu/packages/gd.scm @@ -1,6 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2013, 2016 Ludovic Courtès -;;; Copyright © 2015 Mark H Weaver +;;; Copyright © 2015, 2016 Mark H Weaver ;;; Copyright © 2015 Eric Bavier ;;; Copyright © 2016 Leo Famulari ;;; @@ -40,16 +40,21 @@ (define-public gd ;; Note: With libgd.org now pointing to github.com, genuine old ;; tarballs are no longer available. Notably, versions 2.0.x are ;; missing. - (version "2.2.1") + (version "2.2.2") (source (origin (method url-fetch) (uri (string-append "https://github.com/libgd/libgd/releases/download/gd-" version "/libgd-" version ".tar.xz")) + (patches (search-patches "gd-fix-test-on-i686.patch" + "gd-CVE-2016-5766.patch" + "gd-CVE-2016-6128.patch" + "gd-CVE-2016-6132.patch" + "gd-CVE-2016-6214.patch")) (sha256 (base32 - "0xmrqka1ggqgml84xbmkw1y0r0lg7qn657v5b1my8pry92p651vh")))) + "1311g5mva2xlzqv3rjqjc4jjkn5lzls4skvr395h633zw1n7b7s8")))) (build-system gnu-build-system) (native-inputs `(("pkg-config" ,pkg-config))) diff --git a/gnu/packages/geeqie.scm b/gnu/packages/geeqie.scm index 7ea75aa3a0..110fb68ea0 100644 --- a/gnu/packages/geeqie.scm +++ b/gnu/packages/geeqie.scm @@ -22,29 +22,33 @@ (define-module (gnu packages geeqie) #:use-module (guix download) #:use-module ((guix licenses) #:prefix l:) #:use-module (guix build-system gnu) - #:use-module (gnu packages pkg-config) + #:use-module (gnu packages autotools) + #:use-module (gnu packages compression) + #:use-module (gnu packages ghostscript) #:use-module (gnu packages glib) #:use-module (gnu packages gtk) #:use-module (gnu packages image) - #:use-module (gnu packages ghostscript) - #:use-module (gnu packages compression) + #:use-module (gnu packages pkg-config) #:use-module (gnu packages xml)) (define-public exiv2 ; XXX: move elsewhere? (package (name "exiv2") - (version "0.23") + (version "0.25") (source (origin (method url-fetch) (uri (string-append "http://www.exiv2.org/exiv2-" version ".tar.gz")) (sha256 (base32 - "04bbg2cg6mgcyz435zamx37sp5zw44n2alb59ki1daz71f851yl1")))) + "197g6vgcpyf9p2cwn5p5hb1r714xsk1v4p96f5pv1z8mi9vzq2y8")))) (build-system gnu-build-system) (arguments '(#:tests? #f)) ; no `check' target (propagated-inputs - `(("expat" ,expat) ("zlib" ,zlib))) + `(("expat" ,expat) + ("zlib" ,zlib))) + (native-inputs + `(("intltool" ,intltool))) (home-page "http://www.exiv2.org/") (synopsis "Library and command-line utility to manage image metadata") (description @@ -61,16 +65,23 @@ (define-public exiv2 ; XXX: move elsewhere? (define-public geeqie (package (name "geeqie") - (version "1.1") + (version "1.3") (source (origin (method url-fetch) (uri (string-append "https://github.com/BestImageViewer/geeqie/" - "archive/" version ".tar.gz")) - (file-name (string-append name "-" version ".tar.gz")) + "releases/download/v" version "/geeqie-" + version ".tar.xz")) (sha256 (base32 - "1kzy39z9505xkayyx7rjj2wda76xy3ch1s5z35zn8yli54ffhi2m")))) + "0gzc82sy66pbsmq7lnmq4y37zqad1zfwfls3ik3dmfm8s5nmcvsb")))) (build-system gnu-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'autogen + (lambda _ + (setenv "NOCONFIGURE" "true") + (zero? (system* "sh" "autogen.sh"))))))) (inputs `(;; ("libchamplain" ,libchamplain) ("lcms" ,lcms) @@ -78,7 +89,10 @@ (define-public geeqie ("libpng" ,libpng) ("gtk+" ,gtk+-2))) (native-inputs - `(("intltool" ,intltool) + `(("autoconf" ,autoconf) + ("automake" ,automake) + ("glib" ,glib "bin") ; glib-gettextize + ("intltool" ,intltool) ("pkg-config" ,pkg-config))) (home-page "http://www.geeqie.org/") (synopsis "Lightweight GTK+ based image viewer") diff --git a/gnu/packages/gimp.scm b/gnu/packages/gimp.scm index 1cd779a9b0..d5c58e26ba 100644 --- a/gnu/packages/gimp.scm +++ b/gnu/packages/gimp.scm @@ -130,6 +130,7 @@ (define-public gimp (uri (string-append "http://download.gimp.org/pub/gimp/v" (version-major+minor version) "/gimp-" version ".tar.bz2")) + (patches (search-patches "gimp-CVE-2016-4994.patch")) (sha256 (base32 "1dsgazia9hmab8cw3iis7s69dvqyfj5wga7ds7w2q5mms1xqbqwm")))) diff --git a/gnu/packages/gl.scm b/gnu/packages/gl.scm index 907e3bf30a..7fa79bbde3 100644 --- a/gnu/packages/gl.scm +++ b/gnu/packages/gl.scm @@ -20,29 +20,29 @@ ;;; along with GNU Guix. If not, see . (define-module (gnu packages gl) - #:use-module (ice-9 match) - #:use-module (guix build utils) - #:use-module ((guix licenses) #:prefix l:) - #:use-module (guix packages) - #:use-module (guix download) - #:use-module (guix build-system gnu) - #:use-module (guix build-system cmake) - #:use-module (guix packages) - #:use-module (guix utils) #:use-module (gnu packages autotools) #:use-module (gnu packages bison) #:use-module (gnu packages flex) - #:use-module (gnu packages pkg-config) - #:use-module (gnu packages gettext) - #:use-module (gnu packages linux) - #:use-module (gnu packages python) - #:use-module (gnu packages xorg) - #:use-module (gnu packages xml) #:use-module (gnu packages fontutils) + #:use-module (gnu packages freedesktop) + #:use-module (gnu packages gettext) #:use-module (gnu packages guile) + #:use-module (gnu packages linux) + #:use-module (gnu packages pkg-config) + #:use-module (gnu packages python) #:use-module (gnu packages video) #:use-module (gnu packages xdisorg) - #:use-module (gnu packages zip)) + #:use-module (gnu packages xml) + #:use-module (gnu packages xorg) + #:use-module (gnu packages zip) + #:use-module (guix download) + #:use-module (guix build utils) + #:use-module (guix build-system gnu) + #:use-module (guix build-system cmake) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (guix packages) + #:use-module (guix utils) + #:use-module (ice-9 match)) (define-public glu (package @@ -71,7 +71,7 @@ (define-public glu positioning a camera, and selection/picking, Rendering of disk, cylinder, and sphere primitives, Interpreting OpenGL error values as ASCII text.") - (license (l:x11-style "http://directory.fsf.org/wiki/License:SGIFreeBv2")))) + (license (license:x11-style "http://directory.fsf.org/wiki/License:SGIFreeBv2")))) (define-public freeglut (package @@ -112,7 +112,7 @@ (define-public freeglut containing OpenGL contexts on a wide range of platforms and also read the mouse, keyboard and joystick functions. Freeglut is released under the X-Consortium license.") - (license l:x11))) + (license license:x11))) (define-public ftgl (package @@ -138,7 +138,7 @@ (define-public ftgl "FTGL is a font rendering library for OpenGL applications. Supported rendering modes are: Bitmaps, Anti-aliased pixmaps, Texture maps, Outlines, Polygon meshes, and Extruded polygon meshes.") - (license l:x11))) + (license license:x11))) (define-public s2tc (package @@ -170,7 +170,7 @@ (define-public s2tc (description "S2TC is a patent-free implementation of S3 Texture Compression (S3TC, also known as DXTn or DXTC) for Mesa.") - (license l:expat))) + (license license:expat))) ;;; Mesa needs LibVA headers to build its Gallium-based VA API implementation; ;;; LibVA itself depends on Mesa. We use the following to solve the circular @@ -287,7 +287,7 @@ (define-public mesa a system for rendering interactive 3D graphics. A variety of device drivers allows Mesa to be used in many different environments ranging from software emulation to complete hardware acceleration for modern GPUs.") - (license l:x11))) + (license license:x11))) (define-public mesa-headers (package @@ -317,12 +317,12 @@ (define (mesa-demos-source version) (method url-fetch) (uri (string-append "ftp://ftp.freedesktop.org/pub/mesa/demos/" version "/mesa-demos-" version ".tar.bz2")) - (sha256 (base32 "14msj0prbl3ljwd24yaqv9pz1xzicdmqgg616xxlppbdh6syrgz4")))) + (sha256 (base32 "1vqb7s5m3fcg2csbiz45mha1pys2xx6rhw94fcyvapqdpm5iawy1")))) (define-public mesa-utils (package (name "mesa-utils") - (version "8.2.0") + (version "8.3.0") (source (mesa-demos-source version)) (build-system gnu-build-system) (inputs @@ -332,12 +332,7 @@ (define-public mesa-utils (native-inputs `(("pkg-config" ,pkg-config))) (arguments - '(;; XXX: fails to build against latest mesa: - ;; eglut.c: error: 'EGL_SCREEN_BIT_MESA' undeclared - ;; - ;; - #:configure-flags '("--disable-egl") - #:phases + '(#:phases (modify-phases %standard-phases (replace 'install @@ -355,7 +350,7 @@ (define-public mesa-utils "The mesa-utils package contains several utility tools for Mesa: glxdemo, glxgears, glxheads, and glxinfo.") ;; glxdemo is public domain; others expat. - (license (list l:expat l:public-domain)))) + (license (list license:expat license:public-domain)))) (define-public glew (package @@ -399,7 +394,7 @@ (define-public glew loading library. GLEW provides efficient run-time mechanisms for determining which OpenGL extensions are supported on the target platform. OpenGL core and extension functionality is exposed in a single header file.") - (license l:bsd-3))) + (license license:bsd-3))) (define-public guile-opengl (package @@ -445,7 +440,7 @@ (define (dynamic-link-substitute file lib input) (description "Guile-OpenGL is a library for Guile that provides bindings to the OpenGL graphics API.") - (license l:lgpl3+))) + (license license:lgpl3+))) (define-public libepoxy (package @@ -502,7 +497,7 @@ (define-public libepoxy (synopsis "A library for handling OpenGL function pointer management") (description "A library for handling OpenGL function pointer management.") - (license l:x11))) + (license license:x11))) (define-public soil (package @@ -544,4 +539,4 @@ (define-public soil (description "SOIL is a tiny C library used primarily for uploading textures into OpenGL.") - (license l:public-domain))) + (license license:public-domain))) diff --git a/gnu/packages/gnunet.scm b/gnu/packages/gnunet.scm index c4e2a37955..f052eab40c 100644 --- a/gnu/packages/gnunet.scm +++ b/gnu/packages/gnunet.scm @@ -3,7 +3,6 @@ ;;; Copyright © 2014 Sree Harsha Totakura ;;; Copyright © 2015 Ludovic Courtès ;;; Copyright © 2015 Efraim Flashner -;;; Copyright © 2016 Ni* Gillmann ;;; Copyright © 2016 Ricardo Wurmus ;;; Copyright © 2016 Mark H Weaver ;;; Copyright © 2016 ng0 @@ -154,13 +153,16 @@ (define-public libmicrohttpd (define-public gnurl (package (name "gnurl") - (version "7.45.0") + (version "7.48.0") (source (origin (method url-fetch) - (uri (string-append "https://gnunet.org/sites/default/files/gnurl-" - version ".tar.bz2")) + (uri (let ((version-with-underscores + (string-join (string-split version #\.) "_"))) + (string-append "https://gnunet.org/sites/default/files/" + name "-" version-with-underscores ".tar.bz2"))) (sha256 - (base32 "0hd8w4wyjwagd4k6vm6srphqbmysz08rcwf8z7f4b2d6d2yrn3mm")))) + (base32 + "14gch4rdibrc8qs4mijsczxvl45dsclf234g17dk6c8nc2s4bm0a")))) (build-system gnu-build-system) (inputs `(("gnutls" ,gnutls) ("libidn" ,libidn) diff --git a/gnu/packages/gnupg.scm b/gnu/packages/gnupg.scm index 2ef241036a..2b4ce71866 100644 --- a/gnu/packages/gnupg.scm +++ b/gnu/packages/gnupg.scm @@ -60,7 +60,7 @@ (define-public libgpg-error (base32 "0ywxwswizmkyciy480kzczxn6nhbgzf3z8my4nk43nvv67k4x87j")))) (build-system gnu-build-system) - (home-page "http://gnupg.org") + (home-page "https://gnupg.org") (synopsis "Library of error values for GnuPG components") (description "Libgpg-error is a small library that defines common error values @@ -96,7 +96,7 @@ (define-public libgcrypt (list (string-append "--with-gpg-error-prefix=" (assoc-ref %build-inputs "libgpg-error-host"))))) (outputs '("out" "debug")) - (home-page "http://gnupg.org/") + (home-page "https://gnupg.org/") (synopsis "Cryptographic function library") (description "Libgcrypt is a general-purpose cryptographic library. It provides the @@ -122,7 +122,7 @@ (define-public libgcrypt-1.5 (define-public libassuan (package (name "libassuan") - (version "2.4.2") + (version "2.4.3") (source (origin (method url-fetch) @@ -130,11 +130,11 @@ (define-public libassuan version ".tar.bz2")) (sha256 (base32 - "086bbcdnvs48qq5g4iac7dpk76j0q3jrp16mchdvyx0b720xq1mv")))) + "0w9bmasln4z8mn16s1is55a06w3nv8jbyal496z5jvr5vcxkm112")))) (build-system gnu-build-system) (propagated-inputs `(("libgpg-error" ,libgpg-error) ("pth" ,pth))) - (home-page "http://gnupg.org") + (home-page "https://gnupg.org") (synopsis "IPC library used by GnuPG and related software") (description @@ -171,7 +171,7 @@ (define-public libksba '()) (string-append "--with-gpg-error-prefix=" (assoc-ref %build-inputs "libgpg-error"))))) - (home-page "http://www.gnupg.org") + (home-page "https://www.gnupg.org") (synopsis "CMS and X.509 access library") (description "KSBA (pronounced Kasbah) is a library to make X.509 certificates @@ -195,7 +195,7 @@ (define-public npth (base32 "12n0nvhw4fzwp0k7gjv3rc6pdml0qiinbbfiz4ilg6pl5kdxvnvd")))) (build-system gnu-build-system) - (home-page "http://www.gnupg.org") + (home-page "https://www.gnupg.org") (synopsis "Non-preemptive thread library") (description "Npth is a library to provide the GNU Pth API and thus a non-preemptive @@ -242,7 +242,7 @@ (define-public gnupg (substitute* "tests/openpgp/defs.inc" (("/bin/pwd") (which "pwd")))) %standard-phases))) - (home-page "http://gnupg.org/") + (home-page "https://gnupg.org/") (synopsis "GNU Privacy Guard") (description "The GNU Privacy Guard is a complete implementation of the OpenPGP @@ -332,7 +332,7 @@ (define-public gpgme `(("gnupg" ,gnupg-2.0) ("libassuan" ,libassuan))) (arguments '(#:make-flags '("GPG=gpg2"))) - (home-page "http://www.gnupg.org/related_software/gpgme/") + (home-page "https://www.gnupg.org/related_software/gpgme/") (synopsis "Library providing simplified access to GnuPG functionality") (description "GnuPG Made Easy (GPGME) is a library designed to make access to GnuPG @@ -418,7 +418,7 @@ (define-public python-gnupg "test_gnupg.py" "--no-doctests"))))))) (native-inputs `(("gnupg" ,gnupg-1))) - (home-page "http://packages.python.org/python-gnupg/index.html") + (home-page "https://packages.python.org/python-gnupg/index.html") (synopsis "Wrapper for the GNU Privacy Guard") (description "This module allows easy access to GnuPG’s key management, encryption @@ -466,7 +466,7 @@ (define-public pius pius-keyring-mgr and pius-party-worksheet help organisers of PGP keysigning parties.") (license license:gpl2) - (home-page "http://www.phildev.net/pius/index.shtml"))) + (home-page "https://www.phildev.net/pius/index.shtml"))) (define-public signing-party (package @@ -566,7 +566,7 @@ (define-public signing-party ;; and caff and gpgsigs: bsd-3, see ;; http://packages.debian.org/changelogs/pool/main/s/signing-party/current/copyright (license license:gpl2) - (home-page "http://pgp-tools.alioth.debian.org/"))) + (home-page "https://pgp-tools.alioth.debian.org/"))) (define-public pinentry-tty (package diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm new file mode 100644 index 0000000000..cc1b66f0ae --- /dev/null +++ b/gnu/packages/golang.scm @@ -0,0 +1,185 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2016 Efraim Flashner +;;; Copyright © 2016 Matthew Jordan +;;; Copyright © 2016 Andy Wingo +;;; +;;; This file is an addendum 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 golang) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (guix utils) + #:use-module (guix download) + #:use-module (guix packages) + #:use-module (guix build-system gnu) + #:use-module (gnu packages admin) + #:use-module (gnu packages gcc) + #:use-module (gnu packages base) + #:use-module (gnu packages perl) + #:use-module (gnu packages pkg-config) + #:use-module (gnu packages pcre) + #:use-module (ice-9 match) + #:use-module (srfi srfi-1)) + +;; According to https://golang.org/doc/install/gccgo, gccgo-4.8.2 includes a +;; complete go-1.1.2 implementation, gccgo-4.9 includes a complete go-1.2 +;; implementation, and gccgo-5 a complete implementation of go-1.4. Ultimately +;; we hope to build go-1.5+ with a bootstrap process using gccgo-5. As of +;; go-1.5, go cannot be bootstrapped without go-1.4, so we need to use go-1.4 or +;; gccgo-5. Mips is not officially supported, but it should work if it is +;; bootstrapped. + +(define-public go-1.4 + (package + (name "go") + (version "1.4.3") + (source (origin + (method url-fetch) + (uri (string-append "https://storage.googleapis.com/golang/" + name version ".src.tar.gz")) + (sha256 + (base32 + "0na9yqilzpvq0bjndbibfp07wr796gf252y471cip10bbdqgqiwr")))) + (build-system gnu-build-system) + (outputs '("out" + "doc" + "tests")) + (arguments + `(#:modules ((ice-9 match) + (guix build gnu-build-system) + (guix build utils)) + #:tests? #f ; Tests are run by the all.bash script. + #:phases + (modify-phases %standard-phases + (delete 'configure) + (add-after 'patch-generated-file-shebangs 'chdir + (lambda _ + (chdir "src"))) + (add-before 'build 'prebuild + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((gcclib (string-append (assoc-ref inputs "gcc:lib") "/lib")) + (ld (string-append (assoc-ref inputs "libc") "/lib")) + (loader (car (find-files ld "^ld-linux.+"))) + (net-base (assoc-ref inputs "net-base")) + (tzdata-path + (string-append (assoc-ref inputs "tzdata") "/share/zoneinfo")) + (output (assoc-ref outputs "out"))) + + ;; Removing net/ tests, which fail when attempting to access + ;; network resources not present in the build container. + (for-each delete-file + '("net/multicast_test.go" "net/parse_test.go" + "net/port_test.go")) + + ;; Add libgcc to the RUNPATH. + (substitute* "cmd/go/build.go" + (("cgoldflags := \\[\\]string\\{\\}") + (string-append "cgoldflags := []string{" + "\"-rpath=" gcclib "\"}")) + (("ldflags := buildLdflags") + (string-append + "ldflags := buildLdflags\n" + "ldflags = append(ldflags, \"-r\")\n" + "ldflags = append(ldflags, \"" gcclib "\")\n"))) + + (substitute* "os/os_test.go" + (("/usr/bin") (getcwd)) + (("/bin/pwd") (which "pwd"))) + + ;; Disable failing tests: these tests attempt to access + ;; commands or network resources which are neither available or + ;; necessary for the build to succeed. + (for-each + (match-lambda + ((file regex) + (substitute* file + ((regex all before test_name) + (string-append before "Disabled" test_name))))) + '(("net/net_test.go" "(.+)(TestShutdownUnix.+)") + ("net/dial_test.go" "(.+)(TestDialTimeout.+)") + ("os/os_test.go" "(.+)(TestHostname.+)") + ("time/format_test.go" "(.+)(TestParseInSydney.+)") + ("os/exec/exec_test.go" "(.+)(TestEcho.+)") + ("os/exec/exec_test.go" "(.+)(TestCommandRelativeName.+)") + ("os/exec/exec_test.go" "(.+)(TestCatStdin.+)") + ("os/exec/exec_test.go" "(.+)(TestCatGoodAndBadFile.+)") + ("os/exec/exec_test.go" "(.+)(TestExitStatus.+)") + ("os/exec/exec_test.go" "(.+)(TestPipes.+)") + ("os/exec/exec_test.go" "(.+)(TestStdinClose.+)") + ("syscall/syscall_unix_test.go" "(.+)(TestPassFD\\(.+)") + ("os/exec/exec_test.go" "(.+)(TestExtraFiles.+)"))) + + (substitute* "net/lookup_unix.go" + (("/etc/protocols") (string-append net-base "/etc/protocols"))) + (substitute* "time/zoneinfo_unix.go" + (("/usr/share/zoneinfo/") tzdata-path)) + (substitute* (find-files "cmd" "asm.c") + (("/lib/ld-linux.*\\.so\\.[0-9]") loader)) + #t))) + + (replace 'build + (lambda* (#:key inputs outputs #:allow-other-keys) + ;; FIXME: Some of the .a files are not bit-reproducible. + (let* ((output (assoc-ref outputs "out"))) + (setenv "CC" (which "gcc")) + (setenv "GOOS" "linux") + (setenv "GOROOT" (dirname (getcwd))) + (setenv "GOROOT_FINAL" output) + (setenv "CGO_ENABLED" "1") + (zero? (system* "sh" "all.bash"))))) + + (replace 'install + (lambda* (#:key outputs inputs #:allow-other-keys) + (let* ((output (assoc-ref outputs "out")) + (doc_out (assoc-ref outputs "doc")) + (bash (string-append (assoc-ref inputs "bash") "bin/bash")) + (docs (string-append doc_out "/share/doc/" ,name "-" ,version)) + (tests (string-append + (assoc-ref outputs "tests") "/share/" ,name "-" ,version))) + (mkdir-p tests) + (copy-recursively "../test" (string-append tests "/test")) + (delete-file-recursively "../test") + (mkdir-p docs) + (copy-recursively "../api" (string-append docs "/api")) + (delete-file-recursively "../api") + (copy-recursively "../doc" (string-append docs "/doc")) + (delete-file-recursively "../doc") + + (for-each (lambda (file) + (let ((file (string-append "../" file))) + (install-file file docs) + (delete-file file))) + '("README" "CONTRIBUTORS" "AUTHORS" "PATENTS" + "LICENSE" "VERSION" "robots.txt")) + (copy-recursively "../" output) + #t)))))) + (inputs + `(("tzdata" ,tzdata) + ("pcre" ,pcre) + ("gcc:lib" ,gcc "lib"))) + (native-inputs + `(("pkg-config" ,%pkg-config) + ("which" ,which) + ("net-base" ,net-base) + ("perl" ,perl))) + + (home-page "https://golang.org/") + (synopsis "Compiler and libraries for Go, a statically-typed language") + (description "Go, also commonly referred to as golang, is an imperative +programming language. Designed primarily for systems programming, it is a +compiled, statically typed language in the tradition of C and C++, with +garbage collection, various safety features and in the style of communicating +sequential processes (CSP) concurrent programming features added.") + (license license:bsd-3))) diff --git a/gnu/packages/graphics.scm b/gnu/packages/graphics.scm index ca99cd0302..f6298ce394 100644 --- a/gnu/packages/graphics.scm +++ b/gnu/packages/graphics.scm @@ -3,6 +3,7 @@ ;;; Copyright © 2015 Tomáš Čech ;;; Copyright © 2016 Leo Famulari ;;; Copyright © 2016 Ricardo Wurmus +;;; Copyright © 2016 Efraim Flashner ;;; ;;; This file is part of GNU Guix. ;;; @@ -139,15 +140,15 @@ (define-public blender (define-public cgal (package (name "cgal") - (version "4.6.3") + (version "4.8.1") (source (origin (method url-fetch) (uri (string-append - "http://gforge.inria.fr/frs/download.php/file/" - "35139/CGAL-4.6.3.tar.xz")) + "https://github.com/CGAL/cgal/releases/download/releases/" + "CGAL-" version "/CGAL-" version ".tar.xz")) (sha256 (base32 - "08gwjjh0qz3fakj1y2nsl2qvb0qv5lc7k1pxwjkagh37hxxh4f73")))) + "1c41yzl2jg3d6zx5k0iccwqwibp950q7dr7z7pp4xi9wlph3c87s")))) (build-system cmake-build-system) (arguments '(;; "RelWithDebInfo" is not supported. @@ -211,9 +212,17 @@ (define-public openexr "0ca2j526n4wlamrxb85y2jrgcv0gf21b3a19rr0gh4rjqkv1581n")) (modules '((guix build utils))) (snippet - '(substitute* (find-files "." "tmpDir\\.h") - (("\"/var/tmp/\"") - "\"/tmp/\""))) + '(begin + (substitute* (find-files "." "tmpDir\\.h") + (("\"/var/tmp/\"") + "\"/tmp/\"")) + + ;; Install 'ImfStdIO.h'. Reported at + ;; + ;; and . + (substitute* "IlmImf/Makefile.in" + (("ImfIO\\.h") + "ImfIO.h ImfStdIO.h")))) (patches (search-patches "openexr-missing-samples.patch")))) (build-system gnu-build-system) (arguments @@ -246,7 +255,7 @@ (define-public openexr (define-public openimageio (package (name "openimageio") - (version "1.5.18") + (version "1.6.15") (source (origin (method url-fetch) (uri (string-append "https://github.com/OpenImageIO/oiio/" @@ -254,8 +263,7 @@ (define-public openimageio (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "0mn7cz19mn8dcrhkq15h25gl20ammr1wz0j2j3c2vxs6ph7zn8jy")) - (patches (search-patches "openimageio-boost-1.60.patch")))) + "144crq0205d0w5aq4iglh2rhzf54a8rv3pksy6d533b75w5d7rq7")))) (build-system cmake-build-system) ;; FIXME: To run all tests successfully, test image sets from multiple ;; third party sources have to be present. For details see diff --git a/gnu/packages/grub.scm b/gnu/packages/grub.scm index 31b270c0d8..01f2a8454d 100644 --- a/gnu/packages/grub.scm +++ b/gnu/packages/grub.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès ;;; Copyright © 2015 Mark H Weaver ;;; Copyright © 2015 Leo Famulari +;;; Copyright © 2016 Jan Nieuwenhuizen ;;; ;;; This file is part of GNU Guix. ;;; @@ -76,20 +77,21 @@ (define unifont (define-public grub (package (name "grub") - (version "2.00") + (version "2.02beta3") (source (origin (method url-fetch) - (uri (string-append "mirror://gnu/grub/grub-" - version ".tar.xz")) + (uri (string-append + "ftp://alpha.gnu.org/gnu/grub/grub-" + "2.02~beta3" + ".tar.xz")) + (file-name (string-append name "-" version ".tar.xz")) (sha256 (base32 - "0n64hpmsccvicagvr0c6v0kgp2yw0kgnd3jvsyd26cnwgs7c6kkq")) - (patches (search-patches "grub-gets-undeclared.patch" - "grub-freetype.patch" - "grub-CVE-2015-8370.patch")))) + "18ddwnw0vxs7zigvah0g6a5z5vvlz0p8fjglxv1h59sjbrakvv1h")))) (build-system gnu-build-system) (arguments - '(#:configure-flags '("--disable-werror") + '(;; Two warnings: suggest braces, signed/unsigned comparison. + #:configure-flags '("--disable-werror") #:phases (modify-phases %standard-phases (add-after 'unpack 'patch-stuff @@ -100,6 +102,13 @@ (define-public grub ;; Make the font visible. (copy-file (assoc-ref inputs "unifont") "unifont.bdf.gz") (system* "gunzip" "unifont.bdf.gz") + + ;; We hit an assertion failure in + ;; grub-core/tests/video_checksum.c, as reported at + ;; . + ;; Disable this test for now. + (substitute* "tests/grub_func_test.in" + (("set -e") "exit 77\nset -e")) #t))))) (inputs `(;; ("lvm2" ,lvm2) diff --git a/gnu/packages/gstreamer.scm b/gnu/packages/gstreamer.scm index f9e677bca4..a39a3b434d 100644 --- a/gnu/packages/gstreamer.scm +++ b/gnu/packages/gstreamer.scm @@ -97,7 +97,7 @@ (define-public orc (define-public gstreamer (package (name "gstreamer") - (version "1.8.0") + (version "1.8.2") (source (origin (method url-fetch) @@ -106,7 +106,7 @@ (define-public gstreamer version ".tar.xz")) (sha256 (base32 - "1p5y9bbrhywng0prmpxv29p6jsz6vd039d49bnc98p9b45532yll")))) + "0hc3j684nx209p10ampvnkza3gna2yiryr7jyx701ciakh3vxglx")))) (build-system gnu-build-system) (outputs '("out" "doc")) (arguments @@ -145,7 +145,7 @@ (define-public gstreamer (define-public gst-plugins-base (package (name "gst-plugins-base") - (version "1.8.0") + (version "1.8.2") (source (origin (method url-fetch) @@ -153,7 +153,7 @@ (define-public gst-plugins-base name "-" version ".tar.xz")) (sha256 (base32 - "08hmg7fp519wim1fm04r7f2q2020ssdninawqsbrqjsvs70srh5b")))) + "13fk751vvfrfhbm4ip28vxyvlsm4b4y0bc0pvf7fqp8azg40jwcx")))) (build-system gnu-build-system) (outputs '("out" "doc")) (propagated-inputs @@ -198,7 +198,7 @@ (define-public gst-plugins-base (define-public gst-plugins-good (package (name "gst-plugins-good") - (version "1.8.0") + (version "1.8.2") (source (origin (method url-fetch) @@ -207,7 +207,7 @@ (define-public gst-plugins-good name "-" version ".tar.xz")) (sha256 (base32 - "0kczdvqxvl8kxiy2d7czv16jp73hv9k3nykh47ckihnv8x6i6362")))) + "0i1rlbbx3m6ykvcdyaidsd8wa2b7nq2qmcvbrsg00yivi88ljxcd")))) (build-system gnu-build-system) (inputs `(("aalib" ,aalib) @@ -336,7 +336,7 @@ (define-public gst-plugins-bad (define-public gst-plugins-ugly (package (name "gst-plugins-ugly") - (version "1.8.0") + (version "1.8.2") (source (origin (method url-fetch) @@ -344,7 +344,7 @@ (define-public gst-plugins-ugly name "/" name "-" version ".tar.xz")) (sha256 (base32 - "137b6kqykh5nwbmiv28nn1pc1d2x2rb2xxg382pc9pa9gpxpyrak")))) + "1b58s7z430cbbaw8mgy87kslbpmj3xmm66wsr7bddhcgm6i36nww")))) (build-system gnu-build-system) (inputs `(("gst-plugins-base" ,gst-plugins-base) @@ -374,7 +374,7 @@ (define-public gst-plugins-ugly (define-public gst-libav (package (name "gst-libav") - (version "1.8.0") + (version "1.8.2") (source (origin (method url-fetch) (uri (string-append @@ -382,7 +382,7 @@ (define-public gst-libav name "-" version ".tar.xz")) (sha256 (base32 - "0719njp8aarhvn038pijq6dmsnli0zlg146hyfs3rsdffs4f472s")))) + "0yk8pxg3xi26ndj7pliqdfphy0jmqsq4dmdzy31gbd9rgficgwxm")))) (build-system gnu-build-system) (arguments '(#:configure-flags '("--with-system-libav") @@ -411,7 +411,7 @@ (define-public gst-libav (define-public python-gst (package (name "python-gst") - (version "1.8.0") + (version "1.8.2") (source (origin (method url-fetch) (uri (string-append @@ -419,7 +419,7 @@ (define-public python-gst "gst-python-" version ".tar.xz")) (sha256 (base32 - "1spn49x7yaj69df6mxh9wwcs0y3abswkfpk84njs71lzqlbzyiff")))) + "15sdfa6lq5pswvi09vk51cs30yf8wr2rlm9myhb4q0c2jhiial2g")))) (build-system gnu-build-system) (arguments ;; XXX: Factorize python-sitedir with python-build-system. diff --git a/gnu/packages/imagemagick.scm b/gnu/packages/imagemagick.scm index 4497150db7..038ca00c79 100644 --- a/gnu/packages/imagemagick.scm +++ b/gnu/packages/imagemagick.scm @@ -41,14 +41,14 @@ (define-module (gnu packages imagemagick) (define-public imagemagick (package (name "imagemagick") - (version "6.9.4-10") + (version "6.9.5-0") (source (origin (method url-fetch) (uri (string-append "mirror://imagemagick/ImageMagick-" version ".tar.xz")) (sha256 (base32 - "0bbac9zdjl2g8x127jx5jisih9r49980w7ar6m8xj3nyh3m83jd2")))) + "1d1hmmnks071zfkpv971b3q56qlml0wv1xlw8yvq6cnybc2cwc3q")))) (build-system gnu-build-system) (arguments `(#:configure-flags '("--with-frozenpaths") diff --git a/gnu/packages/irc.scm b/gnu/packages/irc.scm index def16c939c..03f014aa4e 100644 --- a/gnu/packages/irc.scm +++ b/gnu/packages/irc.scm @@ -72,14 +72,16 @@ (define-public quassel "-DUSE_QT5=ON" ; default is qt4 "-DWITH_KDE=OFF" ; no to integration "-DWITH_OXYGEN=ON" ; on=embed icons - "-DWITH_WEBKIT=ON") ; wants qtwebkit, in qt5 + "-DWITH_WEBKIT=OFF") ; qtwebkit isn't packaged #:tests? #f)) ; no test target (native-inputs `(("pkg-config" ,pkg-config))) (inputs `(("extra-cmake-modules" ,extra-cmake-modules) ("oxygen-icons" ,oxygen-icons) ("qca" ,qca) - ("qt", qt) + ("qtbase", qtbase) + ("qttools" ,qttools) + ("qtscript" ,qtscript) ("snorenotify" ,snorenotify) ("zlib" ,zlib))) (home-page "http://quassel-irc.org/") diff --git a/gnu/packages/julia.scm b/gnu/packages/julia.scm index 1cda5d89c8..e3cefb4330 100644 --- a/gnu/packages/julia.scm +++ b/gnu/packages/julia.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015, 2016 Ricardo Wurmus +;;; Copyright © 2016 Efraim Flashner ;;; ;;; This file is part of GNU Guix. ;;; @@ -26,6 +27,7 @@ (define-module (gnu packages julia) #:use-module (gnu packages) #:use-module (gnu packages algebra) #:use-module (gnu packages base) + #:use-module (gnu packages compression) #:use-module (gnu packages elf) #:use-module (gnu packages gcc) #:use-module (gnu packages llvm) @@ -262,6 +264,7 @@ (define-public julia ("mpfr" ,mpfr) ("wget" ,wget) ("which" ,which) + ("zlib" ,zlib) ("gmp" ,gmp) ;; FIXME: The following inputs are downloaded from upstream to allow us ;; to use the lightweight Julia release tarball. Ideally, these inputs diff --git a/gnu/packages/kde.scm b/gnu/packages/kde.scm index b74a6051ea..34a5046d20 100644 --- a/gnu/packages/kde.scm +++ b/gnu/packages/kde.scm @@ -44,7 +44,7 @@ (define-public qca `(("pkg-config" ,pkg-config))) (inputs `(("openssl" ,openssl) - ("qt" ,qt))) + ("qtbase" ,qtbase))) (home-page "http://delta.affinix.com/qca/") (synopsis "Libraries for the Qt Cryptographic Architecture") (description "The Qt Cryptographic Architecture (QCA) provides a @@ -70,7 +70,8 @@ (define-public snorenotify `(#:tests? #f)) ; both tests fail, require display (inputs `(("extra-cmake-modules" ,extra-cmake-modules) - ("qt" ,qt))) + ("qtbase" ,qtbase) + ("qttools" ,qttools))) (home-page "https://techbase.kde.org/Projects/Snorenotify") (synopsis "Qt notification framework") (description "Snorenotify is a multi platform Qt notification framework. diff --git a/gnu/packages/libreoffice.scm b/gnu/packages/libreoffice.scm index 60a6d7df73..18606f96a1 100644 --- a/gnu/packages/libreoffice.scm +++ b/gnu/packages/libreoffice.scm @@ -94,14 +94,14 @@ (define-public ixion (define-public orcus (package (name "orcus") - (version "0.7.1") + (version "0.9.2") (source (origin (method url-fetch) (uri (string-append "http://kohei.us/files/" name "/src/lib" name "-" version ".tar.xz")) (sha256 (base32 - "0hva4qalg3dk6n1118ncr5fy8cqnj2f7fwldw7aa04124rj6p104")))) + "170racjz7s7yxza722hxsqc12788w57qnp6x6j2692pzp3qzjjfx")))) (build-system gnu-build-system) (native-inputs `(("pkg-config" ,pkg-config))) @@ -709,7 +709,7 @@ (define xmlsec-src-libreoffice (define-public libreoffice (package (name "libreoffice") - (version "5.0.5.2") + (version "5.1.4.2") (source (origin (method url-fetch) @@ -718,7 +718,7 @@ (define-public libreoffice "http://download.documentfoundation.org/libreoffice/src/" (version-prefix version 3) "/libreoffice-" version ".tar.xz")) (sha256 (base32 - "120vcxpxzs0za76fyfry281ysv6d1ianb37d1yq8py8chkdjkrqy")))) + "11c30y9gvsy5h3nh9pnciq57gi99plrmr6qp8hhdk2l5xmwlmrfa")))) (build-system gnu-build-system) (native-inputs `(;; autoreconf is run by the LibreOffice build system, since after @@ -730,7 +730,7 @@ (define-public libreoffice ("cppunit" ,cppunit) ("flex" ,flex) ("pkg-config" ,pkg-config) - ("python" ,python) + ("python" ,python-wrapper) ("which" ,which))) (inputs `(("bluez" ,bluez) @@ -851,6 +851,8 @@ (define-public libreoffice "--disable-coinmp" "--disable-firebird-sdbc" ; embedded firebird "--disable-gltf" + "--without-doxygen" + "--disable-gtk3" "--disable-liblangtag"))) (home-page "https://www.libreoffice.org/") (synopsis "Office suite") diff --git a/gnu/packages/libusb.scm b/gnu/packages/libusb.scm index 1e72442c73..1f659c7594 100644 --- a/gnu/packages/libusb.scm +++ b/gnu/packages/libusb.scm @@ -92,14 +92,14 @@ (define-public libusb-compat (define-public python-pyusb (package (name "python-pyusb") - (version "1.0.0rc1") + (version "1.0.0") (source (origin (method url-fetch) - (uri (pypi-uri "pyusb" version)) + (uri (pypi-uri "PyUSB" version)) (sha256 (base32 - "07cjq11qhngzjd746k7688s6y2x7lpj669fxqfsiy985rg0jsn7j")))) + "0s2k4z06fapd5vp1gnrlf8a9sjpc03p9974lzw5k6ky39akzyd2v")))) (build-system python-build-system) (arguments `(#:tests? #f ;no tests @@ -135,15 +135,14 @@ (define-public python2-pyusb (define-public libmtp (package (name "libmtp") - (version "1.1.9") + (version "1.1.11") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/libmtp/" version "/libmtp-" version ".tar.gz")) (sha256 - (base32 - "12dinqic0ljnhrwx3rc61jc7q24ybr0mckc2ya5kh1s1np0d7w93")) - (patches (search-patches "libmtp-devices.patch")))) + (base32 + "1sc768q2cixwanlwrz95mp389iaadl4s95486caavxx4g7znvn8m")))) (build-system gnu-build-system) (native-inputs `(("pkg-config" ,pkg-config))) diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm index bfb6580cbf..5ce6007b40 100644 --- a/gnu/packages/linux.scm +++ b/gnu/packages/linux.scm @@ -7,12 +7,13 @@ ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer ;;; Copyright © 2015, 2016 Efraim Flashner ;;; Copyright © 2016 Christopher Allan Webber -;;; Copyright © 2016 Tobias Geerinckx-Rice +;;; Copyright © 2016 Tobias Geerinckx-Rice ;;; Copyright © 2016 Alex Kost ;;; Copyright © 2016 Raymond Nicholson ;;; Copyright © 2016 Mathieu Lirzin ;;; Copyright © 2016 Nicolas Goaziou ;;; Copyright © 2016 Ricardo Wurmus +;;; Copyright © 2016 David Craven ;;; ;;; This file is part of GNU Guix. ;;; @@ -30,49 +31,49 @@ ;;; along with GNU Guix. If not, see . (define-module (gnu packages linux) - #:use-module ((guix licenses) #:prefix license:) #:use-module (gnu packages) - #:use-module (gnu packages compression) - #:use-module (gnu packages gcc) - #:use-module (gnu packages flex) - #:use-module (gnu packages bison) #:use-module (gnu packages admin) - #:use-module (gnu packages gperf) - #:use-module (gnu packages libusb) - #:use-module (gnu packages ncurses) - #:use-module (gnu packages pciutils) - #:use-module (gnu packages databases) - #:use-module (gnu packages perl) - #:use-module (gnu packages pkg-config) - #:use-module (gnu packages python) - #:use-module (gnu packages slang) #:use-module (gnu packages algebra) - #:use-module (gnu packages gettext) - #:use-module (gnu packages glib) - #:use-module (gnu packages pulseaudio) #:use-module (gnu packages attr) - #:use-module (gnu packages xml) #:use-module (gnu packages autotools) - #:use-module (gnu packages texinfo) - #:use-module (gnu packages check) - #:use-module (gnu packages maths) #:use-module (gnu packages base) - #:use-module (gnu packages rrdtool) - #:use-module (gnu packages elf) - #:use-module (gnu packages gtk) + #:use-module (gnu packages bison) + #:use-module (gnu packages calendar) + #:use-module (gnu packages check) + #:use-module (gnu packages compression) + #:use-module (gnu packages databases) #:use-module (gnu packages docbook) #:use-module (gnu packages documentation) - #:use-module (gnu packages readline) - #:use-module (gnu packages calendar) - #:use-module (gnu packages tls) + #:use-module (gnu packages elf) + #:use-module (gnu packages flex) #:use-module (gnu packages freedesktop) - #:use-module (guix packages) - #:use-module (guix download) - #:use-module (guix utils) - #:use-module (guix build-system gnu) + #:use-module (gnu packages gcc) + #:use-module (gnu packages gettext) + #:use-module (gnu packages glib) + #:use-module (gnu packages gperf) + #:use-module (gnu packages gtk) + #:use-module (gnu packages libusb) + #:use-module (gnu packages maths) + #:use-module (gnu packages ncurses) + #:use-module (gnu packages perl) + #:use-module (gnu packages pciutils) + #:use-module (gnu packages pkg-config) + #:use-module (gnu packages pulseaudio) + #:use-module (gnu packages python) + #:use-module (gnu packages readline) + #:use-module (gnu packages rrdtool) + #:use-module (gnu packages slang) + #:use-module (gnu packages texinfo) + #:use-module (gnu packages tls) + #:use-module (gnu packages xml) #:use-module (guix build-system cmake) + #:use-module (guix build-system gnu) #:use-module (guix build-system python) #:use-module (guix build-system trivial) + #:use-module (guix download) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (guix packages) + #:use-module (guix utils) #:use-module (srfi srfi-1) #:use-module (srfi srfi-2) #:use-module (srfi srfi-26) @@ -225,7 +226,7 @@ (define* (kernel-config system #:key variant) (search-path %load-path file))) (define-public linux-libre - (let* ((version "4.6.3") + (let* ((version "4.6.4") (build-phase '(lambda* (#:key system inputs #:allow-other-keys #:rest args) ;; Avoid introducing timestamps @@ -303,7 +304,7 @@ (define-public linux-libre (uri (linux-libre-urls version)) (sha256 (base32 - "1ajhdk9jq0pfxlhvzwarbxc23418yqav1v0z0mnfs575y5lq2gmp")))) + "1294qw4agax0cnbhh0dk33jz358smhflllg77zv0rd8w9g433xiz")))) (build-system gnu-build-system) (supported-systems '("x86_64-linux" "i686-linux")) (native-inputs `(("perl" ,perl) @@ -340,13 +341,13 @@ (define-public linux-libre (define-public linux-libre-4.4 (package (inherit linux-libre) - (version "4.4.14") + (version "4.4.15") (source (origin (method url-fetch) (uri (linux-libre-urls version)) (sha256 (base32 - "1yfmzrjrkj8mn2dfd7p98w13afchrkpz26gwfcm2fhsmla16n1my")))) + "0n3lz4xnciif9v3y769q1pjs9321gvl6a2wr10r40sl1ixlk3ipz")))) (native-inputs (let ((conf (kernel-config (or (%current-target-system) (%current-system)) @@ -1433,17 +1434,15 @@ (define-public unionfs-fuse/static (define-public sshfs-fuse (package (name "sshfs-fuse") - (version "2.5") + (version "2.8") (source (origin (method url-fetch) - (uri (let ((version-with-underscores - (string-join (string-split version #\.) "_"))) - (string-append "https://github.com/libfuse/sshfs/releases/" - "download/sshfs_" version-with-underscores - "/sshfs-fuse-" version ".tar.gz"))) + (uri (string-append "https://github.com/libfuse/sshfs/releases/" + "download/sshfs_" version + "/sshfs-" version ".tar.gz")) (sha256 (base32 - "0gp6qr33l2p0964j0kds0dfmvyyf5lpgsn11daf0n5fhwm9185z9")))) + "08mdd4rs7yys7hmyig6i08qlid76p17xlvrh64k7wsrfs1s92s3z")))) (build-system gnu-build-system) (inputs `(("fuse" ,fuse) @@ -1876,9 +1875,14 @@ (define-public lm-sensors (version "3.3.5") (source (origin (method url-fetch) - (uri (string-append - "ftp://ftp.netroedge.com/pub/lm-sensors/lm_sensors-" - version ".tar.bz2")) + (uri (list (string-append + "ftp://ftp.netroedge.com/pub/lm-sensors/" + "lm_sensors-" version ".tar.bz2") + (string-append + "http://pkgs.fedoraproject.org/repo/pkgs/" + "lm_sensors/lm_sensors-3.3.5.tar.bz2/" + "da506dedceb41822e64865f6ba34828a/" + "lm_sensors-3.3.5.tar.bz2"))) (sha256 (base32 "1ksgrynxgrq590nb2fwxrl1gwzisjkqlyg3ljfd1al0ibrk6mbjx")) @@ -2754,3 +2758,63 @@ (define-public ntfs-3g commonly found on Microsoft Windows. It is implemented as a FUSE file system. The package provides additional NTFS tools.") (license license:gpl2+))) + +(define-public rng-tools + (package + (name "rng-tools") + (version "5") + (source (origin + (method url-fetch) + (uri (string-append + "http://downloads.sourceforge.net/sourceforge/gkernel/" + "rng-tools-" version ".tar.gz")) + (sha256 + (base32 + "13h7lc8wl9khhvkr0i3bl5j9bapf8anhqis1lcnwxg1vc2v058b0")))) + (build-system gnu-build-system) + (synopsis "Random number generator daemon") + (description + "Monitor a hardware random number generator, and supply entropy +from that to the system kernel's @file{/dev/random} machinery.") + (home-page "http://sourceforge.net/projects/gkernel") + ;; The source package is offered under the GPL2+, but the files + ;; 'rngd_rdrand.c' and 'rdrand_asm.S' are only available under the GPL2. + (license (list license:gpl2 license:gpl2+)))) + +(define-public cpupower + (package + (name "cpupower") + (version (package-version linux-libre)) + (source (package-source linux-libre)) + (build-system gnu-build-system) + (arguments + '(#:phases (modify-phases %standard-phases + (add-after 'unpack 'enter-subdirectory + (lambda _ + (chdir "tools/power/cpupower"))) + (delete 'configure) + (add-before 'build 'fix-makefiles + (lambda _ + (substitute* "Makefile" + (("/usr/") "/") + (("/bin/(install|pwd)" _ command) command)) + (substitute* "bench/Makefile" + (("\\$\\(CC\\) -o") "$(CC) $(LDFLAGS) -o"))))) + #:make-flags (let ((out (assoc-ref %outputs "out"))) + (list (string-append "DESTDIR=" out) + (string-append "LDFLAGS=-Wl,-rpath=" out "/lib") + "docdir=/share/doc/cpupower" + "confdir=$(docdir)/examples" + ;; The Makefile recommends the following changes + "DEBUG=false" + "PACKAGE_BUGREPORT=bug-guix@gnu.org")) + #:tests? #f)) ;no tests + (native-inputs `(("gettext" ,gnu-gettext))) + (inputs `(("pciutils" ,pciutils))) + (home-page (package-home-page linux-libre)) + (synopsis "CPU frequency and voltage scaling tools for Linux") + (description + "cpupower is a set of user-space tools that use the cpufreq feature of the +Linux kernel to retrieve and control processor features related to power saving, +such as frequency and voltage scaling.") + (license license:gpl2))) diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm index e349907f14..22f542ccc5 100644 --- a/gnu/packages/lisp.scm +++ b/gnu/packages/lisp.scm @@ -3,7 +3,7 @@ ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer ;;; Copyright © 2015 Mark H Weaver ;;; Copyright © 2016 Federico Beffa -;;; Copyright © 2016 Nils Gillmann +;;; Copyright © 2016 ng0 ;;; ;;; This file is part of GNU Guix. ;;; diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm index 3bf019fa83..c380eba122 100644 --- a/gnu/packages/llvm.scm +++ b/gnu/packages/llvm.scm @@ -1,7 +1,8 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2014 Eric Bavier +;;; Copyright © 2014, 2016 Eric Bavier ;;; Copyright © 2015 Mark H Weaver ;;; Copyright © 2015 Ludovic Courtès +;;; Copyright © 2016 Dennis Mungai ;;; ;;; This file is part of GNU Guix. ;;; @@ -20,7 +21,7 @@ (define-module (gnu packages llvm) #:use-module (guix packages) - #:use-module (guix licenses) + #:use-module ((guix licenses) #:prefix license:) #:use-module (guix download) #:use-module (guix utils) #:use-module (guix build-system gnu) @@ -28,6 +29,8 @@ (define-module (gnu packages llvm) #:use-module (gnu packages) #:use-module (gnu packages gcc) #:use-module (gnu packages bootstrap) ;glibc-dynamic-linker + #:use-module (gnu packages compression) + #:use-module (gnu packages libffi) #:use-module (gnu packages perl) #:use-module (gnu packages python) #:use-module (gnu packages xml)) @@ -35,7 +38,7 @@ (define-module (gnu packages llvm) (define-public llvm (package (name "llvm") - (version "3.6.2") + (version "3.8.1") (source (origin (method url-fetch) @@ -43,14 +46,21 @@ (define-public llvm version "/llvm-" version ".src.tar.xz")) (sha256 (base32 - "153vcvj8gvgwakzr4j0kndc0b7wn91c2g1vy2vg24s6spxcc23gn")))) + "1ybmnid4pw2hxn12ax5qa5kl1ldfns0njg8533y3mzslvd5cx0kf")))) (build-system cmake-build-system) (native-inputs - `(("python" ,python-wrapper) + `(("python" ,python-2) ;bytes->str conversion in clang>=3.7 needs python-2 ("perl" ,perl))) + (inputs + `(("libffi" ,libffi) + ("zlib" ,zlib))) (arguments `(#:configure-flags '("-DCMAKE_SKIP_BUILD_RPATH=FALSE" - "-DCMAKE_BUILD_WITH_INSTALL_RPATH=FALSE"))) + "-DCMAKE_BUILD_WITH_INSTALL_RPATH=FALSE" + "-DLLVM_ENABLE_FFI:BOOL=TRUE") + + ;; Don't use '-g' during the build, to save space. + #:build-type "Release")) (home-page "http://www.llvm.org") (synopsis "Optimizing compiler infrastructure") (description @@ -60,7 +70,7 @@ (define-public llvm front-ends derived from GCC 4.0.1. A new front-end for the C family of languages is in development. The compiler infrastructure includes mirror sets of programming tools as well as libraries with equivalent functionality.") - (license ncsa))) + (license license:ncsa))) (define (clang-runtime-from-llvm llvm hash) (package @@ -78,8 +88,8 @@ (define (clang-runtime-from-llvm llvm hash) `(("llvm" ,llvm))) (arguments `(;; Don't use '-g' during the build to save space. - #:build-type "Release")) - + #:build-type "Release" + #:tests? #f)) ; Tests require gtest (home-page "http://compiler-rt.llvm.org") (synopsis "Runtime library for Clang/LLVM") (description @@ -87,12 +97,13 @@ (define (clang-runtime-from-llvm llvm hash) functions for C and C++ programs. It also provides header files that allow C and C++ source code to interface with the \"sanitization\" passes of the clang compiler. In LLVM this library is called \"compiler-rt\".") - (license ncsa) + (license license:ncsa) ;; doesn't list MIPS as supported. (supported-systems (delete "mips64el-linux" %supported-systems)))) -(define (clang-from-llvm llvm clang-runtime hash) +(define* (clang-from-llvm llvm clang-runtime hash + #:key (patches '("clang-libc-search-path.patch"))) (package (name "clang") (version (package-version llvm)) @@ -102,7 +113,7 @@ (define (clang-from-llvm llvm clang-runtime hash) (uri (string-append "http://llvm.org/releases/" version "/cfe-" version ".src.tar.xz")) (sha256 (base32 hash)) - (patches (search-patches "clang-libc-search-path.patch")))) + (patches (map search-patch patches)))) ;; Using cmake allows us to treat llvm as an external library. There ;; doesn't seem to be any way to do this with clang's autotools-based ;; build system. @@ -170,20 +181,21 @@ (define (clang-from-llvm llvm clang-runtime hash) Objective-C++ programming languages. It uses LLVM as its back end. The Clang project includes the Clang front end, the Clang static analyzer, and several code analysis tools.") - (license ncsa))) + (license license:ncsa))) (define-public clang-runtime (clang-runtime-from-llvm llvm - "11qx8d3pbfqjaj2x207pvlvzihbs1z2xbw4crpz7aid6h1yz6bqg")) + "0p0y85c7izndbpg2l816z7z7558axq11d5pwkm4h11sdw7d13w0d")) (define-public clang (clang-from-llvm llvm clang-runtime - "1wwr8s6lzr324hv4s1k6na4j5zv6n9kdhi14s4kb9b13d93814df")) + "1prc72xmkgx8wrzmrr337776676nhsp1qd3mw2bvb22bzdnq7lsc" + #:patches '("clang-3.8-libc-search-path.patch"))) -(define-public llvm-3.5 +(define-public llvm-3.7 (package (inherit llvm) - (version "3.5.0") + (version "3.7.1") (source (origin (method url-fetch) @@ -191,13 +203,55 @@ (define-public llvm-3.5 version "/llvm-" version ".src.tar.xz")) (sha256 (base32 - "00swb43mzlvda8306arlg2jw7g6k3acwfccgf1k4c2pgd3rrkq98")))))) + "1masakdp9g2dan1yrazg7md5am2vacbkb3nahb3dchpc1knr8xxy")))))) + +(define-public clang-runtime-3.7 + (clang-runtime-from-llvm + llvm-3.7 + "10c1mz2q4bdq9bqfgr3dirc6hz1h3sq8573srd5q5lr7m7j6jiwx")) + +(define-public clang-3.7 + (clang-from-llvm llvm-3.7 clang-runtime-3.7 + "0x065d0w9b51xvdjxwfzjxng0gzpbx45fgiaxpap45ragi61dqjn")) + +(define-public llvm-3.6 + (package (inherit llvm) + (version "3.6.2") + (source + (origin + (method url-fetch) + (uri (string-append "http://llvm.org/releases/" + version "/llvm-" version ".src.tar.xz")) + (sha256 + (base32 + "153vcvj8gvgwakzr4j0kndc0b7wn91c2g1vy2vg24s6spxcc23gn")))))) + +(define-public clang-runtime-3.6 + (clang-runtime-from-llvm + llvm-3.6 + "11qx8d3pbfqjaj2x207pvlvzihbs1z2xbw4crpz7aid6h1yz6bqg")) + +(define-public clang-3.6 + (clang-from-llvm llvm-3.6 clang-runtime-3.6 + "1wwr8s6lzr324hv4s1k6na4j5zv6n9kdhi14s4kb9b13d93814df")) + +(define-public llvm-3.5 + (package (inherit llvm) + (version "3.5.2") + (source + (origin + (method url-fetch) + (uri (string-append "http://llvm.org/releases/" + version "/llvm-" version ".src.tar.xz")) + (sha256 + (base32 + "0xf5q17kkxsrm2gsi93h4pwlv663kji73r2g4asb97klsmb626a4")))))) (define-public clang-runtime-3.5 (clang-runtime-from-llvm llvm-3.5 - "0dl1kbrhz96djsxqr61iw5h788s7ncfpfb7aayixky1bhdaydcx4")) + "1hsdnzzdr5kglz6fnv3lcsjs222zjsy14y8ax9dy6zqysanplbal")) (define-public clang-3.5 (clang-from-llvm llvm-3.5 clang-runtime-3.5 - "12yv3jwdjcbkrx7zjm8wh4jrvb59v8fdw4mnmz3zc1jb00p9k07w")) + "0846h8vn3zlc00jkmvrmy88gc6ql6014c02l4jv78fpvfigmgssg")) diff --git a/gnu/packages/logging.scm b/gnu/packages/logging.scm index 68af09e08c..c40d6ebbaf 100644 --- a/gnu/packages/logging.scm +++ b/gnu/packages/logging.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2016 Ricardo Wurmus +;;; Copyright © 2016 Ludovic Courtès ;;; ;;; This file is part of GNU Guix. ;;; @@ -21,8 +22,10 @@ (define-module (gnu packages logging) #:use-module (guix packages) #:use-module (guix utils) #:use-module (guix download) + #:use-module (guix git-download) #:use-module (guix build-system gnu) - #:use-module (gnu packages)) + #:use-module (gnu packages perl) + #:use-module (gnu packages autotools)) (define-public log4cpp (package @@ -45,3 +48,43 @@ (define-public log4cpp staying as close to their API as is reasonable.") (home-page "http://log4cpp.sourceforge.net/") (license license:lgpl2.1+))) + +(define-public glog + (package + (name "glog") + (version "0.3.4") + (home-page "https://github.com/google/glog") + (source (origin + (method git-fetch) + (uri (git-reference + (url home-page) + (commit (string-append "v" version)))) + (sha256 + (base32 + "0ym5g15m7c8kjfr2c3zq6bz08ghin2d1r1nb6v2vnkfh1vn945x1")) + (file-name (string-append name "-" version "-checkout")))) + (build-system gnu-build-system) + (native-inputs + `(("perl" ,perl) ;for tests + ("autoconf" ,(autoconf-wrapper)) + ("automake" ,automake) + ("libtool" ,libtool))) + (arguments + '(#:phases (modify-phases %standard-phases + (add-before 'configure 'add-automake-files + (lambda _ + ;; The 'test-driver' file is a dangling symlink to + ;; /usr/share/automake; replace it. We can't just run + ;; 'automake -ac' because it complains about version + ;; mismatch, so run the whole thing. + (delete-file "test-driver") + (delete-file "configure") ;it's read-only + (zero? (system* "autoreconf" "-vfi"))))))) + (synopsis "C++ logging library") + (description + "Google glog is a library that implements application-level logging. +This library provides logging APIs based on C++-style streams and various +helper macros. You can log a message by simply streaming things to log at a +particular severity level. It allows logging to be controlled from the +command line.") + (license license:bsd-3))) diff --git a/gnu/packages/lsh.scm b/gnu/packages/lsh.scm deleted file mode 100644 index 2ea1591354..0000000000 --- a/gnu/packages/lsh.scm +++ /dev/null @@ -1,159 +0,0 @@ -;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2012, 2013, 2014, 2015, 2016 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 lsh) - #:use-module ((guix licenses) #:prefix license:) - #:use-module (guix packages) - #:use-module (guix download) - #:use-module (guix build-system gnu) - #:use-module (gnu packages) - #:use-module (gnu packages m4) - #:use-module (gnu packages linux) - #:use-module (gnu packages nettle) - #:use-module (gnu packages compression) - #:use-module (gnu packages multiprecision) - #:use-module (gnu packages readline) - #:use-module (gnu packages gperf) - #:use-module (gnu packages guile) - #:use-module (gnu packages xorg)) - -(define-public liboop - (package - (name "liboop") - (version "1.0") - (source - (origin - (method url-fetch) - (uri (string-append "http://download.ofb.net/liboop/liboop-" - version ".tar.gz")) - (sha256 - (base32 - "0z6rlalhvfca64jpvksppc9bdhs7jwhiw4y35g5ibvh91xp3rn1l")) - (patches (search-patches "liboop-mips64-deplibs-fix.patch")))) - (build-system gnu-build-system) - (home-page "http://www.lysator.liu.se/liboop/") - (synopsis "Event loop library") - (description "Liboop is a low-level event loop management library for -POSIX-based operating systems. It supports the development of modular, -multiplexed applications which may respond to events from several sources. It -replaces the \"select() loop\" and allows the registration of event handlers -for file and network I/O, timers and signals. Since processes use these -mechanisms for almost all external communication, liboop can be used as the -basis for almost any application.") - (license license:lgpl2.1+))) - -(define-public lsh - (package - (name "lsh") - (version "2.1") - (source (origin - (method url-fetch) - (uri (string-append "mirror://gnu/lsh/lsh-" - version ".tar.gz")) - (sha256 - (base32 - "1qqjy9zfzgny0rkb27c8c7dfsylvb6n0ld8h3an2r83pmaqr9gwb")) - (modules '((guix build utils))) - (snippet - '(begin - (substitute* "src/testsuite/functions.sh" - (("localhost") - ;; Avoid host name lookups since they don't work in - ;; chroot builds. - "127.0.0.1") - (("set -e") - ;; Make tests more verbose. - "set -e\nset -x")) - - (substitute* (find-files "src/testsuite" "-test$") - (("localhost") "127.0.0.1")) - - (substitute* "src/testsuite/login-auth-test" - (("/bin/cat") "cat")))))) - (build-system gnu-build-system) - (native-inputs - `(("m4" ,m4) - ("guile" ,guile-2.0) - ("gperf" ,gperf) - ("psmisc" ,psmisc))) ; for `killall' - (inputs - `(("nettle" ,nettle-2) - ("linux-pam" ,linux-pam) - - ;; 'rl.c' uses the 'CPPFunction' type, which is no longer in - ;; Readline 6.3. - ("readline" ,readline-6.2) - - ("liboop" ,liboop) - ("zlib" ,zlib) - ("gmp" ,gmp) - - ;; The server (lshd) invokes xauth when X11 forwarding is requested. - ;; This adds 24 MiB (or 27%) to the closure of lsh. - ("xauth" ,xauth))) - (arguments - '(;; Skip the `configure' test that checks whether /dev/ptmx & - ;; co. work as expected, because it relies on impurities (for - ;; instance, /dev/pts may be unavailable in chroots.) - #:configure-flags '("lsh_cv_sys_unix98_ptys=yes") - - ;; FIXME: Tests won't run in a chroot, presumably because - ;; /etc/profile is missing, and thus clients get an empty $PATH - ;; and nothing works. - #:tests? #f - - #:phases - (modify-phases %standard-phases - (add-before 'configure 'pre-configure - (lambda* (#:key inputs #:allow-other-keys) - (let* ((nettle (assoc-ref inputs "nettle")) - (sexp-conv (string-append nettle "/bin/sexp-conv"))) - ;; Make sure 'lsh' and 'lshd' pick 'sexp-conv' in the right place - ;; by default. - (substitute* "src/environ.h.in" - (("^#define PATH_SEXP_CONV.*") - (string-append "#define PATH_SEXP_CONV \"" - sexp-conv "\"\n"))) - - ;; Same for the 'lsh-authorize' script. - (substitute* "src/lsh-authorize" - (("=sexp-conv") - (string-append "=" sexp-conv))) - - ;; Tell lshd where 'xauth' lives. Another option would be to - ;; hardcode "/run/current-system/profile/bin/xauth", thereby - ;; reducing the closure size, but that wouldn't work on foreign - ;; distros. - (with-fluids ((%default-port-encoding "ISO-8859-1")) - (substitute* "src/server_x11.c" - (("define XAUTH_PROGRAM.*") - (string-append "define XAUTH_PROGRAM \"" - (assoc-ref inputs "xauth") - "/bin/xauth\"\n"))))) - - ;; Tests rely on $USER being set. - (setenv "USER" "guix")))))) - (home-page "http://www.lysator.liu.se/~nisse/lsh/") - (synopsis "GNU implementation of the Secure Shell (ssh) protocols") - (description - "GNU lsh is a free implementation of the SSH version 2 protocol. It is -used to create a secure line of communication between two computers, -providing shell access to the server system from the client. It provides -both the server daemon and the client application, as well as tools for -manipulating key files.") - (license license:gpl2+))) diff --git a/gnu/packages/lxde.scm b/gnu/packages/lxde.scm index 7ce31ad36a..c00400ca70 100644 --- a/gnu/packages/lxde.scm +++ b/gnu/packages/lxde.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015 Mathieu Lirzin +;;; Copyright © 2016 Efraim Flashner ;;; ;;; This file is part of GNU Guix. ;;; @@ -71,14 +72,14 @@ (define-public libfm-extra (define-public lxappearance (package (name "lxappearance") - (version "0.6.1") + (version "0.6.2") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/project/lxde/" "LXAppearance/" name "-" version ".tar.xz")) (sha256 (base32 - "1phnv1b2jdj2vlibjyc9z01izcf3k5zxj8glsaf0i3vh77zqmqq9")))) + "07r0xbi6504zjnbpan7zrn7gi4j0kbsqqfpj8v2x94gr05p16qj4")))) (build-system gnu-build-system) (inputs `(("gtk+" ,gtk+-2))) (native-inputs `(("intltool" ,intltool) @@ -92,7 +93,7 @@ (define-public lxappearance (define-public lxrandr (package (name "lxrandr") - (version "0.3.0") + (version "0.3.1") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/project/lxde/LXRandR" @@ -101,7 +102,7 @@ (define-public lxrandr name "-" version ".tar.xz")) (sha256 (base32 - "0xkbqv66hisbxkvnf7y5kwqbhrq26f49wd7w6ylhnjlccpnylg8q")))) + "0khqi42paqg82jllb2kza4arf3fafzgq90fhyr3rw3d9hn23763d")))) (build-system gnu-build-system) (inputs `(("gtk+" ,gtk+-2))) (native-inputs `(("intltool" ,intltool) @@ -118,7 +119,7 @@ (define-public lxrandr (define-public lxtask (package (name "lxtask") - (version "0.1.6") + (version "0.1.7") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/project/lxde/LXTask" @@ -127,7 +128,7 @@ (define-public lxtask name "-" version ".tar.xz")) (sha256 (base32 - "0ia3i430lpwgl2kch6sl1za8qf96wc4fkcv91yhdzgnzafcnm3gp")))) + "1zihhvzsg9bl6k0gv7jwx6cgsi3rmcagvnmshc1h0mjq2immmdph")))) (build-system gnu-build-system) (inputs `(("gtk+" ,gtk+-2))) (native-inputs `(("intltool" ,intltool) @@ -167,7 +168,7 @@ (define-public lxterminal (define-public menu-cache (package (name "menu-cache") - (version "1.0.0") + (version "1.0.1") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/project/lxde/" name "/" @@ -175,7 +176,7 @@ (define-public menu-cache name "-" version ".tar.xz")) (sha256 (base32 - "1bws84fiwk3anp30hcr0lw1xw5cgp44x5ik2yv2ijcgxpcvz8zgz")))) + "0ngxvwfj9drabqi3lyzgpi0d0za6431sy2ijb010filrj54jdiqa")))) (build-system gnu-build-system) (inputs `(("glib" ,glib) ("libfm" ,libfm-extra))) diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm index 5ce7ed4254..a36fd5ff70 100644 --- a/gnu/packages/mail.scm +++ b/gnu/packages/mail.scm @@ -14,6 +14,7 @@ ;;; Copyright © 2016 Leo Famulari ;;; Copyright © 2016 Lukas Gradl ;;; Copyright © 2016 Alex Kost +;;; Copyright © 2016 Troy Sankey ;;; ;;; This file is part of GNU Guix. ;;; @@ -397,6 +398,40 @@ (define-public mu attachments, create new maildirs, and so on.") (license gpl3+))) +(define-public alot + (package + (name "alot") + (version "0.3.7") + (source (origin + (method url-fetch) + ; v0.3.7 not on PyPi yet, so use github instead + (uri (string-append "https://github.com/pazz/alot/archive/" + version ".tar.gz")) + (file-name (string-append "alot-" version ".tar.gz")) + (sha256 + (base32 + "09md9llg38r6xby8l0y0zf8nhlh91cr4xs0r15b294hhp8hl2bgx")))) + (build-system python-build-system) + (arguments + `(#:tests? #f ; no tests + ; python 3 is unsupported, more info: + ; https://github.com/pazz/alot/blob/0.3.7/docs/source/faq.rst + #:python ,python-2)) + (inputs + `(("python2-magic" ,python2-magic) + ("python2-configobj" ,python2-configobj) + ("python2-twisted" ,python2-twisted) + ("python2-urwid" ,python2-urwid) + ("python2-urwidtrees" ,python2-urwidtrees) + ("python2-pygpgme" ,python2-pygpgme) + ("python2-notmuch" ,python2-notmuch))) + (home-page "https://github.com/pazz/alot") + (synopsis "Commandline MUA using notmuch") + (description + "Alot is an experimental terminal mail user agent (MUA) based on +@code{notmuch} mail. It is written in Python using the @code{urwid} toolkit.") + (license gpl3+))) + (define-public notmuch (package (name "notmuch") @@ -519,7 +554,7 @@ (define-public python2-notmuch (define-public getmail (package (name "getmail") - (version "4.48.0") + (version "4.49.0") (source (origin (method url-fetch) @@ -527,7 +562,7 @@ (define-public getmail name "-" version ".tar.gz")) (sha256 (base32 - "0k5rm5kag14izng2ajcagvli9sns5mzvkyfa65ri4xymxs91wi29")))) + "1m0yzxd05fklwbmjj1n2q4sx397c1j5qi9a0r5fv3h8pplz4lv0w")))) (build-system python-build-system) (arguments `(#:tests? #f ; no tests @@ -546,14 +581,14 @@ (define-public getmail (define-public libetpan (package (name "libetpan") - (version "1.6") + (version "1.7.2") (source (origin (method url-fetch) (uri (string-append "https://github.com/dinhviethoa/" name "/archive/" version ".tar.gz")) (file-name (string-append name "-" version ".tar.gz")) (sha256 - (base32 "05qyqx2c1ppb1jnrs3m52i60f9xlxfxdmb9dnwg4vqjv8kwv2qkr")))) + (base32 "081ixgj3skglq9i7v0jb835lmfx21zi4i5b7997igwr0lj174y9j")))) (build-system gnu-build-system) (native-inputs `(("autoconf" ,(autoconf-wrapper)) ("automake" ,automake) @@ -566,7 +601,8 @@ (define-public libetpan ("openssl" ,openssl))) (inputs `(("curl" ,curl) - ("expat" ,expat))) + ("expat" ,expat) + ("zlib" ,zlib))) (arguments '(#:phases (alist-cons-after 'unpack 'autogen diff --git a/gnu/packages/man.scm b/gnu/packages/man.scm index ab5e770b52..9ffbba9de9 100644 --- a/gnu/packages/man.scm +++ b/gnu/packages/man.scm @@ -58,14 +58,14 @@ (define-public libpipeline (define-public man-db (package (name "man-db") - (version "2.7.1") + (version "2.7.5") (source (origin (method url-fetch) (uri (string-append "mirror://savannah/man-db/man-db-" version ".tar.xz")) (sha256 (base32 - "03ly0hbpgjnag576rgccanaisn7f6422q5qxrj64vyzslc2651y4")))) + "056a3il7agfazac12yggcg4gf412yq34k065im0cpfxbcw6xskaw")))) (build-system gnu-build-system) (arguments '(#:phases @@ -129,7 +129,7 @@ (define-public man-db (define-public man-pages (package (name "man-pages") - (version "4.04") + (version "4.06") (source (origin (method url-fetch) (uri @@ -142,7 +142,7 @@ (define-public man-pages "man-pages-" version ".tar.xz"))) (sha256 (base32 - "0v8zxq4scfixy3pjpw9ankvv5v8frv62khv4xm1jpkswyq6rbqcg")))) + "0vv056k9yyf05dqal9m2pq3pv9c8lnp7i5rjxvcnic6aq7vyrafb")))) (build-system gnu-build-system) (arguments '(#:phases (alist-delete 'configure %standard-phases) @@ -168,7 +168,7 @@ (define-public man-pages (define-public help2man (package (name "help2man") - (version "1.47.3") + (version "1.47.4") (source (origin (method url-fetch) @@ -176,7 +176,7 @@ (define-public help2man version ".tar.xz")) (sha256 (base32 - "0miqq77ssk5rgsc9xlv7k5n2wk2c5wv2m1kh4zhbwrggfmjaycn2")))) + "0lvp4306f5nq08f3snffs5pp1zwv8l35z6f5g0dds51zs6bzdv6l")))) (build-system gnu-build-system) (arguments `(;; There's no `check' target. #:tests? #f)) diff --git a/gnu/packages/markdown.scm b/gnu/packages/markdown.scm index a20eef6818..dab3d4eab1 100644 --- a/gnu/packages/markdown.scm +++ b/gnu/packages/markdown.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015 Mathieu Lirzin ;;; Copyright © 2015 David Thompson +;;; Copyright © 2016 Efraim Flashner ;;; ;;; This file is part of GNU Guix. ;;; @@ -31,7 +32,7 @@ (define-module (gnu packages markdown) (define-public hoedown (package (name "hoedown") - (version "3.0.3") + (version "3.0.7") (source (origin (method url-fetch) (uri (string-append "https://github.com/hoedown/hoedown/archive/" @@ -39,7 +40,7 @@ (define-public hoedown (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "0mmmkfayqgh6k39kbi3pq68mg03x35aiygy3zypxzvwx9y8b53ky")))) + "0859dc2xjasd6kgkshi8mb20kbyw5sql1ln0hw3bfaf33qdh5dh1")))) (build-system gnu-build-system) (arguments '(#:make-flags (list "CC=gcc" (string-append "PREFIX=" %output)) diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm index 3b860a957f..b8ec213d8b 100644 --- a/gnu/packages/maths.scm +++ b/gnu/packages/maths.scm @@ -63,6 +63,7 @@ (define-module (gnu packages maths) #:use-module (gnu packages image) #:use-module (gnu packages less) #:use-module (gnu packages lisp) + #:use-module (gnu packages logging) #:use-module (gnu packages gnome) #:use-module (gnu packages guile) #:use-module (gnu packages xorg) @@ -333,7 +334,8 @@ (define-public lapack (inputs `(("fortran" ,gfortran) ("python" ,python-2))) (arguments - `(#:configure-flags '("-DBUILD_SHARED_LIBS:BOOL=YES") + `(#:configure-flags '("-DBUILD_SHARED_LIBS:BOOL=YES" + "-DLAPACKE=ON") #:phases (alist-cons-before 'check 'patch-python (lambda* (#:key inputs #:allow-other-keys) @@ -644,10 +646,7 @@ (define-public ceres (build-system cmake-build-system) (arguments ;; TODO: Build HTML user documentation and install separately. - ;; XXX: Use the embedded "miniglog" as a replacement for - ;; . TODO: Use Glog when it's available. - '(#:configure-flags '("-DMINIGLOG=ON" - "-DBUILD_EXAMPLES=OFF" + '(#:configure-flags '("-DBUILD_EXAMPLES=OFF" "-DBUILD_SHARED_LIBS=ON") #:phases (modify-phases %standard-phases @@ -660,6 +659,8 @@ (define-public ceres #t))))) (native-inputs `(("pkg-config" ,pkg-config))) + (propagated-inputs + `(("glog" ,glog))) ;for #include (inputs `(("eigen" ,eigen) ("blas" ,openblas) @@ -1874,7 +1875,7 @@ (define-public openblas (define-public openlibm (package (name "openlibm") - (version "0.4.1") + (version "0.5.1") (source (origin (method url-fetch) @@ -1883,7 +1884,7 @@ (define-public openlibm (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "0cwqqqlblj3kzp9aq1wnpfs1fl0qd1wp1xzm5shb09w06i4rh9nn")))) + "11czx2z7nh6dfpz45s3xl7v38hw36jxzxfvny454bk3if14pfakq")))) (build-system gnu-build-system) (arguments `(#:make-flags @@ -1911,7 +1912,7 @@ (define-public openlibm (define-public openspecfun (package (name "openspecfun") - (version "0.4") + (version "0.5.2") (source (origin (method url-fetch) @@ -1920,7 +1921,7 @@ (define-public openspecfun (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "0nsa3jjmlhcqkw5ba5ypbn3n0c8b6lc22zzlxnmxkxi9shhdx65z")))) + "1y5b2h6f2k72536kym3vzy3li3bhpd23x463g7hdmjdi3cncavz1")))) (build-system gnu-build-system) (arguments '(#:tests? #f ;no "check" target @@ -2119,14 +2120,13 @@ (define-public atlas the machine where it is installed, without resorting to pre-built substitutes. Before building the library, CPU throttling should be disabled. This can be -done in the BIOS, or, on GNU/Linux, with the following commands: +done in the BIOS, or, on GNU/Linux, with the following command: -cpufreq-selector -g performance -c 0 -... -cpufreq-selector -g performance -c N-1 +@example +# cpupower --governor performance +@end example -where N is the number of cores of your CPU. Failure to do so will result in a -library with poor performance.") +Failure to do so will result in a library with poor performance.") (license license:bsd-3))) (define-public glm diff --git a/gnu/packages/messaging.scm b/gnu/packages/messaging.scm index 215fa19bb8..de9ac179bb 100644 --- a/gnu/packages/messaging.scm +++ b/gnu/packages/messaging.scm @@ -257,7 +257,7 @@ (define-public ngircd (define-public pidgin (package (name "pidgin") - (version "2.10.11") + (version "2.11.0") (source (origin (method url-fetch) @@ -265,7 +265,7 @@ (define-public pidgin version "/" name "-" version ".tar.bz2")) (sha256 (base32 - "01s0q30qrjlzj7kkz6f8lvrwsdd55a9yjh2xjjwyyxzw849j3bpj")) + "0crkggjj6y07v1kdwil9vw532b0vrs6p33nmlvdkpnl60m2169pp")) (patches (search-patches "pidgin-add-search-path.patch")))) (build-system glib-or-gtk-build-system) (native-inputs diff --git a/gnu/packages/mpd.scm b/gnu/packages/mpd.scm index 3162cf18b8..da7c1ccb37 100644 --- a/gnu/packages/mpd.scm +++ b/gnu/packages/mpd.scm @@ -71,7 +71,7 @@ (define-public libmpdclient (define-public mpd (package (name "mpd") - (version "0.19.14") + (version "0.19.17") (source (origin (method url-fetch) (uri @@ -80,7 +80,7 @@ (define-public mpd "/mpd-" version ".tar.xz")) (sha256 (base32 - "1rwr1qb9an1qylddf35xwdasyfkxghd00c29saj04l1f2c2kilig")))) + "1xxjkwbs0d1bdcsykhmw6l1lybpyp2l7b2bw58y1j70w5fnwhzj8")))) (build-system gnu-build-system) (inputs `(("ao" ,ao) ("alsa-lib" ,alsa-lib) diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm index dfc21cc95f..91ba4be97b 100644 --- a/gnu/packages/music.scm +++ b/gnu/packages/music.scm @@ -6,6 +6,7 @@ ;;; Copyright © 2016 Efraim Flashner ;;; Copyright © 2016 Leo Famulari ;;; Copyright © 2016 Kei Kebreau +;;; Copyright © 2016 John J. Foerch ;;; ;;; This file is part of GNU Guix. ;;; @@ -715,6 +716,49 @@ (define-public synthv1 oscillators and stereo effects.") (license license:gpl2+))) +(define-public amsynth + (package + (name "amsynth") + (version "1.6.4") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/amsynth/amsynth/releases/" + "download/release-" version + "/amsynth-" version ".tar.bz2")) + (sha256 + (base32 + "07dp9dl38g9krjqxxh89l2z42z08yzrl57cx95b1l67xnxwjp5k3")))) + (build-system gnu-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-before 'configure 'set-flags + (lambda _ + ;; Compile with C++11, required by gtkmm. + (setenv "CXXFLAGS" "-std=c++11") + #t))))) + (inputs + `(("alsa-lib" ,alsa-lib) + ("jack" ,jack-1) + ("lv2" ,lv2) + ("libsndfile" ,libsndfile) + ("gtk+" ,gtk+-2) + ("gtkmm" ,gtkmm-2))) + (native-inputs + `(("pkg-config" ,pkg-config))) + (home-page "http://amsynth.github.io") + (synopsis "Analog modeling synthesizer") + (description + "amsynth is an easy-to-use software synthesizer with a classic +subtractive synthesizer topology. Its features include: dual +oscillators (sine, saw, square, noise) with hard sync; 12 and 24 dB/oct +resonant filters (low-pass, high-pass, band-pass, notch); mono, poly, legato +keyboard modes; dual ADSR envelope generators for filter and amplitude; LFO +which can modulate the oscillators, filter, and amplitude; distortion and +reverb effects.") + (license license:gpl2+))) + (define-public setbfree (package (name "setbfree") @@ -1594,3 +1638,30 @@ (define-public moc formats, including most audio formats recognized by FFMpeg.") (home-page "http://moc.daper.net") (license license:gpl2+))) + +(define-public midicsv + (package + (name "midicsv") + (version "1.1") + (source (origin + (method url-fetch) + (uri (string-append "http://www.fourmilab.ch/webtools/midicsv/" + name "-" version ".tar.gz")) + (sha256 + (base32 + "1vvhk2nf9ilfw0wchmxy8l13hbw9cnpz079nsx5srsy4nnd78nkw")))) + (build-system gnu-build-system) + (arguments + `(#:phases (modify-phases %standard-phases (delete 'configure)) + #:make-flags (list "CC=gcc" (string-append "INSTALL_DEST=" %output)))) + (synopsis "Convert MIDI files to and from CSV") + (description + "Midicsv reads a standard MIDI file and decodes it into a comma-separated +value file (CSV), which preserves all the information in the MIDI file. The +ASCII CSV file may be loaded into a spreadsheet or database application, or +processed by a program to transform the MIDI data (for example, to key +transpose a composition or extract a track from a multi-track sequence). A +CSV file in the format created by midicsv may be converted back into a +standard MIDI file with the csvmidi program.") + (home-page "http://www.fourmilab.ch/webtools/midicsv/") + (license license:public-domain))) diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm index 72c601102c..9e4f7bb010 100644 --- a/gnu/packages/networking.scm +++ b/gnu/packages/networking.scm @@ -4,7 +4,7 @@ ;;; Copyright © 2015 Mark H Weaver ;;; Copyright © 2015 Stefan Reichör ;;; Copyright © 2016 Raimon Grau -;;; Copyright © 2016 Tobias Geerinckx-Rice +;;; Copyright © 2016 Tobias Geerinckx-Rice ;;; Copyright 2016 John Darrington ;;; Copyright © 2016 Nicolas Goaziou ;;; diff --git a/gnu/packages/ninja.scm b/gnu/packages/ninja.scm index cfcc6d5a51..8f18eb3560 100644 --- a/gnu/packages/ninja.scm +++ b/gnu/packages/ninja.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015 Sou Bunnbu ;;; Copyright © 2015 Mark H Weaver +;;; Copyright © 2016 Efraim Flashner ;;; ;;; This file is part of GNU Guix. ;;; @@ -28,7 +29,7 @@ (define-module (gnu packages ninja) (define-public ninja (package (name "ninja") - (version "1.5.3") + (version "1.7.1") (source (origin (method url-fetch) (uri (string-append "https://github.com/martine/ninja/" @@ -36,7 +37,7 @@ (define-public ninja (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "1h3yfwcfl61v493vna6jia2fizh8rpig7qw2504cvkr6gid3p5bw")) + "06dy2dc1aafm61ynw9gzig88la3km9dsh53bxf4mnw7l7kjisn2i")) (patches (search-patches "ninja-zero-mtime.patch" "ninja-tests.patch")))) (build-system gnu-build-system) @@ -69,7 +70,7 @@ (define-public ninja (install-file "ninja" bin) (install-file "doc/manual.asciidoc" doc) #t)))))) - (home-page "http://martine.github.io/ninja/") + (home-page "https://ninja-build.org/") (synopsis "Small build system") (description "Ninja is a small build system with a focus on speed. It differs from diff --git a/gnu/packages/node.scm b/gnu/packages/node.scm index 2f269d08b1..887ef930ff 100644 --- a/gnu/packages/node.scm +++ b/gnu/packages/node.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2014 Cyrill Schenkel ;;; Copyright © 2015 Andreas Enge ;;; Copyright © 2015, 2016 David Thompson +;;; Copyright © 2016 Ludovic Courtès ;;; ;;; This file is part of GNU Guix. ;;; @@ -99,7 +100,23 @@ (define-public node (zero? (apply system* (string-append (assoc-ref inputs "python") "/bin/python") - "configure" flags)))))))) + "configure" flags))))) + (replace 'patch-shebangs + (lambda* (#:key outputs #:allow-other-keys #:rest all) + ;; Work around . + (let* ((patch (assoc-ref %standard-phases 'patch-shebangs)) + (npm (string-append (assoc-ref outputs "out") + "/bin/npm")) + (target (readlink npm))) + (and (apply patch all) + (with-directory-excursion (dirname npm) + ;; Turn NPM into a symlink to TARGET again, which 'npm' + ;; relies on for the resolution of relative file names + ;; in JS files. + (delete-file target) + (rename-file npm target) + (symlink target npm) + #t)))))))) (native-inputs `(("python" ,python-2) ("perl" ,perl) diff --git a/gnu/packages/openstack.scm b/gnu/packages/openstack.scm index 780fb7f252..a316af9666 100644 --- a/gnu/packages/openstack.scm +++ b/gnu/packages/openstack.scm @@ -529,14 +529,14 @@ (define-public python2-oslo.serialization (define-public python-oslosphinx (package (name "python-oslosphinx") - (version "4.2.0") + (version "4.3.0") (source (origin (method url-fetch) (uri (pypi-uri "oslosphinx" version)) (sha256 (base32 - "178svff46pmynpsnw06gpxk0w13p1gwkqbsvyxphblxv9wl09ksz")))) + "0cz8ym4i1n4rgljlqhyhfkpgdmid7nkb909k8r8nk186m9cmpla2")))) (build-system python-build-system) (propagated-inputs `(("python-requests" ,python-requests))) diff --git a/gnu/packages/owncloud.scm b/gnu/packages/owncloud.scm index 4969d31c01..f755df4f0b 100644 --- a/gnu/packages/owncloud.scm +++ b/gnu/packages/owncloud.scm @@ -34,14 +34,27 @@ (define-module (gnu packages owncloud) (define-public owncloud-client (package (name "owncloud-client") - (version "2.2.1") + (version "2.2.2") (source (origin (method url-fetch) (uri (string-append "https://download.owncloud.com/desktop/stable/" "owncloudclient-" version ".tar.xz")) (sha256 - (base32 "1wis62jk4y4mbr25y39y6af57pi6vp2mbryazmvn6zgnygf69m3h")))) + (base32 "0m0pxv12w72qqgxim9fh8w3bgkgnhpjyay8ldll3nnzq1jmhk09n")) + (modules '((guix build utils))) + (snippet + '(begin + ;; only allows bundled libcrashreporter-qt + (delete-file-recursively "src/3rdparty/libcrashreporter-qt") + ;; we already package qtkeychain and sqlite + (delete-file-recursively "src/3rdparty/qtkeychain") + (delete-file-recursively "src/3rdparty/sqlite3") + ;; qjson is packaged, qprogessindicator, qlockedfile, qtokenizer and + ;; qtsingleapplication have not yet been packaged, but all are + ;; explicitly used from the 3rdparty folder during build. + ;; We can also remove the macgoodies folder + (delete-file-recursively "src/3rdparty/qtmacgoodies"))))) (build-system cmake-build-system) (arguments `(#:phases diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm index f3a1cda149..cd58fde249 100644 --- a/gnu/packages/package-management.scm +++ b/gnu/packages/package-management.scm @@ -192,7 +192,8 @@ (define (copy arch) (propagated-inputs `(("gnutls" ,gnutls) ;for 'guix download' & co. ("guile-json" ,guile-json) - ("geiser" ,geiser))) ;for guix.el + ("geiser" ,geiser) ;for guix.el + ("emacs-magit-popup" ,emacs-magit-popup))) ;for "M-x guix" command (home-page "http://www.gnu.org/software/guix") (synopsis "Functional package manager for installed software packages and versions") @@ -474,13 +475,13 @@ (define-public rpm (define-public diffoscope (package (name "diffoscope") - (version "51") + (version "54") (source (origin (method url-fetch) (uri (pypi-uri name version)) (sha256 (base32 - "18rn6rrwh586228vnaf1nq0wayh19zbvfc0qmnbys6ln2pv2v007")))) + "1dv46ywzcll3mlqgvr48mq7rncizfvsic62c6dd2kdhynb22087n")))) (build-system python-build-system) (arguments `(#:phases (modify-phases %standard-phases diff --git a/gnu/packages/parallel.scm b/gnu/packages/parallel.scm index d1f49abed3..766167d6e9 100644 --- a/gnu/packages/parallel.scm +++ b/gnu/packages/parallel.scm @@ -44,7 +44,7 @@ (define-module (gnu packages parallel) (define-public parallel (package (name "parallel") - (version "20160522") + (version "20160622") (source (origin (method url-fetch) @@ -52,7 +52,7 @@ (define-public parallel version ".tar.bz2")) (sha256 (base32 - "03r07ksxw5xx946x9s26ivifgldr8bc9bz6da4wfrd0dx4546xyy")))) + "1axng9bwapmb0vrrv67pp787gv7r5g02zyrfwnrhpxhi8zmm1jmg")))) (build-system gnu-build-system) (inputs `(("perl" ,perl))) (home-page "http://www.gnu.org/software/parallel/") diff --git a/gnu/packages/patches/avrdude-fix-libusb.patch b/gnu/packages/patches/avrdude-fix-libusb.patch deleted file mode 100644 index 13d0eca91c..0000000000 --- a/gnu/packages/patches/avrdude-fix-libusb.patch +++ /dev/null @@ -1,256 +0,0 @@ -Avrdude cannot build with our version of libusb. This patch fixes that. -See http://savannah.nongnu.org/bugs/?41854 - -diff --git a/dfu.c b/dfu.c -index 7d349bc..0f80440 100644 ---- a/dfu.c -+++ b/dfu.c -@@ -36,13 +36,14 @@ - - #ifndef HAVE_LIBUSB - --int dfu_open(struct dfu_dev *dfu, char *port_name) { -+struct dfu_dev * dfu_open(char *port_spec) { - fprintf(stderr, "%s: Error: No USB support in this compile of avrdude\n", - progname); -- return -1; -+ return NULL; - } - --int dfu_init(struct dfu_dev *dfu, unsigned short usb_pid) { -+int dfu_init(struct dfu_dev *dfu, -+ unsigned short vid, unsigned short pid) { - return -1; - } - -diff --git a/flip1.c b/flip1.c -index b891d80..0959996 100644 ---- a/flip1.c -+++ b/flip1.c -@@ -164,6 +164,8 @@ static void flip1_setup(PROGRAMMER * pgm); - static void flip1_teardown(PROGRAMMER * pgm); - - /* INTERNAL PROGRAMMER FUNCTION PROTOTYPES */ -+#ifdef HAVE_LIBUSB -+// The internal ones are made conditional, as they're not defined further down #ifndef HAVE_LIBUSB - - static void flip1_show_info(struct flip1 *flip1); - -@@ -177,6 +179,8 @@ static const char * flip1_mem_unit_str(enum flip1_mem_unit mem_unit); - static int flip1_set_mem_page(struct dfu_dev *dfu, unsigned short page_addr); - static enum flip1_mem_unit flip1_mem_unit(const char *name); - -+#endif /* HAVE_LIBUSB */ -+ - /* THE INITPGM FUNCTION DEFINITIONS */ - - void flip1_initpgm(PROGRAMMER *pgm) -@@ -201,6 +205,7 @@ void flip1_initpgm(PROGRAMMER *pgm) - pgm->teardown = flip1_teardown; - } - -+#ifdef HAVE_LIBUSB - /* EXPORTED PROGRAMMER FUNCTION DEFINITIONS */ - - int flip1_open(PROGRAMMER *pgm, char *port_spec) -@@ -876,3 +881,82 @@ enum flip1_mem_unit flip1_mem_unit(const char *name) { - return FLIP1_MEM_UNIT_EEPROM; - return FLIP1_MEM_UNIT_UNKNOWN; - } -+#else /* HAVE_LIBUSB */ -+// Dummy functions -+int flip1_open(PROGRAMMER *pgm, char *port_spec) -+{ -+ fprintf(stderr, "%s: Error: No USB support in this compile of avrdude\n", -+ progname); -+ return NULL; -+} -+ -+int flip1_initialize(PROGRAMMER* pgm, AVRPART *part) -+{ -+ return -1; -+} -+ -+void flip1_close(PROGRAMMER* pgm) -+{ -+} -+ -+void flip1_enable(PROGRAMMER* pgm) -+{ -+} -+ -+void flip1_disable(PROGRAMMER* pgm) -+{ -+} -+ -+void flip1_display(PROGRAMMER* pgm, const char *prefix) -+{ -+} -+ -+int flip1_program_enable(PROGRAMMER* pgm, AVRPART *part) -+{ -+ return -1; -+} -+ -+int flip1_chip_erase(PROGRAMMER* pgm, AVRPART *part) -+{ -+ return -1; -+} -+ -+int flip1_read_byte(PROGRAMMER* pgm, AVRPART *part, AVRMEM *mem, -+ unsigned long addr, unsigned char *value) -+{ -+ return -1; -+} -+ -+int flip1_write_byte(PROGRAMMER* pgm, AVRPART *part, AVRMEM *mem, -+ unsigned long addr, unsigned char value) -+{ -+ return -1; -+} -+ -+int flip1_paged_load(PROGRAMMER* pgm, AVRPART *part, AVRMEM *mem, -+ unsigned int page_size, unsigned int addr, unsigned int n_bytes) -+{ -+ return -1; -+} -+ -+int flip1_paged_write(PROGRAMMER* pgm, AVRPART *part, AVRMEM *mem, -+ unsigned int page_size, unsigned int addr, unsigned int n_bytes) -+{ -+ return -1; -+} -+ -+int flip1_read_sig_bytes(PROGRAMMER* pgm, AVRPART *part, AVRMEM *mem) -+{ -+ return -1; -+} -+ -+void flip1_setup(PROGRAMMER * pgm) -+{ -+} -+ -+void flip1_teardown(PROGRAMMER * pgm) -+{ -+} -+ -+ -+#endif /* HAVE_LIBUSB */ -\ No newline at end of file - -diff --git a/flip2.c b/flip2.c -index ed8e996..16c4bf8 100644 ---- a/flip2.c -+++ b/flip2.c -@@ -151,6 +151,8 @@ static void flip2_setup(PROGRAMMER * pgm); - static void flip2_teardown(PROGRAMMER * pgm); - - /* INTERNAL PROGRAMMER FUNCTION PROTOTYPES */ -+#ifdef HAVE_LIBUSB -+// The internal ones are made conditional, as they're not defined further down #ifndef HAVE_LIBUSB - - static void flip2_show_info(struct flip2 *flip2); - -@@ -171,6 +173,8 @@ static const char * flip2_status_str(const struct dfu_status *status); - static const char * flip2_mem_unit_str(enum flip2_mem_unit mem_unit); - static enum flip2_mem_unit flip2_mem_unit(const char *name); - -+#endif /* HAVE_LIBUSB */ -+ - /* THE INITPGM FUNCTION DEFINITIONS */ - - void flip2_initpgm(PROGRAMMER *pgm) -@@ -195,6 +199,7 @@ void flip2_initpgm(PROGRAMMER *pgm) - pgm->teardown = flip2_teardown; - } - -+#ifdef HAVE_LIBUSB - /* EXPORTED PROGRAMMER FUNCTION DEFINITIONS */ - - int flip2_open(PROGRAMMER *pgm, char *port_spec) -@@ -922,3 +927,85 @@ enum flip2_mem_unit flip2_mem_unit(const char *name) { - return FLIP2_MEM_UNIT_SIGNATURE; - return FLIP2_MEM_UNIT_UNKNOWN; - } -+ -+#else /* HAVE_LIBUSB */ -+ -+/* EXPORTED PROGRAMMER FUNCTION DEFINITIONS */ -+ -+int flip2_open(PROGRAMMER *pgm, char *port_spec) -+{ -+ fprintf(stderr, "%s: Error: No USB support in this compile of avrdude\n", -+ progname); -+ return NULL; -+} -+ -+int flip2_initialize(PROGRAMMER* pgm, AVRPART *part) -+{ -+ return -1; -+} -+ -+void flip2_close(PROGRAMMER* pgm) -+{ -+} -+ -+void flip2_enable(PROGRAMMER* pgm) -+{ -+} -+ -+void flip2_disable(PROGRAMMER* pgm) -+{ -+} -+ -+void flip2_display(PROGRAMMER* pgm, const char *prefix) -+{ -+} -+ -+int flip2_program_enable(PROGRAMMER* pgm, AVRPART *part) -+{ -+ return -1; -+} -+ -+int flip2_chip_erase(PROGRAMMER* pgm, AVRPART *part) -+{ -+ return -1; -+} -+ -+int flip2_read_byte(PROGRAMMER* pgm, AVRPART *part, AVRMEM *mem, -+ unsigned long addr, unsigned char *value) -+{ -+ return -1; -+} -+ -+int flip2_write_byte(PROGRAMMER* pgm, AVRPART *part, AVRMEM *mem, -+ unsigned long addr, unsigned char value) -+{ -+ return -1; -+} -+ -+int flip2_paged_load(PROGRAMMER* pgm, AVRPART *part, AVRMEM *mem, -+ unsigned int page_size, unsigned int addr, unsigned int n_bytes) -+{ -+ return -1; -+} -+ -+int flip2_paged_write(PROGRAMMER* pgm, AVRPART *part, AVRMEM *mem, -+ unsigned int page_size, unsigned int addr, unsigned int n_bytes) -+{ -+ return -1; -+} -+ -+int flip2_read_sig_bytes(PROGRAMMER* pgm, AVRPART *part, AVRMEM *mem) -+{ -+ return -1; -+} -+ -+void flip2_setup(PROGRAMMER * pgm) -+{ -+} -+ -+void flip2_teardown(PROGRAMMER * pgm) -+{ -+} -+ -+ -+#endif /* HAVE_LIBUSB */ diff --git a/gnu/packages/patches/clang-3.8-libc-search-path.patch b/gnu/packages/patches/clang-3.8-libc-search-path.patch new file mode 100644 index 0000000000..0f7d0a4add --- /dev/null +++ b/gnu/packages/patches/clang-3.8-libc-search-path.patch @@ -0,0 +1,69 @@ +Clang attempts to guess file names based on the OS and distro (yes!), +but unfortunately, that doesn't work for us. + +This patch makes it easy to insert libc's $libdir so that Clang passes the +correct absolute file name of crt1.o etc. to 'ld'. It also disables all +the distro-specific stuff and removes the hard-coded FHS directory names +to make sure Clang also works on non-GuixSD systems. + +This patch makes slight adjustments over "clang-libc-search-path.patch" for +changes in clang 3.8. + +--- cfe-3.8.0.src/lib/Driver/ToolChains.cpp ++++ cfe-3.8.0.src/lib/Driver/ToolChains.cpp +@@ -3661,6 +3661,9 @@ + GCCInstallation.getTriple().str() + "/bin") + .str()); + ++ // Comment out the distro-specific tweaks so that they don't bite when ++ // using Guix on a foreign distro. ++#if 0 + Distro Distro = DetectDistro(D, Arch); + + if (IsOpenSUSE(Distro) || IsUbuntu(Distro)) { +@@ -3702,6 +3705,7 @@ + + if (IsOpenSUSE(Distro)) + ExtraOpts.push_back("--enable-new-dtags"); ++#endif + + // The selection of paths to try here is designed to match the patterns which + // the GCC driver itself uses, as this is part of the GCC-compatible driver. +@@ -3771,14 +3775,12 @@ + addPathIfExists(D, D.Dir + "/../" + OSLibDir, Paths); + } + +- addPathIfExists(D, SysRoot + "/lib/" + MultiarchTriple, Paths); +- addPathIfExists(D, SysRoot + "/lib/../" + OSLibDir, Paths); +- addPathIfExists(D, SysRoot + "/usr/lib/" + MultiarchTriple, Paths); +- addPathIfExists(D, SysRoot + "/usr/lib/../" + OSLibDir, Paths); +- + // Try walking via the GCC triple path in case of biarch or multiarch GCC + // installations with strange symlinks. + if (GCCInstallation.isValid()) { ++ // The following code would end up adding things like ++ // "/usr/lib/x86_64-unknown-linux-gnu/../../lib64" to the search path. ++#if 0 + addPathIfExists(D, + SysRoot + "/usr/lib/" + GCCInstallation.getTriple().str() + + "/../../" + OSLibDir, +@@ -3791,6 +3793,7 @@ + BiarchSibling.gccSuffix(), + Paths); + } ++#endif + + // See comments above on the multilib variant for details of why this is + // included even from outside the sysroot. +@@ -3815,8 +3818,9 @@ + if (StringRef(D.Dir).startswith(SysRoot)) + addPathIfExists(D, D.Dir + "/../lib", Paths); + +- addPathIfExists(D, SysRoot + "/lib", Paths); +- addPathIfExists(D, SysRoot + "/usr/lib", Paths); ++ // Add libc's lib/ directory to the search path, so that crt1.o, crti.o, ++ // and friends can be found. ++ addPathIfExists(D, "@GLIBC_LIBDIR@", Paths); + } + + bool Linux::HasNativeLLVMSupport() const { return true; } diff --git a/gnu/packages/patches/gd-CVE-2016-5766.patch b/gnu/packages/patches/gd-CVE-2016-5766.patch new file mode 100644 index 0000000000..400cb0ab48 --- /dev/null +++ b/gnu/packages/patches/gd-CVE-2016-5766.patch @@ -0,0 +1,81 @@ +Fix CVE-2016-5766 (Integer Overflow in _gd2GetHeader() resulting in heap +overflow). + +https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-5766 + +Adapted from upstream commits: +https://github.com/libgd/libgd/commit/aba3db8ba159465ecec1089027a24835a6da9cc0 +https://github.com/libgd/libgd/commit/a6a0e7feabb2a9738086a5dc96348f233c87fa79 + +Since `patch` cannot apply Git binary diffs, we omit the addition of +'tests/gd2/php_bug_72339.c' and its associated binary data. + +From aba3db8ba159465ecec1089027a24835a6da9cc0 Mon Sep 17 00:00:00 2001 +From: Pierre Joye +Date: Tue, 28 Jun 2016 16:23:42 +0700 +Subject: [PATCH] fix php bug 72339 (CVE-2016-5766), Integer Overflow in + _gd2GetHeader() resulting in heap overflow + +--- + src/gd_gd2.c | 5 ++++- + tests/gd2/CMakeLists.txt | 1 + + tests/gd2/Makemodule.am | 6 ++++-- + tests/gd2/php_bug_72339.c | 21 +++++++++++++++++++++ + tests/gd2/php_bug_72339_exp.gd2 | Bin 0 -> 67108882 bytes + 5 files changed, 30 insertions(+), 3 deletions(-) + create mode 100644 tests/gd2/php_bug_72339.c + create mode 100644 tests/gd2/php_bug_72339_exp.gd2 + +diff --git a/src/gd_gd2.c b/src/gd_gd2.c +index fd1e0c9..bdbbecf 100644 +--- a/src/gd_gd2.c ++++ b/src/gd_gd2.c +@@ -154,8 +154,11 @@ _gd2GetHeader (gdIOCtxPtr in, int *sx, int *sy, + nc = (*ncx) * (*ncy); + GD2_DBG (printf ("Reading %d chunk index entries\n", nc)); + sidx = sizeof (t_chunk_info) * nc; ++ if (overflow2(sidx, nc)) { ++ goto fail1; ++ } + cidx = gdCalloc (sidx, 1); +- if (!cidx) { ++ if (cidx == NULL) { + goto fail1; + } + for (i = 0; i < nc; i++) { +From a6a0e7feabb2a9738086a5dc96348f233c87fa79 Mon Sep 17 00:00:00 2001 +From: Pierre Joye +Date: Wed, 29 Jun 2016 09:36:26 +0700 +Subject: [PATCH] fix php bug 72339 (CVE-2016-5766), Integer Overflow in + _gd2GetHeader() resulting in heap overflow. Sync with php's sync + +--- + src/gd_gd2.c | 7 ++++++- + tests/gd2/php_bug_72339.c | 2 +- + 2 files changed, 7 insertions(+), 2 deletions(-) + +diff --git a/src/gd_gd2.c b/src/gd_gd2.c +index bdbbecf..2837456 100644 +--- a/src/gd_gd2.c ++++ b/src/gd_gd2.c +@@ -152,11 +152,16 @@ _gd2GetHeader (gdIOCtxPtr in, int *sx, int *sy, + + if (gd2_compressed (*fmt)) { + nc = (*ncx) * (*ncy); ++ + GD2_DBG (printf ("Reading %d chunk index entries\n", nc)); ++ if (overflow2(sizeof(t_chunk_info), nc)) { ++ goto fail1; ++ } + sidx = sizeof (t_chunk_info) * nc; +- if (overflow2(sidx, nc)) { ++ if (sidx <= 0) { + goto fail1; + } ++ + cidx = gdCalloc (sidx, 1); + if (cidx == NULL) { + goto fail1; +-- +2.9.1 + diff --git a/gnu/packages/patches/gd-CVE-2016-6128.patch b/gnu/packages/patches/gd-CVE-2016-6128.patch new file mode 100644 index 0000000000..45ee6b0cfa --- /dev/null +++ b/gnu/packages/patches/gd-CVE-2016-6128.patch @@ -0,0 +1,253 @@ +Fix CVE-2016-6128 (invalid color index is not properly handled leading +to denial of service). + +https://cve.mitre.org/cgi-bin/cvename.cgi?name=2016-6128 + +Copied from upstream commits: +https://github.com/libgd/libgd/compare/3fe0a7128bac5000fdcfab888bd2a75ec0c9447d...fd623025505e87bba7ec8555eeb72dae4fb0afd + +From 1ccfe21e14c4d18336f9da8515cd17db88c3de61 Mon Sep 17 00:00:00 2001 +From: Pierre Joye +Date: Mon, 27 Jun 2016 11:17:39 +0700 +Subject: [PATCH 1/8] fix php 72494, invalid color index not handled, can lead + to crash + +--- + src/gd_crop.c | 4 ++++ + tests/CMakeLists.txt | 1 + + tests/Makefile.am | 1 + + 3 files changed, 6 insertions(+) + +diff --git a/src/gd_crop.c b/src/gd_crop.c +index 0296633..532b49b 100644 +--- a/src/gd_crop.c ++++ b/src/gd_crop.c +@@ -136,6 +136,10 @@ BGD_DECLARE(gdImagePtr) gdImageCropThreshold(gdImagePtr im, const unsigned int c + return NULL; + } + ++ if (color < 0 || (!gdImageTrueColor(im) && color >= gdImageColorsTotal(im))) { ++ return NULL; ++ } ++ + /* TODO: Add gdImageGetRowPtr and works with ptr at the row level + * for the true color and palette images + * new formats will simply work with ptr +diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt +index 6f5c786..5093d52 100644 +--- a/tests/CMakeLists.txt ++++ b/tests/CMakeLists.txt +@@ -31,6 +31,7 @@ if (BUILD_TEST) + gdimagecolortransparent + gdimagecopy + gdimagecopyrotated ++ gdimagecrop + gdimagefile + gdimagefill + gdimagefilledellipse +diff --git a/tests/Makefile.am b/tests/Makefile.am +index 4f6e756..5a0ebe8 100644 +--- a/tests/Makefile.am ++++ b/tests/Makefile.am +@@ -25,6 +25,7 @@ include gdimagecolorresolve/Makemodule.am + include gdimagecolortransparent/Makemodule.am + include gdimagecopy/Makemodule.am + include gdimagecopyrotated/Makemodule.am ++include gdimagecrop/Makemodule.am + include gdimagefile/Makemodule.am + include gdimagefill/Makemodule.am + include gdimagefilledellipse/Makemodule.am +-- +2.9.1 + +From 8c9f39c7cb1f62ea00bc7a48aff64d3811c2d6d0 Mon Sep 17 00:00:00 2001 +From: Pierre Joye +Date: Mon, 27 Jun 2016 11:20:07 +0700 +Subject: [PATCH 2/8] fix php 72494, invalid color index not handled, can lead + to crash + +--- + tests/gdimagecrop/.gitignore | 1 + + 1 file changed, 1 insertion(+) + create mode 100644 tests/gdimagecrop/.gitignore + +diff --git a/tests/gdimagecrop/.gitignore b/tests/gdimagecrop/.gitignore +new file mode 100644 +index 0000000..8e8c9c3 +--- /dev/null ++++ b/tests/gdimagecrop/.gitignore +@@ -0,0 +1 @@ ++/php_bug_72494 +-- +2.9.1 + +From 8de370b7b6263a02268037a7cd13ddd991b43ea9 Mon Sep 17 00:00:00 2001 +From: Pierre Joye +Date: Mon, 27 Jun 2016 11:24:50 +0700 +Subject: [PATCH 3/8] fix php 72494, invalid color index not handled, can lead + to crash + +--- + tests/gdimagecrop/CMakeLists.txt | 5 +++++ + 1 file changed, 5 insertions(+) + create mode 100644 tests/gdimagecrop/CMakeLists.txt + +diff --git a/tests/gdimagecrop/CMakeLists.txt b/tests/gdimagecrop/CMakeLists.txt +new file mode 100644 +index 0000000..f7e4c7e +--- /dev/null ++++ b/tests/gdimagecrop/CMakeLists.txt +@@ -0,0 +1,5 @@ ++SET(TESTS_FILES ++ php_bug_72494 ++) ++ ++ADD_GD_TESTS() +-- +2.9.1 + +From bca12e4e11ecda8a0ea719472700ad5c2b36a0d6 Mon Sep 17 00:00:00 2001 +From: Pierre Joye +Date: Mon, 27 Jun 2016 11:25:12 +0700 +Subject: [PATCH 4/8] fix php 72494, invalid color index not handled, can lead + to crash + +--- + tests/gdimagecrop/Makemodule.am | 5 +++++ + 1 file changed, 5 insertions(+) + create mode 100644 tests/gdimagecrop/Makemodule.am + +diff --git a/tests/gdimagecrop/Makemodule.am b/tests/gdimagecrop/Makemodule.am +new file mode 100644 +index 0000000..210888b +--- /dev/null ++++ b/tests/gdimagecrop/Makemodule.am +@@ -0,0 +1,5 @@ ++libgd_test_programs += \ ++ gdimagecrop/php_bug_72494 ++ ++EXTRA_DIST += \ ++ gdimagecrop/CMakeLists.txt +-- +2.9.1 + +From 6ff72ae40c7c20ece939afb362d98cc37f4a1c96 Mon Sep 17 00:00:00 2001 +From: Pierre Joye +Date: Mon, 27 Jun 2016 11:25:40 +0700 +Subject: [PATCH 5/8] fix php 72494, invalid color index not handled, can lead + to crash + +--- + tests/gdimagecrop/php_bug_72494.c | 23 +++++++++++++++++++++++ + 1 file changed, 23 insertions(+) + create mode 100644 tests/gdimagecrop/php_bug_72494.c + +diff --git a/tests/gdimagecrop/php_bug_72494.c b/tests/gdimagecrop/php_bug_72494.c +new file mode 100644 +index 0000000..adaa379 +--- /dev/null ++++ b/tests/gdimagecrop/php_bug_72494.c +@@ -0,0 +1,23 @@ ++#include ++#include ++#include "gd.h" ++ ++#include "gdtest.h" ++ ++int main() ++{ ++ gdImagePtr im, exp; ++ int error = 0; ++ ++ im = gdImageCreate(50, 50); ++ ++ if (!im) { ++ gdTestErrorMsg("gdImageCreate failed.\n"); ++ return 1; ++ } ++ ++ gdImageCropThreshold(im, 1337, 0); ++ gdImageDestroy(im); ++ /* this bug tests a crash, it never reaches this point if the bug exists*/ ++ return 0; ++} +-- +2.9.1 + +From a0f9f8f7bd0d3a6c6afd6d180b8e75d93aadddfa Mon Sep 17 00:00:00 2001 +From: Pierre Joye +Date: Mon, 27 Jun 2016 11:38:07 +0700 +Subject: [PATCH 6/8] fix php 72494, CID 149753, color is unsigned int, remove + useless <0 comparison + +--- + src/gd_crop.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/gd_crop.c b/src/gd_crop.c +index 532b49b..d51ad67 100644 +--- a/src/gd_crop.c ++++ b/src/gd_crop.c +@@ -136,7 +136,7 @@ BGD_DECLARE(gdImagePtr) gdImageCropThreshold(gdImagePtr im, const unsigned int c + return NULL; + } + +- if (color < 0 || (!gdImageTrueColor(im) && color >= gdImageColorsTotal(im))) { ++ if (!gdImageTrueColor(im) && color >= gdImageColorsTotal(im)) { + return NULL; + } + +-- +2.9.1 + +From 907115fbb980862934d0de91af4977a216745039 Mon Sep 17 00:00:00 2001 +From: Pierre Joye +Date: Mon, 27 Jun 2016 11:51:40 +0700 +Subject: [PATCH 7/8] fix php 72494, CID 149753, color is unsigned int, remove + useless <0 comparison + +--- + tests/gdimagecrop/php_bug_72494.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tests/gdimagecrop/php_bug_72494.c b/tests/gdimagecrop/php_bug_72494.c +index adaa379..5cb589b 100644 +--- a/tests/gdimagecrop/php_bug_72494.c ++++ b/tests/gdimagecrop/php_bug_72494.c +@@ -6,7 +6,7 @@ + + int main() + { +- gdImagePtr im, exp; ++ gdImagePtr im; + int error = 0; + + im = gdImageCreate(50, 50); +-- +2.9.1 + +From fd623025505e87bba7ec8555eeb72dae4fb0afdc Mon Sep 17 00:00:00 2001 +From: Pierre Joye +Date: Mon, 27 Jun 2016 12:04:25 +0700 +Subject: [PATCH 8/8] fix php 72494, CID 149753, color is unsigned int, remove + useless <0 comparison + +--- + tests/gdimagecrop/php_bug_72494.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/tests/gdimagecrop/php_bug_72494.c b/tests/gdimagecrop/php_bug_72494.c +index 5cb589b..3bd19be 100644 +--- a/tests/gdimagecrop/php_bug_72494.c ++++ b/tests/gdimagecrop/php_bug_72494.c +@@ -7,7 +7,6 @@ + int main() + { + gdImagePtr im; +- int error = 0; + + im = gdImageCreate(50, 50); + +-- +2.9.1 + diff --git a/gnu/packages/patches/gd-CVE-2016-6132.patch b/gnu/packages/patches/gd-CVE-2016-6132.patch new file mode 100644 index 0000000000..4c475b71b2 --- /dev/null +++ b/gnu/packages/patches/gd-CVE-2016-6132.patch @@ -0,0 +1,55 @@ +Fix CVE-2016-6132 (read out-of-bounds when parsing TGA files). + +https://cve.mitre.org/cgi-bin/cvename.cgi?name=2016-6132 + +Copied from upstream commit: +https://github.com/libgd/libgd/commit/ead349e99868303b37f5e6e9d9d680c9dc71ff8d + +From ead349e99868303b37f5e6e9d9d680c9dc71ff8d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= +Date: Tue, 12 Jul 2016 11:24:09 +0200 +Subject: [PATCH] Fix #247, A read out-of-bands was found in the parsing of TGA + files (CVE-2016-6132) + +--- + src/gd_tga.c | 13 +++++++++++-- + 1 file changed, 11 insertions(+), 2 deletions(-) + +diff --git a/src/gd_tga.c b/src/gd_tga.c +index ef20f86..20fe2d2 100644 +--- a/src/gd_tga.c ++++ b/src/gd_tga.c +@@ -237,7 +237,11 @@ int read_image_tga( gdIOCtx *ctx, oTga *tga ) + return -1; + } + +- gdGetBuf(conversion_buffer, image_block_size, ctx); ++ if (gdGetBuf(conversion_buffer, image_block_size, ctx) != image_block_size) { ++ gd_error("gd-tga: premature end of image data\n"); ++ gdFree(conversion_buffer); ++ return -1; ++ } + + while (buffer_caret < image_block_size) { + tga->bitmap[buffer_caret] = (int) conversion_buffer[buffer_caret]; +@@ -257,11 +261,16 @@ int read_image_tga( gdIOCtx *ctx, oTga *tga ) + } + conversion_buffer = (unsigned char *) gdMalloc(image_block_size * sizeof(unsigned char)); + if (conversion_buffer == NULL) { ++ gd_error("gd-tga: premature end of image data\n"); + gdFree( decompression_buffer ); + return -1; + } + +- gdGetBuf( conversion_buffer, image_block_size, ctx ); ++ if (gdGetBuf(conversion_buffer, image_block_size, ctx) != image_block_size) { ++ gdFree(conversion_buffer); ++ gdFree(decompression_buffer); ++ return -1; ++ } + + buffer_caret = 0; + +-- +2.9.1 + diff --git a/gnu/packages/patches/gd-CVE-2016-6214.patch b/gnu/packages/patches/gd-CVE-2016-6214.patch new file mode 100644 index 0000000000..7894a32bb1 --- /dev/null +++ b/gnu/packages/patches/gd-CVE-2016-6214.patch @@ -0,0 +1,66 @@ +Fix CVE-2016-6214 (read out-of-bounds when parsing TGA files). + +https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-6214 + +Adapted from upstream commit: +https://github.com/libgd/libgd/commit/341aa68843ceceae9ba6e083431f14a07bd92308 + +Since `patch` cannot apply Git binary diffs, we omit the addition of +'tests/tga/bug00247a.c' and its associated binary data. + +From 341aa68843ceceae9ba6e083431f14a07bd92308 Mon Sep 17 00:00:00 2001 +From: "Christoph M. Becker" +Date: Tue, 12 Jul 2016 19:23:13 +0200 +Subject: [PATCH] Unsupported TGA bpp/alphabit combinations should error + gracefully + +Currently, only 24bpp without alphabits and 32bpp with 8 alphabits are +really supported. All other combinations will be rejected with a warning. + +(cherry picked from commit cb1a0b7e54e9aa118270c23a4a6fe560e4590dc9) +--- + src/gd_tga.c | 16 ++++++---------- + tests/tga/.gitignore | 1 + + tests/tga/CMakeLists.txt | 1 + + tests/tga/Makemodule.am | 4 +++- + tests/tga/bug00247a.c | 19 +++++++++++++++++++ + tests/tga/bug00247a.tga | Bin 0 -> 36 bytes + 6 files changed, 30 insertions(+), 11 deletions(-) + create mode 100644 tests/tga/bug00247a.c + create mode 100644 tests/tga/bug00247a.tga + +diff --git a/src/gd_tga.c b/src/gd_tga.c +index 20fe2d2..b4f8fa6 100644 +--- a/src/gd_tga.c ++++ b/src/gd_tga.c +@@ -99,7 +99,7 @@ BGD_DECLARE(gdImagePtr) gdImageCreateFromTgaCtx(gdIOCtx* ctx) + if (tga->bits == TGA_BPP_24) { + *tpix = gdTrueColor(tga->bitmap[bitmap_caret + 2], tga->bitmap[bitmap_caret + 1], tga->bitmap[bitmap_caret]); + bitmap_caret += 3; +- } else if (tga->bits == TGA_BPP_32 || tga->alphabits) { ++ } else if (tga->bits == TGA_BPP_32 && tga->alphabits) { + register int a = tga->bitmap[bitmap_caret + 3]; + + *tpix = gdTrueColorAlpha(tga->bitmap[bitmap_caret + 2], tga->bitmap[bitmap_caret + 1], tga->bitmap[bitmap_caret], gdAlphaMax - (a >> 1)); +@@ -159,16 +159,12 @@ int read_header_tga(gdIOCtx *ctx, oTga *tga) + printf("wxh: %i %i\n", tga->width, tga->height); + #endif + +- switch(tga->bits) { +- case 8: +- case 16: +- case 24: +- case 32: +- break; +- default: +- gd_error("bps %i not supported", tga->bits); ++ if (!((tga->bits == TGA_BPP_24 && tga->alphabits == 0) ++ || (tga->bits == TGA_BPP_32 && tga->alphabits == 8))) ++ { ++ gd_error_ex(GD_WARNING, "gd-tga: %u bits per pixel with %u alpha bits not supported\n", ++ tga->bits, tga->alphabits); + return -1; +- break; + } + + tga->ident = NULL; diff --git a/gnu/packages/patches/gd-fix-test-on-i686.patch b/gnu/packages/patches/gd-fix-test-on-i686.patch new file mode 100644 index 0000000000..6dd2e0fb03 --- /dev/null +++ b/gnu/packages/patches/gd-fix-test-on-i686.patch @@ -0,0 +1,34 @@ +Disable part of the gdimagerotate test on architectures such as i686 +where intermediate floating-point operations are done with 80-bit long +doubles, and typically later rounded to 64-bit doubles. This double +rounding causes small differences in the resulting pixel values +compared with other architectures, causing the image comparison to +fail. + +Patch by Mark H Weaver . + +--- libgd-2.2.2/tests/gdimagerotate/bug00067.c 1969-12-31 19:00:00.000000000 -0500 ++++ libgd-2.2.2/tests/gdimagerotate/bug00067.c 2016-07-18 12:19:19.885423132 -0400 +@@ -1,5 +1,6 @@ + #include + #include ++#include + #include "gd.h" + + #include "gdtest.h" +@@ -41,6 +42,7 @@ + return 1; + } + ++#if FLT_EVAL_METHOD != 2 + sprintf(filename, "bug00067_%03d_exp.png", angle); + path = gdTestFilePath2("gdimagerotate", filename); + if (!gdAssertImageEqualsToFile(path, exp)) { +@@ -48,6 +50,7 @@ + error += 1; + } + free(path); ++#endif + + gdImageDestroy(exp); + } diff --git a/gnu/packages/patches/gimp-CVE-2016-4994.patch b/gnu/packages/patches/gimp-CVE-2016-4994.patch new file mode 100644 index 0000000000..6c81c63386 --- /dev/null +++ b/gnu/packages/patches/gimp-CVE-2016-4994.patch @@ -0,0 +1,96 @@ +Fix CVE-2016-4994: +https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-4994 + +Copied from upstream repository: +https://git.gnome.org/browse/gimp/patch/?id=e82aaa4b4ee0703c879e35ea9321fff6be3e9b6f + +From e82aaa4b4ee0703c879e35ea9321fff6be3e9b6f Mon Sep 17 00:00:00 2001 +From: Shmuel H +Date: Mon, 20 Jun 2016 17:14:41 +0300 +Subject: Bug 767873 - (CVE-2016-4994) Multiple Use-After-Free when parsing... + +...XCF channel and layer properties + +The properties PROP_ACTIVE_LAYER, PROP_FLOATING_SELECTION, +PROP_ACTIVE_CHANNEL saves the current object pointer the @info +structure. Others like PROP_SELECTION (for channel) and +PROP_GROUP_ITEM (for layer) will delete the current object and create +a new object, leaving the pointers in @info invalid (dangling). + +Therefore, if a property from the first type will come before the +second, the result will be an UaF in the last lines of xcf_load_image +(when it actually using the pointers from @info). + +I wasn't able to exploit this bug because that +g_object_instance->c_class gets cleared by the last g_object_unref and +GIMP_IS_{LAYER,CHANNEL} detects that and return FALSE. + +(cherry picked from commit 6d804bf9ae77bc86a0a97f9b944a129844df9395) +--- + app/xcf/xcf-load.c | 29 +++++++++++++++++++++++++++++ + 1 file changed, 29 insertions(+) + +diff --git a/app/xcf/xcf-load.c b/app/xcf/xcf-load.c +index b180377..67cc6d4 100644 +--- a/app/xcf/xcf-load.c ++++ b/app/xcf/xcf-load.c +@@ -904,6 +904,18 @@ xcf_load_layer_props (XcfInfo *info, + case PROP_GROUP_ITEM: + { + GimpLayer *group; ++ gboolean is_active_layer; ++ ++ /* We're going to delete *layer, Don't leave its pointers ++ * in @info. After that, we'll restore them back with the ++ * new pointer. See bug #767873. ++ */ ++ is_active_layer = (*layer == info->active_layer); ++ if (is_active_layer) ++ info->active_layer = NULL; ++ ++ if (*layer == info->floating_sel) ++ info->floating_sel = NULL; + + group = gimp_group_layer_new (image); + +@@ -916,6 +928,13 @@ xcf_load_layer_props (XcfInfo *info, + g_object_ref_sink (*layer); + g_object_unref (*layer); + *layer = group; ++ ++ if (is_active_layer) ++ info->active_layer = *layer; ++ ++ /* Don't restore info->floating_sel because group layers ++ * can't be floating selections ++ */ + } + break; + +@@ -986,6 +1005,12 @@ xcf_load_channel_props (XcfInfo *info, + { + GimpChannel *mask; + ++ /* We're going to delete *channel, Don't leave its pointer ++ * in @info. See bug #767873. ++ */ ++ if (*channel == info->active_channel) ++ info->active_channel = NULL; ++ + mask = + gimp_selection_new (image, + gimp_item_get_width (GIMP_ITEM (*channel)), +@@ -1000,6 +1025,10 @@ xcf_load_channel_props (XcfInfo *info, + *channel = mask; + (*channel)->boundary_known = FALSE; + (*channel)->bounds_known = FALSE; ++ ++ /* Don't restore info->active_channel because the ++ * selection can't be the active channel ++ */ + } + break; + +-- +cgit v0.12 + diff --git a/gnu/packages/patches/khmer-use-libraries.patch b/gnu/packages/patches/khmer-use-libraries.patch new file mode 100644 index 0000000000..47d163a99a --- /dev/null +++ b/gnu/packages/patches/khmer-use-libraries.patch @@ -0,0 +1,16 @@ +Change setup.cfg so that the bundled zlib and bzip2 are not used. This cannot +currently be achieved using "--library z,bz2" as instructed in the setup.py. + +diff --git a/setup.cfg b/setup.cfg +index c054092..080992e 100644 +--- a/setup.cfg ++++ b/setup.cfg +@@ -1,7 +1,7 @@ + [build_ext] + define = SEQAN_HAS_BZIP2,SEQAN_HAS_ZLIB + undef = NO_UNIQUE_RC +-# libraries = z,bz2 ++libraries = z,bz2 + ## if using system libraries + include-dirs = lib:third-party/zlib:third-party/bzip2:third-party/seqan/core/include:third-party/smhasher + # include-dirs = lib diff --git a/gnu/packages/patches/libmtp-devices.patch b/gnu/packages/patches/libmtp-devices.patch deleted file mode 100644 index 9b985e526d..0000000000 --- a/gnu/packages/patches/libmtp-devices.patch +++ /dev/null @@ -1,554 +0,0 @@ -Add additional devices; the patched file corresponds to git commit 8e471b, -to which one additional device has been added as reported at - http://sourceforge.net/p/libmtp/bugs/1422/ - -diff -u -r libmtp-1.1.9.orig/src/music-players.h libmtp-1.1.9/src/music-players.h ---- libmtp-1.1.9.orig/src/music-players.h 2015-09-19 22:54:24.537330594 +0200 -+++ libmtp-1.1.9/src/music-players.h 2015-09-19 23:16:41.079206331 +0200 -@@ -47,82 +47,61 @@ - * and properties. - */ - { "Creative", 0x041e, "ZEN Vision", 0x411f, -- DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL | -- DEVICE_FLAG_BROKEN_GET_OBJECT_PROPVAL }, -+ DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL }, - { "Creative", 0x041e, "Portable Media Center", 0x4123, -- DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL | -- DEVICE_FLAG_BROKEN_GET_OBJECT_PROPVAL }, -+ DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL }, - { "Creative", 0x041e, "ZEN Xtra (MTP mode)", 0x4128, -- DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL | -- DEVICE_FLAG_BROKEN_GET_OBJECT_PROPVAL }, -+ DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL }, - { "Dell", 0x041e, "DJ (2nd generation)", 0x412f, -- DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL | -- DEVICE_FLAG_BROKEN_GET_OBJECT_PROPVAL }, -+ DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL }, - { "Creative", 0x041e, "ZEN Micro (MTP mode)", 0x4130, -- DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL | -- DEVICE_FLAG_BROKEN_GET_OBJECT_PROPVAL }, -+ DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL }, - { "Creative", 0x041e, "ZEN Touch (MTP mode)", 0x4131, -- DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL | -- DEVICE_FLAG_BROKEN_GET_OBJECT_PROPVAL }, -+ DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL }, - { "Dell", 0x041e, "Dell Pocket DJ (MTP mode)", 0x4132, -- DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL | -- DEVICE_FLAG_BROKEN_GET_OBJECT_PROPVAL }, -- { "Creative", 0x041e, "ZEN MicroPhoto (alternate version)", 0x4133, -- DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL | -- DEVICE_FLAG_BROKEN_GET_OBJECT_PROPVAL }, -+ DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL }, -+ { "Creative", 0x041e, "ZEN MicroPhoto (alternate version)", 0x4133, -+ DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL }, - { "Creative", 0x041e, "ZEN Sleek (MTP mode)", 0x4137, -- DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL | -- DEVICE_FLAG_BROKEN_GET_OBJECT_PROPVAL }, -+ DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL }, - { "Creative", 0x041e, "ZEN MicroPhoto", 0x413c, -- DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL | -- DEVICE_FLAG_BROKEN_GET_OBJECT_PROPVAL }, -+ DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL }, - { "Creative", 0x041e, "ZEN Sleek Photo", 0x413d, -- DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL | -- DEVICE_FLAG_BROKEN_GET_OBJECT_PROPVAL }, -+ DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL }, - { "Creative", 0x041e, "ZEN Vision:M", 0x413e, -- DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL | -- DEVICE_FLAG_BROKEN_GET_OBJECT_PROPVAL }, -+ DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL }, - // Reported by marazm@o2.pl - { "Creative", 0x041e, "ZEN V", 0x4150, -- DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL | -- DEVICE_FLAG_BROKEN_GET_OBJECT_PROPVAL }, -+ DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL }, - // Reported by danielw@iinet.net.au - // This version of the Vision:M needs the no release interface flag, - // unclear whether the other version above need it too or not. - { "Creative", 0x041e, "ZEN Vision:M (DVP-HD0004)", 0x4151, - DEVICE_FLAG_NO_RELEASE_INTERFACE | -- DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL | -- DEVICE_FLAG_BROKEN_GET_OBJECT_PROPVAL }, -+ DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL }, - // Reported by Darel on the XNJB forums - { "Creative", 0x041e, "ZEN V Plus", 0x4152, -- DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL | -- DEVICE_FLAG_BROKEN_GET_OBJECT_PROPVAL }, -+ DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL }, - { "Creative", 0x041e, "ZEN Vision W", 0x4153, -- DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL | -- DEVICE_FLAG_BROKEN_GET_OBJECT_PROPVAL }, -+ DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL }, - // Don't add 0x4155: this is a Zen Stone device which is not MTP - // Reported by Paul Kurczaba - { "Creative", 0x041e, "ZEN", 0x4157, - DEVICE_FLAG_IGNORE_HEADER_ERRORS | - DEVICE_FLAG_BROKEN_SET_SAMPLE_DIMENSIONS | -- DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL | -- DEVICE_FLAG_BROKEN_GET_OBJECT_PROPVAL }, -+ DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL }, - // Reported by Ringofan - { "Creative", 0x041e, "ZEN V 2GB", 0x4158, -- DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL | -- DEVICE_FLAG_BROKEN_GET_OBJECT_PROPVAL }, -+ DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL }, - // Reported by j norment - { "Creative", 0x041e, "ZEN Mozaic", 0x4161, -- DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL | -- DEVICE_FLAG_BROKEN_GET_OBJECT_PROPVAL }, -+ DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL }, - // Reported by Aaron F. Gonzalez - { "Creative", 0x041e, "ZEN X-Fi", 0x4162, -- DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL | -- DEVICE_FLAG_BROKEN_GET_OBJECT_PROPVAL }, -+ DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL }, - // Reported by farmerstimuli - { "Creative", 0x041e, "ZEN X-Fi 3", 0x4169, -- DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL | -- DEVICE_FLAG_BROKEN_GET_OBJECT_PROPVAL }, -+ DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL }, - // Reported by Todor Gyumyushev - { "ZiiLABS", 0x041e, "Zii EGG", 0x6000, - DEVICE_FLAG_UNLOAD_DRIVER | -@@ -607,8 +586,17 @@ - /* https://sourceforge.net/p/libmtp/bugs/1251/ */ - { "Acer", 0x0502, "E39", 0x3643, - DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/bugs/1369/ */ -+ { "Acer", 0x0502, "liquid e700", 0x3644, -+ DEVICE_FLAGS_ANDROID_BUGS }, - { "Acer", 0x0502, "One 7", 0x3657, - DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/support-requests/183/ */ -+ { "Acer", 0x0502, "Z200", 0x3683, -+ DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/bugs/1341/ */ -+ { "Acer", 0x0502, "Liquid S56", 0x3725, -+ DEVICE_FLAGS_ANDROID_BUGS }, - - /* - * SanDisk -@@ -952,6 +940,7 @@ - { "Archos", 0x0e79, "SPOD (MTP mode)", 0x1341, DEVICE_FLAG_UNLOAD_DRIVER }, - { "Archos", 0x0e79, "5S IT (MTP mode)", 0x1351, DEVICE_FLAG_UNLOAD_DRIVER }, - { "Archos", 0x0e79, "5H IT (MTP mode)", 0x1357, DEVICE_FLAG_UNLOAD_DRIVER }, -+ { "Archos", 0x0e79, "48 (MTP mode)", 0x1421, DEVICE_FLAGS_ANDROID_BUGS }, - { "Archos", 0x0e79, "Arnova Childpad", 0x1458, DEVICE_FLAGS_ANDROID_BUGS }, - { "Archos", 0x0e79, "Arnova 8c G3", 0x145e, DEVICE_FLAGS_ANDROID_BUGS }, - { "Archos", 0x0e79, "Arnova 10bG3 Tablet", 0x146b, DEVICE_FLAGS_ANDROID_BUGS }, -@@ -973,9 +962,17 @@ - { "Archos", 0x0e79, "70it2 (ID 2)", 0x1569, DEVICE_FLAGS_ANDROID_BUGS }, - { "Archos", 0x0e79, "50c", 0x2008, DEVICE_FLAGS_ANDROID_BUGS }, - { "Archos", 0x0e79, "C40", 0x31ab, DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/bugs/1393/ */ -+ { "Archos", 0x0e79, "Phone", 0x31e1, DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/bugs/1325/ */ -+ { "Archos", 0x0e79, "45 Neon", 0x31f3, DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/bugs/1352/ */ -+ { "Archos", 0x0e79, "50 Diamond", 0x3229, DEVICE_FLAGS_ANDROID_BUGS }, - { "Archos", 0x0e79, "101 G4", 0x4002, DEVICE_FLAGS_ANDROID_BUGS }, - { "Archos (for Tesco)", 0x0e79, "Hudl (ID1)", 0x5008, DEVICE_FLAGS_ANDROID_BUGS }, - { "Archos (for Tesco)", 0x0e79, "Hudl (ID2)", 0x5009, DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/bugs/1404/ */ -+ { "Archos", 0x0e79, "AC40DTI", 0x5217, DEVICE_FLAGS_ANDROID_BUGS }, - - /* - * Dunlop (OEM of EGOMAN ltd?) reported by Nanomad -@@ -1181,6 +1178,10 @@ - { "Qualcomm (for OnePlus)", 0x05c6, "One (MTP+ADB)", - 0x6765, DEVICE_FLAGS_ANDROID_BUGS }, - -+ /* https://sourceforge.net/p/libmtp/bugs/1377/ */ -+ { "Qualcomm (for Xolo)", 0x901b, "Xolo Black (MTP)", -+ 0x9039, DEVICE_FLAGS_ANDROID_BUGS }, -+ - { "Qualcomm (for PhiComm)", 0x05c6, "C230w (MTP)", - 0x9039, DEVICE_FLAGS_ANDROID_BUGS }, - -@@ -1221,6 +1222,9 @@ - // Reported by Thomas Bretthauer - { "Fujitsu, Ltd", 0x04c5, "STYLISTIC M532", 0x133b, - DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/feature-requests/137/ */ -+ { "Fujitsu, Ltd", 0x04c5, "F02-E", 0x1378, -+ DEVICE_FLAGS_ANDROID_BUGS }, - - /* - * Palm device userland program named Pocket Tunes -@@ -1247,6 +1251,9 @@ - // Reported by anonymous SourceForge user - { "Medion", 0x066f, "MD8333 (ID2)", 0x8588, - DEVICE_FLAG_UNLOAD_DRIVER | DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST }, -+ /* https://sourceforge.net/p/libmtp/bugs/1359/ */ -+ { "Verizon", 0x0408, "Ellipsis 7", 0x3899, -+ DEVICE_FLAGS_ANDROID_BUGS }, - // The vendor ID is "Quanta Computer, Inc." - // same as Olivetti Olipad 110 - // Guessing on device flags -@@ -1403,6 +1410,9 @@ - DEVICE_FLAGS_ANDROID_BUGS }, - { "LG Electronics Inc.", 0x1004, "LG2 Optimus", 0x6225, - DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/bugs/1386/ */ -+ { "LG Electronics Inc.", 0x1004, "LG VS950", 0x622a, -+ DEVICE_FLAGS_ANDROID_BUGS }, - { "LG Electronics Inc.", 0x1004, "LG VS870", 0x6239, - DEVICE_FLAGS_ANDROID_BUGS }, - /* https://sourceforge.net/p/libmtp/bugs/992/ */ -@@ -1410,6 +1420,8 @@ - DEVICE_FLAGS_ANDROID_BUGS }, - { "LG Electronics Inc.", 0x1004, "VK810", 0x6265, - DEVICE_FLAGS_ANDROID_BUGS }, -+ { "LG Electronics Inc.", 0x1004, "G3", 0x627f, -+ DEVICE_FLAGS_ANDROID_BUGS }, - /* https://sourceforge.net/p/libmtp/support-requests/134/ */ - { "LG Electronics Inc.", 0x1004, "G3 (VS985)", 0x626e, - DEVICE_FLAGS_ANDROID_BUGS }, -@@ -1723,8 +1735,12 @@ - DEVICE_FLAG_NONE }, - { "SONY", 0x0fce, "Xperia M2 MTP", 0x01aa, - DEVICE_FLAG_NONE }, -+ { "SONY", 0x0fce, "Xperia M2 Dual MTP", 0x01ab, -+ DEVICE_FLAG_NONE }, - { "SONY", 0x0fce, "Xperia Z2 MTP", 0x01af, - DEVICE_FLAG_NONE }, -+ { "SONY", 0x0fce, "Xperia Z2 Tablet MTP", 0x01b1, -+ DEVICE_FLAGS_ANDROID_BUGS }, - { "SONY", 0x0fce, "Xperia Z Ultra MTP", 0x01b6, - DEVICE_FLAGS_ANDROID_BUGS }, - { "SONY", 0x0fce, "Xperia Z3 MTP", 0x01ba, -@@ -1733,6 +1749,10 @@ - DEVICE_FLAG_NONE }, - { "SONY", 0x0fce, "Xperia E3 MTP", 0x01bc, - DEVICE_FLAG_NONE }, -+ { "SONY", 0x0fce, "XPeria Z3+ MTP", 0x01c9, -+ DEVICE_FLAG_NONE }, -+ { "SONY", 0x0fce, "XPeria E4g MTP", 0x01cb, -+ DEVICE_FLAG_NONE }, - - - /* -@@ -1788,6 +1808,8 @@ - DEVICE_FLAG_NONE }, - { "SONY", 0x0fce, "Xperia M MTP+CDROM", 0x419b, - DEVICE_FLAG_NONE }, -+ { "SONY", 0x0fce, "Xperia Z Ultra MTP+CDROM (ID3)", 0x419c, -+ DEVICE_FLAG_NONE }, - { "SONY", 0x0fce, "Xperia Z1 MTP+CDROM", 0x419e, - DEVICE_FLAG_NONE }, - { "SONY", 0x0fce, "Xperia C MTP+CDROM", 0x41a3, -@@ -1796,10 +1818,20 @@ - DEVICE_FLAG_NONE }, - { "SONY", 0x0fce, "Xperia M2 MTP+CDROM", 0x41aa, - DEVICE_FLAG_NONE }, -+ { "SONY", 0x0fce, "Xperia M2 Dual MTP+CDROM", 0x41ab, -+ DEVICE_FLAG_NONE }, - { "SONY", 0x0fce, "Xperia Z2 MTP+CDROM", 0x41af, - DEVICE_FLAG_NONE }, - { "SONY", 0x0fce, "Xperia Z3 MTP+CDROM", 0x41ba, - DEVICE_FLAG_NONE }, -+ { "SONY", 0x0fce, "Xperia Z3 Compact MTP+CDROM", 0x41bb, -+ DEVICE_FLAG_NONE }, -+ { "SONY", 0x0fce, "Xperia E3 MTP+CDROM", 0x01bc, -+ DEVICE_FLAG_NONE }, -+ { "SONY", 0x0fce, "XPeria Z3+ MTP+CDROM", 0x41c9, -+ DEVICE_FLAG_NONE }, -+ { "SONY", 0x0fce, "XPeria E4g MTP+CDROM", 0x41cb, -+ DEVICE_FLAG_NONE }, - - /* - * MTP+ADB personalities of MTP devices (see above) -@@ -1888,6 +1920,8 @@ - DEVICE_FLAG_NONE }, - { "SONY", 0x0fce, "Xperia M2 MTP+ADB", 0x51aa, - DEVICE_FLAG_NONE }, -+ { "SONY", 0x0fce, "Xperia M2 Dual MTP+ADB", 0x51ab, -+ DEVICE_FLAG_NONE }, - { "SONY", 0x0fce, "Xperia Z2 MTP+ADB", 0x51af, - DEVICE_FLAG_NONE }, - { "SONY", 0x0fce, "Xperia Z Ultra MTP+ADB", 0x51b6, -@@ -1898,6 +1932,10 @@ - DEVICE_FLAG_NONE }, - { "SONY", 0x0fce, "Xperia E3 MTP+ADB", 0x51bc, - DEVICE_FLAG_NONE }, -+ { "SONY", 0x0fce, "XPeria Z3+ MTP+ADB", 0x51c9, -+ DEVICE_FLAG_NONE }, -+ { "SONY", 0x0fce, "XPeria E4g MTP+ADB", 0x51cb, -+ DEVICE_FLAG_NONE }, - - /* - * MTP+UMS modes -@@ -1936,6 +1974,9 @@ - * Motorola - * Assume DEVICE_FLAG_BROKEN_SET_OBJECT_PROPLIST on all of these. - */ -+ /* https://sourceforge.net/p/libmtp/feature-requests/136/ */ -+ { "Motorola", 0x22b8, "XT1524 (MTP)", 0x002e, -+ DEVICE_FLAGS_ANDROID_BUGS }, - // Reported by David Boyd - { "Motorola", 0x22b8, "V3m/V750 verizon", 0x2a65, - DEVICE_FLAG_BROKEN_SET_OBJECT_PROPLIST | -@@ -1952,6 +1993,9 @@ - DEVICE_FLAGS_ANDROID_BUGS }, - { "Motorola", 0x22b8, "Moto X (XT1058)", 0x2e63, - DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/bugs/1323/ */ -+ { "Motorola", 0x22b8, "Moto X (XT1080)", 0x2e66, -+ DEVICE_FLAGS_ANDROID_BUGS }, - { "Motorola", 0x22b8, "Droid Maxx (XT1080)", 0x2e67, - DEVICE_FLAGS_ANDROID_BUGS }, - { "Motorola", 0x22b8, "Droid Ultra", 0x2e68, -@@ -2345,6 +2389,14 @@ - /* https://sourceforge.net/p/libmtp/bugs/1244/ */ - { "Asus", 0x0b05, "MemoPad 8 ME181 CX (MTP)", 0x5561, - DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/bugs/1406/ */ -+ { "Asus", 0x0b05, "Zenfone 2 (MTP)", 0x5600, -+ DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/bugs/1364/ */ -+ { "Asus", 0x0b05, "Z00AD (MTP)", 0x5601, -+ DEVICE_FLAGS_ANDROID_BUGS }, -+ { "Asus", 0x0b05, "TX201LA (MTP)", 0x561f, -+ DEVICE_FLAGS_ANDROID_BUGS }, - /* https://sourceforge.net/p/libmtp/bugs/1271/ */ - { "Asus", 0x0b05, "ZenFone 4 (MTP)", 0x580f, - DEVICE_FLAGS_ANDROID_BUGS }, -@@ -2354,9 +2406,20 @@ - /* https://sourceforge.net/p/libmtp/bugs/1258/ */ - { "Asus", 0x0b05, "A450CG (MTP)", 0x5a0f, - DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/bugs/1350/ */ -+ { "Asus", 0x0b05, "Zenfone 2 ZE550ML (MTP)", 0x5f02, -+ DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/bugs/1364/ */ -+ { "Asus", 0x0b05, "Zenfone 2 ZE551ML (MTP)", 0x5f03, -+ DEVICE_FLAGS_ANDROID_BUGS }, - /* https://sourceforge.net/p/libmtp/bugs/1232/ */ - { "Asus", 0x0b05, "MemoPad 7 (ME572CL)", 0x7772, - DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/bugs/1351/ */ -+ { "Asus", 0x0b05, "Fonepad 7 (FE375CXG)", 0x7773, -+ DEVICE_FLAGS_ANDROID_BUGS }, -+ { "Asus", 0x0b05, "ZenFone 5 A500KL (MTP)", 0x7780, -+ DEVICE_FLAGS_ANDROID_BUGS }, - /* https://sourceforge.net/p/libmtp/bugs/1247/ */ - { "Asus", 0x0b05, "ZenFone 5 A500KL (MTP+ADB)", 0x7781, - DEVICE_FLAGS_ANDROID_BUGS }, -@@ -2365,6 +2428,12 @@ - /* - * Lenovo - */ -+ /* https://sourceforge.net/p/libmtp/support-requests/178/ */ -+ { "Lenovo", 0x17ef, "P70-A", 0x0c02, -+ DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/bugs/1415/ */ -+ { "Lenovo", 0x17ef, "P70", 0x2008, -+ DEVICE_FLAGS_ANDROID_BUGS }, - // Reported by Richard Körber - { "Lenovo", 0x17ef, "K1", 0x740a, - DEVICE_FLAGS_ANDROID_BUGS }, -@@ -2407,6 +2476,9 @@ - DEVICE_FLAGS_ANDROID_BUGS }, - { "Lenovo", 0x17ef, "Toga Tablet B6000-F", 0x76f2, - DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/bugs/1122/ */ -+ { "Lenovo", 0x17ef, "S930", 0x7718, -+ DEVICE_FLAGS_ANDROID_BUGS }, - /* https://sourceforge.net/p/libmtp/bugs/1250/ */ - { "Lenovo", 0x17ef, "A5500-F", 0x772b, - DEVICE_FLAGS_ANDROID_BUGS }, -@@ -2417,15 +2489,24 @@ - /* https://sourceforge.net/p/libmtp/bugs/1155/ */ - { "Lenovo", 0x17ef, "Yoga Tablet 10 B8000-H", 0x76ff, - DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/bugs/1391/ */ -+ { "Lenovo", 0x17ef, "A7600-F", 0x7731, -+ DEVICE_FLAGS_ANDROID_BUGS }, - /* https://sourceforge.net/p/libmtp/bugs/1291/ */ - { "Lenovo", 0x17ef, "A3500-F", 0x7737, - DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/support-requests/186/ */ -+ { "Lenovo", 0x17ef, "Yoga Tablet 2 - 1050F", 0x77a4, -+ DEVICE_FLAGS_ANDROID_BUGS }, - /* https://sourceforge.net/p/libmtp/support-requests/168/ */ - { "Lenovo", 0x17ef, "Yoga Tablet 2 Pro", 0x77b1, - DEVICE_FLAGS_ANDROID_BUGS }, - /* https://sourceforge.net/p/libmtp/feature-requests/125/ */ - { "Lenovo", 0x17ef, "Vibe Z2", 0x77ea, - DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/bugs/1360/ */ -+ { "Lenovo", 0x17ef, "K3 Note", 0x7883, -+ DEVICE_FLAGS_ANDROID_BUGS }, - - /* - * Huawei -@@ -2435,6 +2516,15 @@ - DEVICE_FLAGS_ANDROID_BUGS }, - { "Huawei", 0x12d1, "MTP device (ID2)", 0x1052, - DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/bugs/1381/ */ -+ { "Huawei", 0x12d1, "H60-L11", 0x1079, -+ DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/bugs/1361/ */ -+ { "Huawei", 0x12d1, "Ascend P8 ", 0x1082, -+ DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/bugs/1418/ */ -+ { "Huawei", 0x12d1, "Honor 3C ", 0x2012, -+ DEVICE_FLAGS_ANDROID_BUGS }, - { "Huawei", 0x12d1, "Mediapad (mode 0)", 0x360f, - DEVICE_FLAGS_ANDROID_BUGS }, - // Reported by Bearsh -@@ -2452,6 +2542,8 @@ - /* https://sourceforge.net/p/libmtp/bugs/672/ */ - { "ZTE", 0x19d2, "Grand X In", 0x0343, DEVICE_FLAGS_ANDROID_BUGS }, - { "ZTE", 0x19d2, "V985", 0x0383, DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/bugs/1328/ */ -+ { "ZTE", 0x19d2, "V5", 0xffce, DEVICE_FLAGS_ANDROID_BUGS }, - - /* - * HTC (High Tech Computer Corp) -@@ -2459,6 +2551,12 @@ - * Steven Eastland - * Kevin Cheng - */ -+ /* https://sourceforge.net/p/libmtp/support-requests/181/ */ -+ { "HTC", 0x0bb4, "HTC One M9 (MTP)", 0x040b, -+ DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/bugs/1398/ */ -+ { "HTC", 0x0bb4, "Spreadtrum SH57MYZ03342 (MTP)", 0x05e3, -+ DEVICE_FLAGS_ANDROID_BUGS }, - /* reported by Mikkel Oscar Lyderik */ - { "HTC", 0x0bb4, "HTC Desire 510 (MTP+ADB)", 0x05fd, - DEVICE_FLAGS_ANDROID_BUGS }, -@@ -2545,6 +2643,9 @@ - /* https://sourceforge.net/p/libmtp/bugs/1182/ */ - { "HTC", 0x0bb4, "Desire 310 (MTP)", 0x0ec6, - DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/bugs/1420/ */ -+ { "HTC", 0x0bb4, "Desire 816G (MTP)", 0x0edb, -+ DEVICE_FLAGS_ANDROID_BUGS }, - { "HTC", 0x0bb4, "HTC One (MTP+ADB+CDC)", 0x0f5f, - DEVICE_FLAGS_ANDROID_BUGS }, - { "HTC", 0x0bb4, "HTC One (MTP+CDC)", 0x0f60, -@@ -2658,6 +2759,9 @@ - DEVICE_FLAGS_ANDROID_BUGS }, - { "Amazon", 0x1949, "Kindle Fire (ID5)", 0x0012, - DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/bugs/1353/ */ -+ { "Amazon", 0x1949, "Kindle Fire HD6", 0x00f2, -+ DEVICE_FLAGS_ANDROID_BUGS }, - { "Amazon", 0x1949, "Fire Phone", 0x0800, - DEVICE_FLAGS_ANDROID_BUGS }, - -@@ -2677,6 +2781,9 @@ - DEVICE_FLAGS_ANDROID_BUGS }, - { "YiFang", 0x2207, "BQ Tesla", 0x0006, - DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/bugs/1354/ */ -+ { "Various", 0x2207, "Viewpia DR/bq Kepler Debugging", 0x0011, -+ DEVICE_FLAGS_ANDROID_BUGS }, - - /* - * Kobo -@@ -2708,6 +2815,8 @@ - { "Intel", 0x8087, "Foxconn iView i700", 0x0a15, DEVICE_FLAGS_ANDROID_BUGS }, - /* https://sourceforge.net/p/libmtp/bugs/1237/ */ - { "Intel", 0x8087, "Telcast Air 3G", 0x0a5e, DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/bugs/1338/ */ -+ { "Intel", 0x8087, "Chuwi vi8", 0x0a5f, DEVICE_FLAGS_ANDROID_BUGS }, - - /* - * Xiaomi -@@ -2738,6 +2847,15 @@ - DEVICE_FLAGS_ANDROID_BUGS }, - { "Xiaomi", 0x2717, "Mi-2 (MTP)", 0xf003, - DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/bugs/1397/ */ -+ { "Xiaomi", 0x2717, "Mi-2s (id2) (MTP)", 0xff40, -+ DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/bugs/1339/ */ -+ { "Xiaomi", 0x2717, "Mi-2s (MTP)", 0xff48, -+ DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/bugs/1402/ */ -+ { "Xiaomi", 0x2717, "Redmi 2 (MTP)", 0xff60, -+ DEVICE_FLAGS_ANDROID_BUGS }, - - /* - * XO Learning Tablet -@@ -2774,6 +2892,9 @@ - /* https://sourceforge.net/p/libmtp/bugs/1304/ */ - { "Alcatel", 0x1bbb, "OneTouch 5042D (MTP)", 0xa00e, - DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/bugs/1401/ */ -+ { "Alcatel", 0x1bbb, "OneTouch Idol 3 (MTP)", 0xaf2b, -+ DEVICE_FLAGS_ANDROID_BUGS }, - /* https://sourceforge.net/p/libmtp/feature-requests/114/ */ - { "Alcatel", 0x1bbb, "OneTouch 6034R", 0xf003, - DEVICE_FLAGS_ANDROID_BUGS }, -@@ -2782,8 +2903,12 @@ - * Kyocera - */ - { "Kyocera", 0x0482, "Rise", 0x0571, DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/feature-requests/134/ */ -+ { "Kyocera", 0x0482, "Torque Model E6715", 0x0059a, DEVICE_FLAGS_ANDROID_BUGS }, - /* https://sourceforge.net/p/libmtp/discussion/535190/thread/6270f5ce/ */ - { "Kyocera", 0x0482, "KYL22", 0x0810, DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/bugs/1345/ */ -+ { "Kyocera", 0x0482, "DuraForce", 0x0979, DEVICE_FLAGS_ANDROID_BUGS }, - - /* - * HiSense -@@ -2798,12 +2923,20 @@ - DEVICE_FLAGS_ANDROID_BUGS }, - { "Hewlett-Packard", 0x03f0, "Slate 7 2800", 0x5d1d, - DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/bugs/1366/ */ -+ { "Hewlett-Packard", 0x03f0, "Slate 10 HD", 0x7e1d, -+ DEVICE_FLAGS_ANDROID_BUGS }, - - /* - * MediaTek Inc. - */ - { "MediaTek Inc", 0x0e8d, "MT5xx and MT6xx SoCs", 0x0050, - DEVICE_FLAGS_ANDROID_BUGS }, -+ { "MediaTek Inc", 0x0e8d, "MT65xx", 0x2008, -+ DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/feature-requests/79/ */ -+ { "MediaTek Inc", 0x0e8d, "Elephone P8000", 0x201d, -+ DEVICE_FLAGS_ANDROID_BUGS }, - - /* - * Jolla -@@ -2860,6 +2993,8 @@ - { "Prestigio", 0x29e4, "5505 DUO ", 0x1103, DEVICE_FLAGS_ANDROID_BUGS }, - /* https://sourceforge.net/p/libmtp/bugs/1243/ */ - { "Prestigio", 0x29e4, "5504 DUO ", 0x1203, DEVICE_FLAGS_ANDROID_BUGS }, -+ /* https://sourceforge.net/p/libmtp/feature-requests/141/ */ -+ { "Prestigio", 0x29e4, "3405 DUO ", 0x3201, DEVICE_FLAGS_ANDROID_BUGS }, - - /* https://sourceforge.net/p/libmtp/bugs/1283/ */ - { "Megafon", 0x201e, "MFLogin3T", 0x42ab, DEVICE_FLAGS_ANDROID_BUGS }, -@@ -2867,6 +3002,8 @@ - /* https://sourceforge.net/p/libmtp/bugs/1287/ */ - { "Gensis", 0x040d, "GT-7305 ", 0x885c, DEVICE_FLAGS_ANDROID_BUGS }, - -+ /* https://sourceforge.net/p/libmtp/support-requests/182/ */ -+ { "Oppo", 0x22d9, "Find 5", 0x2764, DEVICE_FLAGS_ANDROID_BUGS }, - /* https://sourceforge.net/p/libmtp/bugs/1207/ */ - { "Oppo", 0x22d9, "Find 7 (ID 1)", 0x2765, DEVICE_FLAGS_ANDROID_BUGS }, - /* https://sourceforge.net/p/libmtp/bugs/1277/ */ -@@ -2916,6 +3053,14 @@ - /* https://sourceforge.net/p/libmtp/bugs/1314/ */ - { "BenQ", 0x1d45, "F5", 0x459d, DEVICE_FLAGS_ANDROID_BUGS }, - -+ /* https://sourceforge.net/p/libmtp/bugs/1362/ */ -+ { "TomTom", 0x1390, "Rider 40", 0x5455, DEVICE_FLAGS_ANDROID_BUGS }, -+ -+ /* https://sourceforge.net/p/libmtp/feature-requests/135/. guessed android. */ -+ { "OUYA", 0x2836, "Videogame Console", 0x0010, DEVICE_FLAGS_ANDROID_BUGS }, -+ -+ /* https://sourceforge.net/p/libmtp/bugs/1383/ */ -+ { "BLU", 0x0e8d, "Studio HD", 0x2008, DEVICE_FLAGS_ANDROID_BUGS }, - /* - * Other strange stuff. - */ diff --git a/gnu/packages/patches/ninja-tests.patch b/gnu/packages/patches/ninja-tests.patch index 3436b6314d..f9b0d9f910 100644 --- a/gnu/packages/patches/ninja-tests.patch +++ b/gnu/packages/patches/ninja-tests.patch @@ -1,16 +1,17 @@ -SubprocessTest.SetWithLots fails with: - Raise [ulimit -n] well above 1025 to make this test go. -Skip it. +From 67d6b9262efad99f8aad63ab81efc8e689748766 Mon Sep 17 00:00:00 2001 +From: Efraim Flashner +Date: Sun, 3 Jul 2016 11:55:43 +0300 +Subject: [PATCH] patch -SubprocessTest.InterruptChild fails when using 'system*': - *** Failure in src/subprocess_test.cc:83 - ExitInterrupted == subproc->Finish() -I can pass it by using 'system' instead of 'system*' when building locally, -but it still failed on Hydra. Skip it. +--- + src/subprocess_test.cc | 4 ++++ + 1 file changed, 4 insertions(+) ---- ninja-1.5.3.orig/src/subprocess_test.cc 2015-01-15 10:34:28.859522176 +0800 -+++ ninja-1.5.3/src/subprocess_test.cc 2015-01-15 10:37:52.969572075 +0800 -@@ -72,6 +72,7 @@ +diff --git a/src/subprocess_test.cc b/src/subprocess_test.cc +index ee16190..a537c11 100644 +--- a/src/subprocess_test.cc ++++ b/src/subprocess_test.cc +@@ -72,6 +72,7 @@ TEST_F(SubprocessTest, NoSuchCommand) { #ifndef _WIN32 @@ -18,7 +19,7 @@ but it still failed on Hydra. Skip it. TEST_F(SubprocessTest, InterruptChild) { Subprocess* subproc = subprocs_.Add("kill -INT $$"); ASSERT_NE((Subprocess *) 0, subproc); -@@ -82,6 +83,7 @@ +@@ -82,6 +83,7 @@ TEST_F(SubprocessTest, InterruptChild) { EXPECT_EQ(ExitInterrupted, subproc->Finish()); } @@ -26,7 +27,7 @@ but it still failed on Hydra. Skip it. TEST_F(SubprocessTest, InterruptParent) { Subprocess* subproc = subprocs_.Add("kill -INT $PPID ; sleep 1"); -@@ -169,6 +171,7 @@ +@@ -217,6 +219,7 @@ TEST_F(SubprocessTest, SetWithMulti) { // OS X's process limit is less than 1025 by default // (|sysctl kern.maxprocperuid| is 709 on 10.7 and 10.8 and less prior to that). #if !defined(__APPLE__) && !defined(_WIN32) @@ -34,11 +35,14 @@ but it still failed on Hydra. Skip it. TEST_F(SubprocessTest, SetWithLots) { // Arbitrary big number; needs to be over 1024 to confirm we're no longer // hostage to pselect. -@@ -196,6 +199,7 @@ +@@ -245,6 +248,7 @@ TEST_F(SubprocessTest, SetWithLots) { } ASSERT_EQ(kNumProcs, subprocs_.finished_.size()); } +#endif - #endif // !__APPLE__ && !_WIN32 + #endif // !__APPLE__ && !_WIN32 // TODO: this test could work on Windows, just not sure how to simply +-- +2.9.0 + diff --git a/gnu/packages/patches/openimageio-boost-1.60.patch b/gnu/packages/patches/openimageio-boost-1.60.patch deleted file mode 100644 index 92fc3237bb..0000000000 --- a/gnu/packages/patches/openimageio-boost-1.60.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 875fbbd92695397bfc83d1cd5fdd4094e1d50199 Mon Sep 17 00:00:00 2001 -From: Larry Gritz -Date: Mon, 28 Dec 2015 11:46:07 -0800 -Subject: [PATCH] Python ImageCache binding fixes -- disable broken calls - -Some of these calls (thankfully undocumented and presumably unused) -are horribly broken. They compiled before, but with new Boost 1.60 -they don't even compile properly. So just comment them out on this -obsolete branch. They are fully fixed in RB-1.6 and beyond. - ---- a/src/python/py_imagecache.cpp -+++ b/src/python/py_imagecache.cpp -@@ -199,23 +199,24 @@ void declare_imagecache() - .def("destroy", &ImageCacheWrap::destroy) - .staticmethod("destroy") - .def("clear", &ImageCacheWrap::clear) -- .def("attribute", &ImageCacheWrap::attribute) -+ // .def("attribute", &ImageCacheWrap::attribute) - .def("attribute", &ImageCacheWrap::attribute_int) - .def("attribute", &ImageCacheWrap::attribute_float) -- .def("attribute", &ImageCacheWrap::attribute_double) -- .def("attribute", &ImageCacheWrap::attribute_char) -+ // .def("attribute", &ImageCacheWrap::attribute_double) -+ // .def("attribute", &ImageCacheWrap::attribute_char) - .def("attribute", &ImageCacheWrap::attribute_string) -- .def("getattribute", &ImageCacheWrap::attribute) -+ // .def("getattribute", &ImageCacheWrap::attribute) - .def("getattribute", &ImageCacheWrap::getattribute_int) - .def("getattribute", &ImageCacheWrap::getattribute_float) -- .def("getattribute", &ImageCacheWrap::getattribute_double) -- .def("getattribute", &ImageCacheWrap::getattribute_char) -+ // .def("getattribute", &ImageCacheWrap::getattribute_double) -+ // .def("getattribute", &ImageCacheWrap::getattribute_char) - .def("getattribute", &ImageCacheWrap::getattribute_string) -- .def("resolve_filename", &ImageCacheWrap::resolve_filename) -- .def("get_image_info", &ImageCacheWrap::get_image_info) -- .def("get_image_info", &ImageCacheWrap::get_image_info_old) -+ // .def("get_image_info", &ImageCacheWrap::get_image_info) -+ // .def("get_image_info", &ImageCacheWrap::get_image_info_old) - .def("get_imagespec", &ImageCacheWrap::get_imagespec) -- .def("get_pixels", &ImageCacheWrap::get_pixels) -+ // .def("get_pixels", &ImageCacheWrap::get_pixels) -+ .def("resolve_filename", &ImageCacheWrap::resolve_filename) -+ - // .def("get_tile", &ImageCacheWrap::get_tile) - // .def("release_tile", &ImageCacheWrap::release_tile) - // .def("tile_pixels", &ImageCacheWrap::tile_pixels) diff --git a/gnu/packages/patches/python-dendropy-exclude-failing-tests.patch b/gnu/packages/patches/python-dendropy-exclude-failing-tests.patch new file mode 100644 index 0000000000..288a58b06f --- /dev/null +++ b/gnu/packages/patches/python-dendropy-exclude-failing-tests.patch @@ -0,0 +1,21 @@ +diff --git a/dendropy/test/test_phylogenetic_distance_matrix.py b/dendropy/test/test_phylogenetic_distance_matrix.py +index 10c05f5..a18ba52 100644 +--- a/dendropy/test/test_phylogenetic_distance_matrix.py ++++ b/dendropy/test/test_phylogenetic_distance_matrix.py +@@ -793,7 +793,7 @@ class PdmUpgmaTree(PdmTreeChecker, unittest.TestCase): + expected_tree=expected_tree) + + class NodeToNodeDistancesTest(unittest.TestCase): +- ++ @unittest.expectedFailure + def test_distances(self): + ## get distances from ape + # library(ape) +@@ -825,6 +825,7 @@ class NodeToNodeDistancesTest(unittest.TestCase): + e = reference_table[nd1.label, nd2.label] + self.assertAlmostEqual(d, e) + ++ @unittest.expectedFailure + def test_mrca(self): + test_runs = [ + "hiv1.newick", diff --git a/gnu/packages/patches/sudo-CVE-2015-5602.patch b/gnu/packages/patches/sudo-CVE-2015-5602.patch deleted file mode 100644 index 36c90fbee7..0000000000 --- a/gnu/packages/patches/sudo-CVE-2015-5602.patch +++ /dev/null @@ -1,372 +0,0 @@ -Based on the patch from https://www.sudo.ws/repos/sudo/raw-rev/c2e36a80a279 -Backported to 1.8.15 by Mark H Weaver - -# HG changeset patch -# User Todd C. Miller -# Date 1452475889 25200 -# Node ID c2e36a80a27927c32cba55afae78b8dc830cddc3 -# Parent 94ffd6b18431fa4b9ed0a0c3f0b7b9582a4f6bde -Rewritten sudoedit_checkdir support that checks all the dirs in the -path and refuses to follow symlinks in writable directories. -This is a better fix for CVE-2015-5602. -Adapted from a diff by Ben Hutchings. Bug #707 - -diff -r 94ffd6b18431 -r c2e36a80a279 doc/CONTRIBUTORS ---- a/doc/CONTRIBUTORS Mon Jan 04 10:47:11 2016 -0700 -+++ b/doc/CONTRIBUTORS Sun Jan 10 18:31:29 2016 -0700 -@@ -58,6 +58,7 @@ - Holloway, Nick - Hoover, Adam - Hunter, Michael T. -+ Hutchings, Ben - Irrgang, Eric - Jackson, Brian - Jackson, John R. -diff -r 94ffd6b18431 -r c2e36a80a279 doc/UPGRADE ---- a/doc/UPGRADE Mon Jan 04 10:47:11 2016 -0700 -+++ b/doc/UPGRADE Sun Jan 10 18:31:29 2016 -0700 -@@ -1,6 +1,15 @@ - Notes on upgrading from an older release - ======================================== - -+o Upgrading from a version prior to the post-1.8.15 fix for CVE-2015-5602. -+ -+ The meaning of the sudoedit_checkdir sudoers option has changed. -+ Previously, it would only check the parent directory -+ of the file to be edited. After the CVE fix, all directories -+ in the path to be edited are checked and sudoedit will refuse -+ to follow a symbolic link in a directory that is writable by -+ the invoking user. -+ - o Upgrading from a version prior to 1.8.15: - - Prior to version 1.8.15, when env_reset was enabled (the default) -diff -r 94ffd6b18431 -r c2e36a80a279 doc/sudoers.cat ---- a/doc/sudoers.cat Mon Jan 04 10:47:11 2016 -0700 -+++ b/doc/sudoers.cat Sun Jan 10 18:31:29 2016 -0700 -@@ -1275,12 +1275,15 @@ - system call. This flag is _o_f_f by default. - - sudoedit_checkdir -- If set, ssuuddooeeddiitt will refuse to edit files located in a -- directory that is writable by the invoking user unless -- it is run by root. On many systems, this option -- requires that the parent directory of the file to be -- edited be readable by the target user. This flag is -- _o_f_f by default. -+ If set, ssuuddooeeddiitt will check directories in the path to -+ be edited for writability by the invoking user. -+ Symbolic links will not be followed in writable -+ directories and ssuuddooeeddiitt will also refuse to edit a -+ file located in a writable directory. Theses -+ restrictions are not enforced when ssuuddooeeddiitt is invoked -+ as root. On many systems, this option requires that -+ all directories in the path to be edited be readable by -+ the target user. This flag is _o_f_f by default. - - sudoedit_follow By default, ssuuddooeeddiitt will not follow symbolic links - when opening files. The _s_u_d_o_e_d_i_t___f_o_l_l_o_w option can be -diff -r 94ffd6b18431 -r c2e36a80a279 doc/sudoers.man.in ---- a/doc/sudoers.man.in Mon Jan 04 10:47:11 2016 -0700 -+++ b/doc/sudoers.man.in Sun Jan 10 18:31:29 2016 -0700 -@@ -2715,10 +2715,16 @@ - .br - If set, - \fBsudoedit\fR --will refuse to edit files located in a directory that is writable --by the invoking user unless it is run by root. --On many systems, this option requires that the parent directory --of the file to be edited be readable by the target user. -+will check directories in the path to be edited for writability -+by the invoking user. -+Symbolic links will not be followed in writable directories and -+\fBsudoedit\fR -+will also refuse to edit a file located in a writable directory. -+Theses restrictions are not enforced when -+\fBsudoedit\fR -+is invoked as root. -+On many systems, this option requires that all directories -+in the path to be edited be readable by the target user. - This flag is - \fIoff\fR - by default. -diff -r 94ffd6b18431 -r c2e36a80a279 doc/sudoers.mdoc.in ---- a/doc/sudoers.mdoc.in Mon Jan 04 10:47:11 2016 -0700 -+++ b/doc/sudoers.mdoc.in Sun Jan 10 18:31:29 2016 -0700 -@@ -2549,10 +2549,16 @@ - .It sudoedit_checkdir - If set, - .Nm sudoedit --will refuse to edit files located in a directory that is writable --by the invoking user unless it is run by root. --On many systems, this option requires that the parent directory --of the file to be edited be readable by the target user. -+will check directories in the path to be edited for writability -+by the invoking user. -+Symbolic links will not be followed in writable directories and -+.Nm sudoedit -+will also refuse to edit a file located in a writable directory. -+Theses restrictions are not enforced when -+.Nm sudoedit -+is invoked as root. -+On many systems, this option requires that all directories -+in the path to be edited be readable by the target user. - This flag is - .Em off - by default. -diff -r 94ffd6b18431 -r c2e36a80a279 include/sudo_compat.h ---- a/include/sudo_compat.h Mon Jan 04 10:47:11 2016 -0700 -+++ b/include/sudo_compat.h Sun Jan 10 18:31:29 2016 -0700 -@@ -182,6 +182,8 @@ - # ifndef UTIME_NOW - # define UTIME_NOW -2L - # endif -+#endif -+#if !defined(HAVE_OPENAT) || (!defined(HAVE_FUTIMENS) && !defined(HAVE_UTIMENSAT)) - # ifndef AT_FDCWD - # define AT_FDCWD -100 - # endif -diff -r 94ffd6b18431 -r c2e36a80a279 src/sudo_edit.c ---- a/src/sudo_edit.c Mon Jan 04 10:47:11 2016 -0700 -+++ b/src/sudo_edit.c Sun Jan 10 18:31:29 2016 -0700 -@@ -179,13 +179,15 @@ - } - - #ifndef HAVE_OPENAT --/* This does not support AT_FDCWD... */ - static int - sudo_openat(int dfd, const char *path, int flags, mode_t mode) - { - int fd, odfd; - debug_decl(sudo_openat, SUDO_DEBUG_EDIT) - -+ if (dfd == AT_FDCWD) -+ debug_return_int(open(path, flags, mode)); -+ - /* Save cwd */ - if ((odfd = open(".", O_RDONLY)) == -1) - debug_return_int(-1); -@@ -207,6 +209,64 @@ - #define openat sudo_openat - #endif /* HAVE_OPENAT */ - -+#ifdef O_NOFOLLOW -+static int -+sudo_edit_openat_nofollow(int dfd, char *path, int oflags, mode_t mode) -+{ -+ debug_decl(sudo_edit_open_nofollow, SUDO_DEBUG_EDIT) -+ -+ debug_return_int(openat(dfd, path, oflags|O_NOFOLLOW, mode)); -+} -+#else -+/* -+ * Returns true if fd and path don't match or path is a symlink. -+ * Used on older systems without O_NOFOLLOW. -+ */ -+static bool -+sudo_edit_is_symlink(int fd, char *path) -+{ -+ struct stat sb1, sb2; -+ debug_decl(sudo_edit_is_symlink, SUDO_DEBUG_EDIT) -+ -+ /* -+ * Treat [fl]stat() failure like there was a symlink. -+ */ -+ if (fstat(fd, &sb1) == -1 || lstat(path, &sb2) == -1) -+ debug_return_bool(true); -+ -+ /* -+ * Make sure we did not open a link and that what we opened -+ * matches what is currently on the file system. -+ */ -+ if (S_ISLNK(sb2.st_mode) || -+ sb1.st_dev != sb2.st_dev || sb1.st_ino != sb2.st_ino) { -+ debug_return_bool(true); -+ } -+ -+ debug_return_bool(false); -+} -+ -+static int -+sudo_edit_openat_nofollow(char *path, int oflags, mode_t mode) -+{ -+ struct stat sb1, sb2; -+ int fd; -+ debug_decl(sudo_edit_openat_nofollow, SUDO_DEBUG_EDIT) -+ -+ fd = openat(dfd, path, oflags, mode); -+ if (fd == -1) -+ debug_return_int(-1); -+ -+ if (sudo_edit_is_symlink(fd, path)) { -+ close(fd); -+ fd = -1; -+ errno = ELOOP; -+ } -+ -+ debug_return_int(fd); -+} -+#endif /* O_NOFOLLOW */ -+ - /* - * Returns true if the directory described by sb is writable - * by the user. We treat directories with the sticky bit as -@@ -245,49 +305,94 @@ - debug_return_bool(false); - } - -+/* -+ * Directory open flags for use with openat(2) and fstat(2). -+ * Use O_PATH and O_DIRECTORY where possible. -+ */ -+#if defined(O_PATH) && defined(O_DIRECTORY) -+# define DIR_OPEN_FLAGS (O_PATH|O_DIRECTORY) -+#elif defined(O_PATH) && !defined(O_DIRECTORY) -+# define DIR_OPEN_FLAGS O_PATH -+#elif !defined(O_PATH) && defined(O_DIRECTORY) -+# define DIR_OPEN_FLAGS (O_RDONLY|O_DIRECTORY) -+#else -+# define DIR_OPEN_FLAGS (O_RDONLY|O_NONBLOCK) -+#endif -+ - static int - sudo_edit_open_nonwritable(char *path, int oflags, mode_t mode) - { -- char *base, *dir; -+ int dfd, fd, dflags = DIR_OPEN_FLAGS; -+#if defined(__linux__) && defined(O_PATH) -+ char *opath = path; -+#endif -+ bool is_writable; - struct stat sb; -- int dfd, fd; - debug_decl(sudo_edit_open_nonwritable, SUDO_DEBUG_EDIT) - -- base = strrchr(path, '/'); -- if (base != NULL) { -- *base++ = '\0'; -- dir = path; -+#if defined(__linux__) && defined(O_PATH) -+restart: -+#endif -+ if (path[0] == '/') { -+ dfd = open("/", dflags); -+ path++; - } else { -- base = path; -- dir = "."; -+ dfd = open(".", dflags); -+ if (path[0] == '.' && path[1] == '/') -+ path += 2; - } --#ifdef O_PATH -- if ((dfd = open(dir, O_PATH)) != -1) { -- /* Linux kernels < 3.6 can't do fstat on O_PATH fds. */ -- if (fstat(dfd, &sb) == -1) { -- close(dfd); -- dfd = open(dir, O_RDONLY); -- if (fstat(dfd, &sb) == -1) { -- close(dfd); -- dfd = -1; -- } -- } -- } --#else -- if ((dfd = open(dir, O_RDONLY)) != -1) { -- if (fstat(dfd, &sb) == -1) { -- close(dfd); -- dfd = -1; -- } -- } --#endif -- if (base != path) -- base[-1] = '/'; /* restore path */ - if (dfd == -1) - debug_return_int(-1); - -- if (dir_is_writable(&sb, user_details.uid, user_details.gid, -- user_details.ngroups, user_details.groups)) { -+ for (;;) { -+ char *slash; -+ int subdfd; -+ -+ /* -+ * Look up one component at a time, avoiding symbolic links in -+ * writable directories. -+ */ -+ if (fstat(dfd, &sb) == -1) { -+ close(dfd); -+#if defined(__linux__) && defined(O_PATH) -+ /* Linux prior to 3.6 can't fstat an O_PATH fd */ -+ if (ISSET(dflags, O_PATH)) { -+ CLR(dflags, O_PATH); -+ path = opath; -+ goto restart; -+ } -+#endif -+ debug_return_int(-1); -+ } -+#ifndef O_DIRECTORY -+ if (!S_ISDIR(sb.st_mode)) { -+ close(dfd); -+ errno = ENOTDIR; -+ debug_return_int(-1); -+ } -+#endif -+ is_writable = dir_is_writable(&sb, user_details.uid, user_details.gid, -+ user_details.ngroups, user_details.groups); -+ -+ while (path[0] == '/') -+ path++; -+ slash = strchr(path, '/'); -+ if (slash == NULL) -+ break; -+ *slash = '\0'; -+ if (is_writable) -+ subdfd = sudo_edit_openat_nofollow(dfd, path, dflags, 0); -+ else -+ subdfd = openat(dfd, path, dflags, 0); -+ *slash = '/'; /* restore path */ -+ close(dfd); -+ if (subdfd == -1) -+ debug_return_int(-1); -+ path = slash + 1; -+ dfd = subdfd; -+ } -+ -+ if (is_writable) { - close(dfd); - errno = EISDIR; - debug_return_int(-1); -@@ -332,27 +437,10 @@ - if (!ISSET(oflags, O_NONBLOCK)) - (void) fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) & ~O_NONBLOCK); - -- /* -- * Treat [fl]stat() failure like an open() failure. -- */ -- if (fstat(fd, &sb1) == -1 || lstat(path, &sb2) == -1) { -- const int serrno = errno; -+ if (!ISSET(sflags, CD_SUDOEDIT_FOLLOW) && sudo_edit_is_symlink(fd, path)) { - close(fd); -- errno = serrno; -- debug_return_int(-1); -- } -- -- /* -- * Make sure we did not open a link and that what we opened -- * matches what is currently on the file system. -- */ -- if (!ISSET(sflags, CD_SUDOEDIT_FOLLOW)) { -- if (S_ISLNK(sb2.st_mode) || -- sb1.st_dev != sb2.st_dev || sb1.st_ino != sb2.st_ino) { -- close(fd); -- errno = ELOOP; -- debug_return_int(-1); -- } -+ fd = -1; -+ errno = ELOOP; - } - - debug_return_int(fd); - diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm index 7c2651764a..36c538c165 100644 --- a/gnu/packages/pdf.scm +++ b/gnu/packages/pdf.scm @@ -1,7 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2013, 2015, 2016 Andreas Enge ;;; Copyright © 2014 Mark H Weaver -;;; Copyright © 2014, 2015 Ricardo Wurmus +;;; Copyright © 2014, 2015, 2016 Ricardo Wurmus ;;; Copyright © 2015 Paul van der Walt ;;; Copyright © 2016 Roel Janssen ;;; @@ -28,6 +28,7 @@ (define-module (gnu packages pdf) #:use-module (guix build-system cmake) #:use-module (guix build-system python) #:use-module (gnu packages) + #:use-module (gnu packages autotools) #:use-module (gnu packages compression) #:use-module (gnu packages fontutils) #:use-module (gnu packages ghostscript) @@ -157,6 +158,45 @@ (define-public python-poppler-qt4 Poppler PDF rendering library.") (license license:lgpl2.1+))) +(define-public libharu + (package + (name "libharu") + (version "2.3.0") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/libharu/libharu/archive/" + "RELEASE_" + (string-join (string-split version #\.) "_") + ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1lm4v539y9cb1lvbq387j57sy7yxda3yv8b1pk8m6zazbp66i7lg")))) + (build-system gnu-build-system) + (arguments + `(#:configure-flags + (list (string-append "--with-zlib=" + (assoc-ref %build-inputs "zlib")) + (string-append "--with-png=" + (assoc-ref %build-inputs "libpng"))) + #:phases + (modify-phases %standard-phases + (add-before 'configure 'autogen + (lambda _ (zero? (system* "autoreconf" "-vif"))))))) + (inputs + `(("zlib" ,zlib) + ("libpng" ,libpng))) + (native-inputs + `(("autoconf" ,autoconf) + ("automake" ,automake) + ("libtool" ,libtool))) + (home-page "http://libharu.org/") + (synopsis "Library for generating PDF files") + (description + "libHaru is a library for generating PDF files. libHaru does not support +reading and editing of existing PDF files.") + (license license:zlib))) + (define-public xpdf (package (name "xpdf") diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm index 211505a846..9f298ac960 100644 --- a/gnu/packages/perl.scm +++ b/gnu/packages/perl.scm @@ -8,6 +8,8 @@ ;;; Copyright © 2016 Jochem Raat ;;; Copyright © 2016 Efraim Flashner ;;; Coypright © 2016 ng0 +;;; Copyright © 2016 Alex Sassmannshausen +;;; Copyright © 2016 Roel Janssen ;;; ;;; This file is part of GNU Guix. ;;; @@ -1002,6 +1004,29 @@ (define-public perl-config-general options.") (license (package-license perl)))) +(define-public perl-config-ini + (package + (name "perl-config-ini") + (version "0.025") + (source (origin + (method url-fetch) + (uri (string-append + "mirror://cpan/authors/id/R/RJ/RJBS/Config-INI-" + version ".tar.gz")) + (sha256 + (base32 + "0clphq6a17chvb663fvjnxqvyvh26g03x0fl4bg9vy4ibdnzg2v2")))) + (build-system perl-build-system) + (inputs + `(("perl-mixin-linewise" ,perl-mixin-linewise) + ("perl-perlio-utf8_strict" ,perl-perlio-utf8_strict) + ("perl-sub-exporter" ,perl-sub-exporter))) + (home-page "http://search.cpan.org/dist/Config-INI") + (synopsis "Simple .ini-file format reader and writer") + (description "@code{Config::INI} is a module that facilates the reading +and writing of @code{.ini}-style configuration files.") + (license (package-license perl)))) + (define-public perl-context-preserve (package (name "perl-context-preserve") @@ -2458,6 +2483,26 @@ (define-public perl-file-which "File-Which-" version)) (license (package-license perl)))) +(define-public perl-file-zglob + (package + (name "perl-file-zglob") + (version "0.11") + (source (origin + (method url-fetch) + (uri (string-append + "mirror://cpan/authors/id/T/TO/TOKUHIROM/File-Zglob-" + version ".tar.gz")) + (sha256 + (base32 + "16v61rn0yimpv5kp6b20z2f1c93n5kpsyjvr0gq4w2dc43gfvc8w")))) + (build-system perl-build-system) + (home-page "http://search.cpan.org/dist/File-Zglob") + (synopsis "Extended Unix style glob functionality") + (description "@code{File::Zglob} provides a traditional Unix @code{glob} +functionality; it returns a list of file names that match the given pattern. +For instance, it supports the @code{**/*.pm} form.") + (license (package-license perl)))) + (define-public perl-getopt-long-descriptive (package (name "perl-getopt-long-descriptive") @@ -2505,6 +2550,29 @@ (define-public perl-getopt-tabular "Getopt-Tabular-" version)) (license (package-license perl)))) +(define-public perl-guard + (package + (name "perl-guard") + (version "1.023") + (source (origin + (method url-fetch) + (uri (string-append "mirror://cpan/authors/id/M/ML/MLEHMANN/Guard-" + version ".tar.gz")) + (sha256 + (base32 + "1p6i9mfmbs9cw40jqdv71ihv2xfi0vvlv8bdv2810gf93zwxvi1l")))) + (build-system perl-build-system) + (home-page "http://search.cpan.org/dist/Guard") + (synopsis "Safe cleanup blocks implemented as guards") + (description "@code{Guard} implements so-called @dfn{guards}. A guard is +something (usually an object) that \"guards\" a resource, ensuring that it is +cleaned up when expected. + +Specifically, this module supports two different types of guards: guard +objects, which execute a given code block when destroyed, and scoped guards, +which are tied to the scope exit.") + (license (package-license perl)))) + (define-public perl-hash-merge (package (name "perl-hash-merge") @@ -2592,6 +2660,31 @@ (define-public perl-inc-latest inc directory within a distribution and are used by Makefile.PL or Build.PL.") (license asl2.0))) +(define-public perl-io-captureoutput + (package + (name "perl-io-captureoutput") + (version "1.1104") + (source + (origin + (method url-fetch) + (uri (string-append + "mirror://cpan/authors/id/D/DA/DAGOLDEN/IO-CaptureOutput-" + version + ".tar.gz")) + (sha256 + (base32 + "0c437zvzpqi8f0h3nmblwdi2bvsb92b7g30fndr7my9qnky35izw")))) + (build-system perl-build-system) + (home-page "http://search.cpan.org/dist/IO-CaptureOutput") + (synopsis "Capture STDOUT and STDERR from Perl code, subprocesses or XS") + (description "@code{IO::CaptureOutput} provides routines for capturing +@code{STDOUT} and @code{STDERR} from perl subroutines, forked system +calls (e.g. @code{system()}, @code{fork()}) and from XS or C modules. + +This module is no longer recommended by its maintainer. Users are advised to +try @code{Capture::Tiny} instead.") + (license (package-license perl)))) + (define-public perl-io-interactive (package (name "perl-io-interactive") @@ -2744,6 +2837,30 @@ (define-public perl-ipc-sharelite allowing data to be efficiently communicated between processes.") (license (package-license perl)))) +(define-public perl-ipc-system-simple + (package + (name "perl-ipc-system-simple") + (version "1.25") + (source (origin + (method url-fetch) + (uri (string-append + "mirror://cpan/authors/id/P/PJ/PJF/IPC-System-Simple-" + version ".tar.gz")) + (sha256 + (base32 + "0fsdb81shjj4hifyyzvj7vpkhq5jrfhlcpw2xbjfi1mqz8fsmdpi")))) + (build-system perl-build-system) + (home-page "http://search.cpan.org/dist/IPC-System-Simple") + (synopsis "Run commands simply, with detailed diagnostics") + (description "Calling Perl's in-built @code{system} function is easy, +determining if it was successful is hard. Let's face it, @code{$?} isn't the +nicest variable in the world to play with, and even if you do check it, +producing a well-formatted error string takes a lot of work. + +@code{IPC::System::Simple} takes the hard work out of calling external +commands.") + (license (package-license perl)))) + (define-public perl-json (package (name "perl-json") @@ -2913,6 +3030,30 @@ (define-public perl-list-allutils List::Util or List::MoreUtils defines, with preference to List::Util.") (license (package-license perl)))) +(define-public perl-list-compare + (package + (name "perl-list-compare") + (version "0.53") + (source + (origin + (method url-fetch) + (uri (string-append + "mirror://cpan/authors/id/J/JK/JKEENAN/List-Compare-" + version + ".tar.gz")) + (sha256 + (base32 + "0l451yqhx1hlm7f2c3bjsl3n8w6l1jngrxzyfm2d8d9iggv4zgzx")))) + (build-system perl-build-system) + (native-inputs + `(("perl-io-captureoutput" ,perl-io-captureoutput))) + (home-page "http://search.cpan.org/dist/List-Compare") + (synopsis "Compare elements of two or more lists") + (description "@code{List::Compare} provides a module to perform +comparative operations on two or more lists. Provided operations include +intersections, unions, unique elements, complements and many more.") + (license (package-license perl)))) + (define-public perl-list-moreutils (package (name "perl-list-moreutils") @@ -2938,6 +3079,39 @@ (define-public perl-list-moreutils functionality on lists which is not going to go into List::Util.") (license (package-license perl)))) +(define-public perl-list-someutils + (package + (name "perl-list-someutils") + (version "0.52") + (source + (origin + (method url-fetch) + (uri (string-append + "mirror://cpan/authors/id/D/DR/DROLSKY/List-SomeUtils-" + version + ".tar.gz")) + (sha256 + (base32 + "1b450jyxaa6q2yl0cdhknr3c2a5s7b9b18ccnwac625c681r130y")))) + (build-system perl-build-system) + (native-inputs + `(("perl-test-leaktrace" ,perl-test-leaktrace))) + (inputs + `(("perl-exporter-tiny" ,perl-exporter-tiny) + ("perl-module-implementation" + ,perl-module-implementation))) + (home-page "http://search.cpan.org/dist/List-SomeUtils") + (synopsis "Provide the stuff missing in List::Util") + (description "@code{List::SomeUtils} provides some trivial but commonly +needed functionality on lists which is not going to go into @code{List::Util}. + +All of the below functions are implementable in only a couple of lines of Perl +code. Using the functions from this module however should give slightly +better performance as everything is implemented in C. The pure-Perl +implementation of these functions only serves as a fallback in case the C +portions of this module couldn't be compiled on this machine.") + (license (package-license perl)))) + (define-public perl-memoize-expirelru (package (name "perl-memoize-expirelru") @@ -2997,6 +3171,31 @@ (define-public perl-mime-types knowledge of Apache.") (license (package-license perl)))) +(define-public perl-mixin-linewise + (package + (name "perl-mixin-linewise") + (version "0.108") + (source (origin + (method url-fetch) + (uri (string-append + "mirror://cpan/authors/id/R/RJ/RJBS/Mixin-Linewise-" + version ".tar.gz")) + (sha256 + (base32 + "1wmfr19w9y8qys7b32mnj1vmps7qwdahqas71a9p62ac8xw0dwkx")))) + (build-system perl-build-system) + (inputs + `(("perl-perlio-utf8_strict" ,perl-perlio-utf8_strict) + ("perl-sub-exporter" ,perl-sub-exporter))) + (home-page "http://search.cpan.org/dist/Mixin-Linewise") + (synopsis "Write your linewise code for handles; this does the rest") + (description "It's boring to deal with opening files for IO, converting +strings to handle-like objects, and all that. With +@code{Mixin::Linewise::Readers} and @code{Mixin::Linewise::Writers}, you can +just write a method to handle handles, and methods for handling strings and +file names are added for you.") + (license (package-license perl)))) + (define-public perl-module-build-tiny (package (name "perl-module-build-tiny") @@ -4154,6 +4353,29 @@ (define-public perl-path-class directory specifications in a cross-platform manner.") (license (package-license perl)))) +(define-public perl-perlio-utf8_strict + (package + (name "perl-perlio-utf8-strict") + (version "0.006") + (source (origin + (method url-fetch) + (uri (string-append + "mirror://cpan/authors/id/L/LE/LEONT/PerlIO-utf8_strict-" + version ".tar.gz")) + (sha256 + (base32 + "0qnmiflirfq10jkmrxyy81ch6hzyndfzxqf8maif0fy44kk1004q")))) + (build-system perl-build-system) + (native-inputs + `(("perl-test-exception" ,perl-test-exception))) + (home-page + "http://search.cpan.org/dist/PerlIO-utf8_strict") + (synopsis "Fast and correct UTF-8 IO") + (description "@code{PerlIO::utf8_strict} provides a fast and correct UTF-8 +PerlIO layer. Unlike Perl's default @code{:utf8} layer it checks the input +for correctness.") + (license (package-license perl)))) + (define-public perl-pod-coverage (package (name "perl-pod-coverage") @@ -4939,6 +5161,66 @@ (define-public perl-test-base patterns, so that you can write tests with a minimum of code.") (license (package-license perl)))) +(define-public perl-test-class + (package + (name "perl-test-class") + (version "0.50") + (source + (origin + (method url-fetch) + (uri (string-append + "https://cpan.metacpan.org/authors/id/E/ET/ETHER/Test-Class-" + version + ".tar.gz")) + (sha256 + (base32 + "0l0kk5jvxjkic2jkf1r7v41irb344aasnzr3f5ygjgxgiknm9489")))) + (build-system perl-build-system) + (native-inputs + `(("perl-test-exception" ,perl-test-exception))) + (inputs + `(("perl-module-runtime" ,perl-module-runtime) + ("perl-mro-compat" ,perl-mro-compat) + ("perl-try-tiny" ,perl-try-tiny))) + (home-page "http://search.cpan.org/dist/Test-Class") + (synopsis "Easily create test classes in an xUnit/JUnit style") + (description "@code{Test::Class} provides a simple way of creating classes +and objects to test your code in an xUnit style. + +Built using @code{Test::Builder}, it was designed to work with other +@code{Test::Builder} based modules (@code{Test::More}, +@code{Test::Differences}, @code{Test::Exception}, etc.).") + (license (package-license perl)))) + +(define-public perl-test-class-most + (package + (name "perl-test-class-most") + (version "0.08") + (source + (origin + (method url-fetch) + (uri (string-append + "mirror://cpan/authors/id/O/OV/OVID/Test-Class-Most-" + version + ".tar.gz")) + (sha256 + (base32 + "1zvx9hil0mg0pnb8xfa4m0xgjpvh8s5gnbyprq3xwpdsdgcdwk33")))) + (build-system perl-build-system) + (native-inputs + `(("perl-module-build" ,perl-module-build))) + (inputs + `(("perl-test-class" ,perl-test-class) + ("perl-test-most" ,perl-test-most) + ("perl-module-runtime" ,perl-module-runtime) + ("perl-try-tiny" ,perl-try-tiny) + ("perl-mro-compat" ,perl-mro-compat))) + (home-page "http://search.cpan.org/dist/Test-Class-Most") + (synopsis "Test classes the easy way") + (description "@code{Test::Class::Most} provides some more convenience when +using @code{Test::Class}.") + (license (package-license perl)))) + (define-public perl-test-cleannamespaces (package (name "perl-test-cleannamespaces") @@ -5651,15 +5933,15 @@ (define-public perl-text-csv (define-public perl-text-diff (package (name "perl-text-diff") - (version "1.41") + (version "1.44") (source (origin (method url-fetch) - (uri (string-append "mirror://cpan/authors/id/O/OV/OVID/" + (uri (string-append "mirror://cpan/authors/id/N/NE/NEILB/" "Text-Diff-" version ".tar.gz")) (sha256 (base32 - "1ynjsa4sr1yvyh65sdfvahaafglibz70j8b6rj01cg1iisj50zx6")))) + "041v92zla2acdc433f47giridf6p820sdczs7x5d71fhsyza1xsp")))) (build-system perl-build-system) (propagated-inputs `(("perl-algorithm-diff" ,perl-algorithm-diff))) @@ -5806,6 +6088,26 @@ (define-public perl-throwable as exceptions to standard program flow.") (license (package-license perl)))) +(define-public perltidy + (package + (name "perltidy") + (version "20160302") + (source (origin + (method url-fetch) + (uri (string-append "mirror://sourceforge/perltidy/Perl-Tidy-" + version ".tar.gz")) + (sha256 + (base32 + "19yw63yh5s3pq7k3nkw6nsamg5b8vvwyhgbizslgxg0mqgc4xl3d")))) + (build-system perl-build-system) + (home-page "http://perltidy.sourceforge.net/") + (synopsis "Perl script tidier") + (description "This package contains a Perl script which indents and +reformats Perl scripts to make them easier to read. The formatting can be +controlled with command line parameters. The default parameter settings +approximately follow the suggestions in the Perl Style Guide.") + (license gpl2+))) + (define-public perl-tie-ixhash (package (name "perl-tie-ixhash") diff --git a/gnu/packages/pumpio.scm b/gnu/packages/pumpio.scm index 9d705ea3d5..a74d474368 100644 --- a/gnu/packages/pumpio.scm +++ b/gnu/packages/pumpio.scm @@ -61,7 +61,6 @@ (define-public pumpa (inputs `(("aspell" ,aspell) ("qtbase" ,qtbase) - ("qjson" ,qjson) ("tidy" ,tidy))) (synopsis "Qt-based pump.io client") (description "Pumpa is a simple pump.io client written in C++ and Qt.") diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm index 8bba7ca256..717a81e59f 100644 --- a/gnu/packages/python.scm +++ b/gnu/packages/python.scm @@ -22,6 +22,8 @@ ;;; Copyright © 2016 Hartmut Goebel ;;; Copyright © 2016 Daniel Pimentel ;;; Copyright © 2016 Sou Bunnbu +;;; Copyright © 2016 Troy Sankey +;;; Copyright © 2016 ng0 ;;; ;;; This file is part of GNU Guix. ;;; @@ -384,18 +386,18 @@ (define-public python-minimal-wrapper (wrap-python3 python-minimal)) (define-public python-psutil (package (name "python-psutil") - (version "3.3.0") + (version "4.3.0") (source (origin (method url-fetch) (uri (pypi-uri "psutil" version)) (sha256 (base32 - "11bd1555vf2ibjnmqf64im5cp55vcqfq45ccinm9ll3bs68na6s2")))) + "1w4r09fvn6kd80m5mx4ws1wz100brkaq6hzzpwrns8cgjzjpl6c6")))) (build-system python-build-system) (native-inputs `(("python-setuptools" ,python-setuptools))) - (home-page "https://pypi.python.org/pypi/psutil/") + (home-page "https://www.github.com/giampaolo/psutil") (synopsis "Library for retrieving information on running processes") (description "psutil (Python system and process utilities) is a library for retrieving @@ -1139,15 +1141,14 @@ (define-public python2-mechanize (define-public python-simplejson (package (name "python-simplejson") - (version "3.3.0") + (version "3.8.2") (source (origin (method url-fetch) - (uri (string-append "https://pypi.python.org/packages/source/s/simplejson/simplejson-" - version ".tar.gz")) + (uri (pypi-uri "simplejson" version)) (sha256 (base32 - "07wsry5j44l5zzm74l4j2bvasiq8n5m32f31n2p7c68i5vc6p2ks")))) + "0zylrnax8b6r0ndgni4w9c599fi6wm9vx5g6k3ddqfj3932kk16m")))) (build-system python-build-system) (home-page "http://simplejson.readthedocs.org/en/latest/") (synopsis @@ -2030,14 +2031,14 @@ (define-public python2-testrepository (define-public python-coverage (package (name "python-coverage") - (version "4.0.3") + (version "4.1") (source (origin (method url-fetch) (uri (pypi-uri "coverage" version)) (sha256 (base32 - "0qjlja8ny4gcfp8abqfwdrvr8qw9kr69lkja0b4cqqbsdmdjgcc5")))) + "01rbr4br4lsk0lwn8fb96zwd2xr4f0mg1w7iq3j11i8f5ig2nqs1")))) (build-system python-build-system) (inputs `(("python-setuptools" ,python-setuptools))) @@ -2083,14 +2084,13 @@ (define-public python2-discover (define-public behave (package (name "behave") - (version "1.2.4") + (version "1.2.5") (source (origin (method url-fetch) - (uri (string-append "https://pypi.python.org/packages/source/b/" - name "/" name "-" version ".tar.gz")) + (uri (pypi-uri "behave" version ".tar.bz2")) (sha256 (base32 - "1v2rfy8xnf0rk7cj4cgr7lam4015d458i7bg0xqs9czfv6njlm14")))) + "1iypp6z46r19n4xmgx6m1lwmlpfjh8vapq8izigrqlaarvp2y64c")))) (build-system python-build-system) (inputs `(("python-setuptools" ,python-setuptools) @@ -3283,15 +3283,14 @@ (define-public python2-numpydoc (define-public python-numexpr (package (name "python-numexpr") - (version "2.4.4") + (version "2.6.0") (source (origin (method url-fetch) - (uri (string-append "https://pypi.python.org/packages/source/" - "n/numexpr/numexpr-" version ".tar.gz")) + (uri (pypi-uri "numexpr" version)) (sha256 (base32 - "0nsnff5312fm38w6dm34bw7ghfqqy8vl9gig0al963h4mz8zm8nz")))) + "0i6iagl2hhbr8q4qzbbjd859v5806vqylq87fq7pi914ps6d6cag")))) (build-system python-build-system) (arguments `(#:tests? #f)) ; no tests included (propagated-inputs @@ -4132,13 +4131,13 @@ (define-public python2-pexpect (define-public python-setuptools-scm (package (name "python-setuptools-scm") - (version "1.9.0") + (version "1.11.1") (source (origin (method url-fetch) (uri (pypi-uri "setuptools_scm" version)) (sha256 (base32 - "0y24bl893zk6nrklbvdrlmpkalf214zjn6k1xrglljd29rrn4wxi")))) + "1gqr73i150yzj3mz32854vj93x07yr52kn8fdckwa41ll8wgficc")))) (build-system python-build-system) (native-inputs `(("python-setuptools" ,python-setuptools))) (home-page "https://github.com/pypa/setuptools_scm/") @@ -4507,6 +4506,30 @@ (define-public python-urwid (define-public python2-urwid (package-with-python2 python-urwid)) +(define-public python-urwidtrees + (package + (name "python-urwidtrees") + (version "1.0.1.1") + (source + (origin + (method url-fetch) + (uri (pypi-uri "urwidtrees" version)) + (sha256 + (base32 + "1zcvy12s7h3fazf33d6y7b4v19p8hg95xqwhqlmw6jz9fq76v9h8")))) + (build-system python-build-system) + (arguments + '(#:tests? #f)) ; no tests + (inputs `(("python-urwid" ,python-urwid))) + (home-page "https://github.com/pazz/urwidtrees") + (synopsis "Tree widgets for urwid") + (description "Urwidtrees is a Widget Container API for the @code{urwid} +toolkit. Use it to build trees of widgets.") + (license gpl3+))) + +(define-public python2-urwidtrees + (package-with-python2 python-urwidtrees)) + (define-public python-dbus (package (name "python-dbus") @@ -4591,14 +4614,14 @@ (define-public python2-apsw (define-public python-lxml (package (name "python-lxml") - (version "3.5.0") + (version "3.6.0") (source (origin (method url-fetch) (uri (pypi-uri "lxml" version)) (sha256 - (base32 - "0y7m2s8ci6q642zl85y5axkj8z827l0vhjl532acb75hlkir77rl")))) + (base32 + "1pvbmiy2m7jwv493kilbghhj2pkh8wy1na3ji350vhzhlwlclx4w")))) (build-system python-build-system) (inputs `(("libxml2" ,libxml2) @@ -4651,17 +4674,14 @@ (define-public python2-beautifulsoup4 (define-public python2-cssutils (package (name "python2-cssutils") - (version "1.0") + (version "1.0.1") (source (origin (method url-fetch) - (uri (string-append - "https://pypi.python.org/packages/source/c/cssutils/cssutils-" - version - ".zip")) + (uri (pypi-uri "cssutils" version)) (sha256 - (base32 - "1bwim1353r4hqiir73sn4sc43y7ymh09qx0kly7vj048blppc125")))) + (base32 + "0qwha9x1wml2qmipbcz03gndnlwhzrjdvw9i09si247a90l8p8fq")))) (build-system python-build-system) (native-inputs `(("python2-mock" ,python2-mock) ; for the tests @@ -4684,17 +4704,14 @@ (define-public python2-cssutils (define-public python-cssselect (package (name "python-cssselect") - (version "0.9.1") + (version "0.9.2") (source (origin (method url-fetch) - (uri (string-append - "https://pypi.python.org/packages/source/c/cssselect/cssselect-" - version - ".tar.gz")) + (uri (pypi-uri "cssselect" version)) (sha256 - (base32 - "10h623qnp6dp1191jri7lvgmnd4yfkl36k9smqklp1qlf3iafd85")))) + (base32 + "1xg6gbva1yswghiycmgincv6ab4bn7hpm720ndbj40h8xycmnfvi")))) (build-system python-build-system) (inputs `(("python-setuptools" ,python-setuptools))) @@ -5961,18 +5978,14 @@ (define-public python2-pretend (define-public python-cryptography-vectors (package (name "python-cryptography-vectors") - (version "1.3.2") + (version "1.3.4") (source (origin (method url-fetch) - (uri (string-append - "https://pypi.python.org/packages/" - "3f/fd/" - "5883a7fdfcdf6edec55c58605be99d8c36ce97a9b729763ea9cf30e761b7" - "/cryptography_vectors-" version ".tar.gz")) + (uri (pypi-uri "cryptography_vectors" version)) (sha256 (base32 - "0ss682bpgzdfy2vam8yhhrx7p5gnw89ydlvaswqp52za8sd8nsh0")))) + "15h1iz2klnpb4f8djxy7cpbnyn3wbjp7bnj4pz6s7w6plghbq524")))) (build-system python-build-system) (native-inputs `(("python-setuptools" ,python-setuptools))) @@ -5989,18 +6002,14 @@ (define-public python2-cryptography-vectors (define-public python-cryptography (package (name "python-cryptography") - (version "1.3.2") + (version "1.3.4") (source (origin (method url-fetch) - (uri (string-append - "https://pypi.python.org/packages/" - "04/da/" - "35f9a1d34dab5d777f65fb87731288f338ab0ae46a525ffdf0405b573dd0" - "/cryptography-" version ".tar.gz")) + (uri (pypi-uri "cryptography" version)) (sha256 (base32 - "121067qdbzd0ir0nxjdf0kgai7qlsc9yh2xhrj4cavcn4y4gmapv")))) + "1a85l548w5vvq3yhz0az7ajg2ijixzp6gagapw6wgrqvq28ghgs2")))) (build-system python-build-system) (inputs `(("openssl" ,openssl))) @@ -6666,16 +6675,14 @@ (define-public python2-zope-component (define-public python2-pythondialog (package (name "python2-pythondialog") - (version "3.3.0") + (version "3.4.0") (source (origin (method url-fetch) - (uri (string-append "https://pypi.python.org/packages/source/p/" - "python2-pythondialog/python2-pythondialog-" - version ".tar.gz")) + (uri (pypi-uri "python2-pythondialog" version)) (sha256 (base32 - "1yhkagsh99bfi592ymczf8rnw8rk6n9hdqy3dd98m3yrx8zmjvry")))) + "0d8k7lxk50imdyx85lv8j98i4c93a71iwpapnl1506rpkbm9qvd9")))) (build-system python-build-system) (arguments `(#:phases @@ -6896,16 +6903,14 @@ (define-public python2-texttable (define-public python-websocket-client (package (name "python-websocket-client") - (version "0.34.0") + (version "0.37.0") (source (origin (method url-fetch) - (uri (string-append "https://pypi.python.org/packages/source/w" - "/websocket-client/websocket_client-" - version ".tar.gz")) + (uri (pypi-uri "websocket_client" version)) (sha256 (base32 - "1prdx6d49f1cff17kzj15bnz09palfdgc1m5dkq9jd4mr90n4ak8")))) + "0h9glp1jll3z76ly3kg08aqgxqk0a68p4zi9yn50353bh5nj92v7")))) (build-system python-build-system) (native-inputs `(("python-six" ,python-six))) ; for tests @@ -7094,7 +7099,17 @@ (define-public python-pytest-cache (description "The pytest-cache plugin provides tools to rerun failures from the last py.test invocation.") (home-page "https://bitbucket.org/hpk42/pytest-cache/") - (license license:expat))) + (license license:expat) + (properties `((python2-variant . ,(delay python2-pytest-cache)))))) + +(define-public python2-pytest-cache + (let ((pytest-cache (package-with-python2 + (strip-python2-variant python-pytest-cache)))) + (package + (inherit pytest-cache) + (native-inputs + `(("python2-setuptools" ,python2-setuptools) + ,@(package-native-inputs pytest-cache)))))) (define-public python-pytest-localserver (package @@ -7975,14 +7990,14 @@ (define-public python2-pastescript (define-public python-pyquery (package (name "python-pyquery") - (version "1.2.11") + (version "1.2.13") (source (origin (method url-fetch) (uri (pypi-uri "pyquery" version)) (sha256 (base32 - "1ikz1387nsp0pp7mzzr6ip9n5gr67acpap24yn33987v7fkjp0sa")))) + "0j9fsisip21qv4xljsg5dmni1pgpvwrjyyhhql0glydc4bs5rjgv")))) (build-system python-build-system) (propagated-inputs `(("python-lxml" ,python-lxml) @@ -8335,13 +8350,13 @@ (define-public python2-sphinxcontrib-programoutput (define-public python-sphinx-repoze-autointerface (package (name "python-sphinx-repoze-autointerface") - (version "0.7.1") + (version "0.8") (source (origin (method url-fetch) (uri (pypi-uri "repoze.sphinx.autointerface" version)) (sha256 (base32 - "016mv3wbylw278wl7z33y2liyra8ljp08zq1g0anzadh1an5zvwp")))) + "08ycivzf7bh4a1zcyp31hbyqs1b2c9r26raa3vxjwwmbfqr3iw4f")))) (build-system python-build-system) (propagated-inputs `(("python-docutils" ,python-docutils) @@ -9123,8 +9138,9 @@ (define-public python-twisted "0ydxrp9myw1mvsz3qfzx5579y5llmqa82pxvqchgp5syczffi450")))) (build-system python-build-system) (native-inputs - `(("python-setuptools" ,python-setuptools) - ("python-zope-interface" ,python-zope-interface))) + `(("python-setuptools" ,python-setuptools))) + (propagated-inputs + `(("python-zope-interface" ,python-zope-interface))) (home-page "https://twistedmatrix.com/") (synopsis "Asynchronous networking framework written in Python") (description @@ -9209,8 +9225,9 @@ (define-public python-kazoo (build-system python-build-system) (arguments '(#:tests? #f)) ; XXX: needs zookeeper (native-inputs - `(("python-setuptools" ,python-setuptools) - ("python-six" ,python-six))) + `(("python-setuptools" ,python-setuptools))) + (propagated-inputs + `(("python-six" ,python-six))) (home-page "https://kazoo.readthedocs.org") (synopsis "High-level Zookeeper client library") (description @@ -9238,9 +9255,10 @@ (define-public python-pykafka (build-system python-build-system) (arguments '(#:tests? #f)) ; XXX: needs zookeeper, kafka, etc. (native-inputs + `(("python-setuptools" ,python-setuptools))) + (propagated-inputs `(("python-gevent" ,python-gevent) ("python-kazoo" ,python-kazoo) - ("python-setuptools" ,python-setuptools) ("python-tabulate" ,python-tabulate))) (inputs `(("librdkafka" ,librdkafka))) @@ -9277,7 +9295,8 @@ (define-public python-wcwidth or programs that carefully produce output to be interpreted by one. It is a Python implementation of the @code{wcwidth} and @code{wcswidth} C functions specified in POSIX.1-2001 and POSIX.1-2008.") - (license license:expat))) + (license license:expat) + (properties `((python2-variant . ,(delay python2-wcwidth)))))) (define-public python2-wcwidth (package @@ -9348,10 +9367,11 @@ (define-public python-arrow (build-system python-build-system) (native-inputs `(("python-setuptools" ,python-setuptools) - ("python-dateutil" ,python-dateutil-2) ;; For testing ("python-chai" ,python-chai) ("python-simplejson" ,python-simplejson))) + (propagated-inputs + `(("python-dateutil" ,python-dateutil-2))) (home-page "https://github.com/crsmithdev/arrow/") (synopsis "Dates and times for Python") (description @@ -9422,12 +9442,13 @@ (define-public python-cleo "1k2dcl6mqpn5bljyl6w42rqyd9mb3y9kh2mg7m2x3kfjwvg0rpva")))) (build-system python-build-system) (native-inputs - `(("python-psutil" ,python-psutil) - ("python-pylev" ,python-pylev) - ("python-setuptools" ,python-setuptools) + `(("python-setuptools" ,python-setuptools) ;; For testing ("python-mock" ,python-mock) ("python-pytest" ,python-pytest))) + (propagated-inputs + `(("python-psutil" ,python-psutil) + ("python-pylev" ,python-pylev))) (home-page "https://github.com/sdispater/cleo") (synopsis "Command-line arguments library for Python") (description @@ -9507,9 +9528,10 @@ (define-public python-email-validator (("dnspython3") "dnspython")) #t))))) (native-inputs + `(("python-setuptools" ,python-setuptools))) + (propagated-inputs `(("python-dnspython" ,python-dnspython) - ("python-idna" ,python-idna) - ("python-setuptools" ,python-setuptools))) + ("python-idna" ,python-idna))) (home-page "https://github.com/JoshData/python-email-validator") (synopsis "Email address validation library for Python") (description @@ -9564,13 +9586,14 @@ (define-public python-fake-factory (delete-file "faker/tests/ne_np/__init__.py") #t))))) (native-inputs - `(("python-dateutil" ,python-dateutil-2) - ("python-setuptools" ,python-setuptools) - ("python-six" ,python-six) + `(("python-setuptools" ,python-setuptools) ;; For testing ("python-email-validator" ,python-email-validator) ("python-mock" ,python-mock) ("python-ukpostcodeparser" ,python-ukpostcodeparser))) + (propagated-inputs + `(("python-dateutil" ,python-dateutil-2) + ("python-six" ,python-six))) (home-page "http://github.com/joke2k/faker") (synopsis "Python package that generates fake data") (description @@ -9584,9 +9607,9 @@ (define-public python2-fake-factory python-fake-factory)))) (package (inherit base) - (native-inputs + (propagated-inputs `(("python2-ipaddress" ,python2-ipaddress) - ,@(package-native-inputs base)))))) + ,@(package-propagated-inputs base)))))) (define-public python-pyaml (package @@ -9649,6 +9672,8 @@ (define-public python-orator (build-system python-build-system) (arguments '(#:tests? #f)) ; no tests (native-inputs + `(("python-setuptools" ,python-setuptools))) + (propagated-inputs `(("python-arrow" ,python-arrow) ("python-blinker" ,python-blinker) ("python-cleo" ,python-cleo) @@ -9656,7 +9681,6 @@ (define-public python-orator ("python-inflection" ,python-inflection) ("python-lazy-object-proxy" ,python-lazy-object-proxy) ("python-pyaml" ,python-pyaml) - ("python-setuptools" ,python-setuptools) ("python-simplejson" ,python-simplejson) ("python-wrapt" ,python-wrapt))) (home-page "https://orator-orm.com/") @@ -9671,6 +9695,71 @@ (define-public python2-orator (let ((base (package-with-python2 (strip-python2-variant python-orator)))) (package (inherit base) - (native-inputs + (propagated-inputs `(("python2-ipaddress" ,python2-ipaddress) + ,@(package-propagated-inputs base)))))) + +(define-public python-prompt-toolkit + (package + (name "python-prompt-toolkit") + (version "1.0.3") + (source + (origin + (method url-fetch) + (uri (string-append + "https://pypi.python.org/packages/" + "8d/de/412f23919929c01e6b55183e124623f705e4b91796d3d2dce2cb53d595ad/" + "prompt_toolkit-" version ".tar.gz")) + (sha256 + (base32 + "18lbmmkyjf509klc3217lq0x863pfzix779zx5kp9lms1iph4pl0")))) + (build-system python-build-system) + (inputs `(("python-wcwidth" ,python-wcwidth) + ("python-pygments" ,python-pygments))) + (native-inputs `(("python-six" ,python-six))) + (home-page "https://github.com/jonathanslenders/python-prompt-toolkit") + (synopsis "Library for building command line interfaces in Python") + (description + "Prompt-Toolkit is a library for building interactive command line +interfaces in Python. It's like GNU Readline but it also features syntax +highlighting while typing, out-of-the-box multi-line input editing, advanced +code completion, incremental search, support for Chinese double-width +characters, mouse support, and auto suggestions.") + (license bsd-3) + (properties `((python2-variant . ,(delay python2-prompt-toolkit)))))) + +(define-public python2-prompt-toolkit + (let ((base (package-with-python2 (strip-python2-variant python-prompt-toolkit)))) + (package + (inherit base) + (native-inputs + `(("python2-setuptools" ,python2-setuptools) + ,@(package-native-inputs base)))))) + +(define-public python-jedi + (package + (name "python-jedi") + (version "0.9.0") + (source + (origin + (method url-fetch) + (uri (pypi-uri "jedi" version)) + (sha256 + (base32 + "0c8x962ynpx001fdvp07m2q5jk4igkxbj3rmnydavphvlgxijk1v")))) + (build-system python-build-system) + (home-page "https://github.com/davidhalter/jedi") + (synopsis + "Autocompletion for Python that can be used for text editors") + (description + "Jedi is an autocompletion tool for Python that can be used for text editors.") + (license license:expat) + (properties `((python2-variant . ,(delay python2-jedi)))))) + +(define-public python2-jedi + (let ((base (package-with-python2 (strip-python2-variant python-jedi)))) + (package + (inherit base) + (native-inputs + `(("python2-setuptools" ,python2-setuptools) ,@(package-native-inputs base)))))) diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm index cab1f30db5..6c1bbc33c3 100644 --- a/gnu/packages/qt.scm +++ b/gnu/packages/qt.scm @@ -302,7 +302,7 @@ (define-public qt-4 (define-public qtbase (package (name "qtbase") - (version "5.6.1") + (version "5.6.1-1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -310,8 +310,8 @@ (define-public qtbase "/submodules/" name "-opensource-src-" version ".tar.xz")) (sha256 - (base32 - "0r3jrqymnnxrig4f11xvs33c26f0kzfakbp3kcbdpv795gpc276h")) + (base32 + "0fbwprlhqmdyhh2wb9122fcpq7pbil530iak482b9sy5gqs7i5ij")) (modules '((guix build utils))) (snippet '(begin @@ -328,12 +328,14 @@ (define-public qtbase `(("alsa-lib" ,alsa-lib) ("cups" ,cups) ("dbus" ,dbus) + ("eudev" ,eudev) ("expat" ,expat) ("fontconfig" ,fontconfig) ("freetype" ,freetype) ("glib" ,glib) ("harfbuzz" ,harfbuzz) ("icu4c" ,icu4c) + ("libinput" ,libinput) ("libjpeg" ,libjpeg) ("libmng" ,libmng) ("libpng" ,libpng) @@ -435,7 +437,7 @@ (define-public qtbase (define-public qtsvg (package (inherit qtbase) (name "qtsvg") - (version "5.6.1") + (version "5.6.1-1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -444,7 +446,7 @@ (define-public qtsvg version ".tar.xz")) (sha256 (base32 - "08ca5g46g75acy27jfnvnalmcias5hxmjp7491v3y4k9y7a4ybpi")))) + "1w0jvhgaiddafcms2nv8wl1klg07lncmjwm1zhdw3l6rxi9071sw")))) (propagated-inputs `()) (native-inputs `(("perl" ,perl))) (inputs @@ -469,7 +471,7 @@ (define-public qtsvg (define-public qtimageformats (package (inherit qtsvg) (name "qtimageformats") - (version "5.6.1") + (version "5.6.1-1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -478,7 +480,7 @@ (define-public qtimageformats version ".tar.xz")) (sha256 (base32 - "020v1148433zx4g87z2r8fgff32n0laajxqqsja1l3yzz7jbrwvl")))) + "1p98acvsm3azka2by1ph4gdb31qbnndrr5k5wns4xk2d760y8ifc")))) (native-inputs `()) (inputs `(("libmng" ,libmng) @@ -491,7 +493,7 @@ (define-public qtimageformats (define-public qtx11extras (package (inherit qtsvg) (name "qtx11extras") - (version "5.6.1") + (version "5.6.1-1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -500,7 +502,7 @@ (define-public qtx11extras version ".tar.xz")) (sha256 (base32 - "0l736qiz8adrnh267xz63hv4sph6nhy90h836qfnnmv3p78ipsz8")))) + "0yj5yg2dqkrwbgbicmk2rpqsagmi8dsffkrprpsj0fmkx4awhv5y")))) (native-inputs `(("perl" ,perl))) (inputs `(("mesa" ,mesa) @@ -509,7 +511,7 @@ (define-public qtx11extras (define-public qtxmlpatterns (package (inherit qtsvg) (name "qtxmlpatterns") - (version "5.6.1") + (version "5.6.1-1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -518,14 +520,14 @@ (define-public qtxmlpatterns version ".tar.xz")) (sha256 (base32 - "0q412jv3xbg7v05b8pbahifwx17gzlp96s90akh6zwhpm8i6xx34")))) + "1966rrk7f6c55k57j33rffdjs77kk4mawrnnl8yv1ckcirxc3np1")))) (native-inputs `(("perl" ,perl))) (inputs `(("qtbase" ,qtbase))))) (define-public qtdeclarative (package (inherit qtsvg) (name "qtdeclarative") - (version "5.6.1") + (version "5.6.1-1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -534,7 +536,7 @@ (define-public qtdeclarative version ".tar.xz")) (sha256 (base32 - "1d2217kxk85kpi7ls08b41hqzy26hvch8m4cgzq6km5sqi5zvz0j")))) + "094gx5mzqzcga97y7ihf052b6i5iv512lh7m0702m5q94nsn1pqw")))) (native-inputs `(("perl" ,perl) ("pkg-config" ,pkg-config) @@ -548,7 +550,7 @@ (define-public qtdeclarative (define-public qtconnectivity (package (inherit qtsvg) (name "qtconnectivity") - (version "5.6.1") + (version "5.6.1-1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -557,7 +559,7 @@ (define-public qtconnectivity version ".tar.xz")) (sha256 (base32 - "06fr9321f52kf0nda9zjjfzp5694hbnx0y0v315iw28mnpvandas")))) + "0sr6sxp0q45pacs25knr28139xdrphcjgrwlksdhdpsryfw19mzi")))) (native-inputs `(("perl" ,perl) ("pkg-config" ,pkg-config) @@ -569,7 +571,7 @@ (define-public qtconnectivity (define-public qtwebsockets (package (inherit qtsvg) (name "qtwebsockets") - (version "5.6.1") + (version "5.6.1-1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -578,7 +580,7 @@ (define-public qtwebsockets version ".tar.xz")) (sha256 (base32 - "0fkj52i4yi6gmq4jfjgdij08cspxspac6mbpf0fknnllimmkl7jm")))) + "1fz0x8570zxc00a22skd848svma3p2g3xyxj14jq10559jihqqil")))) (native-inputs `(("perl" ,perl) ("qtdeclarative" ,qtdeclarative))) @@ -587,7 +589,7 @@ (define-public qtwebsockets (define-public qtsensors (package (inherit qtsvg) (name "qtsensors") - (version "5.6.1") + (version "5.6.1-1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -596,7 +598,7 @@ (define-public qtsensors version ".tar.xz")) (sha256 (base32 - "0bll7ll6s5g8w89knyrc0famjwqyfzwpn512m1f96bf6xwacs967")))) + "0kcrvf6vzn6g2v2m70f9r3raalzmfp48rwjlqhss3w84jfz3y04r")))) (native-inputs `(("perl" ,perl) ("qtdeclarative" ,qtdeclarative))) @@ -605,7 +607,7 @@ (define-public qtsensors (define-public qtmultimedia (package (inherit qtsvg) (name "qtmultimedia") - (version "5.6.1") + (version "5.6.1-1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -614,7 +616,7 @@ (define-public qtmultimedia version ".tar.xz")) (sha256 (base32 - "058523c2qra3d8fq46ygcndnkrbwlh316zy28s2cr5pjr5gmnjyj")))) + "0paffx0614ivjbf87lr9klpbqik6r1pzbc14l41np6d9jv3dqa2f")))) (native-inputs `(("perl" ,perl) ("pkg-config" ,pkg-config) @@ -629,7 +631,7 @@ (define-public qtmultimedia (define-public qtwayland (package (inherit qtsvg) (name "qtwayland") - (version "5.6.1") + (version "5.6.1-1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -638,7 +640,7 @@ (define-public qtwayland version ".tar.xz")) (sha256 (base32 - "1jgghjfrg0wwyfzfwgwhagwxz9k936ylv3w2l9bwlpql8rgm8d11")))) + "1fnvgpi49ilds3ah9iizxj9qhhb5rnwqd9h03bhkwf0ydywv52c4")))) (native-inputs `(("glib" ,glib) ("perl" ,perl) @@ -660,7 +662,7 @@ (define-public qtwayland (define-public qtserialport (package (inherit qtsvg) (name "qtserialport") - (version "5.6.1") + (version "5.6.1-1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -669,14 +671,16 @@ (define-public qtserialport version ".tar.xz")) (sha256 (base32 - "1hp63cgqhps6y1k041lzhcb2b0rcpcmszabnn293q5ilbvla4x0b")))) + "135cbgghxk0c6dblmyyrw6znfb9m8sac9hhyc2dm6vq7vzy8id52")))) (native-inputs `(("perl" ,perl))) - (inputs `(("qtbase" ,qtbase))))) + (inputs + `(("qtbase" ,qtbase) + ("eudev" ,eudev))))) (define-public qtwebchannel (package (inherit qtsvg) (name "qtwebchannel") - (version "5.6.1") + (version "5.6.1-1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -685,7 +689,7 @@ (define-public qtwebchannel version ".tar.xz")) (sha256 (base32 - "01q80917a1048hdhaii4v50dqs84h16lc9w3v99r9xvspk8vab7q")))) + "10kys3ppjkj60fs1s335fdcpdsbxsjn6ibvm6zph9gqbncabd2l7")))) (native-inputs `(("perl" ,perl) ("qtdeclarative" ,qtdeclarative) @@ -695,7 +699,7 @@ (define-public qtwebchannel (define-public qtlocation (package (inherit qtsvg) (name "qtlocation") - (version "5.6.1") + (version "5.6.1-1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -704,7 +708,7 @@ (define-public qtlocation version ".tar.xz")) (sha256 (base32 - "0qahs7a2n3l4h0bl8bnwci9mzy1vra3zncnzr40csic9ys67ddfk")))) + "0my4pbcxa58yzvdh65l5qx99ln03chjr5c3ml5v37wfk7nx23k69")))) (native-inputs `(("perl" ,perl) ("qtdeclarative" ,qtdeclarative) @@ -715,7 +719,7 @@ (define-public qtlocation (define-public qttools (package (inherit qtsvg) (name "qttools") - (version "5.6.1") + (version "5.6.1-1") (source (origin (method url-fetch) (uri (string-append "https://download.qt.io/official_releases/qt/" @@ -724,7 +728,7 @@ (define-public qttools version ".tar.xz")) (sha256 (base32 - "0wbzq60d7lkvlb7b5lqcw87qgy6kyjz1npjavz8f4grdxsaqi8vp")))) + "0haic027a2d7p7k8xz83fbvci4a4dln34360rlwgy7hlyy5m4nip")))) (native-inputs `(("perl" ,perl) ("qtdeclarative" ,qtdeclarative))) @@ -732,6 +736,25 @@ (define-public qttools `(("mesa" ,mesa) ("qtbase" ,qtbase))))) +(define-public qtscript + (package (inherit qtsvg) + (name "qtscript") + (version "5.6.1-1") + (source (origin + (method url-fetch) + (uri (string-append "https://download.qt.io/official_releases/qt/" + (version-major+minor version) "/" version + "/submodules/" name "-opensource-src-" + version ".tar.xz")) + (sha256 + (base32 + "1gini9483flqa9q4a4bl81bh7g5s408bycqykqhgbklmfd29y5lx")))) + (native-inputs + `(("perl" ,perl) + ("qttools" ,qttools))) + (inputs + `(("qtbase" ,qtbase))))) + (define-public qjson (package (name "qjson") diff --git a/gnu/packages/readline.scm b/gnu/packages/readline.scm index db469db051..169a7386c4 100644 --- a/gnu/packages/readline.scm +++ b/gnu/packages/readline.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2012, 2013, 2014 Ludovic Courtès +;;; Copyright © 2016 Efraim Flashner ;;; ;;; This file is part of GNU Guix. ;;; @@ -20,6 +21,7 @@ (define-module (gnu packages readline) #:use-module (guix licenses) #:use-module (gnu packages) #:use-module (gnu packages ncurses) + #:use-module (gnu packages perl) #:use-module (guix packages) #:use-module (guix download) #:use-module (guix build-system gnu)) @@ -85,3 +87,29 @@ (define-public readline-6.2 (sha256 (base32 "10ckm2bd2rkxhvdmj7nmbsylmihw0abwcsnxf8y27305183rd9kr")))))) + +(define-public rlwrap + (package + (name "rlwrap") + (version "0.42") + (source + (origin + (method url-fetch) + (uri (string-append "http://utopia.knoware.nl/~hlub/uck/rlwrap/rlwrap-" + version ".tar.gz")) + (sha256 + (base32 + "0i3yz303wscrysyzpdq04h4nrl9ajz9dbwi80risdl5rkm3dhw2s")))) + (build-system gnu-build-system) + (native-inputs `(("perl" ,perl))) + (inputs + `(("readline" ,readline))) + (synopsis "Wrapper to allow the editing of keyboard commands") + (description + "Rlwrap is a 'readline wrapper', a small utility that uses the GNU +readline library to allow the editing of keyboard input for any command. You +should consider rlwrap especially when you need user-defined completion (by way +of completion word lists) and persistent history, or if you want to program +'special effects' using the filter mechanism.") + (home-page "http://utopia.knoware.nl/~hlub/uck/rlwrap/") + (license gpl2+))) diff --git a/gnu/packages/samba.scm b/gnu/packages/samba.scm index 8aac6a5dc1..9f0b57c739 100644 --- a/gnu/packages/samba.scm +++ b/gnu/packages/samba.scm @@ -99,14 +99,14 @@ (define (copy dir) (define-public samba (package (name "samba") - (version "4.3.8") + (version "4.3.11") (source (origin (method url-fetch) (uri (string-append "https://www.samba.org/samba/ftp/stable/samba-" version ".tar.gz")) (sha256 (base32 - "041b5frh4ikcka922aqhqjvlv4w2s7jycyykpvsknj0a79ncd79p")))) + "1v2grwivm6rasz1ganbybs0ikz1lydaniy65kxf1v8rl1qqngach")))) (build-system gnu-build-system) (arguments '(#:phases @@ -150,7 +150,7 @@ (define-public samba `(("perl" ,perl) ("pkg-config" ,pkg-config) ("python" ,python-2))) ; incompatible with Python 3 - (home-page "http://www.samba.org/") + (home-page "https://www.samba.org/") (synopsis "The standard Windows interoperability suite of programs for GNU and Unix") (description @@ -165,14 +165,14 @@ (define-public samba (define-public talloc (package (name "talloc") - (version "2.1.5") + (version "2.1.7") (source (origin (method url-fetch) (uri (string-append "https://www.samba.org/ftp/talloc/talloc-" version ".tar.gz")) (sha256 (base32 - "1pfx3kmj973hpacfw46fzfnjd7ms1j03ifkc30wk930brx8ffcrq")))) + "01m0kzndciyj43z1zd2nc61xqgh9knjv0w7lk1rrrlj8irr4w58r")))) (build-system gnu-build-system) (arguments '(#:phases @@ -202,14 +202,14 @@ (define-public talloc (define-public tevent (package (name "tevent") - (version "0.9.26") + (version "0.9.28") (source (origin (method url-fetch) (uri (string-append "https://www.samba.org/ftp/tevent/tevent-" version ".tar.gz")) (sha256 (base32 - "1gbh6d2m49j1v2hkaiyrh8bj02i5wxd4hqayzk2g44yyivbi8b16")))) + "0a9ml52jjnzz7qg9z750mavlvs1yibjwrzy4yl55dc95j0vm7n84")))) (build-system gnu-build-system) (arguments '(#:phases @@ -237,14 +237,14 @@ (define-public tevent (define-public ldb (package (name "ldb") - (version "1.1.24") + (version "1.1.26") (source (origin (method url-fetch) (uri (string-append "https://www.samba.org/ftp/ldb/ldb-" version ".tar.gz")) (sha256 (base32 - "08ab66qzigfsfxqdvp6lx1knwsl3sqsww309xbq17l7hfcjgbsa5")))) + "1rmjv12pf57vga8s5z9p9d90rlfckc1lqjbcp89r83cq5fkwfhw8")))) (build-system gnu-build-system) (arguments '(#:phases diff --git a/gnu/packages/scheme.scm b/gnu/packages/scheme.scm index eac550e4ab..1e00e6bb9d 100644 --- a/gnu/packages/scheme.scm +++ b/gnu/packages/scheme.scm @@ -400,7 +400,7 @@ (define-public scheme48 (define-public racket (package (name "racket") - (version "6.2.1") + (version "6.5") (source (origin (method url-fetch) (uri (list (string-append "http://mirror.racket-lang.org/installers/" @@ -410,7 +410,7 @@ (define-public racket version "/racket/racket-" version "-src-unix.tgz"))) (sha256 (base32 - "0555j63k7fs10iv0icmivlxpzgp6s7gwcbfddmbwxlf2rk80qhq0")))) + "0gvh7i5k87mg1gpqk8gaq50ja9ksbhnvdqn7qqh0n17byidd6999")))) (build-system gnu-build-system) (arguments '(#:phases diff --git a/gnu/packages/screen.scm b/gnu/packages/screen.scm index a4eefd85a6..e3f97f4b68 100644 --- a/gnu/packages/screen.scm +++ b/gnu/packages/screen.scm @@ -3,6 +3,7 @@ ;;; Copyright © 2014 Mark H Weaver ;;; Copyright © 2015 Eric Bavier ;;; Copyright © 2016 Efraim Flashner +;;; Copyright © 2016 Alex Griffin ;;; ;;; This file is part of GNU Guix. ;;; @@ -49,11 +50,9 @@ (define-public screen ("perl" ,perl))) (arguments `(#:configure-flags - ;; By default, man and info pages are put in PREFIX/{man,info}, - ;; but we want them in PREFIX/share/{man,info}. - (let ((out (assoc-ref %outputs "out"))) - (list (string-append "--mandir=" out "/share/man") - (string-append "--infodir=" out "/share/info"))))) + ;; By default, screen supports 16 colors, but we want 256 when + ;; ~/.screenrc contains 'term xterm-256color'. + '("--enable-colors256"))) (home-page "http://www.gnu.org/software/screen/") (synopsis "Full-screen window manager providing multiple terminals") (description @@ -144,3 +143,30 @@ (define-public byobu configuration utilities, and system status notifications for the GNU Screen window manager as well as the Tmux terminal multiplexer.") (license gpl3+))) + +(define-public reptyr + (package + (name "reptyr") + (version "0.6.2") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/nelhage/reptyr/archive" + "/reptyr-" version ".tar.gz")) + (sha256 + (base32 + "07pfl0rkgm8m3f3jy8r9l2yvnhf8lgllpsk3mh57mhzdxq8fagf7")))) + (build-system gnu-build-system) + (arguments + '(#:tests? #f ; no tests + #:make-flags (list "CC=gcc" + (string-append "PREFIX=" %output)) + #:phases (modify-phases %standard-phases (delete 'configure)))) + (home-page "https://github.com/nelhage/reptyr") + (synopsis "Tool for reparenting a running program to a new terminal") + (description + "reptyr is a utility for taking an existing running program and attaching +it to a new terminal. Started a long-running process over @code{ssh}, but have +to leave and don't want to interrupt it? Just start a @code{screen}, use +reptyr to grab it, and then kill the @code{ssh} session and head on home.") + (license expat))) diff --git a/gnu/packages/smalltalk.scm b/gnu/packages/smalltalk.scm index c9d733d505..77e033f847 100644 --- a/gnu/packages/smalltalk.scm +++ b/gnu/packages/smalltalk.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2013 Nikita Karetnikov +;;; Copyright © 2016 Efraim Flashner ;;; ;;; This file is part of GNU Guix. ;;; @@ -21,6 +22,10 @@ (define-module (gnu packages smalltalk) #:use-module (guix packages) #:use-module (guix download) #:use-module (guix build-system gnu) + #:use-module (gnu packages autotools) + #:use-module (gnu packages libffi) + #:use-module (gnu packages libsigsegv) + #:use-module (gnu packages pkg-config) #:use-module (gnu packages zip)) (define-public smalltalk @@ -36,7 +41,13 @@ (define-public smalltalk (base32 "1k2ssrapfzhngc7bg1zrnd9n2vyxp9c9m70byvsma6wapbvib6l1")))) (build-system gnu-build-system) - (inputs `(("zip" ,zip))) + (native-inputs + `(("libffi" ,libffi) + ("libltdl" ,libltdl) + ("libsigsegv" ,libsigsegv) + ("pkg-config" ,pkg-config))) + (inputs + `(("zip" ,zip))) (arguments `(#:phases (alist-cons-before 'configure 'fix-libc @@ -46,7 +57,7 @@ (define-public smalltalk (("@LIBC_SO_NAME@") "libc.so") (("@LIBC_SO_DIR@") (string-append libc "/lib"))))) %standard-phases))) - (home-page "https://www.gnu.org/software/smalltalk/") + (home-page "http://smalltalk.gnu.org/") (synopsis "Smalltalk environment") (description "GNU Smalltalk is a free implementation of the Smalltalk language. It diff --git a/gnu/packages/ssh.scm b/gnu/packages/ssh.scm index b8f107b111..71310ecf94 100644 --- a/gnu/packages/ssh.scm +++ b/gnu/packages/ssh.scm @@ -1,4 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2012, 2013, 2014, 2015, 2016 Ludovic Courtès ;;; Copyright © 2013, 2014 Andreas Enge ;;; Copyright © 2014, 2015, 2016 Mark H Weaver ;;; Copyright © 2015, 2016 Efraim Flashner @@ -20,27 +21,34 @@ ;;; along with GNU Guix. If not, see . (define-module (gnu packages ssh) - #:use-module ((guix licenses) #:prefix license:) - #:use-module (gnu packages compression) - #:use-module (gnu packages gnupg) - #:use-module (gnu packages groff) - #:use-module (gnu packages elf) - #:use-module (gnu packages guile) - #:use-module (gnu packages pkg-config) - #:use-module (gnu packages autotools) - #:use-module (gnu packages texinfo) - #:use-module (gnu packages perl) - #:use-module (gnu packages ncurses) - #:autoload (gnu packages protobuf) (protobuf) - #:autoload (gnu packages boost) (boost) - #:use-module (gnu packages base) - #:use-module (gnu packages tls) #:use-module (gnu packages) - #:use-module (guix packages) + #:use-module (gnu packages autotools) + #:use-module (gnu packages base) + #:autoload (gnu packages boost) (boost) + #:use-module (gnu packages compression) + #:use-module (gnu packages elf) + #:use-module (gnu packages gnupg) + #:use-module (gnu packages gperf) + #:use-module (gnu packages groff) + #:use-module (gnu packages guile) + #:use-module (gnu packages linux) + #:use-module (gnu packages m4) + #:use-module (gnu packages multiprecision) + #:use-module (gnu packages ncurses) + #:use-module (gnu packages nettle) + #:use-module (gnu packages perl) + #:use-module (gnu packages pkg-config) + #:autoload (gnu packages protobuf) (protobuf) + #:use-module (gnu packages readline) + #:use-module (gnu packages texinfo) + #:use-module (gnu packages tls) + #:use-module (gnu packages xorg) + #:use-module (guix build-system cmake) + #:use-module (guix build-system gnu) #:use-module (guix download) #:use-module (guix git-download) - #:use-module (guix build-system gnu) - #:use-module (guix build-system cmake)) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (guix packages)) (define-public libssh (package @@ -337,7 +345,7 @@ (define-public mosh (define-public dropbear (package (name "dropbear") - (version "2016.72") + (version "2016.73") (source (origin (method url-fetch) (uri (string-append @@ -345,7 +353,7 @@ (define-public dropbear name "-" version ".tar.bz2")) (sha256 (base32 - "10fnlaf6rm537v3rml1gnd58d42plv2q5cp7svbrysap69npc8wk")))) + "1mzg18jss1bsmcnn88zv7kv5yj01hzimndnd5636hfq9kgva8qaw")))) (build-system gnu-build-system) (arguments `(#:tests? #f)) ; There is no "make check" or anything similar (inputs `(("zlib" ,zlib))) @@ -355,3 +363,129 @@ (define-public dropbear particularly useful for embedded systems, such as wireless routers.") (home-page "https://matt.ucc.asn.au/dropbear/dropbear.html") (license (license:x11-style "" "See file LICENSE.")))) + +(define-public liboop + (package + (name "liboop") + (version "1.0") + (source + (origin + (method url-fetch) + (uri (string-append "http://download.ofb.net/liboop/liboop-" + version ".tar.gz")) + (sha256 + (base32 + "0z6rlalhvfca64jpvksppc9bdhs7jwhiw4y35g5ibvh91xp3rn1l")) + (patches (search-patches "liboop-mips64-deplibs-fix.patch")))) + (build-system gnu-build-system) + (home-page "http://www.lysator.liu.se/liboop/") + (synopsis "Event loop library") + (description "Liboop is a low-level event loop management library for +POSIX-based operating systems. It supports the development of modular, +multiplexed applications which may respond to events from several sources. It +replaces the \"select() loop\" and allows the registration of event handlers +for file and network I/O, timers and signals. Since processes use these +mechanisms for almost all external communication, liboop can be used as the +basis for almost any application.") + (license license:lgpl2.1+))) + +(define-public lsh + (package + (name "lsh") + (version "2.1") + (source (origin + (method url-fetch) + (uri (string-append "mirror://gnu/lsh/lsh-" + version ".tar.gz")) + (sha256 + (base32 + "1qqjy9zfzgny0rkb27c8c7dfsylvb6n0ld8h3an2r83pmaqr9gwb")) + (modules '((guix build utils))) + (snippet + '(begin + (substitute* "src/testsuite/functions.sh" + (("localhost") + ;; Avoid host name lookups since they don't work in + ;; chroot builds. + "127.0.0.1") + (("set -e") + ;; Make tests more verbose. + "set -e\nset -x")) + + (substitute* (find-files "src/testsuite" "-test$") + (("localhost") "127.0.0.1")) + + (substitute* "src/testsuite/login-auth-test" + (("/bin/cat") "cat")))))) + (build-system gnu-build-system) + (native-inputs + `(("m4" ,m4) + ("guile" ,guile-2.0) + ("gperf" ,gperf) + ("psmisc" ,psmisc))) ; for `killall' + (inputs + `(("nettle" ,nettle-2) + ("linux-pam" ,linux-pam) + + ;; 'rl.c' uses the 'CPPFunction' type, which is no longer in + ;; Readline 6.3. + ("readline" ,readline-6.2) + + ("liboop" ,liboop) + ("zlib" ,zlib) + ("gmp" ,gmp) + + ;; The server (lshd) invokes xauth when X11 forwarding is requested. + ;; This adds 24 MiB (or 27%) to the closure of lsh. + ("xauth" ,xauth))) + (arguments + '(;; Skip the `configure' test that checks whether /dev/ptmx & + ;; co. work as expected, because it relies on impurities (for + ;; instance, /dev/pts may be unavailable in chroots.) + #:configure-flags '("lsh_cv_sys_unix98_ptys=yes") + + ;; FIXME: Tests won't run in a chroot, presumably because + ;; /etc/profile is missing, and thus clients get an empty $PATH + ;; and nothing works. + #:tests? #f + + #:phases + (modify-phases %standard-phases + (add-before 'configure 'pre-configure + (lambda* (#:key inputs #:allow-other-keys) + (let* ((nettle (assoc-ref inputs "nettle")) + (sexp-conv (string-append nettle "/bin/sexp-conv"))) + ;; Make sure 'lsh' and 'lshd' pick 'sexp-conv' in the right place + ;; by default. + (substitute* "src/environ.h.in" + (("^#define PATH_SEXP_CONV.*") + (string-append "#define PATH_SEXP_CONV \"" + sexp-conv "\"\n"))) + + ;; Same for the 'lsh-authorize' script. + (substitute* "src/lsh-authorize" + (("=sexp-conv") + (string-append "=" sexp-conv))) + + ;; Tell lshd where 'xauth' lives. Another option would be to + ;; hardcode "/run/current-system/profile/bin/xauth", thereby + ;; reducing the closure size, but that wouldn't work on foreign + ;; distros. + (with-fluids ((%default-port-encoding "ISO-8859-1")) + (substitute* "src/server_x11.c" + (("define XAUTH_PROGRAM.*") + (string-append "define XAUTH_PROGRAM \"" + (assoc-ref inputs "xauth") + "/bin/xauth\"\n"))))) + + ;; Tests rely on $USER being set. + (setenv "USER" "guix")))))) + (home-page "http://www.lysator.liu.se/~nisse/lsh/") + (synopsis "GNU implementation of the Secure Shell (ssh) protocols") + (description + "GNU lsh is a free implementation of the SSH version 2 protocol. It is +used to create a secure line of communication between two computers, +providing shell access to the server system from the client. It provides +both the server daemon and the client application, as well as tools for +manipulating key files.") + (license license:gpl2+))) diff --git a/gnu/packages/stalonetray.scm b/gnu/packages/stalonetray.scm index e1604327ab..c803fb06f6 100644 --- a/gnu/packages/stalonetray.scm +++ b/gnu/packages/stalonetray.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014 Raimon Grau +;;; Copyright © 2016 Efraim Flashner ;;; ;;; This file is part of GNU Guix. ;;; @@ -26,16 +27,16 @@ (define-module (gnu packages stalonetray) (define-public stalonetray (package (name "stalonetray") - (version "0.8.1") + (version "0.8.3") (source (origin (method url-fetch) (uri - (string-append "mirror://sourceforge/stalonetray/stalonetray-" + (string-append "mirror://sourceforge/stalonetray/stalonetray/stalonetray-" version "/stalonetray-" version ".tar.bz2")) (sha256 (base32 - "1wp8pnlv34w7xizj1vivnc3fkwqq4qgb9dbrsg15598iw85gi8ll")))) + "0k7xnpdb6dvx25d67v0crlr32cdnzykdsi9j889njiididc8lm1n")))) (inputs `(("libx11" ,libx11))) (build-system gnu-build-system) (home-page "http://stalonetray.sourceforge.net") diff --git a/gnu/packages/statistics.scm b/gnu/packages/statistics.scm index c84845dd29..45e50b651c 100644 --- a/gnu/packages/statistics.scm +++ b/gnu/packages/statistics.scm @@ -165,7 +165,9 @@ (define-public r ("which" ,which) ; for tests/Examples/base-Ex.R ("xz" ,xz))) (inputs - `(("cairo" ,cairo) + `(;; We need not only cairo here, but pango to ensure that tests for the + ;; "cairo" bitmapType plotting backend succeed. + ("pango" ,pango) ("curl" ,curl) ("tzdata" ,tzdata) ("gfortran" ,gfortran) @@ -596,7 +598,8 @@ (define-public r-ggplot2 ("r-plyr" ,r-plyr) ("r-proto" ,r-proto) ("r-reshape2" ,r-reshape2) - ("r-scales" ,r-scales))) + ("r-scales" ,r-scales) + ("r-svglite" ,r-svglite))) (home-page "http://ggplot2.org") (synopsis "An implementation of the grammar of graphics") (description @@ -608,6 +611,55 @@ (define-public r-ggplot2 aesthetic attributes.") (license license:gpl2+))) +(define-public r-gdtools + (package + (name "r-gdtools") + (version "0.0.7") + (source + (origin + (method url-fetch) + (uri (cran-uri "gdtools" version)) + (sha256 + (base32 + "1bmnf9d677f2jy8jnb9ymjz1qzm4yrd0qp6k5qrrly06jfffyx7g")))) + (build-system r-build-system) + (native-inputs + `(("r-rcpp" ,r-rcpp) + ("pkg-config" ,pkg-config))) + (inputs + `(("cairo" ,cairo))) + (home-page "http://cran.r-project.org/web/packages/gdtools") + (synopsis "Utilities for graphical rendering") + (description + "The @code{gdtools} package provides functionalities to get font metrics +and to generate base64 encoded string from raster matrix.") + (license license:gpl3))) + +(define-public r-svglite + (package + (name "r-svglite") + (version "1.1.0") + (source + (origin + (method url-fetch) + (uri (cran-uri "svglite" version)) + (sha256 + (base32 + "11ryicjglfi6jvkk4jgg5kra42qbs5z2zid7jjhlslpjcljfwc70")))) + (build-system r-build-system) + (native-inputs `(("r-rcpp" ,r-rcpp))) + (propagated-inputs + `(("r-bh" ,r-bh) + ("r-gdtools" ,r-gdtools))) + (home-page "https://github.com/hadley/svglite") + (synopsis "SVG graphics device") + (description + "@code{svglite} is a graphics device that produces clean +@dfn{SVG} (Scalable Vector Graphics) output, suitable for use on the web, or +hand editing. Compared to the built-in @code{svg()}, @code{svglite} is +considerably faster, produces smaller files, and leaves text as is.") + (license license:gpl2+))) + (define-public r-assertthat (package (name "r-assertthat") @@ -1353,6 +1405,25 @@ (define-public r-coda chain.") (license license:gpl2+))) +(define-public r-ade4 + (package + (name "r-ade4") + (version "1.7-4") + (source + (origin + (method url-fetch) + (uri (cran-uri "ade4" version)) + (sha256 + (base32 + "17sbicash7z4b63dlrbaf8xx2pbwh62vykzvhdjs43h8jkl881y7")))) + (build-system r-build-system) + (home-page "http://pbil.univ-lyon1.fr/ADE-4") + (synopsis "Multivariate data analysis and graphical display") + (description + "The ade4 package contains data analysis functions to analyze ecological +and environmental data in the framework of Euclidean exploratory methods.") + (license license:gpl2+))) + (define-public r-xml2 (package (name "r-xml2") @@ -1377,6 +1448,32 @@ (define-public r-xml2 files in R. It is built on top of the libxml2 C library.") (license license:gpl2+))) +(define-public r-multitaper + (package + (name "r-multitaper") + (version "1.0-11") + (source + (origin + (method url-fetch) + (uri (cran-uri "multitaper" version)) + (sha256 + (base32 + "1s0lmjzpyd7zmc2p1ywv5fm7qkq357p70b76gw9wjlms6d81j1n4")))) + (build-system r-build-system) + (native-inputs + `(("gfortran" ,gfortran))) + (home-page "http://github.com/wesleyburr/multitaper/") + (synopsis "Multitaper spectral analysis tools") + (description + "This package implements multitaper spectral estimation +techniques using prolate spheroidal sequences (Slepians) and sine +tapers for time series analysis. It includes an adaptive weighted +multitaper spectral estimate, a coherence estimate, Thomson's Harmonic +F-test, and complex demodulation. The Slepians sequences are +generated efficiently using a tridiagonal matrix solution, and +jackknifed confidence intervals are available for most estimates.") + (license license:gpl2+))) + (define-public r-rversions (package (name "r-rversions") @@ -2170,6 +2267,29 @@ (define-public r-doparallel using the parallel package.") (license license:gpl2+))) +(define-public r-domc + (package + (name "r-domc") + (version "1.3.4") + (source + (origin + (method url-fetch) + (uri (cran-uri "doMC" version)) + (sha256 + (base32 + "0y47jl6g4f83r14pj8bafdzq1phj7bxy5dwyz3k43d2rr8phk8bn")))) + (properties `((upstream-name . "doMC"))) + (build-system r-build-system) + (propagated-inputs + `(("r-foreach" ,r-foreach) + ("r-iterators" ,r-iterators))) + (home-page "http://cran.r-project.org/web/packages/doMC") + (synopsis "Foreach parallel adaptor for the 'parallel' package") + (description + "This package provides a parallel backend for the @code{%dopar%} function +using the multicore functionality of the parallel package.") + (license license:gpl2+))) + (define-public r-dt (package (name "r-dt") @@ -2242,6 +2362,32 @@ (define-public r-irlba analysis of large sparse or dense matrices.") (license (list license:gpl2+ license:gpl3+)))) +(define-public r-glmnet + (package + (name "r-glmnet") + (version "2.0-5") + (source + (origin + (method url-fetch) + (uri (cran-uri "glmnet" version)) + (sha256 + (base32 + "1cbpzmbv837fvq88rgn6mgzgr9f1wqp9fg8gh2kkmngvr1957a9c")))) + (build-system r-build-system) + (inputs + `(("gfortran" ,gfortran))) + (propagated-inputs + `(("r-foreach" ,r-foreach))) + (home-page "http://www.jstatsoft.org/v33/i01") + (synopsis "Lasso and elastic-net regularized generalized linear models") + (description + "The glmnet package provides efficient procedures for fitting the entire +lasso or elastic-net regularization path for linear and Poisson regression, as +well as logistic, multinomial, Cox, multiple-response Gaussian and grouped +multinomial models. The algorithm uses cyclical coordinate descent in a +path-wise fashion.") + (license license:gpl2+))) + (define-public r-pkgmaker (package (name "r-pkgmaker") diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm index ec4d3df1a6..9abaabad89 100644 --- a/gnu/packages/tls.scm +++ b/gnu/packages/tls.scm @@ -6,7 +6,7 @@ ;;; Copyright © 2015 David Thompson ;;; Copyright © 2015 Leo Famulari ;;; Copyright © 2016 Efraim Flashner -;;; Copyright © 2016 Nils Gillmann +;;; Copyright © 2016 ng0 ;;; ;;; This file is part of GNU Guix. ;;; diff --git a/gnu/packages/tmux.scm b/gnu/packages/tmux.scm index d89fc16844..e4f3b45d68 100644 --- a/gnu/packages/tmux.scm +++ b/gnu/packages/tmux.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2013 Cyril Roelandt ;;; Copyright © 2016 Efraim Flashner +;;; Copyright © 2016 Matthew Jordan ;;; ;;; This file is part of GNU Guix. ;;; @@ -21,11 +22,13 @@ (define-module (gnu packages tmux) #:use-module (guix licenses) #:use-module (guix packages) #:use-module (guix download) + #:use-module (guix git-download) #:use-module (guix build-system gnu) #:use-module (gnu packages) #:use-module (gnu packages libevent) #:use-module (gnu packages ncurses)) + (define-public tmux (package (name "tmux") @@ -50,3 +53,38 @@ (define-public tmux controlled from a single screen. tmux may be detached from a screen and continue running in the background, then later reattached.") (license isc))) + +(define-public tmux-themepack + (let ((commit "03a372866f7677f7fe63bcee140b48b9fd372c48") + (revision "1")) + (package + (name "tmux-themepack") + (version + (string-append "0.0.0-" revision "." (string-take commit 7))) ;; No version tags + (source (origin + (method git-fetch) + (uri (git-reference + (url + (string-append "https://github.com/jimeh/" name ".git")) + (commit commit))) + (sha256 + (base32 + "1d3k87mq5lca042jbap5kxskjy3kg79wjhhpnm6jacbn3anc67zl")) + (file-name (string-append name "-" version "-checkout")))) + (build-system gnu-build-system) + (arguments + `(#:tests? #f ; No test suite. + #:phases (modify-phases %standard-phases + (delete 'configure) + (delete 'build) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (string-append + (assoc-ref outputs "out") + "/share/" ,name "-" ,version))) + (copy-recursively "." out))))))) + (home-page "https://github.com/jimeh/tmux-themepack") + (synopsis "Collection of themes for Tmux") + (description "A collection of various themes for Tmux.") + (license + (non-copyleft "http://www.wtfpl.net/txt/copying/"))))) diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm index e6e7e0011b..ec7f9e8a3c 100644 --- a/gnu/packages/version-control.scm +++ b/gnu/packages/version-control.scm @@ -112,14 +112,14 @@ (define-public git ;; Keep in sync with 'git-manpages'! (package (name "git") - (version "2.9.0") + (version "2.9.1") (source (origin (method url-fetch) (uri (string-append "mirror://kernel.org/software/scm/git/git-" version ".tar.xz")) (sha256 (base32 - "02dl8yvvl7m4zy39s0xmqr958ah7krvkv94lmx4vz3wl95wsj7zl")))) + "18l2jb4bkp9ljz6p2aviwzxqyzza9z3v6h1pnkz7kjf1fay61zp8")))) (build-system gnu-build-system) (native-inputs `(("native-perl" ,perl) @@ -294,7 +294,7 @@ (define-public git-manpages version ".tar.xz")) (sha256 (base32 - "0ic4zs4axkkwa44nqv5iihj3q2nm42kx0j8scnfp1z93m6pw31fw")))) + "1v9icsf85vvrrg7fakm91d11q23rvnh6dq4b4c4ya8v95z00mg8p")))) (build-system trivial-build-system) (arguments '(#:modules ((guix build utils)) @@ -369,7 +369,7 @@ (define-public libgit2 (define-public cgit (package (name "cgit") - (version "0.12") + (version "1.0") (source (origin (method url-fetch) (uri (string-append @@ -377,7 +377,7 @@ (define-public cgit version ".tar.xz")) (sha256 (base32 - "1dx54hgfyabmg9nm5qp6d01f54nlbqbbdwhwl0llb9imjf237qif")))) + "0kbh835p7dl4h88qv55fyfh1za09cgnqh63rii325w9215hm95x8")))) (build-system gnu-build-system) (arguments '(#:tests? #f ; XXX: fail to build the in-source git. @@ -608,14 +608,14 @@ (define-public gitolite (define-public mercurial (package (name "mercurial") - (version "3.8.1") + (version "3.8.4") (source (origin (method url-fetch) (uri (string-append "https://www.mercurial-scm.org/" "release/mercurial-" version ".tar.gz")) (sha256 (base32 - "156m6269xdqq7mpw01c6b065k29xnb8b9lyzn1b0nlz5il2izkps")))) + "19ixvxgifx48lxp9vdmsf88nnjsxl035ahmp3iw1vyilkpqkwbjb")))) (build-system python-build-system) (arguments `(;; Restrict to Python 2, as Python 3 would require diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm index 819c0d5f48..dfce444d9e 100644 --- a/gnu/packages/video.scm +++ b/gnu/packages/video.scm @@ -7,6 +7,7 @@ ;;; Copyright © 2015 Andy Patterson ;;; Copyright © 2015 Ricardo Wurmus ;;; Copyright © 2015 Alex Vong +;;; Copyright © 2016 Alex Griffin ;;; ;;; This file is part of GNU Guix. ;;; @@ -25,6 +26,8 @@ (define-module (gnu packages video) #:use-module (ice-9 match) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26) #:use-module ((guix licenses) #:prefix license:) #:use-module (guix utils) #:use-module (guix packages) @@ -32,6 +35,7 @@ (define-module (gnu packages video) #:use-module (guix git-download) #:use-module (guix build-system cmake) #:use-module (guix build-system gnu) + #:use-module (guix build-system glib-or-gtk) #:use-module (guix build-system python) #:use-module (guix build-system waf) #:use-module (gnu packages) @@ -373,14 +377,14 @@ (define-public libva (define-public ffmpeg (package (name "ffmpeg") - (version "3.0.2") + (version "3.1.1") (source (origin (method url-fetch) (uri (string-append "https://ffmpeg.org/releases/ffmpeg-" version ".tar.xz")) (sha256 (base32 - "08sjp4dxgcinmv9ly7nm24swmn2cnbbhvph44ihlplf4n33kr542")))) + "1nris3flwqd4v4b65yrrv9aqhsab7cb9lfp4wpxz6bi0m3r13g3i")))) (build-system gnu-build-system) (inputs `(("fontconfig" ,fontconfig) @@ -539,14 +543,14 @@ (define-public ffmpeg (define-public ffmpeg-2.8 (package (inherit ffmpeg) - (version "2.8.6") + (version "2.8.7") (source (origin (method url-fetch) (uri (string-append "https://ffmpeg.org/releases/ffmpeg-" version ".tar.xz")) (sha256 (base32 - "1yh7dvm7zwdlsspdaq524s5qaggma5md9h95qc4kvb5dmyyyvg15")))) + "0z0mcj2q3ysp9qdn1ks03g5sn2zxyr06vxs4al0m4b5b3in8mglp")))) (arguments (substitute-keyword-arguments (package-arguments ffmpeg) ((#:configure-flags flags) @@ -818,7 +822,7 @@ (define-public mpv (lambda* (#:key inputs #:allow-other-keys) (copy-file (assoc-ref inputs "waf") "waf") (setenv "CC" "gcc")))) - #:configure-flags (list "--enable-zsh-comp") + #:configure-flags (list "--enable-libmpv-shared" "--enable-zsh-comp") ;; No check function defined. #:tests? #f)) (home-page "https://mpv.io/") @@ -828,6 +832,34 @@ (define-public mpv projects while introducing many more.") (license license:gpl2+))) +(define-public gnome-mpv + (package + (name "gnome-mpv") + (version "0.9") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/gnome-mpv/gnome-mpv/releases" + "/download/v" version "/gnome-mpv-" version + ".tar.xz")) + (sha256 + (base32 + "06pgxl6f3kkgxv8nlmyl7gy3pg55sqf8vgr8m6426mlpm4p3qdn0")))) + (native-inputs + `(("intltool" ,intltool) + ("pkg-config" ,pkg-config))) + (inputs + `(("gtk+" ,gtk+) + ("libepoxy" ,libepoxy) + ("mpv" ,mpv))) + (build-system glib-or-gtk-build-system) + (home-page "https://github.com/gnome-mpv/gnome-mpv") + (synopsis "GTK+ frontend for the mpv media player") + (description "GNOME MPV is a simple GTK+ frontend for the mpv media player. +GNOME MPV interacts with mpv via the client API exported by libmpv, allowing +access to mpv's powerful playback capabilities.") + (license license:gpl3+))) + (define-public libvpx (package (name "libvpx") @@ -910,15 +942,15 @@ (define-public youtube-dl (define-public libbluray (package (name "libbluray") - (version "0.9.2") + (version "0.9.3") (source (origin (method url-fetch) - (uri (string-append "http://download.videolan.org/videolan/" + (uri (string-append "https://download.videolan.org/videolan/" name "/" version "/" name "-" version ".tar.bz2")) (sha256 (base32 - "1sp71j4agcsg17g6b85cqz78pn5vknl5pl39rvr6mkib5ps99jgg")))) + "1q1whviqv5sr9nr372h31zwid1rvbfbx3z4lzr8lnj25xha6cdm6")))) (build-system gnu-build-system) (arguments `(#:configure-flags '("--disable-bdjava"))) (native-inputs `(("pkg-config" ,pkg-config))) @@ -926,7 +958,7 @@ (define-public libbluray `(("fontconfig" ,fontconfig) ("freetype" ,freetype) ("libxml2" ,libxml2))) - (home-page "http://www.videolan.org/developers/libbluray.html") + (home-page "https://www.videolan.org/developers/libbluray.html") (synopsis "Blu-Ray Disc playback library") (description "libbluray is a library designed for Blu-Ray Disc playback for media @@ -1363,7 +1395,7 @@ (define-public v4l-utils (define-public obs (package (name "obs") - (version "0.14.2") + (version "0.15.1") (source (origin (method url-fetch) (uri (string-append "https://github.com/jp9000/obs-studio" @@ -1371,9 +1403,23 @@ (define-public obs (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "1cb8naa67kfnnngkzv1wpd4y241j29ggnk1w7jgnymp9j8dny1xl")))) + "18fycg7xlj2i89wdb9c5js0bnl964s1lpmnvmfyj11zi9k061wsg")))) (build-system cmake-build-system) - (arguments '(#:tests? #f)) ; no tests + (arguments + `(#:tests? #f ; no tests + ,@(if (any (cute string-prefix? <> (or (%current-target-system) + (%current-system))) + '("arm" "mips")) + '(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'remove-architecture-specific-instructions + ;; non-Intel platforms fail to build with the architecture + ;; specific compiler flags included by default. + (lambda _ + (substitute* "libobs/CMakeLists.txt" + (("if\\(NOT MSVC\\)") "if(MSVC)")) + #t)))) + '()))) (native-inputs `(("pkg-config" ,pkg-config))) (inputs diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm index 19870ef8f4..ea1a30ad26 100644 --- a/gnu/packages/web.scm +++ b/gnu/packages/web.scm @@ -76,14 +76,14 @@ (define-module (gnu packages web) (define-public httpd (package (name "httpd") - (version "2.4.16") + (version "2.4.23") (source (origin (method url-fetch) (uri (string-append "mirror://apache/httpd/httpd-" version ".tar.bz2")) (sha256 (base32 - "0hrpy6gjwma0kba7p7m61vwh82qcnkf08123lrwpg257m93hnrmc")))) + "0n2yx3gjlpr4kgqx845fj6amnmg25r2l6a7rzab5hxnpmar985hc")))) (build-system gnu-build-system) (native-inputs `(("pcre" ,pcre "bin"))) ;for 'pcre-config' (inputs `(("apr" ,apr) diff --git a/gnu/packages/wm.scm b/gnu/packages/wm.scm index f385d2b4fb..790c74bbfd 100644 --- a/gnu/packages/wm.scm +++ b/gnu/packages/wm.scm @@ -393,7 +393,6 @@ (define-public awesome "1m910lr7wkw2dgzmirfvz7dasfswhhccdf65l21iiciv24c3w1bb")) (modules '((guix build utils) (srfi srfi-19))) - (imported-modules '((guix build utils))) (snippet ;; Remove non-reproducible timestamp and use the date of the ;; source file instead. diff --git a/gnu/packages/xdisorg.scm b/gnu/packages/xdisorg.scm index bfcba473a8..44d82dac60 100644 --- a/gnu/packages/xdisorg.scm +++ b/gnu/packages/xdisorg.scm @@ -12,6 +12,7 @@ ;;; Copyright © 2016 Christopher Allan Webber ;;; Copyright © 2016 Ricardo Wurmus ;;; Copyright © 2016 Efraim Flashner +;;; Copyright © 2016 Leo Famulari ;;; ;;; This file is part of GNU Guix. ;;; @@ -63,14 +64,14 @@ (define-module (gnu packages xdisorg) (define-public arandr (package (name "arandr") - (version "0.1.8") + (version "0.1.9") (source (origin (method url-fetch) (uri (string-append "http://christian.amsuess.com/tools/" name "/files/" name "-" version ".tar.gz")) (sha256 (base32 - "0d574mbmhaqmh7kivaryj2hpghz6xkvic9ah43s1hf385y7c33kd")))) + "1i3f1agixxbfy4kxikb2b241p7c2lg73cl9wqfvlwz3q6zf5faxv")))) (build-system python-build-system) (arguments `(#:python ,python-2 ;incompatible with python 3 @@ -126,14 +127,14 @@ (define-public xclip (define-public libxkbcommon (package (name "libxkbcommon") - (version "0.5.0") + (version "0.6.1") (source (origin (method url-fetch) (uri (string-append "http://xkbcommon.org/download/" name "-" version ".tar.xz")) (sha256 (base32 - "176ii5dn2wh74q48sd8ac37ljlvgvp5f506glr96z6ibfhj7igch")))) + "0q47xa1szlxwgvwmhv4b7xwawnykz1hnc431d84nj8dlh2q8f22v")))) (build-system gnu-build-system) (inputs `(("libx11" ,libx11) @@ -296,7 +297,7 @@ (define-public libdrm (define-public mtdev (package (name "mtdev") - (version "1.1.3") + (version "1.1.5") (source (origin (method url-fetch) @@ -304,8 +305,8 @@ (define-public mtdev "http://bitmath.org/code/mtdev/mtdev-" version ".tar.bz2")) (sha256 - (base32 - "159ndzwfpw0xr8mw4lhl47w9c2krshlfrscs7k6n186vknv2hk3d")))) + (base32 + "0zxs7shzgbalkvlaiibi25bd902rbmkv9n1lww6q8j3ri9qdaxv6")))) (build-system gnu-build-system) (home-page "http://bitmath.org/code/mtdev/") (synopsis "Multitouch protocol translation library") @@ -638,7 +639,7 @@ (define-public xbindkeys (define-public sxhkd (package (name "sxhkd") - (version "0.5.5") + (version "0.5.6") (source (origin (file-name (string-append name "-" version ".tar.gz")) @@ -648,7 +649,7 @@ (define-public sxhkd version ".tar.gz")) (sha256 (base32 - "04s3y2bq9502gw72jj3y2zsh96yj3qg2av3zsa8ahd2farvrysg6")))) + "15grmzpxz5fqlbfg2slj7gb7r6nzkvjmflmbkqx7mlby9pm6wdkj")))) (build-system gnu-build-system) (inputs `(("asciidoc" ,asciidoc) @@ -670,14 +671,14 @@ (define-public sxhkd (define-public rxvt-unicode (package (name "rxvt-unicode") - (version "9.21") + (version "9.22") (source (origin (method url-fetch) (uri (string-append "http://dist.schmorp.de/rxvt-unicode/Attic/" name "-" version ".tar.bz2")) (sha256 (base32 - "0swmi308v5yxsddrdhvi4cch88k2bbs2nffpl5j5m2f55gbhw9vm")))) + "1pddjn5ynblwfrdmskylrsxb9vfnk3w4jdnq2l8xn2pspkljhip9")))) (build-system gnu-build-system) (arguments ;; This sets the destination when installing the necessary terminal @@ -848,7 +849,7 @@ (define-public redshift (define-public xscreensaver (package (name "xscreensaver") - (version "5.34") + (version "5.35") (source (origin (method url-fetch) @@ -857,7 +858,7 @@ (define-public xscreensaver version ".tar.gz")) (sha256 (base32 - "09sy5v8bn62hiq4ib3jyvp8lipqcvn3rdsj74q25qgklpv27xzvg")))) + "08kbb0ry7ih436ab4i5g6lnhaaz13zkcdmbdibrn4j5gm5qq8v0y")))) (build-system gnu-build-system) (arguments `(#:tests? #f ; no check target @@ -914,7 +915,7 @@ (define-public xscreensaver (define-public rofi (package (name "rofi") - (version "1.0.1") + (version "1.1.0") (source (origin (method url-fetch) (uri (string-append "https://github.com/DaveDavenport/rofi/" @@ -922,7 +923,7 @@ (define-public rofi version "/rofi-" version ".tar.xz")) (sha256 (base32 - "01jxml9vk4cw7pngpan7dipmb98s6ibh6f0023lw3hbgxy650637")))) + "1l8vl0mh7i0b1ycifqpg6392f5i4qxlv003m126skfk6fnlfq8hn")))) (build-system gnu-build-system) (inputs `(("libx11" ,libx11) diff --git a/gnu/packages/xfce.scm b/gnu/packages/xfce.scm index c201f03ab5..5639f1daa3 100644 --- a/gnu/packages/xfce.scm +++ b/gnu/packages/xfce.scm @@ -28,6 +28,7 @@ (define-module (gnu packages xfce) #:use-module (guix build-system gnu) #:use-module (guix build-system trivial) #:use-module (gnu packages) + #:use-module (gnu packages calendar) #:use-module (gnu packages pkg-config) #:use-module (gnu packages glib) #:use-module (gnu packages gtk) @@ -43,6 +44,7 @@ (define-module (gnu packages xfce) #:use-module (gnu packages linux) #:use-module (gnu packages photo) #:use-module (gnu packages pcre) + #:use-module (gnu packages popt) #:use-module (gnu packages pulseaudio)) (define-public gtk-xfce-engine @@ -815,3 +817,35 @@ (define-public xfce4-taskmanager "This is a task manager for the Xfce desktop. It displays the CPU and memory usage graphically, and it can display processes as a tree.") (license gpl2+))) + +(define-public orage + (package + (name "orage") + (version "4.12.1") + (source (origin + (method url-fetch) + (uri (string-append "http://archive.xfce.org/src/apps/" + name "/" (version-major+minor version) "/" + name "-" version ".tar.bz2")) + (sha256 + (base32 + "0qlhvnl2m33vfxqlbkic2nmfpwyd4mq230jzhs48cg78392amy9w")))) + (build-system gnu-build-system) + (native-inputs + `(("intltool" ,intltool) + ("pkg-config" ,pkg-config))) + (inputs + `(("gtk+" ,gtk+-2) + ("libical" ,libical) + ("libnotify" ,libnotify) + ("popt" ,popt) + ("xfce4-panel" ,xfce4-panel))) + (home-page "http://www.xfce.org/projects/") + (synopsis "Simple calendar application with reminders") + (description + "This is a simple calendar application for the Xfce desktop. Orage has +alarms and uses the iCalendar format, making it compatible with many other +calendar applications. It also includes a panel clock plugin and an +international clock application capable of simultaneously showing clocks from +several different time zones.") + (license gpl2+))) diff --git a/gnu/packages/xml.scm b/gnu/packages/xml.scm index ef7f257139..fb0d07d8cf 100644 --- a/gnu/packages/xml.scm +++ b/gnu/packages/xml.scm @@ -532,16 +532,15 @@ (define-public perl-xml-compile-wsdl11 (define-public pugixml (package (name "pugixml") - (version "1.6") + (version "1.7") (source (origin (method url-fetch) - (uri (string-append "https://github.com/zeux/pugixml/archive/v" - version ".tar.gz")) - (file-name (string-append name "-" version ".tar.gz")) + (uri (string-append "https://github.com/zeux/pugixml/releases/download/v" + version "/pugixml-" version ".tar.gz")) (sha256 (base32 - "0czbcv9aqf2rw3s9cljz2wb1f4zbhd07wnj7ykklklccl0ipfnwi")))) + "1jpml475kbhs1aqwa48g2cbfxlrb9qp115m2j9yryxhxyr30vqgv")))) (build-system cmake-build-system) (arguments `(#:tests? #f diff --git a/gnu/services.scm b/gnu/services.scm index 50e76df818..5479bfae19 100644 --- a/gnu/services.scm +++ b/gnu/services.scm @@ -238,42 +238,33 @@ (define %boot-service (define (cleanup-gexp _) "Return as a monadic value a gexp to clean up /tmp and similar places upon boot." - (define %modules - '((guix build utils))) + (with-monad %store-monad + (with-imported-modules '((guix build utils)) + (return #~(begin + (use-modules (guix build utils)) - (mlet %store-monad ((modules (imported-modules %modules)) - (compiled (compiled-modules %modules))) - (return #~(begin - (eval-when (expand load eval) - ;; Make sure 'use-modules' below succeeds. - (set! %load-path (cons #$modules %load-path)) - (set! %load-compiled-path - (cons #$compiled %load-compiled-path))) - - (use-modules (guix build utils)) - - ;; Clean out /tmp and /var/run. - ;; - ;; XXX This needs to happen before service activations, so it - ;; has to be here, but this also implicitly assumes that /tmp - ;; and /var/run are on the root partition. - (letrec-syntax ((fail-safe (syntax-rules () - ((_ exp rest ...) - (begin - (catch 'system-error - (lambda () exp) - (const #f)) - (fail-safe rest ...))) - ((_) - #t)))) - ;; Ignore I/O errors so the system can boot. - (fail-safe - (delete-file-recursively "/tmp") - (delete-file-recursively "/var/run") - (mkdir "/tmp") - (chmod "/tmp" #o1777) - (mkdir "/var/run") - (chmod "/var/run" #o755))))))) + ;; Clean out /tmp and /var/run. + ;; + ;; XXX This needs to happen before service activations, so it + ;; has to be here, but this also implicitly assumes that /tmp + ;; and /var/run are on the root partition. + (letrec-syntax ((fail-safe (syntax-rules () + ((_ exp rest ...) + (begin + (catch 'system-error + (lambda () exp) + (const #f)) + (fail-safe rest ...))) + ((_) + #t)))) + ;; Ignore I/O errors so the system can boot. + (fail-safe + (delete-file-recursively "/tmp") + (delete-file-recursively "/var/run") + (mkdir "/tmp") + (chmod "/tmp" #o1777) + (mkdir "/var/run") + (chmod "/var/run" #o755)))))))) (define cleanup-service-type ;; Service that cleans things up in /tmp and similar. @@ -309,10 +300,10 @@ (define (directory-union name things) one) (_ (computed-file name - #~(begin - (use-modules (guix build union)) - (union-build #$output '#$things)) - #:modules '((guix build union)))))) + (with-imported-modules '((guix build union)) + #~(begin + (use-modules (guix build union)) + (union-build #$output '#$things))))))) (define* (activation-service->script service) "Return as a monadic value the activation script for SERVICE, a service of @@ -337,29 +328,22 @@ (define (service-activations) (cut gexp->file "activate-service" <>) gexps)) - (mlet* %store-monad ((actions (service-activations)) - (modules (imported-modules %modules)) - (compiled (compiled-modules %modules))) + (mlet* %store-monad ((actions (service-activations))) (gexp->file "activate" - #~(begin - (eval-when (expand load eval) - ;; Make sure 'use-modules' below succeeds. - (set! %load-path (cons #$modules %load-path)) - (set! %load-compiled-path - (cons #$compiled %load-compiled-path))) + (with-imported-modules %modules + #~(begin + (use-modules (gnu build activation)) - (use-modules (gnu build activation)) + ;; Make sure /bin/sh is valid and current. + (activate-/bin/sh + (string-append #$(canonical-package bash) "/bin/sh")) - ;; Make sure /bin/sh is valid and current. - (activate-/bin/sh - (string-append #$(canonical-package bash) "/bin/sh")) + ;; Run the services' activation snippets. + ;; TODO: Use 'load-compiled'. + (for-each primitive-load '#$actions) - ;; Run the services' activation snippets. - ;; TODO: Use 'load-compiled'. - (for-each primitive-load '#$actions) - - ;; Set up /run/current-system. - (activate-current-system))))) + ;; Set up /run/current-system. + (activate-current-system)))))) (define (gexps->activation-gexp gexps) "Return a gexp that runs the activation script containing GEXPS." diff --git a/gnu/services/avahi.scm b/gnu/services/avahi.scm index 8005b066ed..562005c22c 100644 --- a/gnu/services/avahi.scm +++ b/gnu/services/avahi.scm @@ -42,6 +42,8 @@ (define-record-type* avahi-configuration? (avahi avahi-configuration-avahi ; (default avahi)) + (debug? avahi-configuration-debug? ;Boolean + (default #f)) (host-name avahi-configuration-host-name) ;string (publish? avahi-configuration-publish?) ;Boolean (ipv4? avahi-configuration-ipv4?) ;Boolean @@ -96,6 +98,7 @@ (define %avahi-activation (define (avahi-shepherd-service config) "Return a list of for CONFIG." (let ((config (configuration-file config)) + (debug? (avahi-configuration-debug? config)) (avahi (avahi-configuration-avahi config))) (list (shepherd-service (documentation "Run the Avahi mDNS/DNS-SD responder.") @@ -104,7 +107,10 @@ (define (avahi-shepherd-service config) (start #~(make-forkexec-constructor (list (string-append #$avahi "/sbin/avahi-daemon") - "--syslog" "-f" #$config))) + "--daemonize" + #$@(if debug? #~("--debug") #~()) + "-f" #$config) + #:pid-file "/var/run/avahi-daemon/pid")) (stop #~(make-kill-destructor)))))) (define avahi-service-type @@ -127,7 +133,7 @@ (define avahi-service-type (service-extension profile-service-type avahi-package)))))) -(define* (avahi-service #:key (avahi avahi) +(define* (avahi-service #:key (avahi avahi) debug? host-name (publish? #t) (ipv4? #t) (ipv6? #t) @@ -155,7 +161,7 @@ (define* (avahi-service #:key (avahi avahi) sockets." (service avahi-service-type (avahi-configuration - (avahi avahi) (host-name host-name) + (avahi avahi) (debug? debug?) (host-name host-name) (publish? publish?) (ipv4? ipv4?) (ipv6? ipv6?) (wide-area? wide-area?) (domains-to-browse domains-to-browse)))) diff --git a/gnu/services/base.scm b/gnu/services/base.scm index 2780d124c7..805ba7d12c 100644 --- a/gnu/services/base.scm +++ b/gnu/services/base.scm @@ -4,6 +4,8 @@ ;;; Copyright © 2015 Mark H Weaver ;;; Copyright © 2015 Sou Bunnbu ;;; Copyright © 2016 Leo Famulari +;;; Copyright © 2016 David Craven +;;; Copyright © 2016 Ricardo Wurmus ;;; ;;; This file is part of GNU Guix. ;;; @@ -31,11 +33,11 @@ (define-module (gnu services base) #:use-module (gnu system mapped-devices) #:use-module (gnu packages admin) #:use-module ((gnu packages linux) - #:select (eudev kbd e2fsprogs lvm2 fuse alsa-utils crda gpm)) + #:select (alsa-utils crda eudev e2fsprogs fuse gpm kbd lvm2 rng-tools)) #:use-module ((gnu packages base) #:select (canonical-package glibc)) #:use-module (gnu packages package-management) - #:use-module (gnu packages lsh) + #:use-module (gnu packages ssh) #:use-module (gnu packages lsof) #:use-module ((gnu build file-systems) #:select (mount-flags->bit-mask)) @@ -81,6 +83,7 @@ (define-module (gnu services base) nscd-service-type nscd-service syslog-service + syslog-service-type %default-syslog.conf guix-configuration @@ -94,7 +97,12 @@ (define-module (gnu services base) gpm-service-type gpm-service + urandom-seed-service-type urandom-seed-service + rngd-service-type + rngd-service + pam-limits-service-type + pam-limits-service %base-services)) @@ -224,59 +232,58 @@ (define (file-system-shepherd-service file-system) (create? (file-system-create-mount-point? file-system)) (dependencies (file-system-dependencies file-system))) (if (file-system-mount? file-system) - (list - (shepherd-service - (provision (list (file-system->shepherd-service-name file-system))) - (requirement `(root-file-system - ,@(map dependency->shepherd-service-name dependencies))) - (documentation "Check, mount, and unmount the given file system.") - (start #~(lambda args - ;; FIXME: Use or factorize with 'mount-file-system'. - (let ((device (canonicalize-device-spec #$device '#$title)) - (flags #$(mount-flags->bit-mask - (file-system-flags file-system)))) - #$(if create? - #~(mkdir-p #$target) - #~#t) - #$(if check? - #~(begin - ;; Make sure fsck.ext2 & co. can be found. - (setenv "PATH" - (string-append - #$e2fsprogs "/sbin:" - "/run/current-system/profile/sbin:" - (getenv "PATH"))) - (check-file-system device #$type)) - #~#t) + (with-imported-modules '((gnu build file-systems) + (guix build bournish)) + (list + (shepherd-service + (provision (list (file-system->shepherd-service-name file-system))) + (requirement `(root-file-system + ,@(map dependency->shepherd-service-name dependencies))) + (documentation "Check, mount, and unmount the given file system.") + (start #~(lambda args + ;; FIXME: Use or factorize with 'mount-file-system'. + (let ((device (canonicalize-device-spec #$device '#$title)) + (flags #$(mount-flags->bit-mask + (file-system-flags file-system)))) + #$(if create? + #~(mkdir-p #$target) + #~#t) + #$(if check? + #~(begin + ;; Make sure fsck.ext2 & co. can be found. + (setenv "PATH" + (string-append + #$e2fsprogs "/sbin:" + "/run/current-system/profile/sbin:" + (getenv "PATH"))) + (check-file-system device #$type)) + #~#t) - (mount device #$target #$type flags - #$(file-system-options file-system)) + (mount device #$target #$type flags + #$(file-system-options file-system)) - ;; For read-only bind mounts, an extra remount is - ;; needed, as per , - ;; which still applies to Linux 4.0. - (when (and (= MS_BIND (logand flags MS_BIND)) - (= MS_RDONLY (logand flags MS_RDONLY))) - (mount device #$target #$type - (logior MS_BIND MS_REMOUNT MS_RDONLY)))) - #t)) - (stop #~(lambda args - ;; Normally there are no processes left at this point, so - ;; TARGET can be safely unmounted. + ;; For read-only bind mounts, an extra remount is + ;; needed, as per , + ;; which still applies to Linux 4.0. + (when (and (= MS_BIND (logand flags MS_BIND)) + (= MS_RDONLY (logand flags MS_RDONLY))) + (mount device #$target #$type + (logior MS_BIND MS_REMOUNT MS_RDONLY)))) + #t)) + (stop #~(lambda args + ;; Normally there are no processes left at this point, so + ;; TARGET can be safely unmounted. - ;; Make sure PID 1 doesn't keep TARGET busy. - (chdir "/") + ;; Make sure PID 1 doesn't keep TARGET busy. + (chdir "/") - (umount #$target) - #f)) + (umount #$target) + #f)) - ;; We need an additional module. - (modules `(((gnu build file-systems) - #:select (check-file-system canonicalize-device-spec)) - ,@%default-modules)) - (imported-modules `((gnu build file-systems) - (guix build bournish) - ,@%default-imported-modules)))) + ;; We need an additional module. + (modules `(((gnu build file-systems) + #:select (check-file-system canonicalize-device-spec)) + ,@%default-modules))))) '()))) (define file-system-service-type @@ -484,7 +491,47 @@ (define urandom-seed-service-type (define (urandom-seed-service) (service urandom-seed-service-type #f)) - + +;;; +;;; Add hardware random number generator to entropy pool. +;;; + +(define-record-type* + rngd-configuration make-rngd-configuration + rngd-configuration? + (rng-tools rngd-configuration-rng-tools) ;package + (device rngd-configuration-device)) ;string + +(define rngd-service-type + (shepherd-service-type + 'rngd + (lambda (config) + (define rng-tools (rngd-configuration-rng-tools config)) + (define device (rngd-configuration-device config)) + + (define rngd-command + (list #~(string-append #$rng-tools "/sbin/rngd") + "-f" "-r" device)) + + (shepherd-service + (documentation "Add TRNG to entropy pool.") + (requirement '(udev)) + (provision '(trng)) + (start #~(make-forkexec-constructor #$@rngd-command)) + (stop #~(make-kill-destructor)))))) + +(define* (rngd-service #:key + (rng-tools rng-tools) + (device "/dev/hwrng")) + "Return a service that runs the @command{rngd} program from @var{rng-tools} +to add @var{device} to the kernel's entropy pool. The service will fail if +@var{device} does not exist." + (service rngd-service-type + (rngd-configuration + (rng-tools rng-tools) + (device device)))) + + ;;; ;;; System-wide environment variables. ;;; @@ -790,6 +837,11 @@ (define (nscd-shepherd-service config) "/sbin/nscd") "-f" #$nscd.conf "--foreground") + ;; Wait for the PID file. However, the PID file is + ;; written before nscd is actually listening on its + ;; socket (XXX). + #:pid-file "/var/run/nscd/nscd.pid" + #:environment-variables (list (string-append "LD_LIBRARY_PATH=" (string-join @@ -875,6 +927,46 @@ (define* (syslog-service #:key (config-file %default-syslog.conf)) information on the configuration file syntax." (service syslog-service-type config-file)) +(define pam-limits-service-type + (let ((security-limits + ;; Create /etc/security containing the provided "limits.conf" file. + (lambda (limits-file) + `(("security" + ,(computed-file + "security" + #~(begin + (mkdir #$output) + (stat #$limits-file) + (symlink #$limits-file + (string-append #$output "/limits.conf")))))))) + (pam-extension + (lambda (pam) + (let ((pam-limits (pam-entry + (control "required") + (module "pam_limits.so") + (arguments '("conf=/etc/security/limits.conf"))))) + (if (member (pam-service-name pam) + '("login" "su" "slim")) + (pam-service + (inherit pam) + (session (cons pam-limits + (pam-service-session pam)))) + pam))))) + (service-type + (name 'limits) + (extensions + (list (service-extension etc-service-type security-limits) + (service-extension pam-root-service-type + (lambda _ (list pam-extension)))))))) + +(define* (pam-limits-service #:optional (limits '())) + "Return a service that makes selected programs respect the list of +pam-limits-entry specified in LIMITS via pam_limits.so." + (service pam-limits-service-type + (plain-file "limits.conf" + (string-join (map pam-limits-entry->string limits) + "\n")))) + ;;; ;;; Guix services. @@ -1088,44 +1180,44 @@ (define (udev-rules-union packages) "Return the union of the @code{lib/udev/rules.d} directories found in each item of @var{packages}." (define build - #~(begin - (use-modules (guix build union) - (guix build utils) - (srfi srfi-1) - (srfi srfi-26)) + (with-imported-modules '((guix build union) + (guix build utils)) + #~(begin + (use-modules (guix build union) + (guix build utils) + (srfi srfi-1) + (srfi srfi-26)) - (define %standard-locations - '("/lib/udev/rules.d" "/libexec/udev/rules.d")) + (define %standard-locations + '("/lib/udev/rules.d" "/libexec/udev/rules.d")) - (define (rules-sub-directory directory) - ;; Return the sub-directory of DIRECTORY containing udev rules, or - ;; #f if none was found. - (find directory-exists? - (map (cut string-append directory <>) %standard-locations))) + (define (rules-sub-directory directory) + ;; Return the sub-directory of DIRECTORY containing udev rules, or + ;; #f if none was found. + (find directory-exists? + (map (cut string-append directory <>) %standard-locations))) - (mkdir-p (string-append #$output "/lib/udev")) - (union-build (string-append #$output "/lib/udev/rules.d") - (filter-map rules-sub-directory '#$packages)))) + (mkdir-p (string-append #$output "/lib/udev")) + (union-build (string-append #$output "/lib/udev/rules.d") + (filter-map rules-sub-directory '#$packages))))) - (computed-file "udev-rules" build - #:modules '((guix build union) - (guix build utils)))) + (computed-file "udev-rules" build)) (define (udev-rule file-name contents) "Return a directory with a udev rule file FILE-NAME containing CONTENTS." (computed-file file-name - #~(begin - (use-modules (guix build utils)) + (with-imported-modules '((guix build utils)) + #~(begin + (use-modules (guix build utils)) - (define rules.d - (string-append #$output "/lib/udev/rules.d")) + (define rules.d + (string-append #$output "/lib/udev/rules.d")) - (mkdir-p rules.d) - (call-with-output-file - (string-append rules.d "/" #$file-name) - (lambda (port) - (display #$contents port)))) - #:modules '((guix build utils)))) + (mkdir-p rules.d) + (call-with-output-file + (string-append rules.d "/" #$file-name) + (lambda (port) + (display #$contents port))))))) (define kvm-udev-rule ;; Return a directory with a udev rule that changes the group of /dev/kvm to diff --git a/gnu/services/dbus.scm b/gnu/services/dbus.scm index 9a4a13d41d..6ef13568ef 100644 --- a/gnu/services/dbus.scm +++ b/gnu/services/dbus.scm @@ -46,26 +46,27 @@ (define (system-service-directory services) "Return the system service directory, containing @code{.service} files for all the services that may be activated by the daemon." (computed-file "dbus-system-services" - #~(begin - (use-modules (guix build utils) - (srfi srfi-1)) + (with-imported-modules '((guix build utils)) + #~(begin + (use-modules (guix build utils) + (srfi srfi-1)) - (define files - (append-map (lambda (service) - (find-files (string-append - service - "/share/dbus-1/system-services") - "\\.service$")) - (list #$@services))) + (define files + (append-map (lambda (service) + (find-files + (string-append + service + "/share/dbus-1/system-services") + "\\.service$")) + (list #$@services))) - (mkdir #$output) - (for-each (lambda (file) - (symlink file - (string-append #$output "/" - (basename file)))) - files) - #t) - #:modules '((guix build utils)))) + (mkdir #$output) + (for-each (lambda (file) + (symlink file + (string-append #$output "/" + (basename file)))) + files) + #t)))) (define (dbus-configuration-directory services) "Return a directory contains the @code{system-local.conf} file for DBUS that @@ -168,7 +169,8 @@ (define dbus-shepherd-service (requirement '(user-processes)) (start #~(make-forkexec-constructor (list (string-append #$dbus "/bin/dbus-daemon") - "--nofork" "--system"))) + "--nofork" "--system") + #:pid-file "/var/run/dbus/pid")) (stop #~(make-kill-destructor))))))) (define dbus-root-service-type diff --git a/gnu/services/desktop.scm b/gnu/services/desktop.scm index 2fb08cd1b3..86214a73bf 100644 --- a/gnu/services/desktop.scm +++ b/gnu/services/desktop.scm @@ -91,30 +91,33 @@ (define wrapper (string-append #$service "/" #$program) (cdr (command-line)))))) + (define build + (with-imported-modules '((guix build utils)) + #~(begin + (use-modules (guix build utils)) + + (define service-directory + "/share/dbus-1/system-services") + + (mkdir-p (dirname (string-append #$output + service-directory))) + (copy-recursively (string-append #$service + service-directory) + (string-append #$output + service-directory)) + (symlink (string-append #$service "/etc") ;for etc/dbus-1 + (string-append #$output "/etc")) + + (for-each (lambda (file) + (substitute* file + (("Exec[[:blank:]]*=[[:blank:]]*([[:graph:]]+)(.*)$" + _ original-program arguments) + (string-append "Exec=" #$wrapper arguments + "\n")))) + (find-files #$output "\\.service$"))))) + (computed-file (string-append (package-name service) "-wrapper") - #~(begin - (use-modules (guix build utils)) - - (define service-directory - "/share/dbus-1/system-services") - - (mkdir-p (dirname (string-append #$output - service-directory))) - (copy-recursively (string-append #$service - service-directory) - (string-append #$output - service-directory)) - (symlink (string-append #$service "/etc") ;for etc/dbus-1 - (string-append #$output "/etc")) - - (for-each (lambda (file) - (substitute* file - (("Exec[[:blank:]]*=[[:blank:]]*([[:graph:]]+)(.*)$" - _ original-program arguments) - (string-append "Exec=" #$wrapper arguments - "\n")))) - (find-files #$output "\\.service$"))) - #:modules '((guix build utils)))) + build)) ;;; @@ -408,15 +411,15 @@ (define %polkit-pam-services (define (polkit-directory packages) "Return a directory containing an @file{actions} and possibly a @file{rules.d} sub-directory, for use as @file{/etc/polkit-1}." - (computed-file "etc-polkit-1" - #~(begin - (use-modules (guix build union) (srfi srfi-26)) + (with-imported-modules '((guix build union)) + (computed-file "etc-polkit-1" + #~(begin + (use-modules (guix build union) (srfi srfi-26)) - (union-build #$output - (map (cut string-append <> - "/share/polkit-1") - (list #$@packages)))) - #:modules '((guix build union)))) + (union-build #$output + (map (cut string-append <> + "/share/polkit-1") + (list #$@packages))))))) (define polkit-etc-files (match-lambda diff --git a/gnu/services/networking.scm b/gnu/services/networking.scm index af2a60936b..a77ed3bb80 100644 --- a/gnu/services/networking.scm +++ b/gnu/services/networking.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013, 2014, 2015 Ludovic Courtès +;;; Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès ;;; Copyright © 2015 Mark H Weaver ;;; Copyright © 2016 Efraim Flashner ;;; @@ -345,39 +345,39 @@ (define (tor-configuration->torrc config) (($ tor config-file services) (computed-file "torrc" - #~(begin - (use-modules (guix build utils) - (ice-9 match)) + (with-imported-modules '((guix build utils)) + #~(begin + (use-modules (guix build utils) + (ice-9 match)) - (call-with-output-file #$output - (lambda (port) - (display "\ + (call-with-output-file #$output + (lambda (port) + (display "\ # The beginning was automatically added. User tor DataDirectory /var/lib/tor Log notice syslog\n" port) - (for-each (match-lambda - ((service (ports hosts) ...) - (format port "\ + (for-each (match-lambda + ((service (ports hosts) ...) + (format port "\ HiddenServiceDir /var/lib/tor/hidden-services/~a~%" - service) - (for-each (lambda (tcp-port host) - (format port "\ + service) + (for-each (lambda (tcp-port host) + (format port "\ HiddenServicePort ~a ~a~%" - tcp-port host)) - ports hosts))) - '#$(map (match-lambda - (($ name mapping) - (cons name mapping))) - services)) + tcp-port host)) + ports hosts))) + '#$(map (match-lambda + (($ name mapping) + (cons name mapping))) + services)) - ;; Append the user's config file. - (call-with-input-file #$config-file - (lambda (input) - (dump-port input port))) - #t))) - #:modules '((guix build utils)))))) + ;; Append the user's config file. + (call-with-input-file #$config-file + (lambda (input) + (dump-port input port))) + #t)))))))) (define (tor-shepherd-service config) "Return a running TOR." diff --git a/gnu/services/shepherd.scm b/gnu/services/shepherd.scm index 5d829e4c38..a14f51592a 100644 --- a/gnu/services/shepherd.scm +++ b/gnu/services/shepherd.scm @@ -47,9 +47,7 @@ (define-module (gnu services shepherd) shepherd-service-stop shepherd-service-auto-start? shepherd-service-modules - shepherd-service-imported-modules - %default-imported-modules %default-modules shepherd-service-file @@ -138,9 +136,7 @@ (define-record-type* (auto-start? shepherd-service-auto-start? ;Boolean (default #t)) (modules shepherd-service-modules ;list of module names - (default %default-modules)) - (imported-modules shepherd-service-imported-modules ;list of module names - (default %default-imported-modules))) + (default %default-modules))) (define (shepherd-service-canonical-name service) "Return the 'canonical name' of SERVICE." @@ -179,7 +175,7 @@ (define (assert-satisfied-requirements service) (&message (message (format #f (_ "service '~a' requires '~a', \ -which is undefined") +which is not provided by any service") (match (shepherd-service-provision service) ((head . _) head) (_ service)) @@ -203,37 +199,26 @@ (define (shepherd-service-file-name service) (define (shepherd-service-file service) "Return a file defining SERVICE." (gexp->file (shepherd-service-file-name service) - #~(begin - (use-modules #$@(shepherd-service-modules service)) + (with-imported-modules %default-imported-modules + #~(begin + (use-modules #$@(shepherd-service-modules service)) - (make - #:docstring '#$(shepherd-service-documentation service) - #:provides '#$(shepherd-service-provision service) - #:requires '#$(shepherd-service-requirement service) - #:respawn? '#$(shepherd-service-respawn? service) - #:start #$(shepherd-service-start service) - #:stop #$(shepherd-service-stop service))))) + (make + #:docstring '#$(shepherd-service-documentation service) + #:provides '#$(shepherd-service-provision service) + #:requires '#$(shepherd-service-requirement service) + #:respawn? '#$(shepherd-service-respawn? service) + #:start #$(shepherd-service-start service) + #:stop #$(shepherd-service-stop service)))))) (define (shepherd-configuration-file services) "Return the shepherd configuration file for SERVICES." - (define modules - (delete-duplicates - (append-map shepherd-service-imported-modules services))) - (assert-valid-graph services) - (mlet %store-monad ((modules (imported-modules modules)) - (compiled (compiled-modules modules)) - (files (mapm %store-monad - shepherd-service-file - services))) + (mlet %store-monad ((files (mapm %store-monad + shepherd-service-file services))) (define config #~(begin - (eval-when (expand load eval) - (set! %load-path (cons #$modules %load-path)) - (set! %load-compiled-path - (cons #$compiled %load-compiled-path))) - (use-modules (srfi srfi-34) (system repl error-handling)) diff --git a/gnu/services/ssh.scm b/gnu/services/ssh.scm index 33e1951a6e..743b5e3805 100644 --- a/gnu/services/ssh.scm +++ b/gnu/services/ssh.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2014, 2015 Ludovic Courtès +;;; Copyright © 2014, 2015, 2016 Ludovic Courtès +;;; Copyright © 2016 David Craven ;;; ;;; This file is part of GNU Guix. ;;; @@ -17,14 +18,19 @@ ;;; along with GNU Guix. If not, see . (define-module (gnu services ssh) - #:use-module (guix gexp) - #:use-module (guix records) + #:use-module (gnu packages ssh) #:use-module (gnu services) #:use-module (gnu services shepherd) #:use-module (gnu system pam) - #:use-module (gnu packages lsh) + #:use-module (guix gexp) + #:use-module (guix records) #:use-module (srfi srfi-26) - #:export (lsh-service)) + #:export (lsh-service + + dropbear-configuration + dropbear-configuration? + dropbear-service-type + dropbear-service)) ;;; Commentary: ;;; @@ -235,4 +241,85 @@ (define* (lsh-service #:key public-key-authentication?) (initialize? initialize?)))) + +;;; +;;; Dropbear. +;;; + +(define-record-type* + dropbear-configuration make-dropbear-configuration + dropbear-configuration? + (dropbear dropbear-configuration-dropbear + (default dropbear)) + (port-number dropbear-configuration-port-number + (default 22)) + (syslog-output? dropbear-configuration-syslog-output? + (default #t)) + (pid-file dropbear-configuration-pid-file + (default "/var/run/dropbear.pid")) + (root-login? dropbear-configuration-root-login? + (default #f)) + (allow-empty-passwords? dropbear-configuration-allow-empty-passwords? + (default #f)) + (password-authentication? dropbear-configuration-password-authentication? + (default #t))) + +(define (dropbear-activation config) + "Return the activation gexp for CONFIG." + #~(begin + (mkdir-p "/etc/dropbear"))) + +(define (dropbear-shepherd-service config) + "Return a for dropbear with CONFIG." + (define dropbear + (dropbear-configuration-dropbear config)) + + (define pid-file + (dropbear-configuration-pid-file config)) + + (define dropbear-command + #~(list (string-append #$dropbear "/sbin/dropbear") + + ;; '-R' allows host keys to be automatically generated upon first + ;; connection, at a time when /dev/urandom is more likely securely + ;; seeded. + "-F" "-R" + + "-p" #$(number->string (dropbear-configuration-port-number config)) + "-P" #$pid-file + #$@(if (dropbear-configuration-syslog-output? config) '() '("-E")) + #$@(if (dropbear-configuration-root-login? config) '() '("-w")) + #$@(if (dropbear-configuration-password-authentication? config) + '() + '("-s" "-g")) + #$@(if (dropbear-configuration-allow-empty-passwords? config) + '("-B") + '()))) + + (define requires + (if (dropbear-configuration-syslog-output? config) + '(networking syslogd) '(networking))) + + (list (shepherd-service + (documentation "Dropbear SSH server.") + (requirement requires) + (provision '(ssh-daemon)) + (start #~(make-forkexec-constructor #$dropbear-command + #:pid-file #$pid-file)) + (stop #~(make-kill-destructor))))) + +(define dropbear-service-type + (service-type (name 'dropbear) + (extensions + (list (service-extension shepherd-root-service-type + dropbear-shepherd-service) + (service-extension activation-service-type + dropbear-activation))))) + +(define* (dropbear-service #:optional (config (dropbear-configuration))) + "Run the @uref{https://matt.ucc.asn.au/dropbear/dropbear.html,Dropbear SSH +daemon} with the given @var{config}, a @code{} +object." + (service dropbear-service-type config)) + ;;; ssh.scm ends here diff --git a/gnu/services/web.scm b/gnu/services/web.scm index 0e17f6e5c6..72ef7d4050 100644 --- a/gnu/services/web.scm +++ b/gnu/services/web.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015 David Thompson ;;; Copyright © 2015 Ludovic Courtès +;;; Copyright © 2016 ng0 ;;; ;;; This file is part of GNU Guix. ;;; @@ -114,7 +115,7 @@ (define* (nginx-service #:key (nginx nginx) (default-nginx-config log-directory run-directory))) "Return a service that runs NGINX, the nginx web server. -The nginx daemon loads its runtime configuration from CONFIG-FIGLE, stores log +The nginx daemon loads its runtime configuration from CONFIG-FILE, stores log files in LOG-DIRECTORY, and stores temporary runtime files in RUN-DIRECTORY." (service nginx-service-type (nginx-configuration diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm index 9908b9526b..44d12a7e77 100644 --- a/gnu/services/xorg.scm +++ b/gnu/services/xorg.scm @@ -158,27 +158,27 @@ (define (xorg-configuration-directory modules) "Return a directory that contains the @code{.conf} files for X.org that includes the @code{share/X11/xorg.conf.d} directories of each package listed in @var{modules}." - (computed-file "xorg.conf.d" - #~(begin - (use-modules (guix build utils) - (srfi srfi-1)) + (with-imported-modules '((guix build utils)) + (computed-file "xorg.conf.d" + #~(begin + (use-modules (guix build utils) + (srfi srfi-1)) - (define files - (append-map (lambda (module) - (find-files (string-append - module - "/share/X11/xorg.conf.d") - "\\.conf$")) - (list #$@modules))) + (define files + (append-map (lambda (module) + (find-files (string-append + module + "/share/X11/xorg.conf.d") + "\\.conf$")) + (list #$@modules))) - (mkdir #$output) - (for-each (lambda (file) - (symlink file - (string-append #$output "/" - (basename file)))) - files) - #t) - #:modules '((guix build utils)))) + (mkdir #$output) + (for-each (lambda (file) + (symlink file + (string-append #$output "/" + (basename file)))) + files) + #t)))) (define* (xorg-start-command #:key (guile (canonical-package guile-2.0)) diff --git a/gnu/system.scm b/gnu/system.scm index 96ea153cd0..476720b9f9 100644 --- a/gnu/system.scm +++ b/gnu/system.scm @@ -81,6 +81,8 @@ (define-module (gnu system) operating-system-mapped-devices operating-system-file-systems operating-system-store-file-system + operating-system-user-mapped-devices + operating-system-boot-mapped-devices operating-system-activation-script operating-system-user-accounts operating-system-shepherd-service-names @@ -208,8 +210,9 @@ (define (mapped-device-user device file-systems) "Return a file system among FILE-SYSTEMS that uses DEVICE, or #f." (let ((target (string-append "/dev/mapper/" (mapped-device-target device)))) (find (lambda (fs) - (and (eq? 'device (file-system-title fs)) - (string=? (file-system-device fs) target))) + (or (member device (file-system-dependencies fs)) + (and (eq? 'device (file-system-title fs)) + (string=? (file-system-device fs) target)))) file-systems))) (define (operating-system-user-mapped-devices os) @@ -731,7 +734,8 @@ (define (operating-system-parameters-file os) (kernel #$(operating-system-kernel os)) (kernel-arguments #$(operating-system-kernel-arguments os)) - (initrd #$initrd))))) + (initrd #$initrd)) + #:set-load-path? #f))) ;;; diff --git a/gnu/system/install.scm b/gnu/system/install.scm index de14f6fb4c..734a361c37 100644 --- a/gnu/system/install.scm +++ b/gnu/system/install.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014, 2015, 2016 Ludovic Courtès ;;; Copyright © 2015 Mark H Weaver +;;; Copyright © 2016 Andreas Enge ;;; ;;; This file is part of GNU Guix. ;;; @@ -55,52 +56,53 @@ (define* (self-contained-tarball #:key (guix guix)) (manifest (list (package->manifest-entry guix)))))) (define build - #~(begin - (use-modules (guix build utils) - (gnu build install)) + (with-imported-modules '((guix build utils) + (guix build store-copy) + (gnu build install)) + #~(begin + (use-modules (guix build utils) + (gnu build install)) - (define %root "root") + (define %root "root") - (setenv "PATH" - (string-append #$guix "/sbin:" #$tar "/bin:" #$xz "/bin")) + (setenv "PATH" + (string-append #$guix "/sbin:" #$tar "/bin:" #$xz "/bin")) - ;; Note: there is not much to gain here with deduplication and there - ;; is the overhead of the '.links' directory, so turn it off. - (populate-single-profile-directory %root - #:profile #$profile - #:closure "profile" - #:deduplicate? #f) + ;; Note: there is not much to gain here with deduplication and + ;; there is the overhead of the '.links' directory, so turn it + ;; off. + (populate-single-profile-directory %root + #:profile #$profile + #:closure "profile" + #:deduplicate? #f) - ;; Create the tarball. Use GNU format so there's no file name - ;; length limitation. - (with-directory-excursion %root - (zero? (system* "tar" "--xz" "--format=gnu" + ;; Create the tarball. Use GNU format so there's no file name + ;; length limitation. + (with-directory-excursion %root + (zero? (system* "tar" "--xz" "--format=gnu" - ;; Avoid non-determinism in the archive. Use - ;; mtime = 1, not zero, because that is what the - ;; daemon does for files in the store (see the - ;; 'mtimeStore' constant in local-store.cc.) - "--sort=name" - "--mtime=@1" ;for files in /var/guix - "--owner=root:0" - "--group=root:0" + ;; Avoid non-determinism in the archive. Use + ;; mtime = 1, not zero, because that is what the + ;; daemon does for files in the store (see the + ;; 'mtimeStore' constant in local-store.cc.) + "--sort=name" + "--mtime=@1" ;for files in /var/guix + "--owner=root:0" + "--group=root:0" - "--check-links" - "-cvf" #$output - ;; Avoid adding / and /var to the tarball, - ;; so that the ownership and permissions of those - ;; directories will not be overwritten when - ;; extracting the archive. Do not include /root - ;; because the root account might have a different - ;; home directory. - "./var/guix" - (string-append "." (%store-directory))))))) + "--check-links" + "-cvf" #$output + ;; Avoid adding / and /var to the tarball, so + ;; that the ownership and permissions of those + ;; directories will not be overwritten when + ;; extracting the archive. Do not include /root + ;; because the root account might have a + ;; different home directory. + "./var/guix" + (string-append "." (%store-directory)))))))) (gexp->derivation "guix-tarball.tar.xz" build - #:references-graphs `(("profile" ,profile)) - #:modules '((guix build utils) - (guix build store-copy) - (gnu build install))))) + #:references-graphs `(("profile" ,profile))))) (define (log-to-info) @@ -212,20 +214,20 @@ (define (file f) (define directory (computed-file "configuration-templates" - #~(begin - (mkdir #$output) - (for-each (lambda (file target) - (copy-file file - (string-append #$output "/" - target))) - '(#$(file "bare-bones.tmpl") - #$(file "desktop.tmpl") - #$(file "lightweight-desktop.tmpl")) - '("bare-bones.scm" - "desktop.scm" - "lightweight-desktop.scm")) - #t) - #:modules '((guix build utils)))) + (with-imported-modules '((guix build utils)) + #~(begin + (mkdir #$output) + (for-each (lambda (file target) + (copy-file file + (string-append #$output "/" + target))) + '(#$(file "bare-bones.tmpl") + #$(file "desktop.tmpl") + #$(file "lightweight-desktop.tmpl")) + '("bare-bones.scm" + "desktop.scm" + "lightweight-desktop.scm")) + #t)))) `(("configuration" ,directory))) @@ -391,6 +393,7 @@ (define installation-os parted ddrescue grub ;mostly so xrefs to its manual work cryptsetup + mdadm btrfs-progs wireless-tools iw wpa-supplicant-minimal iproute ;; XXX: We used to have GNU fdisk here, but as of version diff --git a/gnu/system/linux-container.scm b/gnu/system/linux-container.scm index 3acc579a6b..d3c0036f47 100644 --- a/gnu/system/linux-container.scm +++ b/gnu/system/linux-container.scm @@ -87,30 +87,29 @@ (define* (container-script os #:key (mappings '())) #:container? #t))) (define script - #~(begin - (use-modules (gnu build linux-container) - (guix build utils)) + (with-imported-modules '((guix config) + (guix utils) + (guix combinators) + (guix build utils) + (guix build syscalls) + (guix build bournish) + (gnu build file-systems) + (gnu build linux-container)) + #~(begin + (use-modules (gnu build linux-container) + (guix build utils)) - (call-with-container '#$specs - (lambda () - (setenv "HOME" "/root") - (setenv "TMPDIR" "/tmp") - (setenv "GUIX_NEW_SYSTEM" #$os-drv) - (for-each mkdir-p '("/run" "/bin" "/etc" "/home" "/var")) - (primitive-load (string-append #$os-drv "/boot"))) - ;; A range of 65536 uid/gids is used to cover 16 bits worth of - ;; users and groups, which is sufficient for most cases. - ;; - ;; See: http://www.freedesktop.org/software/systemd/man/systemd-nspawn.html#--private-users= - #:host-uids 65536))) + (call-with-container '#$specs + (lambda () + (setenv "HOME" "/root") + (setenv "TMPDIR" "/tmp") + (setenv "GUIX_NEW_SYSTEM" #$os-drv) + (for-each mkdir-p '("/run" "/bin" "/etc" "/home" "/var")) + (primitive-load (string-append #$os-drv "/boot"))) + ;; A range of 65536 uid/gids is used to cover 16 bits worth of + ;; users and groups, which is sufficient for most cases. + ;; + ;; See: http://www.freedesktop.org/software/systemd/man/systemd-nspawn.html#--private-users= + #:host-uids 65536)))) - (gexp->script "run-container" script - #:modules '((ice-9 match) - (srfi srfi-98) - (guix config) - (guix utils) - (guix build utils) - (guix build syscalls) - (guix build bournish) - (gnu build file-systems) - (gnu build linux-container)))))) + (gexp->script "run-container" script)))) diff --git a/gnu/system/linux-initrd.scm b/gnu/system/linux-initrd.scm index 484bce71c4..bbaa5c0f89 100644 --- a/gnu/system/linux-initrd.scm +++ b/gnu/system/linux-initrd.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès ;;; Copyright © 2016 Mark H Weaver +;;; Copyright © 2016 Jan Nieuwenhuizen ;;; ;;; This file is part of GNU Guix. ;;; @@ -54,85 +55,81 @@ (define* (expression->initrd exp (guile %guile-static-stripped) (gzip gzip) (name "guile-initrd") - (system (%current-system)) - (modules '())) + (system (%current-system))) "Return a derivation that builds a Linux initrd (a gzipped cpio archive) containing GUILE and that evaluates EXP, a G-expression, upon booting. All -the derivations referenced by EXP are automatically copied to the initrd. - -MODULES is a list of Guile module names to be embedded in the initrd." +the derivations referenced by EXP are automatically copied to the initrd." ;; General Linux overview in `Documentation/early-userspace/README' and ;; `Documentation/filesystems/ramfs-rootfs-initramfs.txt'. (mlet %store-monad ((init (gexp->script "init" exp - #:modules modules #:guile guile))) (define builder - #~(begin - (use-modules (gnu build linux-initrd)) + (with-imported-modules '((guix cpio) + (guix build utils) + (guix build store-copy) + (gnu build linux-initrd)) + #~(begin + (use-modules (gnu build linux-initrd)) - (mkdir #$output) - (build-initrd (string-append #$output "/initrd") - #:guile #$guile - #:init #$init - ;; Copy everything INIT refers to into the initrd. - #:references-graphs '("closure") - #:gzip (string-append #$gzip "/bin/gzip")))) + (mkdir #$output) + (build-initrd (string-append #$output "/initrd") + #:guile #$guile + #:init #$init + ;; Copy everything INIT refers to into the initrd. + #:references-graphs '("closure") + #:gzip (string-append #$gzip "/bin/gzip"))))) - (gexp->derivation name builder - #:modules '((guix cpio) - (guix build utils) - (guix build store-copy) - (gnu build linux-initrd)) - #:references-graphs `(("closure" ,init))))) + (gexp->derivation name builder + #:references-graphs `(("closure" ,init))))) (define (flat-linux-module-directory linux modules) "Return a flat directory containing the Linux kernel modules listed in MODULES and taken from LINUX." (define build-exp - #~(begin - (use-modules (ice-9 match) (ice-9 regex) - (srfi srfi-1) - (guix build utils) - (gnu build linux-modules)) + (with-imported-modules '((guix build utils) + (guix elf) + (gnu build linux-modules)) + #~(begin + (use-modules (ice-9 match) (ice-9 regex) + (srfi srfi-1) + (guix build utils) + (gnu build linux-modules)) - (define (string->regexp str) - ;; Return a regexp that matches STR exactly. - (string-append "^" (regexp-quote str) "$")) + (define (string->regexp str) + ;; Return a regexp that matches STR exactly. + (string-append "^" (regexp-quote str) "$")) - (define module-dir - (string-append #$linux "/lib/modules")) + (define module-dir + (string-append #$linux "/lib/modules")) - (define (lookup module) - (let ((name (ensure-dot-ko module))) - (match (find-files module-dir (string->regexp name)) - ((file) - file) - (() - (error "module not found" name module-dir)) - ((_ ...) - (error "several modules by that name" - name module-dir))))) + (define (lookup module) + (let ((name (ensure-dot-ko module))) + (match (find-files module-dir (string->regexp name)) + ((file) + file) + (() + (error "module not found" name module-dir)) + ((_ ...) + (error "several modules by that name" + name module-dir))))) - (define modules - (let ((modules (map lookup '#$modules))) - (append modules - (recursive-module-dependencies modules - #:lookup-module lookup)))) + (define modules + (let ((modules (map lookup '#$modules))) + (append modules + (recursive-module-dependencies modules + #:lookup-module lookup)))) - (mkdir #$output) - (for-each (lambda (module) - (format #t "copying '~a'...~%" module) - (copy-file module - (string-append #$output "/" - (basename module)))) - (delete-duplicates modules)))) + (mkdir #$output) + (for-each (lambda (module) + (format #t "copying '~a'...~%" module) + (copy-file module + (string-append #$output "/" + (basename module)))) + (delete-duplicates modules))))) - (gexp->derivation "linux-modules" build-exp - #:modules '((guix build utils) - (guix elf) - (gnu build linux-modules)))) + (gexp->derivation "linux-modules" build-exp)) (define* (base-initrd file-systems #:key @@ -183,6 +180,7 @@ (define linux-modules "usb-storage" "uas" ;for the installation image etc. "usbhid" "hid-generic" "hid-apple" ;keyboards during early boot "dm-crypt" "xts" "serpent_generic" "wp512" ;for encrypted root partitions + "nvme" ;for new SSD NVMe devices ,@(if (string-match "^(x86_64|i[3-6]86)-" (%current-system)) '("pata_acpi" "pata_atiixp" ;for ATA controllers "isci") ;for SAS controllers like Intel C602 @@ -225,38 +223,38 @@ (define device-mapping-commands (mlet %store-monad ((kodir (flat-linux-module-directory linux linux-modules))) (expression->initrd - #~(begin - (use-modules (gnu build linux-boot) - (guix build utils) - (guix build bournish) ;add the 'bournish' meta-command - (srfi srfi-26) + (with-imported-modules '((guix build bournish) + (guix build utils) + (guix build syscalls) + (gnu build linux-boot) + (gnu build linux-modules) + (gnu build file-systems) + (guix elf)) + #~(begin + (use-modules (gnu build linux-boot) + (guix build utils) + (guix build bournish) ;add the 'bournish' meta-command + (srfi srfi-26) - ;; FIXME: The following modules are for - ;; LUKS-DEVICE-MAPPING. We should instead propagate - ;; this info via gexps. - ((gnu build file-systems) - #:select (find-partition-by-luks-uuid)) - (rnrs bytevectors)) + ;; FIXME: The following modules are for + ;; LUKS-DEVICE-MAPPING. We should instead propagate + ;; this info via gexps. + ((gnu build file-systems) + #:select (find-partition-by-luks-uuid)) + (rnrs bytevectors)) - (with-output-to-port (%make-void-port "w") - (lambda () - (set-path-environment-variable "PATH" '("bin" "sbin") - '#$helper-packages))) + (with-output-to-port (%make-void-port "w") + (lambda () + (set-path-environment-variable "PATH" '("bin" "sbin") + '#$helper-packages))) - (boot-system #:mounts '#$(map file-system->spec file-systems) - #:pre-mount (lambda () - (and #$@device-mapping-commands)) - #:linux-modules '#$linux-modules - #:linux-module-directory '#$kodir - #:qemu-guest-networking? #$qemu-networking? - #:volatile-root? '#$volatile-root?)) - #:name "base-initrd" - #:modules '((guix build bournish) - (guix build utils) - (guix build syscalls) - (gnu build linux-boot) - (gnu build linux-modules) - (gnu build file-systems) - (guix elf))))) + (boot-system #:mounts '#$(map file-system->spec file-systems) + #:pre-mount (lambda () + (and #$@device-mapping-commands)) + #:linux-modules '#$linux-modules + #:linux-module-directory '#$kodir + #:qemu-guest-networking? #$qemu-networking? + #:volatile-root? '#$volatile-root?))) + #:name "base-initrd"))) ;;; linux-initrd.scm ends here diff --git a/gnu/system/locale.scm b/gnu/system/locale.scm index f9d713e0cf..3bb9f950a8 100644 --- a/gnu/system/locale.scm +++ b/gnu/system/locale.scm @@ -154,10 +154,10 @@ (define* (locale-directory locales #:libc libc)) libcs))) (gexp->derivation "locale-multiple-versions" - #~(begin - (use-modules (guix build union)) - (union-build #$output (list #$@dirs))) - #:modules '((guix build union)) + (with-imported-modules '((guix build union)) + #~(begin + (use-modules (guix build union)) + (union-build #$output (list #$@dirs)))) #:local-build? #t #:substitutable? #f))))) diff --git a/gnu/system/mapped-devices.scm b/gnu/system/mapped-devices.scm index 450b4737ac..732f73cc4b 100644 --- a/gnu/system/mapped-devices.scm +++ b/gnu/system/mapped-devices.scm @@ -85,9 +85,7 @@ (define device-mapping-service-type (modules `((rnrs bytevectors) ;bytevector? ((gnu build file-systems) #:select (find-partition-by-luks-uuid)) - ,@%default-modules)) - (imported-modules `((gnu build file-systems) - ,@%default-imported-modules))))))) + ,@%default-modules))))))) (define (device-mapping-service mapped-device) "Return a service that sets up @var{mapped-device}." @@ -101,20 +99,22 @@ (define (device-mapping-service mapped-device) (define (open-luks-device source target) "Return a gexp that maps SOURCE to TARGET as a LUKS device, using 'cryptsetup'." - #~(let ((source #$source)) - (zero? (system* (string-append #$cryptsetup "/sbin/cryptsetup") - "open" "--type" "luks" + (with-imported-modules '((gnu build file-systems) + (guix build bournish)) + #~(let ((source #$source)) + (zero? (system* (string-append #$cryptsetup "/sbin/cryptsetup") + "open" "--type" "luks" - ;; Note: We cannot use the "UUID=source" syntax here - ;; because 'cryptsetup' implements it by searching the - ;; udev-populated /dev/disk/by-id directory but udev may - ;; be unavailable at the time we run this. - (if (bytevector? source) - (or (find-partition-by-luks-uuid source) - (error "LUKS partition not found" source)) - source) + ;; Note: We cannot use the "UUID=source" syntax here + ;; because 'cryptsetup' implements it by searching the + ;; udev-populated /dev/disk/by-id directory but udev may + ;; be unavailable at the time we run this. + (if (bytevector? source) + (or (find-partition-by-luks-uuid source) + (error "LUKS partition not found" source)) + source) - #$target)))) + #$target))))) (define (close-luks-device source target) "Return a gexp that closes TARGET, a LUKS device." diff --git a/gnu/system/pam.scm b/gnu/system/pam.scm index 743039daf6..cd7a3427ed 100644 --- a/gnu/system/pam.scm +++ b/gnu/system/pam.scm @@ -23,6 +23,7 @@ (define-module (gnu system pam) #:use-module (gnu services) #:use-module (ice-9 match) #:use-module (srfi srfi-1) + #:use-module (srfi srfi-9) #:use-module (srfi srfi-11) #:use-module (srfi srfi-26) #:use-module ((guix utils) #:select (%current-system)) @@ -38,6 +39,13 @@ (define-module (gnu system pam) pam-entry-module pam-entry-arguments + pam-limits-entry + pam-limits-entry-domain + pam-limits-entry-type + pam-limits-entry-item + pam-limits-entry-value + pam-limits-entry->string + pam-services->directory unix-pam-service base-pam-services @@ -76,6 +84,59 @@ (module pam-entry-module) ; file name (arguments pam-entry-arguments ; list of string-valued g-expressions (default '()))) +;; PAM limits entries are used by the pam_limits PAM module to set or override +;; limits on system resources for user sessions. The format is specified +;; here: http://linux-pam.org/Linux-PAM-html/sag-pam_limits.html +(define-record-type + (make-pam-limits-entry domain type item value) + pam-limits-entry? + (domain pam-limits-entry-domain) ; string + (type pam-limits-entry-type) ; symbol + (item pam-limits-entry-item) ; symbol + (value pam-limits-entry-value)) ; symbol or number + +(define (pam-limits-entry domain type item value) + "Construct a pam-limits-entry ensuring that the provided values are valid." + (define (valid? value) + (case item + ((priority) (number? value)) + ((nice) (and (number? value) + (>= value -20) + (<= value 19))) + (else (or (and (number? value) + (>= value -1)) + (member value '(unlimited infinity)))))) + (define items + (list 'core 'data 'fsize + 'memlock 'nofile 'rss + 'stack 'cpu 'nproc + 'as 'maxlogins 'maxsyslogins + 'priority 'locks 'sigpending + 'msgqueue 'nice 'rtprio)) + (when (not (member type '(hard soft both))) + (error "invalid limit type" type)) + (when (not (member item items)) + (error "invalid limit item" item)) + (when (not (valid? value)) + (error "invalid limit value" value)) + (make-pam-limits-entry domain type item value)) + +(define (pam-limits-entry->string entry) + "Convert a pam-limits-entry record to a string." + (match entry + (($ domain type item value) + (string-join (list domain + (if (eq? type 'both) + "-" + (symbol->string type)) + (symbol->string item) + (cond + ((symbol? value) + (symbol->string value)) + (else + (number->string value)))) + " ")))) + (define (pam-service->configuration service) "Return the derivation building the configuration file for SERVICE, to be dumped in /etc/pam.d/NAME, where NAME is the name of SERVICE." diff --git a/gnu/system/shadow.scm b/gnu/system/shadow.scm index f09e8c24f2..c3948900eb 100644 --- a/gnu/system/shadow.scm +++ b/gnu/system/shadow.scm @@ -126,17 +126,19 @@ (define %base-user-accounts (name "nobody") (uid 65534) (group "nogroup") - (home-directory "/var/empty") + (shell #~(string-append #$shadow "/sbin/nologin")) + (home-directory "/nonexistent") (system? #t)))) (define (default-skeletons) "Return the default skeleton files for /etc/skel. These files are copied by 'useradd' in the home directory of newly created user accounts." (define copy-guile-wm - #~(begin - (use-modules (guix build utils)) - (copy-file (car (find-files #$guile-wm "wm-init-sample.scm")) - #$output))) + (with-imported-modules '((guix build utils)) + #~(begin + (use-modules (guix build utils)) + (copy-file (car (find-files #$guile-wm "wm-init-sample.scm")) + #$output)))) (let ((profile (plain-file "bash_profile" "\ # Honor per-interactive-shell startup file @@ -170,8 +172,7 @@ (define copy-guile-wm (zlogin (plain-file "zlogin" "\ # Honor system-wide environment variables source /etc/profile\n")) - (guile-wm (computed-file "guile-wm" copy-guile-wm - #:modules '((guix build utils)))) + (guile-wm (computed-file "guile-wm" copy-guile-wm)) (xdefaults (plain-file "Xdefaults" "\ XTerm*utf8: always XTerm*metaSendsEscape: true\n")) @@ -188,22 +189,22 @@ (define copy-guile-wm (define (skeleton-directory skeletons) "Return a directory containing SKELETONS, a list of name/derivation tuples." (computed-file "skel" - #~(begin - (use-modules (ice-9 match) - (guix build utils)) + (with-imported-modules '((guix build utils)) + #~(begin + (use-modules (ice-9 match) + (guix build utils)) - (mkdir #$output) - (chdir #$output) + (mkdir #$output) + (chdir #$output) - ;; Note: copy the skeletons instead of symlinking - ;; them like 'file-union' does, because 'useradd' - ;; would just copy the symlinks as is. - (for-each (match-lambda - ((target source) - (copy-recursively source target))) - '#$skeletons) - #t) - #:modules '((guix build utils)))) + ;; Note: copy the skeletons instead of symlinking + ;; them like 'file-union' does, because 'useradd' + ;; would just copy the symlinks as is. + (for-each (match-lambda + ((target source) + (copy-recursively source target))) + '#$skeletons) + #t)))) (define (assert-valid-users/groups users groups) "Raise an error if USERS refer to groups not listed in GROUPS." diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm index 676e89df98..c31e3a80ef 100644 --- a/gnu/system/vm.scm +++ b/gnu/system/vm.scm @@ -90,6 +90,21 @@ (define %linux-vm-file-systems (options "trans=virtio") (check? #f)))) +(define %vm-module-closure + ;; The closure of (gnu build vm), roughly. + ;; FIXME: Compute it automatically. + '((gnu build vm) + (gnu build install) + (gnu build linux-boot) + (gnu build linux-modules) + (gnu build file-systems) + (guix elf) + (guix records) + (guix build utils) + (guix build syscalls) + (guix build bournish) + (guix build store-copy))) + (define* (expression->derivation-in-linux-vm name exp #:key (system (%current-system)) @@ -97,18 +112,6 @@ (define* (expression->derivation-in-linux-vm name exp initrd (qemu qemu-minimal) (env-vars '()) - (modules - '((gnu build vm) - (gnu build install) - (gnu build linux-boot) - (gnu build linux-modules) - (gnu build file-systems) - (guix elf) - (guix records) - (guix build utils) - (guix build syscalls) - (guix build bournish) - (guix build store-copy))) (guile-for-build (%guile-for-build)) @@ -128,23 +131,13 @@ (define* (expression->derivation-in-linux-vm name exp DISK-IMAGE-FORMAT (e.g., 'qcow2' or 'raw'), of DISK-IMAGE-SIZE bytes and return it. -MODULES is the set of modules imported in the execution environment of EXP. - When REFERENCES-GRAPHS is true, it must be a list of file name/store path pairs, as for `derivation'. The files containing the reference graphs are made available under the /xchg CIFS share." (mlet* %store-monad - ((module-dir (imported-modules modules)) - (compiled (compiled-modules modules)) - (user-builder (gexp->file "builder-in-linux-vm" exp)) + ((user-builder (gexp->file "builder-in-linux-vm" exp)) (loader (gexp->file "linux-vm-loader" - #~(begin - (set! %load-path - (cons #$module-dir %load-path)) - (set! %load-compiled-path - (cons #$compiled - %load-compiled-path)) - (primitive-load #$user-builder)))) + #~(primitive-load #$user-builder))) (coreutils -> (canonical-package coreutils)) (initrd (if initrd ; use the default initrd? (return initrd) @@ -155,34 +148,34 @@ (define* (expression->derivation-in-linux-vm name exp (define builder ;; Code that launches the VM that evaluates EXP. - #~(begin - (use-modules (guix build utils) - (gnu build vm)) + (with-imported-modules %vm-module-closure + #~(begin + (use-modules (guix build utils) + (gnu build vm)) - (let ((inputs '#$(list qemu coreutils)) - (linux (string-append #$linux "/bzImage")) - (initrd (string-append #$initrd "/initrd")) - (loader #$loader) - (graphs '#$(match references-graphs - (((graph-files . _) ...) graph-files) - (_ #f)))) + (let ((inputs '#$(list qemu coreutils)) + (linux (string-append #$linux "/bzImage")) + (initrd (string-append #$initrd "/initrd")) + (loader #$loader) + (graphs '#$(match references-graphs + (((graph-files . _) ...) graph-files) + (_ #f)))) - (set-path-environment-variable "PATH" '("bin") inputs) + (set-path-environment-variable "PATH" '("bin") inputs) - (load-in-linux-vm loader - #:output #$output - #:linux linux #:initrd initrd - #:memory-size #$memory-size - #:make-disk-image? #$make-disk-image? - #:disk-image-format #$disk-image-format - #:disk-image-size #$disk-image-size - #:references-graphs graphs)))) + (load-in-linux-vm loader + #:output #$output + #:linux linux #:initrd initrd + #:memory-size #$memory-size + #:make-disk-image? #$make-disk-image? + #:disk-image-format #$disk-image-format + #:disk-image-size #$disk-image-size + #:references-graphs graphs))))) (gexp->derivation name builder ;; TODO: Require the "kvm" feature. #:system system #:env-vars env-vars - #:modules modules #:guile-for-build guile-for-build #:references-graphs references-graphs))) @@ -212,45 +205,46 @@ (define* (qemu-image #:key the image." (expression->derivation-in-linux-vm name - #~(begin - (use-modules (gnu build vm) - (guix build utils)) + (with-imported-modules %vm-module-closure + #~(begin + (use-modules (gnu build vm) + (guix build utils)) - (let ((inputs - '#$(append (list qemu parted grub e2fsprogs) - (map canonical-package - (list sed grep coreutils findutils gawk)) - (if register-closures? (list guix) '()))) + (let ((inputs + '#$(append (list qemu parted grub e2fsprogs) + (map canonical-package + (list sed grep coreutils findutils gawk)) + (if register-closures? (list guix) '()))) - ;; This variable is unused but allows us to add INPUTS-TO-COPY - ;; as inputs. - (to-register - '#$(map (match-lambda - ((name thing) thing) - ((name thing output) `(,thing ,output))) - inputs))) + ;; This variable is unused but allows us to add INPUTS-TO-COPY + ;; as inputs. + (to-register + '#$(map (match-lambda + ((name thing) thing) + ((name thing output) `(,thing ,output))) + inputs))) - (set-path-environment-variable "PATH" '("bin" "sbin") inputs) + (set-path-environment-variable "PATH" '("bin" "sbin") inputs) - (let* ((graphs '#$(match inputs - (((names . _) ...) - names))) - (initialize (root-partition-initializer - #:closures graphs - #:copy-closures? #$copy-inputs? - #:register-closures? #$register-closures? - #:system-directory #$os-derivation)) - (partitions (list (partition - (size #$(- disk-image-size - (* 10 (expt 2 20)))) - (label #$file-system-label) - (file-system #$file-system-type) - (bootable? #t) - (initializer initialize))))) - (initialize-hard-disk "/dev/vda" - #:partitions partitions - #:grub.cfg #$grub-configuration) - (reboot)))) + (let* ((graphs '#$(match inputs + (((names . _) ...) + names))) + (initialize (root-partition-initializer + #:closures graphs + #:copy-closures? #$copy-inputs? + #:register-closures? #$register-closures? + #:system-directory #$os-derivation)) + (partitions (list (partition + (size #$(- disk-image-size + (* 10 (expt 2 20)))) + (label #$file-system-label) + (file-system #$file-system-type) + (bootable? #t) + (initializer initialize))))) + (initialize-hard-disk "/dev/vda" + #:partitions partitions + #:grub.cfg #$grub-configuration) + (reboot))))) #:system system #:make-disk-image? #t #:disk-image-size disk-image-size diff --git a/gnu/tests.scm b/gnu/tests.scm index ea779ed6f0..8abe6c608b 100644 --- a/gnu/tests.scm +++ b/gnu/tests.scm @@ -27,7 +27,13 @@ (define-module (gnu tests) #:use-module (srfi srfi-1) #:use-module (srfi srfi-9 gnu) #:use-module (ice-9 match) - #:export (marionette-service-type + #:export (marionette-configuration + marionette-configuration? + marionette-configuration-device + marionette-configuration-imported-modules + marionette-configuration-requirements + + marionette-service-type marionette-operating-system define-os-with-source @@ -50,81 +56,93 @@ (define-module (gnu tests) ;;; ;;; Code: -(define (marionette-shepherd-service imported-modules) +(define-record-type* + marionette-configuration make-marionette-configuration + marionette-configuration? + (device marionette-configuration-device ;string + (default "/dev/hvc0")) + (imported-modules marionette-configuration-imported-modules + (default '())) + (requirements marionette-configuration-requirements ;list of symbols + (default '()))) + +(define (marionette-shepherd-service config) "Return the Shepherd service for the marionette REPL" - (define device - "/dev/hvc0") + (match config + (($ device imported-modules requirement) + (list (shepherd-service + (provision '(marionette)) - (list (shepherd-service - (provision '(marionette)) - (requirement '(udev)) ;so that DEVICE is available - (modules '((ice-9 match) - (srfi srfi-9 gnu) - (guix build syscalls) - (rnrs bytevectors))) - (imported-modules `((guix build syscalls) - ,@imported-modules)) - (start - #~(lambda () - (define (clear-echo termios) - (set-field termios (termios-local-flags) - (logand (lognot (local-flags ECHO)) - (termios-local-flags termios)))) + ;; Always depend on UDEV so that DEVICE is available. + (requirement `(udev ,@requirement)) - (define (self-quoting? x) - (letrec-syntax ((one-of (syntax-rules () - ((_) #f) - ((_ pred rest ...) - (or (pred x) - (one-of rest ...)))))) - (one-of symbol? string? pair? null? vector? - bytevector? number? boolean?))) + (modules '((ice-9 match) + (srfi srfi-9 gnu) + (guix build syscalls) + (rnrs bytevectors))) + (start + (with-imported-modules `((guix build syscalls) + ,@imported-modules) + #~(lambda () + (define (clear-echo termios) + (set-field termios (termios-local-flags) + (logand (lognot (local-flags ECHO)) + (termios-local-flags termios)))) - (match (primitive-fork) - (0 - (dynamic-wind - (const #t) - (lambda () - (let* ((repl (open-file #$device "r+0")) - (termios (tcgetattr (fileno repl))) - (console (open-file "/dev/console" "r+0"))) - ;; Don't echo input back. - (tcsetattr (fileno repl) (tcsetattr-action TCSANOW) - (clear-echo termios)) + (define (self-quoting? x) + (letrec-syntax ((one-of (syntax-rules () + ((_) #f) + ((_ pred rest ...) + (or (pred x) + (one-of rest ...)))))) + (one-of symbol? string? pair? null? vector? + bytevector? number? boolean?))) - ;; Redirect output to the console. - (close-fdes 1) - (close-fdes 2) - (dup2 (fileno console) 1) - (dup2 (fileno console) 2) - (close-port console) + (match (primitive-fork) + (0 + (dynamic-wind + (const #t) + (lambda () + (let* ((repl (open-file #$device "r+0")) + (termios (tcgetattr (fileno repl))) + (console (open-file "/dev/console" "r+0"))) + ;; Don't echo input back. + (tcsetattr (fileno repl) (tcsetattr-action TCSANOW) + (clear-echo termios)) - (display 'ready repl) - (let loop () - (newline repl) + ;; Redirect output to the console. + (close-fdes 1) + (close-fdes 2) + (dup2 (fileno console) 1) + (dup2 (fileno console) 2) + (close-port console) - (match (read repl) - ((? eof-object?) - (primitive-exit 0)) - (expr - (catch #t - (lambda () - (let ((result (primitive-eval expr))) - (write (if (self-quoting? result) - result - (object->string result)) - repl))) - (lambda (key . args) - (print-exception (current-error-port) - (stack-ref (make-stack #t) 1) - key args) - (write #f repl))))) - (loop)))) - (lambda () - (primitive-exit 1)))) - (pid - pid)))) - (stop #~(make-kill-destructor))))) + (display 'ready repl) + (let loop () + (newline repl) + + (match (read repl) + ((? eof-object?) + (primitive-exit 0)) + (expr + (catch #t + (lambda () + (let ((result (primitive-eval expr))) + (write (if (self-quoting? result) + result + (object->string result)) + repl))) + (lambda (key . args) + (print-exception (current-error-port) + (stack-ref (make-stack #t) 1) + key args) + (write #f repl))))) + (loop)))) + (lambda () + (primitive-exit 1)))) + (pid + pid))))) + (stop #~(make-kill-destructor))))))) (define marionette-service-type ;; This is the type of the "marionette" service, allowing a guest system to @@ -136,12 +154,19 @@ (define marionette-service-type marionette-shepherd-service))))) (define* (marionette-operating-system os - #:key (imported-modules '())) - "Return a marionetteed variant of OS such that OS can be used as a marionette -in a virtual machine--i.e., controlled from the host system." + #:key + (imported-modules '()) + (requirements '())) + "Return a marionetteed variant of OS such that OS can be used as a +marionette in a virtual machine--i.e., controlled from the host system. The +marionette service in the guest is started after the Shepherd services listed +in REQUIREMENTS." (operating-system (inherit os) - (services (cons (service marionette-service-type imported-modules) + (services (cons (service marionette-service-type + (marionette-configuration + (requirements requirements) + (imported-modules imported-modules))) (operating-system-user-services os))))) (define-syntax define-os-with-source diff --git a/gnu/tests/base.scm b/gnu/tests/base.scm index 4fe779802b..479403e5c1 100644 --- a/gnu/tests/base.scm +++ b/gnu/tests/base.scm @@ -22,10 +22,15 @@ (define-module (gnu tests base) #:use-module (gnu system grub) #:use-module (gnu system file-systems) #:use-module (gnu system shadow) + #:use-module (gnu system nss) #:use-module (gnu system vm) #:use-module (gnu services) + #:use-module (gnu services base) + #:use-module (gnu services dbus) + #:use-module (gnu services avahi) #:use-module (gnu services mcron) #:use-module (gnu services shepherd) + #:use-module (gnu services networking) #:use-module (guix gexp) #:use-module (guix store) #:use-module (guix monads) @@ -33,7 +38,8 @@ (define-module (gnu tests base) #:use-module (srfi srfi-1) #:export (run-basic-test %test-basic-os - %test-mcron)) + %test-mcron + %test-nss-mdns)) (define %simple-os (operating-system @@ -64,104 +70,123 @@ (define* (run-basic-test os command #:optional (name "basic")) using COMMAND, a gexp that evaluates to a list of strings. Compare some properties of running system to what's declared in OS, an ." (define test - #~(begin - (use-modules (gnu build marionette) - (srfi srfi-1) - (srfi srfi-26) - (srfi srfi-64) - (ice-9 match)) + (with-imported-modules '((gnu build marionette)) + #~(begin + (use-modules (gnu build marionette) + (srfi srfi-64) + (ice-9 match)) - (define marionette - (make-marionette #$command)) + (define marionette + (make-marionette #$command)) - (mkdir #$output) - (chdir #$output) + (mkdir #$output) + (chdir #$output) - (test-begin "basic") + (test-begin "mcron") - (test-assert "uname" - (match (marionette-eval '(uname) marionette) - (#("Linux" host-name version _ architecture) - (and (string=? host-name - #$(operating-system-host-name os)) - (string-prefix? #$(package-version - (operating-system-kernel os)) - version) - (string-prefix? architecture %host-type))))) + (test-assert "uname" + (match (marionette-eval '(uname) marionette) + (#("Linux" host-name version _ architecture) + (and (string=? host-name + #$(operating-system-host-name os)) + (string-prefix? #$(package-version + (operating-system-kernel os)) + version) + (string-prefix? architecture %host-type))))) - (test-assert "shell and user commands" - ;; Is everything in $PATH? - (zero? (marionette-eval '(system " + (test-assert "shell and user commands" + ;; Is everything in $PATH? + (zero? (marionette-eval '(system " . /etc/profile set -e -x guix --version ls --version grep --version info --version") - marionette))) + marionette))) - (test-assert "accounts" - (let ((users (marionette-eval '(begin - (use-modules (ice-9 match)) - (let loop ((result '())) - (match (getpw) - (#f (reverse result)) - (x (loop (cons x result)))))) - marionette))) - (lset= string=? - (map passwd:name users) - (list - #$@(map user-account-name - (operating-system-user-accounts os)))))) + (test-assert "accounts" + (let ((users (marionette-eval '(begin + (use-modules (ice-9 match)) + (let loop ((result '())) + (match (getpw) + (#f (reverse result)) + (x (loop (cons x result)))))) + marionette))) + (lset= string=? + (map passwd:name users) + (list + #$@(map user-account-name + (operating-system-user-accounts os)))))) - (test-assert "shepherd services" - (let ((services (marionette-eval '(begin - (use-modules (gnu services herd)) - (call-with-values current-services - append)) - marionette))) - (lset= eq? - (pk 'services services) - '(root #$@(operating-system-shepherd-service-names os))))) + (test-assert "shepherd services" + (let ((services (marionette-eval '(begin + (use-modules (gnu services herd)) + (call-with-values current-services + append)) + marionette))) + (lset= eq? + (pk 'services services) + '(root #$@(operating-system-shepherd-service-names os))))) - (test-equal "login on tty1" - "root\n" - (begin - (marionette-control "sendkey ctrl-alt-f1" marionette) - ;; Wait for the 'term-tty1' service to be running (using - ;; 'start-service' is the simplest and most reliable way to do - ;; that.) + (test-equal "login on tty1" + "root\n" + (begin + (marionette-control "sendkey ctrl-alt-f1" marionette) + ;; Wait for the 'term-tty1' service to be running (using + ;; 'start-service' is the simplest and most reliable way to do + ;; that.) + (marionette-eval + '(begin + (use-modules (gnu services herd)) + (start-service 'term-tty1)) + marionette) + + ;; Now we can type. + (marionette-type "root\n\nid -un > logged-in\n" marionette) + + ;; It can take a while before the shell commands are executed. + (let loop ((i 0)) + (unless (or (file-exists? "/root/logged-in") (> i 15)) + (sleep 1) + (loop (+ i 1)))) + (marionette-eval '(use-modules (rnrs io ports)) marionette) + (marionette-eval '(call-with-input-file "/root/logged-in" + get-string-all) + marionette))) + + (test-assert "host name resolution" + (match (marionette-eval + '(begin + ;; Wait for nscd or our requests go through it. + (use-modules (gnu services herd)) + (start-service 'nscd) + + (list (getaddrinfo "localhost") + (getaddrinfo #$(operating-system-host-name os)))) + marionette) + ((((? vector?) ..1) ((? vector?) ..1)) + #t) + (x + (pk 'failure x #f)))) + + (test-equal "host not found" + #f (marionette-eval - '(begin - (use-modules (gnu services herd)) - (start-service 'term-tty1)) - marionette) + '(false-if-exception (getaddrinfo "does-not-exist")) + marionette)) - ;; Now we can type. - (marionette-type "root\n\nid -un > logged-in\n" marionette) + (test-assert "screendump" + (begin + (marionette-control (string-append "screendump " #$output + "/tty1.ppm") + marionette) + (file-exists? "tty1.ppm"))) - ;; It can take a while before the shell commands are executed. - (let loop ((i 0)) - (unless (or (file-exists? "/root/logged-in") (> i 15)) - (sleep 1) - (loop (+ i 1)))) - (marionette-eval '(use-modules (rnrs io ports)) marionette) - (marionette-eval '(call-with-input-file "/root/logged-in" - get-string-all) - marionette))) + (test-end) + (exit (= (test-runner-fail-count (test-runner-current)) 0))))) - (test-assert "screendump" - (begin - (marionette-control (string-append "screendump " #$output - "/tty1.ppm") - marionette) - (file-exists? "tty1.ppm"))) - - (test-end) - (exit (= (test-runner-fail-count (test-runner-current)) 0)))) - - (gexp->derivation name test - #:modules '((gnu build marionette)))) + (gexp->derivation name test)) (define %test-basic-os (system-test @@ -216,70 +241,207 @@ (define (run-mcron-test name) (command (system-qemu-image/shared-store-script os #:graphic? #f))) (define test - #~(begin - (use-modules (gnu build marionette) - (srfi srfi-64) - (ice-9 match)) + (with-imported-modules '((gnu build marionette)) + #~(begin + (use-modules (gnu build marionette) + (srfi srfi-64) + (ice-9 match)) - (define marionette - (make-marionette (list #$command))) + (define marionette + (make-marionette (list #$command))) - (define (wait-for-file file) - ;; Wait until FILE exists in the guest; 'read' its content and - ;; return it. - (marionette-eval - `(let loop ((i 10)) - (cond ((file-exists? ,file) - (call-with-input-file ,file read)) - ((> i 0) - (sleep 1) - (loop (- i 1))) - (else - (error "file didn't show up" ,file)))) - marionette)) + (define (wait-for-file file) + ;; Wait until FILE exists in the guest; 'read' its content and + ;; return it. + (marionette-eval + `(let loop ((i 10)) + (cond ((file-exists? ,file) + (call-with-input-file ,file read)) + ((> i 0) + (sleep 1) + (loop (- i 1))) + (else + (error "file didn't show up" ,file)))) + marionette)) - (mkdir #$output) - (chdir #$output) + (mkdir #$output) + (chdir #$output) - (test-begin "mcron") + (test-begin "mcron") - (test-eq "service running" - 'running! - (marionette-eval - '(begin - (use-modules (gnu services herd)) - (start-service 'mcron) - 'running!) - marionette)) + (test-eq "service running" + 'running! + (marionette-eval + '(begin + (use-modules (gnu services herd)) + (start-service 'mcron) + 'running!) + marionette)) - ;; Make sure root's mcron job runs, has its cwd set to "/root", and - ;; runs with the right UID/GID. - (test-equal "root's job" - '(0 0) - (wait-for-file "/root/witness")) + ;; Make sure root's mcron job runs, has its cwd set to "/root", and + ;; runs with the right UID/GID. + (test-equal "root's job" + '(0 0) + (wait-for-file "/root/witness")) - ;; Likewise for Alice's job. We cannot know what its GID is since - ;; it's chosen by 'groupadd', but it's strictly positive. - (test-assert "alice's job" - (match (wait-for-file "/home/alice/witness") - ((1000 gid) - (>= gid 100)))) + ;; Likewise for Alice's job. We cannot know what its GID is since + ;; it's chosen by 'groupadd', but it's strictly positive. + (test-assert "alice's job" + (match (wait-for-file "/home/alice/witness") + ((1000 gid) + (>= gid 100)))) - ;; Last, the job that uses a command; allows us to test whether - ;; $PATH is sane. (Note that 'marionette-eval' stringifies objects - ;; that don't have a read syntax, hence the string.) - (test-equal "root's job with command" - "#" - (wait-for-file "/root/witness-touch")) + ;; Last, the job that uses a command; allows us to test whether + ;; $PATH is sane. (Note that 'marionette-eval' stringifies objects + ;; that don't have a read syntax, hence the string.) + (test-equal "root's job with command" + "#" + (wait-for-file "/root/witness-touch")) - (test-end) - (exit (= (test-runner-fail-count (test-runner-current)) 0)))) + (test-end) + (exit (= (test-runner-fail-count (test-runner-current)) 0))))) - (gexp->derivation name test - #:modules '((gnu build marionette))))) + (gexp->derivation name test))) (define %test-mcron (system-test (name "mcron") (description "Make sure the mcron service works as advertised.") (value (run-mcron-test name)))) + + +;;; +;;; Avahi and NSS-mDNS. +;;; + +(define %avahi-os + (operating-system + (inherit %simple-os) + (name-service-switch %mdns-host-lookup-nss) + (services (cons* (avahi-service #:debug? #t) + (dbus-service) + (dhcp-client-service) ;needed for multicast + + ;; Enable heavyweight debugging output. + (modify-services (operating-system-user-services + %simple-os) + (nscd-service-type config + => (nscd-configuration + (inherit config) + (debug-level 3) + (log-file "/dev/console"))) + (syslog-service-type config + => + (plain-file + "syslog.conf" + "*.* /dev/console\n"))))))) + +(define (run-nss-mdns-test) + ;; Test resolution of '.local' names via libc. Start the marionette service + ;; *after* nscd. Failing to do that, libc will try to connect to nscd, + ;; fail, then never try again (see '__nss_not_use_nscd_hosts' in libc), + ;; leading to '.local' resolution failures. + (mlet* %store-monad ((os -> (marionette-operating-system + %avahi-os + #:requirements '(nscd) + #:imported-modules '((gnu services herd) + (guix combinators)))) + (run (system-qemu-image/shared-store-script + os #:graphic? #f))) + (define mdns-host-name + (string-append (operating-system-host-name os) + ".local")) + + (define test + (with-imported-modules '((gnu build marionette)) + #~(begin + (use-modules (gnu build marionette) + (srfi srfi-1) + (srfi srfi-64) + (ice-9 match)) + + (define marionette + (make-marionette (list #$run))) + + (mkdir #$output) + (chdir #$output) + + (test-begin "avahi") + + (test-assert "wait for services" + (marionette-eval + '(begin + (use-modules (gnu services herd)) + + (start-service 'nscd) + + ;; XXX: Work around a race condition in nscd: nscd creates its + ;; PID file before it is listening on its socket. + (let ((sock (socket PF_UNIX SOCK_STREAM 0))) + (let try () + (catch 'system-error + (lambda () + (connect sock AF_UNIX "/var/run/nscd/socket") + (close-port sock) + (format #t "nscd is ready~%")) + (lambda args + (format #t "waiting for nscd...~%") + (usleep 500000) + (try))))) + + ;; Wait for the other useful things. + (start-service 'avahi-daemon) + (start-service 'networking) + + #t) + marionette)) + + (test-equal "avahi-resolve-host-name" + 0 + (marionette-eval + '(system* + "/run/current-system/profile/bin/avahi-resolve-host-name" + "-v" #$mdns-host-name) + marionette)) + + (test-equal "avahi-browse" + 0 + (marionette-eval + '(system* "avahi-browse" "-avt") + marionette)) + + (test-assert "getaddrinfo .local" + ;; Wait for the 'avahi-daemon' service and perform a resolution. + (match (marionette-eval + '(getaddrinfo #$mdns-host-name) + marionette) + (((? vector? addrinfos) ..1) + (pk 'getaddrinfo addrinfos) + (and (any (lambda (ai) + (= AF_INET (addrinfo:fam ai))) + addrinfos) + (any (lambda (ai) + (= AF_INET6 (addrinfo:fam ai))) + addrinfos))))) + + (test-assert "gethostbyname .local" + (match (pk 'gethostbyname + (marionette-eval '(gethostbyname #$mdns-host-name) + marionette)) + ((? vector? result) + (and (string=? (hostent:name result) #$mdns-host-name) + (= (hostent:addrtype result) AF_INET))))) + + + (test-end) + (exit (= (test-runner-fail-count (test-runner-current)) 0))))) + + (gexp->derivation "nss-mdns" test))) + +(define %test-nss-mdns + (system-test + (name "nss-mdns") + (description + "Test Avahi's multicast-DNS implementation, and in particular, test its +glibc name service switch (NSS) module.") + (value (run-nss-mdns-test)))) diff --git a/gnu/tests/install.scm b/gnu/tests/install.scm index 5d893deb4c..4e79fdb294 100644 --- a/gnu/tests/install.scm +++ b/gnu/tests/install.scm @@ -32,7 +32,8 @@ (define-module (gnu tests install) #:use-module (guix grafts) #:use-module (guix gexp) #:use-module (guix utils) - #:export (%test-installed-os)) + #:export (%test-installed-os + %test-encrypted-os)) ;;; Commentary: ;;; @@ -66,8 +67,9 @@ (define-os-with-source (%minimal-os %minimal-os-source) (home-directory "/home/alice")) %base-user-accounts)) (services (cons (service marionette-service-type - '((gnu services herd) - (guix combinators))) + (marionette-configuration + (imported-modules '((gnu services herd) + (guix combinators))))) %base-services)))) (define (operating-system-with-current-guix os) @@ -90,7 +92,33 @@ (define (operating-system-with-gc-roots os roots) (define MiB (expt 2 20)) -(define* (run-install #:key +(define %simple-installation-script + ;; Shell script of a simple installation. + "\ +. /etc/profile +set -e -x +guix --version + +export GUIX_BUILD_OPTIONS=--no-grafts +guix build isc-dhcp +parted --script /dev/vdb mklabel gpt \\ + mkpart primary ext2 1M 3M \\ + mkpart primary ext2 3M 1G \\ + set 1 boot on \\ + set 1 bios_grub on +mkfs.ext4 -L my-root /dev/vdb2 +mount /dev/vdb2 /mnt +df -h /mnt +herd start cow-store /mnt +mkdir /mnt/etc +cp /etc/target-config.scm /mnt/etc/config.scm +guix system init /mnt/etc/config.scm /mnt --no-substitutes +sync +reboot\n") + +(define* (run-install target-os target-os-source + #:key + (script %simple-installation-script) (os (marionette-operating-system ;; Since the image has no network access, use the ;; current Guix so the store items we need are in @@ -102,12 +130,13 @@ (define* (run-install #:key #:imported-modules '((gnu services herd) (guix combinators)))) (target-size (* 1200 MiB))) - "Run the GuixSD installation procedure from OS and return a VM image of -TARGET-SIZE bytes containing the installed system." + "Run SCRIPT (a shell script following the GuixSD installation procedure) in +OS to install TARGET-OS. Return a VM image of TARGET-SIZE bytes containing +the installed system." (mlet* %store-monad ((_ (set-grafting #f)) (system (current-system)) - (target (operating-system-derivation %minimal-os)) + (target (operating-system-derivation target-os)) ;; Since the installation system has no network access, ;; we cheat a little bit by adding TARGET to its GC @@ -118,72 +147,67 @@ (define* (run-install #:key os (list target)) #:disk-image-size (* 1500 MiB)))) (define install - #~(begin - (use-modules (guix build utils) - (gnu build marionette)) + (with-imported-modules '((guix build utils) + (gnu build marionette)) + #~(begin + (use-modules (guix build utils) + (gnu build marionette)) - (set-path-environment-variable "PATH" '("bin") - (list #$qemu-minimal)) + (set-path-environment-variable "PATH" '("bin") + (list #$qemu-minimal)) - (system* "qemu-img" "create" "-f" "qcow2" - #$output #$(number->string target-size)) + (system* "qemu-img" "create" "-f" "qcow2" + #$output #$(number->string target-size)) - (define marionette - (make-marionette - (cons (which #$(qemu-command system)) - (cons* "-no-reboot" "-m" "800" - "-drive" - (string-append "file=" #$image - ",if=virtio,readonly") - "-drive" - (string-append "file=" #$output ",if=virtio") - (if (file-exists? "/dev/kvm") - '("-enable-kvm") - '()))))) + (define marionette + (make-marionette + (cons (which #$(qemu-command system)) + (cons* "-no-reboot" "-m" "800" + "-drive" + (string-append "file=" #$image + ",if=virtio,readonly") + "-drive" + (string-append "file=" #$output ",if=virtio") + (if (file-exists? "/dev/kvm") + '("-enable-kvm") + '()))))) - (pk 'uname (marionette-eval '(uname) marionette)) + (pk 'uname (marionette-eval '(uname) marionette)) - ;; Wait for tty1. - (marionette-eval '(begin - (use-modules (gnu services herd)) - (start 'term-tty1)) - marionette) + ;; Wait for tty1. + (marionette-eval '(begin + (use-modules (gnu services herd)) + (start 'term-tty1)) + marionette) - (marionette-eval '(call-with-output-file "/etc/litl-config.scm" - (lambda (port) - (write '#$%minimal-os-source port))) - marionette) + (marionette-eval '(call-with-output-file "/etc/target-config.scm" + (lambda (port) + (write '#$target-os-source port))) + marionette) - (exit (marionette-eval '(zero? (system " -. /etc/profile -set -e -x; -guix --version -guix gc --list-live | grep isc-dhcp + (exit (marionette-eval '(zero? (system #$script)) + marionette))))) -export GUIX_BUILD_OPTIONS=--no-grafts -guix build isc-dhcp -parted --script /dev/vdb mklabel gpt \\ - mkpart primary ext2 1M 3M \\ - mkpart primary ext2 3M 1G \\ - set 1 boot on \\ - set 1 bios_grub on -mkfs.ext4 -L my-root /dev/vdb2 -ls -l /dev/vdb -mount /dev/vdb2 /mnt -df -h /mnt -herd start cow-store /mnt -mkdir /mnt/etc -cp /etc/litl-config.scm /mnt/etc/config.scm -guix system init /mnt/etc/config.scm /mnt --no-substitutes -sync -reboot\n")) - marionette)))) - - (gexp->derivation "installation" install - #:modules '((guix build utils) - (gnu build marionette))))) + (gexp->derivation "installation" install))) +(define (qemu-command/writable-image image) + "Return as a monadic value the command to run QEMU on a writable copy of +IMAGE, a disk image." + (mlet %store-monad ((system (current-system))) + (return #~(let ((image #$image)) + ;; First we need a writable copy of the image. + (format #t "copying image '~a'...~%" image) + (copy-file image "disk.img") + (chmod "disk.img" #o644) + `(,(string-append #$qemu-minimal "/bin/" + #$(qemu-command system)) + ,@(if (file-exists? "/dev/kvm") + '("-enable-kvm") + '()) + "-no-reboot" "-m" "256" + "-drive" "file=disk.img,if=virtio"))))) + (define %test-installed-os (system-test (name "installed-os") @@ -192,21 +216,89 @@ (define %test-installed-os This test is expensive in terms of CPU and storage usage since we need to build (current-guix) and then store a couple of full system images.") (value - (mlet %store-monad ((image (run-install)) - (system (current-system))) - (run-basic-test %minimal-os - #~(let ((image #$image)) - ;; First we need a writable copy of the image. - (format #t "copying image '~a'...~%" image) - (copy-file image "disk.img") - (chmod "disk.img" #o644) - `(,(string-append #$qemu-minimal "/bin/" - #$(qemu-command system)) - ,@(if (file-exists? "/dev/kvm") - '("-enable-kvm") - '()) - "-no-reboot" "-m" "256" - "-drive" "file=disk.img,if=virtio")) + (mlet* %store-monad ((image (run-install %minimal-os %minimal-os-source)) + (command (qemu-command/writable-image image))) + (run-basic-test %minimal-os command "installed-os"))))) + +(define-os-with-source (%encrypted-root-os %encrypted-root-os-source) + ;; The OS we want to install. + (use-modules (gnu) (gnu tests) (srfi srfi-1)) + + (operating-system + (host-name "liberigilo") + (timezone "Europe/Paris") + (locale "en_US.UTF-8") + + (bootloader (grub-configuration (device "/dev/vdb"))) + (kernel-arguments '("console=ttyS0")) + (file-systems (cons (file-system + (device "/dev/mapper/the-root-device") + (title 'device) + (mount-point "/") + (type "ext4")) + %base-file-systems)) + (mapped-devices (list (mapped-device + (source "REPLACE-WITH-LUKS-UUID") + (target "the-root-device") + (type luks-device-mapping)))) + (users (cons (user-account + (name "charlie") + (group "users") + (home-directory "/home/charlie") + (supplementary-groups '("wheel" "audio" "video"))) + %base-user-accounts)) + (services (cons (service marionette-service-type + (marionette-configuration + (imported-modules '((gnu services herd) + (guix combinators))))) + %base-services)))) + +(define %encrypted-root-installation-script + ;; Shell script of a simple installation. + "\ +. /etc/profile +set -e -x +guix --version + +export GUIX_BUILD_OPTIONS=--no-grafts +ls -l /run/current-system/gc-roots +parted --script /dev/vdb mklabel gpt \\ + mkpart primary ext2 1M 3M \\ + mkpart primary ext2 3M 1G \\ + set 1 boot on \\ + set 1 bios_grub on +echo -n thepassphrase | cryptsetup luksFormat -q /dev/vdb2 - +echo -n thepassphrase | \\ + cryptsetup open --type luks --key-file - /dev/vdb2 the-root-device +mkfs.ext4 -L my-root /dev/mapper/the-root-device +mount LABEL=my-root /mnt +herd start cow-store /mnt +mkdir /mnt/etc +cp /etc/target-config.scm /mnt/etc/config.scm +cat /mnt/etc/config +luks_uuid=`cryptsetup luksUUID /dev/vdb2` +sed -i /mnt/etc/config.scm \\ + -e \"s/\\\"REPLACE-WITH-LUKS-UUID\\\"/(uuid \\\"$luks_uuid\\\")/g\" +guix system build /mnt/etc/config.scm +guix system init /mnt/etc/config.scm /mnt --no-substitutes +sync +reboot\n") + +(define %test-encrypted-os + (system-test + (name "encrypted-root-os") + (description + "Test basic functionality of an OS installed like one would do by hand. +This test is expensive in terms of CPU and storage usage since we need to +build (current-guix) and then store a couple of full system images.") + (value + (mlet* %store-monad ((image (run-install %encrypted-root-os + %encrypted-root-os-source + #:script + %encrypted-root-installation-script)) + (command (qemu-command/writable-image image))) + (run-basic-test %encrypted-root-os command "encrypted-root-os"))))) + ;;; install.scm ends here diff --git a/guix/build/download.scm b/guix/build/download.scm index bd011ce878..103e784bb1 100644 --- a/guix/build/download.scm +++ b/guix/build/download.scm @@ -23,9 +23,11 @@ (define-module (guix build download) #:use-module (web http) #:use-module ((web client) #:hide (open-socket-for-uri)) #:use-module (web response) + #:use-module (guix base64) #:use-module (guix ftp-client) #:use-module (guix build utils) #:use-module (rnrs io ports) + #:use-module (rnrs bytevectors) #:use-module (srfi srfi-1) #:use-module (srfi srfi-11) #:use-module (srfi srfi-19) @@ -598,14 +600,22 @@ (define post-2.0.7? (string>? (version) "2.0.7"))) (define headers - '(;; Some web sites, such as http://dist.schmorp.de, would block you if + `(;; Some web sites, such as http://dist.schmorp.de, would block you if ;; there's no 'User-Agent' header, presumably on the assumption that ;; you're a spammer. So work around that. (User-Agent . "GNU Guile") ;; Some servers, such as https://alioth.debian.org, return "406 Not ;; Acceptable" when not explicitly told that everything is accepted. - (Accept . "*/*"))) + (Accept . "*/*") + + ;; Basic authentication, if needed. + ,@(match (uri-userinfo uri) + ((? string? str) + `((Authorization . ,(string-append "Basic " + (base64-encode + (string->utf8 str)))))) + (_ '())))) (let*-values (((connection) (open-connection-for-uri uri #:timeout timeout)) diff --git a/guix/build/svn.scm b/guix/build/svn.scm index 74fe084da5..31c30edaf5 100644 --- a/guix/build/svn.scm +++ b/guix/build/svn.scm @@ -29,15 +29,22 @@ (define-module (guix build svn) ;;; Code: (define* (svn-fetch url revision directory - #:key (svn-command "svn")) + #:key (svn-command "svn") + (user-name #f) + (password #f)) "Fetch REVISION from URL into DIRECTORY. REVISION must be an integer, and a valid Subversion revision. Return #t on success, #f otherwise." - (and (zero? (system* svn-command "checkout" "--non-interactive" - ;; Trust the server certificate. This is OK as we - ;; verify the checksum later. This can be removed when - ;; ca-certificates package is added. - "--trust-server-cert" "-r" (number->string revision) - url directory)) + (and (zero? (apply system* svn-command + "checkout" "--non-interactive" + ;; Trust the server certificate. This is OK as we + ;; verify the checksum later. This can be removed when + ;; ca-certificates package is added. + "--trust-server-cert" "-r" (number->string revision) + `(,@(if (and user-name password) + (list (string-append "--username=" user-name) + (string-append "--password=" password)) + '()) + ,url ,directory))) (with-directory-excursion directory (begin ;; The contents of '.svn' vary as a function of the current status diff --git a/guix/config.scm.in b/guix/config.scm.in index adffa0cfec..6d42cf233c 100644 --- a/guix/config.scm.in +++ b/guix/config.scm.in @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès +;;; Copyright © 2012, 2013, 2014, 2015, 2016 Ludovic Courtès ;;; ;;; This file is part of GNU Guix. ;;; @@ -27,6 +27,7 @@ (define-module (guix config) %guix-register-program %system %libgcrypt + %libz %nix-instantiate %gzip %bzip2 @@ -72,6 +73,9 @@ (define %system (define %libgcrypt "@LIBGCRYPT@") +(define %libz + "@LIBZ@") + (define %nix-instantiate "@NIX_INSTANTIATE@") diff --git a/guix/cvs-download.scm b/guix/cvs-download.scm index 72478dd2c2..85744c5b55 100644 --- a/guix/cvs-download.scm +++ b/guix/cvs-download.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2014, 2015 Ludovic Courtès +;;; Copyright © 2014, 2015, 2016 Ludovic Courtès ;;; Copyright © 2014 Sree Harsha Totakura ;;; Copyright © 2015 Mark H Weaver ;;; @@ -60,13 +60,15 @@ (define* (cvs-fetch ref hash-algo hash object. The output is expected to have recursive hash HASH of type HASH-ALGO (a symbol). Use NAME as the file name, or a generic name if #f." (define build - #~(begin - (use-modules (guix build cvs)) - (cvs-fetch '#$(cvs-reference-root-directory ref) - '#$(cvs-reference-module ref) - '#$(cvs-reference-revision ref) - #$output - #:cvs-command (string-append #+cvs "/bin/cvs")))) + (with-imported-modules '((guix build cvs) + (guix build utils)) + #~(begin + (use-modules (guix build cvs)) + (cvs-fetch '#$(cvs-reference-root-directory ref) + '#$(cvs-reference-module ref) + '#$(cvs-reference-revision ref) + #$output + #:cvs-command (string-append #+cvs "/bin/cvs"))))) (mlet %store-monad ((guile (package->derivation guile system))) (gexp->derivation (or name "cvs-checkout") build @@ -74,8 +76,6 @@ (define build #:hash-algo hash-algo #:hash hash #:recursive? #t - #:modules '((guix build cvs) - (guix build utils)) #:guile-for-build guile #:local-build? #t))) diff --git a/guix/download.scm b/guix/download.scm index 9b238dcbdf..bcb043ba80 100644 --- a/guix/download.scm +++ b/guix/download.scm @@ -99,27 +99,23 @@ (define %mirrors "http://www.centervenus.com/mirrors/nongnu/" "http://download.savannah.gnu.org/releases-noredirect/") (sourceforge ; https://sourceforge.net/p/forge/documentation/Mirrors/ - "http://prdownloads.sourceforge.net/" - "http://heanet.dl.sourceforge.net/sourceforge/" - "http://dfn.dl.sourceforge.net/sourceforge/" - "http://freefr.dl.sourceforge.net/sourceforge/" - "http://internode.dl.sourceforge.net/sourceforge/" - "http://iweb.dl.sourceforge.net/sourceforge/" - "http://jaist.dl.sourceforge.net/sourceforge/" - "http://kaz.dl.sourceforge.net/sourceforge/" - "http://kent.dl.sourceforge.net/sourceforge/" - "http://liquidtelecom.dl.sourceforge.net/sourceforge/" - "http://nbtelecom.dl.sourceforge.net/sourceforge/" - "http://nchc.dl.sourceforge.net/sourceforge/" - "http://ncu.dl.sourceforge.net/sourceforge/" - "http://netcologne.dl.sourceforge.net/sourceforge/" - "http://netix.dl.sourceforge.net/sourceforge/" - "http://pilotfiber.dl.sourceforge.net/sourceforge/" - "http://superb-sea2.dl.sourceforge.net/sourceforge/" - "http://tenet.dl.sourceforge.net/sourceforge/" - "http://ufpr.dl.sourceforge.net/sourceforge/" - "http://vorboss.dl.sourceforge.net/sourceforge/" - "http://netassist.dl.sourceforge.net/sourceforge/") + "http://ufpr.dl.sourceforge.net/project/" + "http://heanet.dl.sourceforge.net/project/" + "http://freefr.dl.sourceforge.net/project/" + "http://internode.dl.sourceforge.net/project/" + "http://jaist.dl.sourceforge.net/project/" + "http://kent.dl.sourceforge.net/project/" + "http://liquidtelecom.dl.sourceforge.net/project/" + "http://nbtelecom.dl.sourceforge.net/project/" + "http://nchc.dl.sourceforge.net/project/" + "http://ncu.dl.sourceforge.net/project/" + "http://netcologne.dl.sourceforge.net/project/" + "http://netix.dl.sourceforge.net/project/" + "http://pilotfiber.dl.sourceforge.net/project/" + "http://superb-sea2.dl.sourceforge.net/project/" + "http://tenet.dl.sourceforge.net/project/" + "http://vorboss.dl.sourceforge.net/project/" + "http://netassist.dl.sourceforge.net/project/") (kernel.org "http://www.all.kernel.org/pub/" "http://ramses.wh2.tu-dresden.de/pub/mirrors/kernel.org/" @@ -168,7 +164,7 @@ (define %mirrors "http://x.cs.pu.edu.tw/" "ftp://ftp.is.co.za/pub/x.org") ; South Africa (cpan ; from http://www.cpan.org/SITES.html - "http://cpan.enstimac.fr/" + "http://mirror.ibcp.fr/pub/CPAN/" "ftp://ftp.ciril.fr/pub/cpan/" "ftp://artfiles.org/cpan.org/" "http://www.cpan.org/" @@ -286,33 +282,39 @@ (define need-gnutls? (any https? url))))) (define builder - #~(begin - #+(if need-gnutls? + (with-imported-modules '((guix build download) + (guix build utils) + (guix ftp-client) + (guix base32) + (guix base64)) + #~(begin + #+(if need-gnutls? - ;; Add GnuTLS to the inputs and to the load path. - #~(eval-when (load expand eval) - (set! %load-path - (cons (string-append #+(gnutls-package) - "/share/guile/site/" - (effective-version)) - %load-path))) - #~#t) + ;; Add GnuTLS to the inputs and to the load path. + #~(eval-when (load expand eval) + (set! %load-path + (cons (string-append #+(gnutls-package) + "/share/guile/site/" + (effective-version)) + %load-path))) + #~#t) - (use-modules (guix build download) - (guix base32)) + (use-modules (guix build download) + (guix base32)) - (let ((value-from-environment (lambda (variable) - (call-with-input-string - (getenv variable) - read)))) - (url-fetch (value-from-environment "guix download url") - #$output - #:mirrors (call-with-input-file #$%mirror-file read) + (let ((value-from-environment (lambda (variable) + (call-with-input-string + (getenv variable) + read)))) + (url-fetch (value-from-environment "guix download url") + #$output + #:mirrors (call-with-input-file #$%mirror-file read) - ;; Content-addressed mirrors. - #:hashes (value-from-environment "guix download hashes") - #:content-addressed-mirrors - (primitive-load #$%content-addressed-mirror-file))))) + ;; Content-addressed mirrors. + #:hashes + (value-from-environment "guix download hashes") + #:content-addressed-mirrors + (primitive-load #$%content-addressed-mirror-file)))))) (let ((uri (and (string? url) (string->uri url)))) (if (or (and (string? url) (not uri)) @@ -325,10 +327,6 @@ (define builder #:system system #:hash-algo hash-algo #:hash hash - #:modules '((guix build download) - (guix build utils) - (guix ftp-client) - (guix base32)) ;; Use environment variables and a fixed script ;; name so there's only one script in store for diff --git a/guix/gexp.scm b/guix/gexp.scm index b929b79c26..302879fb42 100644 --- a/guix/gexp.scm +++ b/guix/gexp.scm @@ -29,6 +29,7 @@ (define-module (guix gexp) #:use-module (ice-9 match) #:export (gexp gexp? + with-imported-modules gexp-input gexp-input? @@ -49,14 +50,12 @@ (define-module (guix gexp) computed-file? computed-file-name computed-file-gexp - computed-file-modules computed-file-options program-file program-file? program-file-name program-file-gexp - program-file-modules program-file-guile scheme-file @@ -98,11 +97,11 @@ (define-module (guix gexp) ;; "G expressions". (define-record-type - (make-gexp references natives proc) + (make-gexp references modules proc) gexp? - (references gexp-references) ; ((DRV-OR-PKG OUTPUT) ...) - (natives gexp-native-references) ; ((DRV-OR-PKG OUTPUT) ...) - (proc gexp-proc)) ; procedure + (references gexp-references) ;list of + (modules gexp-self-modules) ;list of module names + (proc gexp-proc)) ;procedure (define (write-gexp gexp port) "Write GEXP on PORT." @@ -113,8 +112,7 @@ (define (write-gexp gexp port) ;; tries to use 'append' on that, which fails with wrong-type-arg. (false-if-exception (write (apply (gexp-proc gexp) - (append (gexp-references gexp) - (gexp-native-references gexp))) + (gexp-references gexp)) port)) (format port " ~a>" (number->string (object-address gexp) 16))) @@ -273,55 +271,49 @@ (define-gexp-compiler (plain-file-compiler (file plain-file?) system target) (text-file name content references)))) (define-record-type - (%computed-file name gexp modules options) + (%computed-file name gexp options) computed-file? (name computed-file-name) ;string (gexp computed-file-gexp) ;gexp - (modules computed-file-modules) ;list of module names (options computed-file-options)) ;list of arguments (define* (computed-file name gexp - #:key (modules '()) (options '(#:local-build? #t))) + #:key (options '(#:local-build? #t))) "Return an object representing the store item NAME, a file or directory -computed by GEXP. MODULES specifies the set of modules visible in the -execution context of GEXP. OPTIONS is a list of additional arguments to pass +computed by GEXP. OPTIONS is a list of additional arguments to pass to 'gexp->derivation'. This is the declarative counterpart of 'gexp->derivation'." - (%computed-file name gexp modules options)) + (%computed-file name gexp options)) (define-gexp-compiler (computed-file-compiler (file computed-file?) system target) ;; Compile FILE by returning a derivation whose build expression is its ;; gexp. (match file - (($ name gexp modules options) - (apply gexp->derivation name gexp #:modules modules options)))) + (($ name gexp options) + (apply gexp->derivation name gexp options)))) (define-record-type - (%program-file name gexp modules guile) + (%program-file name gexp guile) program-file? (name program-file-name) ;string (gexp program-file-gexp) ;gexp - (modules program-file-modules) ;list of module names (guile program-file-guile)) ;package -(define* (program-file name gexp - #:key (modules '()) (guile #f)) +(define* (program-file name gexp #:key (guile #f)) "Return an object representing the executable store item NAME that runs -GEXP. GUILE is the Guile package used to execute that script, and MODULES is -the list of modules visible to that script. +GEXP. GUILE is the Guile package used to execute that script. This is the declarative counterpart of 'gexp->script'." - (%program-file name gexp modules guile)) + (%program-file name gexp guile)) (define-gexp-compiler (program-file-compiler (file program-file?) system target) ;; Compile FILE by returning a derivation that builds the script. (match file - (($ name gexp modules guile) + (($ name gexp guile) (gexp->script name gexp - #:modules modules #:guile (or guile (default-guile)))))) (define-record-type @@ -386,6 +378,23 @@ (define (write-gexp-output output port) (set-record-type-printer! write-gexp-output) +(define (gexp-modules gexp) + "Return the list of Guile module names GEXP relies on." + (delete-duplicates + (append (gexp-self-modules gexp) + (append-map (match-lambda + (($ (? gexp? exp)) + (gexp-modules exp)) + (($ (lst ...)) + (append-map (lambda (item) + (if (gexp? item) + (gexp-modules item) + '())) + lst)) + (_ + '())) + (gexp-references gexp))))) + (define raw-derivation (store-lift derivation)) @@ -467,7 +476,8 @@ (define* (gexp->derivation name exp TARGET is true, it is used as the cross-compilation target triplet for packages referred to by EXP. -Make MODULES available in the evaluation context of EXP; MODULES is a list of +MODULES is deprecated in favor of 'with-imported-modules'. Its meaning is to +make MODULES available in the evaluation context of EXP; MODULES is a list of names of Guile modules searched in MODULE-PATH to be copied in the store, compiled, and made available in the load path during the execution of EXP---e.g., '((guix build utils) (guix build gnu-build-system)). @@ -496,7 +506,9 @@ (define* (gexp->derivation name exp referenced by the outputs. The other arguments are as for 'derivation'." - (define %modules modules) + (define %modules + (delete-duplicates + (append modules (gexp-modules exp)))) (define outputs (gexp-outputs exp)) (define (graphs-file-names graphs) @@ -630,11 +642,15 @@ (define (add-reference-inputs ref result) ;; Ignore references to other kinds of objects. result))) + (define (native-input? x) + (and (gexp-input? x) + (gexp-input-native? x))) + (fold-right add-reference-inputs '() (if native? - (gexp-native-references exp) - (gexp-references exp)))) + (filter native-input? (gexp-references exp)) + (remove native-input? (gexp-references exp))))) (define gexp-native-inputs (cut gexp-inputs <> #:native? #t)) @@ -687,7 +703,7 @@ (define* (reference->sexp ref #:optional native?) (if (gexp-input? ref) ref (%gexp-input ref "out" n?)) - native?)) + (or n? native?))) refs))) (($ (? struct? thing) output n?) (let ((target (if (or n? native?) #f target))) @@ -706,9 +722,7 @@ (define* (reference->sexp ref #:optional native?) (mlet %store-monad ((args (sequence %store-monad - (append (map reference->sexp (gexp-references exp)) - (map (cut reference->sexp <> #t) - (gexp-native-references exp)))))) + (map reference->sexp (gexp-references exp))))) (return (apply (gexp-proc exp) args)))) (define (syntax-location-string s) @@ -724,6 +738,17 @@ (define (syntax-location-string s) (simple-format #f "~a:~a" line column))) ""))) +(define-syntax-parameter current-imported-modules + ;; Current list of imported modules. + (identifier-syntax '())) + +(define-syntax-rule (with-imported-modules modules body ...) + "Mark the gexps defined in BODY... as requiring MODULES in their execution +environment." + (syntax-parameterize ((current-imported-modules + (identifier-syntax modules))) + body ...)) + (define-syntax gexp (lambda (s) (define (collect-escapes exp) @@ -741,33 +766,9 @@ (define (collect-escapes exp) ((ungexp-splicing _ ...) (cons exp result)) ((ungexp-native _ ...) - result) - ((ungexp-native-splicing _ ...) - result) - ((exp0 exp ...) - (let ((result (loop #'exp0 result))) - (fold loop result #'(exp ...)))) - (_ - result)))) - - (define (collect-native-escapes exp) - ;; Return all the 'ungexp-native' forms present in EXP. - (let loop ((exp exp) - (result '())) - (syntax-case exp (ungexp - ungexp-splicing - ungexp-native - ungexp-native-splicing) - ((ungexp-native _) - (cons exp result)) - ((ungexp-native _ _) (cons exp result)) ((ungexp-native-splicing _ ...) (cons exp result)) - ((ungexp _ ...) - result) - ((ungexp-splicing _ ...) - result) ((exp0 exp ...) (let ((result (loop #'exp0 result))) (fold loop result #'(exp ...)))) @@ -838,14 +839,12 @@ (define (substitute-references exp substs) (syntax-case s (ungexp output) ((_ exp) - (let* ((normals (delete-duplicates (collect-escapes #'exp))) - (natives (delete-duplicates (collect-native-escapes #'exp))) - (escapes (append normals natives)) + (let* ((escapes (delete-duplicates (collect-escapes #'exp))) (formals (generate-temporaries escapes)) (sexp (substitute-references #'exp (zip escapes formals))) - (refs (map escape->ref normals)) - (nrefs (map escape->ref natives))) - #`(make-gexp (list #,@refs) (list #,@nrefs) + (refs (map escape->ref escapes))) + #`(make-gexp (list #,@refs) + current-imported-modules (lambda #,formals #,sexp))))))) @@ -983,12 +982,24 @@ (define (default-guile) (module-ref (resolve-interface '(gnu packages commencement)) 'guile-final)) -(define* (gexp->script name exp - #:key (modules '()) (guile (default-guile))) - "Return an executable script NAME that runs EXP using GUILE with MODULES in -its search path." +(define (load-path-expression modules) + "Return as a monadic value a gexp that sets '%load-path' and +'%load-compiled-path' to point to MODULES, a list of module names." (mlet %store-monad ((modules (imported-modules modules)) (compiled (compiled-modules modules))) + (return (gexp (eval-when (expand load eval) + (set! %load-path + (cons (ungexp modules) %load-path)) + (set! %load-compiled-path + (cons (ungexp compiled) + %load-compiled-path))))))) + +(define* (gexp->script name exp + #:key (guile (default-guile))) + "Return an executable script NAME that runs EXP using GUILE, with EXP's +imported modules in its search path." + (mlet %store-monad ((set-load-path + (load-path-expression (gexp-modules exp)))) (gexp->derivation name (gexp (call-with-output-file (ungexp output) @@ -1001,28 +1012,33 @@ (define* (gexp->script name exp "#!~a/bin/guile --no-auto-compile~%!#~%" (ungexp guile)) - ;; Write the 'eval-when' form so that it can be - ;; compiled. - (write - '(eval-when (expand load eval) - (set! %load-path - (cons (ungexp modules) %load-path)) - (set! %load-compiled-path - (cons (ungexp compiled) - %load-compiled-path))) - port) + (write '(ungexp set-load-path) port) (write '(ungexp exp) port) (chmod port #o555))))))) -(define (gexp->file name exp) - "Return a derivation that builds a file NAME containing EXP." - (gexp->derivation name - (gexp - (call-with-output-file (ungexp output) - (lambda (port) - (write '(ungexp exp) port)))) - #:local-build? #t - #:substitutable? #f)) +(define* (gexp->file name exp #:key (set-load-path? #t)) + "Return a derivation that builds a file NAME containing EXP. When +SET-LOAD-PATH? is true, emit code in the resulting file to set '%load-path' +and '%load-compiled-path' to honor EXP's imported modules." + (match (if set-load-path? (gexp-modules exp) '()) + (() ;zero modules + (gexp->derivation name + (gexp + (call-with-output-file (ungexp output) + (lambda (port) + (write '(ungexp exp) port)))) + #:local-build? #t + #:substitutable? #f)) + ((modules ...) + (mlet %store-monad ((set-load-path (load-path-expression modules))) + (gexp->derivation name + (gexp + (call-with-output-file (ungexp output) + (lambda (port) + (write '(ungexp set-load-path) port) + (write '(ungexp exp) port)))) + #:local-build? #t + #:substitutable? #f))))) (define* (text-file* name #:rest text) "Return as a monadic value a derivation that builds a text file containing diff --git a/guix/git-download.scm b/guix/git-download.scm index 1e5c845e34..9cc6dd3d94 100644 --- a/guix/git-download.scm +++ b/guix/git-download.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2014, 2015 Ludovic Courtès +;;; Copyright © 2014, 2015, 2016 Ludovic Courtès ;;; ;;; This file is part of GNU Guix. ;;; @@ -68,23 +68,25 @@ (define inputs '())) (define build - #~(begin - (use-modules (guix build git) - (guix build utils) - (ice-9 match)) + (with-imported-modules '((guix build git) + (guix build utils)) + #~(begin + (use-modules (guix build git) + (guix build utils) + (ice-9 match)) - ;; The 'git submodule' commands expects Coreutils, sed, - ;; grep, etc. to be in $PATH. - (set-path-environment-variable "PATH" '("bin") - (match '#+inputs - (((names dirs) ...) - dirs))) + ;; The 'git submodule' commands expects Coreutils, sed, + ;; grep, etc. to be in $PATH. + (set-path-environment-variable "PATH" '("bin") + (match '#+inputs + (((names dirs) ...) + dirs))) - (git-fetch '#$(git-reference-url ref) - '#$(git-reference-commit ref) - #$output - #:recursive? '#$(git-reference-recursive? ref) - #:git-command (string-append #+git "/bin/git")))) + (git-fetch '#$(git-reference-url ref) + '#$(git-reference-commit ref) + #$output + #:recursive? '#$(git-reference-recursive? ref) + #:git-command (string-append #+git "/bin/git"))))) (mlet %store-monad ((guile (package->derivation guile system))) (gexp->derivation (or name "git-checkout") build @@ -93,8 +95,6 @@ (define build #:hash-algo hash-algo #:hash hash #:recursive? #t - #:modules '((guix build git) - (guix build utils)) #:guile-for-build guile #:local-build? #t))) diff --git a/guix/hg-download.scm b/guix/hg-download.scm index f3e1d2906a..8420980905 100644 --- a/guix/hg-download.scm +++ b/guix/hg-download.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2014, 2015 Ludovic Courtès +;;; Copyright © 2014, 2015, 2016 Ludovic Courtès ;;; Copyright © 2016 Ricardo Wurmus ;;; ;;; This file is part of GNU Guix. @@ -60,15 +60,17 @@ (define* (hg-fetch ref hash-algo hash object. The output is expected to have recursive hash HASH of type HASH-ALGO (a symbol). Use NAME as the file name, or a generic name if #f." (define build - #~(begin - (use-modules (guix build hg) - (guix build utils) - (ice-9 match)) + (with-imported-modules '((guix build hg) + (guix build utils)) + #~(begin + (use-modules (guix build hg) + (guix build utils) + (ice-9 match)) - (hg-fetch '#$(hg-reference-url ref) - '#$(hg-reference-changeset ref) - #$output - #:hg-command (string-append #+hg "/bin/hg")))) + (hg-fetch '#$(hg-reference-url ref) + '#$(hg-reference-changeset ref) + #$output + #:hg-command (string-append #+hg "/bin/hg"))))) (mlet %store-monad ((guile (package->derivation guile system))) (gexp->derivation (or name "hg-checkout") build @@ -77,8 +79,6 @@ (define build #:hash-algo hash-algo #:hash hash #:recursive? #t - #:modules '((guix build hg) - (guix build utils)) #:guile-for-build guile))) ;;; hg-download.scm ends here diff --git a/guix/import/cpan.scm b/guix/import/cpan.scm index ad61ee7916..213a155fd6 100644 --- a/guix/import/cpan.scm +++ b/guix/import/cpan.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014 Eric Bavier ;;; Copyright © 2015 Mark H Weaver +;;; Copyright © 2016 Alex Sassmannshausen ;;; ;;; This file is part of GNU Guix. ;;; @@ -99,6 +100,13 @@ (define (cpan-fetch module) (define (cpan-home name) (string-append "http://search.cpan.org/dist/" name)) +(define (fix-source-url download-url) + "Return a new download URL based on DOWNLOAD-URL which now uses our mirrors, +if the original's domain was metacpan." + (regexp-substitute/global #f "http[s]?://cpan.metacpan.org" download-url + 'pre "mirror://cpan" 'post)) + + (define %corelist (delay (let* ((perl (with-store store @@ -183,10 +191,7 @@ (define (maybe-inputs guix-name inputs) (list (list guix-name (list 'quasiquote inputs)))))) - (define source-url - (regexp-substitute/global #f "http://cpan.metacpan.org" - (assoc-ref meta "download_url") - 'pre "mirror://cpan" 'post)) + (define source-url (fix-source-url (assoc-ref meta "download_url"))) (let ((tarball (with-store store (download-to-store store source-url)))) diff --git a/guix/packages.scm b/guix/packages.scm index acb8f34417..bfb4c557ab 100644 --- a/guix/packages.scm +++ b/guix/packages.scm @@ -56,7 +56,6 @@ (define-module (guix packages) origin-patch-guile origin-snippet origin-modules - origin-imported-modules base32 package @@ -164,8 +163,7 @@ (define-record-type* (default #f)) (modules origin-modules ; list of module names (default '())) - (imported-modules origin-imported-modules ; list of module names - (default '())) + (patch-guile origin-patch-guile ; package or #f (default #f))) @@ -381,14 +379,13 @@ (define* (patch-and-repack source patches (snippet #f) (flags '("-p1")) (modules '()) - (imported-modules '()) (guile-for-build (%guile-for-build)) (system (%current-system))) "Unpack SOURCE (a derivation or store path), apply all of PATCHES, and repack the tarball using the tools listed in INPUTS. When SNIPPET is true, it must be an s-expression that will run from within the directory where -SOURCE was unpacked, after all of PATCHES have been applied. MODULES and -IMPORTED-MODULES specify modules to use/import for use by SNIPPET." +SOURCE was unpacked, after all of PATCHES have been applied. MODULES +specifies modules in scope when evaluating SNIPPET." (define source-file-name ;; SOURCE is usually a derivation, but it could be a store file. (if (derivation? source) @@ -449,107 +446,107 @@ (define instantiate-patch (patches (sequence %store-monad (map instantiate-patch patches)))) (define build - #~(begin - (use-modules (ice-9 ftw) - (srfi srfi-1) - (guix build utils)) + (with-imported-modules '((guix build utils)) + #~(begin + (use-modules (ice-9 ftw) + (srfi srfi-1) + (guix build utils)) - ;; The --sort option was added to GNU tar in version 1.28, released - ;; 2014-07-28. During bootstrap we must cope with older versions. - (define tar-supports-sort? - (zero? (system* (string-append #+tar "/bin/tar") - "cf" "/dev/null" "--files-from=/dev/null" - "--sort=name"))) + ;; The --sort option was added to GNU tar in version 1.28, released + ;; 2014-07-28. During bootstrap we must cope with older versions. + (define tar-supports-sort? + (zero? (system* (string-append #+tar "/bin/tar") + "cf" "/dev/null" "--files-from=/dev/null" + "--sort=name"))) - (define (apply-patch patch) - (format (current-error-port) "applying '~a'...~%" patch) + (define (apply-patch patch) + (format (current-error-port) "applying '~a'...~%" patch) - ;; Use '--force' so that patches that do not apply perfectly are - ;; rejected. - (zero? (system* (string-append #+patch "/bin/patch") - "--force" #+@flags "--input" patch))) + ;; Use '--force' so that patches that do not apply perfectly are + ;; rejected. + (zero? (system* (string-append #+patch "/bin/patch") + "--force" #+@flags "--input" patch))) - (define (first-file directory) - ;; Return the name of the first file in DIRECTORY. - (car (scandir directory - (lambda (name) - (not (member name '("." ".."))))))) + (define (first-file directory) + ;; Return the name of the first file in DIRECTORY. + (car (scandir directory + (lambda (name) + (not (member name '("." ".."))))))) - ;; Encoding/decoding errors shouldn't be silent. - (fluid-set! %default-port-conversion-strategy 'error) + ;; Encoding/decoding errors shouldn't be silent. + (fluid-set! %default-port-conversion-strategy 'error) - (when #+locales - ;; First of all, install a UTF-8 locale so that UTF-8 file names - ;; are correctly interpreted. During bootstrap, LOCALES is #f. - (setenv "LOCPATH" - (string-append #+locales "/lib/locale/" - #+(and locales - (package-version locales)))) - (setlocale LC_ALL "en_US.utf8")) + (when #+locales + ;; First of all, install a UTF-8 locale so that UTF-8 file names + ;; are correctly interpreted. During bootstrap, LOCALES is #f. + (setenv "LOCPATH" + (string-append #+locales "/lib/locale/" + #+(and locales + (package-version locales)))) + (setlocale LC_ALL "en_US.utf8")) - (setenv "PATH" (string-append #+xz "/bin" ":" - #+decomp "/bin")) + (setenv "PATH" (string-append #+xz "/bin" ":" + #+decomp "/bin")) - ;; SOURCE may be either a directory or a tarball. - (and (if (file-is-directory? #+source) - (let* ((store (%store-directory)) - (len (+ 1 (string-length store))) - (base (string-drop #+source len)) - (dash (string-index base #\-)) - (directory (string-drop base (+ 1 dash)))) - (mkdir directory) - (copy-recursively #+source directory) - #t) - #+(if (string=? decompression-type "unzip") - #~(zero? (system* "unzip" #+source)) - #~(zero? (system* (string-append #+tar "/bin/tar") - "xvf" #+source)))) - (let ((directory (first-file "."))) - (format (current-error-port) - "source is under '~a'~%" directory) - (chdir directory) + ;; SOURCE may be either a directory or a tarball. + (and (if (file-is-directory? #+source) + (let* ((store (%store-directory)) + (len (+ 1 (string-length store))) + (base (string-drop #+source len)) + (dash (string-index base #\-)) + (directory (string-drop base (+ 1 dash)))) + (mkdir directory) + (copy-recursively #+source directory) + #t) + #+(if (string=? decompression-type "unzip") + #~(zero? (system* "unzip" #+source)) + #~(zero? (system* (string-append #+tar "/bin/tar") + "xvf" #+source)))) + (let ((directory (first-file "."))) + (format (current-error-port) + "source is under '~a'~%" directory) + (chdir directory) - (and (every apply-patch '#+patches) - #+@(if snippet - #~((let ((module (make-fresh-user-module))) - (module-use-interfaces! module - (map resolve-interface - '#+modules)) - ((@ (system base compile) compile) - '#+snippet - #:to 'value - #:opts %auto-compilation-options - #:env module))) - #~()) + (and (every apply-patch '#+patches) + #+@(if snippet + #~((let ((module (make-fresh-user-module))) + (module-use-interfaces! + module + (map resolve-interface '#+modules)) + ((@ (system base compile) compile) + '#+snippet + #:to 'value + #:opts %auto-compilation-options + #:env module))) + #~()) - (begin (chdir "..") #t) + (begin (chdir "..") #t) - (unless tar-supports-sort? - (call-with-output-file ".file_list" - (lambda (port) - (for-each (lambda (name) (format port "~a~%" name)) - (find-files directory - #:directories? #t - #:fail-on-error? #t))))) - (zero? (apply system* (string-append #+tar "/bin/tar") - "cvfa" #$output - ;; avoid non-determinism in the archive - "--mtime=@0" - "--owner=root:0" - "--group=root:0" - (if tar-supports-sort? - `("--sort=name" - ,directory) - '("--no-recursion" - "--files-from=.file_list"))))))))) + (unless tar-supports-sort? + (call-with-output-file ".file_list" + (lambda (port) + (for-each (lambda (name) + (format port "~a~%" name)) + (find-files directory + #:directories? #t + #:fail-on-error? #t))))) + (zero? (apply system* + (string-append #+tar "/bin/tar") + "cvfa" #$output + ;; avoid non-determinism in the archive + "--mtime=@0" + "--owner=root:0" + "--group=root:0" + (if tar-supports-sort? + `("--sort=name" + ,directory) + '("--no-recursion" + "--files-from=.file_list")))))))))) - (let ((name (tarxz-name original-file-name)) - (modules (delete-duplicates (cons '(guix build utils) - imported-modules)))) + (let ((name (tarxz-name original-file-name))) (gexp->derivation name build #:graft? #f #:system system - #:modules modules #:guile-for-build guile-for-build)))) (define (transitive-inputs inputs) @@ -1138,8 +1135,7 @@ (define* (origin->derivation origin ;; No patches, no snippet: this is a fixed-output derivation. (method uri 'sha256 sha256 name #:system system)) (($ uri method sha256 name (= force (patches ...)) snippet - (flags ...) inputs (modules ...) (imported-modules ...) - guile-for-build) + (flags ...) inputs (modules ...) guile-for-build) ;; Patches and/or a snippet. (mlet %store-monad ((source (method uri 'sha256 sha256 name #:system system)) @@ -1153,7 +1149,6 @@ (define* (origin->derivation origin #:flags flags #:system system #:modules modules - #:imported-modules imported-modules #:guile-for-build guile))))) (define-gexp-compiler (origin-compiler (origin origin?) system target) diff --git a/guix/profiles.scm b/guix/profiles.scm index 90c43325a0..77df6ad185 100644 --- a/guix/profiles.scm +++ b/guix/profiles.scm @@ -489,87 +489,87 @@ (define gzip ;lazy reference (module-ref (resolve-interface '(gnu packages compression)) 'gzip)) (define build - #~(begin - (use-modules (guix build utils) - (srfi srfi-1) (srfi srfi-26) - (ice-9 ftw)) + (with-imported-modules '((guix build utils)) + #~(begin + (use-modules (guix build utils) + (srfi srfi-1) (srfi srfi-26) + (ice-9 ftw)) - (define (info-file? file) - (or (string-suffix? ".info" file) - (string-suffix? ".info.gz" file))) + (define (info-file? file) + (or (string-suffix? ".info" file) + (string-suffix? ".info.gz" file))) - (define (info-files top) - (let ((infodir (string-append top "/share/info"))) - (map (cut string-append infodir "/" <>) - (or (scandir infodir info-file?) '())))) + (define (info-files top) + (let ((infodir (string-append top "/share/info"))) + (map (cut string-append infodir "/" <>) + (or (scandir infodir info-file?) '())))) - (define (install-info info) - (setenv "PATH" (string-append #+gzip "/bin")) ;for info.gz files - (zero? - (system* (string-append #+texinfo "/bin/install-info") "--silent" - info (string-append #$output "/share/info/dir")))) + (define (install-info info) + (setenv "PATH" (string-append #+gzip "/bin")) ;for info.gz files + (zero? + (system* (string-append #+texinfo "/bin/install-info") "--silent" + info (string-append #$output "/share/info/dir")))) - (mkdir-p (string-append #$output "/share/info")) - (exit (every install-info - (append-map info-files - '#$(manifest-inputs manifest)))))) + (mkdir-p (string-append #$output "/share/info")) + (exit (every install-info + (append-map info-files + '#$(manifest-inputs manifest))))))) (gexp->derivation "info-dir" build - #:modules '((guix build utils)) #:local-build? #t #:substitutable? #f)) (define (ghc-package-cache-file manifest) "Return a derivation that builds the GHC 'package.cache' file for all the entries of MANIFEST, or #f if MANIFEST does not have any GHC packages." - (define ghc ;lazy reference + (define ghc ;lazy reference (module-ref (resolve-interface '(gnu packages haskell)) 'ghc)) (define build - #~(begin - (use-modules (guix build utils) - (srfi srfi-1) (srfi srfi-26) - (ice-9 ftw)) + (with-imported-modules '((guix build utils)) + #~(begin + (use-modules (guix build utils) + (srfi srfi-1) (srfi srfi-26) + (ice-9 ftw)) - (define ghc-name-version - (let* ((base (basename #+ghc))) - (string-drop base - (+ 1 (string-index base #\-))))) + (define ghc-name-version + (let* ((base (basename #+ghc))) + (string-drop base + (+ 1 (string-index base #\-))))) - (define db-subdir - (string-append "lib/" ghc-name-version "/package.conf.d")) + (define db-subdir + (string-append "lib/" ghc-name-version "/package.conf.d")) - (define db-dir - (string-append #$output "/" db-subdir)) + (define db-dir + (string-append #$output "/" db-subdir)) - (define (conf-files top) - (let ((db (string-append top "/" db-subdir))) - (if (file-exists? db) - (find-files db "\\.conf$") - '()))) + (define (conf-files top) + (let ((db (string-append top "/" db-subdir))) + (if (file-exists? db) + (find-files db "\\.conf$") + '()))) - (define (copy-conf-file conf) - (let ((base (basename conf))) - (copy-file conf (string-append db-dir "/" base)))) + (define (copy-conf-file conf) + (let ((base (basename conf))) + (copy-file conf (string-append db-dir "/" base)))) - (system* (string-append #+ghc "/bin/ghc-pkg") "init" db-dir) - (for-each copy-conf-file - (append-map conf-files - (delete-duplicates - '#$(manifest-inputs manifest)))) - (let ((success - (zero? - (system* (string-append #+ghc "/bin/ghc-pkg") "recache" - (string-append "--package-db=" db-dir))))) - (for-each delete-file (find-files db-dir "\\.conf$")) - (exit success)))) + (system* (string-append #+ghc "/bin/ghc-pkg") "init" db-dir) + (for-each copy-conf-file + (append-map conf-files + (delete-duplicates + '#$(manifest-inputs manifest)))) + (let ((success + (zero? + (system* (string-append #+ghc "/bin/ghc-pkg") "recache" + (string-append "--package-db=" db-dir))))) + (for-each delete-file (find-files db-dir "\\.conf$")) + (exit success))))) (with-monad %store-monad ;; Don't depend on GHC when there's nothing to do. (if (any (cut string-prefix? "ghc" <>) (map manifest-entry-name (manifest-entries manifest))) (gexp->derivation "ghc-package-cache" build - #:modules '((guix build utils)) #:local-build? #t #:substitutable? #f) (return #f)))) @@ -585,58 +585,58 @@ (define glibc-utf8-locales ;lazy reference (module-ref (resolve-interface '(gnu packages base)) 'glibc-utf8-locales)) (define build - #~(begin - (use-modules (guix build utils) - (rnrs io ports) - (srfi srfi-1) - (srfi srfi-26) - (ice-9 ftw) - (ice-9 match)) + (with-imported-modules '((guix build utils)) + #~(begin + (use-modules (guix build utils) + (rnrs io ports) + (srfi srfi-1) + (srfi srfi-26) + (ice-9 ftw) + (ice-9 match)) - (define (pem-file? file) - (string-suffix? ".pem" file)) + (define (pem-file? file) + (string-suffix? ".pem" file)) - (define (ca-files top) - (let ((cert-dir (string-append top "/etc/ssl/certs"))) - (map (cut string-append cert-dir "/" <>) - (or (scandir cert-dir pem-file?) '())))) + (define (ca-files top) + (let ((cert-dir (string-append top "/etc/ssl/certs"))) + (map (cut string-append cert-dir "/" <>) + (or (scandir cert-dir pem-file?) '())))) - (define (concatenate-files files result) - "Make RESULT the concatenation of all of FILES." - (define (dump file port) - (display (call-with-input-file file get-string-all) - port) - (newline port)) ;required, see + (define (concatenate-files files result) + "Make RESULT the concatenation of all of FILES." + (define (dump file port) + (display (call-with-input-file file get-string-all) + port) + (newline port)) ;required, see - (call-with-output-file result - (lambda (port) - (for-each (cut dump <> port) files)))) + (call-with-output-file result + (lambda (port) + (for-each (cut dump <> port) files)))) - ;; Some file names in the NSS certificates are UTF-8 encoded so - ;; install a UTF-8 locale. - (setenv "LOCPATH" - (string-append #+glibc-utf8-locales "/lib/locale/" - #+(package-version glibc-utf8-locales))) - (setlocale LC_ALL "en_US.utf8") + ;; Some file names in the NSS certificates are UTF-8 encoded so + ;; install a UTF-8 locale. + (setenv "LOCPATH" + (string-append #+glibc-utf8-locales "/lib/locale/" + #+(package-version glibc-utf8-locales))) + (setlocale LC_ALL "en_US.utf8") - (match (append-map ca-files '#$(manifest-inputs manifest)) - (() - ;; Since there are no CA files, just create an empty directory. Do - ;; not create the etc/ssl/certs sub-directory, since that would - ;; wrongfully lead to a message about 'SSL_CERT_DIR' needing to be - ;; defined. - (mkdir #$output) - #t) - ((ca-files ...) - (let ((result (string-append #$output "/etc/ssl/certs"))) - (mkdir-p result) - (concatenate-files ca-files - (string-append result - "/ca-certificates.crt")) - #t))))) + (match (append-map ca-files '#$(manifest-inputs manifest)) + (() + ;; Since there are no CA files, just create an empty directory. Do + ;; not create the etc/ssl/certs sub-directory, since that would + ;; wrongfully lead to a message about 'SSL_CERT_DIR' needing to be + ;; defined. + (mkdir #$output) + #t) + ((ca-files ...) + (let ((result (string-append #$output "/etc/ssl/certs"))) + (mkdir-p result) + (concatenate-files ca-files + (string-append result + "/ca-certificates.crt")) + #t)))))) (gexp->derivation "ca-certificate-bundle" build - #:modules '((guix build utils)) #:local-build? #t #:substitutable? #f)) @@ -645,44 +645,44 @@ (define (gtk-icon-themes manifest) creates the GTK+ 'icon-theme.cache' file for each theme." (mlet %store-monad ((gtk+ (manifest-lookup-package manifest "gtk+"))) (define build - #~(begin - (use-modules (guix build utils) - (guix build union) - (guix build profiles) - (srfi srfi-26) - (ice-9 ftw)) + (with-imported-modules '((guix build utils) + (guix build union) + (guix build profiles) + (guix search-paths) + (guix records)) + #~(begin + (use-modules (guix build utils) + (guix build union) + (guix build profiles) + (srfi srfi-26) + (ice-9 ftw)) - (let* ((destdir (string-append #$output "/share/icons")) - (icondirs (filter file-exists? - (map (cut string-append <> "/share/icons") - '#$(manifest-inputs manifest)))) - (update-icon-cache (string-append - #+gtk+ "/bin/gtk-update-icon-cache"))) + (let* ((destdir (string-append #$output "/share/icons")) + (icondirs (filter file-exists? + (map (cut string-append <> "/share/icons") + '#$(manifest-inputs manifest)))) + (update-icon-cache (string-append + #+gtk+ "/bin/gtk-update-icon-cache"))) - ;; Union all the icons. - (mkdir-p (string-append #$output "/share")) - (union-build destdir icondirs - #:log-port (%make-void-port "w")) + ;; Union all the icons. + (mkdir-p (string-append #$output "/share")) + (union-build destdir icondirs + #:log-port (%make-void-port "w")) - ;; Update the 'icon-theme.cache' file for each icon theme. - (for-each - (lambda (theme) - (let ((dir (string-append destdir "/" theme))) - ;; Occasionally DESTDIR contains plain files, such as - ;; "abiword_48.png". Ignore these. - (when (file-is-directory? dir) - (ensure-writable-directory dir) - (system* update-icon-cache "-t" dir "--quiet")))) - (scandir destdir (negate (cut member <> '("." "..")))))))) + ;; Update the 'icon-theme.cache' file for each icon theme. + (for-each + (lambda (theme) + (let ((dir (string-append destdir "/" theme))) + ;; Occasionally DESTDIR contains plain files, such as + ;; "abiword_48.png". Ignore these. + (when (file-is-directory? dir) + (ensure-writable-directory dir) + (system* update-icon-cache "-t" dir "--quiet")))) + (scandir destdir (negate (cut member <> '("." ".."))))))))) ;; Don't run the hook when there's nothing to do. (if gtk+ (gexp->derivation "gtk-icon-themes" build - #:modules '((guix build utils) - (guix build union) - (guix build profiles) - (guix search-paths) - (guix records)) #:local-build? #t #:substitutable? #f) (return #f)))) @@ -695,28 +695,28 @@ (define (xdg-desktop-database manifest) (manifest-lookup-package manifest "desktop-file-utils"))) (define build - #~(begin - (use-modules (srfi srfi-26) - (guix build utils) - (guix build union)) - (let* ((destdir (string-append #$output "/share/applications")) - (appdirs (filter file-exists? - (map (cut string-append <> - "/share/applications") - '#$(manifest-inputs manifest)))) - (update-desktop-database (string-append - #+desktop-file-utils - "/bin/update-desktop-database"))) - (mkdir-p (string-append #$output "/share")) - (union-build destdir appdirs - #:log-port (%make-void-port "w")) - (exit (zero? (system* update-desktop-database destdir)))))) + (with-imported-modules '((guix build utils) + (guix build union)) + #~(begin + (use-modules (srfi srfi-26) + (guix build utils) + (guix build union)) + (let* ((destdir (string-append #$output "/share/applications")) + (appdirs (filter file-exists? + (map (cut string-append <> + "/share/applications") + '#$(manifest-inputs manifest)))) + (update-desktop-database (string-append + #+desktop-file-utils + "/bin/update-desktop-database"))) + (mkdir-p (string-append #$output "/share")) + (union-build destdir appdirs + #:log-port (%make-void-port "w")) + (exit (zero? (system* update-desktop-database destdir))))))) ;; Don't run the hook when 'desktop-file-utils' is not referenced. (if desktop-file-utils (gexp->derivation "xdg-desktop-database" build - #:modules '((guix build utils) - (guix build union)) #:local-build? #t #:substitutable? #f) (return #f)))) @@ -728,30 +728,30 @@ (define (xdg-mime-database manifest) (manifest-lookup-package manifest "shared-mime-info"))) (define build - #~(begin - (use-modules (srfi srfi-26) - (guix build utils) - (guix build union)) - (let* ((datadir (string-append #$output "/share")) - (destdir (string-append datadir "/mime")) - (pkgdirs (filter file-exists? - (map (cut string-append <> - "/share/mime/packages") - '#$(manifest-inputs manifest)))) - (update-mime-database (string-append - #+shared-mime-info - "/bin/update-mime-database"))) - (mkdir-p destdir) - (union-build (string-append destdir "/packages") pkgdirs - #:log-port (%make-void-port "w")) - (setenv "XDG_DATA_HOME" datadir) - (exit (zero? (system* update-mime-database destdir)))))) + (with-imported-modules '((guix build utils) + (guix build union)) + #~(begin + (use-modules (srfi srfi-26) + (guix build utils) + (guix build union)) + (let* ((datadir (string-append #$output "/share")) + (destdir (string-append datadir "/mime")) + (pkgdirs (filter file-exists? + (map (cut string-append <> + "/share/mime/packages") + '#$(manifest-inputs manifest)))) + (update-mime-database (string-append + #+shared-mime-info + "/bin/update-mime-database"))) + (mkdir-p destdir) + (union-build (string-append destdir "/packages") pkgdirs + #:log-port (%make-void-port "w")) + (setenv "XDG_DATA_HOME" datadir) + (exit (zero? (system* update-mime-database destdir))))))) ;; Don't run the hook when 'shared-mime-info' is referenced. (if shared-mime-info (gexp->derivation "xdg-mime-database" build - #:modules '((guix build utils) - (guix build union)) #:local-build? #t #:substitutable? #f) (return #f)))) @@ -790,34 +790,34 @@ (define inputs (manifest-inputs manifest))) (define builder - #~(begin - (use-modules (guix build profiles) - (guix search-paths) - (srfi srfi-1)) + (with-imported-modules '((guix build profiles) + (guix build union) + (guix build utils) + (guix search-paths) + (guix records)) + #~(begin + (use-modules (guix build profiles) + (guix search-paths) + (srfi srfi-1)) - (setvbuf (current-output-port) _IOLBF) - (setvbuf (current-error-port) _IOLBF) + (setvbuf (current-output-port) _IOLBF) + (setvbuf (current-error-port) _IOLBF) - (define search-paths - ;; Search paths of MANIFEST's packages, converted back to their - ;; record form. - (map sexp->search-path-specification - (delete-duplicates - '#$(map search-path-specification->sexp - (append-map manifest-entry-search-paths - (manifest-entries manifest)))))) + (define search-paths + ;; Search paths of MANIFEST's packages, converted back to their + ;; record form. + (map sexp->search-path-specification + (delete-duplicates + '#$(map search-path-specification->sexp + (append-map manifest-entry-search-paths + (manifest-entries manifest)))))) - (build-profile #$output '#$inputs - #:manifest '#$(manifest->gexp manifest) - #:search-paths search-paths))) + (build-profile #$output '#$inputs + #:manifest '#$(manifest->gexp manifest) + #:search-paths search-paths)))) (gexp->derivation "profile" builder #:system system - #:modules '((guix build profiles) - (guix build union) - (guix build utils) - (guix search-paths) - (guix records)) ;; Not worth offloading. #:local-build? #t diff --git a/guix/records.scm b/guix/records.scm index 0d35a747b0..f3f3aafb04 100644 --- a/guix/records.scm +++ b/guix/records.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès +;;; Copyright © 2012, 2013, 2014, 2015, 2016 Ludovic Courtès ;;; ;;; This file is part of GNU Guix. ;;; @@ -42,6 +42,15 @@ (define-syntax record-error (format #f fmt args ...) form)))) +(define (report-invalid-field-specifier name bindings) + "Report the first invalid binding among BINDINGS." + (let loop ((bindings bindings)) + (syntax-case bindings () + (((field value) rest ...) ;good + (loop #'(rest ...))) + ((weird _ ...) ;weird! + (syntax-violation name "invalid field specifier" #'weird))))) + (define-syntax make-syntactic-constructor (syntax-rules () "Make the syntactic constructor NAME for TYPE, that calls CTOR, and @@ -147,7 +156,13 @@ (define (field-value f) "missing field initializers ~a" (lset-difference eq? '(expected ...) - fields))))))))))))) + fields))))))) + ((_ bindings (... ...)) + ;; One of BINDINGS doesn't match the (field value) pattern. + ;; Report precisely which one is faulty, instead of letting the + ;; "source expression failed to match any pattern" error. + (report-invalid-field-specifier 'name + #'(bindings (... ...)))))))))) (define-syntax-rule (define-field-property-predicate predicate property) "Define PREDICATE as a procedure that takes a syntax object and, when passed diff --git a/guix/scripts/challenge.scm b/guix/scripts/challenge.scm index 149647cfdf..590d8f1099 100644 --- a/guix/scripts/challenge.scm +++ b/guix/scripts/challenge.scm @@ -21,6 +21,7 @@ (define-module (guix scripts challenge) #:use-module (guix scripts) #:use-module (guix store) #:use-module (guix utils) + #:use-module (guix grafts) #:use-module (guix monads) #:use-module (guix base32) #:use-module (guix packages) @@ -222,23 +223,26 @@ (define (guix-challenge . args) (urls (assoc-ref opts 'substitute-urls))) (leave-on-EPIPE (with-store store - (let ((files (match files - (() - (filter (cut locally-built? store <>) - (live-paths store))) - (x - files)))) - (set-build-options store - #:use-substitutes? #f) + ;; Disable grafts since substitute servers normally provide only + ;; ungrafted stuff. + (parameterize ((%graft? #f)) + (let ((files (match files + (() + (filter (cut locally-built? store <>) + (live-paths store))) + (x + files)))) + (set-build-options store + #:use-substitutes? #f) - (run-with-store store - (mlet* %store-monad ((items (mapm %store-monad - ensure-store-item files)) - (issues (discrepancies items urls))) - (for-each summarize-discrepancy issues) - (unless (null? issues) - (exit 2)) - (return (null? issues))) - #:system system))))))) + (run-with-store store + (mlet* %store-monad ((items (mapm %store-monad + ensure-store-item files)) + (issues (discrepancies items urls))) + (for-each summarize-discrepancy issues) + (unless (null? issues) + (exit 2)) + (return (null? issues))) + #:system system)))))))) ;;; challenge.scm ends here diff --git a/guix/scripts/gc.scm b/guix/scripts/gc.scm index 8db28138c8..bdfee4308c 100644 --- a/guix/scripts/gc.scm +++ b/guix/scripts/gc.scm @@ -24,6 +24,7 @@ (define-module (guix scripts gc) #:use-module (ice-9 match) #:use-module (ice-9 regex) #:use-module (srfi srfi-1) + #:use-module (srfi srfi-11) #:use-module (srfi srfi-26) #:use-module (srfi srfi-37) #:export (guix-gc)) @@ -221,9 +222,11 @@ (define (list-relatives relatives) (free-space (ensure-free-space store free-space)) (min-freed - (collect-garbage store min-freed)) + (let-values (((paths freed) (collect-garbage store min-freed))) + (info (_ "freed ~h bytes~%") freed))) (else - (collect-garbage store))))) + (let-values (((paths freed) (collect-garbage store))) + (info (_ "freed ~h bytes~%") freed)))))) ((delete) (delete-paths store (map direct-store-path paths))) ((list-references) diff --git a/guix/scripts/lint.scm b/guix/scripts/lint.scm index b4fdb6f905..d5e9197cc9 100644 --- a/guix/scripts/lint.scm +++ b/guix/scripts/lint.scm @@ -359,7 +359,22 @@ (define (validate-uri uri package field) (probe-uri uri #:timeout 3))) ;wait at most 3 seconds (case status ((http-response) - (or (= 200 (response-code argument)) + (if (= 200 (response-code argument)) + (match (response-content-length argument) + ((? number? length) + ;; As of July 2016, SourceForge returns 200 (instead of 404) + ;; with a small HTML page upon failure. Attempt to detect such + ;; malicious behavior. + (or (> length 1000) + (begin + (emit-warning package + (format #f + (_ "URI ~a returned \ +suspiciously small file (~a bytes)") + (uri->string uri) + length)) + #f))) + (_ #t)) (begin (emit-warning package (format #f diff --git a/guix/scripts/publish.scm b/guix/scripts/publish.scm index 4c0aa8e419..3baceaf645 100644 --- a/guix/scripts/publish.scm +++ b/guix/scripts/publish.scm @@ -27,6 +27,7 @@ (define-module (guix scripts publish) #:use-module (rnrs bytevectors) #:use-module (srfi srfi-1) #:use-module (srfi srfi-2) + #:use-module (srfi srfi-9) #:use-module (srfi srfi-9 gnu) #:use-module (srfi srfi-19) #:use-module (srfi srfi-26) @@ -45,6 +46,7 @@ (define-module (guix scripts publish) #:use-module (guix pk-crypto) #:use-module (guix store) #:use-module (guix serialization) + #:use-module (guix zlib) #:use-module (guix ui) #:use-module (guix scripts) #:export (guix-publish)) @@ -58,6 +60,9 @@ (define (show-help) --listen=HOST listen on the network interface for HOST")) (display (_ " -u, --user=USER change privileges to USER as soon as possible")) + (display (_ " + -C, --compression[=LEVEL] + compress archives at LEVEL")) (display (_ " --ttl=TTL announce narinfos can be cached for TTL seconds")) (display (_ " @@ -79,6 +84,20 @@ (define (getaddrinfo* host) (leave (_ "lookup of host '~a' failed: ~a~%") host (gai-strerror error))))) +;; Nar compression parameters. +(define-record-type + (compression type level) + compression? + (type compression-type) + (level compression-level)) + +(define %no-compression + (compression 'none 0)) + +(define %default-gzip-compression + ;; Since we compress on the fly, default to fast compression. + (compression 'gzip 3)) + (define %options (list (option '(#\h "help") #f #f (lambda _ @@ -102,6 +121,20 @@ (define %options (() (leave (_ "lookup of host '~a' returned nothing") name))))) + (option '(#\C "compression") #f #t + (lambda (opt name arg result) + (match (if arg (string->number* arg) 3) + (0 + (alist-cons 'compression %no-compression result)) + (level + (if (zlib-available?) + (alist-cons 'compression + (compression 'gzip level) + result) + (begin + (warning (_ "zlib support is missing; \ +compression disabled~%")) + result)))))) (option '("ttl") #t #f (lambda (opt name arg result) (let ((duration (string->duration arg))) @@ -117,6 +150,12 @@ (define %options (define %default-options `((port . 8080) + + ;; Default to fast & low compression. + (compression . ,(if (zlib-available?) + %default-gzip-compression + %no-compression)) + (address . ,(make-socket-address AF_INET INADDR_ANY 0)) (repl . #f))) @@ -152,12 +191,20 @@ (define (signed-string s) (define base64-encode-string (compose base64-encode string->utf8)) -(define (narinfo-string store store-path key) +(define* (narinfo-string store store-path key + #:key (compression %no-compression)) "Generate a narinfo key/value string for STORE-PATH; an exception is raised -if STORE-PATH is invalid. The narinfo is signed with KEY." +if STORE-PATH is invalid. Produce a URL that corresponds to COMPRESSION. The +narinfo is signed with KEY." (let* ((path-info (query-path-info store store-path)) - (url (encode-and-join-uri-path (list "nar" - (basename store-path)))) + (url (encode-and-join-uri-path + `("nar" + ,@(match compression + (($ 'none) + '()) + (($ type) + (list (symbol->string type)))) + ,(basename store-path)))) (hash (bytevector->nix-base32-string (path-info-hash path-info))) (size (path-info-nar-size path-info)) @@ -166,13 +213,16 @@ (define (narinfo-string store store-path key) " ")) (deriver (path-info-deriver path-info)) (base-info (format #f - "StorePath: ~a + "\ +StorePath: ~a URL: ~a -Compression: none +Compression: ~a NarHash: sha256:~a NarSize: ~d References: ~a~%" - store-path url hash size references)) + store-path url + (compression-type compression) + hash size references)) ;; Do not render a "Deriver" or "System" line if we are rendering ;; info for a derivation. (info (if (not deriver) @@ -209,7 +259,8 @@ (define (render-nix-cache-info) (format port "~a: ~a~%" key value))) %nix-cache-info)))) -(define* (render-narinfo store request hash #:key ttl) +(define* (render-narinfo store request hash + #:key ttl (compression %no-compression)) "Render metadata for the store path corresponding to HASH. If TTL is true, advertise it as the maximum validity period (in seconds) via the 'Cache-Control' header. This allows 'guix substitute' to cache it for an @@ -222,18 +273,35 @@ (define* (render-narinfo store request hash #:key ttl) `((cache-control (max-age . ,ttl))) '())) (cut display - (narinfo-string store store-path (force %private-key)) - <>))))) + (narinfo-string store store-path (force %private-key) + #:compression compression) + <>))))) -(define (render-nar store request store-item) +;; XXX: Declare the 'Guix-Compression' HTTP header, which is in fact for +;; internal consumption: it allows us to pass the compression info to +;; 'http-write', as part of the workaround to . +(declare-header! "Guix-Nar-Compression" + (lambda (str) + (match (call-with-input-string str read) + (('compression type level) + (compression type level)))) + compression? + (lambda (compression port) + (match compression + (($ type level) + (write `(compression ,type ,level) port))))) + +(define* (render-nar store request store-item + #:key (compression %no-compression)) "Render archive of the store path corresponding to STORE-ITEM." (let ((store-path (string-append %store-directory "/" store-item))) ;; The ISO-8859-1 charset *must* be used otherwise HTTP clients will ;; interpret the byte stream as UTF-8 and arbitrarily change invalid byte ;; sequences. (if (valid-path? store store-path) - (values '((content-type . (application/x-nix-archive - (charset . "ISO-8859-1")))) + (values `((content-type . (application/x-nix-archive + (charset . "ISO-8859-1"))) + (guix-nar-compression . ,compression)) ;; XXX: We're not returning the actual contents, deferring ;; instead to 'http-write'. This is a hack to work around ;; . @@ -282,6 +350,28 @@ (define-syntax-rule (swallow-EPIPE exp ...) (values) (apply throw args))))) +(define-syntax-rule (swallow-zlib-error exp ...) + "Swallow 'zlib-error' exceptions raised by EXP..." + (catch 'zlib-error + (lambda () + exp ...) + (const #f))) + +(define (nar-response-port response) + "Return a port on which to write the body of RESPONSE, the response of a +/nar request, according to COMPRESSION." + (match (assoc-ref (response-headers response) 'guix-nar-compression) + (($ 'gzip level) + ;; Note: We cannot used chunked encoding here because + ;; 'make-gzip-output-port' wants a file port. + (make-gzip-output-port (response-port response) + #:level level + #:buffer-size (* 64 1024))) + (($ 'none) + (response-port response)) + (#f + (response-port response)))) + (define (http-write server client response body) "Write RESPONSE and BODY to CLIENT, possibly in a separate thread to avoid blocking." @@ -293,16 +383,20 @@ (define (http-write server client response body) (lambda () (let* ((response (write-response (sans-content-length response) client)) - (port (response-port response))) + (port (begin + (force-output client) + (nar-response-port response)))) ;; XXX: Given our ugly workaround for in ;; 'render-nar', BODY here is just the file name of the store item. ;; We call 'write-file' from here because we know that's the only ;; way to avoid building the whole nar in memory, which could ;; quickly become a real problem. As a bonus, we even do ;; sendfile(2) directly from the store files to the socket. - (swallow-EPIPE - (write-file (utf8->string body) port)) - (close-port port) + (swallow-zlib-error + (swallow-EPIPE + (write-file (utf8->string body) port))) + (swallow-zlib-error + (close-port port)) (values))))) (_ ;; Handle other responses sequentially. @@ -316,7 +410,10 @@ (define-server-impl concurrent-http-server http-write (@@ (web server http) http-close)) -(define* (make-request-handler store #:key narinfo-ttl) +(define* (make-request-handler store + #:key + narinfo-ttl + (compression %no-compression)) (lambda (request body) (format #t "~a ~a~%" (request-method request) @@ -330,16 +427,37 @@ (define* (make-request-handler store #:key narinfo-ttl) (((= extract-narinfo-hash (? string? hash))) ;; TODO: Register roots for HASH that will somehow remain for ;; NARINFO-TTL. - (render-narinfo store request hash #:ttl narinfo-ttl)) + (render-narinfo store request hash + #:ttl narinfo-ttl + #:compression compression)) + + ;; Use different URLs depending on the compression type. This + ;; guarantees that /nar URLs remain valid even when 'guix publish' + ;; is restarted with different compression parameters. + ;; /nar/ (("nar" store-item) - (render-nar store request store-item)) + (render-nar store request store-item + #:compression %no-compression)) + ;; /nar/gzip/ + (("nar" "gzip" store-item) + (if (zlib-available?) + (render-nar store request store-item + #:compression + (match compression + (($ 'gzip) + compression) + (_ + %default-gzip-compression))) + (not-found request))) (_ (not-found request))) (not-found request)))) (define* (run-publish-server socket store - #:key narinfo-ttl) - (run-server (make-request-handler store #:narinfo-ttl narinfo-ttl) + #:key (compression %no-compression) narinfo-ttl) + (run-server (make-request-handler store + #:narinfo-ttl narinfo-ttl + #:compression compression) concurrent-http-server `(#:socket ,socket))) @@ -378,6 +496,7 @@ (define (guix-publish . args) (user (assoc-ref opts 'user)) (port (assoc-ref opts 'port)) (ttl (assoc-ref opts 'narinfo-ttl)) + (compression (assoc-ref opts 'compression)) (address (let ((addr (assoc-ref opts 'address))) (make-socket-address (sockaddr:fam addr) (sockaddr:addr addr) @@ -404,4 +523,6 @@ (define (guix-publish . args) (when repl-port (repl:spawn-server (repl:make-tcp-server-socket #:port repl-port))) (with-store store - (run-publish-server socket store #:narinfo-ttl ttl))))) + (run-publish-server socket store + #:compression compression + #:narinfo-ttl ttl))))) diff --git a/guix/scripts/substitute.scm b/guix/scripts/substitute.scm index 5722aa821d..8827c45fb8 100755 --- a/guix/scripts/substitute.scm +++ b/guix/scripts/substitute.scm @@ -610,7 +610,8 @@ (define (handle-narinfo-response request response port result) (update-progress!) (cons narinfo result)) (let* ((path (uri-path (request-uri request))) - (hash-part (string-drop-right path 8))) ; drop ".narinfo" + (hash-part (basename + (string-drop-right path 8)))) ;drop ".narinfo" (if len (get-bytevector-n port len) (read-to-eof port)) diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm index dd1e534c9b..e2c6b2efee 100644 --- a/guix/scripts/system.scm +++ b/guix/scripts/system.scm @@ -362,7 +362,7 @@ (define* (switch-to-system os ;; The activation script may modify '%load-path' & co., so protect ;; against that. This is necessary to ensure that ;; 'upgrade-shepherd-services' gets to see the right modules when it - ;; computes derivations with (gexp->derivation #:modules …). + ;; computes derivations with 'gexp->derivation'. (save-load-path-excursion (primitive-load (derivation->output-path script)))) diff --git a/guix/store.scm b/guix/store.scm index 276684e2fb..9f409b4209 100644 --- a/guix/store.scm +++ b/guix/store.scm @@ -510,7 +510,7 @@ (define %default-substitute-urls (map (if (false-if-exception (resolve-interface '(gnutls))) (cut string-append "https://" <>) (cut string-append "http://" <>)) - '("mirror.hydra.gnu.org" "hydra.gnu.org"))) + '("mirror.hydra.gnu.org"))) (define* (set-build-options server #:key keep-failed? keep-going? fallback? diff --git a/guix/svn-download.scm b/guix/svn-download.scm index d6853ca861..c1200fa0c5 100644 --- a/guix/svn-download.scm +++ b/guix/svn-download.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2014, 2015 Ludovic Courtès +;;; Copyright © 2014, 2015, 2016 Ludovic Courtès ;;; Copyright © 2014 Sree Harsha Totakura ;;; ;;; This file is part of GNU Guix. @@ -41,8 +41,10 @@ (define-module (guix svn-download) (define-record-type* svn-reference make-svn-reference svn-reference? - (url svn-reference-url) ; string - (revision svn-reference-revision)) ; number + (url svn-reference-url) ; string + (revision svn-reference-revision) ; number + (user-name svn-reference-user-name (default #f)) + (password svn-reference-password (default #f))) (define (subversion-package) "Return the default Subversion package." @@ -57,12 +59,16 @@ (define* (svn-fetch ref hash-algo hash object. The output is expected to have recursive hash HASH of type HASH-ALGO (a symbol). Use NAME as the file name, or a generic name if #f." (define build - #~(begin - (use-modules (guix build svn)) - (svn-fetch '#$(svn-reference-url ref) - '#$(svn-reference-revision ref) - #$output - #:svn-command (string-append #+svn "/bin/svn")))) + (with-imported-modules '((guix build svn) + (guix build utils)) + #~(begin + (use-modules (guix build svn)) + (svn-fetch '#$(svn-reference-url ref) + '#$(svn-reference-revision ref) + #$output + #:svn-command (string-append #+svn "/bin/svn") + #:user-name #$(svn-reference-user-name ref) + #:password #$(svn-reference-password ref))))) (mlet %store-monad ((guile (package->derivation guile system))) (gexp->derivation (or name "svn-checkout") build @@ -70,8 +76,6 @@ (define build #:hash-algo hash-algo #:hash hash #:recursive? #t - #:modules '((guix build svn) - (guix build utils)) #:guile-for-build guile #:local-build? #t))) diff --git a/guix/zlib.scm b/guix/zlib.scm new file mode 100644 index 0000000000..51e5e9e426 --- /dev/null +++ b/guix/zlib.scm @@ -0,0 +1,234 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2016 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 zlib) + #:use-module (rnrs bytevectors) + #:use-module (ice-9 binary-ports) + #:use-module (ice-9 match) + #:use-module (system foreign) + #:use-module (guix config) + #:export (zlib-available? + make-gzip-input-port + make-gzip-output-port + call-with-gzip-input-port + call-with-gzip-output-port + %default-buffer-size + %default-compression-level)) + +;;; Commentary: +;;; +;;; Bindings to the gzip-related part of zlib's API. The main limitation of +;;; this API is that it requires a file descriptor as the source or sink. +;;; +;;; Code: + +(define %zlib + ;; File name of zlib's shared library. When updating via 'guix pull', + ;; '%libz' might be undefined so protect against it. + (delay (dynamic-link (if (defined? '%libz) + %libz + "libz")))) + +(define (zlib-available?) + "Return true if zlib is available, #f otherwise." + (false-if-exception (force %zlib))) + +(define (zlib-procedure ret name parameters) + "Return a procedure corresponding to C function NAME in libz, or #f if +either zlib or the function could not be found." + (match (false-if-exception (dynamic-func name (force %zlib))) + ((? pointer? ptr) + (pointer->procedure ret ptr parameters)) + (#f + #f))) + +(define-wrapped-pointer-type + ;; Scheme counterpart of the 'gzFile' opaque type. + gzip-file? + pointer->gzip-file + gzip-file->pointer + (lambda (obj port) + (format port "#" + (number->string (object-address obj) 16)))) + +(define gzerror + (let ((proc (zlib-procedure '* "gzerror" '(* *)))) + (lambda (gzfile) + (let* ((errnum* (make-bytevector (sizeof int))) + (ptr (proc (gzip-file->pointer gzfile) + (bytevector->pointer errnum*)))) + (values (bytevector-sint-ref errnum* 0 + (native-endianness) (sizeof int)) + (pointer->string ptr)))))) + +(define gzdopen + (let ((proc (zlib-procedure '* "gzdopen" (list int '*)))) + (lambda (fd mode) + "Open file descriptor FD as a gzip stream with the given MODE. MODE must +be a string denoting the how FD is to be opened, such as \"r\" for reading or +\"w9\" for writing data compressed at level 9 to FD. Calling 'gzclose' also +closes FD." + (let ((result (proc fd (string->pointer mode)))) + (if (null-pointer? result) + (throw 'zlib-error 'gzdopen) + (pointer->gzip-file result)))))) + +(define gzread! + (let ((proc (zlib-procedure int "gzread" (list '* '* unsigned-int)))) + (lambda* (gzfile bv #:optional (start 0) (count (bytevector-length bv))) + "Read up to COUNT bytes from GZFILE into BV at offset START. Return the +number of uncompressed bytes actually read." + (let ((ret (proc (gzip-file->pointer gzfile) + (bytevector->pointer bv start) + count))) + (if (< ret 0) + (throw 'zlib-error 'gzread! ret) + ret))))) + +(define gzwrite + (let ((proc (zlib-procedure int "gzwrite" (list '* '* unsigned-int)))) + (lambda* (gzfile bv #:optional (start 0) (count (bytevector-length bv))) + "Write up to COUNT bytes from BV at offset START into GZFILE. Return +the number of uncompressed bytes written, a strictly positive integer." + (let ((ret (proc (gzip-file->pointer gzfile) + (bytevector->pointer bv start) + count))) + (if (<= ret 0) + (throw 'zlib-error 'gzwrite ret) + ret))))) + +(define gzbuffer! + (let ((proc (zlib-procedure int "gzbuffer" (list '* unsigned-int)))) + (lambda (gzfile size) + "Change the internal buffer size of GZFILE to SIZE bytes." + (let ((ret (proc (gzip-file->pointer gzfile) size))) + (unless (zero? ret) + (throw 'zlib-error 'gzbuffer! ret)))))) + +(define gzeof? + (let ((proc (zlib-procedure int "gzeof" '(*)))) + (lambda (gzfile) + "Return true if the end-of-file has been reached on GZFILE." + (not (zero? (proc (gzip-file->pointer gzfile))))))) + +(define gzclose + (let ((proc (zlib-procedure int "gzclose" '(*)))) + (lambda (gzfile) + "Close GZFILE." + (let ((ret (proc (gzip-file->pointer gzfile)))) + (unless (zero? ret) + (throw 'zlib-error 'gzclose ret (gzerror gzfile))))))) + + + +;;; +;;; Port interface. +;;; + +(define %default-buffer-size + ;; Default buffer size, as documented in . + 8192) + +(define %default-compression-level + ;; Z_DEFAULT_COMPRESSION. + -1) + +(define (close-procedure gzfile port) + "Return a procedure that closes GZFILE, ensuring its underlying PORT is +closed even if closing GZFILE triggers an exception." + (lambda () + (catch 'zlib-error + (lambda () + ;; 'gzclose' closes the underlying file descriptor. 'close-port' + ;; calls close(2), gets EBADF, which is ignores. + (gzclose gzfile) + (close-port port)) + (lambda args + ;; Make sure PORT is closed despite the zlib error. + (close-port port) + (apply throw args))))) + +(define* (make-gzip-input-port port #:key (buffer-size %default-buffer-size)) + "Return an input port that decompresses data read from PORT, a file port. +PORT is automatically closed when the resulting port is closed. BUFFER-SIZE +is the size in bytes of the internal buffer, 8 KiB by default; using a larger +buffer increases decompression speed." + (define gzfile + (gzdopen (fileno port) "r")) + + (define (read! bv start count) + ;; XXX: Can 'gzread!' return zero even though we haven't reached the EOF? + (gzread! gzfile bv start count)) + + (unless (= buffer-size %default-buffer-size) + (gzbuffer! gzfile buffer-size)) + + (make-custom-binary-input-port "gzip-input" read! #f #f + (close-procedure gzfile port))) + +(define* (make-gzip-output-port port + #:key + (level %default-compression-level) + (buffer-size %default-buffer-size)) + "Return an output port that compresses data at the given LEVEL, using PORT, +a file port, as its sink. PORT is automatically closed when the resulting +port is closed." + (define gzfile + (gzdopen (fileno port) + (string-append "w" (number->string level)))) + + (define (write! bv start count) + (gzwrite gzfile bv start count)) + + (unless (= buffer-size %default-buffer-size) + (gzbuffer! gzfile buffer-size)) + + (make-custom-binary-output-port "gzip-output" write! #f #f + (close-procedure gzfile port))) + +(define* (call-with-gzip-input-port port proc + #:key (buffer-size %default-buffer-size)) + "Call PROC with a port that wraps PORT and decompresses data read from it. +PORT is closed upon completion. The gzip internal buffer size is set to +BUFFER-SIZE bytes." + (let ((gzip (make-gzip-input-port port #:buffer-size buffer-size))) + (dynamic-wind + (const #t) + (lambda () + (proc gzip)) + (lambda () + (close-port gzip))))) + +(define* (call-with-gzip-output-port port proc + #:key + (level %default-compression-level) + (buffer-size %default-buffer-size)) + "Call PROC with an output port that wraps PORT and compresses data. PORT is +close upon completion. The gzip internal buffer size is set to BUFFER-SIZE +bytes." + (let ((gzip (make-gzip-output-port port + #:level level + #:buffer-size buffer-size))) + (dynamic-wind + (const #t) + (lambda () + (proc gzip)) + (lambda () + (close-port gzip))))) + +;;; zlib.scm ends here diff --git a/m4/guix.m4 b/m4/guix.m4 index 654789e1d9..949ae4ca7c 100644 --- a/m4/guix.m4 +++ b/m4/guix.m4 @@ -295,6 +295,17 @@ AC_DEFUN([GUIX_LIBGCRYPT_LIBDIR], [ $1="$guix_cv_libgcrypt_libdir" ]) +dnl GUIX_LIBZ_LIBDIR VAR +dnl +dnl Attempt to determine libz's LIBDIR; store the result in VAR. +AC_DEFUN([GUIX_LIBZ_LIBDIR], [ + AC_REQUIRE([PKG_PROG_PKG_CONFIG]) + AC_CACHE_CHECK([zlib's library directory], + [guix_cv_libz_libdir], + [guix_cv_libz_libdir="`$PKG_CONFIG zlib --variable=libdir 2> /dev/null`"]) + $1="$guix_cv_libz_libdir" +]) + dnl GUIX_CURRENT_LOCALSTATEDIR dnl dnl Determine the localstatedir of an existing Guix installation and set diff --git a/tests/cpan.scm b/tests/cpan.scm index 5d56f0bd2b..898081b3e5 100644 --- a/tests/cpan.scm +++ b/tests/cpan.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015 Eric Bavier +;;; Copyright © 2016 Alex Sassmannshausen ;;; ;;; This file is part of GNU Guix. ;;; @@ -97,4 +98,14 @@ (define test-source (x (pk 'fail x #f))))) +(test-equal "source-url-http" + ((@@ (guix import cpan) fix-source-url) + "http://cpan.metacpan.org/authors/id/T/TE/TEST/Foo-Bar-0.1.tar.gz") + "mirror://cpan/authors/id/T/TE/TEST/Foo-Bar-0.1.tar.gz") + +(test-equal "source-url-https" + ((@@ (guix import cpan) fix-source-url) + "https://cpan.metacpan.org/authors/id/T/TE/TEST/Foo-Bar-0.1.tar.gz") + "mirror://cpan/authors/id/T/TE/TEST/Foo-Bar-0.1.tar.gz") + (test-end "cpan") diff --git a/tests/gexp.scm b/tests/gexp.scm index f44f0eaf9a..03a64fa6bb 100644 --- a/tests/gexp.scm +++ b/tests/gexp.scm @@ -526,6 +526,18 @@ (define (match-input thing) get-bytevector-all)))) files)))))) +(test-equal "gexp-modules & ungexp" + '((bar) (foo)) + ((@@ (guix gexp) gexp-modules) + #~(foo #$(with-imported-modules '((foo)) #~+) + #+(with-imported-modules '((bar)) #~-)))) + +(test-equal "gexp-modules & ungexp-splicing" + '((foo) (bar)) + ((@@ (guix gexp) gexp-modules) + #~(foo #$@(list (with-imported-modules '((foo)) #~+) + (with-imported-modules '((bar)) #~-))))) + (test-assertm "gexp->derivation #:modules" (mlet* %store-monad ((build -> #~(begin @@ -540,31 +552,75 @@ (define (match-input thing) (s (stat (string-append p "/guile/guix/nix")))) (return (eq? (stat:type s) 'directory)))))) +(test-assertm "gexp->derivation & with-imported-modules" + ;; Same test as above, but using 'with-imported-modules'. + (mlet* %store-monad + ((build -> (with-imported-modules '((guix build utils)) + #~(begin + (use-modules (guix build utils)) + (mkdir-p (string-append #$output "/guile/guix/nix")) + #t))) + (drv (gexp->derivation "test-with-modules" build))) + (mbegin %store-monad + (built-derivations (list drv)) + (let* ((p (derivation->output-path drv)) + (s (stat (string-append p "/guile/guix/nix")))) + (return (eq? (stat:type s) 'directory)))))) + +(test-assertm "gexp->derivation & nested with-imported-modules" + (mlet* %store-monad + ((build1 -> (with-imported-modules '((guix build utils)) + #~(begin + (use-modules (guix build utils)) + (mkdir-p (string-append #$output "/guile/guix/nix")) + #t))) + (build2 -> (with-imported-modules '((guix build bournish)) + #~(begin + (use-modules (guix build bournish) + (system base compile)) + #+build1 + (call-with-output-file (string-append #$output "/b") + (lambda (port) + (write + (read-and-compile (open-input-string "cd /foo") + #:from %bournish-language + #:to 'scheme) + port)))))) + (drv (gexp->derivation "test-with-modules" build2))) + (mbegin %store-monad + (built-derivations (list drv)) + (let* ((p (derivation->output-path drv)) + (s (stat (string-append p "/guile/guix/nix"))) + (b (string-append p "/b"))) + (return (and (eq? (stat:type s) 'directory) + (equal? '(chdir "/foo") + (call-with-input-file b read)))))))) + (test-assertm "gexp->derivation #:references-graphs" (mlet* %store-monad ((one (text-file "one" (random-text))) (two (gexp->derivation "two" #~(symlink #$one #$output:chbouib))) - (drv (gexp->derivation "ref-graphs" - #~(begin - (use-modules (guix build store-copy)) - (with-output-to-file #$output - (lambda () - (write (call-with-input-file "guile" - read-reference-graph)))) - (with-output-to-file #$output:one - (lambda () - (write (call-with-input-file "one" - read-reference-graph)))) - (with-output-to-file #$output:two - (lambda () - (write (call-with-input-file "two" - read-reference-graph))))) + (build -> (with-imported-modules '((guix build store-copy) + (guix build utils)) + #~(begin + (use-modules (guix build store-copy)) + (with-output-to-file #$output + (lambda () + (write (call-with-input-file "guile" + read-reference-graph)))) + (with-output-to-file #$output:one + (lambda () + (write (call-with-input-file "one" + read-reference-graph)))) + (with-output-to-file #$output:two + (lambda () + (write (call-with-input-file "two" + read-reference-graph))))))) + (drv (gexp->derivation "ref-graphs" build #:references-graphs `(("one" ,one) ("two" ,two "chbouib") - ("guile" ,%bootstrap-guile)) - #:modules '((guix build store-copy) - (guix build utils)))) + ("guile" ,%bootstrap-guile)))) (ok? (built-derivations (list drv))) (guile-drv (package->derivation %bootstrap-guile)) (bash (interned-file (search-bootstrap-binary "bash" @@ -676,11 +732,11 @@ (define shebang (test-assertm "program-file" (let* ((n (random (expt 2 50))) - (exp (gexp (begin - (use-modules (guix build utils)) - (display (ungexp n))))) + (exp (with-imported-modules '((guix build utils)) + (gexp (begin + (use-modules (guix build utils)) + (display (ungexp n)))))) (file (program-file "program" exp - #:modules '((guix build utils)) #:guile %bootstrap-guile))) (mlet* %store-monad ((drv (lower-object file)) (out -> (derivation->output-path drv))) diff --git a/tests/grafts.scm b/tests/grafts.scm index 8cd048552c..13c56750ed 100644 --- a/tests/grafts.scm +++ b/tests/grafts.scm @@ -135,14 +135,14 @@ (define %mkdir (replacement fake))) (drv (gexp->derivation "to-graft" - #~(begin - (use-modules (guix build utils)) - (mkdir-p (string-append #$output - "/a/b/c/d")) - (symlink #$%bash - (string-append #$output - "/bash"))) - #:modules '((guix build utils)))) + (with-imported-modules '((guix build utils)) + #~(begin + (use-modules (guix build utils)) + (mkdir-p (string-append #$output + "/a/b/c/d")) + (symlink #$%bash + (string-append #$output + "/bash")))))) (grafted ((store-lift graft-derivation) drv (list graft))) (_ (built-derivations (list grafted))) diff --git a/tests/lint.scm b/tests/lint.scm index 1f1b0c95e9..ce751c42c9 100644 --- a/tests/lint.scm +++ b/tests/lint.scm @@ -102,14 +102,14 @@ (define-server-impl stub-http-server http-write (@@ (web server http) http-close)) -(define (call-with-http-server code thunk) - "Call THUNK with an HTTP server running and returning CODE on HTTP -requests." +(define (call-with-http-server code data thunk) + "Call THUNK with an HTTP server running and returning CODE and DATA (a +string) on HTTP requests." (define (server-body) (define (handle request body) (values (build-response #:code code #:reason-phrase "Such is life") - "Hello, world.")) + data)) (catch 'quit (lambda () @@ -123,8 +123,11 @@ (define (handle request body) ;; Normally SERVER exits automatically once it has received a request. (thunk)))) -(define-syntax-rule (with-http-server code body ...) - (call-with-http-server code (lambda () body ...))) +(define-syntax-rule (with-http-server code data body ...) + (call-with-http-server code data (lambda () body ...))) + +(define %long-string + (make-string 2000 #\a)) (test-begin "lint") @@ -402,18 +405,30 @@ (define-syntax-rule (with-warnings body ...) (test-equal "home-page: 200" "" (with-warnings - (with-http-server 200 + (with-http-server 200 %long-string (let ((pkg (package (inherit (dummy-package "x")) (home-page %local-url)))) (check-home-page pkg))))) +(test-skip (if %http-server-socket 0 1)) +(test-assert "home-page: 200 but short length" + (->bool + (string-contains + (with-warnings + (with-http-server 200 "This is too small." + (let ((pkg (package + (inherit (dummy-package "x")) + (home-page %local-url)))) + (check-home-page pkg)))) + "suspiciously small"))) + (test-skip (if %http-server-socket 0 1)) (test-assert "home-page: 404" (->bool (string-contains (with-warnings - (with-http-server 404 + (with-http-server 404 %long-string (let ((pkg (package (inherit (dummy-package "x")) (home-page %local-url)))) @@ -501,7 +516,7 @@ (define-syntax-rule (with-warnings body ...) (test-equal "source: 200" "" (with-warnings - (with-http-server 200 + (with-http-server 200 %long-string (let ((pkg (package (inherit (dummy-package "x")) (source (origin @@ -510,12 +525,27 @@ (define-syntax-rule (with-warnings body ...) (sha256 %null-sha256)))))) (check-source pkg))))) +(test-skip (if %http-server-socket 0 1)) +(test-assert "source: 200 but short length" + (->bool + (string-contains + (with-warnings + (with-http-server 200 "This is too small." + (let ((pkg (package + (inherit (dummy-package "x")) + (source (origin + (method url-fetch) + (uri %local-url) + (sha256 %null-sha256)))))) + (check-source pkg)))) + "suspiciously small"))) + (test-skip (if %http-server-socket 0 1)) (test-assert "source: 404" (->bool (string-contains (with-warnings - (with-http-server 404 + (with-http-server 404 %long-string (let ((pkg (package (inherit (dummy-package "x")) (source (origin @@ -617,6 +647,6 @@ (define-syntax-rule (with-warnings body ...) (test-end "lint") ;; Local Variables: -;; eval: (put 'with-http-server 'scheme-indent-function 1) +;; eval: (put 'with-http-server 'scheme-indent-function 2) ;; eval: (put 'with-warnings 'scheme-indent-function 0) ;; End: diff --git a/tests/packages.scm b/tests/packages.scm index 94f5ea71a5..fc75e38730 100644 --- a/tests/packages.scm +++ b/tests/packages.scm @@ -335,7 +335,6 @@ (define read-at ("patch" ,%bootstrap-coreutils&co))) (patch-guile %bootstrap-guile) (modules '((guix build utils))) - (imported-modules modules) (snippet '(begin ;; We end up in 'bin', because it's the first ;; directory, alphabetically. Not a very good diff --git a/tests/publish.scm b/tests/publish.scm index d6d537c58a..9bf181f1fc 100644 --- a/tests/publish.scm +++ b/tests/publish.scm @@ -28,12 +28,15 @@ (define-module (test-publish) #:use-module (guix store) #:use-module (guix base32) #:use-module (guix base64) + #:use-module ((guix records) #:select (recutils->alist)) #:use-module ((guix serialization) #:select (restore-file)) #:use-module (guix pk-crypto) + #:use-module (guix zlib) #:use-module (web uri) #:use-module (web client) #:use-module (web response) #:use-module (rnrs bytevectors) + #:use-module (ice-9 binary-ports) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) #:use-module (srfi srfi-64) @@ -52,20 +55,28 @@ (define (http-get-body uri) (call-with-values (lambda () (http-get uri)) (lambda (response body) body))) +(define (http-get-port uri) + (call-with-values (lambda () (http-get uri #:streaming? #t)) + (lambda (response port) port))) + (define (publish-uri route) (string-append "http://localhost:6789" route)) ;; Run a local publishing server in a separate thread. (call-with-new-thread (lambda () - (guix-publish "--port=6789"))) ; attempt to avoid port collision + (guix-publish "--port=6789" "-C0"))) ;attempt to avoid port collision -;; Wait until the server is accepting connections. -(let ((conn (socket PF_INET SOCK_STREAM 0))) - (let loop () - (unless (false-if-exception - (connect conn AF_INET (inet-pton AF_INET "127.0.0.1") 6789)) - (loop)))) +(define (wait-until-ready port) + ;; Wait until the server is accepting connections. + (let ((conn (socket PF_INET SOCK_STREAM 0))) + (let loop () + (unless (false-if-exception + (connect conn AF_INET (inet-pton AF_INET "127.0.0.1") port)) + (loop))))) + +;; Wait until the two servers are ready. +(wait-until-ready 6789) (test-begin "publish") @@ -145,6 +156,40 @@ (define (publish-uri route) (call-with-input-string nar (cut restore-file <> temp))) (call-with-input-file temp read-string)))) +(unless (zlib-available?) + (test-skip 1)) +(test-equal "/nar/gzip/*" + "bar" + (call-with-temporary-output-file + (lambda (temp port) + (let ((nar (http-get-port + (publish-uri + (string-append "/nar/gzip/" (basename %item)))))) + (call-with-gzip-input-port nar + (cut restore-file <> temp))) + (call-with-input-file temp read-string)))) + +(unless (zlib-available?) + (test-skip 1)) +(test-equal "/*.narinfo with compression" + `(("StorePath" . ,%item) + ("URL" . ,(string-append "nar/gzip/" (basename %item))) + ("Compression" . "gzip")) + (let ((thread (call-with-new-thread + (lambda () + (guix-publish "--port=6799" "-C5"))))) + (wait-until-ready 6799) + (let* ((url (string-append "http://localhost:6799/" + (store-path-hash-part %item) ".narinfo")) + (body (http-get-port url))) + (filter (lambda (item) + (match item + (("Compression" . _) #t) + (("StorePath" . _) #t) + (("URL" . _) #t) + (_ #f))) + (recutils->alist body))))) + (test-equal "/nar/ with properly encoded '+' sign" "Congrats!" (let ((item (add-text-to-store %store "fake-gtk+" "Congrats!"))) diff --git a/tests/records.scm b/tests/records.scm index c6f85d4a81..d6d27bb96a 100644 --- a/tests/records.scm +++ b/tests/records.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès +;;; Copyright © 2012, 2013, 2014, 2015, 2016 Ludovic Courtès ;;; ;;; This file is part of GNU Guix. ;;; @@ -17,6 +17,7 @@ ;;; along with GNU Guix. If not, see . (define-module (test-records) + #:use-module (srfi srfi-1) #:use-module (srfi srfi-64) #:use-module (ice-9 match) #:use-module (ice-9 regex) @@ -214,6 +215,32 @@ (define-record-type* foo make-foo (equal? (foo-bar y) 1)) ;promise was already forced (eq? (foo-baz y) 'b))))) +(test-assert "define-record-type* & wrong field specifier" + (let ((exp '(begin + (define-record-type* foo make-foo + foo? + (bar foo-bar (default 42)) + (baz foo-baz)) + + (foo (baz 1 2 3 4 5)))) ;syntax error + (loc (current-source-location))) ;keep this alignment! + (catch 'syntax-error + (lambda () + (eval exp (test-module)) + #f) + (lambda (key proc message location form . args) + (and (eq? proc 'foo) + (string-match "invalid field" message) + (equal? form '(baz 1 2 3 4 5)) + + ;; Make sure the location is that of the field specifier. + ;; See . + (lset= equal? + (pk 'expected-loc + `((line . ,(- (assq-ref loc 'line) 1)) + ,@(alist-delete 'line loc))) + (pk 'actual-loc location))))))) + (test-assert "define-record-type* & missing initializers" (catch 'syntax-error (lambda () diff --git a/tests/system.scm b/tests/system.scm index b935bd07eb..b5bb9af016 100644 --- a/tests/system.scm +++ b/tests/system.scm @@ -41,6 +41,25 @@ (define %os (users %base-user-accounts))) +(define %luks-device + (mapped-device + (source "/dev/foo") (target "my-luks-device") + (type luks-device-mapping))) + +(define %os-with-mapped-device + (operating-system + (host-name "komputilo") + (timezone "Europe/Berlin") + (locale "en_US.utf8") + (bootloader (grub-configuration (device "/dev/sdX"))) + (mapped-devices (list %luks-device)) + (file-systems (cons (file-system + (inherit %root-fs) + (dependencies (list %luks-device))) + %base-file-systems)) + (users %base-user-accounts))) + + (test-begin "system") (test-assert "operating-system-store-file-system" @@ -71,4 +90,28 @@ (define %os %base-file-systems))))) (eq? gnu (operating-system-store-file-system os)))) +(test-equal "operating-system-user-mapped-devices" + '() + (operating-system-user-mapped-devices %os-with-mapped-device)) + +(test-equal "operating-system-boot-mapped-devices" + (list %luks-device) + (operating-system-boot-mapped-devices %os-with-mapped-device)) + +(test-equal "operating-system-boot-mapped-devices, implicit dependency" + (list %luks-device) + + ;; Here we expect the implicit dependency between "/" and + ;; "/dev/mapper/my-luks-device" to be found, in spite of the lack of a + ;; 'dependencies' field in the root file system. + (operating-system-boot-mapped-devices + (operating-system + (inherit %os-with-mapped-device) + (file-systems (cons (file-system + (device "/dev/mapper/my-luks-device") + (title 'device) + (mount-point "/") + (type "ext4")) + %base-file-systems))))) + (test-end) diff --git a/tests/zlib.scm b/tests/zlib.scm new file mode 100644 index 0000000000..5455240a71 --- /dev/null +++ b/tests/zlib.scm @@ -0,0 +1,63 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2016 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-zlib) + #:use-module (guix zlib) + #:use-module (guix tests) + #:use-module (srfi srfi-64) + #:use-module (rnrs bytevectors) + #:use-module (rnrs io ports) + #:use-module (ice-9 match)) + +;; Test the (guix zlib) module. + +(unless (zlib-available?) + (exit 77)) + +(test-begin "zlib") + +(test-assert "compression/decompression pipe" + (let ((data (random-bytevector (+ (random 10000) + (* 20 1024))))) + (match (pipe) + ((parent . child) + (match (primitive-fork) + (0 ;compress + (dynamic-wind + (const #t) + (lambda () + (close-port parent) + (call-with-gzip-output-port child + (lambda (port) + (put-bytevector port data)))) + (lambda () + (primitive-exit 0)))) + (pid ;decompress + (begin + (close-port child) + (let ((received (call-with-gzip-input-port parent + (lambda (port) + (get-bytevector-all port)) + #:buffer-size (* 64 1024)))) + (match (waitpid pid) + ((_ . status) + (and (zero? status) + (port-closed? parent) + (bytevector=? received data)))))))))))) + +(test-end)