summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--README24
-rwxr-xr-xbuild-aux/list-packages.scm61
-rw-r--r--doc/guix.texi46
-rw-r--r--gnu-system.am5
-rw-r--r--gnu/packages/apl.scm50
-rw-r--r--gnu/packages/autogen.scm4
-rw-r--r--gnu/packages/base.scm9
-rw-r--r--gnu/packages/bison.scm4
-rw-r--r--gnu/packages/cflow.scm4
-rw-r--r--gnu/packages/complexity.scm49
-rw-r--r--gnu/packages/freeipmi.scm4
-rw-r--r--gnu/packages/gnunet.scm4
-rw-r--r--gnu/packages/gnuzilla.scm97
-rw-r--r--gnu/packages/gvpe.scm48
-rw-r--r--gnu/packages/kde.scm37
-rw-r--r--gnu/packages/lightning.scm4
-rw-r--r--gnu/packages/linux.scm4
-rw-r--r--gnu/packages/parallel.scm47
-rw-r--r--gnu/packages/qt.scm72
-rw-r--r--gnu/packages/sdl.scm47
-rw-r--r--gnu/packages/version-control.scm6
-rw-r--r--gnu/system/vm.scm2
-rw-r--r--guix/build-system/python.scm3
-rw-r--r--guix/derivations.scm118
-rw-r--r--guix/packages.scm40
-rw-r--r--guix/scripts/build.scm181
-rwxr-xr-xguix/scripts/substitute-binary.scm32
-rw-r--r--guix/store.scm32
-rw-r--r--guix/ui.scm31
-rw-r--r--guix/utils.scm24
-rw-r--r--po/LINGUAS1
-rw-r--r--po/sr.po1304
-rw-r--r--tests/derivations.scm52
-rw-r--r--tests/guix-build.sh19
-rw-r--r--tests/packages.scm17
-rw-r--r--tests/store.scm36
-rw-r--r--tests/utils.scm8
37 files changed, 2298 insertions, 228 deletions
diff --git a/README b/README
index 33d5b68460..30c90aeb1e 100644
--- a/README
+++ b/README
@@ -50,26 +50,16 @@ You can re-build and re-install Guix using a system that already runs Guix.
 To do so:
 
   - Install the dependencies (see 'Requirements' above) and build tools using
-    Guix.  You should have the following packages installed in your user
-    profile:
-
-    - autoconf
-    - automake
-    - bzip2
-    - gcc
-    - gettext
-    - glibc
-    - guile
-    - ld-wrapper
-    - libgcrypt
-    - pkg-config
-    - sqlite
+    Guix:
+
+      guix package --install={autoconf,automake,bzip2,gcc,binutils,ld-wrapper,glibc,gettext,guile,libgcrypt,pkg-config,sqlite}
 
   - set the environment variables that Guix recommends you to set during the
     package installation process:
-      ACLOCAL, CPATH, LIBRARY_PATH, PATH, PKG_CONFIG_PATH
-    In addition, set 
-      GUIX_LD_WRAPPER_ALLOW_IMPURITIES=yes
+      ACLOCAL_PATH, CPATH, LIBRARY_PATH, PKG_CONFIG_PATH
+
+  - set the PATH environment variable to refer to the profile:
+      PATH=$HOME/.guix-profile/bin:$PATH
 
   - re-run the configure script passing it the option
     `--with-libgcrypt-prefix=$HOME/.guix-profile/'
diff --git a/build-aux/list-packages.scm b/build-aux/list-packages.scm
index 6e73cffb86..6cf2c53491 100755
--- a/build-aux/list-packages.scm
+++ b/build-aux/list-packages.scm
@@ -71,12 +71,14 @@ of packages still to be processed in REMAINING.  Also Introduces a call to the
 JavaScript prep_pkg_descs function as part of the output of PACKAGE, every
 time the length of DESCRIPTION-IDS, increasing, is 15 or when REMAINING,
 decreasing, is 1."
+  (define (location-url loc)
+    (string-append "http://git.savannah.gnu.org/cgit/guix.git/tree/"
+                   (location-file loc) "#n"
+                   (number->string (location-line loc))))
+
   (define (source-url package)
     (let ((loc (package-location package)))
-      (and loc
-           (string-append "http://git.savannah.gnu.org/cgit/guix.git/tree/"
-                          (location-file loc) "#n"
-                          (number->string (location-line loc))))))
+      (and loc (location-url loc))))
 
   (define (license package)
     (define ->sxml
@@ -103,26 +105,37 @@ decreasing, is 1."
        "http://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/patches/"
        (basename patch)))
 
-    (match (and (origin? (package-source package))
-                (origin-patches (package-source package)))
-      ((patches ..1)
-       `(div "patches: "
-             ,(let loop ((patches patches)
-                         (number  1)
-                         (links   '()))
-                (match patches
-                  (()
-                   (list-join (reverse links) ", "))
-                  ((patch rest ...)
-                   (loop rest
-                         (+ 1 number)
-                         (cons `(a (@ (href ,(patch-url patch))
-                                      (title ,(string-append
-                                               "Link to "
-                                               (basename patch))))
-                                   ,(number->string number))
-                               links)))))))
-      (_ #f)))
+    (define (snippet-link snippet)
+      (let ((loc (package-field-location package 'source)))
+        `(a (@ (href ,(location-url loc))
+               (title "Link to patch snippet"))
+            "snippet")))
+
+    (and (origin? (package-source package))
+         (let ((patches (origin-patches (package-source package)))
+               (snippet (origin-snippet (package-source package))))
+           (and (or (pair? patches) snippet)
+                `(div "patches: "
+                      ,(let loop ((patches patches)
+                                  (number  1)
+                                  (links   '()))
+                         (match patches
+                           (()
+                            (let* ((additional (and snippet
+                                                    (snippet-link snippet)))
+                                   (links      (if additional
+                                                   (cons additional links)
+                                                   links)))
+                              (list-join (reverse links) ", ")))
+                           ((patch rest ...)
+                            (loop rest
+                                  (+ 1 number)
+                                  (cons `(a (@ (href ,(patch-url patch))
+                                               (title ,(string-append
+                                                        "Link to "
+                                                        (basename patch))))
+                                            ,(number->string number))
+                                        links))))))))))
 
   (define (status package)
     (define (url system)
diff --git a/doc/guix.texi b/doc/guix.texi
index 4fb14063d0..81f85d1b2f 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -95,7 +95,7 @@ always produces the same result when passed a given set of inputs.  It
 cannot alter the system's environment in
 any way; for instance, it cannot create, modify, or delete files outside
 of its build and installation directories.  This is achieved by running
-build processes in isolated environments (or @dfn{chroots}), where only their
+build processes in isolated environments (or @dfn{containers}), where only their
 explicit inputs are visible.
 
 @cindex store
@@ -224,6 +224,7 @@ The @code{guix-daemon} program may then be run as @code{root} with:
 # guix-daemon --build-users-group=guix-builder
 @end example
 
+@cindex chroot
 @noindent
 This way, the daemon starts build processes in a chroot, under one of
 the @code{guix-builder} users.  On GNU/Linux, by default, the chroot
@@ -271,6 +272,10 @@ is normally run as @code{root} like this:
 @noindent
 For details on how to set it up, @ref{Setting Up the Daemon}.
 
+@cindex chroot
+@cindex container, build environment
+@cindex build environment
+@cindex reproducible builds
 By default, @command{guix-daemon} launches build processes under
 different UIDs, taken from the build group specified with
 @code{--build-users-group}.  In addition, each build process is run in a
@@ -278,7 +283,10 @@ chroot environment that only contains the subset of the store that the
 build process depends on, as specified by its derivation
 (@pxref{Programming Interface, derivation}), plus a set of specific
 system directories.  By default, the latter contains @file{/dev} and
-@file{/dev/pts}.
+@file{/dev/pts}.  Furthermore, on GNU/Linux, the build environment is a
+@dfn{container}: in addition to having its own file system tree, it has
+a separate mount name space, its own PID name space, network name space,
+etc.  This helps achieve reproducible builds (@pxref{Features}).
 
 The following command-line options are supported:
 
@@ -447,13 +455,18 @@ profiles, and remove those that are provably no longer referenced
 generations of their profile so that the packages they refer to can be
 collected.
 
+@cindex reproducibility
+@cindex reproducible builds
 Finally, Guix takes a @dfn{purely functional} approach to package
 management, as described in the introduction (@pxref{Introduction}).
 Each @file{/nix/store} package directory name contains a hash of all the
 inputs that were used to build that package---compiler, libraries, build
 scripts, etc.  This direct correspondence allows users to make sure a
 given package installation matches the current state of their
-distribution, and helps maximize @dfn{reproducibility}.
+distribution.  It also helps maximize @dfn{build reproducibility}:
+thanks to the isolated build environments that are used, a given build
+is likely to yield bit-identical files when performed on different
+machines (@pxref{Invoking guix-daemon, container}).
 
 @cindex substitute
 This foundation allows Guix to support @dfn{transparent binary/source
@@ -1470,12 +1483,16 @@ The @var{options} may be zero or more of the following:
 
 @item --expression=@var{expr}
 @itemx -e @var{expr}
-Build the package @var{expr} evaluates to.
+Build the package or derivation @var{expr} evaluates to.
 
 For example, @var{expr} may be @code{(@@ (gnu packages guile)
 guile-1.8)}, which unambiguously designates this specific variant of
 version 1.8 of Guile.
 
+Alternately, @var{expr} may refer to a zero-argument monadic procedure
+(@pxref{The Store Monad}).  The procedure must return a derivation as a
+monadic value, which is then passed through @code{run-with-store}.
+
 @item --source
 @itemx -S
 Build the packages' source derivations, rather than the packages
@@ -1546,6 +1563,22 @@ Use the given verbosity level.  @var{level} must be an integer between 0
 and 5; higher means more verbose output.  Setting a level of 4 or more
 may be helpful when debugging setup issues with the build daemon.
 
+@item --log-file
+Return the build log file names for the given
+@var{package-or-derivation}s, or raise an error if build logs are
+missing.
+
+This works regardless of how packages or derivations are specified.  For
+instance, the following invocations are equivalent:
+
+@example
+guix build --log-file `guix build -d guile`
+guix build --log-file `guix build guile`
+guix build --log-file guile
+guix build --log-file -e '(@@ (gnu packages guile) guile-2.0)'
+@end example
+
+
 @end table
 
 Behind the scenes, @command{guix build} is essentially an interface to
@@ -1708,8 +1741,9 @@ Guix comes with a distribution of free software@footnote{The term
 users of that software}.}  that form the basis of the GNU system.  This
 includes core GNU packages such as GNU libc, GCC, and Binutils, as well
 as many GNU and non-GNU applications.  The complete list of available
-packages can be seen by running @command{guix package} (@pxref{Invoking
-guix package}):
+packages can be browsed
+@url{http://www.gnu.org/software/guix/package-list.html,on-line} or by
+running @command{guix package} (@pxref{Invoking guix package}):
 
 @example
 guix package --list-available
diff --git a/gnu-system.am b/gnu-system.am
index 3b300ffaf1..2c893e4d7f 100644
--- a/gnu-system.am
+++ b/gnu-system.am
@@ -26,6 +26,7 @@ GNU_SYSTEM_MODULES =				\
   gnu/packages/acct.scm				\
   gnu/packages/acl.scm				\
   gnu/packages/algebra.scm			\
+  gnu/packages/apl.scm				\
   gnu/packages/apr.scm				\
   gnu/packages/aspell.scm			\
   gnu/packages/attr.scm				\
@@ -43,6 +44,7 @@ GNU_SYSTEM_MODULES =				\
   gnu/packages/check.scm			\
   gnu/packages/cmake.scm			\
   gnu/packages/compression.scm			\
+  gnu/packages/complexity.scm			\
   gnu/packages/cpio.scm				\
   gnu/packages/cppi.scm				\
   gnu/packages/cross-base.scm			\
@@ -77,6 +79,7 @@ GNU_SYSTEM_MODULES =				\
   gnu/packages/gnunet.scm			\
   gnu/packages/gnupg.scm			\
   gnu/packages/gnutls.scm			\
+  gnu/packages/gnuzilla.scm			\
   gnu/packages/gperf.scm			\
   gnu/packages/gprolog.scm			\
   gnu/packages/graphviz.scm			\
@@ -88,6 +91,7 @@ GNU_SYSTEM_MODULES =				\
   gnu/packages/gtk.scm				\
   gnu/packages/guile.scm			\
   gnu/packages/gv.scm				\
+  gnu/packages/gvpe.scm				\
   gnu/packages/help2man.scm			\
   gnu/packages/hugs.scm				\
   gnu/packages/icu4c.scm			\
@@ -139,6 +143,7 @@ GNU_SYSTEM_MODULES =				\
   gnu/packages/openldap.scm			\
   gnu/packages/openssl.scm			\
   gnu/packages/package-management.scm		\
+  gnu/packages/parallel.scm			\
   gnu/packages/parted.scm			\
   gnu/packages/patchelf.scm			\
   gnu/packages/pcre.scm				\
diff --git a/gnu/packages/apl.scm b/gnu/packages/apl.scm
new file mode 100644
index 0000000000..5750abbddf
--- /dev/null
+++ b/gnu/packages/apl.scm
@@ -0,0 +1,50 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages apl)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu)
+  #:use-module ((gnu packages gettext)
+                #:renamer (symbol-prefix-proc 'guix:))
+  #:use-module (gnu packages maths)
+  #:use-module (gnu packages readline))
+
+(define-public apl
+  (package
+    (name "apl")
+    (version "1.1")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/apl/apl-" version ".tar.gz"))
+      (sha256
+       (base32
+        "1myinxa0m3y4fanpxflfakfk3m1s8641wdlbwbs0vg5yp10xm0m3"))))
+    (build-system gnu-build-system)
+    (home-page "http://www.gnu.org/software/apl/")
+    (inputs
+     `(("gettext" ,guix:gettext)
+       ("lapack" ,lapack)
+       ("readline" ,readline)))
+    (synopsis "APL interpreter")
+    (description
+     "GNU APL is a free interpreter for the programming language APL.  It is
+an implementation of the ISO standard 13751.")
+    (license gpl3+)))
diff --git a/gnu/packages/autogen.scm b/gnu/packages/autogen.scm
index 3109c2bf0b..9615c1e065 100644
--- a/gnu/packages/autogen.scm
+++ b/gnu/packages/autogen.scm
@@ -28,7 +28,7 @@
 (define-public autogen
   (package
     (name "autogen")
-    (version "5.18.1")
+    (version "5.18.2")
     (source
      (origin
       (method url-fetch)
@@ -37,7 +37,7 @@
                           version ".tar.gz"))
       (sha256
        (base32
-        "0k0gkr5inr9wb3ws30q6bbiqg3qm3ryvl9cznym2xis4lm216d53"))))
+        "0s2021bwpq6h199cbbranz96hhm5s7v66lc68h8v198vqbg049yc"))))
     (build-system gnu-build-system)
     (inputs `(("which" ,which)
               ("guile" ,guile-2.0)))
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index 7de7689b24..e835b418b2 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -49,19 +49,14 @@
 (define-public hello
   (package
    (name "hello")
-   (version "2.8")
+   (version "2.9")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/hello/hello-" version
                                 ".tar.gz"))
             (sha256
-             (base32 "0wqd8sjmxfskrflaxywc7gqw7sfawrfvdxd9skxawzfgyy0pzdz6"))))
+             (base32 "19qy37gkasc4csb1d3bdiz9snn8mir2p3aj0jgzmfv0r2hi7mfzc"))))
    (build-system gnu-build-system)
-   (arguments '(#:configure-flags
-                `("--disable-dependency-tracking"
-                  ,(string-append "--with-gawk="  ; for illustration purposes
-                                 (assoc-ref %build-inputs "gawk")))))
-   (inputs `(("gawk" ,gawk)))
    (synopsis "Hello, GNU world: An example GNU package")
    (description
     "GNU Hello prints the message \"Hello, world!\" and then exits.  It
diff --git a/gnu/packages/bison.scm b/gnu/packages/bison.scm
index 8782096cf0..b0eab278e3 100644
--- a/gnu/packages/bison.scm
+++ b/gnu/packages/bison.scm
@@ -30,7 +30,7 @@
 (define bison
   (package
     (name "bison")
-    (version "3.0")
+    (version "3.0.1")
     (source
      (origin
       (method url-fetch)
@@ -38,7 +38,7 @@
                           version ".tar.xz"))
       (sha256
        (base32
-        "1j14fqgi9wzqgsy4fhkcdrv4hv6rrvhvn84axs520w9b022mbb79"))))
+        "1jx2ymvhl6h2jq6sf0lrk7ggfc2v1ri49yib8ppir0vdnh1znkll"))))
     (build-system gnu-build-system)
     (native-inputs `(("perl" ,perl)))
     (inputs `(("flex" ,flex)))
diff --git a/gnu/packages/cflow.scm b/gnu/packages/cflow.scm
index 52552e3fe1..76ab5506d6 100644
--- a/gnu/packages/cflow.scm
+++ b/gnu/packages/cflow.scm
@@ -35,6 +35,10 @@
               (base32
                "1jkbq97ajcf834z68hbn3xfhiz921zhn39gklml1racf0kb3jzh3"))))
     (build-system gnu-build-system)
+
+    ;; Needed to have cflow-mode.el installed.
+    (native-inputs `(("emacs" ,emacs)))
+
     (home-page "http://www.gnu.org/software/cflow/")
     (synopsis "Create a graph of control flow within a program")
     (description
diff --git a/gnu/packages/complexity.scm b/gnu/packages/complexity.scm
new file mode 100644
index 0000000000..5216b7e39c
--- /dev/null
+++ b/gnu/packages/complexity.scm
@@ -0,0 +1,49 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages complexity)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix licenses)
+  #:use-module (guix build-system gnu)
+  #:use-module (gnu packages texinfo)
+  #:use-module (gnu packages autogen))
+
+(define-public complexity
+  (package
+    (name "complexity")
+    (version "1.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnu/complexity/complexity-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "1aad7n35ymxbj5dlpvm64dcd71b6i7hbmps0g7nkf47vj53l6y2j"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("texinfo" ,texinfo)
+       ("autogen" ,autogen)))
+    (home-page "http://www.gnu.org/software/complexity/")
+    (synopsis "Analyze complexity of C functions")
+    (description
+     "GNU complexity provides tools for finding procedures that are
+convoluted, overly long or otherwise difficult to understand.  This
+may help in learning or reviewing unfamiliar code or perhaps
+highlighting your own code that seemed comprehensible when you wrote it.")
+    (license gpl3+)))
diff --git a/gnu/packages/freeipmi.scm b/gnu/packages/freeipmi.scm
index 06917e1949..34b577b6f8 100644
--- a/gnu/packages/freeipmi.scm
+++ b/gnu/packages/freeipmi.scm
@@ -27,14 +27,14 @@
 (define-public freeipmi
   (package
     (name "freeipmi")
-    (version "1.3.2")
+    (version "1.3.3")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/freeipmi/freeipmi-"
                                  version ".tar.gz"))
              (sha256
               (base32
-               "1gz2r3zp8ag4cd5cflh4fy8mpvwcx1wdr37mkqkph3m5lx2w48qb"))))
+               "0pmgr66k4cx0gdwzfby6643m15bb4q2yx2g5r2jr3qidrfyxhi3j"))))
     (build-system gnu-build-system)
     (inputs
      `(("readline" ,readline) ("libgcrypt" ,libgcrypt)))
diff --git a/gnu/packages/gnunet.scm b/gnu/packages/gnunet.scm
index 35be20a3af..0f5f32b9b4 100644
--- a/gnu/packages/gnunet.scm
+++ b/gnu/packages/gnunet.scm
@@ -38,14 +38,14 @@
 (define-public libextractor
   (package
    (name "libextractor")
-   (version "1.1")
+   (version "1.2")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/libextractor/libextractor-"
                                 version ".tar.gz"))
             (sha256
              (base32
-              "1zvj64ig456c9ya3r8ib48ms42cnli9y7ig5p04xqm16z7vw5dyb"))))
+              "1n7z6s5ils6xmf6b0z1xda41maxj94c1n6wlyyxmacs5lrkh2a96"))))
    (build-system gnu-build-system)
    ;; WARNING: Checks require /dev/shm to be in the build chroot, especially
    ;; not to be a symbolic link to /run/shm.
diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm
new file mode 100644
index 0000000000..ff7de4fe96
--- /dev/null
+++ b/gnu/packages/gnuzilla.scm
@@ -0,0 +1,97 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
+;;;
+;;; 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 gnuzilla)
+  #:use-module (gnu packages)
+  #:use-module ((guix licenses)
+                #:renamer (symbol-prefix-proc 'license:))
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu)
+  #:use-module (gnu packages glib)
+  #:use-module (gnu packages gstreamer)
+  #:use-module (gnu packages gtk)
+  #:use-module (gnu packages linux)
+  #:use-module (gnu packages perl)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages xorg)
+  #:use-module (gnu packages yasm)
+  #:use-module (gnu packages zip))
+
+(define-public icecat
+  (package
+    (name "icecat")
+    (version "24.0")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/gnuzilla/"
+                          (substring version 0 (string-index version #\.))
+                          "/icecat-" version ".tar.gz"))
+      (sha256
+       (base32
+        "1vxzjwmhad6yxx4sk9zvapjgv5salcv10id061q0991ii3dycy9a"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("alsa-lib" ,alsa-lib)
+       ("dbus" ,dbus)
+       ("dbus-glib" ,dbus-glib)
+       ("glib" ,glib)
+       ("gstreamer" ,gstreamer-0.10)
+       ("gst-plugins-base" ,gst-plugins-base-0.10)
+       ("gtk+" ,gtk+-2)
+       ("libxt" ,libxt)
+       ("mesa" ,mesa)
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("python" ,python-2) ; Python 3 not supported
+       ("python2-pysqlite" ,python2-pysqlite)
+       ("unzip" ,unzip)
+       ("yasm" ,yasm)
+       ("zip" ,zip)))
+    (arguments
+     `(#:tests? #f ; no check target
+       #:phases
+         (alist-cons-before
+          'patch-source-shebangs 'sanitise
+          (lambda _
+            ;; delete dangling symlinks
+            (delete-file "browser/base/content/.#aboutDialog.xul")
+            (delete-file "browser/base/content/abouthome/.#aboutHome.xhtml")
+            (delete-file "browser/branding/unofficial/content/.#aboutHome.xhtml")
+            (delete-file "toolkit/crashreporter/google-breakpad/autotools/compile"))
+         (alist-replace
+          'configure
+          ;; configure does not work followed by both "SHELL=..." and
+          ;; "CONFIG_SHELL=..."; set environment variables instead
+          (lambda* (#:key outputs configure-flags #:allow-other-keys)
+            (let ((out (assoc-ref outputs "out")))
+              (setenv "SHELL" (which "bash"))
+              (setenv "CONFIG_SHELL" (which "bash"))
+              (zero? (system* "./configure"
+                              (string-append "--prefix=" out)
+                              "--disable-webrtc")))) ; webrtc creates an error
+          %standard-phases))))
+    (home-page "http://www.gnu.org/software/gnuzilla/")
+    (synopsis "Entirely free browser derived from Mozilla Firefox")
+    (description
+     "IceCat is the GNU version of the Firefox browser.  It is entirely free
+software, which does not recommend non-free plugins and addons. It also
+features extra privacy-protecting features built in.")
+    (license license:mpl2.0))) ; and others, see toolkit/content/license.html
diff --git a/gnu/packages/gvpe.scm b/gnu/packages/gvpe.scm
new file mode 100644
index 0000000000..1018428306
--- /dev/null
+++ b/gnu/packages/gvpe.scm
@@ -0,0 +1,48 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages gvpe)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module ((guix licenses) #:select (gpl3+))
+  #:use-module (guix build-system gnu)
+  #:use-module (gnu packages openssl)
+  #:use-module ((gnu packages compression) #:select (zlib)))
+
+(define-public gvpe
+  (package
+    (name "gvpe")
+    (version "2.25")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnu/gvpe/gvpe-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "1gsipcysvsk80gvyn9jnk9g0xg4ng9yd5zp066jnmpgs52d2vhvk"))))
+    (build-system gnu-build-system)
+    (home-page "http://software.schmorp.de/pkg/gvpe.html")
+    (inputs `(("openssl" ,openssl)
+              ("zlib" ,zlib)))
+    (synopsis "Secure VPN among multiple nodes over an untrusted network")
+    (description
+     "The GNU Virtual Private Ethernet creates a virtual network
+with multiple nodes using a variety of transport protocols.  It works
+by creating encrypted host-to-host tunnels between multiple
+endpoints.")
+    (license gpl3+)))
diff --git a/gnu/packages/kde.scm b/gnu/packages/kde.scm
index 3da261ccd1..aaf425db63 100644
--- a/gnu/packages/kde.scm
+++ b/gnu/packages/kde.scm
@@ -17,11 +17,15 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages kde)
-  #:use-module ((guix licenses) #:select (bsd-2))
+  #:use-module ((guix licenses) #:select (bsd-2 lgpl2.1+))
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix build-system cmake)
-  #:use-module (gnu packages qt))
+  #:use-module (gnu packages glib)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages pulseaudio)
+  #:use-module (gnu packages qt)
+  #:use-module (gnu packages xorg))
 
 (define-public automoc4
   (package
@@ -44,3 +48,32 @@
     (synopsis "build tool for KDE")
     (description "KDE desktop environment")
     (license bsd-2)))
+
+(define-public phonon
+  (package
+    (name "phonon")
+    (version "4.7.0")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append "http://download.kde.org/stable/" name
+                                "/" version "/"
+                                name "-" version ".tar.xz"))
+             (sha256
+              (base32
+               "1sxrnwm16dxy32xmrqf26762wmbqing1zx8i4vlvzgzvd9xy39ac"))))
+    (build-system cmake-build-system)
+    ;; FIXME: Add interpreter ruby once available.
+    ;; Add optional input libqtzeitgeist.
+    (inputs
+     `(("automoc4" ,automoc4)
+       ("glib" ,glib)
+       ("libx11" ,libx11)
+       ("pkg-config" ,pkg-config)
+       ("pulseaudio" ,pulseaudio)
+       ("qt" ,qt-4)))
+    (arguments
+     `(#:tests? #f)) ; no test target
+    (home-page "http://phonon.kde.org/")
+    (synopsis "Qt 4 multimedia API")
+    (description "KDE desktop environment")
+    (license lgpl2.1+)))
diff --git a/gnu/packages/lightning.scm b/gnu/packages/lightning.scm
index 03255e0617..8ec433e0b8 100644
--- a/gnu/packages/lightning.scm
+++ b/gnu/packages/lightning.scm
@@ -25,14 +25,14 @@
 (define-public lightning
   (package
     (name "lightning")
-    (version "2.0.1")
+    (version "2.0.2")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/lightning/lightning-"
                                  version ".tar.gz"))
              (sha256
               (base32
-               "1cc19rpgrqvpkzb19ffsxw3k254m46npbkx8cbgv3dbxjf9sf4v5"))))
+               "100ya7dx12403gimif7p2q7ahd8vxqrxpxqzqr1zqci825nb0b43"))))
     (build-system gnu-build-system)
     (synopsis "Library for generating assembly code at runtime")
     (description
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index 7176c37a87..e1f8b4f46d 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -145,7 +145,7 @@
     (license gpl2+)))
 
 (define-public linux-libre
-  (let* ((version "3.11")
+  (let* ((version "3.12")
          (build-phase
           '(lambda* (#:key system #:allow-other-keys #:rest args)
              (let ((arch (car (string-split system #\-))))
@@ -191,7 +191,7 @@
              (uri (linux-libre-urls version))
              (sha256
               (base32
-               "1vlk04xkvyy1kc9zz556md173rn1qzlnvhz7c9sljv4bpk3mdspl"))))
+               "0drjxm9h2k9bik2mhrqqqi6cm5rn2db647wf0zvb58xldj0zmhb6"))))
     (build-system gnu-build-system)
     (native-inputs `(("perl" ,perl)
                      ("bc" ,bc)
diff --git a/gnu/packages/parallel.scm b/gnu/packages/parallel.scm
new file mode 100644
index 0000000000..946e1acb6d
--- /dev/null
+++ b/gnu/packages/parallel.scm
@@ -0,0 +1,47 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2013 Eric Bavier <bavier@member.fsf.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages parallel)
+  #:use-module (guix packages)
+  #:use-module (guix licenses)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages perl))
+
+(define-public parallel
+  (package
+    (name "parallel")
+    (version "20131022")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/parallel/parallel-"
+                          version ".tar.bz2"))
+      (sha256
+       (base32
+        "1ydn8aj72wfjdvldzjwah9cvqay8vzr3dbspa5l0g2y10dx0qa4k"))))
+    (build-system gnu-build-system)
+    (inputs `(("perl" ,perl))) 
+    (home-page "http://www.gnu.org/software/parallel/")
+    (synopsis "Build and execute command lines in parallel")
+    (description
+     "GNU Parallel is a tool for executing shell jobs in parallel using one
+or more computers.  Jobs can consist of single commands or of scripts
+and they are executed on lists of files, hosts, users or other items.")
+    (license gpl3+)))
diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm
index 2a0872bcdc..6aa467acef 100644
--- a/gnu/packages/qt.scm
+++ b/gnu/packages/qt.scm
@@ -118,22 +118,28 @@ X11 (yet).")
                            (("/bin/pwd") (which "pwd")))
               ;; do not pass "--enable-fast-install", which makes the
               ;; configure process fail
-              (zero? (system* "./configure"
-                              "-verbose"
-                              "-prefix" out
-                              "-opensource"
-                              "-confirm-license"
-                              ;; drop all special machine instructions
-                              "-no-sse2"
-                              "-no-sse3"
-                              "-no-ssse3"
-                              "-no-sse4.1"
-                              "-no-sse4.2"
-                              "-no-avx"
-                              "-no-avx2"
-                              "-no-neon"
-                              "-no-mips_dsp"
-                              "-no-mips_dspr2"))))
+              (zero? (system*
+                      "./configure"
+                      "-verbose"
+                      "-prefix" out
+                      "-opensource"
+                      "-confirm-license"
+                      ;; drop special machine instructions not supported
+                      ;; on all instances of the target
+                      ,@(if (string-prefix? "x86_64"
+                                            (or (%current-target-system)
+                                                (%current-system)))
+                            '()
+                            '("-no-sse2"))
+                      "-no-sse3"
+                      "-no-ssse3"
+                      "-no-sse4.1"
+                      "-no-sse4.2"
+                      "-no-avx"
+                      "-no-avx2"
+                      "-no-neon"
+                      "-no-mips_dsp"
+                      "-no-mips_dspr2"))))
           %standard-phases)))
     (home-page "http://qt-project.org/")
     (synopsis "Cross-platform GUI library")
@@ -165,20 +171,26 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                            (("/bin/pwd") (which "pwd")))
               ;; do not pass "--enable-fast-install", which makes the
               ;; configure process fail
-              (zero? (system* "./configure"
-                              "-verbose"
-                              "-prefix" out
-                              "-opensource"
-                              "-confirm-license"
-                              ;; drop all special machine instructions
-                              "-no-mmx"
+              (zero? (system*
+                      "./configure"
+                      "-verbose"
+                      "-prefix" out
+                      "-opensource"
+                      "-confirm-license"
+                      ;; drop special machine instructions not supported
+                      ;; on all instances of the target
+                      ,@(if (string-prefix? "x86_64"
+                                            (or (%current-target-system)
+                                                (%current-system)))
+                            '()
+                            '("-no-mmx"
                               "-no-3dnow"
                               "-no-sse"
-                              "-no-sse2"
-                              "-no-sse3"
-                              "-no-ssse3"
-                              "-no-sse4.1"
-                              "-no-sse4.2"
-                              "-no-avx"
-                              "-no-neon"))))
+                              "-no-sse2"))
+                      "-no-sse3"
+                      "-no-ssse3"
+                      "-no-sse4.1"
+                      "-no-sse4.2"
+                      "-no-avx"
+                      "-no-neon"))))
           %standard-phases)))))
diff --git a/gnu/packages/sdl.scm b/gnu/packages/sdl.scm
index ceb21735bc..e8fd65cf5c 100644
--- a/gnu/packages/sdl.scm
+++ b/gnu/packages/sdl.scm
@@ -23,8 +23,53 @@
   #:use-module (guix download)
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages linux)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages xorg)
-  #:export (libmikmod))
+  #:export (sdl
+            sdl2
+            libmikmod))
+
+(define sdl
+  (package
+    (name "sdl")
+    (version "1.2.15")
+    (source (origin
+             (method url-fetch)
+             (uri
+              (string-append "http://libsdl.org/release/SDL-"
+                             version ".tar.gz"))
+             (sha256
+              (base32
+               "005d993xcac8236fpvd1iawkz4wqjybkpn8dbwaliqz5jfkidlyn"))))
+    (build-system gnu-build-system)
+    (arguments '(#:tests? #f)) ; no check target
+    (inputs `(("libx11" ,libx11)
+              ("libxrandr" ,libxrandr)
+              ("mesa" ,mesa)
+              ("alsa-lib" ,alsa-lib)
+              ("pkg-config" ,pkg-config)
+              ("pulseaudio" ,pulseaudio)))
+    (synopsis "Cross platform game development library")
+    (description "Simple DirectMedia Layer is a cross-platform development
+library designed to provide low level access to audio, keyboard, mouse,
+joystick, and graphics hardware.")
+    (home-page "http://libsdl.org/")
+    (license lgpl2.1)))
+
+(define sdl2
+  (package (inherit sdl)
+    (name "sdl2")
+    (version "2.0.0")
+    (source (origin
+             (method url-fetch)
+             (uri
+              (string-append "http://libsdl.org/release/SDL2-"
+                             version ".tar.gz"))
+             (sha256
+              (base32
+               "0y3in99brki7vc2mb4c0w39v70mf4h341mblhh8nmq4h7lawhskg"))))
+    (license bsd-3)))
 
 (define libmikmod
   (package
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index 6c0328556e..3d88ff8a4a 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -29,6 +29,7 @@
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages apr)
   #:use-module (gnu packages curl)
+  #:use-module (gnu packages ed)
   #:use-module (gnu packages nano)
   #:use-module (gnu packages openssl)
   #:use-module (gnu packages perl)
@@ -262,15 +263,16 @@ projects, from individuals to large-scale enterprise operations.")
 (define-public rcs
   (package
     (name "rcs")
-    (version "5.9.0")
+    (version "5.9.1")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/rcs/rcs-"
                                  version ".tar.xz"))
              (sha256
               (base32
-               "0w26vsx732dcmb5qfhlkkzvrk1sx6d74qibrn914n14j0ci90jcq"))))
+               "1376amzaj7x6ar3xi1dldc0hgfa3n7412c46wqk2h2f2lf67jsk0"))))
     (build-system gnu-build-system)
+    (native-inputs `(("ed" ,ed)))
     (home-page "http://www.gnu.org/software/rcs/")
     (synopsis "Per-file local revision control system")
     (description
diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm
index db055fa5fc..2413a97150 100644
--- a/gnu/system/vm.scm
+++ b/gnu/system/vm.scm
@@ -134,7 +134,7 @@ made available under the /xchg CIFS share."
          (setenv "PATH" cu)
 
          ,(if make-disk-image?
-              `(zero? (system* img "create" "image.qcow2"
+              `(zero? (system* img "create" "-f" "qcow2" "image.qcow2"
                                ,(number->string disk-image-size)))
               '(begin))
 
diff --git a/guix/build-system/python.scm b/guix/build-system/python.scm
index 32b1f36a94..a97135fe0c 100644
--- a/guix/build-system/python.scm
+++ b/guix/build-system/python.scm
@@ -96,6 +96,7 @@ prepended to the name."
                        #:key
                        (python (default-python))
                        (tests? #t)
+                       (test-target "test")
                        (configure-flags ''())
                        (phases '(@ (guix build python-build-system)
                                    %standard-phases))
@@ -124,7 +125,7 @@ provides a 'setup.py' file as its build system."
                                    source)
                      #:configure-flags ,configure-flags
                      #:system ,system
-                     #:test-target "test"
+                     #:test-target ,test-target
                      #:tests? ,tests?
                      #:phases ,phases
                      #:outputs %outputs
diff --git a/guix/derivations.scm b/guix/derivations.scm
index 48e9d5ec05..63c1ba4f2b 100644
--- a/guix/derivations.scm
+++ b/guix/derivations.scm
@@ -25,6 +25,7 @@
   #:use-module (rnrs bytevectors)
   #:use-module (ice-9 match)
   #:use-module (ice-9 rdelim)
+  #:use-module (ice-9 vlist)
   #:use-module (guix store)
   #:use-module (guix utils)
   #:use-module (guix hash)
@@ -63,6 +64,7 @@
             derivation-path->output-path
             derivation-path->output-paths
             derivation
+            map-derivation
 
             %guile-for-build
             imported-modules
@@ -539,15 +541,6 @@ advance, such as a file download.
 When REFERENCES-GRAPHS is true, it must be a list of file name/store path
 pairs.  In that case, the reference graph of each store path is exported in
 the build environment in the corresponding file, in a simple text format."
-  (define direct-store-path?
-    (let ((len (+ 1 (string-length (%store-prefix)))))
-      (lambda (p)
-        ;; Return #t if P is a store path, and not a sub-directory of a
-        ;; store path.  This predicate is needed because files *under* a
-        ;; store path are not valid inputs.
-        (and (store-path? p)
-             (not (string-index (substring p len) #\/))))))
-
   (define (add-output-paths drv)
     ;; Return DRV with an actual store path for each of its output and the
     ;; corresponding environment variable.
@@ -655,6 +648,113 @@ the build environment in the corresponding file, in a simple text format."
                                         inputs))))
       (set-file-name drv file))))
 
+(define* (map-derivation store drv mapping
+                         #:key (system (%current-system)))
+  "Given MAPPING, a list of pairs of derivations, return a derivation based on
+DRV where all the 'car's of MAPPING have been replaced by its 'cdr's,
+recursively."
+  (define (substitute str initial replacements)
+    (fold (lambda (path replacement result)
+            (string-replace-substring result path
+                                      replacement))
+          str
+          initial replacements))
+
+  (define (substitute-file file initial replacements)
+    (define contents
+      (with-fluids ((%default-port-encoding #f))
+        (call-with-input-file file get-string-all)))
+
+    (let ((updated (substitute contents initial replacements)))
+      (if (string=? updated contents)
+          file
+          ;; XXX: permissions aren't preserved.
+          (add-text-to-store store (store-path-package-name file)
+                             updated))))
+
+  (define input->output-paths
+    (match-lambda
+     (((? derivation? drv))
+      (list (derivation->output-path drv)))
+     (((? derivation? drv) sub-drvs ...)
+      (map (cut derivation->output-path drv <>)
+           sub-drvs))
+     ((file)
+      (list file))))
+
+  (let ((mapping (fold (lambda (pair result)
+                         (match pair
+                           (((? derivation? orig) . replacement)
+                            (vhash-cons (derivation-file-name orig)
+                                        replacement result))
+                           ((file . replacement)
+                            (vhash-cons file replacement result))))
+                       vlist-null
+                       mapping)))
+    (define rewritten-input
+      ;; Rewrite the given input according to MAPPING, and return an input
+      ;; in the format used in 'derivation' calls.
+      (memoize
+       (lambda (input loop)
+         (match input
+           (($ <derivation-input> path (sub-drvs ...))
+            (match (vhash-assoc path mapping)
+              ((_ . (? derivation? replacement))
+               (cons replacement sub-drvs))
+              ((_ . replacement)
+               (list replacement))
+              (#f
+               (let* ((drv (loop (call-with-input-file path read-derivation))))
+                 (cons drv sub-drvs)))))))))
+
+    (let loop ((drv drv))
+      (let* ((inputs       (map (cut rewritten-input <> loop)
+                                (derivation-inputs drv)))
+             (initial      (append-map derivation-input-output-paths
+                                       (derivation-inputs drv)))
+             (replacements (append-map input->output-paths inputs))
+
+             ;; Sources typically refer to the output directories of the
+             ;; original inputs, INITIAL.  Rewrite them by substituting
+             ;; REPLACEMENTS.
+             (sources      (map (lambda (source)
+                                  (match (vhash-assoc source mapping)
+                                    ((_ . replacement)
+                                     replacement)
+                                    (#f
+                                     (substitute-file source
+                                                      initial replacements))))
+                                (derivation-sources drv)))
+
+             ;; Now augment the lists of initials and replacements.
+             (initial      (append (derivation-sources drv) initial))
+             (replacements (append sources replacements))
+             (name         (store-path-package-name
+                            (string-drop-right (derivation-file-name drv)
+                                               4))))
+        (derivation store name
+                    (substitute (derivation-builder drv)
+                                initial replacements)
+                    (map (cut substitute <> initial replacements)
+                         (derivation-builder-arguments drv))
+                    #:system system
+                    #:env-vars (map (match-lambda
+                                     ((var . value)
+                                      `(,var
+                                        . ,(substitute value initial
+                                                       replacements))))
+                                    (derivation-builder-environment-vars drv))
+                    #:inputs (append (map list sources) inputs)
+                    #:outputs (map car (derivation-outputs drv))
+                    #:hash (match (derivation-outputs drv)
+                             ((($ <derivation-output> _ algo hash))
+                              hash)
+                             (_ #f))
+                    #:hash-algo (match (derivation-outputs drv)
+                                  ((($ <derivation-output> _ algo hash))
+                                   algo)
+                                  (_ #f)))))))
+
 
 ;;;
 ;;; Store compatibility layer.
diff --git a/guix/packages.scm b/guix/packages.scm
index 9a2f08d862..c1247b71ac 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -224,24 +224,26 @@ corresponds to the arguments expected by `set-path-environment-variable'."
     (($ <location> file line column)
      (catch 'system
        (lambda ()
-         (call-with-input-file (search-path %load-path file)
-           (lambda (port)
-             (goto port line column)
-             (match (read port)
-               (('package inits ...)
-                (let ((field (assoc field inits)))
-                  (match field
-                    ((_ value)
-                     ;; Put the `or' here, and not in the first argument of
-                     ;; `and=>', to work around a compiler bug in 2.0.5.
-                     (or (and=> (source-properties value)
-                                source-properties->location)
-                         (and=> (source-properties field)
-                                source-properties->location)))
-                    (_
-                     #f))))
-               (_
-                #f)))))
+         ;; In general we want to keep relative file names for modules.
+         (with-fluids ((%file-port-name-canonicalization 'relative))
+           (call-with-input-file (search-path %load-path file)
+             (lambda (port)
+               (goto port line column)
+               (match (read port)
+                 (('package inits ...)
+                  (let ((field (assoc field inits)))
+                    (match field
+                      ((_ value)
+                       ;; Put the `or' here, and not in the first argument of
+                       ;; `and=>', to work around a compiler bug in 2.0.5.
+                       (or (and=> (source-properties value)
+                                  source-properties->location)
+                           (and=> (source-properties field)
+                                  source-properties->location)))
+                      (_
+                       #f))))
+                 (_
+                  #f))))))
        (lambda _
          #f)))
     (_ #f)))
@@ -419,7 +421,7 @@ IMPORTED-MODULES specify modules to use/import for use by SNIPPET."
                          #:modules modules
                          #:imported-modules modules
                          #:guile-for-build guile)))
-    ((and (? string?) (? store-path?) file)
+    ((and (? string?) (? direct-store-path?) file)
      file)
     ((? string? file)
      (add-to-store store (basename file) #t "sha256" file))))
diff --git a/guix/scripts/build.scm b/guix/scripts/build.scm
index a06755dc7a..dd9a9b8127 100644
--- a/guix/scripts/build.scm
+++ b/guix/scripts/build.scm
@@ -23,6 +23,7 @@
   #:use-module (guix derivations)
   #:use-module (guix packages)
   #:use-module (guix utils)
+  #:use-module (guix monads)
   #:use-module (ice-9 format)
   #:use-module (ice-9 match)
   #:use-module (ice-9 vlist)
@@ -38,19 +39,23 @@
 (define %store
   (make-parameter #f))
 
-(define (derivations-from-package-expressions str package-derivation
-                                              system source?)
+(define (derivation-from-expression str package-derivation
+                                    system source?)
   "Read/eval STR and return the corresponding derivation path for SYSTEM.
-When SOURCE? is true, return the derivations of the package sources;
-otherwise, use PACKAGE-DERIVATION to compute the derivation of a package."
-  (let ((p (read/eval-package-expression str)))
-    (if source?
-        (let ((source (package-source p)))
-          (if source
-              (package-source-derivation (%store) source)
-              (leave (_ "package `~a' has no source~%")
-                     (package-name p))))
-        (package-derivation (%store) p system))))
+When SOURCE? is true and STR evaluates to a package, return the derivation of
+the package source; otherwise, use PACKAGE-DERIVATION to compute the
+derivation of a package."
+  (match (read/eval str)
+    ((? package? p)
+     (if source?
+         (let ((source (package-source p)))
+           (if source
+               (package-source-derivation (%store) source)
+               (leave (_ "package `~a' has no source~%")
+                      (package-name p))))
+         (package-derivation (%store) p system)))
+    ((? procedure? proc)
+     (run-with-store (%store) (proc) #:system system))))
 
 
 ;;;
@@ -68,7 +73,7 @@ otherwise, use PACKAGE-DERIVATION to compute the derivation of a package."
   (display (_ "Usage: guix build [OPTION]... PACKAGE-OR-DERIVATION...
 Build the given PACKAGE-OR-DERIVATION and return their output paths.\n"))
   (display (_ "
-  -e, --expression=EXPR  build the package EXPR evaluates to"))
+  -e, --expression=EXPR  build the package or derivation EXPR evaluates to"))
   (display (_ "
   -S, --source           build the packages' source derivations"))
   (display (_ "
@@ -95,6 +100,8 @@ Build the given PACKAGE-OR-DERIVATION and return their output paths.\n"))
                          as a garbage collector root"))
   (display (_ "
       --verbosity=LEVEL  use the given verbosity LEVEL"))
+  (display (_ "
+      --log-file         return the log file names for the given derivations"))
   (newline)
   (display (_ "
   -h, --help             display this help and exit"))
@@ -161,7 +168,10 @@ Build the given PACKAGE-OR-DERIVATION and return their output paths.\n"))
                 (lambda (opt name arg result)
                   (let ((level (string->number arg)))
                     (alist-cons 'verbosity level
-                                (alist-delete 'verbosity result)))))))
+                                (alist-delete 'verbosity result)))))
+        (option '("log-file") #f #f
+                (lambda (opt name arg result)
+                  (alist-cons 'log-file? #t result)))))
 
 
 ;;;
@@ -235,68 +245,89 @@ Build the given PACKAGE-OR-DERIVATION and return their output paths.\n"))
              (leave (_ "~A: unknown package~%") name))))))
 
   (with-error-handling
-    (let ((opts (parse-options)))
-      (define package->derivation
-        (match (assoc-ref opts 'target)
-          (#f package-derivation)
-          (triplet
-           (cut package-cross-derivation <> <> triplet <>))))
+    ;; Ask for absolute file names so that .drv file names passed from the
+    ;; user to 'read-derivation' are absolute when it returns.
+    (with-fluids ((%file-port-name-canonicalization 'absolute))
+      (let ((opts (parse-options)))
+        (define package->derivation
+          (match (assoc-ref opts 'target)
+            (#f package-derivation)
+            (triplet
+             (cut package-cross-derivation <> <> triplet <>))))
 
-      (parameterize ((%store (open-connection)))
-        (let* ((src? (assoc-ref opts 'source?))
-               (sys  (assoc-ref opts 'system))
-               (drv  (filter-map (match-lambda
-                                  (('expression . str)
-                                   (derivations-from-package-expressions
-                                    str package->derivation sys src?))
-                                  (('argument . (? derivation-path? drv))
-                                   (call-with-input-file drv read-derivation))
-                                  (('argument . (? string? x))
-                                   (let ((p (find-package x)))
-                                     (if src?
-                                         (let ((s (package-source p)))
-                                           (package-source-derivation
-                                            (%store) s))
-                                         (package->derivation (%store) p sys))))
-                                  (_ #f))
-                                 opts))
-               (roots (filter-map (match-lambda
-                                   (('gc-root . root) root)
-                                   (_ #f))
-                                  opts)))
+        (parameterize ((%store (open-connection)))
+          (let* ((src? (assoc-ref opts 'source?))
+                 (sys  (assoc-ref opts 'system))
+                 (drv  (filter-map (match-lambda
+                                    (('expression . str)
+                                     (derivation-from-expression
+                                      str package->derivation sys src?))
+                                    (('argument . (? derivation-path? drv))
+                                     (call-with-input-file drv read-derivation))
+                                    (('argument . (? store-path?))
+                                     ;; Nothing to do; maybe for --log-file.
+                                     #f)
+                                    (('argument . (? string? x))
+                                     (let ((p (find-package x)))
+                                       (if src?
+                                           (let ((s (package-source p)))
+                                             (package-source-derivation
+                                              (%store) s))
+                                           (package->derivation (%store) p sys))))
+                                    (_ #f))
+                                   opts))
+                 (roots (filter-map (match-lambda
+                                     (('gc-root . root) root)
+                                     (_ #f))
+                                    opts)))
 
-          (show-what-to-build (%store) drv
-                              #:use-substitutes? (assoc-ref opts 'substitutes?)
-                              #:dry-run? (assoc-ref opts 'dry-run?))
+            (unless (assoc-ref opts 'log-file?)
+              (show-what-to-build (%store) drv
+                                  #:use-substitutes? (assoc-ref opts 'substitutes?)
+                                  #:dry-run? (assoc-ref opts 'dry-run?)))
 
-          ;; TODO: Add more options.
-          (set-build-options (%store)
-                             #:keep-failed? (assoc-ref opts 'keep-failed?)
-                             #:build-cores (or (assoc-ref opts 'cores) 0)
-                             #:fallback? (assoc-ref opts 'fallback?)
-                             #:use-substitutes? (assoc-ref opts 'substitutes?)
-                             #:max-silent-time (assoc-ref opts 'max-silent-time)
-                             #:verbosity (assoc-ref opts 'verbosity))
+            ;; TODO: Add more options.
+            (set-build-options (%store)
+                               #:keep-failed? (assoc-ref opts 'keep-failed?)
+                               #:build-cores (or (assoc-ref opts 'cores) 0)
+                               #:fallback? (assoc-ref opts 'fallback?)
+                               #:use-substitutes? (assoc-ref opts 'substitutes?)
+                               #:max-silent-time (assoc-ref opts 'max-silent-time)
+                               #:verbosity (assoc-ref opts 'verbosity))
 
-          (if (assoc-ref opts 'derivations-only?)
-              (begin
-                (format #t "~{~a~%~}" (map derivation-file-name drv))
-                (for-each (cut register-root <> <>)
-                          (map (compose list derivation-file-name) drv)
-                          roots))
-              (or (assoc-ref opts 'dry-run?)
-                  (and (build-derivations (%store) drv)
-                       (for-each (lambda (d)
-                                   (format #t "~{~a~%~}"
-                                           (map (match-lambda
-                                                 ((out-name . out)
-                                                  (derivation->output-path
-                                                   d out-name)))
-                                                (derivation-outputs d))))
-                                 drv)
-                       (for-each (cut register-root <> <>)
-                                 (map (lambda (drv)
-                                        (map cdr
-                                             (derivation->output-paths drv)))
-                                      drv)
-                                 roots)))))))))
+            (cond ((assoc-ref opts 'log-file?)
+                   (for-each (lambda (file)
+                               (let ((log (log-file (%store) file)))
+                                 (if log
+                                     (format #t "~a~%" log)
+                                     (leave (_ "no build log for '~a'~%")
+                                            file))))
+                             (delete-duplicates
+                              (append (map derivation-file-name drv)
+                                      (filter-map (match-lambda
+                                                   (('argument
+                                                     . (? store-path? file))
+                                                    file)
+                                                   (_ #f))
+                                                  opts)))))
+                  ((assoc-ref opts 'derivations-only?)
+                   (format #t "~{~a~%~}" (map derivation-file-name drv))
+                   (for-each (cut register-root <> <>)
+                             (map (compose list derivation-file-name) drv)
+                             roots))
+                  ((not (assoc-ref opts 'dry-run?))
+                   (and (build-derivations (%store) drv)
+                        (for-each (lambda (d)
+                                    (format #t "~{~a~%~}"
+                                            (map (match-lambda
+                                                  ((out-name . out)
+                                                   (derivation->output-path
+                                                    d out-name)))
+                                                 (derivation-outputs d))))
+                                  drv)
+                        (for-each (cut register-root <> <>)
+                                  (map (lambda (drv)
+                                         (map cdr
+                                              (derivation->output-paths drv)))
+                                       drv)
+                                  roots))))))))))
diff --git a/guix/scripts/substitute-binary.scm b/guix/scripts/substitute-binary.scm
index 1afc93bbc9..83e3d25dba 100755
--- a/guix/scripts/substitute-binary.scm
+++ b/guix/scripts/substitute-binary.scm
@@ -123,7 +123,8 @@ again."
               (lambda ()
                 body ...)
               (lambda args
-                ;; The SIGALRM triggers EINTR, because of the bug at
+                ;; Before Guile v2.0.9-39-gfe51c7b, the SIGALRM triggers EINTR
+                ;; because of the bug at
                 ;; <http://lists.gnu.org/archive/html/guile-devel/2013-06/msg00050.html>.
                 ;; When that happens, try again.  Note: SA_RESTART cannot be
                 ;; used because of <http://bugs.gnu.org/14640>.
@@ -162,10 +163,17 @@ provide."
            (warning (_ "while fetching ~a: server is unresponsive~%")
                     (uri->string uri))
            (warning (_ "try `--no-substitutes' if the problem persists~%"))
-           (when port
-             (close-port port)))
+
+           ;; Before Guile v2.0.9-39-gfe51c7b, EINTR was reported to the user,
+           ;; and thus PORT had to be closed and re-opened.  This is not the
+           ;; case afterward.
+           (unless (or (guile-version>? "2.0.9")
+                       (version>? (version) "2.0.9.39"))
+             (when port
+               (close-port port))))
          (begin
-           (set! port (open-socket-for-uri uri #:buffered? buffered?))
+           (when (or (not port) (port-closed? port))
+             (set! port (open-socket-for-uri uri #:buffered? buffered?)))
            (http-fetch uri #:text? #f #:port port)))))))
 
 (define-record-type <cache>
@@ -290,6 +298,12 @@ reading PORT."
   (time>? (subtract-duration now (make-time time-duration 0 ttl))
           (make-time time-monotonic 0 date)))
 
+(define %lookup-threads
+  ;; Number of threads spawned to perform lookup operations.  This means we
+  ;; can have this many simultaneous HTTP GET requests to the server, which
+  ;; limits the impact of connection latency.
+  20)
+
 (define (lookup-narinfo cache path)
   "Check locally if we have valid info about PATH, otherwise go to CACHE and
 check what it has."
@@ -489,8 +503,9 @@ Internal tool to substitute a pre-built binary to a local build.\n"))
                    ;; Return the subset of PATHS available in CACHE.
                    (let ((substitutable
                           (if cache
-                              (par-map (cut lookup-narinfo cache <>)
-                                       paths)
+                              (n-par-map %lookup-threads
+                                         (cut lookup-narinfo cache <>)
+                                         paths)
                               '())))
                      (for-each (lambda (narinfo)
                                  (when narinfo
@@ -501,8 +516,9 @@ Internal tool to substitute a pre-built binary to a local build.\n"))
                    ;; Reply info about PATHS if it's in CACHE.
                    (let ((substitutable
                           (if cache
-                              (par-map (cut lookup-narinfo cache <>)
-                                       paths)
+                              (n-par-map %lookup-threads
+                                         (cut lookup-narinfo cache <>)
+                                         paths)
                               '())))
                      (for-each (lambda (narinfo)
                                  (format #t "~a\n~a\n~a\n"
diff --git a/guix/store.scm b/guix/store.scm
index 0f1e2f9466..2821cacdcc 100644
--- a/guix/store.scm
+++ b/guix/store.scm
@@ -85,9 +85,11 @@
 
             %store-prefix
             store-path?
+            direct-store-path?
             derivation-path?
             store-path-package-name
-            store-path-hash-part))
+            store-path-hash-part
+            log-file))
 
 (define %protocol-version #x10c)
 
@@ -639,6 +641,14 @@ collected, and the number of bytes freed."
   ;; `isStorePath' in Nix does something similar.
   (string-prefix? (%store-prefix) path))
 
+(define (direct-store-path? path)
+  "Return #t if PATH is a store path, and not a sub-directory of a store path.
+This predicate is sometimes needed because files *under* a store path are not
+valid inputs."
+  (and (store-path? path)
+       (let ((len (+ 1 (string-length (%store-prefix)))))
+         (not (string-index (substring path len) #\/)))))
+
 (define (derivation-path? path)
   "Return #t if PATH is a derivation path."
   (and (store-path? path) (string-suffix? ".drv" path)))
@@ -660,3 +670,23 @@ syntactically valid store path."
                                 "/([0-9a-df-np-sv-z]{32})-[^/]+$"))))
     (and=> (regexp-exec path-rx path)
            (cut match:substring <> 1))))
+
+(define (log-file store file)
+  "Return the build log file for FILE, or #f if none could be found.  FILE
+must be an absolute store file name, or a derivation file name."
+  (define state-dir                               ; XXX: factorize
+    (or (getenv "NIX_STATE_DIR") %state-directory))
+
+  (cond ((derivation-path? file)
+         (let* ((base (basename file))
+                (log  (string-append (dirname state-dir) ; XXX: ditto
+                                     "/log/nix/drvs/"
+                                     (string-take base 2) "/"
+                                     (string-drop base 2) ".bz2")))
+           (and (file-exists? log) log)))
+        (else
+         (match (valid-derivers store file)
+           ((derivers ...)
+            ;; Return the first that works.
+            (any (cut log-file store <>) derivers))
+           (_ #f)))))
diff --git a/guix/ui.scm b/guix/ui.scm
index 8a28574c3c..f15419f7a8 100644
--- a/guix/ui.scm
+++ b/guix/ui.scm
@@ -45,6 +45,7 @@
             show-what-to-build
             call-with-error-handling
             with-error-handling
+            read/eval
             read/eval-package-expression
             location->string
             switch-symlinks
@@ -193,25 +194,29 @@ General help using GNU software: <http://www.gnu.org/gethelp/>"))
         (leave (_ "~a~%")
                (strerror (system-error-errno args)))))))
 
-(define (read/eval-package-expression str)
-  "Read and evaluate STR and return the package it refers to, or exit an
-error."
+(define (read/eval str)
+  "Read and evaluate STR, raising an error if something goes wrong."
   (let ((exp (catch #t
                (lambda ()
                  (call-with-input-string str read))
                (lambda args
                  (leave (_ "failed to read expression ~s: ~s~%")
                         str args)))))
-    (let ((p (catch #t
-               (lambda ()
-                 (eval exp the-scm-module))
-               (lambda args
-                 (leave (_ "failed to evaluate expression `~a': ~s~%")
-                        exp args)))))
-      (if (package? p)
-          p
-          (leave (_ "expression `~s' does not evaluate to a package~%")
-                 exp)))))
+    (catch #t
+      (lambda ()
+        (eval exp the-scm-module))
+      (lambda args
+        (leave (_ "failed to evaluate expression `~a': ~s~%")
+               exp args)))))
+
+(define (read/eval-package-expression str)
+  "Read and evaluate STR and return the package it refers to, or exit an
+error."
+  (match (read/eval str)
+    ((? package? p) p)
+    (_
+     (leave (_ "expression ~s does not evaluate to a package~%")
+            str))))
 
 (define* (show-what-to-build store drv
                              #:key dry-run? (use-substitutes? #t))
diff --git a/guix/utils.scm b/guix/utils.scm
index 1f3c0c8ad6..b730340eda 100644
--- a/guix/utils.scm
+++ b/guix/utils.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013 Mark H Weaver <mhw@netris.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -62,6 +63,7 @@
             guile-version>?
             package-name->name+version
             string-tokenize*
+            string-replace-substring
             file-extension
             file-sans-extension
             call-with-temporary-output-file
@@ -387,6 +389,28 @@ like `string-tokenize', but SEPARATOR is a string."
           (else
            (reverse (cons string result))))))
 
+(define* (string-replace-substring str substr replacement
+                                   #:optional
+                                   (start 0)
+                                   (end (string-length str)))
+  "Replace all occurrences of SUBSTR in the START--END range of STR by
+REPLACEMENT."
+  (match (string-length substr)
+    (0
+     (error "string-replace-substring: empty substring"))
+    (substr-length
+     (let loop ((start  start)
+                (pieces (list (substring str 0 start))))
+       (match (string-contains str substr start end)
+         (#f
+          (string-concatenate-reverse
+           (cons (substring str start) pieces)))
+         (index
+          (loop (+ index substr-length)
+                (cons* replacement
+                       (substring str start index)
+                       pieces))))))))
+
 (define (call-with-temporary-output-file proc)
   "Call PROC with a name of a temporary file and open output port to that
 file; close the file and delete it when leaving the dynamic extent of this
diff --git a/po/LINGUAS b/po/LINGUAS
index 25ccd9d9dc..95242bc24c 100644
--- a/po/LINGUAS
+++ b/po/LINGUAS
@@ -4,3 +4,4 @@ en@boldquot
 en@quot
 eo
 pt_BR
+sr
diff --git a/po/sr.po b/po/sr.po
new file mode 100644
index 0000000000..a1f3f253f6
--- /dev/null
+++ b/po/sr.po
@@ -0,0 +1,1304 @@
+# Serbian translation of guix.
+# Copyright (C) 2013 Free Software Foundation, Inc.
+# This file is distributed under the same license as the guix package.
+# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: guix 0.4-pre2\n"
+"Report-Msgid-Bugs-To: ludo@gnu.org\n"
+"POT-Creation-Date: 2013-09-25 16:04+0200\n"
+"PO-Revision-Date: 2013-11-08 11:41+0200\n"
+"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
+"Language-Team: Serbian <(nothing)>\n"
+"Language: sr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: gnu/packages.scm:94
+#, scheme-format
+msgid "cannot access `~a': ~a~%"
+msgstr "не могу да приступим „~a“: ~a~%"
+
+#: gnu/packages/base.scm:65
+msgid "Hello, GNU world: An example GNU package"
+msgstr "Поздрав, Гну народе: Пример Гну пакета"
+
+#: gnu/packages/base.scm:66
+msgid "Yeah..."
+msgstr "Да..."
+
+#: gnu/packages/base.scm:82
+msgid "Print lines matching a pattern"
+msgstr "Исписује редове који одговарају шаблону"
+
+#: gnu/packages/base.scm:84
+msgid ""
+"The grep command searches one or more input files for lines containing a\n"
+"match to a specified pattern.  By default, grep prints the matching\n"
+"lines."
+msgstr ""
+"Наредба греп претражује једну или више улазних датоотека за редовима који\n"
+"садрже поклапање са наведеним шаблоном.  По основи, греп исписује поклопљене\n"
+"редове."
+
+#: gnu/packages/base.scm:102
+msgid "Stream editor"
+msgstr "Уређивач протока"
+
+#: gnu/packages/base.scm:117
+msgid ""
+"Sed (stream editor) isn't really a true text editor or text processor.\n"
+"Instead, it is used to filter text, i.e., it takes text input and performs\n"
+"some operation (or set of operations) on it and outputs the modified text.\n"
+"Sed is typically used for extracting part of a file using pattern matching or\n"
+"substituting multiple occurrences of a string within a file."
+msgstr ""
+"Сед (уређивач протока) није стварно прави уређивач или обрађивач текста.\n"
+"Напротив, користи се за издвајање текста, тј. узима улаз текста и обавља\n"
+"неке радње (или скуп радњи) на њему и даје излаз измењеног текста.\n"
+"Сед се углавном користи за издвајање дела датотеке користећи поклапање\n"
+"шаблона или замењује више појава ниске унутар датотеке."
+
+#: gnu/packages/base.scm:140
+msgid "Managing tar archives"
+msgstr "Управљање тар архивама"
+
+#: gnu/packages/base.scm:142
+msgid ""
+"The Tar program provides the ability to create tar archives, as well as\n"
+"various other kinds of manipulation.  For example, you can use Tar on\n"
+"previously created archives to extract files, to store additional files, or\n"
+"to update or list files which were already stored.\n"
+"\n"
+"Initially, tar archives were used to store files conveniently on magnetic\n"
+"tape.  The name \"Tar\" comes from this use; it stands for tape archiver.\n"
+"Despite the utility's name, Tar can direct its output to available devices,\n"
+"files, or other programs (using pipes), it can even access remote devices or\n"
+"files (as archives)."
+msgstr ""
+"Програм Тар обезбеђује способност стварања тар архива, као и разне друге\n"
+"врсте управљања. На пример, можете да користите Тар на већ направљеним\n"
+"архивама за извлачење датотека, за ускладиштење додатних датотека, или\n"
+"за освежавање или исписивање датотека које су већ ускладиштене.\n"
+"\n"
+"На почетку, тар архиве су биле коришћене за пригодно чување датотека на\n"
+"магнетским тракама. Назив „Тар“ је настао из такве употребе; и значи\n"
+"архивар трака. Без обзира на назив помагала, Тар може да успери свој излаз\n"
+"ка доступним уређајима, датотекама, или другим програмима (употребом спојки)\n"
+"чак може и да приступи удаљеним уређајима или датотекама (као архивама)."
+
+#: gnu/packages/base.scm:173
+msgid "Apply differences to originals, with optional backups"
+msgstr "Примењивање разлика на оригинале, са опционалним резервама"
+
+#: gnu/packages/base.scm:175
+msgid ""
+"GNU Patch takes a patch file containing a difference listing produced by\n"
+"the diff program and applies those differences to one or more original files,\n"
+"producing patched versions."
+msgstr ""
+"Гнуова закрпа узима датотеку закрпе која садржи списак разлика произведен\n"
+"програмом за разлике (diff) и примењује те разлике на једној или више\n"
+"изворних датотека, стварајући прикрпљена издања."
+
+#: gnu/packages/base.scm:193
+msgid "Comparing and merging files"
+msgstr "Упоређивање и стапање датотека"
+
+#: gnu/packages/base.scm:195
+msgid ""
+"GNU Diffutils is a package of several programs related to finding\n"
+"differences between files.\n"
+"\n"
+"Computer users often find occasion to ask how two files differ. Perhaps one\n"
+"file is a newer version of the other file. Or maybe the two files started out\n"
+"as identical copies but were changed by different people.\n"
+"\n"
+"You can use the diff command to show differences between two files, or each\n"
+"corresponding file in two directories. diff outputs differences between files\n"
+"line by line in any of several formats, selectable by command line\n"
+"options. This set of differences is often called a ‘diff’ or ‘patch’. For\n"
+"files that are identical, diff normally produces no output; for\n"
+"binary (non-text) files, diff normally reports only that they are different.\n"
+"\n"
+"You can use the cmp command to show the offsets and line numbers where two\n"
+"files differ. cmp can also show all the characters that differ between the\n"
+"two files, side by side.\n"
+"\n"
+"You can use the diff3 command to show differences among three files. When two\n"
+"people have made independent changes to a common original, diff3 can report\n"
+"the differences between the original and the two changed versions, and can\n"
+"produce a merged file that contains both persons' changes together with\n"
+"warnings about conflicts.\n"
+"\n"
+"You can use the sdiff command to merge two files interactively."
+msgstr ""
+"„GNU Diffutils“ је пакет неколико програма намењених за проналажење\n"
+"разлика између датотека.\n"
+"\n"
+"Корисници рачунара често желе да знају у чему се разликују две датотеке.\n"
+"Можда је једна датотека новије издање оне друге. Или су можда обе датотеке\n"
+"започете као истоветни умношци али су их измениле другачије особе.\n"
+"\n"
+"Можете да користите наредбу „diff“ да покажете разлике између две датотеке\n"
+"или сваку одговарајућу датотеку у два директоријума. дифф исписује разлике\n"
+"између датотека ред по ред у било ком од неколико записа, бирањем опција\n"
+"линије наредби. Овај скуп разлика се често назива „diff“ или „patch“. За\n"
+"датотеке које су исте, дифф обично не даје резултат; за извршне (не-текстуалне)\n"
+"датотеке, дифф обично извештава само о томе да се оне разликују.\n"
+"\n"
+"\n"
+"Можете да користите наредбу „cmp“ да прикажете помераје и бројеве редова\n"
+"где се две датотеке разликују. цмп може такође да покаже све знакове који\n"
+"се разликују између две датотеке, један поред другог.\n"
+"\n"
+"Можете да користите наредбу „diff3“ да прикажете разлике између три датотеке.\n"
+"Када два корисника направе независне измене у заједничком оригиналу, дифф3\n"
+"може да извести о разликама између оригинала и два измењена издања, и може да\n"
+"направи стопљену датотеку која заједно садржи измене обе особе са упозорењима о сукобима.\n"
+"\n"
+"Можете да користите наредбу „sdiff“ да међудејствено стопите две датотеке."
+
+#: gnu/packages/base.scm:246
+msgid "Operating on files matching given criteria"
+msgstr "Радње над датотекама према датим условима"
+
+#: gnu/packages/base.scm:248
+msgid ""
+"The GNU Find Utilities are the basic directory searching utilities of\n"
+"the GNU operating system.  These programs are typically used in conjunction\n"
+"with other programs to provide modular and powerful directory search and file\n"
+"locating capabilities to other commands.\n"
+"\n"
+"The tools supplied with this package are:\n"
+"\n"
+"  * find - search for files in a directory hierarchy;\n"
+"  * locate - list files in databases that match a pattern;\n"
+"  * updatedb - update a file name database;\n"
+"  * xargs - build and execute command lines from standard input.\n"
+msgstr ""
+"„GNU Find Utilities“ су основна помагала за претраживање директоријума\n"
+"Гнуовог оперативног система.  Ови програми се обично користе у спрези\n"
+"са другим програмима да обезбеде модуларне и моћне могућности претраге\n"
+"директоријума и налажења датотека другим наредбама.\n"
+"\n"
+"Алати који иду уз овај пакет су:\n"
+"\n"
+"  * find — тражи датотеке у хијерархији директоријума;\n"
+"  * locate — исписује датотеке у базама података које одговарају шаблону;\n"
+"  * updatedb — освежава базу података назива датотеке;\n"
+"  * xargs — гради редове извршавања наредбе са стандардног улаза.\n"
+
+#: gnu/packages/base.scm:298
+msgid "Core GNU utilities (file, text, shell)"
+msgstr "Гнуова кључна помагала (датотека, текст, шкољка)"
+
+#: gnu/packages/base.scm:300
+msgid ""
+"The GNU Core Utilities are the basic file, shell and text manipulation\n"
+"utilities of the GNU operating system.  These are the core utilities which\n"
+"are expected to exist on every operating system."
+msgstr ""
+"Гнуова кључна помагала су основни алати за управљање датотекама, шкољком\n"
+"и текстом за Гнуов оперативни систем.  То су кључна помагала за која се\n"
+"очекује да постоје на сваком оперативном систему."
+
+#: gnu/packages/base.scm:333
+msgid "Remake files automatically"
+msgstr "Самостално поновно стварање датотека"
+
+#: gnu/packages/base.scm:335
+msgid ""
+"Make is a tool which controls the generation of executables and other\n"
+"non-source files of a program from the program's source files.\n"
+"\n"
+"Make gets its knowledge of how to build your program from a file called the\n"
+"makefile, which lists each of the non-source files and how to compute it from\n"
+"other files. When you write a program, you should write a makefile for it, so\n"
+"that it is possible to use Make to build and install the program."
+msgstr ""
+"Мејк је алат који управља стварањем извршних и других не-изворних датотека\n"
+"програма из изворних датотека програма.\n"
+"\n"
+"Мејк сазнаје како да изгради ваш програм из датотеке зване „makefile“, која\n"
+"исписује сваку не-изворну датотеку и како да је прорчуна из других датотека.\n"
+"Када пишете програм треба да напишете и његову „makefile“ датотеку, тако\n"
+"да буде могуће користити Мејк за изградњу и инсталацију програма."
+
+#: gnu/packages/base.scm:379
+msgid "Binary utilities: bfd gas gprof ld"
+msgstr "Бинарна помагала: bfd gas gprof ld"
+
+#: gnu/packages/base.scm:381
+msgid ""
+"The GNU Binutils are a collection of binary tools.  The main ones are\n"
+"`ld' (the GNU linker) and `as' (the GNU assembler).  They also include the\n"
+"BFD (Binary File Descriptor) library, `gprof', `nm', `strip', etc."
+msgstr ""
+"Гнуова бинпомагала јесу скуп бинарних алата.  Главни су „ld“ (Гнуов везник) и „as“ (Гнуов асемблер). У њих такође спадају библиотека „BFD“\n"
+"(Binary File Descriptor), „gprof“, „nm“, „strip“, итд."
+
+#: gnu/packages/base.scm:500
+msgid "The GNU C Library"
+msgstr "Гну Ц библиотека"
+
+#: gnu/packages/base.scm:502
+msgid ""
+"Any Unix-like operating system needs a C library: the library which\n"
+"defines the \"system calls\" and other basic facilities such as open, malloc,\n"
+"printf, exit...\n"
+"\n"
+"The GNU C library is used as the C library in the GNU system and most systems\n"
+"with the Linux kernel."
+msgstr ""
+"Сваком Јуниксоликом оперативном систему је потребна Ц библиотека: библиотека\n"
+"која одређује „системске позиве“ и остале основне олакшице као што су\n"
+"„open, malloc, printf, exit...“\n"
+"\n"
+"Гнуова Ц библиотека се користи као Ц библиотека у Гнуовом систему и већини\n"
+"система са Линукс језгром."
+
+#: gnu/packages/base.scm:571
+msgid "Database of current and historical time zones"
+msgstr "База података о текућим и застарелим временским зонама"
+
+#: gnu/packages/base.scm:572
+msgid ""
+"The Time Zone Database (often called tz or zoneinfo)\n"
+"contains code and data that represent the history of local time for many\n"
+"representative locations around the globe. It is updated periodically to\n"
+"reflect changes made by political bodies to time zone boundaries, UTC offsets,\n"
+"and daylight-saving rules."
+msgstr ""
+"База података временске зоне (често називана „tz“ или „zoneinfo“)\n"
+"садржи код и податке који представљају историјат месног времена за\n"
+"многа представљајућа места широм света. Повремено се освежава како\n"
+"би осликала промене на границама временских зона које доносе политичка\n"
+"тела, помераје КУВ-а, и правила уштеде дневног светла."
+
+#: gnu/packages/base.scm:990
+msgid "The linker wrapper"
+msgstr "Омотач повезивача"
+
+#: gnu/packages/base.scm:992
+msgid ""
+"The linker wrapper (or `ld-wrapper') wraps the linker to add any\n"
+"missing `-rpath' flags, and to detect any misuse of libraries outside of the\n"
+"store."
+msgstr ""
+"Омотач повезивача (или „ld-wrapper“) обмотава повезивача да би додао\n"
+"недостајућу опцију „-rpath“, и да би открио лоше коришћење библиотека\n"
+"изван складишта."
+
+#: gnu/packages/guile.scm:97 gnu/packages/guile.scm:166
+msgid "Scheme implementation intended especially for extensions"
+msgstr "Примена шеме нарочито осмишљена за проширења"
+
+#: gnu/packages/guile.scm:99
+msgid ""
+"GNU Guile 1.8 is an interpreter for the Scheme programming language,\n"
+"packaged as a library that can be embedded into programs to make them\n"
+"extensible.  It supports many SRFIs."
+msgstr ""
+"Гну Гуиле 1.8 је преводилац програмског језика Шеме, запакован као\n"
+"библиотека која може бити уграђена у програме како би их учинила\n"
+"проширивим.  Подржава многе СРФИ-ове."
+
+#: gnu/packages/guile.scm:168
+msgid ""
+"GNU Guile is an implementation of the Scheme programming language, with\n"
+"support for many SRFIs, packaged for use in a wide variety of environments.\n"
+"In addition to implementing the R5RS Scheme standard and a large subset of\n"
+"R6RS, Guile includes a module system, full access to POSIX system calls,\n"
+"networking support, multiple threads, dynamic linking, a foreign function\n"
+"call interface, and powerful string processing."
+msgstr ""
+"Гну Гуиле је примена програмског језика Шеме, са подршком за многе\n"
+"СРФИ-ове запакован за коришћење у разним окружењима.\n"
+"Као додатак примене Р5РС стандарда Шеме и великог подскупа Р6РС, Гуиле\n"
+"обухвата систем модула, потпун приступ системским позивима ПОСИКС-а, пподршку умрежавања, вишеструке нити, динамичко повезивање, сучеље позива\n"
+"страних функција, и моћну обраду ниске."
+
+#: gnu/packages/guile.scm:212
+msgid "Framework for building readers for GNU Guile"
+msgstr "Радни склоп за изградњу читача за Гну Гуила"
+
+#: gnu/packages/guile.scm:214
+msgid ""
+"Guile-Reader is a simple framework for building readers for GNU Guile.\n"
+"\n"
+"The idea is to make it easy to build procedures that extend Guile’s read\n"
+"procedure. Readers supporting various syntax variants can easily be written,\n"
+"possibly by re-using existing “token readers” of a standard Scheme\n"
+"readers. For example, it is used to implement Skribilo’s R5RS-derived\n"
+"document syntax.\n"
+"\n"
+"Guile-Reader’s approach is similar to Common Lisp’s “read table”, but\n"
+"hopefully more powerful and flexible (for instance, one may instantiate as\n"
+"many readers as needed)."
+msgstr ""
+"Гуиле-читач је једноставан радни склоп за изградњу читача за Гну Гуила.\n"
+"\n"
+"Замисао је олакшати изградњу поступака који проширују Гуилов поступак\n"
+"читања. Читачи који подржавају разне варијанте синтаксе могу бити лако\n"
+"написани, по могућству поновним коришћењем постојећих „читача “ читача\n"
+"стандардне Шеме. На пример, користи се за примену синтаксе документа која произилази из Р5РС Скрибилоа.\n"
+"\n"
+"Приступ Гуиле-читача је сличан Општем Лисповом „читању табеле“, али је на\n"
+"срећу много моћнији и прилагодљивији (на пример, неко може да покрене\n"
+"онолико читача колико му је потребно)."
+
+#: gnu/packages/guile.scm:266
+msgid "Guile bindings to ncurses"
+msgstr "Гуилеово повезивање са ен-курсом"
+
+#: gnu/packages/guile.scm:268
+msgid ""
+"GNU Guile-Ncurses is a library for the Guile Scheme interpreter that\n"
+"provides functions for creating text user interfaces.  The text user interface\n"
+"functionality is built on the ncurses libraries: curses, form, panel, and\n"
+"menu."
+msgstr ""
+"Гну Гуиле Ен-курсис је библиотека за преводиоца Гуле Шеме која обезбеђује\n"
+"функције за стварање текстуалног корисничког сучеља. Функционалност текстуалног\n"
+"корисничког сучеља је изграђена на ен-курсис библиотекама: „curses, form,\n"
+"panel, и menu“."
+
+#: gnu/packages/guile.scm:292
+msgid "Run jobs at scheduled times"
+msgstr "Покретање послова у заказано време"
+
+#: gnu/packages/guile.scm:294
+msgid ""
+"The GNU package mcron (Mellor's cron) is a 100% compatible replacement\n"
+"for Vixie cron.  It is written in pure Guile, and allows configuration files\n"
+"to be written in scheme (as well as Vixie's original format) for infinite\n"
+"flexibility in specifying when jobs should be run.  Mcron was written by Dale\n"
+"Mellor."
+msgstr ""
+"Гнуов пакет „mcron“ (Мелоров крон) је 100% сагласна замена за Викси крон.\n"
+"Написан је у чистом Гуилу, и допушта да датотеке подешавања буду записане\n"
+"у шеми (као и у Виксијевом изворном запису) са бескрајном сагласношћу у\n"
+"навођењу када послови требају да се покрену.  Написао га је Дејл Мелор."
+
+#: gnu/packages/guile.scm:323
+msgid "Collection of useful Guile Scheme modules"
+msgstr "Збирка корисних модула Гуиле Шеме"
+
+#: gnu/packages/guile.scm:325
+msgid ""
+"guile-lib is intended as an accumulation place for pure-scheme Guile\n"
+"modules, allowing for people to cooperate integrating their generic Guile\n"
+"modules into a coherent library.  Think \"a down-scaled, limited-scope CPAN\n"
+"for Guile\"."
+msgstr ""
+"гуиле-библ је замишљена као место скупљања за Гуиле модуле чисте-шеме,\n"
+"омогућавајући људима да сарађују сједињавајући њихове опште Гуиле модуле\n"
+"у обједињену библиотеку. Сетите се само „down-scaled, limited-scope CPAN\n"
+"for Guile“."
+
+#: gnu/packages/lout.scm:109
+msgid "Lout, a document layout system similar in style to LaTeX"
+msgstr "Лоут, систем изгледа документа сличан у стилу ЛаТеХ-у"
+
+#: gnu/packages/lout.scm:111
+msgid ""
+"The Lout document formatting system is now reads a high-level description of\n"
+"a document similar in style to LaTeX and produces a PostScript or plain text\n"
+"output file.\n"
+"\n"
+"Lout offers an unprecedented range of advanced features, including optimal\n"
+"paragraph and page breaking, automatic hyphenation, PostScript EPS file\n"
+"inclusion and generation, equation formatting, tables, diagrams, rotation and\n"
+"scaling, sorted indexes, bibliographic databases, running headers and\n"
+"odd-even pages, automatic cross referencing, multilingual documents including\n"
+"hyphenation (most European languages are supported), formatting of computer\n"
+"programs, and much more, all ready to use.  Furthermore, Lout is easily\n"
+"extended with definitions which are very much easier to write than troff of\n"
+"TeX macros because Lout is a high-level, purely functional language, the\n"
+"outcome of an eight-year research project that went back to the\n"
+"beginning."
+msgstr ""
+"Лоут систем обликовања докумената сада чита опис документа виоког нивоа\n"
+"сличан по стилу ЛаТеХ-у и даје излазну датотеку у Постскрипту или\n"
+"обичном тексту. \n"
+"\n"
+"Лоут нуди опсег напредних функција без премца, укључујући оптималан\n"
+"завршетак пасуса и странице, самосталан прелом реда, укључивање и\n"
+"стварање Постскрипт ЕПС датотеке, обликовање једначине, табеле,\n"
+"дијаграме, окретање и промену величине, поређане пописе, библиографске\n"
+"базе података, покретања заглавља и парних-непарних страница, самостално\n"
+"унакрсно упућивање, вишејезичне документе укључујући завршетак реда\n"
+"(већина европских језика је подржана), обликовање рачунарских програма,\n"
+"и још много тога, све спремно за употребу. Такође, Лоут је лако проширив\n"
+"одредницама које су много лакше за писање него трофф ТеХ макроа зато што\n"
+"је Лоут језик високог нивоа, потпуно функционалан, резултат пројекта\n"
+"осмогодишњег истраживања који се вратио на почетак."
+
+#: gnu/packages/recutils.scm:49
+msgid "Manipulate plain text files as databases"
+msgstr "Управљајте датотекама обичног текста као базама подтака"
+
+#: gnu/packages/recutils.scm:51
+msgid ""
+"GNU recutils is a set of tools and libraries to access human-editable,\n"
+"text-based databases called recfiles.  The data is stored as a sequence of\n"
+"records, each record containing an arbitrary number of named fields."
+msgstr ""
+"Гну рекутилс је скуп алата и библиотека за приступ базама података заснованим на\n"
+"тексту, званим „recfiles“ које корисници могу да мењају.  Подаци су ускладиштени\n"
+"као низ снимака, сваки снимак садржи одговарајући број именованих поља."
+
+#: guix/scripts/build.scm:51
+#, scheme-format
+msgid "package `~a' has no source~%"
+msgstr "пакет „~a“ нема извор~%"
+
+#: guix/scripts/build.scm:68
+msgid ""
+"Usage: guix build [OPTION]... PACKAGE-OR-DERIVATION...\n"
+"Build the given PACKAGE-OR-DERIVATION and return their output paths.\n"
+msgstr ""
+"Употреба: guix build [ОПЦИЈА]... ПАКЕТ-ИЛИ-ИЗВЕДНИЦА...\n"
+"Изграђује дати ПАКЕТ-ИЛИ-ИЗВЕДНИЦУ и исписује њихове путање излаза.\n"
+
+#: guix/scripts/build.scm:70
+msgid ""
+"\n"
+"  -e, --expression=EXPR  build the package EXPR evaluates to"
+msgstr ""
+"\n"
+"  -e, --expression=ИЗРАЗ  изграђује процене ИЗРАЗА пакета на"
+
+#: guix/scripts/build.scm:72
+msgid ""
+"\n"
+"  -S, --source           build the packages' source derivations"
+msgstr ""
+"\n"
+"  -S, --source           изграђује изведенице извора пакета"
+
+#: guix/scripts/build.scm:74
+msgid ""
+"\n"
+"  -s, --system=SYSTEM    attempt to build for SYSTEM--e.g., \"i686-linux\""
+msgstr ""
+"\n"
+"  -s, --system=СИСТЕМ    покушава да изгради за СИСТЕМ--e.g., „i686-linux“"
+
+#: guix/scripts/build.scm:76
+msgid ""
+"\n"
+"      --target=TRIPLET   cross-build for TRIPLET--e.g., \"armel-linux-gnu\""
+msgstr ""
+"\n"
+"      --target=ТРОЈКА   унакрсно изграђује за ТРОЈКУ--e.g., „armel-linux-gnu“"
+
+#: guix/scripts/build.scm:78
+msgid ""
+"\n"
+"  -d, --derivations      return the derivation paths of the given packages"
+msgstr ""
+"\n"
+"  -d, --derivations      исписује путање изведенице датог пакета"
+
+#: guix/scripts/build.scm:80
+msgid ""
+"\n"
+"  -K, --keep-failed      keep build tree of failed builds"
+msgstr ""
+"\n"
+"  -K, --keep-failed      задржава стабло изградње неуспелих изградњи"
+
+#: guix/scripts/build.scm:82
+msgid ""
+"\n"
+"  -n, --dry-run          do not build the derivations"
+msgstr ""
+"\n"
+"  -n, --dry-run          не изграђује изведенице"
+
+#: guix/scripts/build.scm:84 guix/scripts/package.scm:519
+msgid ""
+"\n"
+"      --fallback         fall back to building when the substituter fails"
+msgstr ""
+"\n"
+"      --fallback         враћа се на изградњу када заменик не успе"
+
+#: guix/scripts/build.scm:86 guix/scripts/package.scm:521
+msgid ""
+"\n"
+"      --no-substitutes   build instead of resorting to pre-built substitutes"
+msgstr ""
+"\n"
+"      --no-substitutes   изграђује уместо да поново ређа заменике предизградње"
+
+#: guix/scripts/build.scm:88 guix/scripts/package.scm:523
+msgid ""
+"\n"
+"      --max-silent-time=SECONDS\n"
+"                         mark the build as failed after SECONDS of silence"
+msgstr ""
+"\n"
+"      --max-silent-time=СЕКУНДЕ\n"
+"                         означава изградњу неупелом након СЕКУНДЕ мировања"
+
+#: guix/scripts/build.scm:91
+msgid ""
+"\n"
+"  -c, --cores=N          allow the use of up to N CPU cores for the build"
+msgstr ""
+"\n"
+"  -c, --cores=N          омогућава коришћење до N језгра процесора за изградњу"
+
+#: guix/scripts/build.scm:93
+msgid ""
+"\n"
+"  -r, --root=FILE        make FILE a symlink to the result, and register it\n"
+"                         as a garbage collector root"
+msgstr ""
+"\n"
+"  -r, --root=ДАТОТЕКА       чини ДАТОТЕКУ симболичком везом ка резултату, и бележи је\n"
+"                         као корен скупљача ђубра"
+
+#: guix/scripts/build.scm:96
+msgid ""
+"\n"
+"      --verbosity=LEVEL  use the given verbosity LEVEL"
+msgstr ""
+"\n"
+"      --verbosity=НИВО  користи дати НИВО опширности"
+
+#: guix/scripts/build.scm:99 guix/scripts/download.scm:53
+#: guix/scripts/package.scm:540 guix/scripts/gc.scm:58
+#: guix/scripts/hash.scm:51 guix/scripts/pull.scm:152
+#: guix/scripts/substitute-binary.scm:463
+msgid ""
+"\n"
+"  -h, --help             display this help and exit"
+msgstr ""
+"\n"
+"  -h, --help                  приказује ову помоћ и излази"
+
+#: guix/scripts/build.scm:101 guix/scripts/download.scm:55
+#: guix/scripts/package.scm:542 guix/scripts/gc.scm:60
+#: guix/scripts/hash.scm:53 guix/scripts/pull.scm:154
+#: guix/scripts/substitute-binary.scm:465
+msgid ""
+"\n"
+"  -V, --version          display version information and exit"
+msgstr ""
+"\n"
+"  -V, --version              приказује податке о издању и излази"
+
+#: guix/scripts/build.scm:141
+#, scheme-format
+msgid "~a: not a number~%"
+msgstr "~a: није број~%"
+
+#: guix/scripts/build.scm:176 guix/scripts/download.scm:96
+#: guix/scripts/package.scm:628 guix/scripts/gc.scm:152
+#: guix/scripts/pull.scm:181
+#, scheme-format
+msgid "~A: unrecognized option~%"
+msgstr "~A: непозната опција~%"
+
+#: guix/scripts/build.scm:202
+#, scheme-format
+msgid "failed to create GC root `~a': ~a~%"
+msgstr "нисам успео да направим ГЦ корен „~a“: ~a~%"
+
+#: guix/scripts/build.scm:226 guix/scripts/package.scm:674
+#, scheme-format
+msgid "ambiguous package specification `~a'~%"
+msgstr "нејасна одредница пакета „~a“~%"
+
+#: guix/scripts/build.scm:227 guix/scripts/package.scm:676
+#, scheme-format
+msgid "choosing ~a from ~a~%"
+msgstr "бирам ~a из ~a~%"
+
+#: guix/scripts/build.scm:233
+#, scheme-format
+msgid "~A: package not found for version ~a~%"
+msgstr "~A: нисам пронашао пакет за издање ~a~%"
+
+#: guix/scripts/build.scm:235
+#, scheme-format
+msgid "~A: unknown package~%"
+msgstr "~A: непознат пакет~%"
+
+#: guix/scripts/download.scm:44
+msgid ""
+"Usage: guix download [OPTION] URL\n"
+"Download the file at URL, add it to the store, and print its store path\n"
+"and the hash of its contents.\n"
+"\n"
+"Supported formats: 'nix-base32' (default), 'base32', and 'base16'\n"
+"('hex' and 'hexadecimal' can be used as well).\n"
+msgstr ""
+"Употреба: guix download [ОПЦИЈА] АДРЕСА\n"
+"Преузима датотеку са адресе, додаје је у складиште, и исписује њену путању\n"
+"складиштења и хеш њеног садржаја.\n"
+"\n"
+"Подржани записи: „nix-base32“ (основни), „base32“, и „base16“\n"
+"(„hex“ и „hexadecimal“ могу такође бити коришћени).\n"
+
+#: guix/scripts/download.scm:50 guix/scripts/hash.scm:48
+msgid ""
+"\n"
+"  -f, --format=FMT       write the hash in the given format"
+msgstr ""
+"\n"
+"  -f, --format=ФМТ       записује хеш у датом запису"
+
+#: guix/scripts/download.scm:73 guix/scripts/hash.scm:71
+#, scheme-format
+msgid "unsupported hash format: ~a~%"
+msgstr "неподржани запис хеша: ~a~%"
+
+#: guix/scripts/download.scm:106
+#, scheme-format
+msgid "~a: failed to parse URI~%"
+msgstr "~a: нисам успео да обрадим путању~%"
+
+#: guix/scripts/download.scm:117
+#, scheme-format
+msgid "~a: download failed~%"
+msgstr "~a: преузимање није успело~%"
+
+#: guix/scripts/package.scm:227
+#, scheme-format
+msgid "switching from generation ~a to ~a~%"
+msgstr "пребацујем се са генерације ~a на ~a~%"
+
+#: guix/scripts/package.scm:232
+#, scheme-format
+msgid "profile `~a' does not exist~%"
+msgstr "профил „~a“ не постоји~%"
+
+#: guix/scripts/package.scm:236
+#, scheme-format
+msgid "nothing to do: already at the empty profile~%"
+msgstr "ништа за урадити: већ сам у празном профилу~%"
+
+#: guix/scripts/package.scm:242
+#, scheme-format
+msgid "failed to build the empty profile~%"
+msgstr "нисам успео да изградим празан профил~%"
+
+#: guix/scripts/package.scm:413
+#, scheme-format
+msgid "looking for the latest release of GNU ~a..."
+msgstr "тражим последње издање Гнуа ~a..."
+
+#: guix/scripts/package.scm:417
+#, scheme-format
+msgid "~a: note: using ~a but ~a is available upstream~%"
+msgstr "~a: напомена: користим ~a али ~a је доступно узводно~%"
+
+#: guix/scripts/package.scm:481
+#, scheme-format
+msgid "The following environment variable definitions may be needed:~%"
+msgstr "Следеће одреднице променљиве окружења могу бити потребне:~%"
+
+#: guix/scripts/package.scm:496
+msgid ""
+"Usage: guix package [OPTION]... PACKAGES...\n"
+"Install, remove, or upgrade PACKAGES in a single transaction.\n"
+msgstr ""
+"Употреба: guix package [ОПЦИЈА]... ПАКЕТИ...\n"
+"Инсталирајте, уклоните, или доградите ПАКЕТЕ у једном прелазу.\n"
+
+#: guix/scripts/package.scm:498
+msgid ""
+"\n"
+"  -i, --install=PACKAGE  install PACKAGE"
+msgstr ""
+"\n"
+"  -i, --install=ПАКЕТ  инсталира ПАКЕТ"
+
+#: guix/scripts/package.scm:500
+msgid ""
+"\n"
+"  -e, --install-from-expression=EXP\n"
+"                         install the package EXP evaluates to"
+msgstr ""
+"\n"
+"  -e, --install-from-expression=ИЗР\n"
+"                         инсталира процене ИЗР пакета у"
+
+#: guix/scripts/package.scm:503
+msgid ""
+"\n"
+"  -r, --remove=PACKAGE   remove PACKAGE"
+msgstr ""
+"\n"
+"  -r, --remove=ПАКЕТ   уклања ПАКЕТ"
+
+#: guix/scripts/package.scm:505
+msgid ""
+"\n"
+"  -u, --upgrade[=REGEXP] upgrade all the installed packages matching REGEXP"
+msgstr ""
+"\n"
+"  -u, --upgrade[=РЕГИЗР] дограђује све инсталиране пакете који одговарају РЕГИЗРАЗУ"
+
+#: guix/scripts/package.scm:507
+msgid ""
+"\n"
+"      --roll-back        roll back to the previous generation"
+msgstr ""
+"\n"
+"      --roll-back        враћа се на претходну генерацију"
+
+#: guix/scripts/package.scm:509
+msgid ""
+"\n"
+"      --search-paths     display needed environment variable definitions"
+msgstr ""
+"\n"
+"      --search-paths     приказује потребне одреднице променљиве окружења"
+
+#: guix/scripts/package.scm:511
+msgid ""
+"\n"
+"  -l, --list-generations[=PATTERN]\n"
+"                         list generations matching PATTERN"
+msgstr ""
+"\n"
+"  -l, --list-generations[=ШАБЛОН]\n"
+"                         исписује генерације које одговарају ШАБЛОНУ"
+
+#: guix/scripts/package.scm:515
+msgid ""
+"\n"
+"  -p, --profile=PROFILE  use PROFILE instead of the user's default profile"
+msgstr ""
+"\n"
+"  -p, --profile=ПРОФИЛ   користи ПРОФИЛ уместо корисничког подразумеваног"
+
+#: guix/scripts/package.scm:517
+msgid ""
+"\n"
+"  -n, --dry-run          show what would be done without actually doing it"
+msgstr ""
+"\n"
+"  -n, --dry-run          показује шта би требало да се уради а да заправо ништа не ради"
+
+#: guix/scripts/package.scm:526
+msgid ""
+"\n"
+"      --bootstrap        use the bootstrap Guile to build the profile"
+msgstr ""
+"\n"
+"      --bootstrap        користи Гуиле почетног учитавања да изгради профил"
+
+#: guix/scripts/package.scm:528 guix/scripts/pull.scm:147
+msgid ""
+"\n"
+"      --verbose          produce verbose output"
+msgstr ""
+"\n"
+"      --verbose          ствара опширан излаз"
+
+#: guix/scripts/package.scm:531
+msgid ""
+"\n"
+"  -s, --search=REGEXP    search in synopsis and description using REGEXP"
+msgstr ""
+"\n"
+"  -s, --search=РЕГИЗР    тражи у скици и опису користећи РЕГИЗР"
+
+#: guix/scripts/package.scm:533
+msgid ""
+"\n"
+"  -I, --list-installed[=REGEXP]\n"
+"                         list installed packages matching REGEXP"
+msgstr ""
+"\n"
+"  -I, --list-installed[=РЕГИЗР]\n"
+"                         исписује инсталиране пакете који одговарају РЕГИЗРАЗУ"
+
+#: guix/scripts/package.scm:536
+msgid ""
+"\n"
+"  -A, --list-available[=REGEXP]\n"
+"                         list available packages matching REGEXP"
+msgstr ""
+"\n"
+"  -A, --list-available[=РЕГИЗР]\n"
+"                         исписује доступне пакете који одговарају РЕГИЗРАЗУ"
+
+#: guix/scripts/package.scm:630
+#, scheme-format
+msgid "~A: extraneous argument~%"
+msgstr "~A: страни аргумент~%"
+
+#: guix/scripts/package.scm:658
+#, scheme-format
+msgid "package `~a' lacks output `~a'~%"
+msgstr "пакету „~a“ недостаје излаз „~a“~%"
+
+#: guix/scripts/package.scm:682
+#, scheme-format
+msgid "~a: package not found~%"
+msgstr "~a: нисам пронашао пакет~%"
+
+#: guix/scripts/package.scm:705
+#, scheme-format
+msgid "Try \"info '(guix) Invoking guix package'\" for more information.~%"
+msgstr "Покушајте „info '(guix) Invoking guix package'“ за више података.~%"
+
+#: guix/scripts/package.scm:727
+#, scheme-format
+msgid "error: while creating directory `~a': ~a~%"
+msgstr "грешка: приликом стварања директоријума „~a“: ~a~%"
+
+#: guix/scripts/package.scm:731
+#, scheme-format
+msgid "Please create the `~a' directory, with you as the owner.~%"
+msgstr "Направите директоријум „~a“, у вашем власништву.~%"
+
+#: guix/scripts/package.scm:738
+#, scheme-format
+msgid "error: directory `~a' is not owned by you~%"
+msgstr "грешка: директоријум „~a“ није у вашем власништву~%"
+
+#: guix/scripts/package.scm:741
+#, scheme-format
+msgid "Please change the owner of `~a' to user ~s.~%"
+msgstr "Поставите као власника ~s над „~a“.~%"
+
+#: guix/scripts/package.scm:799
+#, scheme-format
+msgid "The following package would be removed:~% ~{~a~%~}~%"
+msgstr "Следећи пакети би требали бити уклоњени:~% ~{~a~%~}~%"
+
+#: guix/scripts/package.scm:804
+#, scheme-format
+msgid "The following package will be removed:~% ~{~a~%~}~%"
+msgstr "Следећи пакети ће бити уклоњени:~% ~{~a~%~}~%"
+
+#: guix/scripts/package.scm:816
+#, scheme-format
+msgid "The following package would be installed:~%~{~a~%~}~%"
+msgstr "Следећи пакети би требали бити инсталирани:~%~{~a~%~}~%"
+
+#: guix/scripts/package.scm:821
+#, scheme-format
+msgid "The following package will be installed:~%~{~a~%~}~%"
+msgstr "Следећи пакети ће бити инсталирани:~%~{~a~%~}~%"
+
+#: guix/scripts/package.scm:933
+#, scheme-format
+msgid "nothing to be done~%"
+msgstr "ништа неће бити урађено~%"
+
+#: guix/scripts/package.scm:944
+#, scheme-format
+msgid "~a package in profile~%"
+msgstr "~a пакет у профилу~%"
+
+#: guix/scripts/package.scm:959
+#, scheme-format
+msgid "Generation ~a\t~a~%"
+msgstr "Генерација ~a\t~a~%"
+
+#: guix/scripts/package.scm:977
+#, scheme-format
+msgid "profile '~a' does not exist~%"
+msgstr "профил „~a“ не постоји~%"
+
+#: guix/scripts/package.scm:986
+#, scheme-format
+msgid "invalid syntax: ~a~%"
+msgstr "неисправна синтакса: ~a~%"
+
+#: guix/scripts/gc.scm:39
+msgid ""
+"Usage: guix gc [OPTION]... PATHS...\n"
+"Invoke the garbage collector.\n"
+msgstr ""
+"Употреба: guix gc [ОПЦИЈА]... ПУТАЊЕ...\n"
+"Позовите скупљача ђубра.\n"
+
+#: guix/scripts/gc.scm:41
+msgid ""
+"\n"
+"  -C, --collect-garbage[=MIN]\n"
+"                         collect at least MIN bytes of garbage"
+msgstr ""
+"\n"
+"  -C, --collect-garbage[=НАЈМ]\n"
+"                         скупља барем НАЈМ бајтова ђубра"
+
+#: guix/scripts/gc.scm:44
+msgid ""
+"\n"
+"  -d, --delete           attempt to delete PATHS"
+msgstr ""
+"\n"
+"  -d, --delete           покушава да обрише ПУТАЊЕ"
+
+#: guix/scripts/gc.scm:46
+msgid ""
+"\n"
+"      --list-dead        list dead paths"
+msgstr ""
+"\n"
+"      --list-dead        исписује мртве путање"
+
+#: guix/scripts/gc.scm:48
+msgid ""
+"\n"
+"      --list-live        list live paths"
+msgstr ""
+"\n"
+"      --list-dead        исписује живе путање"
+
+#: guix/scripts/gc.scm:51
+msgid ""
+"\n"
+"      --references       list the references of PATHS"
+msgstr ""
+"\n"
+"      --references       исписује упуте ПУТАЊА"
+
+#: guix/scripts/gc.scm:53
+msgid ""
+"\n"
+"  -R, --requisites       list the requisites of PATHS"
+msgstr ""
+"\n"
+"      --references       исписује захтеве ПУТАЊА"
+
+#: guix/scripts/gc.scm:55
+msgid ""
+"\n"
+"      --referrers        list the referrers of PATHS"
+msgstr ""
+"\n"
+"      --referrers        исписује убрајаче ПУТАЊА"
+
+#: guix/scripts/gc.scm:92
+#, scheme-format
+msgid "unknown unit: ~a~%"
+msgstr "непозната јединица: ~a~%"
+
+#: guix/scripts/gc.scm:93
+#, scheme-format
+msgid "invalid number: ~a~%"
+msgstr "неисправан број: ~a~%"
+
+#: guix/scripts/gc.scm:114
+#, scheme-format
+msgid "invalid amount of storage: ~a~%"
+msgstr "неисправан износ складишта: ~a~%"
+
+#: guix/scripts/hash.scm:43
+msgid ""
+"Usage: guix hash [OPTION] FILE\n"
+"Return the cryptographic hash of FILE.\n"
+"\n"
+"Supported formats: 'nix-base32' (default), 'base32', and 'base16'\n"
+"('hex' and 'hexadecimal' can be used as well).\n"
+msgstr ""
+"Употреба: guix hash [ОПЦИЈА] ДАТОТЕКА\n"
+"Исписује шифрерски хеш ДАТОТЕКЕ.\n"
+"\n"
+"Подржани записи: „nix-base32“ (задато), „base32“, и „base16“\n"
+"(„hex“ и „hexadecimal“ могу такође бити коришћени).\n"
+
+#: guix/scripts/hash.scm:96
+#, scheme-format
+msgid "unrecognized option: ~a~%"
+msgstr "непозната опција: ~a~%"
+
+#: guix/scripts/hash.scm:123 guix/ui.scm:187
+#, scheme-format
+msgid "~a~%"
+msgstr "~a~%"
+
+#: guix/scripts/hash.scm:126
+#, scheme-format
+msgid "wrong number of arguments~%"
+msgstr "погрешан број аргумената~%"
+
+#: guix/scripts/pull.scm:145
+msgid ""
+"Usage: guix pull [OPTION]...\n"
+"Download and deploy the latest version of Guix.\n"
+msgstr ""
+"Употреба: guix pull [ОПЦИЈА]...\n"
+"Преузима и развија најновије издање Гуикса.\n"
+
+#: guix/scripts/pull.scm:149
+msgid ""
+"\n"
+"      --bootstrap        use the bootstrap Guile to build the new Guix"
+msgstr ""
+"\n"
+"      --bootstrap        користи Гуиле почетног учитавања да изгради нови Гуикс"
+
+#: guix/scripts/pull.scm:183
+#, scheme-format
+msgid "~A: unexpected argument~%"
+msgstr "~A: неочекивани аргумент~%"
+
+#: guix/scripts/pull.scm:192
+msgid "failed to download up-to-date source, exiting\n"
+msgstr "нисам успео да преузмем најсвежији извор, излазим\n"
+
+#: guix/scripts/pull.scm:211
+#, scheme-format
+msgid "updated ~a successfully deployed under `~a'~%"
+msgstr "ажурирани ~a је успешно развијен под „~a“~%"
+
+#: guix/scripts/pull.scm:214
+#, scheme-format
+msgid "failed to update Guix, check the build log~%"
+msgstr "нисам успео да ажурирам Гуикс, проверите дневник изградње~%"
+
+#: guix/scripts/pull.scm:216
+msgid "Guix already up to date\n"
+msgstr "Гуикс је већ ажуриран\n"
+
+#: guix/scripts/substitute-binary.scm:162
+#, scheme-format
+msgid "while fetching ~a: server is unresponsive~%"
+msgstr "приликом довлачења ~a: сервер не одговара~%"
+
+#: guix/scripts/substitute-binary.scm:164
+#, scheme-format
+msgid "try `--no-substitutes' if the problem persists~%"
+msgstr "покушајте „--no-substitutes“ ако се неприлике наставе~%"
+
+#: guix/scripts/substitute-binary.scm:425
+#, scheme-format
+msgid "Downloading, please wait...~%"
+msgstr "Преузима, молим сачекајте...~%"
+
+#: guix/scripts/substitute-binary.scm:427
+#, scheme-format
+msgid "(Please consider upgrading Guile to get proper progress report.)~%"
+msgstr "(Размотрите надоградњу Гуила да добијете извештај о његовом напредовању.)~%"
+
+#: guix/scripts/substitute-binary.scm:444
+#, scheme-format
+msgid "host name lookup error: ~a~%"
+msgstr "грешка тражења назива домаћина: ~a~%"
+
+#: guix/scripts/substitute-binary.scm:453
+msgid ""
+"Usage: guix substitute-binary [OPTION]...\n"
+"Internal tool to substitute a pre-built binary to a local build.\n"
+msgstr ""
+"Употреба: guix substitute-binary [ОПЦИЈА]...\n"
+"Унутрашњи алат за замену пре-изграђеног извршног у месну изградњу.\n"
+
+#: guix/scripts/substitute-binary.scm:455
+msgid ""
+"\n"
+"      --query            report on the availability of substitutes for the\n"
+"                         store file names passed on the standard input"
+msgstr ""
+"\n"
+"      --query            извештава о доступности заменика за називе датотека\n"
+"                         складишта прослеђених на стандардном улазу"
+
+#: guix/scripts/substitute-binary.scm:458
+msgid ""
+"\n"
+"      --substitute STORE-FILE DESTINATION\n"
+"                         download STORE-FILE and store it as a Nar in file\n"
+"                         DESTINATION"
+msgstr ""
+"\n"
+"      --substitute ОДРЕДИШТЕ СКЛАДИШНЕ-ДАТОТЕКЕ\n"
+"                         преузима СКЛАДИШНУ-ДАТОТЕКУ и смешта је као Нар удатотеци\n"
+"                         ОДРЕДИШТЕ"
+
+#: guix/scripts/substitute-binary.scm:567
+#, scheme-format
+msgid "~a: unrecognized options~%"
+msgstr "~a: непозната опција~%"
+
+#: guix/gnu-maintenance.scm:344
+#, scheme-format
+msgid "signature verification failed for `~a'~%"
+msgstr "није успела провера потписа за „~a“~%"
+
+#: guix/gnu-maintenance.scm:346
+#, scheme-format
+msgid "(could be because the public key is not in your keyring)~%"
+msgstr "(може бити зато што јавни кључ није у вашем привеску)~%"
+
+#: guix/gnu-maintenance.scm:421
+#, scheme-format
+msgid "~a: could not locate source file"
+msgstr "~a: не могу да пронађем изворну датотеку"
+
+#: guix/gnu-maintenance.scm:426
+#, scheme-format
+msgid "~a: ~a: no `version' field in source; skipping~%"
+msgstr "~a: ~a: нема поља „version“ у извору; прескачем~%"
+
+#: guix/ui.scm:120
+#, scheme-format
+msgid "failed to install locale: ~a~%"
+msgstr "нисам успео да инсталирам локалитет: ~a~%"
+
+#: guix/ui.scm:142
+#, scheme-format
+msgid ""
+"\n"
+"Report bugs to: ~a."
+msgstr ""
+"\n"
+"Грешке пријавите на: ~a."
+
+#: guix/ui.scm:144
+#, scheme-format
+msgid ""
+"\n"
+"~a home page: <~a>"
+msgstr ""
+"\n"
+"~a матична страница: <~a>"
+
+#: guix/ui.scm:146
+msgid ""
+"\n"
+"General help using GNU software: <http://www.gnu.org/gethelp/>"
+msgstr ""
+"\n"
+"Општа помоћ користећи ГНУ софтвер: <http://www.gnu.org/gethelp/>"
+
+#: guix/ui.scm:153
+#, scheme-format
+msgid "~a: invalid number~%"
+msgstr "~a: неисправан број~%"
+
+#: guix/ui.scm:164
+#, scheme-format
+msgid "~a:~a:~a: package `~a' has an invalid input: ~s~%"
+msgstr "~a:~a:~a: пакет „~a“ садржи неисправан улаз: ~s~%"
+
+#: guix/ui.scm:171
+#, scheme-format
+msgid "~a: ~a: build system `~a' does not support cross builds~%"
+msgstr "~a: ~a: систем изградње „~a“ не садржи унакрсне изградње~%"
+
+#: guix/ui.scm:176
+#, scheme-format
+msgid "failed to connect to `~a': ~a~%"
+msgstr "нисам успео да се повежем на „~a“: ~a~%"
+
+#: guix/ui.scm:181
+#, scheme-format
+msgid "build failed: ~a~%"
+msgstr "изградња није успела: ~a~%"
+
+#: guix/ui.scm:197
+#, scheme-format
+msgid "failed to read expression ~s: ~s~%"
+msgstr "нисам успео да прочитам израз ~s: ~s~%"
+
+#: guix/ui.scm:203
+#, scheme-format
+msgid "failed to evaluate expression `~a': ~s~%"
+msgstr "нисам успео да проценим израз „~a“: ~s~%"
+
+#: guix/ui.scm:207
+#, scheme-format
+msgid "expression `~s' does not evaluate to a package~%"
+msgstr "израз „~s“ се не процењује на пакет~%"
+
+#: guix/ui.scm:253
+#, scheme-format
+msgid "~:[The following derivation would be built:~%~{   ~a~%~}~;~]"
+msgstr "~:[Следећа изводница би требала бити изграђена:~%~{   ~a~%~}~;~]"
+
+#: guix/ui.scm:258
+#, scheme-format
+msgid "~:[The following file would be downloaded:~%~{   ~a~%~}~;~]"
+msgstr "~:[Следећа датотека би требала бити преузета:~%~{   ~a~%~}~;~]"
+
+#: guix/ui.scm:264
+#, scheme-format
+msgid "~:[The following derivation will be built:~%~{   ~a~%~}~;~]"
+msgstr "~:[Следећа изводница ће бити изграђена:~%~{   ~a~%~}~;~]"
+
+#: guix/ui.scm:269
+#, scheme-format
+msgid "~:[The following file will be downloaded:~%~{   ~a~%~}~;~]"
+msgstr "~:[Следећа датотека ће бити преузета:~%~{   ~a~%~}~;~]"
+
+#: guix/ui.scm:286
+msgid "<unknown location>"
+msgstr "<непознато место>"
+
+#: guix/ui.scm:314
+#, scheme-format
+msgid "failed to create configuration directory `~a': ~a~%"
+msgstr "нисам успео да направим директоријум подешавања „~a“: ~a~%"
+
+#: guix/ui.scm:390 guix/ui.scm:400
+msgid "unknown"
+msgstr "непознато"
+
+#: guix/ui.scm:484
+#, scheme-format
+msgid "invalid argument: ~a~%"
+msgstr "неисправан аргумент: ~a~%"
+
+#: guix/ui.scm:489
+#, scheme-format
+msgid "Try `guix --help' for more information.~%"
+msgstr "Пробајте „guix --help“ за више података.~%"
+
+#: guix/ui.scm:516
+msgid ""
+"Usage: guix COMMAND ARGS...\n"
+"Run COMMAND with ARGS.\n"
+msgstr ""
+"Употреба: guix НАРЕДБА АРГУМЕНТИ...\n"
+"Покрените НАРЕДБУ са АРГУМЕНТИМА.\n"
+
+#: guix/ui.scm:519
+msgid "COMMAND must be one of the sub-commands listed below:\n"
+msgstr "НАРЕДБА мора бити једна од подкоманди наведених испод:\n"
+
+#: guix/ui.scm:538
+#, scheme-format
+msgid "guix: ~a: command not found~%"
+msgstr "guix: ~a: нисам пронашао наредбу~%"
+
+#: guix/ui.scm:556
+#, scheme-format
+msgid "guix: missing command name~%"
+msgstr "guix: недостаје назив наредбе~%"
+
+#: guix/ui.scm:564
+#, scheme-format
+msgid "guix: unrecognized option '~a'~%"
+msgstr "guix: непозната опција „~a“~%"
+
+#: guix/http-client.scm:186
+#, scheme-format
+msgid "using Guile ~a, which does not support ~s encoding~%"
+msgstr "користим Гуиле ~a, који не подржава ~s кодирање~%"
+
+#: guix/http-client.scm:189
+#, scheme-format
+msgid "download failed; use a newer Guile~%"
+msgstr "преузимање није успело; користите новији Гуиле~%"
+
+#: guix/http-client.scm:201
+#, scheme-format
+msgid "following redirection to `~a'...~%"
+msgstr "пратим преусмеравање на „~a“...~%"
diff --git a/tests/derivations.scm b/tests/derivations.scm
index 273db22765..a4e073bf07 100644
--- a/tests/derivations.scm
+++ b/tests/derivations.scm
@@ -26,6 +26,7 @@
   #:use-module ((guix packages) #:select (package-derivation))
   #:use-module ((gnu packages) #:select (search-bootstrap-binary))
   #:use-module (gnu packages bootstrap)
+  #:use-module ((gnu packages guile) #:select (guile-1.8))
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-11)
   #:use-module (srfi srfi-26)
@@ -690,6 +691,57 @@ Deriver: ~a~%"
                                     ((p2 . _)
                                      (string<? p1 p2)))))))))))))
 
+
+(test-equal "map-derivation"
+  "hello"
+  (let* ((joke (package-derivation %store guile-1.8))
+         (good (package-derivation %store %bootstrap-guile))
+         (drv1 (build-expression->derivation %store "original-drv1"
+                                             (%current-system)
+                                             #f   ; systematically fail
+                                             '()
+                                             #:guile-for-build joke))
+         (drv2 (build-expression->derivation %store "original-drv2"
+                                             (%current-system)
+                                             '(call-with-output-file %output
+                                                (lambda (p)
+                                                  (display "hello" p)))
+                                             '()))
+         (drv3 (build-expression->derivation %store "drv-to-remap"
+                                             (%current-system)
+                                             '(let ((in (assoc-ref
+                                                         %build-inputs "in")))
+                                                (copy-file in %output))
+                                             `(("in" ,drv1))
+                                             #:guile-for-build joke))
+         (drv4 (map-derivation %store drv3 `((,drv1 . ,drv2)
+                                             (,joke . ,good))))
+         (out  (derivation->output-path drv4)))
+    (and (build-derivations %store (list (pk 'remapped drv4)))
+         (call-with-input-file out get-string-all))))
+
+(test-equal "map-derivation, sources"
+  "hello"
+  (let* ((script1   (add-text-to-store %store "fail.sh" "exit 1"))
+         (script2   (add-text-to-store %store "hi.sh" "echo -n hello > $out"))
+         (bash-full (package-derivation %store (@ (gnu packages bash) bash)))
+         (drv1      (derivation %store "drv-to-remap"
+
+                                ;; XXX: This wouldn't work in practice, but if
+                                ;; we append "/bin/bash" then we can't replace
+                                ;; it with the bootstrap bash, which is a
+                                ;; single file.
+                                (derivation->output-path bash-full)
+
+                                `("-e" ,script1)
+                                #:inputs `((,bash-full) (,script1))))
+         (drv2      (map-derivation %store drv1
+                                    `((,bash-full . ,%bash)
+                                      (,script1 . ,script2))))
+         (out       (derivation->output-path drv2)))
+    (and (build-derivations %store (list (pk 'remapped* drv2)))
+         (call-with-input-file out get-string-all))))
+
 (test-end)
 
 
diff --git a/tests/guix-build.sh b/tests/guix-build.sh
index 83de9f5285..391e7b9da3 100644
--- a/tests/guix-build.sh
+++ b/tests/guix-build.sh
@@ -36,6 +36,17 @@ guix build -e '(@@ (gnu packages base) %bootstrap-guile)' |	\
 guix build hello -d |				\
     grep -e '-hello-[0-9\.]\+\.drv$'
 
+# Should all return valid log files.
+drv="`guix build -d -e '(@@ (gnu packages base) %bootstrap-guile)'`"
+out="`guix build -e '(@@ (gnu packages base) %bootstrap-guile)'`"
+log="`guix build --log-file $drv`"
+echo "$log" | grep log/.*guile.*drv
+test -f "$log"
+test "`guix build -e '(@@ (gnu packages base) %bootstrap-guile)' --log-file`" \
+    = "$log"
+test "`guix build --log-file guile-bootstrap`" = "$log"
+test "`guix build --log-file $out`" = "$log"
+
 # Should fail because the name/version combination could not be found.
 if guix build hello-0.0.1 -n; then false; else true; fi
 
@@ -61,3 +72,11 @@ if guix build -n time-3.2;	# FAIL, version not found
 then false; else true; fi
 if guix build -n something-that-will-never-exist; # FAIL
 then false; else true; fi
+
+# Invoking a monadic procedure.
+guix build -e "(begin
+                 (use-modules (guix monads) (guix utils))
+                 (lambda ()
+                   (derivation-expression \"test\" (%current-system)
+                                          '(mkdir %output) '())))" \
+   --dry-run
diff --git a/tests/packages.scm b/tests/packages.scm
index 8d0d205f54..04e3b0bce9 100644
--- a/tests/packages.scm
+++ b/tests/packages.scm
@@ -81,6 +81,12 @@
                    (list version `(version ,version))))
          (not (package-field-location %bootstrap-guile 'does-not-exist)))))
 
+;; Make sure we don't change the file name to an absolute file name.
+(test-equal "package-field-location, relative file name"
+  (location-file (package-location %bootstrap-guile))
+  (with-fluids ((%file-port-name-canonicalization 'absolute))
+    (location-file (package-field-location %bootstrap-guile 'version))))
+
 (test-assert "package-transitive-inputs"
   (let* ((a (dummy-package "a"))
          (b (dummy-package "b"
@@ -122,6 +128,17 @@
                                              (package-source package))))
     (string=? file source)))
 
+(test-assert "package-source-derivation, indirect store path"
+  (let* ((dir     (add-to-store %store "guix-build" #t "sha256"
+                                (dirname (search-path %load-path
+                                                      "guix/build/utils.scm"))))
+         (package (package (inherit (dummy-package "p"))
+                    (source (string-append dir "/utils.scm"))))
+         (source  (package-source-derivation %store
+                                             (package-source package))))
+    (and (direct-store-path? source)
+         (string-suffix? "utils.scm" source))))
+
 (test-equal "package-source-derivation, snippet"
   "OK"
   (let* ((file   (search-bootstrap-binary "guile-2.0.9.tar.xz"
diff --git a/tests/store.scm b/tests/store.scm
index b5e0cb0eab..741803884d 100644
--- a/tests/store.scm
+++ b/tests/store.scm
@@ -65,6 +65,15 @@
    (string-append (%store-prefix)
                   "/foo/bar/283gqy39v3g9dxjy26rynl0zls82fmcg-guile-2.0.7")))
 
+(test-assert "direct-store-path?"
+  (and (direct-store-path?
+        (string-append (%store-prefix)
+                       "/283gqy39v3g9dxjy26rynl0zls82fmcg-guile-2.0.7"))
+       (not (direct-store-path?
+             (string-append
+              (%store-prefix)
+              "/283gqy39v3g9dxjy26rynl0zls82fmcg-guile-2.0.7/bin/guile")))))
+
 (test-skip (if %store 0 10))
 
 (test-assert "dead-paths"
@@ -140,6 +149,33 @@
          (equal? (valid-derivers %store o)
                  (list (derivation-file-name d))))))
 
+(test-assert "log-file, derivation"
+  (let* ((b (add-text-to-store %store "build" "echo $foo > $out" '()))
+         (s (add-to-store %store "bash" #t "sha256"
+                          (search-bootstrap-binary "bash"
+                                                   (%current-system))))
+         (d (derivation %store "the-thing"
+                        s `("-e" ,b)
+                        #:env-vars `(("foo" . ,(random-text)))
+                        #:inputs `((,b) (,s)))))
+    (and (build-derivations %store (list d))
+         (file-exists? (pk (log-file %store (derivation-file-name d)))))))
+
+(test-assert "log-file, output file name"
+  (let* ((b (add-text-to-store %store "build" "echo $foo > $out" '()))
+         (s (add-to-store %store "bash" #t "sha256"
+                          (search-bootstrap-binary "bash"
+                                                   (%current-system))))
+         (d (derivation %store "the-thing"
+                        s `("-e" ,b)
+                        #:env-vars `(("foo" . ,(random-text)))
+                        #:inputs `((,b) (,s))))
+         (o (derivation->output-path d)))
+    (and (build-derivations %store (list d))
+         (file-exists? (pk (log-file %store o)))
+         (string=? (log-file %store (derivation-file-name d))
+                   (log-file %store o)))))
+
 (test-assert "no substitutes"
   (let* ((s  (open-connection))
          (d1 (package-derivation s %bootstrap-guile (%current-system)))
diff --git a/tests/utils.scm b/tests/utils.scm
index 4f6ecc514d..017d9170fa 100644
--- a/tests/utils.scm
+++ b/tests/utils.scm
@@ -82,6 +82,14 @@
         (string-tokenize* "foo!bar!" "!")
         (string-tokenize* "foo+-+bar+-+baz" "+-+")))
 
+(test-equal "string-replace-substring"
+  '("foo BAR! baz"
+    "/gnu/store/chbouib"
+    "")
+  (list (string-replace-substring "foo bar baz" "bar" "BAR!")
+        (string-replace-substring "/nix/store/chbouib" "/nix/" "/gnu/")
+        (string-replace-substring "" "foo" "bar")))
+
 (test-equal "fold2, 1 list"
     (list (reverse (iota 5))
           (map - (reverse (iota 5))))