diff options
62 files changed, 1711 insertions, 476 deletions
diff --git a/AUTHORS b/AUTHORS index 19cf492270..845683f0cd 100644 --- a/AUTHORS +++ b/AUTHORS @@ -31,3 +31,4 @@ alphabetical order): Sree Harsha Totakura <sreeharsha@totakura.in> David Thompson <dthompson2@worcester.edu> Mark H. Weaver <mhw@netris.org> + Ricardo Wurmus <ricardo.wurmus@mdc-berlin.de> diff --git a/Makefile.am b/Makefile.am index c482848fdf..e15afd2ff4 100644 --- a/Makefile.am +++ b/Makefile.am @@ -268,10 +268,18 @@ AM_V_GUILEC = $(AM_V_GUILEC_$(V)) AM_V_GUILEC_ = $(AM_V_GUILEC_$(AM_DEFAULT_VERBOSITY)) AM_V_GUILEC_0 = @echo " GUILEC" $@; +# Unset 'GUILE_LOAD_COMPILED_PATH' altogether while compiling. Otherwise, if +# $GUILE_LOAD_COMPILED_PATH contains $(moduledir), we may find .go files in +# there that are newer than the local .scm files (for instance because the +# user ran 'make install' recently). When that happens, we end up loading +# those previously-installed .go files, which may be stale, thereby breaking +# the whole thing. +# # XXX: Use the C locale for when Guile lacks # <http://git.sv.gnu.org/cgit/guile.git/commit/?h=stable-2.0&id=e2c6bf3866d1186c60bacfbd4fe5037087ee5e3f>. .scm.go: $(AM_V_GUILEC)$(MKDIR_P) `dirname "$@"` ; \ + unset GUILE_LOAD_COMPILED_PATH ; \ LC_ALL=C \ $(top_builddir)/pre-inst-env \ $(GUILD) compile -L "$(top_builddir)" -L "$(top_srcdir)" \ diff --git a/ROADMAP b/ROADMAP index 1843743916..45fce45912 100644 --- a/ROADMAP +++ b/ROADMAP @@ -2,7 +2,7 @@ #+TITLE: Tentative GNU Guix Road Map -Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org> +Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org> Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright @@ -17,56 +17,66 @@ The goals of the GNU Guix project are two-fold: GNU/Linux and possibly other GNU variants, with a focus on the promotion and tight integration of GNU components–the GNU system. -This document lists milestones toward these goals. - -The timeline below was written at the end of Dec. 2012. An updated and more -detailed list of the remaining milestones was posted at -https://lists.gnu.org/archive/html/guix-devel/2013-12/msg00120.html . - -The actual timeline was of course slightly different than initially -envisioned, and so was the feature set–things like cross-compilation support -and the MIPS64 port were not planned back then. See the news section at -http://www.gnu.org/software/guix/ and ‘NEWS’ for the release history. - -* GNU Guix 0.1: Jan. 2013 (was: Dec. 2012) - -** basic package management facilities - -Including install, upgrade, remove, roll-back, and search. - -** self-contained user-land distribution - - - GNU/Linux-only, i686 and x86_64; optionally mipsel64 - - ~100 non-X11 packages - -** maybe integrated Nix code - -* GNU Guix 0.2: Feb./Mar. 2013 - -** improved package management features - - - user-environment hooks - - sophisticated handling of collisions when building a union (package - priorities, etc.) - -** [[file:TODO::*add%20guix-pull][guix-pull tool]] to quickly update Guix and GNU for normal users -** support for fetching pre-built binaries - - - this is known as the "binary-cache substituter" in Nix parlance - -** auto-update facility available for GNU packages - -** more packages - - - Xorg - - Emacs - -* GNU Guix 0.9: June 2013 - -** bootable GNU/Linux-Libre distro -** high-level OS configuration descriptive EDSL, à la NixOS - -* GNU Guix 1.0: September 2013 (GNU anniversary release) - -** bootable GNU/Linux-Libre distro with non-GUI installer -** usable for a range of hacker-style uses +Since its inception, the project has gone a long way towards that goal. Below +is a list of items we want for version "1.0" of the Guix System Distribution. +There will be a few 0.x releases by then to give the new features more +exposure and testing. + +You're welcome to discuss this road map on guix-devel@gnu.org or #guix on +Freenode! + +* Features scheduled for 1.0 + + - larger & more robust build farm + + we need a powerful, dedicated front-end + + armhf-linux build machine + + leave Hydra in favor of 'guix publish' + custom code? + - more OS features + + LVM support + + encrypted root + + configurable name service switch + + whole-system unit tests, using VMs + - more service definitions + + mcron, postfix(?), wicd(?), etc. + - better 'guix system' + + 'reconfigure' should be able to restart non-essential services + + support for '--list-generations' and '--delete-generations' + - better 'guix pull' + + using Git to fetch the source instead of re-downloading everything + + build more quickly + + install new .mo files and new manual + + authentication of the Guix source: use signed commits? + - simplified, purely declarative service list in 'operating-system' + + it should be possible to inspect the service instance declarations and + settings + - GUIs + + integrate guix-web? + + guile-ncurses installer? + - 'guix publish'? + +* Features for later + + - complete GNU/Hurd port + - use content-based addressing when downloading substitutes to reduce + bandwidth requirements + + design nar v2 format where file contents are replaced by their hashes + + leverage /gnu/store/.links + - binary origin tracking + + keep signatures in sqlite.db + + preserve signatures upon import/export + - peer-to-peer distribution of updates (GNUnet?) + - more deterministic builds + + identify & fix sources of non-determinism in builds + + strengthen guix-daemon containers to further increase reproducibility + + trusting-trust: bootstrap with different tool chains + + fixed-point: re-bootstrap until fixed point is reached + + distributed validation: compare contents of store items with others + * resist a hydra.gnu.org compromise + - reproducible containers: mix of 'guix environment' and 'guix system vm' + - execute code with least privilege + + build containers like guix-daemon does + + provide a Plash-like interface in Bash + - daemon rewritten in Guile + - more dmd integration + + monitor network interfaces and start/stop events based on that + + include a DHCP client written in Scheme diff --git a/configure.ac b/configure.ac index 235990edc3..6f75fa3d7d 100644 --- a/configure.ac +++ b/configure.ac @@ -2,7 +2,7 @@ # Process this file with autoconf to produce a configure script. AC_PREREQ(2.68) -AC_INIT([GNU Guix], [0.9], [bug-guix@gnu.org], [guix], +AC_INIT([GNU Guix], [0.8.1], [bug-guix@gnu.org], [guix], [http://www.gnu.org/software/guix/]) AC_CONFIG_AUX_DIR([build-aux]) diff --git a/doc/emacs.texi b/doc/emacs.texi index 86e0048538..93d0c86b42 100644 --- a/doc/emacs.texi +++ b/doc/emacs.texi @@ -24,6 +24,12 @@ guix package}). Specifically, ``guix.el'' makes it easy to: @node Emacs Initial Setup @subsection Initial Setup +On the Guix System Distribution (@pxref{GNU Distribution}), ``guix.el'' +is ready to use, provided Guix is installed system-wide, which is the +case by default. So if that is what you're using, you can happily skip +this section and read about the fun stuff. + +If you're not yet a happy user of GSD, a little bit of setup is needed. To be able to use ``guix.el'', you need to install the following packages: diff --git a/doc/guix.texi b/doc/guix.texi index 857653dca4..0d2a61347f 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -208,9 +208,15 @@ garbage collection of packages (@pxref{Features}). Guix has a command-line interface, which allows users to build, install, upgrade, and remove packages, as well as a Scheme programming interface. +@cindex Guix System Distribution +@cindex GSD Last but not least, Guix is used to build a distribution of the GNU -system, with many GNU and non-GNU free software packages. @xref{GNU -Distribution}. +system, with many GNU and non-GNU free software packages. The Guix +System Distribution, or GNU@tie{}GSD, takes advantage of the core +properties of Guix at the system level. With GNU@tie{}GSD, users +@emph{declare} all aspects of the operating system configuration, and +Guix takes care of instantiating that configuration in a reproducible, +stateless fashion. @xref{GNU Distribution}. @c ********************************************************************* @node Installation @@ -3312,19 +3318,17 @@ build} supports (@pxref{Invoking guix build, common build options}). @node GNU Distribution @chapter GNU Distribution -@cindex Guixotic -Guix comes with a distribution of free software@footnote{The term -``free'' here refers to the +@cindex Guix System Distribution +@cindex GSD +Guix comes with a distribution of the GNU system consisting entirely of +free software@footnote{The term ``free'' here refers to the @url{http://www.gnu.org/philosophy/free-sw.html,freedom provided to -users of that software}.} that forms the basis of the GNU system. The +users of that software}.}. The distribution can be installed on its own (@pxref{System Installation}), but it is also possible to install Guix as a package manager on top of an installed GNU/Linux system (@pxref{Installation}). To distinguish -between the two, we refer to the standalone distribution as -``Guixotic''@footnote{``How am I going to pronounce that name?'', you -may ask. Well, we would pronounce it like ``geeks-otic'', for -consistency with Guix---which is quite different from the usual -pronunciation of ``quixotic''.}. +between the two, we refer to the standalone distribution as the Guix +System Distribution, or GNU@tie{}GSD. The distribution provides core GNU packages such as GNU libc, GCC, and Binutils, as well as many GNU and non-GNU applications. The complete @@ -3341,7 +3345,7 @@ Linux-based and other variants of GNU, with a focus on the promotion and tight integration of GNU components, and an emphasis on programs and tools that help users exert that freedom. -The GNU distribution is currently available on the following platforms: +Packages are currently available on the following platforms: @table @code @@ -3361,6 +3365,8 @@ n32 application binary interface (ABI), and Linux-Libre kernel. @end table +GSD itself is currently only available on @code{i686} and @code{x86_64}. + @noindent For information on porting to other architectures or kernels, @xref{Porting}. @@ -3382,9 +3388,9 @@ to join! @xref{Contributing}, for information about how you can help. @node System Installation @section System Installation -@cindex Guixotic -This section explains how to install the standalone distribution, -code-named ``Guixotic'', on a machine. The Guix package manager can +@cindex Guix System Distribution +This section explains how to install the Guix System Distribution +on a machine. The Guix package manager can also be installed on top of a running GNU/Linux system, @pxref{Installation}. @@ -3399,13 +3405,13 @@ link that follows: @pxref{Help,,, info, Info: An Introduction}. Hit @subsection Limitations -As of version @value{VERSION}, GNU@tie{}Guix and Guixotic are -not production-ready. They may contain bugs and lack important +As of version @value{VERSION}, the Guix System Distribution (GSD) is +not production-ready. It may contain bugs and lack important features. Thus, if you are looking for a stable production system that respects your freedom as a computer user, a good solution at this point is to consider @url{http://www.gnu.org/distros/free-distros.html, one of more established GNU/Linux distributions}. We hope you can soon switch -to Guixotic without fear, of course. In the meantime, you can +to the GSD without fear, of course. In the meantime, you can also keep using your distribution and try out the package manager on top of it (@pxref{Installation}). @@ -3441,7 +3447,7 @@ to report issues (and success stories!), and join us in improving it. @subsection USB Stick Installation An installation image for USB sticks can be downloaded from -@url{ftp://alpha.gnu.org/gnu/guix/gnu-usb-install-@value{VERSION}.@var{system}.xz}, +@url{ftp://alpha.gnu.org/gnu/guix/guix-usb-install-@value{VERSION}.@var{system}.xz}, where @var{system} is one of: @table @code @@ -3589,7 +3595,7 @@ about the installation image. @section System Configuration @cindex system configuration -Guixotic supports a consistent whole-system configuration +The Guix System Distribution supports a consistent whole-system configuration mechanism. By that we mean that all aspects of the global system configuration---such as the available system services, timezone and locale settings, user accounts---are declared in a single place. Such @@ -4379,7 +4385,7 @@ settings. @deffn {Monadic Procedure} guix-service [#:guix guix] @ [#:builder-group "guixbuild"] [#:build-accounts 10] @ - [#:authorize-hydra-key? #f] [#:use-substitutes? #t] @ + [#:authorize-hydra-key? #t] [#:use-substitutes? #t] @ [#:extra-options '()] Return a service that runs the build daemon from @var{guix}, and has @var{build-accounts} user accounts available under @var{builder-group}. @@ -4800,7 +4806,7 @@ This action does not actually install anything. @item init Populate the given directory with all the files necessary to run the operating system specified in @var{file}. This is useful for first-time -installations of Guixotic. For instance: +installations of GSD. For instance: @example guix system init my-os-config.scm /mnt diff --git a/gnu-system.am b/gnu-system.am index f29b45294e..c4387baec8 100644 --- a/gnu-system.am +++ b/gnu-system.am @@ -67,6 +67,7 @@ GNU_SYSTEM_MODULES = \ gnu/packages/cross-base.scm \ gnu/packages/crypto.scm \ gnu/packages/cryptsetup.scm \ + gnu/packages/cups.scm \ gnu/packages/curl.scm \ gnu/packages/cursynth.scm \ gnu/packages/cyrus-sasl.scm \ @@ -243,6 +244,7 @@ GNU_SYSTEM_MODULES = \ gnu/packages/serveez.scm \ gnu/packages/shishi.scm \ gnu/packages/skribilo.scm \ + gnu/packages/slang.scm \ gnu/packages/slim.scm \ gnu/packages/smalltalk.scm \ gnu/packages/socat.scm \ @@ -326,6 +328,11 @@ dist_patch_DATA = \ gnu/packages/patches/abiword-pass-no-undefined-to-linker.patch \ gnu/packages/patches/abiword-use-proper-png-api.patch \ gnu/packages/patches/abiword-wmf-version-lookup-fix.patch \ + gnu/packages/patches/aegis-constness-error.patch \ + gnu/packages/patches/aegis-perl-tempdir1.patch \ + gnu/packages/patches/aegis-perl-tempdir2.patch \ + gnu/packages/patches/aegis-test-fixup-1.patch \ + gnu/packages/patches/aegis-test-fixup-2.patch \ gnu/packages/patches/alsa-lib-mips-atomic-fix.patch \ gnu/packages/patches/apr-skip-getservbyname-test.patch \ gnu/packages/patches/ath9k-htc-firmware-binutils.patch \ @@ -349,6 +356,7 @@ dist_patch_DATA = \ gnu/packages/patches/cpio-gets-undeclared.patch \ gnu/packages/patches/cssc-gets-undeclared.patch \ gnu/packages/patches/cssc-missing-include.patch \ + gnu/packages/patches/clucene-contribs-lib.patch \ gnu/packages/patches/curl-gss-api-fix.patch \ gnu/packages/patches/cursynth-wave-rand.patch \ gnu/packages/patches/dbus-localstatedir.patch \ @@ -412,6 +420,7 @@ dist_patch_DATA = \ gnu/packages/patches/libarchive-fix-lzo-test-case.patch \ gnu/packages/patches/libarchive-mtree-filename-length-fix.patch \ gnu/packages/patches/libbonobo-activation-test-race.patch \ + gnu/packages/patches/libcanberra-sound-theme-freedesktop.patch \ gnu/packages/patches/libevent-dns-tests.patch \ gnu/packages/patches/liboop-mips64-deplibs-fix.patch \ gnu/packages/patches/libmad-mips-newgcc.patch \ @@ -419,6 +428,7 @@ dist_patch_DATA = \ gnu/packages/patches/libtool-skip-tests.patch \ gnu/packages/patches/libssh-CVE-2014-0017.patch \ gnu/packages/patches/lm-sensors-hwmon-attrs.patch \ + gnu/packages/patches/lua51-liblua-so.patch \ gnu/packages/patches/luit-posix.patch \ gnu/packages/patches/m4-gets-undeclared.patch \ gnu/packages/patches/make-impure-dirs.patch \ @@ -433,7 +443,9 @@ dist_patch_DATA = \ gnu/packages/patches/net-tools-bitrot.patch \ gnu/packages/patches/ninja-tests.patch \ gnu/packages/patches/nss-pkgconfig.patch \ - gnu/packages/patches/nvi-assume-preserve-path.patch \ + gnu/packages/patches/nvi-assume-preserve-path.patch \ + gnu/packages/patches/nvi-dbpagesize-binpower.patch \ + gnu/packages/patches/nvi-db4.patch \ gnu/packages/patches/orpheus-cast-errors-and-includes.patch \ gnu/packages/patches/ots-no-include-missing-file.patch \ gnu/packages/patches/patchelf-page-size.patch \ @@ -450,6 +462,7 @@ dist_patch_DATA = \ gnu/packages/patches/pulseaudio-fix-mult-test.patch \ gnu/packages/patches/pybugz-encode-error.patch \ gnu/packages/patches/pybugz-stty.patch \ + gnu/packages/patches/pyqt-configure.patch \ gnu/packages/patches/python-fix-tests.patch \ gnu/packages/patches/python-libffi-mips-n32-fix.patch \ gnu/packages/patches/python-sqlite-3.8.4-test-fix.patch \ @@ -476,7 +489,7 @@ dist_patch_DATA = \ gnu/packages/patches/unzip-CVE-2014-8139.patch \ gnu/packages/patches/unzip-CVE-2014-8140.patch \ gnu/packages/patches/unzip-CVE-2014-8141.patch \ - gnu/packages/patches/util-linux-perl.patch \ + gnu/packages/patches/util-linux-tests.patch \ gnu/packages/patches/vpnc-script.patch \ gnu/packages/patches/vtk-mesa-10.patch \ gnu/packages/patches/w3m-fix-compile.patch \ diff --git a/gnu.scm b/gnu.scm index eb0bf71ab1..d9b9117b8a 100644 --- a/gnu.scm +++ b/gnu.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2015 Joshua S. Grant <jgrant@parenthetical.io> ;;; ;;; This file is part of GNU Guix. ;;; @@ -16,7 +17,10 @@ ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. -(define-module (gnu)) +(define-module (gnu) + #:export (use-package-modules + use-service-modules + use-system-modules)) ;;; Commentary: ;;; @@ -44,4 +48,13 @@ (module-use! i (resolve-interface m)))) %public-modules))) +(define-syntax-rule (use-package-modules module ...) + (use-modules (gnu packages module) ...)) + +(define-syntax-rule (use-service-modules module ...) + (use-modules (gnu services module) ...)) + +(define-syntax-rule (use-system-modules module ...) + (use-modules (gnu system module) ...)) + ;;; gnu.scm ends here diff --git a/gnu/packages.scm b/gnu/packages.scm index 7f0b58b971..57a3e21bd6 100644 --- a/gnu/packages.scm +++ b/gnu/packages.scm @@ -30,6 +30,8 @@ #:use-module (srfi srfi-1) #:use-module (srfi srfi-11) #:use-module (srfi srfi-26) + #:use-module (srfi srfi-34) + #:use-module (srfi srfi-35) #:use-module (srfi srfi-39) #:export (search-patch search-bootstrap-binary @@ -70,13 +72,23 @@ %load-path))) (define (search-patch file-name) - "Search the patch FILE-NAME." - (search-path (%patch-path) file-name)) + "Search the patch FILE-NAME. Raise an error if not found." + (or (search-path (%patch-path) file-name) + (raise (condition + (&message (message (format #f (_ "~a: patch not found") + file-name))))))) (define (search-bootstrap-binary file-name system) - "Search the bootstrap binary FILE-NAME for SYSTEM." - (search-path (%bootstrap-binaries-path) - (string-append system "/" file-name))) + "Search the bootstrap binary FILE-NAME for SYSTEM. Raise an error if not +found." + (or (search-path (%bootstrap-binaries-path) + (string-append system "/" file-name)) + (raise (condition + (&message + (message + (format #f (_ "could not find bootstrap binary '~a' \ +for system '~a'") + file-name system))))))) (define %distro-root-directory ;; Absolute file name of the module hierarchy. diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm index d7cd0b8092..534fd070ff 100644 --- a/gnu/packages/admin.scm +++ b/gnu/packages/admin.scm @@ -631,7 +631,10 @@ system administrator.") "002l6h27pnhb77b65frhazbhknsxvrsnkpi43j7i0qw1lrgi7nkf")))) (build-system gnu-build-system) (arguments - `(#:configure-flags '("--with-logpath=/var/log/sudo.log") + `(#:configure-flags '("--with-logpath=/var/log/sudo.log" + "--with-rundir=/run/sudo" + "--with-vardir=/var/db/sudo" + "--with-iologdir=/var/log/sudo-io") #:phases (alist-cons-before 'configure 'pre-configure (lambda _ @@ -645,7 +648,13 @@ system administrator.") "") (("^install: (.*)install-sudoers(.*)" _ before after) ;; Don't try to create /etc/sudoers. - (string-append "install: " before after "\n")))) + (string-append "install: " before after "\n")) + (("\\$\\(DESTDIR\\)\\$\\(rundir\\)") + ;; Don't try to create /run/sudo. + "$(TMPDIR)/dummy") + (("\\$\\(DESTDIR\\)\\$\\(vardir\\)") + ;; Don't try to create /var/db/sudo. + "$(TMPDIR)/dummy"))) %standard-phases) ;; XXX: The 'testsudoers' test series expects user 'root' to exist, but diff --git a/gnu/packages/autotools.scm b/gnu/packages/autotools.scm index 8e72562444..7f20b262f8 100644 --- a/gnu/packages/autotools.scm +++ b/gnu/packages/autotools.scm @@ -238,14 +238,14 @@ Makefile, simplifying the entire process for the developer.") (define-public libtool (package (name "libtool") - (version "2.4.4") + (version "2.4.5") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/libtool/libtool-" version ".tar.xz")) (sha256 (base32 - "0v3zq08qxv7k5067mpqrkjkjl3wphhg06i696mka90mzadc5nad8")) + "0zhphv4n9bdd6sz66lqfrfqcsnv89mg2bykgi5w9401va4vc3al4")) (patches (list (search-patch "libtool-skip-tests.patch"))))) (build-system gnu-build-system) @@ -295,8 +295,16 @@ complexity of working with shared libraries across platforms.") ;; Libtool's extensive test suite isn't run. (package (name "libltdl") - (version (package-version libtool)) - (source (package-source libtool)) + (version "2.4.4") + (source (origin + (method url-fetch) + (uri (string-append "mirror://gnu/libtool/libtool-" + version ".tar.xz")) + (sha256 + (base32 + "0v3zq08qxv7k5067mpqrkjkjl3wphhg06i696mka90mzadc5nad8")) + (patches + (list (search-patch "libtool-skip-tests.patch"))))) (build-system gnu-build-system) (arguments '(#:configure-flags '("--enable-ltdl-install") ;really install it diff --git a/gnu/packages/cups.scm b/gnu/packages/cups.scm new file mode 100644 index 0000000000..a74e4097eb --- /dev/null +++ b/gnu/packages/cups.scm @@ -0,0 +1,293 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net> +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +(define-module (gnu packages cups) + #: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 avahi) + #:use-module (gnu packages compression) + #:use-module (gnu packages image) + #:use-module (gnu packages fonts) ;font-dejavu + #:use-module (gnu packages fontutils) + #:use-module (gnu packages ghostscript) + #:use-module (gnu packages glib) + #:use-module (gnu packages gnutls) + #:use-module (gnu packages pdf) + #:use-module (gnu packages pkg-config)) + +(define-public cups-filters + (package + (name "cups-filters") + (version "1.0.61") + (source (origin + (method url-fetch) + (uri + (string-append "http://openprinting.org/download/cups-filters/" + "cups-filters-" version ".tar.xz")) + (sha256 + (base32 + "1bq48nnrarlbf6qc93bz1n5wlh6j420gppbck3r45sinwhz5wa7m")) + (modules '((guix build utils))) + (snippet + ;; install backends, banners and filters to cups-filters output + ;; directory, not the cups server directory + '(substitute* "Makefile.in" + (("CUPS_DATADIR = @CUPS_DATADIR@") + "CUPS_DATADIR = $(PREFIX)/share/cups") + (("pkgcupsserverrootdir = \\$\\(CUPS_SERVERROOT\\)") + "pkgcupsserverrootdir = $(PREFIX)") + (("pkgbackenddir = \\$\\(CUPS_SERVERBIN\\)/backend") + "pkgbackenddir = $(PREFIX)/backend") + (("pkgfilterdir = \\$\\(CUPS_SERVERBIN\\)/filter") + "pkgfilterdir = $(PREFIX)/filter"))))) + (build-system gnu-build-system) + (arguments + `(#:make-flags (list (string-append "PREFIX=" %output)) + #:configure-flags + `(,(string-append "--with-test-font-path=" + (assoc-ref %build-inputs "font-dejavu") + "/share/fonts/truetype/DejaVuSans.ttf") + ,(string-append "--with-rcdir=" + (assoc-ref %outputs "out") "/etc/rc.d")))) + (native-inputs + `(("pkg-config" ,pkg-config))) + (inputs + `(("fontconfig" ,fontconfig) + ("freetype" ,freetype) + ("font-dejavu" ,font-dejavu) ;needed by test suite + ("ghostscript" ,ghostscript) + ("ijs" ,ijs) + ("dbus" ,dbus) + ("lcms" ,lcms) + ("libjpeg-8" ,libjpeg-8) + ("libpng" ,libpng) + ("libtiff" ,libtiff) + ("glib" ,glib) + ("qpdf" ,qpdf) + ("poppler" ,poppler) + ("cups-minimal" ,cups-minimal))) + (home-page "http://www.linuxfoundation.org/collaborate/workgroups/openprinting/cups-filters") + (synopsis "OpenPrinting CUPS filters and backends") + (description + "Contains backends, filters, and other software that was once part of the +core CUPS distribution but is no longer maintained by Apple Inc. In addition +it contains additional filters developed independently of Apple, especially +filters for the PDF-centric printing workflow introduced by OpenPrinting.") + ;; Different filters and backends have different licenses; see COPYING for + ;; details + (license (list license:gpl2 + license:gpl2+ + license:gpl3 + license:gpl3+ + license:lgpl2.0+ + license:expat)))) + +;; CUPS on non-MacOS systems requires cups-filters. Since cups-filters also +;; depends on CUPS libraries and binaries, cups-minimal has been added to +;; satisfy this dependency. +(define-public cups-minimal + (package + (name "cups-minimal") + (version "2.0.1") + (source (origin + (method url-fetch) + (uri (string-append "http://www.cups.org/software/" + version "/cups-" version "-source.tar.gz")) + (sha256 + (base32 + "1kbc85kwhm1vyzahblrg3qih9yypggs91d13gdrbnaac8q7jd9jr")))) + (build-system gnu-build-system) + (arguments + `(#:configure-flags + '("--disable-launchd" + "--disable-systemd" + "--disable-avahi" + "--disable-dnssd") + ;; Seven tests fail, mostly because of files that are provided by the + ;; cups-filters package. + #:tests? #f + #:phases + (alist-cons-before + 'configure + 'patch-makedefs + (lambda _ + (substitute* "Makedefs.in" + (("INITDIR.*=.*@INITDIR@") "INITDIR = @prefix@/@INITDIR@") + (("/bin/sh") (which "sh")))) + (alist-cons-before + 'build + 'patch-tests + (lambda _ + (substitute* "test/ippserver.c" + (("# else /\\* HAVE_AVAHI \\*/") "#elif defined(HAVE_AVAHI)"))) + %standard-phases)))) + (native-inputs + `(("pkg-config" ,pkg-config))) + (inputs + `(("zlib" ,zlib) + ("gnutls" ,gnutls))) + (home-page "http://www.cups.org") + (synopsis "The Common Unix Printing System") + (description + "CUPS is a printing system that uses the Internet Printing +Protocol (IPP). It provides System V and BSD command-line interfaces, as well +as a Web interface and a C programming interface to manage printers and print +jobs. It supports printing to both local (parallel, serial, USB) and +networked printers, and printers can be shared from one computer to another. +Internally, CUPS uses PostScript Printer Description (PPD) files to describe +printer capabilities and features and a wide variety of generic and +device-specific programs to convert and print many types of files.") + (license license:gpl2))) + +(define-public cups + (package (inherit cups-minimal) + (name "cups") + (arguments + `(;; Three tests fail: + ;; * two tests in ipp-1.1.test related to "RFC 2911 section 3.2.6: + ;; Get-Jobs Operation" + ;; * test of number of error/warning messages, probably related to a + ;; missing font. + #:tests? #f + #:configure-flags + '("--disable-launchd" + "--disable-systemd") + #:phases + (alist-cons-before + 'configure + 'patch-makedefs + (lambda _ + (substitute* "Makedefs.in" + (("INITDIR.*=.*@INITDIR@") "INITDIR = @prefix@/@INITDIR@") + (("/bin/sh") (which "sh")))) + (alist-cons-before + 'check + 'patch-tests + (lambda _ + (let ((filters (assoc-ref %build-inputs "cups-filters")) + (catpath (string-append + (assoc-ref %build-inputs "coreutils") "/bin/")) + (testdir (string-append (getcwd) "/tmp/"))) + (mkdir testdir) + (substitute* "test/run-stp-tests.sh" + ((" *BASE=/tmp/") (string-append "BASE=" testdir)) + + ;; allow installation of filters from output dir and from + ;; cups-filters + (("for dir in /usr/libexec/cups/filter /usr/lib/cups/filter") + (string-append + "for dir in " + (assoc-ref %outputs "out") "/lib/cups/filter " + filters "/filter")) + + ;; check for charsets in cups-filters output + (("/usr/share/cups/charsets") + (string-append filters "/share/cups/charsets")) + + ;; install additional required filters + (("instfilter texttopdf texttopdf pdf") + (string-append + "instfilter texttopdf texttopdf pdf;" + "instfilter imagetoraster imagetoraster raster;" + "instfilter gstoraster gstoraster raster;" + "instfilter urftopdf urftopdf pdf;" + "instfilter rastertopdf rastertopdf pdf;" + "instfilter pstopdf pstopdf pdf")) + + ;; specify location of lpstat binary + (("description=\"`lpstat -l") + "description=\"`../systemv/lpstat -l") + + ;; patch shebangs of embedded scripts + (("#!/bin/sh") (string-append "#!" (which "sh"))) + + ;; also link mime definitions from cups-filters + ;; to enable the additional filters for the test suite + (("ln -s \\$root/conf/mime\\.types") + (string-append + "ln -s " filters + "/share/cups/mime/cupsfilters.types $BASE/share/mime; " + "ln -s $root/conf/mime.types")) + (("ln -s \\$root/conf/mime\\.convs") + (string-append + "ln -s " filters + "/share/cups/mime/cupsfilters.convs $BASE/share/mime; " + "ln -s $root/conf/mime.convs"))) + + ;; fix search path for "cat" + (substitute* "cups/testfile.c" + (("cupsFileFind\\(\"cat\", \"/bin\"") + (string-append "cupsFileFind(\"cat\", \"" catpath "\"")) + (("cupsFileFind\\(\"cat\", \"/bin:/usr/bin\"") + (string-append "cupsFileFind(\"cat\", \"" catpath "\""))))) + (alist-cons-after + 'install + 'install-cups-filters-symlinks + (lambda* (#:key inputs outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (cups-filters (assoc-ref inputs "cups-filters"))) + ;; charsets + (symlink + (string-append cups-filters "/share/cups/charsets") + (string-append out "/share/charsets")) + + ;; mime types, driver file, ppds + (for-each + (lambda (f) + (symlink (string-append cups-filters f) + (string-append out f))) + '("/share/cups/mime/cupsfilters.types" + "/share/cups/mime/cupsfilters.convs" + "/share/cups/drv/cupsfilters.drv" + "/share/ppd")) + + ;; filters + (for-each + (lambda (f) + (symlink f + (string-append out "/lib/cups/filter" (basename f)))) + (find-files (string-append cups-filters "/filter") ".*")) + + ;; backends + (for-each + (lambda (f) + (symlink (string-append cups-filters f) + (string-append out "/lib/cups" f))) + '("/backend/parallel" + "/backend/serial")) + + ;; banners + (let ((banners "/share/cups/banners")) + (delete-file-recursively (string-append out banners)) + (symlink (string-append cups-filters banners) + (string-append out banners))) + + ;; assorted data + (let ((data "/share/cups/data")) + (delete-file-recursively (string-append out data)) + (symlink (string-append cups-filters data) + (string-append out data))))) + %standard-phases))))) + (inputs + `(("avahi" ,avahi) + ("gnutls" ,gnutls) + ("cups-filters" ,cups-filters) + ("zlib" ,zlib))))) diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm index 9ccf34c362..f4d7ac9748 100644 --- a/gnu/packages/emacs.scm +++ b/gnu/packages/emacs.scm @@ -1,6 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014 Taylan Ulrich Bayirli/Kammer <taylanbayirli@gmail.com> -;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org> ;;; Copyright © 2014 Alex Kost <alezost@gmail.com> ;;; @@ -482,13 +482,12 @@ operations.") (alist-cons-before 'install 'pre-install (lambda* (#:key outputs #:allow-other-keys) - ;; The 'install' rule expects 'emms-print-metadata.1' to - ;; be already installed. + ;; The 'install' rule expects the target directory to + ;; exist. (let* ((out (assoc-ref outputs "out")) (man1 (string-append out "/share/man/man1"))) (mkdir-p man1) - (copy-file "emms-print-metadata.1" - (string-append man1 "/emms-print-metadata.1")))) + #t)) (alist-cons-after 'install 'post-install (lambda* (#:key outputs #:allow-other-keys) @@ -505,8 +504,7 @@ operations.") #:tests? #f)) (native-inputs `(("emacs" ,emacs) ;for (guix build emacs-utils) ("texinfo" ,texinfo))) - (inputs `(;("perl" ,perl) ;for 'emms-print-metadata.pl' - ("alsa-utils" ,alsa-utils) + (inputs `(("alsa-utils" ,alsa-utils) ("vorbis-tools" ,vorbis-tools) ("mpg321" ,mpg321) ("taglib" ,taglib) diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm index c16ab93242..94993f0d08 100644 --- a/gnu/packages/fonts.scm +++ b/gnu/packages/fonts.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org> ;;; Copyright © 2014 Joshua Grant <tadni@riseup.net> ;;; Copyright © 2014 Alex Kost <alezost@gmail.com> @@ -25,8 +25,7 @@ #:use-module (guix download) #:use-module (guix build-system gnu) #:use-module (guix build-system trivial) - #:use-module ((gnu packages base) - #:select (tar)) + #:use-module (gnu packages base) #:use-module (gnu packages compression) #:use-module (gnu packages perl) #:use-module (gnu packages xorg) diff --git a/gnu/packages/freeipmi.scm b/gnu/packages/freeipmi.scm index 39e541b884..a6bba757da 100644 --- a/gnu/packages/freeipmi.scm +++ b/gnu/packages/freeipmi.scm @@ -27,14 +27,14 @@ (define-public freeipmi (package (name "freeipmi") - (version "1.4.7") + (version "1.4.8") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/freeipmi/freeipmi-" version ".tar.gz")) (sha256 (base32 - "1j33b2spj1vzjf1ymfrgka5h7imijmdwg9jdjfb92b2ccld9jj6l")))) + "06smdsri1v5v2smrd3jxq3n135x7cx0npcimc37lb144gzgyk9wz")))) (build-system gnu-build-system) (inputs `(("readline" ,readline) ("libgcrypt" ,libgcrypt))) diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm index 056b3681a7..fefdf67f3d 100644 --- a/gnu/packages/game-development.scm +++ b/gnu/packages/game-development.scm @@ -17,11 +17,14 @@ ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (gnu packages game-development) - #:use-module (guix licenses) + #:use-module ((guix licenses) #:prefix license:) #:use-module (guix packages) #:use-module (guix download) #:use-module (guix build-system cmake) - #:use-module (gnu packages)) + #:use-module (guix build-system gnu) + #:use-module (gnu packages) + #:use-module (gnu packages qt) + #:use-module (gnu packages compression)) (define-public bullet (package @@ -45,4 +48,38 @@ (description "Bullet is a physics engine library usable for collision detection. It is used in some video games and movies.") - (license zlib))) + (license license:zlib))) + +(define-public tiled + (package + (name "tiled") + (version "0.11.0") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/bjorn/tiled/archive/v" + version ".tar.gz")) + (sha256 + (base32 + "03a15vbzjfwc8dpifbjvd0gnr208mzmdkgs2nlc8zq6z0a4h4jqd")))) + (build-system gnu-build-system) + (inputs `(("qt" ,qt) + ("zlib" ,zlib))) + (arguments + '(#:phases + (alist-replace + 'configure + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (system* "qmake" + (string-append "PREFIX=" out)))) + %standard-phases))) + (home-page "http://www.mapeditor.org/") + (synopsis "Tile map editor") + (description + "Tiled is a general purpose tile map editor. It is meant to be used for +editing maps of any tile-based game, be it an RPG, a platformer or a Breakout +clone.") + + ;; As noted in 'COPYING', part of it is under GPLv2+, while the rest is + ;; under BSD-2. + (license license:gpl2+))) diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm index f206d3caca..a9c4d6bd11 100644 --- a/gnu/packages/games.scm +++ b/gnu/packages/games.scm @@ -520,40 +520,6 @@ alternative layouts Dvorak and Colemak, as well as for the numpad. Tutorials are primarily in English, however some in other languages are provided.") (license license:gpl3+))) -(define-public tiled - (package - (name "tiled") - (version "0.10.2") - (source (origin - (method url-fetch) - (uri (string-append "https://github.com/bjorn/tiled/archive/v" - version ".tar.gz")) - (sha256 - (base32 - "0p4p3lv4nw11fkfvvyjirb93r2x4w2rrc2w650gl2k57k92jpiij")))) - (build-system gnu-build-system) - (inputs `(("qt" ,qt) - ("zlib" ,zlib))) - (arguments - '(#:phases - (alist-replace - 'configure - (lambda* (#:key outputs #:allow-other-keys) - (let ((out (assoc-ref outputs "out"))) - (system* "qmake" - (string-append "PREFIX=" out)))) - %standard-phases))) - (home-page "http://www.mapeditor.org/") - (synopsis "Tile map editor") - (description - "Tiled is a general purpose tile map editor. It is meant to be used for -editing maps of any tile-based game, be it an RPG, a platformer or a Breakout -clone.") - - ;; As noted in 'COPYING', part of it is under GPLv2+, while the rest is - ;; under BSD-2. - (license license:gpl2+))) - (define-public openal (package (name "openal") diff --git a/gnu/packages/ghostscript.scm b/gnu/packages/ghostscript.scm index 405b4e744e..e2d4e618fa 100644 --- a/gnu/packages/ghostscript.scm +++ b/gnu/packages/ghostscript.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org> +;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net> ;;; ;;; This file is part of GNU Guix. ;;; @@ -19,6 +20,7 @@ (define-module (gnu packages ghostscript) #:use-module (gnu packages) + #:use-module (gnu packages autotools) #:use-module (gnu packages compression) #:use-module (gnu packages fontutils) #:use-module (gnu packages image) @@ -164,6 +166,49 @@ output file formats and printers.") (license license:agpl3+) (home-page "http://www.gnu.org/software/ghostscript/"))) +(define-public ijs + (package + (name "ijs") + (version "9.14.0") + (source (origin + (method url-fetch) + (uri (string-append "mirror://gnu/ghostscript/gnu-ghostscript-" + version ".tar.xz")) + (sha256 (base32 + "0q4jj41p0qbr4mgcc9q78f5zs8cm1g57wgryhsm2yq4lfslm3ib1")))) + (build-system gnu-build-system) + (native-inputs + `(("libtool" ,libtool) + ("automake" ,automake) + ("autoconf" ,autoconf))) + (arguments + `(#:phases + (alist-cons-after + 'unpack 'autogen + (lambda _ + ;; need to regenerate macros + (system* "autoreconf" "-if") + ;; do not run configure + (substitute* "autogen.sh" + (("^.*\\$srcdir/configure.*") "")) + (system* "bash" "autogen.sh") + + ;; create configure script in ./ijs/ + (chdir "ijs") + ;; do not run configure + (substitute* "autogen.sh" + (("^.*\\$srcdir/configure.*") "") + (("^ + && echo Now type.*$") "")) + (zero? (system* "bash" "autogen.sh"))) + %standard-phases))) + (synopsis "IJS driver framework for inkjet and other raster devices") + (description + "IJS is a protocol for transmission of raster page images. This package +provides the reference implementation of the raster printer driver +architecture.") + (license license:expat) + (home-page "http://www.gnu.org/software/ghostscript/"))) + (define-public gs-fonts (package (name "gs-fonts") diff --git a/gnu/packages/glib.scm b/gnu/packages/glib.scm index 39fc736b02..bbb57335a5 100644 --- a/gnu/packages/glib.scm +++ b/gnu/packages/glib.scm @@ -1,6 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org> -;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> +;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr> ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org> ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org> ;;; @@ -52,7 +52,8 @@ intltool itstool libsigc++ - glibmm)) + glibmm + telepathy-glib)) (define dbus (package @@ -519,3 +520,38 @@ useful for C++.") (description "Python bindings for GLib, GObject, and GIO.") (license license:lgpl2.1+))) + +(define telepathy-glib + (package + (name "telepathy-glib") + (version "0.24.1") + (source + (origin + (method url-fetch) + (uri + (string-append + "http://telepathy.freedesktop.org/releases/telepathy-glib/" + "telepathy-glib-" version ".tar.gz")) + (sha256 + (base32 + "1symyzbjmxvksn2ifdkk50lafjm2llf2sbmky062gq2pz3cg23cy")))) + (build-system gnu-build-system) + (native-inputs + `(("glib" ,glib "bin") ; uses glib-mkenums + ("pkg-config" ,pkg-config) + ("python" ,python-2))) + (inputs + `(("dbus" ,dbus) + ("dbus-glib" ,dbus-glib) + ("glib" ,glib) + ("gobject-introspection" ,gobject-introspection) + ("libxslt" ,libxslt))) + (home-page "http://telepathy.freedesktop.org/wiki/") + (synopsis "GLib Real-time communications framework over D-Bus") + (description "Telepathy is a flexible, modular communications framework +that enables real-time communication over D-Bus via pluggable protocol +backends. Telepathy is a communications service that can be accessed by +many applications simultaneously. + +This package provides the library for GLib applications.") + (license license:lgpl2.1+))) diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm index 0f33880a21..535913bcf1 100644 --- a/gnu/packages/gnome.scm +++ b/gnu/packages/gnome.scm @@ -1,6 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> -;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr> +;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net> ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org> ;;; Copyright © 2014, 2015 Federico Beffa <beffa@fbengineering.ch> @@ -1022,6 +1022,8 @@ widgets built in the loading process.") (license license:gpl2+))) ; This is correct. GPL not LGPL (define-public libgnomeprint + ;; This library has been deprecated since 2006; see + ;; <https://mail.gnome.org/archives/devel-announce-list/2006-August/msg00005.html>. (package (name "libgnomeprint") (version "2.8.2") @@ -1045,11 +1047,14 @@ widgets built in the loading process.") ("pkg-config" ,pkg-config))) (home-page "https://projects.gnome.org/gnome-print/home/faq.html") (synopsis "Printing framework for GNOME") - (description "Gnome-print is a high-quality printing framework for GNOME.") + (description + "GNOME-print was a printing framework for GNOME. It has been deprecated +since ca. 2006, when GTK+ itself incorporated printing support.") (license license:lgpl2.0+))) (define-public libgnomeprintui + ;; Deprecated; see libgnomeprint. (package (name "libgnomeprintui") (version "2.8.2") @@ -1074,10 +1079,9 @@ widgets built in the loading process.") ("pkg-config" ,pkg-config))) (home-page "https://projects.gnome.org/gnome-print/home/faq.html") (synopsis "Printing framework for GNOME") - (description "Gnome-print is a high-quality printing framework for GNOME.") + (description (package-description libgnomeprint)) (license license:lgpl2.0+))) - (define-public libbonoboui (package (name "libbonoboui") @@ -1442,3 +1446,31 @@ editors, IDEs, etc.") is to provide a backend to GSettings on platforms that don't already have configuration storage systems.") (license license:lgpl2.1))) + +(define-public json-glib + (package + (name "json-glib") + (version "1.0.2") + (source (origin + (method url-fetch) + (uri (string-append "mirror://gnome/sources/" name "/" + (version-major+minor version) "/" + name "-" version ".tar.xz")) + (sha256 + (base32 + "02k66lpc4cmgygj66n8zcy59bggy7yzm3v4hni9xqplgva9d2yw8")))) + (build-system gnu-build-system) + (native-inputs + `(("glib" ,glib "bin") ; for glib-mkenums and glib-genmarshal + ("gobject-introspection" ,gobject-introspection) + ("pkg-config" ,pkg-config))) + (propagated-inputs + `(("glib" ,glib))) ; according to json-glib-1.0.pc + (home-page "https://wiki.gnome.org/Projects/JsonGlib") + (synopsis "Compiler for the GObject type system") + (description "JSON-GLib is a C library based on GLib providing +serialization and deserialization support for the JavaScript Object Notation +(JSON) format described by RFC 4627. It provides parser and generator +GObject classes and various wrappers for the complex data types employed by +JSON, such as arrays and objects.") + (license license:lgpl2.1+))) diff --git a/gnu/packages/gnunet.scm b/gnu/packages/gnunet.scm index f7063ead11..96b517b9a9 100644 --- a/gnu/packages/gnunet.scm +++ b/gnu/packages/gnunet.scm @@ -103,14 +103,14 @@ tool to extract metadata from a file and print the results.") (define-public libmicrohttpd (package (name "libmicrohttpd") - (version "0.9.38") + (version "0.9.39") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/libmicrohttpd/libmicrohttpd-" version ".tar.gz")) (sha256 (base32 - "08g7p4l0p2fsjj8ayl68zq1bqgrn0pck19bm8yd7k61whvfv9wld")))) + "0wz3sw62z3wsqivrssh0xb3yn064ix5x5cc6prvdfrn3cmh7p4sg")))) (build-system gnu-build-system) (inputs `(("curl" ,curl) diff --git a/gnu/packages/gnupg.scm b/gnu/packages/gnupg.scm index 1ef8fe7e3a..9bc75b2329 100644 --- a/gnu/packages/gnupg.scm +++ b/gnu/packages/gnupg.scm @@ -107,7 +107,7 @@ generation.") (define-public libassuan (package (name "libassuan") - (version "2.1.3") + (version "2.2.0") (source (origin (method url-fetch) @@ -115,7 +115,7 @@ generation.") version ".tar.bz2")) (sha256 (base32 - "06hxyns8i73c6vrbrxyx6h38kwa7971h01qfc5cyna69afrp08gs")))) + "1ikf9whfi7rg71qa610ynyv12qrw20zkn7zxgvvr9dp41gbqxxbx")))) (build-system gnu-build-system) (propagated-inputs `(("libgpg-error" ,libgpg-error) ("pth" ,pth))) diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm index f48815ae4d..6bd4e3665a 100644 --- a/gnu/packages/gtk.scm +++ b/gnu/packages/gtk.scm @@ -1,6 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> -;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org> ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org> ;;; Copyright © 2015 Federico Beffa <beffa@fbengineering.ch> @@ -39,6 +39,7 @@ #:use-module (gnu packages pkg-config) #:use-module (gnu packages python) #:use-module (gnu packages guile) + #:use-module (gnu packages cups) #:use-module (gnu packages xml) #:use-module (gnu packages xorg) #:use-module (gnu packages xdisorg)) @@ -413,7 +414,8 @@ application suites.") ("libxdamage" ,libxdamage) ("pango" ,pango))) (inputs - `(("libxml2" ,libxml2))) + `(("libxml2" ,libxml2) + ("cups" ,cups))) ;for printing support (native-inputs `(("perl" ,perl) ("glib" ,glib "bin") diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm index c0c5ced0f3..f71201b553 100644 --- a/gnu/packages/guile.scm +++ b/gnu/packages/guile.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org> ;;; ;;; This file is part of GNU Guix. @@ -34,7 +34,6 @@ #:use-module (gnu packages ncurses) #:use-module (gnu packages ed) #:use-module (gnu packages which) - #:use-module (gnu packages gtk) #:use-module (guix packages) #:use-module (guix download) #:use-module (guix build-system gnu) @@ -368,33 +367,4 @@ http:://json.org specification. These are the main features: - Allows JSON pretty printing.") (license lgpl3+))) -(define-public guile-charting - (package - (name "guile-charting") - (version "0.2.0") - (source (origin - (method url-fetch) - (uri (string-append "http://wingolog.org/pub/guile-charting/" - "guile-charting-" version ".tar.gz")) - (sha256 - (base32 - "0w5qiyv9v0ip5li22x762bm48g8xnw281w66iyw094zdw611pb2m")) - (modules '((guix build utils))) - (snippet - '(begin - ;; Use the standard location for modules. - (substitute* "Makefile.in" - (("godir = .*$") - "godir = $(moddir)\n")))))) - (build-system gnu-build-system) - (native-inputs `(("pkg-config" ,pkg-config))) - (inputs `(("guile" ,guile-2.0))) - (propagated-inputs `(("guile-cairo" ,guile-cairo))) - (home-page "http://wingolog.org/software/guile-charting/") - (synopsis "Create charts and graphs in Guile") - (description - "Guile-Charting is a Guile Scheme library to create bar charts and graphs -using the Cairo drawing library.") - (license lgpl2.1+))) - ;;; guile.scm ends here diff --git a/gnu/packages/kde.scm b/gnu/packages/kde.scm index 52ed93e6a7..96acf0a573 100644 --- a/gnu/packages/kde.scm +++ b/gnu/packages/kde.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr> +;;; Copyright © 2013, 2014, 2015 Andreas Enge <andreas@enge.fr> ;;; ;;; This file is part of GNU Guix. ;;; @@ -31,6 +31,7 @@ #:use-module (gnu packages python) #:use-module (gnu packages qt) #:use-module (gnu packages rdf) + #:use-module (gnu packages ruby) #:use-module (gnu packages video) #:use-module (gnu packages xml) #:use-module (gnu packages xorg)) @@ -60,26 +61,26 @@ (define-public phonon (package (name "phonon") - (version "4.8.2") + (version "4.8.3") (source (origin (method url-fetch) (uri (string-append "http://download.kde.org/stable/" name - "/" version "/" + "/" version "/src/" name "-" version ".tar.xz")) (sha256 (base32 - "0xnjz7bbw393q77n4s6y9frd7l2s90635w03w9a2jr85zr89fnfg")))) + "05nshngk03ln90vsjz44dx8al576f4vd5fvhs1l0jmx13jb9q551")))) (build-system cmake-build-system) - ;; FIXME: Add interpreter ruby once available. - ;; Add optional input libqtzeitgeist. - (inputs + ;; FIXME: Add optional input libqzeitgeist once available. + (native-inputs `(("automoc4" ,automoc4) - ("glib" ,glib) + ("pkg-config" ,pkg-config))) + (inputs + `(("glib" ,glib) ("libx11" ,libx11) - ("pulseaudio" ,pulseaudio) - ("qt" ,qt-4))) - (native-inputs - `(("pkg-config" ,pkg-config))) + ("pulseaudio" ,pulseaudio))) + (propagated-inputs + `(("qt" ,qt-4))) ; according to phonon.pc (arguments `(#:tests? #f)) ; no test target (home-page "http://phonon.kde.org/") diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm index d48a8e9633..50e90f0da3 100644 --- a/gnu/packages/linux.scm +++ b/gnu/packages/linux.scm @@ -28,6 +28,7 @@ #: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) @@ -36,6 +37,7 @@ #: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) @@ -50,6 +52,8 @@ #:use-module (gnu packages rrdtool) #:use-module (gnu packages elf) #:use-module (gnu packages gtk) + #:use-module (gnu packages docbook) + #:use-module (gnu packages asciidoc) #:use-module (guix packages) #:use-module (guix download) #:use-module (guix utils) @@ -378,41 +382,43 @@ providing the system administrator with some help in common tasks.") (define-public util-linux (package (name "util-linux") - (version "2.21") + (version "2.25.2") (source (origin (method url-fetch) (uri (string-append "mirror://kernel.org/linux/utils/" - name "/v" version "/" - name "-" version ".2" ".tar.xz")) + name "/v" (version-major+minor version) "/" + name "-" version ".tar.xz")) (sha256 (base32 - "1rpgghf7n0zx0cdy8hibr41wvkm2qp1yvd8ab1rxr193l1jmgcir")) - (patches (list (search-patch "util-linux-perl.patch"))) + "1miwwdq1zwvhf0smrxx3fjddq3mz22s8rc5cw54s7x3kbdqpyig0")) + (patches (list (search-patch "util-linux-tests.patch"))) (modules '((guix build utils))) (snippet - ;; We take the 'logger' program from GNU Inetutils, so remove - ;; it from here. - '(substitute* "misc-utils/Makefile.in" - (("PROGRAMS =(.*) logger(.*)" _ before after) - (string-append "PROGRAMS =" before " " after)) - (("MANS =(.*) logger\\.1(.*)" _ before after) - (string-append "MANS =" before " " after)))))) + ;; We take the 'logger' program from GNU Inetutils and 'kill' + ;; from GNU Coreutils. + '(substitute* "configure" + (("build_logger=yes") "build_logger=no") + (("build_kill=yes") "build_kill=no"))))) (build-system gnu-build-system) (arguments `(#:configure-flags '("--disable-use-tty-group" "--enable-ddate") - #:phases (alist-cons-after - 'install 'patch-chkdupexe - (lambda* (#:key outputs #:allow-other-keys) - (let ((out (assoc-ref outputs "out"))) - (substitute* (string-append out "/bin/chkdupexe") - ;; Allow 'patch-shebang' to do its work. - (("@PERL@") "/bin/perl")))) + #:phases (alist-cons-before + 'check 'pre-check + (lambda* (#:key inputs outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (net (assoc-ref inputs "net-base"))) + ;; Change the test to refer to the right file. + (substitute* "tests/ts/misc/mcookie" + (("/etc/services") + (string-append net "/etc/services"))) + #t)) %standard-phases))) (inputs `(("zlib" ,guix:zlib) ("ncurses" ,ncurses))) (native-inputs - `(("perl" ,perl))) + `(("perl" ,perl) + ("net-base" ,net-base))) ;for tests (home-page "https://www.kernel.org/pub/linux/utils/util-linux/") (synopsis "Collection of utilities for the Linux kernel") (description @@ -505,14 +511,14 @@ slabtop, and skill.") (define-public e2fsprogs (package (name "e2fsprogs") - (version "1.42.7") + (version "1.42.11") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/e2fsprogs/e2fsprogs-" version ".tar.gz")) (sha256 (base32 - "0ibkkvp6kan0hn0d1anq4n2md70j5gcm7mwna515w82xwyr02rfw")) + "0xhbj7494g3y2w2miyrzdz6nciaffxajrs6wqm73yp4jnrqagn2b")) (modules '((guix build utils))) (snippet '(substitute* "MCONFIG.in" @@ -523,10 +529,12 @@ slabtop, and skill.") (native-inputs `(("pkg-config" ,pkg-config) ("texinfo" ,texinfo))) ;for the libext2fs Info manual (arguments - '(;; The 'blkid' command and library are already provided by util-linux, - ;; which is the preferred source for them (see, e.g., + '(;; util-linux is not the preferred source for some of the libraries and + ;; commands, so disable them (see, e.g., ;; <http://git.buildroot.net/buildroot/commit/?id=e1ffc2f791b336339909c90559b7db40b455f172>.) - #:configure-flags '("--disable-blkid" + #:configure-flags '("--disable-libblkid" + "--disable-libuuid" "--disable-uuidd" + "--disable-fsck" ;; Install libext2fs et al. "--enable-elf-shlibs") @@ -1718,7 +1726,11 @@ in a digital read-out.") %standard-phases) #:make-flags (list (string-append "DESTDIR=" (assoc-ref %outputs "out")) - "WERROR=0") + "WERROR=0" + + ;; By default, 'config/Makefile' uses lib64 on + ;; x86_64. Work around that. + "lib=lib") #:tests? #f)) ;no tests (native-inputs `(("pkg-config" ,pkg-config) @@ -1729,17 +1741,18 @@ in a digital read-out.") ("perl" ,perl) ("python" ,python-2))) (inputs - `(;; ("slang" ,slang) + `(("slang" ,slang) ;for the interactive TUI ;; ("newt" ,newt) + ("python" ,python-2) ;'perf' links against libpython ("elfutils" ,elfutils) - ;; FIXME: Documentation. - ;; ("libxslt" ,libxslt) - ;; ("docbook-xml" ,docbook-xml) - ;; ("docbook-xsl" ,docbook-xsl) - ;; ("xmlto" ,xmlto) - ;; ("asciidoc" ,asciidoc) - )) + ;; Documentation. + ("libxml2" ,libxml2) ;for $XML_CATALOG_FILES + ("libxslt" ,libxslt) + ("docbook-xml" ,docbook-xml) + ("docbook-xsl" ,docbook-xsl) + ("xmlto" ,xmlto) + ("asciidoc" ,asciidoc))) (home-page "https://perf.wiki.kernel.org/") (synopsis "Linux profiling with performance counters") (description diff --git a/gnu/packages/netpbm.scm b/gnu/packages/netpbm.scm index 0fdcf4ceae..e72cf32e3f 100644 --- a/gnu/packages/netpbm.scm +++ b/gnu/packages/netpbm.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> +;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr> ;;; ;;; This file is part of GNU Guix. ;;; @@ -26,26 +26,30 @@ #:use-module (gnu packages pkg-config) #:use-module (gnu packages python) #:use-module (gnu packages xml) + #:use-module (guix build-system gnu) #:use-module ((guix licenses) #:select (gpl2)) #:use-module (guix packages) - #:use-module (guix download) - #:use-module (guix build-system gnu)) + #:use-module (guix svn-download)) (define-public netpbm (package (name "netpbm") (version "10.61.01") (source (origin - (method url-fetch) - ;; The "super-stable" and "stable" versions do not compile - ;; with newer libpng; we need the "advanced" version. The tarball - ;; on the server is generated by sourceforge from the "advanced" - ;; branch of the subversion repository: - ;; svn checkout http://netpbm.svn.sourceforge.net/svnroot/netpbm/advanced netpbm-version - (uri (string-append "http://www.multiprecision.org/guix/netpbm-" - version ".tar.xz")) - (sha256 (base32 - "10nwvxc85kr6vhlhhahagy7s9848bbixl54b0p4ppim4g0dl10jz")))) + (method svn-fetch) + ;; At the time of first packaging, the "super-stable" and + ;; "stable" versions did not compile with newer libpng; + ;; we needed the "advanced" version. + ;; The currently highest stable version is 10.47.53, + ;; the currently highest advanced version is 10.69.4, + ;; svn release 2397. + ;; To determine the correct release: "svn log version.mk". + (uri (svn-reference + (url "http://svn.code.sf.net/p/netpbm/code/advanced") + (revision 1832))) + (sha256 + (base32 + "1mj1pqq18yj0yb6l24zfjls7axhqmiv0pvcaabl5xvc4a0dm543j")))) (build-system gnu-build-system) (inputs `(("ghostscript" ,ghostscript) ("libjpeg" ,libjpeg) @@ -64,6 +68,7 @@ 'configure (lambda _ (copy-file "config.mk.in" "config.mk") + (chmod "config.mk" #o664) (let ((f (open-file "config.mk" "a"))) (display "CC=gcc\n" f) (display "CFLAGS_SHLIB += -fPIC\n" f) diff --git a/gnu/packages/nvi.scm b/gnu/packages/nvi.scm index 8fd736d180..128715f6ac 100644 --- a/gnu/packages/nvi.scm +++ b/gnu/packages/nvi.scm @@ -37,7 +37,9 @@ ".tar.bz2")) (sha256 (base32 "0nbbs1inyrqds0ywn3ln5slv54v5zraq7lszkg8nsavv4kivhh9l")) - (patches (list (search-patch "nvi-assume-preserve-path.patch"))) + (patches (list (search-patch "nvi-assume-preserve-path.patch") + (search-patch "nvi-dbpagesize-binpower.patch") + (search-patch "nvi-db4.patch"))) (snippet ;; Create a wrapper for the configure script, make it executable. '(let ((conf-wrap (open-output-file "configure"))) diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm index 62c6b488a6..c0df5be1a9 100644 --- a/gnu/packages/package-management.scm +++ b/gnu/packages/package-management.scm @@ -151,6 +151,7 @@ the Nix package manager.") ,@(package-native-inputs guix-0.8))) (propagated-inputs `(("guile-json" ,guile-json) + ("geiser" ,geiser) ;for guix.el ,@(package-propagated-inputs guix-0.8)))))) (define-public guix guix-devel) diff --git a/gnu/packages/parallel.scm b/gnu/packages/parallel.scm index 6524110f2a..9072adae3c 100644 --- a/gnu/packages/parallel.scm +++ b/gnu/packages/parallel.scm @@ -27,7 +27,7 @@ (define-public parallel (package (name "parallel") - (version "20141122") + (version "20150122") (source (origin (method url-fetch) @@ -35,7 +35,7 @@ version ".tar.bz2")) (sha256 (base32 - "1kpd4ayd4lb867nfnpkam4b3mh86jl6cdy386x1rich938gbrg38")))) + "14g9pka59vln19rg6y8lyvrsc4nb3jk8y26hv3hdrf44rgwpds7d")))) (build-system gnu-build-system) (inputs `(("perl" ,perl))) (home-page "http://www.gnu.org/software/parallel/") diff --git a/gnu/packages/patches/nvi-db4.patch b/gnu/packages/patches/nvi-db4.patch new file mode 100644 index 0000000000..03b736cd08 --- /dev/null +++ b/gnu/packages/patches/nvi-db4.patch @@ -0,0 +1,35 @@ +This patch originates from the Debian project, see https://www.debian.org/ + +03db4.dpatch by <hesso@pool.math.tu-berlin.de> + + +libdb4 compatibility adjustments. + +In particular, this patch adds extra file permission checking and passes the +DB_CREATE flag to the first invocation of db_open on the file's database +structure, which rids us of the following message: + + BDB0635 DB_CREATE must be specified to create databases. + +--- nvi-1.81.6.orig/common/msg.c 2009-02-26 14:26:58.350336128 +0100 ++++ nvi-1.81.6/common/msg.c 2009-02-26 14:29:05.235335829 +0100 +@@ -724,9 +724,18 @@ + p = buf; + } else + p = file; ++ if (access(p, F_OK) != 0) { ++ if (first) { ++ first = 0; ++ return (1); ++ } ++ sp->db_error = ENOENT; ++ msgq_str(sp, M_DBERR, p, "%s"); ++ return (1); ++ } + if ((sp->db_error = db_create(&db, 0, 0)) != 0 || + (sp->db_error = db->set_re_source(db, p)) != 0 || +- (sp->db_error = db_open(db, NULL, DB_RECNO, 0, 0)) != 0) { ++ (sp->db_error = db_open(db, NULL, DB_RECNO, DB_CREATE, 0)) != 0) { + if (first) { + first = 0; + return (1); diff --git a/gnu/packages/patches/nvi-dbpagesize-binpower.patch b/gnu/packages/patches/nvi-dbpagesize-binpower.patch new file mode 100644 index 0000000000..7dde693351 --- /dev/null +++ b/gnu/packages/patches/nvi-dbpagesize-binpower.patch @@ -0,0 +1,35 @@ +This patch originates from the Debian project, see https://www.debian.org/ + +18dbpagesize_binpower.dpatch by <hesso@pool.math.tu-berlin.de> + + +Make sure that the pagesize passed to db__set_pagesize() is a power of two. + +nvi stores the content of files in BDB database structures. When initiating a +file, it picks a page size for the database to fit the file within 15 pages, +with a minimal page size of 1K and maximal of 10K. + +In vanilla nvi, this size is calculated as a multiple of 1024. Modern versions +of BDB, however, require the page size of a database to be a power of two, which +this patch addresses, ridding us of the following message: + + BDB0511 page sizes must be a power-of-2 + +--- nvi-1.81.6.orig/common/exf.c 2009-03-09 01:48:01.695862889 +0100 ++++ nvi-1.81.6/common/exf.c 2009-03-09 10:42:41.147866272 +0100 +@@ -249,11 +249,10 @@ + * (vi should have good locality) or smaller than 1K. + */ + psize = ((sb.st_size / 15) + 1023) / 1024; +- if (psize > 10) +- psize = 10; +- if (psize == 0) +- psize = 1; +- psize *= 1024; ++ if (psize >= 8) psize=8<<10; ++ else if (psize >= 4) psize=4<<10; ++ else if (psize >= 2) psize=2<<10; ++ else psize=1<<10; + + F_SET(ep, F_DEVSET); + ep->mdev = sb.st_dev; diff --git a/gnu/packages/patches/pyqt-configure.patch b/gnu/packages/patches/pyqt-configure.patch new file mode 100644 index 0000000000..b922f108d8 --- /dev/null +++ b/gnu/packages/patches/pyqt-configure.patch @@ -0,0 +1,15 @@ +Have configure.py modify internal variables depending on the --qml-plugindir +configure option. +diff -u PyQt-gpl-5.4.alt/configure.py PyQt-gpl-5.4/configure.py +--- PyQt-gpl-5.4.alt/configure.py 2015-01-25 17:27:50.000000000 +0100 ++++ PyQt-gpl-5.4/configure.py 2015-01-25 17:56:41.000000000 +0100 +@@ -904,6 +904,9 @@ + if opts.pyuicinterpreter is not None: + self.pyuic_interpreter = opts.pyuicinterpreter + ++ if opts.qmlplugindir is not None: ++ self.qml_plugin_dir = opts.qmlplugindir ++ + if opts.qsciapidir is not None: + self.qsci_api_dir = opts.qsciapidir + diff --git a/gnu/packages/patches/util-linux-perl.patch b/gnu/packages/patches/util-linux-perl.patch deleted file mode 100644 index c657a1b5ae..0000000000 --- a/gnu/packages/patches/util-linux-perl.patch +++ /dev/null @@ -1,15 +0,0 @@ -Use this common trick that exploits similarities between sh and Perl syntax -to avoid a hard dependency on Perl. Instead, this script will work only -when 'perl' is available in $PATH. - ---- util-linux-2.21.2/misc-utils/chkdupexe.pl 2012-05-15 13:51:45.000000000 +0200 -+++ util-linux-2.21.2/misc-utils/chkdupexe.pl 2014-06-01 22:46:06.000000000 +0200 -@@ -1,5 +1,6 @@ --#!@PERL@ -w --# -+eval '(exit $?0)' && eval 'exec perl -wS "$0" ${1+"$@"}' -+ & eval 'exec perl -wS "$0" $argv:q' -+ if 0; - # chkdupexe version 2.1.1 - # - # Simple script to look for and list duplicate executables and dangling diff --git a/gnu/packages/patches/util-linux-tests.patch b/gnu/packages/patches/util-linux-tests.patch new file mode 100644 index 0000000000..2ad025f66a --- /dev/null +++ b/gnu/packages/patches/util-linux-tests.patch @@ -0,0 +1,30 @@ +This test checks whether 'root' is successfully translated to UID/GID 0, +using 'getpwnam' in libmount. This doesn't work in the chroot because +/etc/passwd doesn't contain an entry for 'root' so skip it. + + +--- util-linux-2.25.2/tests/ts/libmount/optstr 2015-01-23 13:58:41.181151194 +0100 ++++ util-linux-2.25.2/tests/ts/libmount/optstr 2015-01-23 13:58:42.829161716 +0100 +@@ -84,10 +84,6 @@ ts_init_subtest "apply-user" # add user, + ts_valgrind $TESTPROG --apply --user "noexec,nosuid,loop=/dev/looop0" 0x408 &> $TS_OUTPUT + ts_finalize_subtest + +-ts_init_subtest "fix" +-ts_valgrind $TESTPROG --fix "uid=root,gid=root" &> $TS_OUTPUT +-ts_finalize_subtest +- + ts_init_subtest "deduplicate" + ts_valgrind $TESTPROG --dedup bbb,ccc,AAA,xxx,AAA=a,AAA=bbb,ddd,AAA=ccc,fff=eee AAA &> $TS_OUTPUT + ts_finalize_subtest + + +The expected output for this test seems to lack a carriage return. + +--- util-linux-2.25.2/tests/expected/more/regexp 2015-01-23 14:02:21.098557632 +0100 ++++ util-linux-2.25.2/tests/expected/more/regexp 2015-01-23 14:02:23.598573648 +0100 +@@ -1,4 +1,4 @@ + + ...skipping +-foo ++ foo + xyzzy diff --git a/gnu/packages/plotutils.scm b/gnu/packages/plotutils.scm index 41df88088e..da40e28334 100644 --- a/gnu/packages/plotutils.scm +++ b/gnu/packages/plotutils.scm @@ -23,6 +23,9 @@ #:use-module (guix build-system gnu) #:use-module (gnu packages xorg) #:use-module (gnu packages image) + #:use-module (gnu packages guile) + #:use-module (gnu packages gtk) + #:use-module (gnu packages pkg-config) #:use-module (gnu packages)) (define-public plotutils @@ -62,3 +65,32 @@ graphics in many file formats. It also has support for 2D vector graphics animations. The package also contains command-line programs for plotting scientific data.") (license gpl2+))) + +(define-public guile-charting + (package + (name "guile-charting") + (version "0.2.0") + (source (origin + (method url-fetch) + (uri (string-append "http://wingolog.org/pub/guile-charting/" + "guile-charting-" version ".tar.gz")) + (sha256 + (base32 + "0w5qiyv9v0ip5li22x762bm48g8xnw281w66iyw094zdw611pb2m")) + (modules '((guix build utils))) + (snippet + '(begin + ;; Use the standard location for modules. + (substitute* "Makefile.in" + (("godir = .*$") + "godir = $(moddir)\n")))))) + (build-system gnu-build-system) + (native-inputs `(("pkg-config" ,pkg-config))) + (inputs `(("guile" ,guile-2.0))) + (propagated-inputs `(("guile-cairo" ,guile-cairo))) + (home-page "http://wingolog.org/software/guile-charting/") + (synopsis "Create charts and graphs in Guile") + (description + "Guile-Charting is a Guile Scheme library to create bar charts and graphs +using the Cairo drawing library.") + (license lgpl2.1+))) diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm index 2f518d940d..4b306952c1 100644 --- a/gnu/packages/python.scm +++ b/gnu/packages/python.scm @@ -1,7 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org> ;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org> -;;; Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr> +;;; Copyright © 2013, 2014, 2015 Andreas Enge <andreas@enge.fr> ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org> ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org> ;;; Copyright © 2014, 2015 Federico Beffa <beffa@fbengineering.ch> @@ -2064,7 +2064,7 @@ capabilities.") (define-public python-pyparsing (package (name "python-pyparsing") - (version "2.0.2") + (version "2.0.3") (source (origin (method url-fetch) @@ -2072,7 +2072,7 @@ capabilities.") "/pyparsing-" version ".tar.gz")) (sha256 (base32 - "01lasib0n2fp2k99c988qhz16lm9hcwmnmrmhybdb3jq2xmkvr0p")))) + "0kw4py7gn45j93q8r7bzajfrjdc3xlsn2yzln41lf9zmrghjkrq6")))) (build-system python-build-system) (outputs '("out" "doc")) (arguments @@ -2788,3 +2788,63 @@ computing.") ,@(alist-delete "python-numpydoc" (alist-delete "python-matplotlib" (package-inputs ipython)))))))) + +(define-public python-isodate + (package + (name "python-isodate") + (version "0.5.1") + (source + (origin + (method url-fetch) + (uri (string-append + "https://pypi.python.org/packages/source/i/isodate/isodate-" + version + ".tar.gz")) + (sha256 + (base32 + "1yqjn0is0p64cmk9xhq4hc6q06jk86d60kg2jws58d78q0qysami")))) + (build-system python-build-system) + (inputs + `(("python-setuptools" ,python-setuptools))) + (home-page + "http://cheeseshop.python.org/pypi/isodate") + (synopsis + "Python date parser and formatter") + (description + "Python-isodate is a python module for parsing and formatting +ISO 8601 dates, time and duration.") + (license bsd-3))) + +(define-public python2-isodate + (package-with-python2 python-isodate)) + +(define-public python-html5lib + (package + (name "python-html5lib") + (version "1.0b3") + (source + (origin + (method url-fetch) + (uri (string-append + "https://pypi.python.org/packages/source/h/html5lib/html5lib-" + version + ".tar.gz")) + (sha256 + (base32 + "1l5i6xzckzx4hnh9qzv9q3kyhkgjx2hsi2k9srgci3qizjmvp6ln")))) + (build-system python-build-system) + (inputs + `(("python-setuptools" ,python-setuptools))) + (arguments + `(#:test-target "check")) + (home-page + "https://github.com/html5lib/html5lib-python") + (synopsis + "Python HTML parser based on the WHATWG HTML specifcation") + (description + "Html5lib is an HTML parser based on the WHATWG HTML specifcation +and written in Python.") + (license expat))) + +(define-public python2-html5lib + (package-with-python2 python-html5lib)) diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm index 0d6bbc8fc6..cb7e367c5a 100644 --- a/gnu/packages/qt.scm +++ b/gnu/packages/qt.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr> +;;; Copyright © 2013, 2014, 2015 Andreas Enge <andreas@enge.fr> ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com> ;;; ;;; This file is part of GNU Guix. @@ -18,11 +18,13 @@ ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (gnu packages qt) - #:use-module ((guix licenses) #:select (lgpl2.1 x11-style)) + #:use-module ((guix licenses) #:select (gpl3 lgpl2.1 x11-style)) #:use-module (guix packages) #:use-module (guix download) #:use-module (guix build utils) #:use-module (guix build-system gnu) + #:use-module (guix packages) + #:use-module (guix utils) #:use-module (gnu packages) #:use-module (gnu packages bison) #:use-module (gnu packages compression) @@ -272,3 +274,127 @@ developers using C++ or QML, a CSS & JavaScript like language.") "-no-avx" "-no-neon")))) %standard-phases))))) + +(define-public python-sip + (package + (name "python-sip") + (version "4.16.5") + (source + (origin + (method url-fetch) + (uri + (string-append "mirror://sourceforge/pyqt/sip/" + "sip-" version "/sip-" + version ".tar.gz")) + (sha256 + (base32 + "11qy1z88py2q7rz68rm7214pbd37538hpcbfj5hhzp5y616a62x0")))) + (build-system gnu-build-system) + (native-inputs + `(("python" ,python-wrapper))) + (arguments + `(#:tests? #f ; no check target + #:phases + (alist-replace + 'configure + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bin (string-append out "/bin")) + (include (string-append out "/include")) + (python-version + (string-take + (string-take-right (assoc-ref inputs "python") 5) + 3)) + (lib (string-append out "/lib/python" + python-version + "/site-packages"))) + (zero? + (system* "python" "configure.py" + "--bindir" bin + "--destdir" lib + "--incdir" include)))) + %standard-phases))) + (home-page "http://www.riverbankcomputing.com/software/sip/intro") + (synopsis "Python binding creator for C and C++ libraries") + (description + "SIP is a tool to create Python bindings for C and C++ libraries. It +was originally developed to create PyQt, the Python bindings for the Qt +toolkit, but can be used to create bindings for any C or C++ library. + +SIP comprises a code generator and a Python module. The code generator +processes a set of specification files and generates C or C++ code, which +is then compiled to create the bindings extension module. The SIP Python +module provides support functions to the automatically generated code.") + ;; There is a choice between a python like license, gpl2 and gpl3. + ;; For compatibility with pyqt, we need gpl3. + (license gpl3))) + +(define-public python2-sip + (package (inherit python-sip) + (name "python2-sip") + (native-inputs + `(("python" ,python-2))))) + +(define-public python-pyqt + (package + (name "python-pyqt") + (version "5.4") + (source + (origin + (method url-fetch) + (uri + (string-append "mirror://sourceforge/pyqt/PyQt5/" + "PyQt-" version "/PyQt-gpl-" + version ".tar.gz")) + (sha256 + (base32 + "0cbpa63whi8a5akff4pcnfwzpzx7ycac2ynj00ly52m6zbsn80kn")) + (patches (list (search-patch "pyqt-configure.patch"))))) + (build-system gnu-build-system) + (native-inputs + `(("python-sip" ,python-sip) + ("qt" ,qt))) ; for qmake + (inputs + `(("python" ,python-wrapper))) + (arguments + `(#:phases + (alist-replace + 'configure + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bin (string-append out "/bin")) + (sip (string-append out "/share/sip")) + (plugins (string-append out "/plugins")) + (designer (string-append plugins "/designer")) + (qml (string-append plugins "/PyQt5")) + (python-version + (string-take + (string-take-right (assoc-ref inputs "python") 5) + 3)) + (lib (string-append out "/lib/python" + python-version + "/site-packages"))) + (zero? (system* "python" "configure.py" + "--confirm-license" + "--bindir" bin + "--destdir" lib + "--designer-plugindir" designer + "--qml-plugindir" qml + "--sipdir" sip)))) + %standard-phases))) + (home-page "http://www.riverbankcomputing.com/software/pyqt/intro") + (synopsis "Python bindings for Qt") + (description + "PyQt is a set of Python v2 and v3 bindings for the Qt application +framework. The bindings are implemented as a set of Python modules and +contain over 620 classes.") + (license gpl3))) + +(define-public python2-pyqt + (package (inherit python-pyqt) + (name "python2-pyqt") + (native-inputs + `(("python-sip" ,python2-sip) + ("qt" ,qt))) + (inputs + `(("python" ,python-2))))) diff --git a/gnu/packages/rdf.scm b/gnu/packages/rdf.scm index 10e67428c7..1acbd38ded 100644 --- a/gnu/packages/rdf.scm +++ b/gnu/packages/rdf.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr> +;;; Copyright © 2013, 2014, 2015 Andreas Enge <andreas@enge.fr> ;;; ;;; This file is part of GNU Guix. ;;; @@ -17,11 +17,13 @@ ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (gnu packages rdf) - #:use-module ((guix licenses) #:select (lgpl2.0+ lgpl2.1 lgpl2.1+)) + #:use-module ((guix licenses) + #:select (bsd-style lgpl2.0+ lgpl2.1 lgpl2.1+)) #:use-module (guix packages) #:use-module (guix download) #:use-module (guix build-system cmake) #:use-module (guix build-system gnu) + #:use-module (guix build-system python) #:use-module (gnu packages) #:use-module (gnu packages databases) #:use-module (gnu packages boost) @@ -34,6 +36,7 @@ #:use-module (gnu packages pcre) #:use-module (gnu packages perl) #:use-module (gnu packages pkg-config) + #:use-module (gnu packages python) #:use-module (gnu packages qt) #:use-module (gnu packages xml)) @@ -198,3 +201,32 @@ provides a highly usable object-oriented C++/Qt4 framework for RDF data. It uses different RDF storage solutions as backends through a simple plugin system.") (license lgpl2.0+))) + +(define-public python-rdflib + (package + (name "python-rdflib") + (version "4.1.2") + (source + (origin + (method url-fetch) + (uri (string-append + "https://pypi.python.org/packages/source/r/rdflib/rdflib-" + version + ".tar.gz")) + (sha256 + (base32 + "0kvaf332cqbi47rqzlpdx4mbkvw12mkrzkj8n9l19wk713d4py9w")))) + (build-system python-build-system) + (inputs + `(("python-htm5lib" ,python-html5lib) + ("python-isodate" ,python-isodate) + ("python-pyparsing" ,python-pyparsing) + ("python-setuptools" ,python-setuptools))) + (home-page "https://github.com/RDFLib/rdflib") + (synopsis + "Python RDF library") + (description + "RDFLib is a Python library for working with RDF, a simple yet +powerful language for representing information.") + (license (bsd-style "file://LICENSE" + "See LICENSE in the distribution.")))) diff --git a/gnu/packages/slang.scm b/gnu/packages/slang.scm new file mode 100644 index 0000000000..8c35c8b43e --- /dev/null +++ b/gnu/packages/slang.scm @@ -0,0 +1,70 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2015 Ludovic Courtès <ludo@gnu.org> +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +(define-module (gnu packages slang) + #:use-module (guix packages) + #:use-module (guix download) + #:use-module (guix build-system gnu) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (gnu packages readline) + #:use-module (gnu packages ncurses) + #:use-module (gnu packages compression) + #:use-module (gnu packages image) + #:use-module (gnu packages pcre)) + +(define-public slang + (package + (name "slang") + (version "2.3.0") + (source (origin + (method url-fetch) + (uri (string-append + "http://www.jedsoft.org/releases/slang/slang-" + version + ".tar.gz")) + (sha256 + (base32 + "0aqd2cjabj6nhd4r3dc4vhqif2bf3dmqnrn2gj0xm4gqyfd177jy")) + (modules '((guix build utils))) + (snippet + '(begin + (substitute* "src/Makefile.in" + (("/bin/ln") "ln")) + (substitute* "configure" + (("-ltermcap") "")))))) + (build-system gnu-build-system) + (arguments + '(#:parallel-tests? #f)) + (inputs + `(("readline" ,readline) + ("zlib" ,zlib) + ("libpng" ,libpng) + ("pcre" ,pcre) + ("ncurses" ,ncurses))) + (home-page "http://www.jedsoft.org/slang/") + (synopsis "Library for interactive applications and extensibility") + (description + "S-Lang is a multi-platform programmer's library designed to allow a +developer to create robust multi-platform software. It provides facilities +required by interactive applications such as display/screen management, +keyboard input, keymaps, and so on. The most exciting feature of the library +is the slang interpreter that may be easily embedded into a program to make it +extensible. While the emphasis has always been on the embedded nature of the +interpreter, it may also be used in a stand-alone fashion through the use of +slsh, which is part of the S-Lang distribution.") + (license license:gpl2+))) diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm index 59ca166416..9fc310d55d 100644 --- a/gnu/packages/version-control.scm +++ b/gnu/packages/version-control.scm @@ -538,14 +538,14 @@ projects, from individuals to large-scale enterprise operations.") (define-public rcs (package (name "rcs") - (version "5.9.3") + (version "5.9.4") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/rcs/rcs-" version ".tar.xz")) (sha256 (base32 - "0isvzwfvqkg7zcsznra6wqh650z49ib113n7gp6ncxv5p30x3c38")))) + "1zsx7bb0rgvvvisiy4zlixf56ay8wbd9qqqcp1a1g0m1gl6mlg86")))) (build-system gnu-build-system) (native-inputs `(("ed" ,ed))) (home-page "http://www.gnu.org/software/rcs/") diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm index 110d0995bb..9cdfbf11da 100644 --- a/gnu/packages/video.scm +++ b/gnu/packages/video.scm @@ -396,7 +396,7 @@ SVCD, DVD, 3ivx, DivX 3/4/5, WMV and H.264 movies.") (define-public youtube-dl (package (name "youtube-dl") - (version "2014.12.15") + (version "2015.01.23.4") (source (origin (method url-fetch) (uri (string-append "http://youtube-dl.org/downloads/" @@ -404,7 +404,7 @@ SVCD, DVD, 3ivx, DivX 3/4/5, WMV and H.264 movies.") version ".tar.gz")) (sha256 (base32 - "09z7v6jxs4a36kyy681mcypcqsxipplnbdy9s3rva1rpp5f74h2z")))) + "0pvvab9dk1righ3fa79000iz8fzdlcxakscx5sd31730c37j3kj2")))) (build-system python-build-system) (inputs `(("setuptools" ,python-setuptools))) (home-page "http://youtube-dl.org") @@ -413,3 +413,58 @@ SVCD, DVD, 3ivx, DivX 3/4/5, WMV and H.264 movies.") "youtube-dl is a small command-line program to download videos from YouTube.com and a few more sites.") (license public-domain))) + +(define-public libdvdread + (package + (name "libdvdread") + (version "5.0.0") + (source (origin + (method url-fetch) + (uri (string-append "http://download.videolan.org/videolan/" + name "/" version "/" + name "-" version ".tar.bz2")) + (sha256 + (base32 + "052z62l3x8ka5jpf5bi1mzp5p323n1z9rxj74nq5c35a88x1myv6")))) + (build-system gnu-build-system) + (home-page "http://dvdnav.mplayerhq.hu/") + (synopsis "Library for reading video DVDs") + (description + "Libdvdread provides a simple foundation for reading DVD video +disks. It provides the functionality that is required to access many +DVDs. It parses IFO files, reads NAV-blocks, and performs CSS +authentication and descrambling (if an external libdvdcss library is +installed).") + (license gpl2+))) + +(define-public libdvdnav + (package + (name "libdvdnav") + (version "5.0.1") + (source (origin + (method url-fetch) + (uri (string-append "http://download.videolan.org/videolan/" + name "/" version "/" + name "-" version ".tar.bz2")) + (sha256 + (base32 + "1ad2lkkiydgwiyqfysra9lkwjv9yqnvcg4hv92hx8qzics1cpcbj")))) + (build-system gnu-build-system) + (native-inputs + `(("pkg-config" ,pkg-config))) + (inputs + `(("libdvdread" ,libdvdread))) + (home-page "http://dvdnav.mplayerhq.hu/") + (synopsis "Library for video DVD navigation features") + (description + "Libdvdnav is a library for developers of multimedia +applications. It allows easy use of sophisticated DVD navigation features +such as DVD menus, multiangle playback and even interactive DVD games. All +this functionality is provided through a simple API which provides the DVD +playback as a single logical stream of blocks, intermitted by special +dvdnav events to report certain conditions. The main usage of libdvdnav is +a loop regularly calling a function to get the next block, surrounded by +additional calls to tell the library of user interaction. The whole +DVD virtual machine and internal playback states are completely +encapsulated.") + (license gpl2+))) diff --git a/gnu/packages/xnee.scm b/gnu/packages/xnee.scm index 795f355d09..4e9135dd5b 100644 --- a/gnu/packages/xnee.scm +++ b/gnu/packages/xnee.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2015 Andreas Enge <andreas@enge.fr> ;;; ;;; This file is part of GNU Guix. ;;; @@ -21,30 +22,32 @@ #:use-module (guix licenses) #:use-module (guix download) #:use-module (guix build-system gnu) - #:use-module (gnu packages xorg) - #:use-module (gnu packages pkg-config)) + #:use-module (gnu packages gtk) + #:use-module (gnu packages pkg-config) + #:use-module (gnu packages xorg)) (define-public xnee (package (name "xnee") - (version "3.18") + (version "3.19") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/xnee/xnee-" version ".tar.gz")) (sha256 (base32 - "0j6b27ry0w765040089ppwwdl313xfgn31yh3fpqy4gk0jv23m94")))) + "04n2lac0vgpv8zsn7nmb50hf3qb56pmj90dmwnivg09gyrf1x92j")))) (build-system gnu-build-system) (inputs - `(("recordproto" ,recordproto) + `(("gtk+", gtk+-2) ("inputproto" ,inputproto) + ("libx11" ,libx11) + ("libxext" ,libxext) ("libxi" ,libxi) ("libxtst" ,libxtst) + ("recordproto" ,recordproto) ("xextproto" ,xextproto) - ("libxext" ,libxext) - ("xproto" ,xproto) - ("libx11" ,libx11))) + ("xproto" ,xproto))) (native-inputs `(("pkg-config" ,pkg-config))) (home-page "http://www.gnu.org/software/xnee/") diff --git a/gnu/services/base.scm b/gnu/services/base.scm index d55eb3a5f9..17dd0fb599 100644 --- a/gnu/services/base.scm +++ b/gnu/services/base.scm @@ -598,7 +598,7 @@ GUIX." failed to register hydra.gnu.org public key: ~a~%" status)))))))) (define* (guix-service #:key (guix guix) (builder-group "guixbuild") - (build-accounts 10) authorize-hydra-key? + (build-accounts 10) (authorize-hydra-key? #t) (use-substitutes? #t) (extra-options '())) "Return a service that runs the build daemon from @var{guix}, and has diff --git a/gnu/services/dbus.scm b/gnu/services/dbus.scm index d97c54cc5d..671dafa194 100644 --- a/gnu/services/dbus.scm +++ b/gnu/services/dbus.scm @@ -40,15 +40,18 @@ @var{services}." (define build #~(begin - (use-modules (sxml simple)) + (use-modules (sxml simple) + (srfi srfi-1)) (define (services->sxml services) ;; Return the SXML 'includedir' clauses for DIRS. `(busconfig - ,@(map (lambda (dir) - `(includedir ,(string-append dir - "/etc/dbus-1/system.d"))) - services))) + ,@(append-map (lambda (dir) + `((includedir + ,(string-append dir "/etc/dbus-1/system.d")) + (servicedir ;for '.service' files + ,(string-append dir "/share/dbus-1/services")))) + services))) (mkdir #$output) (copy-file (string-append #$dbus "/etc/dbus-1/system.conf") diff --git a/gnu/system.scm b/gnu/system.scm index 78c63bb477..52698c9e22 100644 --- a/gnu/system.scm +++ b/gnu/system.scm @@ -372,6 +372,36 @@ This is the GNU system. Welcome.\n") "Return the default /etc/hosts file." (text-file "hosts" (local-host-aliases host-name))) +(define (emacs-site-file) + "Return the Emacs 'site-start.el' file. That file contains the necessary +settings for 'guix.el' to work out-of-the-box." + (gexp->file "site-start.el" + #~(progn + ;; Add the "normal" elisp directory to the search path; + ;; guix.el may be there. + (add-to-list + 'load-path + "/run/current-system/profile/share/emacs/site-lisp") + + ;; Attempt to load guix.el. + (require 'guix-init nil t) + + (when (require 'geiser-guile nil t) + ;; Make sure Geiser's Scheme modules are in Guile's search + ;; path. + (add-to-list + 'geiser-guile-load-path + "/run/current-system/profile/share/geiser/guile"))))) + +(define (emacs-site-directory) + "Return the Emacs site directory, aka. /etc/emacs." + (mlet %store-monad ((file (emacs-site-file))) + (gexp->derivation "emacs" + #~(begin + (mkdir #$output) + (chdir #$output) + (symlink #$file "site-start.el"))))) + (define* (etc-directory #:key (locale "C") (timezone "Europe/Paris") (issue "Hello!\n") @@ -390,6 +420,7 @@ This is the GNU system. Welcome.\n") /bin/sh /run/current-system/profile/bin/sh /run/current-system/profile/bin/bash\n")) + (emacs (emacs-site-directory)) (issue (text-file "issue" issue)) ;; For now, generate a basic config so that /etc/hosts is honored. @@ -410,12 +441,20 @@ export PATH=$HOME/.guix-profile/bin:/run/current-system/profile/bin export PATH=/run/setuid-programs:/run/current-system/profile/sbin:$PATH export MANPATH=$HOME/.guix-profile/share/man:/run/current-system/profile/share/man export INFOPATH=$HOME/.guix-profile/share/info:/run/current-system/profile/share/info + +# Append the directory of 'site-start.el' to the search path. +export EMACSLOADPATH=:/etc/emacs + +# By default, applications that use D-Bus, such as Emacs, abort at startup +# when /etc/machine-id is missing. Make sure these warnings are non-fatal. +export DBUS_FATAL_WARNINGS=0 ")) (skel (skeleton-directory skeletons))) (file-union "etc" `(("services" ,#~(string-append #$net-base "/etc/services")) ("protocols" ,#~(string-append #$net-base "/etc/protocols")) ("rpc" ,#~(string-append #$net-base "/etc/rpc")) + ("emacs" ,#~#$emacs) ("pam.d" ,#~#$pam.d) ("login.defs" ,#~#$login.defs) ("issue" ,#~#$issue) diff --git a/gnu/system/install.scm b/gnu/system/install.scm index 35462fff75..98b9d9de2b 100644 --- a/gnu/system/install.scm +++ b/gnu/system/install.scm @@ -29,6 +29,7 @@ #:use-module (gnu packages disk) #:use-module (gnu packages grub) #:use-module (gnu packages texinfo) + #:use-module (gnu packages compression) #:export (installation-os)) ;;; Commentary: @@ -42,10 +43,14 @@ "Return a script that spawns the Info reader on the right section of the manual." (gexp->script "log-to-info" - #~(execl (string-append #$texinfo-4 "/bin/info") "info" - "-d" "/run/current-system/profile/share/info" - "-f" (string-append #$guix "/share/info/guix.info") - "-n" "System Installation"))) + #~(begin + ;; 'gunzip' is needed to decompress the doc. + (setenv "PATH" (string-append #$gzip "/bin")) + + (execl (string-append #$texinfo-4 "/bin/info") "info" + "-d" "/run/current-system/profile/share/info" + "-f" (string-append #$guix "/share/info/guix.info") + "-n" "System Installation")))) (define %backing-directory ;; Sub-directory used as the backing store for copy-on-write. diff --git a/gnu/system/os-config.tmpl b/gnu/system/os-config.tmpl index 662f085bfd..07b099531e 100644 --- a/gnu/system/os-config.tmpl +++ b/gnu/system/os-config.tmpl @@ -1,6 +1,8 @@ ;; This is an operating system configuration template. (use-modules (gnu)) +(use-service-modules xorg networking dbus avahi) +(use-package-modules avahi) (operating-system (host-name "antelope") @@ -31,4 +33,12 @@ ;; and access the webcam. (supplementary-groups '("wheel" "audio" "video")) - (home-directory "/home/alice"))))) + (home-directory "/home/alice")))) + + ;; Add services to the baseline: the SLiM log-in manager + ;; for Xorg sessions, a DHCP client, Avahi, and D-Bus. + (services (cons* (slim-service) + (dhcp-client-service) + (avahi-service) + (dbus-service (list avahi)) + %base-services))) diff --git a/guix/build/glib-or-gtk-build-system.scm b/guix/build/glib-or-gtk-build-system.scm index a404a84f3f..92e91bf7a5 100644 --- a/guix/build/glib-or-gtk-build-system.scm +++ b/guix/build/glib-or-gtk-build-system.scm @@ -1,6 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014 Federico Beffa <beffa@fbengineering.ch> -;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -72,7 +72,7 @@ with all found directories." ;; http://www.freedesktop.org/wiki/DesktopThemeSpec ;; http://freedesktop.org/wiki/Specifications/sound-theme-spec ;; http://freedesktop.org/wiki/Specifications/icon-theme-spec -;; +;; ;; Currently desktop themes are not well supported and do not honor ;; XDG_DATA_DIRS. One example is evince which only looks for desktop themes ;; in $HOME/.themes (for backward compatibility) and in XDG_DATA_HOME (which @@ -92,7 +92,8 @@ in INPUTS. Return a list with all found directories." (subdirectory-exists? datadir "/themes") (subdirectory-exists? datadir "/cursors") (subdirectory-exists? datadir "/wallpapers") - (subdirectory-exists? datadir "/icons")) + (subdirectory-exists? datadir "/icons") + (subdirectory-exists? datadir "/mime")) ;shared-mime-info (not (directory-included? datadir previous))) (cons datadir previous) previous))) diff --git a/guix/derivations.scm b/guix/derivations.scm index 4c34fcb4b8..edf6b57e86 100644 --- a/guix/derivations.scm +++ b/guix/derivations.scm @@ -21,6 +21,8 @@ #:use-module (srfi srfi-9) #:use-module (srfi srfi-9 gnu) #:use-module (srfi srfi-26) + #:use-module (srfi srfi-34) + #:use-module (srfi srfi-35) #:use-module (rnrs io ports) #:use-module (rnrs bytevectors) #:use-module (ice-9 match) @@ -59,6 +61,13 @@ derivation-input-sub-derivations derivation-input-output-paths + &derivation-error + derivation-error? + derivation-error-derivation + &derivation-missing-output-error + derivation-missing-output-error? + derivation-missing-output + derivation-name derivation-output-names fixed-output-derivation? @@ -98,6 +107,18 @@ #:replace (build-derivations)) ;;; +;;; Error conditions. +;;; + +(define-condition-type &derivation-error &nix-error + derivation-error? + (derivation derivation-error-derivation)) + +(define-condition-type &derivation-missing-output-error &derivation-error + derivation-missing-output-error? + (output derivation-missing-output)) + +;;; ;;; Nix derivations, as implemented in Nix's `derivations.cc'. ;;; @@ -509,9 +530,15 @@ that form." (cut write-derivation drv <>)))))) (define* (derivation->output-path drv #:optional (output "out")) - "Return the store path of its output OUTPUT." - (let ((outputs (derivation-outputs drv))) - (and=> (assoc-ref outputs output) derivation-output-path))) + "Return the store path of its output OUTPUT. Raise a +'&derivation-missing-output-error' condition if OUTPUT is not an output of +DRV." + (let ((output* (assoc-ref (derivation-outputs drv) output))) + (if output* + (derivation-output-path output*) + (raise (condition (&derivation-missing-output-error + (derivation drv) + (output output))))))) (define (derivation->output-paths drv) "Return the list of name/path pairs of the outputs of DRV." diff --git a/guix/nar.scm b/guix/nar.scm index bab727e65d..43e5210752 100644 --- a/guix/nar.scm +++ b/guix/nar.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org> ;;; ;;; This file is part of GNU Guix. @@ -211,7 +211,9 @@ s-expression")) (_ "importing file or directory '~a'...~%") file) - (let ((sig (and has-sig? (read-string port)))) + ;; The signature may contain characters that are meant to be + ;; interpreted as bytes in a 'char *', so read them as a ISO-8859-1. + (let ((sig (and has-sig? (read-latin1-string port)))) (when verify-signature? (if sig (begin diff --git a/guix/packages.scm b/guix/packages.scm index de87681fcd..96f3adfc32 100644 --- a/guix/packages.scm +++ b/guix/packages.scm @@ -135,7 +135,13 @@ (method origin-method) ; procedure (sha256 origin-sha256) ; bytevector (file-name origin-file-name (default #f)) ; optional file name - (patches origin-patches (default '())) ; list of file names + + ;; Patches are delayed so that the 'search-patch' calls are made lazily, + ;; which reduces I/O on startup and allows patch-not-found errors to be + ;; gracefully handled at run time. + (patches origin-patches ; list of file names + (default '()) (delayed)) + (snippet origin-snippet (default #f)) ; sexp or #f (patch-flags origin-patch-flags ; list of strings (default '("-p1"))) @@ -157,7 +163,7 @@ (($ <origin> uri method sha256 file-name patches) (simple-format port "#<origin ~s ~a ~s ~a>" uri (bytevector->base32-string sha256) - patches + (force patches) (number->string (object-address origin) 16))))) (set-record-type-printer! <origin> print-origin) @@ -937,10 +943,10 @@ cross-compilation target triplet." SOURCE is a file name, return either the interned file name (if SOURCE is outside of the store) or SOURCE itself (if SOURCE is already a store item.)" (match source - (($ <origin> uri method sha256 name () #f) + (($ <origin> uri method sha256 name (= force ()) #f) ;; No patches, no snippet: this is a fixed-output derivation. (method uri 'sha256 sha256 name #:system system)) - (($ <origin> uri method sha256 name (patches ...) snippet + (($ <origin> uri method sha256 name (= force (patches ...)) snippet (flags ...) inputs (modules ...) (imported-modules ...) guile-for-build) ;; Patches and/or a snippet. diff --git a/guix/records.scm b/guix/records.scm index e7b86af9aa..fd17e135e1 100644 --- a/guix/records.scm +++ b/guix/records.scm @@ -42,6 +42,103 @@ (format #f fmt args ...) form)))) +(define* (make-syntactic-constructor type name ctor fields + #:key (thunked '()) (defaults '()) + (delayed '())) + "Make the syntactic constructor NAME for TYPE, that calls CTOR, and expects +all of FIELDS to be initialized. DEFAULTS is the list of FIELD/DEFAULT-VALUE +tuples, THUNKED is the list of identifiers of thunked fields, and DELAYED is +the list of identifiers of delayed fields." + (with-syntax ((type type) + (name name) + (ctor ctor) + (expected fields) + (defaults defaults)) + #`(define-syntax name + (lambda (s) + (define (record-inheritance orig-record field+value) + ;; Produce code that returns a record identical to ORIG-RECORD, + ;; except that values for the FIELD+VALUE alist prevail. + (define (field-inherited-value f) + (and=> (find (lambda (x) + (eq? f (car (syntax->datum x)))) + field+value) + car)) + + ;; Make sure there are no unknown field names. + (let* ((fields (map (compose car syntax->datum) field+value)) + (unexpected (lset-difference eq? fields 'expected))) + (when (pair? unexpected) + (record-error 'name s "extraneous field initializers ~a" + unexpected))) + + #`(make-struct type 0 + #,@(map (lambda (field index) + (or (field-inherited-value field) + #`(struct-ref #,orig-record + #,index))) + 'expected + (iota (length 'expected))))) + + (define (thunked-field? f) + (memq (syntax->datum f) '#,thunked)) + + (define (delayed-field? f) + (memq (syntax->datum f) '#,delayed)) + + (define (wrap-field-value f value) + (cond ((thunked-field? f) + #`(lambda () #,value)) + ((delayed-field? f) + #`(delay #,value)) + (else value))) + + (define (field-bindings field+value) + ;; Return field to value bindings, for use in 'let*' below. + (map (lambda (field+value) + (syntax-case field+value () + ((field value) + #`(field + #,(wrap-field-value #'field #'value))))) + field+value)) + + (syntax-case s (inherit #,@fields) + ((_ (inherit orig-record) (field value) (... ...)) + #`(let* #,(field-bindings #'((field value) (... ...))) + #,(record-inheritance #'orig-record + #'((field value) (... ...))))) + ((_ (field value) (... ...)) + (let ((fields (map syntax->datum #'(field (... ...)))) + (dflt (map (match-lambda + ((f v) + (list (syntax->datum f) v))) + #'defaults))) + + (define (field-value f) + (or (and=> (find (lambda (x) + (eq? f (car (syntax->datum x)))) + #'((field value) (... ...))) + car) + (let ((value + (car (assoc-ref dflt (syntax->datum f))))) + (wrap-field-value f value)))) + + (let ((fields (append fields (map car dflt)))) + (cond ((lset= eq? fields 'expected) + #`(let* #,(field-bindings + #'((field value) (... ...))) + (ctor #,@(map field-value 'expected)))) + ((pair? (lset-difference eq? fields 'expected)) + (record-error 'name s + "extraneous field initializers ~a" + (lset-difference eq? fields + 'expected))) + (else + (record-error 'name s + "missing field initializers ~a" + (lset-difference eq? 'expected + fields)))))))))))) + (define-syntax define-record-type* (lambda (s) "Define the given record type such that an additional \"syntactic @@ -71,6 +168,9 @@ The 'port' field is \"thunked\", meaning that calls like '(thing-port x)' will actually compute the field's value in the current dynamic extent, which is useful when referring to fluids in a field's value. +A field can also be marked as \"delayed\" instead of \"thunked\", in which +case its value is effectively wrapped in a (delay …) form. + It is possible to copy an object 'x' created with 'thing' like this: (thing (inherit x) (name \"bar\")) @@ -78,98 +178,6 @@ It is possible to copy an object 'x' created with 'thing' like this: This expression returns a new object equal to 'x' except for its 'name' field." - (define (make-syntactic-constructor type name ctor fields thunked defaults) - "Make the syntactic constructor NAME for TYPE, that calls CTOR, and -expects all of FIELDS to be initialized. DEFAULTS is the list of -FIELD/DEFAULT-VALUE tuples, and THUNKED is the list of identifiers of -thunked fields." - (with-syntax ((type type) - (name name) - (ctor ctor) - (expected fields) - (defaults defaults)) - #`(define-syntax name - (lambda (s) - (define (record-inheritance orig-record field+value) - ;; Produce code that returns a record identical to - ;; ORIG-RECORD, except that values for the FIELD+VALUE alist - ;; prevail. - (define (field-inherited-value f) - (and=> (find (lambda (x) - (eq? f (car (syntax->datum x)))) - field+value) - car)) - - ;; Make sure there are no unknown field names. - (let* ((fields (map (compose car syntax->datum) - field+value)) - (unexpected (lset-difference eq? fields 'expected))) - (when (pair? unexpected) - (record-error 'name s "extraneous field initializers ~a" - unexpected))) - - #`(make-struct type 0 - #,@(map (lambda (field index) - (or (field-inherited-value field) - #`(struct-ref #,orig-record - #,index))) - 'expected - (iota (length 'expected))))) - - (define (thunked-field? f) - (memq (syntax->datum f) '#,thunked)) - - (define (field-bindings field+value) - ;; Return field to value bindings, for use in 'let*' below. - (map (lambda (field+value) - (syntax-case field+value () - ((field value) - #`(field - #,(if (thunked-field? #'field) - #'(lambda () value) - #'value))))) - field+value)) - - (syntax-case s (inherit #,@fields) - ((_ (inherit orig-record) (field value) (... ...)) - #`(let* #,(field-bindings #'((field value) (... ...))) - #,(record-inheritance #'orig-record - #'((field value) (... ...))))) - ((_ (field value) (... ...)) - (let ((fields (map syntax->datum #'(field (... ...)))) - (dflt (map (match-lambda - ((f v) - (list (syntax->datum f) v))) - #'defaults))) - - (define (field-value f) - (or (and=> (find (lambda (x) - (eq? f (car (syntax->datum x)))) - #'((field value) (... ...))) - car) - (let ((value - (car (assoc-ref dflt - (syntax->datum f))))) - (if (thunked-field? f) - #`(lambda () #,value) - value)))) - - (let ((fields (append fields (map car dflt)))) - (cond ((lset= eq? fields 'expected) - #`(let* #,(field-bindings - #'((field value) (... ...))) - (ctor #,@(map field-value 'expected)))) - ((pair? (lset-difference eq? fields 'expected)) - (record-error 'name s - "extraneous field initializers ~a" - (lset-difference eq? fields - 'expected))) - (else - (record-error 'name s - "missing field initializers ~a" - (lset-difference eq? 'expected - fields)))))))))))) - (define (field-default-value s) (syntax-case s (default) ((field (default val) _ ...) @@ -178,6 +186,15 @@ thunked fields." (field-default-value #'(field options ...))) (_ #f))) + (define (delayed-field? s) + ;; Return the field name if the field defined by S is delayed. + (syntax-case s (delayed) + ((field (delayed) _ ...) + #'field) + ((field _ options ...) + (delayed-field? #'(field options ...))) + (_ #f))) + (define (thunked-field? s) ;; Return the field name if the field defined by S is thunked. (syntax-case s (thunked) @@ -187,9 +204,12 @@ thunked fields." (thunked-field? #'(field options ...))) (_ #f))) - (define (thunked-field-accessor-name field) + (define (wrapped-field? s) + (or (thunked-field? s) (delayed-field? s))) + + (define (wrapped-field-accessor-name field) ;; Return the name (an unhygienic syntax object) of the "real" - ;; getter for field, which is assumed to be a thunked field. + ;; getter for field, which is assumed to be a wrapped field. (syntax-case field () ((field get options ...) (let* ((getter (syntax->datum #'get)) @@ -202,8 +222,8 @@ thunked fields." (syntax-case field () ((name get options ...) #`(name - #,(if (thunked-field? field) - (thunked-field-accessor-name field) + #,(if (wrapped-field? field) + (wrapped-field-accessor-name field) #'get))))) (define (thunked-field-accessor-definition field) @@ -211,15 +231,29 @@ thunked fields." ;; thunked field. (syntax-case field () ((name get _ ...) - (with-syntax ((real-get (thunked-field-accessor-name field))) + (with-syntax ((real-get (wrapped-field-accessor-name field))) #'(define-inlinable (get x) ;; The real value of that field is a thunk, so call it. ((real-get x))))))) + (define (delayed-field-accessor-definition field) + ;; Return the real accessor for FIELD, which is assumed to be a + ;; delayed field. + (syntax-case field () + ((name get _ ...) + (with-syntax ((real-get (wrapped-field-accessor-name field))) + #'(define-inlinable (get x) + ;; The real value of that field is a promise, so force it. + (force (real-get x))))))) + (syntax-case s () ((_ type syntactic-ctor ctor pred (field get options ...) ...) - (let* ((field-spec #'((field get options ...) ...))) + (let* ((field-spec #'((field get options ...) ...)) + (thunked (filter-map thunked-field? field-spec)) + (delayed (filter-map delayed-field? field-spec)) + (defaults (filter-map field-default-value + #'((field options ...) ...)))) (with-syntax (((field-spec* ...) (map field-spec->srfi-9 field-spec)) ((thunked-field-accessor ...) @@ -227,19 +261,25 @@ thunked fields." (and (thunked-field? field) (thunked-field-accessor-definition field))) + field-spec)) + ((delayed-field-accessor ...) + (filter-map (lambda (field) + (and (delayed-field? field) + (delayed-field-accessor-definition + field))) field-spec))) #`(begin (define-record-type type (ctor field ...) pred field-spec* ...) - (begin thunked-field-accessor ...) + (begin thunked-field-accessor ... + delayed-field-accessor ...) #,(make-syntactic-constructor #'type #'syntactic-ctor #'ctor #'(field ...) - (filter-map thunked-field? field-spec) - (filter-map field-default-value - #'((field options ...) - ...)))))))))) + #:thunked thunked + #:delayed delayed + #:defaults defaults)))))))) (define* (alist->record alist make keys #:optional (multiple-value-keys '())) diff --git a/guix/scripts/lint.scm b/guix/scripts/lint.scm index 15ae213339..229b73702e 100644 --- a/guix/scripts/lint.scm +++ b/guix/scripts/lint.scm @@ -1,7 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014 Cyril Roelandt <tipecaml@gmail.com> ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org> -;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -20,6 +20,7 @@ (define-module (guix scripts lint) #:use-module (guix base32) + #:use-module (guix download) #:use-module (guix packages) #:use-module (guix records) #:use-module (guix ui) @@ -31,12 +32,14 @@ #:use-module (ice-9 format) #:use-module (web uri) #:use-module ((guix build download) - #:select (open-connection-for-uri)) + #:select (maybe-expand-mirrors + open-connection-for-uri)) #:use-module (web request) #:use-module (web response) #:use-module (srfi srfi-1) #:use-module (srfi srfi-9) #:use-module (srfi srfi-11) + #:use-module (srfi srfi-26) #:use-module (srfi srfi-37) #:export (guix-lint check-description-style @@ -254,45 +257,54 @@ response from URI, and additional details, such as the actual HTTP response." (_ (values 'not-http #f))))) +(define (validate-uri uri package field) + "Return #t if the given URI can be reached, otherwise emit a +warning for PACKAGE mentionning the FIELD." + (let-values (((status argument) + (probe-uri uri))) + (case status + ((http-response) + (or (= 200 (response-code argument)) + (emit-warning package + (format #f + (_ "URI ~a not reachable: ~a (~s)") + (uri->string uri) + (response-code argument) + (response-reason-phrase argument)) + field))) + ((getaddrinfo-error) + (emit-warning package + (format #f + (_ "URI ~a domain not found: ~a") + (uri->string uri) + (gai-strerror (car argument))) + field) + #f) + ((system-error) + (emit-warning package + (format #f + (_ "URI ~a unreachable: ~a") + (uri->string uri) + (strerror + (system-error-errno + (cons status argument)))) + field) + #f) + ((invalid-http-response gnutls-error) + ;; Probably a misbehaving server; ignore. + #f) + ((not-http) ;nothing we can do + #f) + (else + (error "internal linter error" status))))) + (define (check-home-page package) "Emit a warning if PACKAGE has an invalid 'home-page' field, or if that 'home-page' is not reachable." (let ((uri (and=> (package-home-page package) string->uri))) (cond ((uri? uri) - (let-values (((status argument) - (probe-uri uri))) - (case status - ((http-response) - (unless (= 200 (response-code argument)) - (emit-warning package - (format #f - (_ "home page ~a not reachable: ~a (~s)") - (uri->string uri) - (response-code argument) - (response-reason-phrase argument)) - 'home-page))) - ((getaddrinfo-error) - (emit-warning package - (format #f - (_ "home page domain not found: ~a") - (gai-strerror (car argument))) - 'package)) - ((system-error) - (emit-warning package - (format #f - (_ "home page unreachable: ~a") - (strerror - (system-error-errno - (cons status argument)))) - 'home-page)) - ((invalid-http-response gnutls-error) - ;; Probably a misbehaving server; ignore. - #f) - ((not-http) ;nothing we can do - #f) - (else - (error "internal home-page linter error" status))))) + (validate-uri uri package 'home-page)) ((not (package-home-page package)) (unless (or (string-contains (package-name package) "bootstrap") (string=? (package-name package) "ld-wrapper")) @@ -375,6 +387,22 @@ descriptions maintained upstream." (location->string loc) (package-full-name package) (fill-paragraph (escape-quotes upstream) 77 7))))))) +(define (check-source package) + "Emit a warning if PACKAGE has an invalid 'source' field, or if that +'source' is not reachable." + (let ((origin (package-source package))) + (when (and origin + (eqv? (origin-method origin) url-fetch)) + (let* ((strings (origin-uri origin)) + (uris (if (list? strings) + (map string->uri strings) + (list (string->uri strings))))) + ;; Just make sure that at least one of the URIs is valid. + (any (cut validate-uri <> package 'source) + (append-map (cut maybe-expand-mirrors <> %mirrors) + uris)))))) + + ;;; ;;; List of checkers. @@ -403,6 +431,10 @@ descriptions maintained upstream." (description "Validate home-page URLs") (check check-home-page)) (lint-checker + (name 'source) + (description "Validate source URLs") + (check check-source)) + (lint-checker (name 'synopsis) (description "Validate package synopses") (check check-synopsis-style)))) diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm index 30b0658198..1ff898d8dd 100644 --- a/guix/scripts/package.scm +++ b/guix/scripts/package.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org> ;;; Copyright © 2013 Mark H Weaver <mhw@netris.org> ;;; Copyright © 2014 Alex Kost <alezost@gmail.com> @@ -331,6 +331,11 @@ an output path different than CURRENT-PATH." ;;; Search paths. ;;; +(define-syntax-rule (with-null-error-port exp) + "Evaluate EXP with the error port pointing to the bit bucket." + (with-error-to-port (%make-void-port "w") + (lambda () exp))) + (define* (search-path-environment-variables entries profile #:optional (getenv getenv)) "Return environment variable definitions that may be needed for the use of @@ -373,9 +378,14 @@ current settings and report only settings not already effective." (files (if pattern (map (cut string-append <> "/") files) files)) - (path (search-path-as-list files (list profile) - #:type type - #:pattern pattern))) + + ;; XXX: Silence 'find-files' when it stumbles upon non-existent + ;; directories (see + ;; <http://lists.gnu.org/archive/html/guix-devel/2015-01/msg00269.html>.) + (path (with-null-error-port + (search-path-as-list files (list profile) + #:type type + #:pattern pattern)))) (if (every (cut member <> values) path) #f (format #f "export ~a=\"~a\"" diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm index b0974dcfcd..3eea872fe8 100644 --- a/guix/scripts/system.scm +++ b/guix/scripts/system.scm @@ -76,11 +76,14 @@ file (strerror err)))) (('syntax-error proc message properties form . rest) (let ((loc (source-properties->location properties))) - (leave (_ "~a: ~a~%") - (location->string loc) message))) - (_ - (leave (_ "failed to load operating system file '~a': ~s~%") - file args)))))) + (format (current-error-port) (_ "~a: error: ~a~%") + (location->string loc) message) + (exit 1))) + ((error args ...) + (report-error (_ "failed to load operating system file '~a':~%") + file) + (apply display-error #f (current-error-port) args) + (exit 1)))))) ;;; diff --git a/guix/serialization.scm b/guix/serialization.scm index 64eacf974c..e36751ec1b 100644 --- a/guix/serialization.scm +++ b/guix/serialization.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -102,10 +102,16 @@ (define (read-latin1-string p) (let* ((len (read-int p)) (m (modulo len 8)) - (str (get-string-n p len))) + ;; Note: do not use 'get-string-n' to work around Guile bug + ;; <http://bugs.gnu.org/19621>. See <http://bugs.gnu.org/19610> for + ;; a discussion. + (str (get-bytevector-n p len))) (or (zero? m) (get-bytevector-n p (- 8 m))) - str)) + + ;; XXX: Rewrite using (ice-9 iconv) when the minimum requirement is + ;; upgraded to Guile >= 2.0.9. + (list->string (map integer->char (bytevector->u8-list str))))) (define (write-string-list l p) (write-int (length l) p) diff --git a/guix/store.scm b/guix/store.scm index c3a1c57943..a12abc8671 100644 --- a/guix/store.scm +++ b/guix/store.scm @@ -862,23 +862,26 @@ be used internally by the daemon's build hook." (define-alias store-return state-return) (define-alias store-bind state-bind) +(define (preserve-documentation original proc) + "Return PROC with documentation taken from ORIGINAL." + (set-object-property! proc 'documentation + (procedure-property original 'documentation)) + proc) + (define (store-lift proc) "Lift PROC, a procedure whose first argument is a connection to the store, in the store monad." - (define result - (lambda args - (lambda (store) - (values (apply proc store args) store)))) - - (set-object-property! result 'documentation - (procedure-property proc 'documentation)) - result) + (preserve-documentation proc + (lambda args + (lambda (store) + (values (apply proc store args) store))))) (define (store-lower proc) "Lower PROC, a monadic procedure in %STORE-MONAD, to a \"normal\" procedure taking the store as its first argument." - (lambda (store . args) - (run-with-store store (apply proc args)))) + (preserve-documentation proc + (lambda (store . args) + (run-with-store store (apply proc args))))) ;; ;; Store monad operators. @@ -914,10 +917,14 @@ permission bits are kept." (guile-for-build (%guile-for-build)) (system (%current-system))) "Run MVAL, a monadic value in the store monad, in STORE, an open store -connection." +connection, and return the result." (parameterize ((%guile-for-build guile-for-build) (%current-system system)) - (run-with-state mval store))) + (call-with-values (lambda () + (run-with-state mval store)) + (lambda (result store) + ;; Discard the state. + result)))) ;;; diff --git a/guix/ui.scm b/guix/ui.scm index 5bd4d1f8c2..04c50f4827 100644 --- a/guix/ui.scm +++ b/guix/ui.scm @@ -43,6 +43,7 @@ #:export (_ N_ P_ + report-error leave show-version-and-exit show-bug-report-information @@ -248,6 +249,10 @@ interpreted." ;; FIXME: Server-provided error messages aren't i18n'd. (leave (_ "build failed: ~a~%") (nix-protocol-error-message c))) + ((derivation-missing-output-error? c) + (leave (_ "reference to invalid output '~a' of derivation '~a'~%") + (derivation-missing-output c) + (derivation-file-name (derivation-error-derivation c)))) ((message-condition? c) ;; Normally '&message' error conditions have an i18n'd message. (leave (_ "~a~%") @@ -308,9 +313,8 @@ available for download." (const #f))) (define (built-or-substitutable? drv) - (let ((out (derivation->output-path drv))) - ;; If DRV has zero outputs, OUT is #f. - (or (not out) + (or (null? (derivation-outputs drv)) + (let ((out (derivation->output-path drv))) ;XXX: assume "out" exists (or (valid-path? store out) (substitutable? out))))) diff --git a/tests/packages.scm b/tests/packages.scm index bd5ba3ee92..65e5cc3cdd 100644 --- a/tests/packages.scm +++ b/tests/packages.scm @@ -42,6 +42,7 @@ #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) #:use-module (srfi srfi-34) + #:use-module (srfi srfi-35) #:use-module (srfi srfi-64) #:use-module (rnrs io ports) #:use-module (ice-9 regex) @@ -248,6 +249,36 @@ (string=? (derivation->output-path drv) (package-output %store package "out"))))) +(test-assert "patch not found yields a run-time error" + (guard (c ((condition-has-type? c &message) + (and (string-contains (condition-message c) + "does-not-exist.patch") + (string-contains (condition-message c) + "not found")))) + (let ((p (package + (inherit (dummy-package "p")) + (source (origin + (method (const #f)) + (uri "http://whatever") + (patches + (list (search-patch "does-not-exist.patch"))) + (sha256 + (base32 + "0amn0bbwqvsvvsh6drfwz20ydc2czk374lzw5kksbh6bf78k4ks4"))))))) + (package-derivation %store p) + #f))) + +(test-assert "reference to non-existent output" + ;; See <http://bugs.gnu.org/19630>. + (let* ((dep (dummy-package "dep")) + (p (dummy-package "p" + (inputs `(("dep" ,dep "non-existent")))))) + (guard (c ((derivation-missing-output-error? c) + (and (string=? (derivation-missing-output c) "non-existent") + (equal? (package-derivation %store dep) + (derivation-error-derivation c))))) + (package-derivation %store p)))) + (test-assert "trivial" (let* ((p (package (inherit (dummy-package "trivial")) (build-system trivial-build-system) diff --git a/tests/records.scm b/tests/records.scm index e90d33d15d..a00e38db7d 100644 --- a/tests/records.scm +++ b/tests/records.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -139,6 +139,51 @@ (parameterize ((mark (cons 'a 'b))) (eq? (foo-baz y) (mark)))))))) +(test-assert "define-record-type* & delayed" + (begin + (define-record-type* <foo> foo make-foo + foo? + (bar foo-bar (delayed))) + + (let* ((calls 0) + (x (foo (bar (begin (set! calls (1+ calls)) 3))))) + (and (zero? calls) + (equal? (foo-bar x) 3) (= 1 calls) + (equal? (foo-bar x) 3) (= 1 calls) + (equal? (foo-bar x) 3) (= 1 calls))))) + +(test-assert "define-record-type* & delayed & default" + (let ((mark #f)) + (define-record-type* <foo> foo make-foo + foo? + (bar foo-bar (delayed) (default mark))) + + (let ((x (foo))) + (set! mark 42) + (and (equal? (foo-bar x) 42) + (begin + (set! mark 7) + (equal? (foo-bar x) 42)))))) + +(test-assert "define-record-type* & delayed & inherited" + (begin + (define-record-type* <foo> foo make-foo + foo? + (bar foo-bar (delayed)) + (baz foo-baz (delayed))) + + (let* ((m 1) + (n #f) + (x (foo (bar m) (baz n))) + (y (foo (inherit x) (baz 'b)))) + (set! n 'a) + (and (equal? (foo-bar x) 1) + (eq? (foo-baz x) 'a) + (begin + (set! m 777) + (equal? (foo-bar y) 1)) ;promise was already forced + (eq? (foo-baz y) 'b))))) + (test-assert "define-record-type* & missing initializers" (catch 'syntax-error (lambda () diff --git a/tests/syscalls.scm b/tests/syscalls.scm index 21d6637ff6..f26331e164 100644 --- a/tests/syscalls.scm +++ b/tests/syscalls.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -91,15 +91,15 @@ (system-error-errno args))))) (test-skip (if (zero? (getuid)) 1 0)) -(test-equal "set-network-interface-flags" - EPERM +(test-assert "set-network-interface-flags" (let ((sock (socket AF_INET SOCK_STREAM 0))) (catch 'system-error (lambda () (set-network-interface-flags sock "lo" IFF_UP)) (lambda args (close-port sock) - (system-error-errno args))))) + ;; We get EPERM with Linux 3.18ish and EACCES with 2.6.32. + (memv (system-error-errno args) (list EPERM EACCES)))))) (test-equal "network-interface-address lo" (make-socket-address AF_INET (inet-pton AF_INET "127.0.0.1") 0) @@ -108,8 +108,7 @@ (close-port sock) addr)) -(test-equal "set-network-interface-address" - EPERM +(test-assert "set-network-interface-address" (let ((sock (socket AF_INET SOCK_STREAM 0))) (catch 'system-error (lambda () @@ -120,7 +119,8 @@ 0))) (lambda args (close-port sock) - (system-error-errno args))))) + ;; We get EPERM with Linux 3.18ish and EACCES with 2.6.32. + (memv (system-error-errno args) (list EPERM EACCES)))))) (test-end) |