~ruther/guix-local

edae5b3d50692c25e29fe65fdc14ae3ccdce884d — Ludovic Courtès 12 years ago 1dba640 + e3aaefe
Merge branch 'master' into core-updates

Conflicts:
	guix/packages.scm
M README => README +7 -17
@@ 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/'

M build-aux/list-packages.scm => build-aux/list-packages.scm +37 -24
@@ 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)

M doc/guix.texi => doc/guix.texi +40 -6
@@ 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

M gnu-system.am => gnu-system.am +5 -0
@@ 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				\

A gnu/packages/apl.scm => gnu/packages/apl.scm +50 -0
@@ 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+)))

M gnu/packages/autogen.scm => gnu/packages/autogen.scm +2 -2
@@ 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)))

M gnu/packages/base.scm => gnu/packages/base.scm +2 -7
@@ 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

M gnu/packages/bison.scm => gnu/packages/bison.scm +2 -2
@@ 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)))

M gnu/packages/cflow.scm => gnu/packages/cflow.scm +4 -0
@@ 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

A gnu/packages/complexity.scm => gnu/packages/complexity.scm +49 -0
@@ 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+)))

M gnu/packages/freeipmi.scm => gnu/packages/freeipmi.scm +2 -2
@@ 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)))

M gnu/packages/gnunet.scm => gnu/packages/gnunet.scm +2 -2
@@ 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.

A gnu/packages/gnuzilla.scm => gnu/packages/gnuzilla.scm +97 -0
@@ 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

A gnu/packages/gvpe.scm => gnu/packages/gvpe.scm +48 -0
@@ 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+)))

M gnu/packages/kde.scm => gnu/packages/kde.scm +35 -2
@@ 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+)))

M gnu/packages/lightning.scm => gnu/packages/lightning.scm +2 -2
@@ 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

M gnu/packages/linux.scm => gnu/packages/linux.scm +2 -2
@@ 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)

A gnu/packages/parallel.scm => gnu/packages/parallel.scm +47 -0
@@ 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+)))

M gnu/packages/qt.scm => gnu/packages/qt.scm +42 -30
@@ 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)))))

M gnu/packages/sdl.scm => gnu/packages/sdl.scm +46 -1
@@ 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

M gnu/packages/version-control.scm => gnu/packages/version-control.scm +4 -2
@@ 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

M gnu/system/vm.scm => gnu/system/vm.scm +1 -1
@@ 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))


M guix/build-system/python.scm => guix/build-system/python.scm +2 -1
@@ 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

M guix/derivations.scm => guix/derivations.scm +109 -9
@@ 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.

M guix/packages.scm => guix/packages.scm +21 -19
@@ 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))))

M guix/scripts/build.scm => guix/scripts/build.scm +106 -75
@@ 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))))))))))

M guix/scripts/substitute-binary.scm => guix/scripts/substitute-binary.scm +24 -8
@@ 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"

M guix/store.scm => guix/store.scm +31 -1
@@ 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)))))

M guix/ui.scm => guix/ui.scm +18 -13
@@ 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))

M guix/utils.scm => guix/utils.scm +24 -0
@@ 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

M po/LINGUAS => po/LINGUAS +1 -0
@@ 4,3 4,4 @@ en@boldquot
en@quot
eo
pt_BR
sr

A po/sr.po => po/sr.po +1304 -0
@@ 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“...~%"

M tests/derivations.scm => tests/derivations.scm +52 -0
@@ 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)



M tests/guix-build.sh => tests/guix-build.sh +19 -0
@@ 36,6 36,17 @@ (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

M tests/packages.scm => tests/packages.scm +17 -0
@@ 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"

M tests/store.scm => tests/store.scm +36 -0
@@ 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)))

M tests/utils.scm => tests/utils.scm +8 -0
@@ 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))))