summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--AUTHORS1
-rw-r--r--Makefile.am8
-rw-r--r--ROADMAP118
-rw-r--r--configure.ac2
-rw-r--r--doc/emacs.texi6
-rw-r--r--doc/guix.texi50
-rw-r--r--gnu-system.am17
-rw-r--r--gnu.scm15
-rw-r--r--gnu/packages.scm22
-rw-r--r--gnu/packages/admin.scm13
-rw-r--r--gnu/packages/autotools.scm16
-rw-r--r--gnu/packages/cups.scm293
-rw-r--r--gnu/packages/emacs.scm12
-rw-r--r--gnu/packages/fonts.scm5
-rw-r--r--gnu/packages/freeipmi.scm4
-rw-r--r--gnu/packages/game-development.scm43
-rw-r--r--gnu/packages/games.scm34
-rw-r--r--gnu/packages/ghostscript.scm45
-rw-r--r--gnu/packages/glib.scm40
-rw-r--r--gnu/packages/gnome.scm42
-rw-r--r--gnu/packages/gnunet.scm4
-rw-r--r--gnu/packages/gnupg.scm4
-rw-r--r--gnu/packages/gtk.scm6
-rw-r--r--gnu/packages/guile.scm32
-rw-r--r--gnu/packages/kde.scm25
-rw-r--r--gnu/packages/linux.scm81
-rw-r--r--gnu/packages/netpbm.scm31
-rw-r--r--gnu/packages/nvi.scm4
-rw-r--r--gnu/packages/package-management.scm1
-rw-r--r--gnu/packages/parallel.scm4
-rw-r--r--gnu/packages/patches/nvi-db4.patch35
-rw-r--r--gnu/packages/patches/nvi-dbpagesize-binpower.patch35
-rw-r--r--gnu/packages/patches/pyqt-configure.patch15
-rw-r--r--gnu/packages/patches/util-linux-perl.patch15
-rw-r--r--gnu/packages/patches/util-linux-tests.patch30
-rw-r--r--gnu/packages/plotutils.scm32
-rw-r--r--gnu/packages/python.scm66
-rw-r--r--gnu/packages/qt.scm130
-rw-r--r--gnu/packages/rdf.scm36
-rw-r--r--gnu/packages/slang.scm70
-rw-r--r--gnu/packages/version-control.scm4
-rw-r--r--gnu/packages/video.scm59
-rw-r--r--gnu/packages/xnee.scm19
-rw-r--r--gnu/services/base.scm2
-rw-r--r--gnu/services/dbus.scm13
-rw-r--r--gnu/system.scm39
-rw-r--r--gnu/system/install.scm13
-rw-r--r--gnu/system/os-config.tmpl12
-rw-r--r--guix/build/glib-or-gtk-build-system.scm7
-rw-r--r--guix/derivations.scm33
-rw-r--r--guix/nar.scm6
-rw-r--r--guix/packages.scm14
-rw-r--r--guix/records.scm246
-rw-r--r--guix/scripts/lint.scm102
-rw-r--r--guix/scripts/package.scm18
-rw-r--r--guix/scripts/system.scm13
-rw-r--r--guix/serialization.scm12
-rw-r--r--guix/store.scm31
-rw-r--r--guix/ui.scm10
-rw-r--r--tests/packages.scm31
-rw-r--r--tests/records.scm47
-rw-r--r--tests/syscalls.scm14
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 <[email protected]>
David Thompson <[email protected]>
Mark H. Weaver <[email protected]>
+ Ricardo Wurmus <[email protected]>
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 <[email protected]>
+Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <[email protected]>
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 [email protected] 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], [[email protected]], [guix],
+AC_INIT([GNU Guix], [0.8.1], [[email protected]], [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 <[email protected]>
+;;; Copyright © 2015 Joshua S. Grant <[email protected]>
;;;
;;; 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 <[email protected]>
+;;;
+;;; 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 <[email protected]>
-;;; Copyright © 2013, 2014 Ludovic Courtès <[email protected]>
+;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <[email protected]>
;;; Copyright © 2014 Mark H Weaver <[email protected]>
;;; Copyright © 2014 Alex Kost <[email protected]>
;;;
@@ -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 <[email protected]>
+;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <[email protected]>
;;; Copyright © 2014 Mark H Weaver <[email protected]>
;;; Copyright © 2014 Joshua Grant <[email protected]>
;;; Copyright © 2014 Alex Kost <[email protected]>
@@ -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 <[email protected]>
;;; Copyright © 2014 Mark H Weaver <[email protected]>
+;;; Copyright © 2015 Ricardo Wurmus <[email protected]>
;;;
;;; 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 <[email protected]>
-;;; Copyright © 2013 Andreas Enge <[email protected]>
+;;; Copyright © 2013, 2015 Andreas Enge <[email protected]>
;;; Copyright © 2013 Nikita Karetnikov <[email protected]>
;;; Copyright © 2014 Mark H Weaver <[email protected]>
;;;
@@ -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 <[email protected]>
-;;; Copyright © 2014 Ludovic Courtès <[email protected]>
+;;; Copyright © 2013, 2015 Andreas Enge <[email protected]>
+;;; Copyright © 2014, 2015 Ludovic Courtès <[email protected]>
;;; Copyright © 2014 Ian Denhardt <[email protected]>
;;; Copyright © 2014 Eric Bavier <[email protected]>
;;; Copyright © 2014, 2015 Federico Beffa <[email protected]>
@@ -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 <[email protected]>
-;;; Copyright © 2013, 2014 Ludovic Courtès <[email protected]>
+;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <[email protected]>
;;; Copyright © 2014, 2015 Mark H Weaver <[email protected]>
;;; Copyright © 2014 Eric Bavier <[email protected]>
;;; Copyright © 2015 Federico Beffa <[email protected]>
@@ -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 <[email protected]>
+;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <[email protected]>
;;; Copyright © 2014, 2015 Mark H Weaver <[email protected]>
;;;
;;; 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 <[email protected]>
+;;; Copyright © 2013, 2014, 2015 Andreas Enge <[email protected]>
;;;
;;; 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 <[email protected]>
+;;; Copyright © 2013, 2015 Andreas Enge <[email protected]>
;;;
;;; 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 <[email protected]>
+
+
+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 <[email protected]>
+
+
+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 <[email protected]>
;;; Copyright © 2013, 2014 Ludovic Courtès <[email protected]>
-;;; Copyright © 2013, 2014 Andreas Enge <[email protected]>
+;;; Copyright © 2013, 2014, 2015 Andreas Enge <[email protected]>
;;; Copyright © 2014 Mark H Weaver <[email protected]>
;;; Copyright © 2014 Eric Bavier <[email protected]>
;;; Copyright © 2014, 2015 Federico Beffa <[email protected]>
@@ -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 <[email protected]>
+;;; Copyright © 2013, 2014, 2015 Andreas Enge <[email protected]>
;;; Copyright © 2015 Sou Bunnbu <[email protected]>
;;;
;;; 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 <[email protected]>
+;;; Copyright © 2013, 2014, 2015 Andreas Enge <[email protected]>
;;;
;;; 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 <[email protected]>
+;;;
+;;; 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 <[email protected]>
+;;; Copyright © 2015 Andreas Enge <[email protected]>
;;;
;;; 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 <[email protected]>
-;;; Copyright © 2014 Ludovic Courtès <[email protected]>
+;;; Copyright © 2014, 2015 Ludovic Courtès <[email protected]>
;;;
;;; 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 <[email protected]>
+;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <[email protected]>
;;; Copyright © 2014 Mark H Weaver <[email protected]>
;;;
;;; 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 <[email protected]>
;;; Copyright © 2014 Eric Bavier <[email protected]>
-;;; Copyright © 2013, 2014 Ludovic Courtès <[email protected]>
+;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <[email protected]>
;;;
;;; 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 <[email protected]>
+;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <[email protected]>
;;; Copyright © 2013 Nikita Karetnikov <[email protected]>
;;; Copyright © 2013 Mark H Weaver <[email protected]>
;;; Copyright © 2014 Alex Kost <[email protected]>
@@ -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 <[email protected]>
+;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <[email protected]>
;;;
;;; 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 <[email protected]>
+;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <[email protected]>
;;;
;;; 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 <[email protected]>
+;;; Copyright © 2014, 2015 Ludovic Courtès <[email protected]>
;;;
;;; 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)